Commit b0c877be authored by 前端-黄佳鑫's avatar 前端-黄佳鑫

Merge branch 'dev' into test

parents 7f44cb57 4ad13e89
...@@ -127,13 +127,6 @@ const LogisticsRoute: RouterChild = { ...@@ -127,13 +127,6 @@ const LogisticsRoute: RouterChild = {
path: '/memberCenter/logisticsAbility/logisticsSubmit', path: '/memberCenter/logisticsAbility/logisticsSubmit',
name: 'logisticsSubmit', name: 'logisticsSubmit',
routes: [ routes: [
// 新增
{
path: '/memberCenter/logisticsAbility/logisticsSubmit/addLogistics',
name: 'addToOrderSubmit',
component: '@/pages/logistics/addLogistics',
hideInMenu: true
},
// 快递单查询 // 快递单查询
{ {
path: '/memberCenter/logisticsAbility/logisticsSubmit/orderSubmitSearchList', path: '/memberCenter/logisticsAbility/logisticsSubmit/orderSubmitSearchList',
...@@ -154,31 +147,17 @@ const LogisticsRoute: RouterChild = { ...@@ -154,31 +147,17 @@ const LogisticsRoute: RouterChild = {
component: '@/pages/logistics/logisticsSubmit/toOrderSumitList', component: '@/pages/logistics/logisticsSubmit/toOrderSumitList',
}, },
// 待提交物流单-新增 // 待提交物流单-新增
// {
// path: '/memberCenter/logisticsAbility/logisticsSubmit/toOrderSumitList/add',
// name: 'addToOrderSubmit',
// component: '@/pages/logistics/logisticsSubmit/toOrderSubmitDetail',
// hideInMenu: true
// },
// 待提交物流单-新增
{ {
path: '/memberCenter/logisticsAbility/logisticsSubmit/toOrderSumitList/add', path: '/memberCenter/logisticsAbility/logisticsSubmit/toOrderSumitList/add',
name: 'addToOrderSubmit', name: 'addToOrderSubmit',
component: '@/pages/logistics/logisticsSubmit/detail', component: '@/pages/logistics/addLogistics',
hideInMenu: true hideInMenu: true
}, },
// 待提交物流单-编辑 // 待提交物流单-编辑
// {
// path: '/memberCenter/logisticsAbility/logisticsSubmit/toOrderSumitList/edit',
// name: 'editToOrderSubmit',
// component: '@/pages/logistics/logisticsSubmit/toOrderSubmitDetail',
// hideInMenu: true
// },
// 待提交物流单-编辑
{ {
path: '/memberCenter/logisticsAbility/logisticsSubmit/toOrderSumitList/edit', path: '/memberCenter/logisticsAbility/logisticsSubmit/toOrderSumitList/edit',
name: 'editToOrderSubmit', name: 'editToOrderSubmit',
component: '@/pages/logistics/logisticsSubmit/detail', component: '@/pages/logistics/addLogistics',
hideInMenu: true hideInMenu: true
}, },
] ]
......
import React, { ReactText, useRef, useEffect, useLayoutEffect, useState } from 'react';
import { StandardTable } from 'god';
import { ISchema } from '@formily/antd';
import NestTable from '@/components/NestTable';
import { IStandardTableProps } from 'god/dist/src/standard-table';
import { Row, Col, Modal, Form, Radio } from 'antd';
import Search from '@/components//NiceForm/components/Search';
import SearchSelect from '@/components//NiceForm/components/SearchSelect';
import Submit from '@/components//NiceForm/components/Submit';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import DateSelect from '@/components//NiceForm/components/DateSelect';
import { PublicApi } from '@/services/api';
export interface ModalTableProps extends IStandardTableProps<any> {
width?: number,
confirm?: Function,
cancel?(),
visible?: boolean,
resetModal?: object,
useNestTable?: boolean, // 是否使用嵌套表格
nestColumns?: any[],
nestTableProps?: any,
// fix: 新增参数, 为true时每次开启弹窗都会重新reload接口
forceRender?: boolean,
invoicesNo?: string, // 对应订单号/售后单号
relevanceType?: number, //对应单据类型
}
export const logisticsDeliverySearchSchema: ISchema = {
type: 'object',
properties: {
invoicesNo: {
type: 'string',
'x-component': 'ModalSearch',
'x-component-props': {
placeholder: '单据号',
align: 'flex-left',
},
},
[FORM_FILTER_PATH]: {
type: 'object',
'x-component': 'flex-layout',
'x-component-props': {
rowStyle: {
flexWrap: 'nowrap',
style: {
marginRight: 0
}
},
colStyle: {
marginTop: 20,
},
},
properties: {
orderNo: {
type: 'string',
"x-component-props": {
placeholder: '会员名称',
style: {
width: 160
}
}
},
invoicesAbstract: {
type: 'string',
"x-component-props": {
placeholder: '单据摘要',
style: {
width: 160
}
}
},
"[startTransactionTime,endTransactionTime]": {
type: 'string',
"x-component": "dateSelect",
"x-component-props": {
placeholder: '单据时间(全部)',
}
},
submit: {
"x-component": 'Submit',
"x-mega-props": {
span: 1
},
"x-component-props": {
children: '查询'
}
}
}
}
}
}
export const otherSearchSchema: ISchema = {
type: 'object',
properties: {
applyNo: {
type: 'string',
'x-component': 'ModalSearch',
'x-component-props': {
placeholder: '申请单号',
align: 'flex-left',
},
},
[FORM_FILTER_PATH]: {
type: 'object',
'x-component': 'flex-layout',
'x-component-props': {
rowStyle: {
flexWrap: 'nowrap',
style: {
marginRight: 0
}
},
colStyle: {
marginTop: 20,
},
},
properties: {
memberName: {
type: 'string',
"x-component-props": {
placeholder: '会员名称',
style: {
width: 160
}
}
},
applyAbstract: {
type: 'string',
"x-component-props": {
placeholder: '单据摘要',
style: {
width: 160
}
}
},
"[startTime,endTime]": {
type: 'string',
"x-component": "dateSelect",
"x-component-props": {
placeholder: '单据时间(全部)',
}
},
submit: {
"x-component": 'Submit',
"x-mega-props": {
span: 1
},
"x-component-props": {
children: '查询'
}
}
}
}
}
}
const ModalTableOrder: React.FC<ModalTableProps> = (props) => {
const { width = 704, confirm, cancel, visible, currentRef, resetModal, forceRender, useNestTable = false, nestColumns, nestTableProps, invoicesNo, relevanceType, ...resetTable } = props
const selfRef = currentRef || useRef<any>({})
useEffect(() => {
if (visible && forceRender) {
// 重新开启时需reload接口
// fix: 去掉自动reload接口, 防止重复请求
// fix: 新增forceRender接口, 用于控制弹窗是否需要reload
selfRef.current.reload && selfRef.current.reload()
} else {
selfRef.current.resetField && selfRef.current.resetField({
validate: false
})
}
}, [visible])
const [form] = Form.useForm();
const [type, setType] = useState<number>(1);
const [modalTitle, setmodalTitle] = useState<string>('订单');
useEffect(() => {
console.log(relevanceType)
setType(relevanceType)
}, [visible])
useEffect(() => {
form.setFieldsValue({
radio: type
})
}, [type])
const fetchData = (parmas?: any) => {
return new Promise(resolve => {
switch (type) {
case 1:
PublicApi.getOrderLogisticsOrderList({ ...parmas }).then(res => {
if (res.code === 1000) {
res.data.data.forEach((item:any) => {
item.applyNo = item.orderNo
item.applyAbstract = item.orderThe
item.applyTime = item.createTime
})
resolve(res.data)
}
})
break;
case 2:
PublicApi.getAsReplaceGoodsPageToBeAddReturnByLogistics({ ...parmas }).then((res:any) => {
if (res.code === 1000) {
res.data.data.forEach((item:any) => {
item.id = item.applyId
})
resolve(res.data)
}
})
break;
case 3:
PublicApi.getAsReplaceGoodsPageToBeAddReplaceByLogistics({ ...parmas }).then((res:any) => {
if (res.code === 1000) {
res.data.data.forEach((item:any) => {
item.id = item.applyId
})
resolve(res.data)
}
})
break;
case 4:
PublicApi.getAsReturnGoodsPageByLogistics({ ...parmas }).then((res:any) => {
if (res.code === 1000) {
res.data.data.forEach((item:any) => {
item.id = item.applyId
})
resolve(res.data)
}
})
break;
}
})
}
return (
<Modal
width={width}
title={modalTitle}
onOk={() => confirm(type)}
onCancel={cancel}
visible={visible}
{...resetModal}
maskClosable={false}
>
{
useNestTable ? (
<NestTable
NestColumns={nestColumns}
className="common_tb"
rowClassName={(_, index) => (index % 2) === 0 && "tb_bg"}
{...nestTableProps}
/>
) : (
<StandardTable
tableType='small'
currentRef={selfRef}
fetchTableData={(params) => fetchData(params)}
formRender={(child, ps) => <Row justify='space-between' style={{ marginBottom: 16 }}>
<Col span={18} style={{ zIndex: 99 }}>
<Form form={form}>
<Form.Item name='radio' label='单据选择'>
<Radio.Group onChange={(e) => { setType(e.target.value); selfRef.current.reload(); }}>
<Radio value={1}>订单</Radio>
<Radio value={2}>换货申请单(退货发货)</Radio>
<Radio value={3}>换货申请单(换货发货)</Radio>
<Radio value={4}>退货申请单</Radio>
</Radio.Group>
</Form.Item>
</Form>
</Col>
<Col style={{ marginTop: 4 }}>{ps}</Col>
<Col span={18} style={{ zIndex: 99 }}>{child}</Col>
</Row >}
formilyProps={
{
ctx: {
schema: type === 1 ? logisticsDeliverySearchSchema : otherSearchSchema,
components: { ModalSearch: Search, SearchSelect, Submit, DateSelect },
effects: ($, actions) => {
useStateFilterSearchLinkageEffect(
$,
actions,
type === 1 ? 'invoicesNo' : 'applyNo',
FORM_FILTER_PATH,
);
}
}
}
}
{...resetTable}
/>
)
}
</Modal>
)
}
ModalTableOrder.defaultProps = {}
export default ModalTableOrder
import React, { useState, useEffect, useRef } from 'react'; import React, { useState, useEffect } from 'react';
import { history } from 'umi'; import { history } from 'umi';
import styles from './index.less'; import styles from './index.less';
import ReturnEle from '@/components/ReturnEle'; import ReturnEle from '@/components/ReturnEle';
import { ColumnType } from 'antd/lib/table/interface'; import { ColumnType } from 'antd/lib/table/interface';
import { Tabs, Button, Card, Form, Input, Select, Table, Row, Col, Statistic } from 'antd'; import { Tabs, Button, Card, Form, Input, Select, Table, Row, Col, Statistic, message, Badge } from 'antd';
import { PageHeaderWrapper } from '@ant-design/pro-layout'; import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { LinkOutlined, PlusOutlined } from '@ant-design/icons'; import { LinkOutlined, PlusOutlined } from '@ant-design/icons';
import { PublicApi } from '@/services/api'; import { PublicApi } from '@/services/api';
import ModalTable from '@/components/ModalTable'; import ModalTable from '@/components/ModalTable';
import { SelectGoodsColumns } from './components/columns'; import { SelectGoodsColumns } from './components/columns';
import { useRowSelectionTable } from '@/hooks/useRowSelectionTable' import { useRowSelectionTable } from '@/hooks/useRowSelectionTable';
import moment from 'moment';
import ModalTableOrder from './components/ModalTableOrder';
const { TabPane } = Tabs; const { TabPane } = Tabs;
const { Search } = Input; const { Search } = Input;
const { Option } = Select; const { Option } = Select;
...@@ -19,41 +21,52 @@ const layout: any = { ...@@ -19,41 +21,52 @@ const layout: any = {
wrapperCol: { span: 9 }, wrapperCol: { span: 9 },
labelAlign: "left" labelAlign: "left"
}; };
const TabFormErrors = (props) => {
return (
<Badge size="small" count={props.dot} offset={[6, -5]}>
{props.children}
</Badge>
)
}
/** /**
* @id: 订单id * @id: 订单id
* @shipmentOrderCode: 对应发货单号
* @relevanceOrderCode: 对应订单号/售后单
* @relevanceType: 1-销售订单 2-换货申请单(退货发货) 3-换货申请单(换货发货) 4-退货申请单 -> (自新建的时候才有这个)
* @createType: 1-物流能力创建2-销售发货订单创建3-生产通知订单创建4-换货申请创建5-换货处理创建6-退货申请创建,-> (默认没有为自新建) * @createType: 1-物流能力创建2-销售发货订单创建3-生产通知订单创建4-换货申请创建5-换货处理创建6-退货申请创建,-> (默认没有为自新建)
* ps: 列表得返回这个物流的是哪个createType的,才能进行对象的接口请求
*/ */
const AddLogistics: React.FC<{}> = () => { const AddLogistics: React.FC<{}> = () => {
const ref = useRef<any>(); const [detailList, setdetailList] = useState<any>([]); //表格列表数据
const { id, shipmentOrderCode, relevanceOrderCode, relevanceType } = history.location.query;
const [data, setdata] = useState<any>([]); //表格列表数据
const [query, setQuery] = useState<any>({}); //表提交的数据 const [query, setQuery] = useState<any>({}); //表提交的数据
const [visible, setvisible] = useState<boolean>(false); const [visible, setvisible] = useState<boolean>(false);
const [createType, setCreateType] = useState<number>(Number(history.location.query.createType)); /**创建方式 */ const [shippingvisible, setshippingvisible] = useState<boolean>(false);
const [goodsRowSelection, goodsRowCtl] = useRowSelectionTable({ customKey: 'productId' }) const [invoicesvisible, setinvoicesvisible] = useState<boolean>(false);
const [shippingRowSelection, shippingRowCtl] = useRowSelectionTable({ customKey: 'id', type: 'radio' });
const [invoicesRowSelection, invoicesRowCtl] = useRowSelectionTable({ customKey: 'id', type: 'radio' });
const [id, setId] = useState<any>(history.location.query.id);
const [relevanceType, setrelevanceType] = useState<number>(1)
const [createType, setCreateType] = useState<number>(Number(history.location.query.createType) || 1); /**创建方式 */
const [goodsRowSelection, goodsRowCtl] = useRowSelectionTable({ customKey: 'id' })
const [listShipperAddress, setListShipperAddress] = useState<any>([]); //发货地址 const [listShipperAddress, setListShipperAddress] = useState<any>([]); //发货地址
const [listMemberCompany, setListMemberCompany] = useState<any>([]); //物流服务商 const [listMemberCompany, setListMemberCompany] = useState<any>([]); //物流服务商
const [badge, setbadge] = useState<any>([0, 0]);
const [memberInfo, setmemberInfo] = useState<any>({});
const [form] = Form.useForm(); const [form] = Form.useForm();
const [goodsForm] = Form.useForm();
/**输入框输入 */ /**输入框输入 */
const inputOnchange = (id, e, name) => { const inputOnchange = (id, e, name) => {
const { value } = e.target const { value } = e.target
data.forEach(v => { detailList.forEach(v => {
if (v.productId === id) { if (v.productId === id) {
v[name] = value v[name] = value
} }
}) })
setdata([...data]) setdetailList([...detailList])
countTotal(name) countTotal(name)
} }
/** 计算总数 */ /** 计算总数 */
const countTotal = (name?: string) => { const countTotal = (name?: string) => {
let num: any = 0 let num: any = 0
data.forEach((item: any, idx: number) => { detailList.forEach((item: any, idx: number) => {
if (name === 'carton') { if (name === 'carton') {
num += item.carton ? Number(item.carton) : 0 num += item.carton ? Number(item.carton) : 0
} else if (name === 'weight') { } else if (name === 'weight') {
...@@ -136,7 +149,7 @@ const AddLogistics: React.FC<{}> = () => { ...@@ -136,7 +149,7 @@ const AddLogistics: React.FC<{}> = () => {
title: '操作', title: '操作',
key: 'options', key: 'options',
dataIndex: 'options', dataIndex: 'options',
render: (text: any, record: any, index: number) => <Button type='link' onClick={() => onHandleDelect(index)}>删除</Button> render: (text: any, record: any, index: number) => <Button type='link' onClick={() => handleDelect(index)}>删除</Button>
} }
] ]
/**接口请求 */ /**接口请求 */
...@@ -162,11 +175,6 @@ const AddLogistics: React.FC<{}> = () => { ...@@ -162,11 +175,6 @@ const AddLogistics: React.FC<{}> = () => {
setListShipperAddress(res) setListShipperAddress(res)
}).catch(error => console.log(error)); }).catch(error => console.log(error));
switch (Number(createType)) { switch (Number(createType)) {
case 1:
if(id) {
}
break;
case 2: case 2:
PublicApi.getWarehouseInvoicesDetails({ invoicesId: id }).then((res: any) => { PublicApi.getWarehouseInvoicesDetails({ invoicesId: id }).then((res: any) => {
if (res.code === 1000) { if (res.code === 1000) {
...@@ -177,7 +185,9 @@ const AddLogistics: React.FC<{}> = () => { ...@@ -177,7 +185,9 @@ const AddLogistics: React.FC<{}> = () => {
shipmentOrderCode: res.data.invoicesNo, shipmentOrderCode: res.data.invoicesNo,
relevanceOrderCode: res.data.orderNo, relevanceOrderCode: res.data.orderNo,
voucherTime: res.data.transactionTime, voucherTime: res.data.transactionTime,
externalState: res.data.state externalState: res.data.state,
shipmentOrderId: res.data.invoicesTypeId,
relevanceOrderId: res.data.relevanceInvoicesId,
} }
form.setFieldsValue(obj); form.setFieldsValue(obj);
setQuery({ ...obj }) setQuery({ ...obj })
...@@ -194,7 +204,9 @@ const AddLogistics: React.FC<{}> = () => { ...@@ -194,7 +204,9 @@ const AddLogistics: React.FC<{}> = () => {
shipmentOrderCode: res.data.deliveryNo, shipmentOrderCode: res.data.deliveryNo,
relevanceOrderCode: res.data.orderNo, relevanceOrderCode: res.data.orderNo,
voucherTime: res.data.transactionTime, voucherTime: res.data.transactionTime,
externalState: res.data.state externalState: res.data.state,
shipmentOrderId: res.data.deliveryId,
relevanceOrderId: res.data.id,
} }
form.setFieldsValue(obj); form.setFieldsValue(obj);
setQuery({ ...obj }) setQuery({ ...obj })
...@@ -202,7 +214,7 @@ const AddLogistics: React.FC<{}> = () => { ...@@ -202,7 +214,7 @@ const AddLogistics: React.FC<{}> = () => {
}) })
break; break;
case 4: case 4:
PublicApi.getAsReplaceGoodsPageReturnDetailByLogistics({replaceId: id}).then((res: any) => { PublicApi.getAsReplaceGoodsPageReturnDetailByLogistics({ replaceId: id }).then((res: any) => {
if (res.code === 1000) { if (res.code === 1000) {
const obj = { const obj = {
receiverName: res.data.receiveUserName, receiverName: res.data.receiveUserName,
...@@ -210,6 +222,7 @@ const AddLogistics: React.FC<{}> = () => { ...@@ -210,6 +222,7 @@ const AddLogistics: React.FC<{}> = () => {
receiverFullAddress: res.data.receiveAddress, receiverFullAddress: res.data.receiveAddress,
relevanceOrderCode: res.data.applyNo, relevanceOrderCode: res.data.applyNo,
voucherTime: res.data.applyTime, voucherTime: res.data.applyTime,
relevanceOrderId: res.data.applyId,
externalState: res.data.state, externalState: res.data.state,
digest: res.data.applyAbstract digest: res.data.applyAbstract
} }
...@@ -219,7 +232,7 @@ const AddLogistics: React.FC<{}> = () => { ...@@ -219,7 +232,7 @@ const AddLogistics: React.FC<{}> = () => {
}) })
break; break;
case 5: case 5:
PublicApi.getAsReplaceGoodsPageReplaceDetailByLogistics({replaceId: id}).then((res: any) => { PublicApi.getAsReplaceGoodsPageReplaceDetailByLogistics({ replaceId: id }).then((res: any) => {
if (res.code === 1000) { if (res.code === 1000) {
const obj = { const obj = {
receiverName: res.data.receiveUserName, receiverName: res.data.receiveUserName,
...@@ -227,6 +240,7 @@ const AddLogistics: React.FC<{}> = () => { ...@@ -227,6 +240,7 @@ const AddLogistics: React.FC<{}> = () => {
receiverFullAddress: res.data.receiveAddress, receiverFullAddress: res.data.receiveAddress,
relevanceOrderCode: res.data.applyNo, relevanceOrderCode: res.data.applyNo,
voucherTime: res.data.applyTime, voucherTime: res.data.applyTime,
relevanceOrderId: res.data.applyId,
externalState: res.data.state, externalState: res.data.state,
digest: res.data.applyAbstract digest: res.data.applyAbstract
} }
...@@ -243,6 +257,7 @@ const AddLogistics: React.FC<{}> = () => { ...@@ -243,6 +257,7 @@ const AddLogistics: React.FC<{}> = () => {
receiverPhone: res.data.receiveUserTel, receiverPhone: res.data.receiveUserTel,
receiverFullAddress: res.data.receiveAddress, receiverFullAddress: res.data.receiveAddress,
relevanceOrderCode: res.data.applyNo, relevanceOrderCode: res.data.applyNo,
relevanceOrderId: res.data.applyId,
voucherTime: res.data.applyTime, voucherTime: res.data.applyTime,
externalState: res.data.state, externalState: res.data.state,
digest: res.data.applyAbstract digest: res.data.applyAbstract
...@@ -253,6 +268,40 @@ const AddLogistics: React.FC<{}> = () => { ...@@ -253,6 +268,40 @@ const AddLogistics: React.FC<{}> = () => {
}) })
break; break;
} }
/**进来编辑的时候回显数据 */
const { pathname, query } = history.location;
const path = pathname.split('/')[pathname.split('/').length - 1];
if (path === 'edit') {
PublicApi.getLogisticsOrderWaitSubmitGet({ id: query.id }).then(res => {
if (res.code === 1000) {
const obj = {
id: query.id,
digest: res.data.digest,
createType: res.data.createType,
relevanceType: res.data.relevanceType,
companyName: res.data.companyName,
companyId: res.data.companyId,
logisticsOrderNo: res.data.logisticsOrderNo,
receiverName: res.data.receiverName,
receiverPhone: res.data.receiverPhone,
receiverFullAddress: res.data.receiverFullAddress,
shipmentOrderCode: res.data.shipmentOrderCode,
shipmentOrderId: res.data.shipmentOrderId,
relevanceOrderCode: res.data.relevanceOrderCode,
relevanceOrderId: res.data.relevanceOrderId,
voucherTime: res.data.invoicesTime,
externalState: res.data.status,
shipperAddressId: res.data.shipperAddressId,
shipperFullAddress: res.data.shipperFullAddress,
}
setQuery(obj)
setId(query.id)
setCreateType(res.data.createType)
setdetailList(res.data.detailList)
}
})
}
}, []) }, [])
/** 选择物流服务伤 */ /** 选择物流服务伤 */
...@@ -260,6 +309,7 @@ const AddLogistics: React.FC<{}> = () => { ...@@ -260,6 +309,7 @@ const AddLogistics: React.FC<{}> = () => {
const obj = { ...query } const obj = { ...query }
obj.companyId = option.value obj.companyId = option.value
obj.companyName = option.children obj.companyName = option.children
setmemberInfo({ memberId: option.memberid, roleId: option.roleid })
setQuery(obj) setQuery(obj)
} }
...@@ -275,35 +325,42 @@ const AddLogistics: React.FC<{}> = () => { ...@@ -275,35 +325,42 @@ const AddLogistics: React.FC<{}> = () => {
const fetchData = (params?: any) => { const fetchData = (params?: any) => {
return new Promise(resolve => { return new Promise(resolve => {
switch (Number(createType)) { switch (Number(createType)) {
case 1:
case 2: case 2:
case 3: case 3:
PublicApi.getWarehouseInvoicesProductList({...params, invoicesId: id}).then(res => { PublicApi.getWarehouseInvoicesProductList({ ...params, invoicesId: id }).then((res:any) => {
if(res.code === 1000) { if (res.code === 1000) {
res.data.data.forEach(item => {
item.category = item.categoryName
item.brand = item.brandName
})
resolve(res.data) resolve(res.data)
} }
}) })
break; break;
case 4: case 4:
PublicApi.getAsReplaceGoodsPageReturnCommodityByLogistics({...params, dataId: id}).then(res => { PublicApi.getAsReplaceGoodsPageReturnCommodityByLogistics({ ...params, dataId: id }).then(res => {
if(res.code === 1000) { if (res.code === 1000) {
resolve(res.data) resolve(res.data)
} }
}) })
break; break;
case 5: case 5:
PublicApi.getAsReplaceGoodsPageReplaceCommodityByLogistics({...params, dataId: id}).then(res => { PublicApi.getAsReplaceGoodsPageReplaceCommodityByLogistics({ ...params, dataId: id }).then(res => {
if(res.code === 1000) { if (res.code === 1000) {
resolve(res.data) resolve(res.data)
} }
}) })
break; break;
case 6: case 6:
PublicApi.getAsReturnGoodsPageCommodityByLogistics({...params, dataId: id}).then(res => { PublicApi.getAsReturnGoodsPageCommodityByLogistics({ ...params, dataId: id }).then(res => {
if(res.code === 1000) { if (res.code === 1000) {
resolve(res.data) resolve(res.data)
} }
}) })
break; break;
default:
break;
} }
}) })
} }
...@@ -325,21 +382,231 @@ const AddLogistics: React.FC<{}> = () => { ...@@ -325,21 +382,231 @@ const AddLogistics: React.FC<{}> = () => {
volume: item.volume volume: item.volume
}) })
}) })
setdata([...arr]) setdetailList([...arr])
setvisible(false) setvisible(false)
console.log(selectRow, 10086) console.log(selectRow, 10086)
} }
/***表头区域 */
const ShippingColumns: ColumnType<any>[] = [
{
title: '发货单号',
dataIndex: 'invoicesNo',
},
{
title: '对应订单号',
dataIndex: 'orderNo',
},
{
title: '单据摘要',
dataIndex: 'invoicesAbstract',
},
{
title: '对应仓库',
dataIndex: 'inventory',
},
{
title: '单据类型',
dataIndex: 'invoicesType',
},
{
title: '单据时间',
dataIndex: 'transactionTime',
render: (text: any) => <>{moment(text).format('YYYY-MM-DD HH:mm:ss')} </>
}
]
const invoicesColumns: ColumnType<any>[] = [
{
title: '单据号',
dataIndex: 'applyNo',
},
{
title: '单据摘要',
dataIndex: 'applyAbstract',
},
{
title: '会员名称',
dataIndex: 'memberName',
},
{
title: '单据时间',
dataIndex: 'applyTime',
}
]
/** 选择发货单 列表数据 */
const fetchShippingData = (params: any) => {
return new Promise(resolve => {
PublicApi.getWarehouseInvoicesList({ ...params }).then(res => {
if (res.code === 1000) {
resolve(res.data)
}
})
})
}
/**确定发货单 */
const handleShipping = () => {
const data = { ...query };
const selectRow = shippingRowCtl.selectRow[0]
data.shipmentOrderId = selectRow.id
data.shipmentOrderCode = selectRow.invoicesNo;//发货单号
data.receiverPhone = selectRow.phone;
data.receiverName = selectRow.receiverName;//收货方名称
data.receiverFullAddress = selectRow.fullAddress;
data.receiverMemberName = selectRow.memberName;
form.setFieldsValue({
shipmentOrderCode: selectRow.invoicesNo
})
setQuery({ ...data })
setId(selectRow.id)
setCreateType(1)
setshippingvisible(false);
}
/**确定对应订单号/售后单 */
const conditions = (selectRow: any) => {
const data = { ...query };
if (!data.shipmentOrderId) {
data.receiverPhone = selectRow.receiveUserTel;
data.receiverName = selectRow.receiveUserName;//收货方名称
data.receiverFullAddress = selectRow.receiveAddress;
data.receiverMemberName = selectRow.memberName;
data.receiverAddressId = selectRow.receiveId;
}
data.relevanceOrderId = selectRow.applyId
data.relevanceOrderCode = selectRow.applyNo
form.setFieldsValue({
relevanceOrderCode: selectRow.applyNo
})
setQuery({ ...data })
setId(selectRow.applyId)
}
/**确定选择对应订单号/售后单 */
const handleInvoices = (type: number) => {
const selectRow = invoicesRowCtl.selectRow[0]
const data = { ...query };
data.relevanceType = type;
setrelevanceType(type)
switch (type) {
case 1:
if (!data.shipmentOrderId) {
data.receiverPhone = selectRow.phone;
data.receiverName = selectRow.receiverName;//收货方名称
data.receiverAddressId = selectRow.receiverAddressId;
data.receiverFullAddress = selectRow.fullAddress;
data.receiverMemberName = selectRow.memberName;
}
data.relevanceOrderId = selectRow.id
data.relevanceOrderCode = selectRow.orderNo
form.setFieldsValue({
relevanceOrderCode: selectRow.orderNo
})
setQuery({ ...data });
setId(selectRow.id)
setCreateType(2)
break;
case 2:
conditions(selectRow)
setCreateType(4)
break;
case 3:
conditions(selectRow)
setCreateType(5)
break;
case 4:
conditions(selectRow)
setCreateType(6)
break;
}
setinvoicesvisible(false);
}
const handleDelect = (idx: number) => {
const list = [...detailList];
list.splice(idx, 1);
goodsRowCtl.setSelectRow(list)
goodsRowCtl.setSelectedRowKeys(list.map(v => v.productId));
setdetailList([...list])
goodsForm.resetFields();
}
/**打开选择商品 */
const handleVisible = () => {
console.log(query)
if(query.shipmentOrderId || query.relevanceOrderId) {
setvisible(true)
} else {
message.error('请先选择要操作的对应发货单号或对应订单号/售后单')
}
}
/** 提交数据 */
const handleSubmit = async () => {
const basicRef = await form.validateFields().then(res => { return true }).catch(error => { return error });
const goodsRef = await goodsForm.validateFields().then(res => { return true }).catch(error => { return error });
const data = [...badge]
if (basicRef.errorFields) {
data[0] = basicRef.errorFields.length;
setbadge(data);
} else {
data[0] = 0;
setbadge(data)
if (detailList.length > 0) {
if (goodsRef.errorFields) {
data[1] = goodsRef.errorFields.length;
setbadge(data);
} else {
data[1] = 0;
setbadge(data)
const { pathname } = history.location;
const path = pathname.split('/')[pathname.split('/').length - 1];
const params = {...query};
params.detailList = detailList
if(path === 'edit') {
PublicApi.postLogisticsOrderWaitSubmitUpdate({...params }).then(res => {
if (res.code === 1000) {
history.goBack()
}
})
} else {
PublicApi.postLogisticsOrderWaitSubmitAdd({ ...params }).then(res => {
if (res.code === 1000) {
history.goBack()
}
})
}
}
} else {
message.error('请先添加商品')
}
}
}
/**结算方式 */
useEffect(() => {
if (Object.keys(memberInfo).length > 0) {
PublicApi.getSettleAccountsPlatformConfigGetSettlementWay({ ...memberInfo }).then(res => {
if (res.code === 1000) {
const data = {...query}
data.settlementWay = res.data;
setQuery(data)
}
}).catch(error => {
message.error(error.message)
})
}
}, [memberInfo])
return ( return (
<PageHeaderWrapper <PageHeaderWrapper
onBack={() => history.goBack()} onBack={() => history.goBack()}
backIcon={<ReturnEle description='返回' />} backIcon={<ReturnEle description='返回' />}
extra={<Button type="primary"> 保存</Button>} extra={<Button type="primary" onClick={handleSubmit}> 保存</Button>}
> >
<Card> <Card>
<Tabs type="card"> <Tabs type="card">
{/** 基本信息 */} {/** 基本信息 */}
<TabPane key='tab-1' tab='基本信息' forceRender> <TabPane key='tab-1' tab={<TabFormErrors dot={badge[0]}>基本信息</TabFormErrors>} forceRender>
<Form <Form
{...layout} {...layout}
form={form} form={form}
...@@ -359,12 +626,12 @@ const AddLogistics: React.FC<{}> = () => { ...@@ -359,12 +626,12 @@ const AddLogistics: React.FC<{}> = () => {
</Form.Item> </Form.Item>
<Form.Item label="物流单号" name='receiverName1'><span></span></Form.Item> <Form.Item label="物流单号" name='receiverName1'><span></span></Form.Item>
<Form.Item label='对应发货单号' name='shipmentOrderCode'> <Form.Item label='对应发货单号' name='shipmentOrderCode'>
<Search disabled={createType} readOnly value={Object.keys(query).length > 0 ? query.shipmentOrderCode : undefined} enterButton={<><LinkOutlined /> 选择</>} /> <Search disabled={!!history.location.query.createType} readOnly value={Object.keys(query).length > 0 ? query.shipmentOrderCode : undefined} enterButton={<><LinkOutlined /> 选择</>} onSearch={() => setshippingvisible(true)} />
<Button type='link'>查看单号详情</Button> {query.shipmentOrderCode && <Button type='link'>查看单号详情</Button>}
</Form.Item> </Form.Item>
<Form.Item label='对应订单号/售后单' name='relevanceOrderCode'> <Form.Item label='对应订单号/售后单' name='relevanceOrderCode'>
<Search disabled={createType} readOnly value={Object.keys(query).length > 0 ? query.relevanceOrderCode : undefined} enterButton={<><LinkOutlined /> 选择</>} /> <Search disabled={!!history.location.query.createType} readOnly value={Object.keys(query).length > 0 ? query.relevanceOrderCode : undefined} enterButton={<><LinkOutlined /> 选择</>} onSearch={() => setinvoicesvisible(true)} />
<Button type='link'>查看单号详情</Button> {query.relevanceOrderCode && <Button type='link'>查看单号详情</Button>}
</Form.Item> </Form.Item>
<Form.Item label="收货方" name='receiverName'><span>{query.receiverName}/{query.receiverPhone}</span></Form.Item> <Form.Item label="收货方" name='receiverName'><span>{query.receiverName}/{query.receiverPhone}</span></Form.Item>
<Form.Item label="收货地址" name='receiverFullAddress'> <Form.Item label="收货地址" name='receiverFullAddress'>
...@@ -384,10 +651,10 @@ const AddLogistics: React.FC<{}> = () => { ...@@ -384,10 +651,10 @@ const AddLogistics: React.FC<{}> = () => {
</Form> </Form>
</TabPane> </TabPane>
{/** 物流单明细 */} {/** 物流单明细 */}
<TabPane key='tab-2' tab='物流单明细' forceRender> <TabPane key='tab-2' tab={<TabFormErrors dot={badge[1]}>物流单明细</TabFormErrors>} forceRender>
<Button block type='dashed' style={{ marginBottom: '24px' }} onClick={() => setvisible(true)}><PlusOutlined />选择商品</Button> <Button block type='dashed' style={{ marginBottom: '24px' }} onClick={handleVisible}><PlusOutlined />选择商品</Button>
<Form form={form}> <Form form={goodsForm}>
<Table columns={columns} dataSource={data} rowKey={'productId'} pagination={false} /> <Table columns={columns} dataSource={detailList} rowKey={'productId'} pagination={false} />
</Form> </Form>
<Row gutter={[24, 24]} style={{ margin: '0 0 0 65%', width: '35%' }}> <Row gutter={[24, 24]} style={{ margin: '0 0 0 65%', width: '35%' }}>
<Col span={8}><Statistic title="总箱数(箱)" value={countTotal('carton')} /></Col> <Col span={8}><Statistic title="总箱数(箱)" value={countTotal('carton')} /></Col>
...@@ -402,7 +669,7 @@ const AddLogistics: React.FC<{}> = () => { ...@@ -402,7 +669,7 @@ const AddLogistics: React.FC<{}> = () => {
<span></span> <span></span>
</Form.Item> </Form.Item>
<Form.Item label='结算方式'> <Form.Item label='结算方式'>
<span></span> <span>{query.settlementWay}</span>
</Form.Item> </Form.Item>
</Form> </Form>
</TabPane> </TabPane>
...@@ -410,11 +677,40 @@ const AddLogistics: React.FC<{}> = () => { ...@@ -410,11 +677,40 @@ const AddLogistics: React.FC<{}> = () => {
<TabPane key='tab-4' tab='流转记录' forceRender></TabPane> <TabPane key='tab-4' tab='流转记录' forceRender></TabPane>
</Tabs> </Tabs>
</Card> </Card>
{/* 选择对应发货单 - createType === 1的时候才显示 */}
<ModalTable
width={900}
modalTitle='选择发货单'
columns={ShippingColumns}
visible={shippingvisible}
rowSelection={shippingRowSelection}
cancel={() => setshippingvisible(false)}
confirm={handleShipping}
fetchTableData={params => fetchShippingData(params)}
resetModal={{ destroyOnClose: true }}
tableProps={{ rowKey: 'id' }}
modalType='logisticsDelivery'
searchName='invoicesNo'
/>
{/* 选择对应订单号/售后单 */}
<ModalTableOrder
width={900}
visible={invoicesvisible}
columns={invoicesColumns}
invoicesNo={query.invoicesNo}
relevanceType={relevanceType}
resetModal={{ destroyOnClose: true }}
tableProps={{ rowKey: 'id' }}
rowSelection={invoicesRowSelection}
cancel={() => setinvoicesvisible(false)}
confirm={handleInvoices}
/>
{/* 选择商品 */}
<ModalTable <ModalTable
modalTitle='选择商品' modalTitle='选择商品'
visible={visible} visible={visible}
columns={SelectGoodsColumns} columns={SelectGoodsColumns}
forceRender={true}
fetchTableData={(params) => fetchData(params)} fetchTableData={(params) => fetchData(params)}
cancel={() => setvisible(false)} cancel={() => setvisible(false)}
confirm={handleConfirm} confirm={handleConfirm}
...@@ -422,7 +718,7 @@ const AddLogistics: React.FC<{}> = () => { ...@@ -422,7 +718,7 @@ const AddLogistics: React.FC<{}> = () => {
modalType='selectGoodsSchema' modalType='selectGoodsSchema'
searchName='productName' searchName='productName'
tableProps={{ tableProps={{
rowKey: 'productId' rowKey: 'id'
}} }}
/> />
</PageHeaderWrapper> </PageHeaderWrapper>
......
...@@ -156,7 +156,7 @@ export const otherSearchSchema: ISchema = { ...@@ -156,7 +156,7 @@ export const otherSearchSchema: ISchema = {
} }
} }
const ModalTableOrder: React.FC<ModalTableProps> = (props) => { const ModalTableOrder: React.FC<ModalTableProps> = (props) => {
const { width = 704, confirm, cancel, visible, currentRef, resetModal, forceRender, useNestTable = false, nestColumns, nestTableProps, invoicesNo, relevanceType, ...resetTable } = props const { width = 704, confirm, cancel, visible, currentRef, resetModal, forceRender, useNestTable = false, nestColumns, nestTableProps, invoicesNo, relevanceType=1, ...resetTable } = props
const selfRef = currentRef || useRef<any>({}) const selfRef = currentRef || useRef<any>({})
useEffect(() => { useEffect(() => {
if (visible && forceRender) { if (visible && forceRender) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment