Commit 1900d374 authored by 前端-许佳敏's avatar 前端-许佳敏

修复金额联动

parent 90071447
......@@ -660,17 +660,12 @@ export enum SaleOrderInsideWorkState {
NOT_ACCEPTED_ORDER,
/**
* 确认支付结果到账
*/
CONFIRM_PAY_RESULT = 16,
/**
* 确认支付结果没到账
*/
CONFIRM_NOT_PAY_RESULT,
CONFIRM_NOT_PAY_RESULT = 17,
/**
* 待新增销售发货单
* 确认支付结果到账(待新增销售发货单)
*/
SALE_CREATE_DELIVED_ORDER,
......@@ -695,7 +690,7 @@ export enum SaleOrderInsideWorkState {
FILLING_ORDER,
/**
* 销售发货单待审核
* 销售发货单待审核(新增销售发货单成功)
*/
READY_DELEVED_APPROVED,
......
......@@ -8,6 +8,7 @@ export interface PayInfoCellProps {
dataIndex: string;
record: any;
colIndex: number,
handleChange(record: any, value: any)
handleSave: (record: any) => Promise<any>;
forceEdit: boolean,
formItem: string,
......@@ -55,6 +56,7 @@ export const PayInfoCell:React.FC<PayInfoCellProps> = ({
dataIndex,
record,
colIndex,
handleChange,
handleSave,
forceEdit,
formItem,
......@@ -73,11 +75,15 @@ export const PayInfoCell:React.FC<PayInfoCellProps> = ({
}
};
const handleInputChange = (e) => {
handleChange(record, e.target.value)
}
const chooseFormItem = (type) => {
const formId = dataIndex + colIndex
switch(type) {
case 'input': {
return <Input ref={formItemRef} onPressEnter={save} onBlur={save} {...formItemProps} id={formId}/>
return <Input ref={formItemRef} onPressEnter={save} onBlur={save} onChange={handleInputChange} {...formItemProps} id={formId}/>
}
case 'select': {
const { options, ...rest } = formItemProps
......
......@@ -58,12 +58,15 @@ const SelectAddress = (props: ISchemaFieldComponentProps) => {
})
const modalRef = useRef<any>({})
const { dataSource, showMore } = state
const { value, mutators, editable } = props
let { value = {}, mutators, editable } = props
const transformData = transformDefaultData(dataSource)
const showDataSource = showMore ? [...transformData].splice(0, 3) : transformData
if (typeof value === 'number') {
value = dataSource.find(v => v.id === value) || {}
}
// 当前选中的id
const checkedId = value ? value.id : dataSource[0]?.id
const checkedId = value.id || dataSource[0]?.id
const handleAdd = () => {
setMode('add')
......
import React, { useRef, useState, useEffect } from 'react'
import React, { useRef, useState, useEffect, useContext } from 'react'
import { history } from 'umi'
import { PageHeaderWrapper } from '@ant-design/pro-layout'
import ReutrnEle from '@/components/ReturnEle'
......@@ -58,8 +58,14 @@ export const MoneyTotalBox = registerVirtualBox('moneyTotalBox', props => {
const receiverAddressId = form.getFieldValue('deliveryAddresId')
const sum = data.reduce((prev, next) => prev + (next.price || 0), 0)
const [freePrice, setFreePrice] = useState<number>(0)
useEffect(() => {
if (sum + freePrice) {
form.notify('sumPrice', sum + freePrice)
}
}, [sum, freePrice])
useEffect(() => {
// 存在商品 并且有选择收货地址,则开始计算运费
if (data && data.length > 0 && receiverAddressId) {
// 筛选配送方式为物流的商品并且使用了运费模板
......@@ -67,10 +73,10 @@ export const MoneyTotalBox = registerVirtualBox('moneyTotalBox', props => {
if (logsiticsDataMaps.length > 0) {
PublicApi.postLogisticsFreightRemoteAddDetail({
orderProductList: logsiticsDataMaps.map(v => ({
templateId: v.templateId,
weight: v.weight
templateId: v.logistics.templateId,
weight: v.logistics.weight
})),
receiverAddressId
receiverAddressId: typeof receiverAddressId === 'object' ? receiverAddressId.id : receiverAddressId
}, {ttl: 10 * 1000, useCache: true, ctlType: 'none'}).then(res => {
if (res.code === 1000) {
setFreePrice(res.data)
......@@ -79,6 +85,8 @@ export const MoneyTotalBox = registerVirtualBox('moneyTotalBox', props => {
}
}
}, [data])
return <RowStyle>
<Col span={2}>
<div>合计金额</div>
......@@ -103,7 +111,7 @@ const PurchaseOrderDetail:React.FC<PurchaseOrderDetailProps> = (props) => {
const demandRef = useRef<any>({})
const [formLoading, setFormLoading] = useState(false)
const update = useUpdate()
const [productSumPrice, setProductSumPrice] = useState<number>(0)
const [initFormValue, setInitFormValue] = useState<any>(null)
const [paymentColumns, paymentComponents, paymentSave] = usePaymentInfo(addSchemaAction)
const { productAddButton, productRef, productColumns, productComponents, ...sectionProps } = useProductTable(addSchemaAction)
......@@ -246,14 +254,26 @@ const PurchaseOrderDetail:React.FC<PurchaseOrderDetailProps> = (props) => {
formItem: col.formItem,
formItemProps: col.formItemProps,
forceEdit: col.forceEdit,
handleSave: paymentSave
handleSave: paymentSave,
handleChange: (record, value = 100) => {
const payPrice = (value / 100 * productSumPrice).toFixed(2)
const newData = [...addSchemaAction.getFieldValue('paymentInformationResponses')];
const item = newData[index];
newData.splice(index, 1, {
...item,
payPrice
});
addSchemaAction.setFieldValue('paymentInformationResponses', newData)
}
}),
};
})
const providerValue = {
detailData: initFormValue,
schemaActions: addSchemaAction
schemaActions: addSchemaAction,
productSumPrice,
setProductSumPrice
}
return (
<PageHeaderWrapper
......@@ -289,6 +309,10 @@ const PurchaseOrderDetail:React.FC<PurchaseOrderDetailProps> = (props) => {
TheInvoiceList
}}
effects={($, ctx) => {
// 监听商品总价的变更, 此处逻辑需优化
$('sumPrice').subscribe(payload => {
setProductSumPrice(payload)
})
$('onFieldInputChange', 'orderModel').subscribe(state => {
const { editable } = state
// 手动切换过下单模式, 需重置受下单模式影响的字段
......
import { paymentInformationColumns } from '../constant'
import { PayInfoCell, EditableRow } from '../components/payInfoTableCell'
import { ISchemaFormActions, ISchemaFormAsyncActions } from '@formily/antd'
import { useEffect, useState, useRef } from 'react'
import { useEffect, useState, useRef, useContext } from 'react'
import { PublicApi } from '@/services/api'
import { ReadyAddOrderDetailContext } from '../../context'
export const usePaymentInfo = (ctx: ISchemaFormActions | ISchemaFormAsyncActions): any => {
const paywayData = useRef<any>({})
const [columns, setColumns] = useState<any[]>(paymentInformationColumns)
const { productSumPrice } = useContext(ReadyAddOrderDetailContext)
const components = {
body: {
row: EditableRow,
......@@ -74,6 +76,8 @@ export const usePaymentInfo = (ctx: ISchemaFormActions | ISchemaFormAsyncActions
...item,
...row,
});
console.log(newData)
console.log(productSumPrice)
ctx.setFieldValue('paymentInformationResponses', newData)
resolve({item, newData})
})
......
......@@ -42,10 +42,10 @@ const RowStyle = styled(props => <Row style={{marginTop: 12}} justify='end' {...
const modalPriceActions = createFormActions()
// 总计金额联动框
export const MoneyTotalBox = ({ dataSource, preview }) => {
const { orderProductRequests = [], receiverAddressId } = dataSource || {}
const { orderProductRequests = [], deliveryAddressInfo, freight = 0 } = dataSource || {}
const sum = orderProductRequests.reduce((prev, next) => prev + parseInt((next.price || 0)), 0)
// const modelRef = useRef<any>({})
const [freePrice, setFreePrice] = useState<number>(0)
// const [freePrice, setFreePrice] = useState<number>(0)
// const handleSetting = () => {
// modelRef.current.setVisible(true)
// }
......@@ -55,26 +55,26 @@ export const MoneyTotalBox = ({ dataSource, preview }) => {
// modelRef.current.setVisible(false)
// }
useEffect(() => {
// 存在商品 并且有选择收货地址,则开始计算运费
if (orderProductRequests && orderProductRequests.length > 0 && receiverAddressId) {
// 筛选配送方式为物流的商品并且使用了运费模板
const logsiticsDataMaps = orderProductRequests.filter(v => v.logistics && v.logistics.useTemplate && v.logistics.deliveryType === 1)
if (logsiticsDataMaps.length > 0) {
PublicApi.postLogisticsFreightRemoteAddDetail({
orderProductList: logsiticsDataMaps.map(v => ({
templateId: v.templateId,
weight: v.weight
})),
receiverAddressId
}, {ttl: 10 * 1000, useCache: true, ctlType: 'none'}).then(res => {
if (res.code === 1000) {
setFreePrice(res.data)
}
})
}
}
}, [orderProductRequests])
// useEffect(() => {
// // 存在商品 并且有选择收货地址,则开始计算运费
// if (orderProductRequests && orderProductRequests.length > 0 && deliveryAddressInfo) {
// // 筛选配送方式为物流的商品并且使用了运费模板
// const logsiticsDataMaps = orderProductRequests.filter(v => v.logistics && v.logistics.useTemplate && v.logistics.deliveryType === 1)
// if (logsiticsDataMaps.length > 0) {
// PublicApi.postLogisticsFreightRemoteAddDetail({
// orderProductList: logsiticsDataMaps.map(v => ({
// templateId: v.templateId,
// weight: v.weight
// })),
// receiverAddressId: deliveryAddressInfo.id
// }, {ttl: 10 * 1000, useCache: true, ctlType: 'none'}).then(res => {
// if (res.code === 1000) {
// setFreePrice(res.data)
// }
// })
// }
// }
// }, [orderProductRequests])
return <RowStyle>
<Col span={2}>
<div>合计金额</div>
......@@ -83,11 +83,11 @@ export const MoneyTotalBox = ({ dataSource, preview }) => {
<Col span={2}>
{/* <div>运费 { !preview && <SettingOutlined style={{marginLeft: 8}} onClick={handleSetting}/> }</div> */}
<div>运费</div>
<div>{freePrice}</div>
<div>{freight}</div>
</Col>
<Col span={2}>
<div>总计金额</div>
<div>{sum + freePrice}</div>
<div>{sum + freight}</div>
</Col>
{/* <ModalForm
modalTitle='设置运费'
......
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