Commit 9cd9f806 authored by XieZhiXiong's avatar XieZhiXiong

feat: 开发中

parent cef0eb1b
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-06 16:30:44
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-20 16:03:42
* @LastEditTime: 2020-11-27 17:16:30
* @Description: 待新增退货发货单
*/
import React, { useState, useRef } from 'react';
......@@ -18,6 +18,12 @@ import { ColumnType } from 'antd/lib/table/interface';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { createFormActions } from '@formily/antd';
import { PublicApi } from '@/services/api';
import {
DOC_TYPE_RETURN_INVOICE,
DEPENDENT_DOC_EXCHANGE,
EXCHANGE_INNER_STATUS_NOT_ADDED_RETURN_DELIVERY,
EXCHANGE_INNER_STATUS_UNREVIEWED_RETURN_DELIVERY,
} from '@/constants';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import EyePreview from '@/components/EyePreview';
......@@ -111,18 +117,25 @@ const ExchangePrAddDeliver: React.FC = () => {
align: 'center',
render: (text, record) => (
<>
<Button
type="link"
onClick={() => () => history.push(``)}
>
新增
</Button>
<Button
type="link"
onClick={() => handleVerify(record)}
>
审核
</Button>
{record.innerStatus === EXCHANGE_INNER_STATUS_NOT_ADDED_RETURN_DELIVERY && (
<Button
type="link"
onClick={
() =>
history.push(`/memberCenter/tranactionAbility/stockSellStorage/bills/add?relevanceInvoicesId=${record.replaceId}&invoicesTypeId=${DOC_TYPE_RETURN_INVOICE}&relevanceInvoices=${DEPENDENT_DOC_EXCHANGE}`)
}
>
新增
</Button>
)}
{record.innerStatus === EXCHANGE_INNER_STATUS_UNREVIEWED_RETURN_DELIVERY && (
<Button
type="link"
onClick={() => handleVerify(record)}
>
审核
</Button>
)}
</>
),
},
......
......@@ -47,15 +47,20 @@ const MemberUpgradeRule: React.FC<[]> = () => {
align: 'center',
},
{
title: '项目',
title: '升级规则',
dataIndex: 'ruleName',
align: 'center',
render: (text: any, record: any) => <span>{text}</span>,
},
{
title: '项目说明',
title: '升级规则说明',
dataIndex: 'remark',
align: 'center',
ellipsis: true,
},
{
title: '适用会员等级类型',
dataIndex: 'levelTypeName',
align: 'center',
},
{
title: '可获取的分值',
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-09-16 15:16:47
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-26 11:10:39
* @LastEditTime: 2020-11-27 19:05:56
* @Description: 联动逻辑相关
*/
import { Modal } from 'antd';
......@@ -439,7 +439,13 @@ export const useBusinessEffects = (context, actions) => {
// 根据 单据类型 联动 对应单据所选项
onFieldValueChange$('invoicesTypeId').subscribe(fieldState => {
const { originAsyncData = [] } = fieldState;
const current = originAsyncData.find(item => item.id === fieldState.value);
const params = getParams(fieldState.value);
if (current) {
linkage.value('invoicesTypeCode', current.number);
}
linkage.componentProps('orderNo', params);
});
......@@ -454,6 +460,7 @@ export const useBusinessEffects = (context, actions) => {
// 关联单据改变
onFieldValueChange$('orderNo').subscribe(fieldState => {
const invoicesTypeIdVal = getFieldValue('invoicesTypeId');
const relevanceInvoicesVal = getFieldValue('relevanceInvoices');
const first = fieldState.value && fieldState.value[0];
// 设置单据公用的数据相关
......@@ -534,28 +541,60 @@ export const useBusinessEffects = (context, actions) => {
}
const {
details = [],
deliveryType,
} = res.data;
const goodOptions = details.map(item => ({
label: `${item.productName}${item.orderNo ? '---' + item.orderNo : ''}`,
label: `${item.productName}${item.orderNo ? '---订单号:' + item.orderNo : ''}`,
value: item.productId,
}));
setFieldState('invoicesDetailsRequests.*.product', state => {
FormPath.setIn(state, 'originAsyncData', details.map(item => ({
...item,
// 这里的数据以采购、销售订单的为准
logistics: {
deliveryType, // 手动赋值配送方式,同一个通知单下的所有商品都是统一的配送方式
},
})));
FormPath.setIn(state, 'originAsyncData', details);
FormPath.setIn(state, 'props.enum', goodOptions);
});
});
break;
}
// 退货发货单、退货入库单
case DOC_TYPE_RETURN_INVOICE:
// 退货发货单
case DOC_TYPE_RETURN_INVOICE: {
switch (relevanceInvoicesVal) {
// 换货申请单
case DEPENDENT_DOC_EXCHANGE: {
// 获取明细数据 商品 数据
PublicApi.getAsReplaceGoodsPageReturnedGoods({
replaceId: first.id,
current: `${1}`,
pageSize: `${99999}`,
}).then(res => {
if (res.code !== 1000) {
return;
}
const {
data = [],
} = res.data;
const goodOptions = data.map(item => ({
label: `${item.productName}---订单号:${item.orderNo}`,
value: item.productId,
}));
setFieldState('invoicesDetailsRequests.*.product', state => {
FormPath.setIn(state, 'originAsyncData', data.map(item => ({
...item,
price: item.purchasePrice, // 与采购入库单、销售发货单统一
})));
FormPath.setIn(state, 'props.enum', goodOptions);
});
});
break;
}
// 退货申请单
case DEPENDENT_DOC_RETURN: {
break;
}
};
break;
}
// 退货入库单
case DOC_TYPE_RETURN_RECEIPT: {
break;
......@@ -599,6 +638,7 @@ export const useBusinessEffects = (context, actions) => {
const { name, originAsyncData, value } = fieldState;
const current = originAsyncData.find(item => item.productId === value);
const invoicesTypeIdVal = getFieldValue('invoicesTypeId');
const relevanceInvoicesVal = getFieldValue('relevanceInvoices');
// 取消选择
if (!value) {
......@@ -637,12 +677,19 @@ export const useBusinessEffects = (context, actions) => {
const invoicesDetailsRequestsValue = getFieldValue('invoicesDetailsRequests');
// 明细每项数据的 商品 未选中,物流方式设置成 ''
if (
invoicesDetailsRequestsValue.every(item => !item.product)
) {
setFieldValue('transport', '');
setFieldValue('deliveryType', null);
switch (invoicesTypeIdVal) {
// 采购入库单、销售发货单
case DOC_TYPE_PURCHASE_RECEIPT:
case DOC_TYPE_SALES_INVOICE: {
// 明细每项数据的 商品 未选中,物流方式设置成 ''
if (
invoicesDetailsRequestsValue.every(item => !item.product)
) {
setFieldValue('transport', '');
setFieldValue('deliveryType', null);
}
break;
}
}
// 额外的数据
......@@ -676,14 +723,6 @@ export const useBusinessEffects = (context, actions) => {
state.value = current.price ? current.price.toFixed(2) : null;
}
);
setFieldState(
FormPath.transform(name, /\d/, $1 => {
return `invoicesDetailsRequests.${$1}.amount`
}),
state => {
state.value = current.price ? `¥${(current.purchaseCount * current.price).toFixed(2)}` : null;
}
);
switch (invoicesTypeIdVal) {
// 采购入库单、销售发货单
......@@ -698,6 +737,46 @@ export const useBusinessEffects = (context, actions) => {
state.value = current.purchaseCount;
}
);
setFieldState(
FormPath.transform(name, /\d/, $1 => {
return `invoicesDetailsRequests.${$1}.amount`
}),
state => {
state.value = current.price ? `¥${(current.purchaseCount * current.price).toFixed(2)}` : null;
}
);
setTimeout(() => {
const invoicesDetailsRequestsValue = getFieldValue('invoicesDetailsRequests');
// 配送方式,一个单据只能有一个配送方式
setFieldState(
FormPath.transform(name, /\d/, $1 => {
return `invoicesDetailsRequests.${$1}.product`
}),
state => {
if (
current.logistics &&
invoicesDetailsRequestsValue.some(item => item.extraData.deliveryType !== current.logistics.deliveryType)
) {
state.errors = '商品配送方式不一致,请保持一次性';
} else {
state.errors = '';
}
}
);
// 明细每项数据的 商品 选中,物流方式设置成 为对应商品的物流方式
if (
current.logistics &&
current.logistics.deliveryType &&
invoicesDetailsRequestsValue.every(item => item.extraData.deliveryType === current.logistics.deliveryType)
) {
setFieldValue('transport', DELIVERY_TYPE[current.logistics.deliveryType]);
setFieldValue('deliveryType', current.logistics.deliveryType);
}
}, 0);
break;
}
......@@ -719,7 +798,34 @@ export const useBusinessEffects = (context, actions) => {
// 退货发货单、退货入库单
case DOC_TYPE_RETURN_INVOICE:
case DOC_TYPE_RETURN_RECEIPT: {
switch (relevanceInvoicesVal) {
// 换货申请单
case DEPENDENT_DOC_EXCHANGE: {
// 设置单据数量,取换货数量
setFieldState(
FormPath.transform(name, /\d/, $1 => {
return `invoicesDetailsRequests.${$1}.productCount`
}),
state => {
state.value = current.replaceCount;
}
);
setFieldState(
FormPath.transform(name, /\d/, $1 => {
return `invoicesDetailsRequests.${$1}.amount`
}),
state => {
state.value = current.price ? `¥${(current.replaceCount * current.price).toFixed(2)}` : null;
}
);
break;
}
// 退货申请单
case DEPENDENT_DOC_RETURN: {
break;
}
};
break;
}
......@@ -753,46 +859,18 @@ export const useBusinessEffects = (context, actions) => {
id: current.id, // 加工发货单需要,明细id
orderNo: current.orderNo, // 加工发货单需要,订单编号
processNum: current.processNum, // 加工发货单需要,加工数量
goodsCount: current.purchaseCount, // 采购数量
};
}
);
setTimeout(() => {
const invoicesDetailsRequestsValue = getFieldValue('invoicesDetailsRequests');
// 配送方式,一个单据只能有一个配送方式
setFieldState(
FormPath.transform(name, /\d/, $1 => {
return `invoicesDetailsRequests.${$1}.product`
}),
state => {
if (
current.logistics &&
invoicesDetailsRequestsValue.some(item => item.extraData.deliveryType !== current.logistics.deliveryType)
) {
state.errors = '商品配送方式不一致,请保持一次性';
} else {
state.errors = '';
}
}
);
// 明细每项数据的 商品 选中,物流方式设置成 为对应商品的物流方式
if (
current.logistics &&
current.logistics.deliveryType &&
invoicesDetailsRequestsValue.every(item => item.extraData.deliveryType === current.logistics.deliveryType)
) {
setFieldValue('transport', DELIVERY_TYPE[current.logistics.deliveryType]);
setFieldValue('deliveryType', current.logistics.deliveryType);
}
}, 0);
});
// 关联明细 商品数量 联动计算商品金额
onFieldInputChange$('invoicesDetailsRequests.*.productCount').subscribe(fieldState => {
const { name, value } = fieldState;
const invoicesTypeIdVal = getFieldValue('invoicesTypeId');
const relevanceInvoicesVal = getFieldValue('relevanceInvoices');
const originAsyncData = getFieldState(
FormPath.transform(name, /\d/, $1 => {
return `invoicesDetailsRequests.${$1}.product`
......@@ -807,8 +885,6 @@ export const useBusinessEffects = (context, actions) => {
);
const current = originAsyncData ? originAsyncData.find(item => item.productId === goodId) : null;
console.log('current', current)
if (!current) {
return;
}
......@@ -847,7 +923,26 @@ export const useBusinessEffects = (context, actions) => {
// 退货发货单、退货入库单
case DOC_TYPE_RETURN_INVOICE:
case DOC_TYPE_RETURN_RECEIPT: {
switch (relevanceInvoicesVal) {
// 换货申请单
case DEPENDENT_DOC_EXCHANGE: {
if (+value > current.replaceCount) {
Modal.destroyAll();
Modal.confirm({
title: '提示',
content: '单据数量已超过换货数量',
okText: '确认',
cancelText: '取消',
});
}
break;
}
// 退货申请单
case DEPENDENT_DOC_RETURN: {
break;
}
};
break;
}
......
......@@ -330,6 +330,8 @@ const BillsForm: React.FC<BillsFormProps> = ({
] :
[]
,
deliveryType,
transport: DELIVERY_TYPE[deliveryType],
});
}).finally(() => {
setInfoLoading(false);
......@@ -374,6 +376,8 @@ const BillsForm: React.FC<BillsFormProps> = ({
] :
[]
,
deliveryType,
transport: DELIVERY_TYPE[deliveryType],
});
}).finally(() => {
setInfoLoading(false);
......@@ -383,7 +387,59 @@ const BillsForm: React.FC<BillsFormProps> = ({
// 退货发货单
case DOC_TYPE_RETURN_INVOICE: {
switch (+relevanceInvoices) {
// 换货申请单
case DEPENDENT_DOC_EXCHANGE: {
setInfoLoading(true);
PublicApi.getAsReplaceGoodsGetDetailByConsumer({
replaceId: relevanceInvoicesId,
}).then(res => {
if (res.code !== 1000) {
return;
}
const {
supplierName,
returnGoodsAddress,
applyNo,
parentMemberId,
parentMemberRoleId,
} = res.data;
setBillInfo({
invoicesTypeId: intInvoicesTypeId,
relevanceInvoices: +relevanceInvoices,
orderNo:
relevanceInvoicesId ?
[
{
orderNo: applyNo,
id: +relevanceInvoicesId,
deliveryAddresId: returnGoodsAddress.receiveId,
memberName: supplierName,
fullAddress: returnGoodsAddress.receiveAddress || '',
receiverName: returnGoodsAddress.receiveUserName || '',
phone: returnGoodsAddress.receiveUserTel || '',
}
] :
[]
,
deliveryType: returnGoodsAddress.deliveryType,
transport: DELIVERY_TYPE[returnGoodsAddress.deliveryType],
supplyMembersName: supplierName,
supplyMembersId: parentMemberId,
supplyMembersRoleId: parentMemberRoleId,
});
}).finally(() => {
setInfoLoading(false);
});
break;
}
// 退货申请单
case DEPENDENT_DOC_RETURN: {
break;
}
}
break;
}
......@@ -443,6 +499,7 @@ const BillsForm: React.FC<BillsFormProps> = ({
const handleSubmit = value => {
const {
invoicesTypeId,
invoicesTypeCode,
orderNo,
transactionTime,
address,
......@@ -461,8 +518,6 @@ const BillsForm: React.FC<BillsFormProps> = ({
}));
const newTransactionTime = transactionTime ? moment(transactionTime).valueOf() : null;
console.log('value', value);
setSubmitLoading(true);
switch (invoicesTypeId) {
// 采购入库单
......@@ -491,7 +546,7 @@ const BillsForm: React.FC<BillsFormProps> = ({
return {
...rest,
...extraRest,
itemNmae: itemName,
goodsName: itemName,
};
}),
supplyMembersName: memberName,
......@@ -533,7 +588,7 @@ const BillsForm: React.FC<BillsFormProps> = ({
return {
...rest,
...extraRest,
itemNmae: itemName,
goodsName: itemName,
};
}),
})
......@@ -578,7 +633,7 @@ const BillsForm: React.FC<BillsFormProps> = ({
return {
...rest,
...extraRest,
itemNmae: itemName,
goodsName: itemName,
};
}),
createMemberName: memberName,
......@@ -620,7 +675,7 @@ const BillsForm: React.FC<BillsFormProps> = ({
return {
...rest,
...extraRest,
itemNmae: itemName,
goodsName: itemName,
};
}),
})
......@@ -709,7 +764,7 @@ const BillsForm: React.FC<BillsFormProps> = ({
...rest
} = item;
return {
...item,
...rest,
produceNoticeOrderDetailId: extraData.id,
orderNo: extraData.orderNo,
processNum: extraData.processNum,
......@@ -739,18 +794,72 @@ const BillsForm: React.FC<BillsFormProps> = ({
break;
}
// 退货发货单
case DOC_TYPE_RETURN_INVOICE: {
break;
}
// 退货入库单
// 退货发货单、退货入库单
case DOC_TYPE_RETURN_INVOICE:
case DOC_TYPE_RETURN_RECEIPT: {
if (!id) {
if (isEdit) {
return;
}
PublicApi.postWarehouseInvoicesAdd({
invoicesTypeCode: invoicesTypeCode,
invoicesAbstract: rest.invoicesAbstract,
memberName: memberName,
inventoryId: rest.inventoryId,
inventoryRole: rest.inventoryRole,
transactionTime: newTransactionTime,
orderNo: orderNo[0].orderNo,
deliveryAddresId: orderNo[0].deliveryAddresId,
receiverName: rest.receiverName,
fullAddress: rest.fullAddress,
phone: rest.phone,
deliveryType: rest.deliveryType,
invoicesDetailsRequests: newInvoicesDetailsRequests.map(item => {
const {
extraData = {},
amount,
productCount,
itemName,
...rest
} = item;
return {
...rest,
goodsName: itemName,
productModel: rest.specifications,
productName: extraData.productName,
storageCount: 0,
shipmentQuantity: productCount,
productCount: extraData.goodsCount,
};
}),
relevanceInvoicesId: orderNo[0].id,
relevanceInvoices: rest.relevanceInvoices,
supplyMembersName: billInfo.supplyMembersName,
supplyMembersId: billInfo.supplyMembersId,
supplyMembersRoleId: billInfo.supplyMembersRoleId,
invoicesTypeId,
})
.then(res => {
if (res.code !== 1000) {
return;
}
setUnsaved(false);
setTimeout(() => {
history.goBack();
}, 800);
}).finally(() => {
setSubmitLoading(false);
});
} else {
// update action
if (!isEdit) {
return;
}
}
break;
}
// 换货发货单
case DOC_TYPE_EXCHANGE_INVOICE: {
......
......@@ -232,6 +232,10 @@ export const addBillSchema: ISchema = {
},
required: true,
},
invoicesTypeCode: {
type: 'string',
display: false,
},
inventoryId: {
type: 'string',
title: '对应仓库',
......
......@@ -34,9 +34,9 @@ const Inventory: React.FC<{}> = () => {
const columns: ColumnType<any>[] = [
{
title: 'ID',
title: '货号',
align: 'center',
dataIndex: 'id',
dataIndex: 'itemNo',
},
{
title: '货品名称',
......
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