Commit ef633c31 authored by 李腾's avatar 李腾

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

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