Commit ef633c31 authored by 李腾's avatar 李腾

feat: 完成多物流发货以及编辑逻辑

parent 93dae43d
...@@ -4,7 +4,7 @@ const environment = 'sc'; ...@@ -4,7 +4,7 @@ const environment = 'sc';
const envAPi = { const envAPi = {
api: `https://security-${environment}.liangkebang.net`, //'https://security-xyqb.liangkebang.net', api: `https://security-${environment}.liangkebang.net`, //'https://security-xyqb.liangkebang.net',
kdspOpApi: `https://sc-merchant-api-${environment}.liangkebang.net`, kdspOpApi: `https://sc-merchant-api-${environment}.liangkebang.net`,
kdspApi: `https://sc-merchant-api-${environment}.liangkebang.net`, kdspApi: `http://192.168.68.87:7002`,
goodsApi: `https://sc-merchant-api-${environment}.liangkebang.net`, goodsApi: `https://sc-merchant-api-${environment}.liangkebang.net`,
querysApi: `https://sc-merchant-api-${environment}.liangkebang.net`, querysApi: `https://sc-merchant-api-${environment}.liangkebang.net`,
prologueDomain: `https://mall-${environment}.liangkebang.net`, prologueDomain: `https://mall-${environment}.liangkebang.net`,
......
...@@ -105,6 +105,7 @@ const AuditModal = props => { ...@@ -105,6 +105,7 @@ const AuditModal = props => {
}; };
const openLogisticsRecord = () => { const openLogisticsRecord = () => {
console.log(formData);
logisticsRecordModalRef.current.open(formData.orderNo); logisticsRecordModalRef.current.open(formData.orderNo);
}; };
......
...@@ -2,6 +2,7 @@ import React, { forwardRef, useImperativeHandle, useState, useRef, useEffect } f ...@@ -2,6 +2,7 @@ import React, { forwardRef, useImperativeHandle, useState, useRef, useEffect } f
import { Modal, Select, notification, Form, Input, Button, Checkbox } from 'antd'; import { Modal, Select, notification, Form, Input, Button, Checkbox } from 'antd';
import { PlusCircleOutlined, MinusCircleOutlined } from '@ant-design/icons'; import { PlusCircleOutlined, MinusCircleOutlined } from '@ant-design/icons';
import { userEnabled, userDisabled, userDelete } from '@/pages/systemManage/service'; import { userEnabled, userDisabled, userDelete } from '@/pages/systemManage/service';
import { apiDeliveriesAdd } from '../../service';
import styles from './index.less'; import styles from './index.less';
const FormComponent = (props, ref) => { const FormComponent = (props, ref) => {
...@@ -17,21 +18,26 @@ const FormComponent = (props, ref) => { ...@@ -17,21 +18,26 @@ const FormComponent = (props, ref) => {
}); });
const [initPackageList, setInitPackageList] = useState(() => { const [initPackageList, setInitPackageList] = useState(() => {
// 新增
if (packageList.length === 0) { if (packageList.length === 0) {
return [ return [
{ {
// 默认选中所有商品
skuInfoList: mchOrderSkuVoList.map(item => ({ skuNo: [item.skuNo], quantity: 1 })), skuInfoList: mchOrderSkuVoList.map(item => ({ skuNo: [item.skuNo], quantity: 1 })),
}, },
]; ];
} }
// 编辑
return packageList.map(item => ({ return packageList.map(item => ({
...item, ...item,
// 渲染所有商品选项,通过查找editData 是否存在判断是否选中
skuInfoList: mchOrderSkuVoList.map((skuInfo, index) => { skuInfoList: mchOrderSkuVoList.map((skuInfo, index) => {
console.log(item.skuInfoList); const skuNo = skuInfo.skuNo.toString();
const editData = item.skuInfoList[index]; const editData = item.skuInfoList.find(ele => ele.skuNo.toString() === skuNo);
if (editData) { if (editData) {
return { return {
...editData, ...editData,
skuNo: [skuInfo.skuNo],
}; };
} }
return {}; return {};
...@@ -41,10 +47,18 @@ const FormComponent = (props, ref) => { ...@@ -41,10 +47,18 @@ const FormComponent = (props, ref) => {
// eslint-disable-next-line consistent-return // eslint-disable-next-line consistent-return
const onCheckSkuInfoList = async (_, names) => { const onCheckSkuInfoList = async (_, names) => {
let hasNotCount = 0;
const count = names.filter(item => { const count = names.filter(item => {
console.log('sku', item.skuNo); if (item.skuNo && item.skuNo.length > 0 && !item.quantity) {
hasNotCount++;
}
return item.skuNo && item.skuNo.length; return item.skuNo && item.skuNo.length;
}).length; }).length;
console.log('onCheckSkuInfoList>', hasNotCount);
if (hasNotCount) {
return Promise.reject(new Error('请填写选择发货商品的数量'));
}
if (count === 0) { if (count === 0) {
return Promise.reject(new Error('至少选择一个商品')); return Promise.reject(new Error('至少选择一个商品'));
} }
...@@ -61,11 +75,6 @@ const FormComponent = (props, ref) => { ...@@ -61,11 +75,6 @@ const FormComponent = (props, ref) => {
serialNumber: [{ required: true, message: '请填写序列号' }], serialNumber: [{ required: true, message: '请填写序列号' }],
}; };
useEffect(() => {
console.log(initPackageList);
console.log(companys, mchOrderSkuVoList);
}, [record]);
useImperativeHandle(ref, () => ({ useImperativeHandle(ref, () => ({
form, form,
})); }));
...@@ -84,7 +93,7 @@ const FormComponent = (props, ref) => { ...@@ -84,7 +93,7 @@ const FormComponent = (props, ref) => {
return ( return (
<div className={styles['sku-list-box']}> <div className={styles['sku-list-box']}>
{skuFields.map(field => ( {skuFields.map(field => (
<div className={styles['sku-list']}> <div key={field.key} className={styles['sku-list']}>
<Form.Item className={styles['sku-list__goods-name']} name={[field.name, 'skuNo']}> <Form.Item className={styles['sku-list__goods-name']} name={[field.name, 'skuNo']}>
{getSkuOptions(field.name, parentFields.name)} {getSkuOptions(field.name, parentFields.name)}
</Form.Item> </Form.Item>
...@@ -110,11 +119,11 @@ const FormComponent = (props, ref) => { ...@@ -110,11 +119,11 @@ const FormComponent = (props, ref) => {
{(fields, { add, remove }, { errors }) => ( {(fields, { add, remove }, { errors }) => (
<> <>
{fields.map((field, index) => ( {fields.map((field, index) => (
<div className={styles['sku-list-module']}> <div key={field.key} className={styles['sku-list-module']}>
<Form.List name={[field.name, 'skuInfoList']} rules={formRules.skuInfoList}> <Form.List name={[field.name, 'skuInfoList']} rules={formRules.skuInfoList}>
{(skuFields, actions, { errors: err }) => ( {(skuFields, actions, { errors: err }) => (
<SkuFormList <SkuFormList
key={index.toString()} key={field.key}
skuFields={skuFields} skuFields={skuFields}
parentFields={field} parentFields={field}
errors={err} errors={err}
...@@ -144,7 +153,6 @@ const FormComponent = (props, ref) => { ...@@ -144,7 +153,6 @@ const FormComponent = (props, ref) => {
<PlusCircleOutlined <PlusCircleOutlined
onClick={() => { onClick={() => {
const currentPackageList = form.getFieldValue('packageList'); const currentPackageList = form.getFieldValue('packageList');
console.log(currentPackageList);
form.setFieldsValue({ form.setFieldsValue({
packageList: [...currentPackageList, addPackageList], packageList: [...currentPackageList, addPackageList],
}); });
...@@ -152,6 +160,7 @@ const FormComponent = (props, ref) => { ...@@ -152,6 +160,7 @@ const FormComponent = (props, ref) => {
/> />
<MinusCircleOutlined <MinusCircleOutlined
onClick={() => { onClick={() => {
if (fields.length <= 1) return;
remove(fields[fields.length - 1].name); remove(fields[fields.length - 1].name);
}} }}
/> />
...@@ -170,23 +179,36 @@ const UpdateStatusModal = (props, ref) => { ...@@ -170,23 +179,36 @@ const UpdateStatusModal = (props, ref) => {
const [visible, setVisible] = useState(false); const [visible, setVisible] = useState(false);
const [confirmLoading, setConfirmLoading] = useState(false); const [confirmLoading, setConfirmLoading] = useState(false);
const [record, setRecord] = useState(); const [record, setRecord] = useState();
const [oldPackageList, setOldPackageList] = useState();
// 提交前处理数据结构将skuNo的值从[skuNo]=>skuNo // 提交前处理数据结构将skuNo的值从[skuNo]=>skuNo
const onFilterParams = packageList => { const onFilterParams = packageList => {
const currentPackageList = JSON.parse(JSON.stringify(packageList)); const currentPackageList = JSON.parse(JSON.stringify(packageList));
return currentPackageList.map(item => { return currentPackageList.map(item => {
const { skuInfoList } = item; const { skuInfoList } = item;
/**
* 参数结构
* @var {object} item { expressCompanyCode, expressNo, serialNumber, skuInfoList }
* @var {array} skuInfoList [{skuNo, quantity}]
* @var {object} company { expressCompanyCode, expressCompanyName }
*/
const company = companys.find(ele => ele.expressCompanyCode === item.expressCompanyCode);
return { return {
...item, ...item,
...company,
skuInfoList: skuInfoList skuInfoList: skuInfoList
.filter(skuInfo => skuInfo.skuNo.length) .filter(skuInfo => skuInfo.skuNo?.length)
.map(skuInfo => ({ ...skuInfo, skuNo: skuInfo.skuNo[0] })), .map(skuInfo => ({
skuNo: Number(skuInfo.skuNo[0]),
quantity: Number(skuInfo.quantity),
})),
}; };
}); });
}; };
const open = item => { const open = item => {
setVisible(true); setVisible(true);
setOldPackageList(JSON.parse(JSON.stringify(item.packageList)));
setRecord(item); setRecord(item);
}; };
...@@ -196,9 +218,32 @@ const UpdateStatusModal = (props, ref) => { ...@@ -196,9 +218,32 @@ const UpdateStatusModal = (props, ref) => {
formRef.current.form.resetFields(); formRef.current.form.resetFields();
}; };
const onOk = () => { const onOk = async () => {
formRef.current.form.validateFields().then(values => { formRef.current.form.validateFields().then(async values => {
console.log('fieldsValue :>>', onFilterParams(values.packageList)); const packageList = onFilterParams(values.packageList);
oldPackageList.forEach((item, index) => {
if (JSON.stringify(item) !== JSON.stringify(packageList[index])) {
packageList[index].preExpressCompanyCode = item.expressCompanyCode;
packageList[index].preExpressCompanyName = item.expressCompanyName;
packageList[index].preExpressNo = item.expressNo;
}
});
const params = {
orderNo: record.orderNo,
packageList,
};
console.log('params', params);
const res = await apiDeliveriesAdd(params);
console.log('res>>', res);
if (res.code === '0000' && res.businessCode === '0000') {
notification.success({
message: '提交成功',
});
onCancel();
}
}); });
}; };
......
...@@ -421,7 +421,10 @@ const TableList = props => { ...@@ -421,7 +421,10 @@ const TableList = props => {
orderNo: record.orderNo, orderNo: record.orderNo,
}); });
multiLogisticsModalRef.current.open({ ...record, packageList: res.packageList }); multiLogisticsModalRef.current.open({
...record,
packageList: res.data.packageList || [],
});
}} }}
> >
{props.type === 2 ? '更新物流信息' : '填写物流信息'} {props.type === 2 ? '更新物流信息' : '填写物流信息'}
......
...@@ -152,44 +152,63 @@ export function apiDelayDeliverGoods(data) { ...@@ -152,44 +152,63 @@ export function apiDelayDeliverGoods(data) {
}); });
} }
// 查询多物流订单信息 /**
// * 多物流发货-查询多物流订单信息
* @param {*} params
* @returns
* @see http://yapi.quantgroups.com/project/389/interface/api/45840
*/
export function apiQueryOrderInfo(params) { export function apiQueryOrderInfo(params) {
return new Promise(resolve => { // return new Promise(resolve => {
setTimeout(() => { // setTimeout(() => {
resolve({ // resolve({
packageList: [ // packageList: [
{ // {
expressCompanyCode: 'yunda', // expressCompanyCode: 'yunda',
expressCompanyName: '', // expressCompanyName: '',
expressNo: 'YUNDA012345678', // expressNo: 'YUNDA012345678',
serialNumber: '0011223344', // serialNumber: '0011223344',
skuInfoList: [ // skuInfoList: [
{ // {
skuNo: ['529355424931841'], // skuNo: ['529355424931841'],
quantity: '2', // quantity: '2',
}, // },
{ // {
skuNo: ['530724210084865'], // skuNo: ['530724210084865'],
quantity: '12', // quantity: '12',
}, // },
], // ],
}, // },
{ // {
expressCompanyCode: 'yunda', // expressCompanyCode: 'yunda',
expressCompanyName: '', // expressCompanyName: '',
expressNo: 'YUNDA012345678', // expressNo: 'YUNDA012345678',
serialNumber: '0011223344', // serialNumber: '0011223344',
skuInfoList: [ // skuInfoList: [
{ // {
skuNo: ['529355424931841'], // skuNo: ['529355424931841'],
quantity: '2', // quantity: '2',
}, // },
], // ],
}, // },
], // ],
}); // });
}, 1000); // }, 1000);
// });
return request.get('/api/merchants/orders/deliveries/packages/detail', {
params,
prefix: config.kdspApi,
});
}
/**
* 多物流发货-新建发货/更新发货信息
* @param {*} data
* @returns
* @see http://yapi.quantgroups.com/project/389/interface/api/45816
*/
export function apiDeliveriesAdd(data) {
return request.post('/api/merchants/orders/deliveries/add', {
data,
prefix: config.kdspApi,
}); });
// return request.get('/api/merchants/orders/deliveries/packages/detail', params)
} }
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