Commit 1bab887c authored by 前端-钟卫鹏's avatar 前端-钟卫鹏

fix:处理订单积分支付跳转和生成微信二维码扫码支付

parent 42b124cb
...@@ -9,22 +9,24 @@ import moment from 'moment'; ...@@ -9,22 +9,24 @@ import moment from 'moment';
const { RangePicker } = DatePicker; const { RangePicker } = DatePicker;
const DateRangePickerUnix = (props) => { const DateRangePickerUnix = (props) => {
const { value, mutators } = props const { value, mutators } = props
const { placeholder, dataSource, ...rest } = props.props["x-component-props"] || {} const { placeholder, dataSource, ...rest } = props.props["x-component-props"] || {}
const handleChange = (dates, dateString) => { const handleChange = (dates, dateString) => {
if(dateString.length === 2) { if(dateString.length === 2) {
mutators.change([moment(dateString[0]).format('x'), moment(dateString[1]).format('x')]); mutators.change([dateString[0] ? moment(dateString[0]).format('x') : null, dateString[1] ? moment(dateString[1]).format('x') : null]);
} }
} }
return ( return (
<RangePicker <RangePicker
showTime={true} showTime={true}
style={{minWidth: 160}} style={{minWidth: 160}}
placeholder={placeholder} placeholder={placeholder}
onChange={handleChange} onChange={handleChange}
format="YYYY-MM-DD HH:mm:ss"
{...rest} {...rest}
/> />
) )
...@@ -34,4 +36,4 @@ DateRangePickerUnix.defaultProps = {} ...@@ -34,4 +36,4 @@ DateRangePickerUnix.defaultProps = {}
DateRangePickerUnix.isFieldComponent = true; DateRangePickerUnix.isFieldComponent = true;
export default DateRangePickerUnix export default DateRangePickerUnix
\ No newline at end of file
...@@ -38,9 +38,9 @@ const NumberRange = (props) => { ...@@ -38,9 +38,9 @@ const NumberRange = (props) => {
const [rangeValue, setrangeValue] = useState([]) const [rangeValue, setrangeValue] = useState([])
useEffect(() => { useEffect(() => {
if(rangeValue.length) { // if(rangeValue.length) {
mutators.change(rangeValue); mutators.change(rangeValue);
} // }
}, [rangeValue]) }, [rangeValue])
const loseBlur = (e, index) => { const loseBlur = (e, index) => {
...@@ -60,7 +60,8 @@ const NumberRange = (props) => { ...@@ -60,7 +60,8 @@ const NumberRange = (props) => {
textAlign: 'center' textAlign: 'center'
}} }}
placeholder={placeholder[0] || '最小值'} placeholder={placeholder[0] || '最小值'}
onBlur={(e) => loseBlur(e, 0)} onChange={(e) => loseBlur(e, 0)}
value={value[0] || null}
/> />
<Input <Input
className="site-input-split" className="site-input-split"
...@@ -81,7 +82,8 @@ const NumberRange = (props) => { ...@@ -81,7 +82,8 @@ const NumberRange = (props) => {
textAlign: 'center', textAlign: 'center',
}} }}
placeholder={placeholder[1] || '最大值'} placeholder={placeholder[1] || '最大值'}
onBlur={(e) => loseBlur(e, 1)} onChange={(e) => loseBlur(e, 1)}
value={value[1] || null}
/> />
</Input.Group> </Input.Group>
</RowStyleLayout> </RowStyleLayout>
......
...@@ -919,7 +919,7 @@ export enum SaleOrderInsideWorkState { ...@@ -919,7 +919,7 @@ export enum SaleOrderInsideWorkState {
READY_DELEVED_APPROVED, READY_DELEVED_APPROVED,
/** /**
* 待审核物流单(新增物流单成功) * 待确认物流单(新增物流单成功)
*/ */
DELIVERY_APPROVED_SUCCESS, DELIVERY_APPROVED_SUCCESS,
...@@ -1038,7 +1038,7 @@ export const SaleOrderInsideWorkStateTexts = { ...@@ -1038,7 +1038,7 @@ export const SaleOrderInsideWorkStateTexts = {
23: '待确认回单', 23: '待确认回单',
24: '订单归档', 24: '订单归档',
25: '待审核发货单', 25: '待审核发货单',
26: '待审核物流单', 26: '待确认物流单',
27: '待手工发货' 27: '待手工发货'
} }
...@@ -1772,7 +1772,7 @@ export const RETURN_OUTER_STATUS = { ...@@ -1772,7 +1772,7 @@ export const RETURN_OUTER_STATUS = {
/** /**
* 线上支付 * 线上支付
*/ */
export const PAY_WAY_ONLINE = 1; export const PAY_WAY_ONLINE = 1;
/** /**
* 线下支付 * 线下支付
*/ */
...@@ -1780,19 +1780,19 @@ export const PAY_WAY_OFFLINE = 2; ...@@ -1780,19 +1780,19 @@ export const PAY_WAY_OFFLINE = 2;
/** /**
* 授信支付 * 授信支付
*/ */
export const PAY_WAY_CREDIT = 3; export const PAY_WAY_CREDIT = 3;
/** /**
* 货到付款 * 货到付款
*/ */
export const PAY_WAY_COD = 4; export const PAY_WAY_COD = 4;
/** /**
* 支付方式对应中文 * 支付方式对应中文
*/ */
export const PAYWAY = { export const PAYWAY = {
[PAY_WAY_ONLINE]: '线上支付', [PAY_WAY_ONLINE]: '线上支付',
[PAY_WAY_OFFLINE]: '线下支付', [PAY_WAY_OFFLINE]: '线下支付',
[PAY_WAY_CREDIT]: '授信支付', [PAY_WAY_CREDIT]: '授信支付',
[PAY_WAY_COD]: '货到付款', [PAY_WAY_COD]: '货到付款',
}; };
...@@ -1833,12 +1833,12 @@ export const PAY_CHANNEL_COD = 7; ...@@ -1833,12 +1833,12 @@ export const PAY_CHANNEL_COD = 7;
* 支付渠道对应中文 * 支付渠道对应中文
*/ */
export const PAY_CHANNEL = { export const PAY_CHANNEL = {
[PAY_CHANNEL_INTEGRAL]: '积分支付', [PAY_CHANNEL_INTEGRAL]: '积分支付',
[PAY_CHANNEL_ALI]: '支付宝', [PAY_CHANNEL_ALI]: '支付宝',
[PAY_CHANNEL_WECHAT]: '微信', [PAY_CHANNEL_WECHAT]: '微信',
[PAY_CHANNEL_UNION]: '银联', [PAY_CHANNEL_UNION]: '银联',
[PAY_CHANNEL_BALANCE]: '余额', [PAY_CHANNEL_BALANCE]: '余额',
[PAY_CHANNEL_OFFLINE]: '线下支付', [PAY_CHANNEL_OFFLINE]: '线下支付',
[PAY_CHANNEL_CREDIT]: '授信', [PAY_CHANNEL_CREDIT]: '授信',
[PAY_CHANNEL_COD]: '货到付款', [PAY_CHANNEL_COD]: '货到付款',
}; };
\ No newline at end of file
...@@ -120,7 +120,7 @@ const SelectProduct:React.FC<IProps> = (props) => { ...@@ -120,7 +120,7 @@ const SelectProduct:React.FC<IProps> = (props) => {
useEffect(() => { useEffect(() => {
onRef(formProduct) onRef(formProduct)
formProduct.setFieldsValue({source: source}) formProduct.setFieldsValue({source: source})
// 获取会员角色列表 // 获取会员角色列表
PublicApi.getMemberManageChannelLowerRoleList().then(res => { PublicApi.getMemberManageChannelLowerRoleList().then(res => {
const { data } = res const { data } = res
...@@ -148,7 +148,7 @@ const SelectProduct:React.FC<IProps> = (props) => { ...@@ -148,7 +148,7 @@ const SelectProduct:React.FC<IProps> = (props) => {
state.visible = source===1 ? true : false state.visible = source===1 ? true : false
}) })
}, [visibleAddTabs]) }, [visibleAddTabs])
// 获取渠道商品 // 获取渠道商品
const fetchProductData = (params: any) => { const fetchProductData = (params: any) => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
...@@ -192,7 +192,7 @@ const SelectProduct:React.FC<IProps> = (props) => { ...@@ -192,7 +192,7 @@ const SelectProduct:React.FC<IProps> = (props) => {
{...layout} {...layout}
form={formProduct} form={formProduct}
ref={productFormRef} ref={productFormRef}
name="add-channel-origin" name="add-channel-origin"
labelAlign="left" labelAlign="left"
colon={false} colon={false}
> >
...@@ -220,12 +220,12 @@ const SelectProduct:React.FC<IProps> = (props) => { ...@@ -220,12 +220,12 @@ const SelectProduct:React.FC<IProps> = (props) => {
confirm={handleOkAddTabs} confirm={handleOkAddTabs}
cancel={handleCancelAddTabs} cancel={handleCancelAddTabs}
visible={visibleAddTabs} visible={visibleAddTabs}
resetModal={{destroyOnClose: true, forceRender: true}} resetModal={{destroyOnClose: true}}
columns={productColumns} columns={productColumns}
rowSelection={productRowSelection} rowSelection={productRowSelection}
fetchTableData={(params:any) => fetchProductData(params)} fetchTableData={(params:any) => fetchProductData(params)}
currentRef={productRef} currentRef={productRef}
forceRender={true} forceRender={false}
tableProps={{ tableProps={{
rowKey: 'id', rowKey: 'id',
onRow: (record) => ({ onRow: (record) => ({
...@@ -237,7 +237,7 @@ const SelectProduct:React.FC<IProps> = (props) => { ...@@ -237,7 +237,7 @@ const SelectProduct:React.FC<IProps> = (props) => {
}} }}
formilyProps={ formilyProps={
{ {
ctx: { ctx: {
schema: addChannelSchema, schema: addChannelSchema,
actions: productFormActions, actions: productFormActions,
components: { ModalSearch: Search, SearchSelect, Submit } , components: { ModalSearch: Search, SearchSelect, Submit } ,
...@@ -260,4 +260,4 @@ const SelectProduct:React.FC<IProps> = (props) => { ...@@ -260,4 +260,4 @@ const SelectProduct:React.FC<IProps> = (props) => {
</>) </>)
} }
export default observer(SelectProduct) export default observer(SelectProduct)
\ No newline at end of file
This diff is collapsed.
...@@ -3,45 +3,45 @@ ...@@ -3,45 +3,45 @@
* @Date: 2020-10-15 15:41:51 * @Date: 2020-10-15 15:41:51
* @LastEditors: XieZhiXiong * @LastEditors: XieZhiXiong
* @LastEditTime: 2020-10-28 14:49:44 * @LastEditTime: 2020-10-28 14:49:44
* @Description: * @Description:
*/ */
import { import {
MEMBER_STATUS_NORMAL, MEMBER_STATUS_NORMAL,
MEMBER_STATUS_FROZEN, MEMBER_STATUS_FROZEN,
CREDIT_REPAYMENT_STATUS_OUTSTANDING, CREDIT_REPAYMENT_STATUS_OUTSTANDING,
CREDIT_REPAYMENT_STATUS_UNCONFIRMED, CREDIT_REPAYMENT_STATUS_UNCONFIRMED,
CREDIT_REPAYMENT_STATUS_PAID, CREDIT_REPAYMENT_STATUS_PAID,
CREDIT_REPAYMENT_STATUS_OVERDUE, CREDIT_REPAYMENT_STATUS_OVERDUE,
CREDIT_OUTER_STATUS_UNCOMMITTED, CREDIT_OUTER_STATUS_UNCOMMITTED,
CREDIT_OUTER_STATUS_UNCONFIRMED, CREDIT_OUTER_STATUS_UNCONFIRMED,
CREDIT_OUTER_STATUS_SUCCESS, CREDIT_OUTER_STATUS_SUCCESS,
CREDIT_OUTER_STATUS_FAILED, CREDIT_OUTER_STATUS_FAILED,
CREDIT_INNER_STATUS_UNCOMMITTED, CREDIT_INNER_STATUS_UNCOMMITTED,
CREDIT_INNER_STATUS_COMMITTED, CREDIT_INNER_STATUS_COMMITTED,
CREDIT_INNER_STATUS_SUCCESS_1, CREDIT_INNER_STATUS_SUCCESS_1,
CREDIT_INNER_STATUS_SUCCESS_2, CREDIT_INNER_STATUS_SUCCESS_2,
CREDIT_INNER_STATUS_SUCCESS_3, CREDIT_INNER_STATUS_SUCCESS_3,
CREDIT_INNER_STATUS_FAILED, CREDIT_INNER_STATUS_FAILED,
CREDIT_INNER_STATUS_CONFIRM_SUCCESS, CREDIT_INNER_STATUS_CONFIRM_SUCCESS,
CREDIT_INNER_STATUS_CONFIRM_FAILED, CREDIT_INNER_STATUS_CONFIRM_FAILED,
CREDIT_STATUS_NOT_APPLIED, CREDIT_STATUS_NOT_APPLIED,
CREDIT_STATUS_APPLYING, CREDIT_STATUS_APPLYING,
CREDIT_STATUS_NORMAL, CREDIT_STATUS_NORMAL,
CREDIT_STATUS_FROZEN, CREDIT_STATUS_FROZEN,
} from '@/constants'; } from '@/constants';
// 授信状态 Badge map // 授信状态 Badge map
// 账单交易状态 // 账单交易状态
export const BILL_TRADE_STATUS_UNCONFIRMED = 1; // 待确认还款结果 export const BILL_TRADE_STATUS_UNCONFIRMED = 1; // 待确认还款结果
export const BILL_TRADE_STATUS_OUTSTANDIND = 2; // 确认未到账 export const BILL_TRADE_STATUS_OUTSTANDIND = 2; // 确认未到账
export const BILL_TRADE_STATUS_RECEIVED = 3; // 确认到账 export const BILL_TRADE_STATUS_RECEIVED = 3; // 确认到账
// 账单状态 StatusTag map // 账单状态 StatusTag map
export const BILL_TRADE_STATUS_TAB_MAP = { export const BILL_TRADE_STATUS_TAB_MAP = {
[BILL_TRADE_STATUS_UNCONFIRMED]: 'primary', [BILL_TRADE_STATUS_UNCONFIRMED]: 'primary',
[BILL_TRADE_STATUS_OUTSTANDIND]: 'danger', [BILL_TRADE_STATUS_OUTSTANDIND]: 'danger',
[BILL_TRADE_STATUS_RECEIVED]: 'success', [BILL_TRADE_STATUS_RECEIVED]: 'success',
}; };
// 还款状态 StatusTag map // 还款状态 StatusTag map
...@@ -49,43 +49,43 @@ export const CREDIT_REPAYMENT_STATUS_TAG_MAP = { ...@@ -49,43 +49,43 @@ export const CREDIT_REPAYMENT_STATUS_TAG_MAP = {
[CREDIT_REPAYMENT_STATUS_OUTSTANDING]: 'default', [CREDIT_REPAYMENT_STATUS_OUTSTANDING]: 'default',
[CREDIT_REPAYMENT_STATUS_UNCONFIRMED]: 'primary', [CREDIT_REPAYMENT_STATUS_UNCONFIRMED]: 'primary',
[CREDIT_REPAYMENT_STATUS_PAID]: 'success', [CREDIT_REPAYMENT_STATUS_PAID]: 'success',
[CREDIT_REPAYMENT_STATUS_OVERDUE]: 'danger', [CREDIT_REPAYMENT_STATUS_OVERDUE]: 'danger',
}; };
// 授信状态 Badge map // 授信状态 Badge map
export const CREDIT_STATUS_BADGE_MAP = { export const CREDIT_STATUS_BADGE_MAP = {
[CREDIT_STATUS_NOT_APPLIED]: '#FF991F', [CREDIT_STATUS_NOT_APPLIED]: '#FF991F',
[CREDIT_STATUS_APPLYING]: '#00B37A', [CREDIT_STATUS_APPLYING]: '#00B37A',
[CREDIT_STATUS_NORMAL]: '#00B37A', [CREDIT_STATUS_NORMAL]: '#00B37A',
[CREDIT_STATUS_FROZEN]: '#E63F3B', [CREDIT_STATUS_FROZEN]: '#E63F3B',
}; };
// 授信状态 StatusTag map // 授信状态 StatusTag map
export const CREDIT_STATUS_TAG_MAP = { export const CREDIT_STATUS_TAG_MAP = {
[CREDIT_STATUS_NOT_APPLIED]: 'warning', [CREDIT_STATUS_NOT_APPLIED]: 'warning',
[CREDIT_STATUS_APPLYING]: 'success', [CREDIT_STATUS_APPLYING]: 'success',
[CREDIT_STATUS_NORMAL]: 'success', [CREDIT_STATUS_NORMAL]: 'success',
[CREDIT_STATUS_FROZEN]: 'danger', [CREDIT_STATUS_FROZEN]: 'danger',
}; };
// 授信外部状态 // 授信外部状态
export const CREDIT_OUTER_STATUS_TAG_MAP = { export const CREDIT_OUTER_STATUS_TAG_MAP = {
[CREDIT_OUTER_STATUS_UNCOMMITTED]: 'default', [CREDIT_OUTER_STATUS_UNCOMMITTED]: 'default',
[CREDIT_OUTER_STATUS_UNCONFIRMED]: 'primary', [CREDIT_OUTER_STATUS_UNCONFIRMED]: 'primary',
[CREDIT_OUTER_STATUS_SUCCESS]: 'success', [CREDIT_OUTER_STATUS_SUCCESS]: 'success',
[CREDIT_OUTER_STATUS_FAILED]: 'danger', [CREDIT_OUTER_STATUS_FAILED]: 'danger',
}; };
// 授信内部部状态 Badge map // 授信内部部状态 Badge map
export const CREDIT_INNER_STATUS_BADGE_MAP = { export const CREDIT_INNER_STATUS_BADGE_MAP = {
[CREDIT_INNER_STATUS_UNCOMMITTED]: '#669EDE', [CREDIT_INNER_STATUS_UNCOMMITTED]: '#669EDE',
[CREDIT_INNER_STATUS_COMMITTED]: '#41CC9E', [CREDIT_INNER_STATUS_COMMITTED]: '#41CC9E',
[CREDIT_INNER_STATUS_SUCCESS_1]: '#41CC9E', [CREDIT_INNER_STATUS_SUCCESS_1]: '#41CC9E',
[CREDIT_INNER_STATUS_SUCCESS_2]: '#41CC9E', [CREDIT_INNER_STATUS_SUCCESS_2]: '#41CC9E',
[CREDIT_INNER_STATUS_SUCCESS_3]: '#41CC9E', [CREDIT_INNER_STATUS_SUCCESS_3]: '#41CC9E',
[CREDIT_INNER_STATUS_FAILED]: '#EF6260', [CREDIT_INNER_STATUS_FAILED]: '#EF6260',
[CREDIT_INNER_STATUS_CONFIRM_SUCCESS]: '#41CC9E', [CREDIT_INNER_STATUS_CONFIRM_SUCCESS]: '#41CC9E',
[CREDIT_INNER_STATUS_CONFIRM_FAILED]: '#EF6260', [CREDIT_INNER_STATUS_CONFIRM_FAILED]: '#EF6260',
}; };
...@@ -108,8 +108,8 @@ export const CREDIT_INNER_STATUS_BADGE_MAP = { ...@@ -108,8 +108,8 @@ export const CREDIT_INNER_STATUS_BADGE_MAP = {
// 流转状态 // 流转状态
export const moveStatusMap = { export const moveStatusMap = {
'1': { title: '冻结', type: 'danger' }, '2': { title: '冻结', type: 'danger' },
'2': { title: '解冻', type: 'success' }, '1': { title: '解冻', type: 'success' },
} }
// 会员状态 // 会员状态
...@@ -146,4 +146,4 @@ export const accountMemberType = { ...@@ -146,4 +146,4 @@ export const accountMemberType = {
'2': '企业个人会员', '2': '企业个人会员',
'3': '渠道会员', '3': '渠道会员',
'4': '渠道个人会员', '4': '渠道个人会员',
} }
\ No newline at end of file
...@@ -11,6 +11,7 @@ import { history } from 'umi' ...@@ -11,6 +11,7 @@ import { history } from 'umi'
import { useHttpRequest } from '@/hooks/useHttpRequest' import { useHttpRequest } from '@/hooks/useHttpRequest'
import { encryptedByAES } from '@/utils/cryptoAes' import { encryptedByAES } from '@/utils/cryptoAes'
import QRCode from 'qrcode' import QRCode from 'qrcode'
import { cond } from 'lodash'
export interface OrderPayModalProps { export interface OrderPayModalProps {
currentRef: any, currentRef: any,
...@@ -68,19 +69,20 @@ const payTextList = ["", ...@@ -68,19 +69,20 @@ const payTextList = ["",
'货到付款' '货到付款'
] ]
let timeChange; // Tiemr
const OrderPayModal: React.FC<OrderPayModalProps> = (props) => { const OrderPayModal: React.FC<OrderPayModalProps> = (props) => {
const formRef = useRef<any>({}) const formRef = useRef<any>({})
const { id } = usePageStatus() const { id } = usePageStatus()
const { data, payList, currentPayInfoId } = useContext(OrderDetailContext) const { data, payList, currentPayInfoId } = useContext(OrderDetailContext)
// const transformPayList: any = data ? transformPayData(data.paymentInformationResponses, payList) : []
const transformPayList: any = data ? formatting(payList, "payType") : [] const transformPayList: any = data ? formatting(payList, "payType") : []
const { run, loading } = useHttpRequest(PublicApi.postOrderPendingOrderPay) const { run, loading } = useHttpRequest(PublicApi.postOrderPendingOrderPay)
const [visible, setVisible] = useState(false) const [visible, setVisible] = useState(false)
const [checked, setChecked] = useState<any>({}) const [checked, setChecked] = useState<any>({})
const [current, setCurrent] = useState(0) // 0选择方式 1线下支付方式 2授信支付 3余额支付 4微信支付 5货到付款 1000清除 const [current, setCurrent] = useState(0) // 0选择方式 1线下支付方式 2授信支付 3余额支付 4微信支付 5货到付款 6支付宝 1000清除
const [payStep, setPayStep] = useState(0) // 支付模态框的步骤 0选方式 1下一步的具体操作 2输入支付密码 const [payStep, setPayStep] = useState(0) // 支付模态框的步骤 0选方式 1下一步的具体操作 2输入支付密码
const mobilePayFlag = useRef(0) // 用于判断移动支付类型 4微信 const mobilePayFlag = useRef(0) // 用于判断移动支付类型 4微信6支付宝
const [qrLoading, setQrLoading] = useState(false)
const [code, setCode] = useState('') const [code, setCode] = useState('')
const [qrCodeInfo, setQrCodeInfo] = useState({ generateCharacter: '', qrUrl: '' }) const [qrCodeInfo, setQrCodeInfo] = useState({ generateCharacter: '', qrUrl: '' })
const [number, setNumber] = useState([0,1,2,3,4,5]) const [number, setNumber] = useState([0,1,2,3,4,5])
...@@ -89,6 +91,7 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => { ...@@ -89,6 +91,7 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => {
const [creditInfo, setCreditInfo] = useState<any>() const [creditInfo, setCreditInfo] = useState<any>()
const [balanceInfo, setBalanceInfo] = useState<any>() const [balanceInfo, setBalanceInfo] = useState<any>()
const [payOnReceived, setPayOnReceived] = useState<boolean>(false) // 是否要禁用到付方式 const [payOnReceived, setPayOnReceived] = useState<boolean>(false) // 是否要禁用到付方式
const [blankAccountInfo, setBlankAccountInfo] = useState<any>()
useEffect(() => { useEffect(() => {
if (currentRef) { if (currentRef) {
...@@ -99,6 +102,17 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => { ...@@ -99,6 +102,17 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => {
} }
}, []) }, [])
//timer start
const [openTimer, setOpenTimer] = useState(0); // timer
useEffect(() => {
if(openTimer === 1) runTimerJump()
else clearInterval(timeChange)
}, [openTimer])
const runTimerJump = () => {
timeChange = setInterval(() => pollPayResult(), 3000)
}
//timer ending
useEffect(() => { useEffect(() => {
if (!visible) { if (!visible) {
setCurrent(0) setCurrent(0)
...@@ -128,13 +142,33 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => { ...@@ -128,13 +142,33 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => {
QRCode.toDataURL(qrCodeInfo.generateCharacter).then((url:any) => { QRCode.toDataURL(qrCodeInfo.generateCharacter).then((url:any) => {
setQrCodeInfo({...qrCodeInfo, qrUrl: url}) setQrCodeInfo({...qrCodeInfo, qrUrl: url})
// 轮询支付结果 // 轮询支付结果
// setOpenTimer(1) setOpenTimer(1)
}) })
.catch((err:any) => { .catch((err:any) => {
console.error(err) console.error(err)
}) })
} }
const pollPayResult = () => {
if(qrCodeInfo.qrUrl) {
// @ts-ignore
PublicApi.getOrderPayResultsl({id, paymentInformationId: currentPayInfoId}).then(res => {
console.log(res)
if(res.code === 1000) {
if(res.data) {
setOpenTimer(0)
message.success('支付成功')
setTimeout(() => {
history.goBack()
}, 1000)
}
} else {
message.error(res.message)
}
})
}
}
const handleConfirm = () => { const handleConfirm = () => {
console.log(data,'data') console.log(data,'data')
if (current === 0) { if (current === 0) {
...@@ -142,6 +176,12 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => { ...@@ -142,6 +176,12 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => {
if (checked.id === 5) { // 线下支付 if (checked.id === 5) { // 线下支付
setCurrent(1) setCurrent(1)
setPayStep(1) setPayStep(1)
// 获取账户信息
PublicApi.getSettleAccountsCorporateAccountConfig({memberId: data.supplyMembersId}).then(res => {
if(res.code === 1000) {
setBlankAccountInfo(res.data)
}
})
} else if (checked.id === 6) { // 授信额度支付 } else if (checked.id === 6) { // 授信额度支付
console.log('选择了授信支付') console.log('选择了授信支付')
setIsSpin(true) setIsSpin(true)
...@@ -181,15 +221,24 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => { ...@@ -181,15 +221,24 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => {
setPayStep(1) setPayStep(1)
} else if(checked.id === 2) { } else if(checked.id === 2) {
console.log('选择了微信支付') console.log('选择了微信支付')
// 跳转扫码支付 // 生成微信扫码支付
history.push(`/pay?orderId=${btoa(JSON.stringify({ orderId: id, memberId: data.supplyMembersId, memberRoleId: data.supplyMembersRoleId }))}`) mobilePayFlag.current = 4
// mobilePayFlag.current = 4 setCurrent(4)
// setCurrent(4) setPayStep(1)
// setPayStep(1) setQrLoading(true)
// handleSubmitPay() handleSubmitPay()
} }
// else if(checked.id === 1) {
// console.log('选择了支付宝支付')
// // 生成支付宝扫码支付
// mobilePayFlag.current = 6
// setCurrent(6)
// setPayStep(1)
// setQrLoading(true)
// handleSubmitPay()
// }
else { else {
message.error('暂只支持线下支付、授信额度支付、余额支付方式、货到付款') message.error('暂只支持线下支付、授信额度支付、余额支付、货到付款、微信支付方式')
} }
} else { } else {
message.error('请先选择支付方式') message.error('请先选择支付方式')
...@@ -243,6 +292,7 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => { ...@@ -243,6 +292,7 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => {
} else { } else {
setCurrent(0) setCurrent(0)
setPayStep(0) setPayStep(0)
setOpenTimer(0)
} }
} }
...@@ -269,11 +319,11 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => { ...@@ -269,11 +319,11 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => {
const res = await run(params) const res = await run(params)
if (res.code === 1000) { if (res.code === 1000) {
if(mobilePayFlag.current !== 4) { if(mobilePayFlag.current !== 4) { // 非微信
history.goBack() history.goBack()
} else { } else {
console.log(res, '二维码信息')
setQrCodeInfo({ ...qrCodeInfo, generateCharacter: res.data }) setQrCodeInfo({ ...qrCodeInfo, generateCharacter: res.data })
setQrLoading(false)
} }
} }
} }
...@@ -287,6 +337,7 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => { ...@@ -287,6 +337,7 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => {
const handleBack = () => { const handleBack = () => {
setCurrent(0) setCurrent(0)
setPayStep(0) setPayStep(0)
setOpenTimer(0)
} }
const handleOk = () => { const handleOk = () => {
...@@ -341,9 +392,6 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => { ...@@ -341,9 +392,6 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => {
footer={renderModalFooter()} footer={renderModalFooter()}
destroyOnClose={true} destroyOnClose={true}
maskClosable={false} maskClosable={false}
// cancelText={current === 0 ? '取消' : '上一步'}
// okText={current === 0 ? '下一步' : '确认'}
// confirmLoading={loading}
> >
{current === 0 && {current === 0 &&
transformPayList && Object.entries(transformPayList).map(([key, value]) => <Row key={key} style={{ marginBottom: 24 }}> transformPayList && Object.entries(transformPayList).map(([key, value]) => <Row key={key} style={{ marginBottom: 24 }}>
...@@ -352,7 +400,7 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => { ...@@ -352,7 +400,7 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => {
<div className={style.radioBox}> <div className={style.radioBox}>
{ {
(value as any[]).map(v => { (value as any[]).map(v => {
if(payOnReceived && v.value === 7) { // 到付 if(payOnReceived && v.value === 7) { // 过滤到付
return null return null
} else { } else {
return <div key={v.value} className={cx(style.payRadio, (checked && v.value === checked.id) ? style.active : '')} onClick={() => setChecked({ id: v.value, channel: v.channel })}>{v.label}</div> return <div key={v.value} className={cx(style.payRadio, (checked && v.value === checked.id) ? style.active : '')} onClick={() => setChecked({ id: v.value, channel: v.channel })}>{v.label}</div>
...@@ -367,6 +415,9 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => { ...@@ -367,6 +415,9 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => {
{ {
current === 1 && current === 1 &&
<div> <div>
<p>账号名称:{blankAccountInfo?.name}</p>
<p>银行账号:{blankAccountInfo?.bankAccount}</p>
<p>开 户 行:{blankAccountInfo?.bankDeposit}</p>
<p style={{fontWeight: "bold"}}>上传支付凭证</p> <p style={{fontWeight: "bold"}}>上传支付凭证</p>
<Upload <Upload
name='file' name='file'
...@@ -471,15 +522,21 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => { ...@@ -471,15 +522,21 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => {
} }
{/* 微信扫码支付 */} {/* 微信扫码支付 */}
{ {
current === 4 && (current === 4 || current === 6) &&
<div> <div>
<div className={style.qrCodeImage}> <Spin spinning={qrLoading}>
<img src={qrCodeInfo.qrUrl} alt=""/> <div className={style.qrCodeImage}>
<div className={style.scanTips}> {
<ScanOutlined className={style.scanIcon} /> qrCodeInfo.qrUrl && <>
<span>打开 {mobilePayFlag.current === 4 ? '微信' : '支付宝'}App<br />扫码完成支付</span> <img src={qrCodeInfo.qrUrl} alt="扫码支付"/>
<div className={style.scanTips}>
<ScanOutlined className={style.scanIcon} />
<span>打开 {mobilePayFlag.current === 4 ? '微信' : '支付宝'}App<br />扫码完成支付</span>
</div>
</>
}
</div> </div>
</div> </Spin>
</div> </div>
} }
{/* 输入支付密码 payStep===2 */} {/* 输入支付密码 payStep===2 */}
......
import React, { useState } from 'react' import React, { useState, useRef } from 'react'
import { Card, Button, Modal } from 'antd' import { Card, Button, Modal } from 'antd'
import { StandardTable } from 'god' import { StandardTable } from 'god'
import { PageHeaderWrapper } from '@ant-design/pro-layout' import { PageHeaderWrapper } from '@ant-design/pro-layout'
import { PublicApi } from '@/services/api' import { PublicApi } from '@/services/api'
import { baseOrderListColumns } from './constant' import { baseOrderListColumns } from './constant'
import { PurchaseOrderOutWorkState } from '@/constants' import { PurchaseOrderOutWorkState } from '@/constants'
import { history } from 'umi' import { history } from 'umi'
import { tableListSchema } from '../_public/order/constant' import { tableListSchema } from '../_public/order/constant'
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch' import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch'
import { FORM_FILTER_PATH } from '@/formSchema/const' import { FORM_FILTER_PATH } from '@/formSchema/const'
import { DatePicker } from '@formily/antd-components' import { DatePicker } from '@formily/antd-components'
import Submit from '@/components/NiceForm/components/Submit' import Submit from '@/components/NiceForm/components/Submit'
import DateRangePickerUnix from '@/components/NiceForm/components/DateRangePickerUnix' import DateRangePickerUnix from '@/components/NiceForm/components/DateRangePickerUnix'
import NiceForm from '@/components/NiceForm'
// 订单查询 import { createFormActions } from '@formily/antd'
export interface PurchaseOrderProps { } // 订单查询
const fetchTableData = async (params) => { export interface PurchaseOrderProps { }
console.log(params,'params')
const { data } = await PublicApi.getOrderProcurementOrderList(params) const fetchTableData = async (params) => {
return data console.log(params,'params')
} const { data } = await PublicApi.getOrderProcurementOrderList(params)
return data
}
// 最后一步开始调试 TODO
const PurchaseOrder: React.FC<PurchaseOrderProps> = (props) => { const formActions = createFormActions();
const [saleVisible, setSaleVisible] = useState<any>(false)
// 最后一步开始调试 TODO
// 售后唤起弹窗 @todo const PurchaseOrder: React.FC<PurchaseOrderProps> = (props) => {
const handleSaleAfter = (id) => { const [saleVisible, setSaleVisible] = useState<any>(false)
const ref = useRef<any>({})
}
// 售后唤起弹窗 @todo
const handleEvaluate = (id) => { const handleSaleAfter = (id) => {
history.push(`/memberCenter/tranactionAbility/purchaserEvaluation/unevaluated`)
} }
const secondColumns: any[] = baseOrderListColumns.concat([ const handleEvaluate = (id) => {
{ history.push(`/memberCenter/tranactionAbility/purchaserEvaluation/unevaluated`)
title: '操作', }
align: 'center',
dataIndex: 'ctl', const secondColumns: any[] = baseOrderListColumns.concat([
key: 'ctl', {
render: (text, record) => <> title: '操作',
{ record.externalState === PurchaseOrderOutWorkState.FINISH_ORDER && <Button type='link' onClick={() => handleEvaluate(record.id)}>评价</Button> } align: 'center',
{/* todo */} dataIndex: 'ctl',
{/* <Button type='link' onClick={() => handleSaleAfter(record.id)}>售后</Button> */} key: 'ctl',
</> render: (text, record) => <>
} { record.externalState === PurchaseOrderOutWorkState.FINISH_ORDER && <Button type='link' onClick={() => handleEvaluate(record.id)}>评价</Button> }
]) {/* todo */}
{/* <Button type='link' onClick={() => handleSaleAfter(record.id)}>售后</Button> */}
</>
return <PageHeaderWrapper> }
<Card> ])
<StandardTable
fetchTableData={params => fetchTableData(params)} const controllerBtns = <Button style={{width: 140}} onClick={() => {}} type='default'>导出</Button>
columns={secondColumns}
rowKey={'orderNo'} return <PageHeaderWrapper>
formilyLayouts={{ <Card>
justify: 'space-between' <StandardTable
}} fetchTableData={params => fetchTableData(params)}
formilyChilds={{ columns={secondColumns}
layouts: { currentRef={ref}
order: 2 controlRender={
}, <NiceForm
children: <Button style={{width: 140}} onClick={() => {}} type='default'>导出</Button> actions={formActions}
}} onSubmit={values => ref.current.reload(values)}
formilyProps={{ expressionScope={{
layouts: { controllerBtns,
order: 3 }}
}, effects={($, actions) => {
ctx: { useStateFilterSearchLinkageEffect(
inline: false, $,
schema: tableListSchema, actions,
effects: ($, actions) => { 'orderNo',
useStateFilterSearchLinkageEffect( FORM_FILTER_PATH,
$, )
actions, }}
'orderNo', schema={tableListSchema}
FORM_FILTER_PATH, components={{
); DateRangePickerUnix,
}, Submit
components: { }}
DateRangePickerUnix, />
Submit }
} tableProps={{
} rowKey: 'orderNo',
}} }}
/>
</Card> // rowKey={'orderNo'}
</PageHeaderWrapper> // formilyLayouts={{
} // justify: 'space-between'
// }}
PurchaseOrder.defaultProps = {} // formilyChilds={{
// layouts: {
export default PurchaseOrder // order: 2
\ No newline at end of file // },
// children: <Button style={{width: 140}} onClick={() => {}} type='default'>导出</Button>
// }}
// formilyProps={{
// layouts: {
// order: 3
// },
// ctx: {
// inline: false,
// schema: tableListSchema,
// effects: ($, actions) => {
// useStateFilterSearchLinkageEffect(
// $,
// actions,
// 'orderNo',
// FORM_FILTER_PATH,
// );
// },
// components: {
// DateRangePickerUnix,
// Submit
// }
// }
// }}
/>
</Card>
</PageHeaderWrapper>
}
PurchaseOrder.defaultProps = {}
export default PurchaseOrder
import React, { useState, useCallback, useRef, useContext, useEffect } from 'react'; import React, { useState, useCallback, useRef, useContext, useEffect } from 'react';
import { OrderDetailContext } from '../../../_public/order/context'; import { OrderDetailContext } from '../../../_public/order/context';
import { PublicApi } from '@/services/api'; import { history } from 'umi'
import { Button } from 'antd'; import { Button } from 'antd';
import OrderDetailHeader from '@/pages/transaction/components/OrderDetailHeader'; import OrderDetailHeader from '@/pages/transaction/components/OrderDetailHeader';
import OrderDetailWrapper from '@/pages/transaction/components/OrderDetailWrapper'; import OrderDetailWrapper from '@/pages/transaction/components/OrderDetailWrapper';
...@@ -11,14 +11,24 @@ import OrderPayModal from '@/pages/transaction/components/orderPayModal'; ...@@ -11,14 +11,24 @@ import OrderPayModal from '@/pages/transaction/components/orderPayModal';
const ReadyConfirmContract: React.FC = () => { const ReadyConfirmContract: React.FC = () => {
const { formContext, id, detailList } = useOrderDetail({type: 'purchaseOrder'}) const { formContext, id, detailList } = useOrderDetail({type: 'purchaseOrder'})
const {data, currentPayInfoId} = formContext
const payRef = useRef<any>({}) const payRef = useRef<any>({})
const handleClick = useCallback(() => { const handleClick = useCallback(() => {
payRef.current.setVisible(true) // 处理积分支付跳转
}, []) if(data && currentPayInfoId){
if(data.paymentInformationResponses.length > 0){
let obj = data.paymentInformationResponses.filter(item => item.id === Number(currentPayInfoId))[0]
if(obj.channel === 0) {
history.push(`/pay?orderId=${btoa(JSON.stringify({ orderId: id, memberId: data.supplyMembersId, memberRoleId: data.supplyMembersRoleId }))}`)
} else {
payRef.current.setVisible(true)
}
}
}
}, [data, currentPayInfoId])
const renderPayPrice = () => { const renderPayPrice = () => {
const {data, currentPayInfoId} = formContext
if(data){ if(data){
if(data.paymentInformationResponses.length > 0){ if(data.paymentInformationResponses.length > 0){
let obj = data.paymentInformationResponses.filter(item => item.id === Number(currentPayInfoId))[0] let obj = data.paymentInformationResponses.filter(item => item.id === Number(currentPayInfoId))[0]
......
import React from 'react' import React from 'react'
import { history } from 'umi' import { history } from 'umi'
import { Card, Button, Space, Dropdown, Menu } from 'antd' import { Card, Button, Space, Dropdown, Menu } from 'antd'
import { StandardTable } from 'god' import { StandardTable } from 'god'
import { PageHeaderWrapper } from '@ant-design/pro-layout' import { PageHeaderWrapper } from '@ant-design/pro-layout'
import { PublicApi } from '@/services/api' import { PublicApi } from '@/services/api'
import { useSelfTable } from './model/useSelfTable' import { useSelfTable } from './model/useSelfTable'
import { PlusCircleOutlined, DownOutlined, DeleteOutlined } from '@ant-design/icons' import { PlusCircleOutlined, DownOutlined, DeleteOutlined } from '@ant-design/icons'
import DropDeleteDown from '@/components/DropDeleteDown' import DropDeleteDown from '@/components/DropDeleteDown'
import { tableListSchema } from './schema' import { tableListSchema } from './schema'
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch' import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch'
import { FORM_FILTER_PATH } from '@/formSchema/const' import { FORM_FILTER_PATH } from '@/formSchema/const'
import Submit from '@/components/NiceForm/components/Submit' import Submit from '@/components/NiceForm/components/Submit'
import DateRangePickerUnix from '@/components/NiceForm/components/DateRangePickerUnix' import DateRangePickerUnix from '@/components/NiceForm/components/DateRangePickerUnix'
// 待确认收货单 // 待确认收货单
export interface FirstApprovedOrderProps {} export interface FirstApprovedOrderProps {}
const fetchTableData = async (params) => { const fetchTableData = async (params) => {
const { data } = await PublicApi.getOrderReceivingGoodsPendingOrderList(params) const { data } = await PublicApi.getOrderReceivingGoodsPendingOrderList(params)
return data return data
} }
// TODO // TODO
const FirstApprovedOrder:React.FC<FirstApprovedOrderProps> = (props) => { const FirstApprovedOrder:React.FC<FirstApprovedOrderProps> = (props) => {
const { const {
columns columns
} = useSelfTable() } = useSelfTable()
return <PageHeaderWrapper> return <PageHeaderWrapper>
<Card> <Card>
<StandardTable <StandardTable
fetchTableData={params => fetchTableData(params)} fetchTableData={params => fetchTableData(params)}
columns={columns} columns={columns}
rowKey={'orderNo'} rowKey={'orderNo'}
formilyLayouts={{ formilyLayouts={{
justify: 'space-between' justify: 'space-between'
}} }}
formilyProps={{ formilyProps={{
ctx: { ctx: {
inline: false, inline: false,
schema: tableListSchema, schema: tableListSchema,
effects: ($, actions) => { effects: ($, actions) => {
useStateFilterSearchLinkageEffect( useStateFilterSearchLinkageEffect(
$, $,
actions, actions,
'orderNo', 'orderNo',
FORM_FILTER_PATH, FORM_FILTER_PATH,
); );
}, },
components: { components: {
DateRangePickerUnix, DateRangePickerUnix,
Submit Submit
} }
} }
}} }}
/> />
</Card> </Card>
</PageHeaderWrapper> </PageHeaderWrapper>
} }
FirstApprovedOrder.defaultProps = {} FirstApprovedOrder.defaultProps = {}
export default FirstApprovedOrder export default FirstApprovedOrder
\ No newline at end of file
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