Commit 2cbcf6b0 authored by 前端-钟卫鹏's avatar 前端-钟卫鹏

fix: 对接e账户管理充值提现,对接待支付订单账期月结支付

parent ba89201e
......@@ -287,6 +287,7 @@ export default {
'purchaseOrder.yizhifu': '已支付',
'purchaseOrder.dingdanhao': '订单号',
'purchaseOrder.dingdanzhaiyao': '订单摘要/下单时间',
'purchaseOrder.dingdandingdandigest': '订单摘要',
'purchaseOrder.gongyinghuiyuan': '供应会员',
'purchaseOrder.zongjineyizhifu': '总金额/已支付(元)',
'purchaseOrder.dingdanleixing': '订单类型',
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -542,6 +542,8 @@ export default {
'detail.purchase.label51': '操作角色',
'detail.purchase.label52': '操作时间',
'schma.purchase.purchaseType.help': '采购类型',
'schma.purchase.purchaseType.help.text': '有固定采购金额:采购金额固定,合同期内不可超过采购金额,无固定采购金额:采购金额不固定,可在合同期内按需采购',
'schma.purchase.orderNo': '请输入订单编号',
'schma.purchase.orderThe': '请输入订单摘要',
'schma.purchase.supplyMembersName': '请输入供应会员名称',
......@@ -974,4 +976,5 @@ export default {
'table.purchase.zhongbiaoshuliang': '中标数量',
'table.purchase.duiying': '对应',
'table.purchase.zhi': '至',
}
......@@ -47,8 +47,11 @@ const AccountDetail: React.FC<{}> = () => {
//timer
const [openTimer, setOpenTimer] = useState(0); // timer
useEffect(() => {
console.log(openTimer)
if(openTimer === 1) runTimerJump()
if(openTimer === 1) {
runTimerJump()
} else {
clearInterval(timeChange)
}
}, [openTimer])
const runTimerJump = () => {
timeChange = setInterval(() => pollPayResult(), 3000)
......@@ -230,7 +233,7 @@ const AccountDetail: React.FC<{}> = () => {
setScanVisible(false)
getAccountInfo()
refTrade.current.reload()
clearInterval(timeChange)
setOpenTimer(0)
}
return (
......
......@@ -11,49 +11,59 @@ import { ColumnType } from 'antd/lib/table/interface'
import ModalForm from '@/components/ModalForm'
import { createFormActions } from '@formily/antd'
import { rechargeSchema } from './schema'
import { memberStatusMap, moveStatusMap, operationMap, statusMap } from '../../constant'
import { memberStatusMap, moveStatusMap } from '../../constant'
import { StandardTable } from 'god'
import QRCode from 'qrcode';
import { ScanOutlined } from '@ant-design/icons'
import { getPayAssetAccountGetRechargeResult, getPayEAccountAllInPayGetAccountDetail, getPayEAccountAllInPayGetEAccountStatusRecord, getPayEAccountAllInPayGetEAccountTradeRecord, postPayAssetAccountRecharge } from '@/services/PayV2Api'
import { getPayEAccountAllInPayGetAccountDetail, getPayEAccountAllInPayGetEAccountStatusRecord, getPayEAccountAllInPayGetEAccountTradeRecord, getPayEAccountAllInPayGetRechargeResult, getPayEAccountAllInPayGetRechargeType, postPayAssetAccountRecharge, postPayEAccountAllInPayCashOut, postPayEAccountAllInPayRecharge } from '@/services/PayV2Api'
import NiceForm from '@/components/NiceForm'
import Submit from '@/components/NiceForm/components/Submit'
import alipay from '@/assets/imgs/alipay_icon.png';
import wxpay from '@/assets/imgs/wechat_icon.png';
import { clearModalParams } from '@/utils'
interface rechargeItem {
codeUrl: string;
tradeRecordId: number;
tradeCode: number;
}
const schemaActions = createFormActions()
const formActions = createFormActions();
const startTime = moment().day(moment().weekday() - 6).format('YYYY-MM-DD HH:mm:ss')
const endTime = moment().format('YYYY-MM-DD HH:mm:ss')
let timeChange; // Tiemr
const EAccountDetail: React.FC<{}> = () => {
const intl = useIntl();
const intl = useIntl()
const [withdrawForm] = Form.useForm()
const modalRef = useRef<any>()
const refTrade = useRef<any>({})
const datesRef = useRef<any>([])
const [moveData, setMoveData] = useState<any>()
const [details, setDetails] = useState<any>({ accountBalance: 0, lockBalance: 0})
const [pageId, setPageId] = useState<any>()
const [isBtnLoading, setIsBtnLoading] = useState<boolean>(false)
const [scanVisible, setScanVisible] = useState<boolean>(false)
const [withdrawVisible, setWithdrawVisible] = useState<boolean>(false)
const [qrCode, setQrCode] = useState('')
const [renderCodeCharacter, setRenderCodeCharacter] = useState<rechargeItem>()
const [rechargeType, setRechargeType] = useState<number>()
const [rechargeType, setRechargeType] = useState<string>('')
const [loading, setLoading] = useState<boolean>(false)
useEffect(() => {
getAccountInfo()
clearInterval(timeChange)
return () => clearModalParams()
} ,[])
//timer
// timer
const [openTimer, setOpenTimer] = useState(0); // timer
useEffect(() => {
console.log(openTimer)
if(openTimer === 1) runTimerJump()
if(openTimer === 1) {
runTimerJump()
} else {
clearInterval(timeChange)
}
}, [openTimer])
const runTimerJump = () => {
timeChange = setInterval(() => pollPayResult(), 3000)
......@@ -69,7 +79,6 @@ const EAccountDetail: React.FC<{}> = () => {
let res = await getPayEAccountAllInPayGetAccountDetail()
const { code, data, message: msg } = res
if(code !== 1000) { return message.error(msg) }
setPageId(data.id)
setDetails(data)
getPayEAccountAllInPayGetEAccountStatusRecord({id: data.id + ''}).then(res => {
const { data } = res
......@@ -81,8 +90,8 @@ const EAccountDetail: React.FC<{}> = () => {
// 获取交易记录
const fetchTradeData = (params) => {
if(!params?.startTime) {
params.startTime = moment().day(moment().weekday() - 7).format('YYYY-MM-DD HH:mm:ss')
params.endTime = moment().day(moment().weekday()).format('YYYY-MM-DD HH:mm:ss')
params.startTime = startTime
params.endTime = endTime
}
return new Promise((resolve, reject) => {
getPayEAccountAllInPayGetEAccountTradeRecord({...params}).then(res => {
......@@ -105,9 +114,8 @@ const EAccountDetail: React.FC<{}> = () => {
}
const pollPayResult = () => {
if(renderCodeCharacter?.tradeRecordId) {
getPayAssetAccountGetRechargeResult({tradeRecordId: renderCodeCharacter.tradeRecordId + ''}).then(res => {
console.log(res)
if(renderCodeCharacter?.tradeCode) {
getPayEAccountAllInPayGetRechargeResult({tradeCode: renderCodeCharacter.tradeCode}).then(res => {
if(res.code === 1000) {
if(res.data) {
clearInterval(timeChange)
......@@ -126,36 +134,48 @@ const EAccountDetail: React.FC<{}> = () => {
const columns: ColumnType<any>[] = [
{
title: intl.formatMessage({id: 'payandSettle.capitalAccounts.eAccount.columns.tradeCode'}),
dataIndex: 'tradeCode',
key: 'tradeCode',
title: intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.shanghudingdanhao', defaultMessage: '商户订单号' }),
dataIndex: 'bizOrderNo',
key: 'bizOrderNo',
},
{
title: intl.formatMessage({id: 'payandSettle.capitalAccounts.eAccount.columns.tradeTime'}),
dataIndex: 'tradeTime',
key: 'tradeTime',
title: intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.jiaoyiliushuihao', defaultMessage: '交易流水号' }),
dataIndex: 'tradeNo',
key: 'tradeNo',
},
{
title: intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.jiaoyishijian', defaultMessage: '交易时间' }),
dataIndex: 'changeTime',
key: 'changeTime',
render: (text: any) => moment(text).format("YYYY-MM-DD HH:mm:ss")
},
{
title: intl.formatMessage({id: 'payandSettle.capitalAccounts.eAccount.columns.tradeMoney'}),
dataIndex: 'tradeMoney',
key: 'tradeMoney',
render: (t, r) => `${operationMap[r.operation]['operator']} ${t.toFixed(2)}`
title: intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.yuanshijine', defaultMessage: '原始金额' }),
dataIndex: 'oriAmount',
key: 'oriAmount',
},
{
title: intl.formatMessage({id: 'payandSettle.capitalAccounts.eAccount.columns.operation'}),
dataIndex: 'operation',
key: 'operation',
render: (t, r) => operationMap[t]['title']
title: intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.xianyoujine', defaultMessage: '现有金额' }),
dataIndex: 'curAmount',
key: 'curAmount',
},
{
title: intl.formatMessage({id: 'payandSettle.capitalAccounts.eAccount.columns.status'}),
dataIndex: 'status',
key: 'status',
render: (text:any, record:any) => (<StatusTag title={statusMap[text]['title']} type={statusMap[text]['type']} />)
title: intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.biangengjine', defaultMessage: '变更金额' }),
dataIndex: 'chgAmount',
key: 'chgAmount',
},
{
title: intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.jiaoyileixing', defaultMessage: '交易类型' }),
dataIndex: 'tradeType',
key: 'tradeType',
},
{
title: intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.jiaoyizileixing', defaultMessage: '交易子类型' }),
dataIndex: 'type',
key: 'type',
},
{
title: intl.formatMessage({id: 'payandSettle.capitalAccounts.eAccount.columns.remark'}),
title: intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.fenzhangbeizhu', defaultMessage: '分账备注' }),
dataIndex: 'remark',
key: 'remark',
},
......@@ -205,7 +225,7 @@ const EAccountDetail: React.FC<{}> = () => {
}
const handleCannel = () => {
setIsBtnLoading(false)
}
const handleSubmit = (value) => {
......@@ -213,11 +233,10 @@ const EAccountDetail: React.FC<{}> = () => {
setIsBtnLoading(true)
setRechargeType(value['type'][0])
let parasm = {
memberAssetAccountId: pageId,
money: Number(value.money),
type: value['type'][0]
}
postPayAssetAccountRecharge(parasm, { ctlType: "none" }).then(res => {
postPayEAccountAllInPayRecharge(parasm, { ctlType: "none" }).then(res => {
const { code, data } = res
if(code === 1000){
modalRef.current.setVisible(false)
......@@ -237,10 +256,38 @@ const EAccountDetail: React.FC<{}> = () => {
const applyWithdraw = () => {
setWithdrawVisible(true)
withdrawForm.setFieldsValue({ name: details.memberName, accountNo: details.accountNo, branchName: details.branchName })
}
const handleWithdraw = () => {
setLoading(true)
withdrawForm.submit()
}
const handleWidthdrawSubmit = (values) => {
const amount = Number(values.amount)
if (amount > 0 && amount <= details.usableBalance) { // 大于0并且小于可用金额
let params = {
money: amount,
bankCardNo: details.bankNo,
}
postPayEAccountAllInPayCashOut(params).then(({code, data}) => {
if(code === 1000) {
getAccountInfo()
refTrade.current.reload()
withdrawForm.resetFields()
setWithdrawVisible(false)
}
setLoading(false)
})
} else {
setLoading(false)
message.error(intl.formatMessage({ id: 'payandSettle.capitalAccounts.accountLists.applyWithdraw.error' }))
}
}
const handleAll = () => {
withdrawForm.setFieldsValue({ amount: details.usableBalance })
}
const handleCancel = () => {
......@@ -251,7 +298,7 @@ const EAccountDetail: React.FC<{}> = () => {
setScanVisible(false)
getAccountInfo()
refTrade.current.reload()
clearInterval(timeChange)
setOpenTimer(0)
}
const disabledDate = (current) => {
......@@ -288,7 +335,7 @@ const EAccountDetail: React.FC<{}> = () => {
</div>
<div className={styles['repayment-end']}>
<span className={styles['repayment-time']}>
{details?.parentMemberName}
{details?.memberName}
</span>
</div>
</div>
......@@ -316,7 +363,7 @@ const EAccountDetail: React.FC<{}> = () => {
xl={14}
lg={14}
>
<p className={styles.rightInfo}>{details?.parentMemberName}</p>
<p className={styles.rightInfo}>{details?.memberName}</p>
</Col>
</Row>
<Row>
......@@ -397,14 +444,11 @@ const EAccountDetail: React.FC<{}> = () => {
columns={columns}
currentRef={refTrade}
fetchTableData={(params: any) => fetchTradeData(params)}
rowKey="bizOrderNo"
controlRender={
<NiceForm
actions={formActions}
onSubmit={values => refTrade.current.reload(values)}
initialValues={{
startTime: moment().day(moment().weekday() - 7).format('YYYY-MM-DD HH:mm:ss'),
endTime: moment().day(moment().weekday()).format('YYYY-MM-DD HH:mm:ss'),
}}
schema={{
type: 'object',
'x-component-props': {
......@@ -415,7 +459,7 @@ const EAccountDetail: React.FC<{}> = () => {
"[startTime,endTime]": {
type: 'daterange',
'x-component-props': {
placeholder: ['开始时间','结束时间'],
placeholder: [intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.kaishishijian', defaultMessage: '开始时间' }),intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.jieshushijian', defaultMessage: '结束时间' })],
showTime: true,
disabledDate: disabledDate,
onCalendarChange: val => datesRef.current = val,
......@@ -424,7 +468,7 @@ const EAccountDetail: React.FC<{}> = () => {
submit: {
'x-component': 'Submit',
'x-component-props': {
children: '查询',
children: intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.chaxun', defaultMessage: '查询' }),
},
},
}
......@@ -456,16 +500,19 @@ const EAccountDetail: React.FC<{}> = () => {
confirmLoading: isBtnLoading,
destroyOnClose: true
}}
// effects={($, {setFieldState}) => {
// $('onFieldInit', 'type').subscribe(parentState => {
// getPayMemberPayList({memberId: details.memberId, memberType: details.memberLevelType}).then(res => {
// console.log(res, 'res')
// })
// setFieldState('type', state => {
// state.props["x-component-props"].dataSource = []
// });
// })
// }}
effects={($, {setFieldState}) => {
$('onFieldInit', 'type').subscribe(() => {
getPayEAccountAllInPayGetRechargeType().then(({data = []}) => {
setFieldState('type', state => {
state.props["x-component-props"].dataSource = data.map(item => ({
id: item['key'],
name: item['value'],
logoUrl: item['key'].indexOf('WEIXIN') !== -1 ? wxpay : alipay
}))
});
})
})
}}
/>
{/* 扫码充值 */}
<Modal
......@@ -478,7 +525,7 @@ const EAccountDetail: React.FC<{}> = () => {
<img src={qrCode} alt=""/>
<div className={styles.scanTips}>
<ScanOutlined className={styles.scanIcon} />
<span>{rechargeType === 2 ? intl.formatMessage({id: 'payandSettle.capitalAccounts.eAccount.modal.button.1'}) : intl.formatMessage({id: 'payandSettle.capitalAccounts.eAccount.modal.button.2'})}<br />{intl.formatMessage({id: 'payandSettle.capitalAccounts.eAccount.modal.br'})}</span>
<span>{rechargeType.indexOf('WEIXIN') !== -1 ? intl.formatMessage({id: 'payandSettle.capitalAccounts.eAccount.modal.button.1'}) : intl.formatMessage({id: 'payandSettle.capitalAccounts.eAccount.modal.button.2'})}<br />{intl.formatMessage({id: 'payandSettle.capitalAccounts.eAccount.modal.br'})}</span>
</div>
</div>
</Modal>
......@@ -488,31 +535,50 @@ const EAccountDetail: React.FC<{}> = () => {
visible={withdrawVisible}
onOk={handleWithdraw}
onCancel={handleCancel}
confirmLoading={loading}
>
<div>
<Form name="withdraw-form" labelCol={{ span: 24 }} wrapperCol={{ span: 24 }}>
<Form
form={withdrawForm}
onFinish={handleWidthdrawSubmit}
name="withdraw-form"
labelCol={{ span: 24 }}
wrapperCol={{ span: 24 }}
>
<Form.Item label={intl.formatMessage({id: 'payandSettle.capitalAccounts.eAccount.modal.2.name'})} name="name">
<span>{intl.formatMessage({id: 'payandSettle.capitalAccounts.eAccount.modal.2.text'})}</span>
<span>{details?.memberName}</span>
</Form.Item>
<Form.Item label={intl.formatMessage({id: 'payandSettle.capitalAccounts.eAccount.modal.2.account'})} name="account">
<span>{intl.formatMessage({id: 'payandSettle.capitalAccounts.eAccount.modal.2.text'})}</span>
<Form.Item label={intl.formatMessage({id: 'payandSettle.capitalAccounts.eAccount.modal.2.account'})} name="accountNo">
<span>{details?.accountNo}</span>
</Form.Item>
<Form.Item label={intl.formatMessage({id: 'payandSettle.capitalAccounts.eAccount.modal.2.apart'})} name="apart">
<span>{intl.formatMessage({id: 'payandSettle.capitalAccounts.eAccount.modal.2.text'})}</span>
<Form.Item label={intl.formatMessage({id: 'payandSettle.capitalAccounts.eAccount.modal.2.apart'})} name="branchName">
<span>{details?.branchName}</span>
</Form.Item>
<Form.Item label={intl.formatMessage({id: 'payandSettle.capitalAccounts.eAccount.modal.2.amount'})} help={intl.formatMessage({id: 'payandSettle.capitalAccounts.eAccount.modal.2.amount.help'})}>
<Form.Item
label={intl.formatMessage({id: 'payandSettle.capitalAccounts.eAccount.modal.2.amount'})}
extra={`${intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.zuiduoketixian', defaultMessage: '最多可提现 ¥' })}${details?.usableBalance}`}
>
<Row>
<Col span={20}>
<Form.Item
name="amount"
noStyle
rules={[{ required: true, message: intl.formatMessage({id: 'payandSettle.capitalAccounts.eAccount.modal.2.amount.message'}) }]}
rules={[
{
required: true,
message: intl.formatMessage({id: 'payandSettle.capitalAccounts.eAccount.modal.2.amount.message'})
},
{
pattern: /^\d+(\.\d{1,2})?$/,
message: intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.jinejinxianliang', defaultMessage: '金额仅限两位小数' })
}
]}
>
<Input addonBefore={intl.formatMessage({id: 'payandSettle.capitalAccounts.eAccount.modal.2.amount.addonBefore'})} placeholder={intl.formatMessage({id: 'payandSettle.capitalAccounts.eAccount.modal.2.amount.placeholder'})} />
</Form.Item>
</Col>
<Col span={4}>
<Button type="link">{intl.formatMessage({id: 'payandSettle.capitalAccounts.eAccount.modal.2.button'})}</Button>
<Button type="link" onClick={handleAll}>{intl.formatMessage({id: 'payandSettle.capitalAccounts.eAccount.modal.2.button'})}</Button>
</Col>
</Row>
</Form.Item>
......
......@@ -141,17 +141,16 @@ export const rechargeSchema: ISchema = {
type: "array:number",
"x-component": 'CardCheckBox',
"x-component-props": {
dataSource: [
// {id: 1, name: '支付宝', logoUrl: alipay},
{ id: 2, name: intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.schema.rechargeSchema.type.dataSource.2' }), logoUrl: wxpay }
],
dataSource: [],
// {id: 1, name: '支付宝', logoUrl: alipay},
// { id: 2, name: intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.schema.rechargeSchema.type.dataSource.2' }), logoUrl: wxpay }
type: 'radio' // CardCheckBox 单选模式
},
"title": intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.schema.rechargeSchema.type' }),
"x-rules": [
{
required: true,
message: intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.schema.rechargeSchema.typemessage' })
message: intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.schema.rechargeSchema.type.message' })
}
],
}
......
......@@ -5,7 +5,7 @@ import MellowCard from '@/components/MellowCard';
import { BIND_PHONE, EDetailContext, formItemLayout, formItemLayoutCompany, prefixSelector, prefixSelectorEle, tailFormItemLayout, tailFormItemLayoutCompany } from '../../constant';
import { EditOutlined } from '@ant-design/icons';
import UploadImage from '@/components/UploadImage';
import { postPayAllInPayBindCompanyAccount, postPayAllInPayBindPhone, postPayAllInPayIdCardCollect, postPayAllInPaySendVerificationCode, postPayAllInPaySetCompanyInfo, postPayAllInPaySignContract } from '@/services/PayV2Api';
import { getPayAllInPayGetBankList, postPayAllInPayBindCompanyAccount, postPayAllInPayBindPhone, postPayAllInPayIdCardCollect, postPayAllInPaySendVerificationCode, postPayAllInPaySetCompanyInfo, postPayAllInPaySignContract } from '@/services/PayV2Api';
import useCountDown from '@/utils/hooks';
/** 图片key对应的picType值 */
......@@ -35,6 +35,11 @@ const Company: React.FC<{}> = () => {
const [idCardBehindImg, setIdCardBehindImg] = useState<string>()
const [certificateImg, setCertificateImg] = useState<string>()
const [loading, setLoading] = useState<boolean>(false)
const [bankLists, setBankLists] = useState([])
useEffect(() => {
getPayAllInPayGetBankList().then(({data = []}) => setBankLists(data))
}, [])
useEffect(() => {
if(data.step === 3) {
......@@ -79,13 +84,20 @@ const Company: React.FC<{}> = () => {
}
const onFinishCard = (values) => {
setLoading(true)
const pictures = Object.keys(values).map(item => ({
picType: PicType[item],
picture: values[item]
}))
const fns = pictures.map(item => postPayAllInPayIdCardCollect(item))
const fns = pictures.map((item, index) => new Promise(() => {
setTimeout(() => postPayAllInPayIdCardCollect(item), 500 * index)
}))
Promise.all(fns).then(res => {
console.log(res)
}).finally(() => {
setLoading(false)
reloadFormData()
})
}
......@@ -181,7 +193,22 @@ const Company: React.FC<{}> = () => {
},
]}
>
<Input placeholder={intl.formatMessage({ id: 'payandSettle.eAccountApprove.components.company.mellowCard.1.bank.placeholder' })} />
{/* <Input placeholder={intl.formatMessage({ id: 'payandSettle.eAccountApprove.components.company.mellowCard.1.bank.placeholder' })} /> */}
<Select
showSearch
optionFilterProp="label"
placeholder={intl.formatMessage({ id: 'payandSettle.eAccountApprove.components.company.mellowCard.1.bank.placeholder' })}
filterOption={(input, option) =>
option.value.toLowerCase().indexOf(input.toLowerCase()) >= 0
}
filterSort={(optionA, optionB) =>
optionA.value.toLowerCase().localeCompare(optionB.value.toLowerCase())
}
>
{
bankLists.map(item => <Option key={item.id} value={item.name}>{item.name}</Option>)
}
</Select>
</Form.Item>
</Col>
</Row>
......
import React, { useContext } from 'react'
import React, { useContext, useRef, useState } from 'react'
import {useIntl} from 'umi';
import { Button, Col, Form, Row, Image } from 'antd'
import { Button, Col, Row, Image } from 'antd'
import MellowCard from '@/components/MellowCard';
import styles from './index.less'
import { EDetailContext } from '../../constant'
import { postPayAllInPaySignContractQuery } from '@/services/PayV2Api';
import { BIND_PHONE, EDetailContext, fetchTelCode, UNBIND_PHONE } from '../../constant'
import { postPayAllInPayBindPhone, postPayAllInPaySignContractQuery, postPayAllInPayUnbindPhone } from '@/services/PayV2Api';
import { useAsyncSelect } from '@/formSchema/effects/useAsyncSelect';
import { bindSchema, unbindSchema } from '../../schema/modal';
import ModalForm from '@/components/ModalForm';
import { createFormActions } from '@formily/antd';
import PhoneCode from '../phone'
const bindActions = createFormActions();
/** 企业认证详情 */
const CompanyFinish: React.FC<{}> = () => {
const intl = useIntl();
const [form] = Form.useForm();
const bindRef = useRef<any>({})
const eDetailContext = useContext(EDetailContext)
const { ctl, perfection, data } = eDetailContext
const { data, reloadFormData } = eDetailContext
const [bindLoading, setBindLoading] = useState<boolean>(false)
const handleBind = () => {
// console.log(bindRef)
// bindRef.current.setVisible(true)
bindRef.current.setVisible(true)
}
const contractPreview = async () => {
......@@ -27,18 +34,34 @@ const CompanyFinish: React.FC<{}> = () => {
}
}
// 绑定解绑手机
const handleBindSubmit = () => {
setBindLoading(true)
const fn = data?.phone ? postPayAllInPayUnbindPhone : postPayAllInPayBindPhone
bindActions.submit().then(async ({values}: any) => {
fn(values).then(res => {
if(res.code === 1000) {
reloadFormData()
}
}).finally(() => {
setBindLoading(false)
bindRef.current.setVisible(false)
})
})
}
return (<div>
<MellowCard headStyle={{borderBottom:'none'}} title={intl.formatMessage({id: 'payandSettle.eAccountApprove.components.companyFinish.1.title'})} id="companyInfo">
<Row>
<Col span={12}>
<Row className={styles['card-list']}>
<Col span={6} className={styles['card-list_title']}>企业名称</Col>
<Col span={6} className={styles['card-list_title']}>{intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.qiyemingcheng', defaultMessage: '企业名称' })}</Col>
<Col>{data.companyName}</Col>
</Row>
</Col>
<Col span={12}>
<Row className={styles['card-list']}>
<Col span={6} className={styles['card-list_title']}>企业对公账户</Col>
<Col span={6} className={styles['card-list_title']}>{intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.qiyeduigongzhang', defaultMessage: '企业对公账户' })}</Col>
<Col>{data.accountNo}</Col>
</Row>
</Col>
......@@ -46,13 +69,13 @@ const CompanyFinish: React.FC<{}> = () => {
<Row>
<Col span={12}>
<Row className={styles['card-list']}>
<Col span={6} className={styles['card-list_title']}>法人姓名</Col>
<Col span={6} className={styles['card-list_title']}>{intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.farenxingming', defaultMessage: '法人姓名' })}</Col>
<Col>{data.name}</Col>
</Row>
</Col>
<Col span={12}>
<Row className={styles['card-list']}>
<Col span={6} className={styles['card-list_title']}>开户银行名称</Col>
<Col span={6} className={styles['card-list_title']}>{intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.kaihuyinhangming', defaultMessage: '开户银行名称' })}</Col>
<Col>{data.bankName}</Col>
</Row>
</Col>
......@@ -60,13 +83,13 @@ const CompanyFinish: React.FC<{}> = () => {
<Row>
<Col span={12}>
<Row className={styles['card-list']}>
<Col span={6} className={styles['card-list_title']}>法人证件类型</Col>
<Col>{data.cardType === 1 ? '身份证' : ''}</Col>
<Col span={6} className={styles['card-list_title']}>{intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.farenzhengjianlei', defaultMessage: '法人证件类型' })}</Col>
<Col>{data.cardType === 1 ? intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.shenfenzheng', defaultMessage: '身份证' }) : ''}</Col>
</Row>
</Col>
<Col span={12}>
<Row className={styles['card-list']}>
<Col span={6} className={styles['card-list_title']}>开户行支行名称</Col>
<Col span={6} className={styles['card-list_title']}>{intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.kaihuhangzhihang', defaultMessage: '开户行支行名称' })}</Col>
<Col>{data.branchName}</Col>
</Row>
</Col>
......@@ -74,13 +97,13 @@ const CompanyFinish: React.FC<{}> = () => {
<Row>
<Col span={12}>
<Row className={styles['card-list']}>
<Col span={6} className={styles['card-list_title']}>法人证件号码</Col>
<Col span={6} className={styles['card-list_title']}>{intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.farenzhengjianhao', defaultMessage: '法人证件号码' })}</Col>
<Col>{data.cardNo}</Col>
</Row>
</Col>
<Col span={12}>
<Row className={styles['card-list']}>
<Col span={6} className={styles['card-list_title']}>支行行号</Col>
<Col span={6} className={styles['card-list_title']}>{intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.zhihanghanghao', defaultMessage: '支行行号' })}</Col>
<Col>{data.bankNo}</Col>
</Row>
</Col>
......@@ -88,22 +111,24 @@ const CompanyFinish: React.FC<{}> = () => {
<Row>
<Col span={12}>
<Row className={styles['card-list']}>
<Col span={6} className={styles['card-list_title']}>法人证件正面照</Col>
<Col span={6} className={styles['card-list_title']}>{intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.farenzhengjianzheng', defaultMessage: '法人证件正面照' })}</Col>
<Col>
<Image
width={104}
src="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png"
height={104}
src={data && data.picUrl && data.picUrl.filter(item => item.picType === 8)[0]['picture']}
/>
</Col>
</Row>
</Col>
<Col span={12}>
<Row className={styles['card-list']}>
<Col span={6} className={styles['card-list_title']}>法人证件反面照</Col>
<Col span={6} className={styles['card-list_title']}>{intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.farenzhengjianfan', defaultMessage: '法人证件反面照' })}</Col>
<Col>
<Image
width={104}
src="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png"
height={104}
src={data && data.picUrl && data.picUrl.filter(item => item.picType === 9)[0]['picture']}
/>
</Col>
</Row>
......@@ -112,20 +137,21 @@ const CompanyFinish: React.FC<{}> = () => {
<Row>
<Col span={12}>
<Row className={styles['card-list']}>
<Col span={6} className={styles['card-list_title']}>企业营业执照</Col>
<Col span={6} className={styles['card-list_title']}>{intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.qiyeyingyezhi', defaultMessage: '企业营业执照' })}</Col>
<Col>
<Image
width={104}
src="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png"
height={104}
src={data && data.picUrl && data.picUrl.filter(item => item.picType === 1)[0]['picture']}
/>
</Col>
</Row>
</Col>
<Col span={12}>
<Row className={styles['card-list']}>
<Col span={6} className={styles['card-list_title']}>法人手机号</Col>
<Col span={6} className={styles['card-list_title']}>{intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.farenshoujihao', defaultMessage: '法人手机号' })}</Col>
<Col>
<p><span>{data.phone || '暂无'}</span><Button type="link" onClick={handleBind}>{data.phone ? '解绑' : '绑定'}</Button></p>
<p><span>{data.phone || intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.zanwu', defaultMessage: '暂无' })}</span><Button type="link" onClick={handleBind}>{data.phone ? intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.jiebang', defaultMessage: '解绑' }) : intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.bangding', defaultMessage: '绑定' })}</Button></p>
</Col>
</Row>
</Col>
......@@ -137,6 +163,31 @@ const CompanyFinish: React.FC<{}> = () => {
<Col><p><span>{data.contractNo}</span><Button type="link" onClick={contractPreview}>{intl.formatMessage({id: 'payandSettle.eAccountApprove.components.companyFinish.2.electric.button'})}</Button></p></Col>
</Row>
</MellowCard>
<ModalForm
modalTitle={data?.phone ? intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.jiebangshoujihao', defaultMessage: '解绑手机号' }) : intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.bangdingxinshouji', defaultMessage: '绑定新手机号' })}
currentRef={bindRef}
confirm={handleBindSubmit}
actions={bindActions}
schema={data?.phone ? unbindSchema : bindSchema}
modalProps={{confirmLoading: bindLoading}}
components={{PhoneCode}}
effects={($, actions) => {
useAsyncSelect('areaCode', fetchTelCode)
$('onFormMount').subscribe(() => {
if(data?.phone) {
actions.setFieldValue('phone', data.phone)
actions.setFieldState('verificationCode', state => {
state.props['x-component-props']['type'] = UNBIND_PHONE
})
} else {
actions.setFieldState('verificationCode', state => {
state.props['x-component-props']['type'] = BIND_PHONE
})
}
})
}}
/>
<a href="" target="_blank" id="signPrewview" style={{display: 'none', visibility: "hidden"}}></a>
</div>)
}
......
import React, { useContext, useState } from 'react'
import { Button, Col, Form, Input, message, Row, Select } from 'antd'
import MellowCard from '@/components/MellowCard';
import { BIND_PHONE, EDetailContext, fetchTelCode, formItemLayout, prefixSelector, prefixSelectorEle, tailFormItemLayout } from '../../constant';
import { BIND_PHONE, EDetailContext, formItemLayout, prefixSelectorEle, tailFormItemLayout } from '../../constant';
import useCountDown from '@/utils/hooks';
import { PATTERN_MAPS } from '@/constants/regExp';
import { postPayAllInPayBindPhone, postPayAllInPayPersonalCrate, postPayAllInPaySendVerificationCode, postPayAllInPaySetRealName } from '@/services/PayV2Api';
import { postPayAllInPayPersonalCrate, postPayAllInPaySendVerificationCode } from '@/services/PayV2Api';
import { useIntl } from 'umi';
/** 个人 初始认证 */
......@@ -18,28 +18,13 @@ const Personal: React.FC<{}> = () => {
const onFinish = async (values: any) => {
setLoading(true)
// // 绑定手机
// const p1 = await postPayAllInPayBindPhone({phone: values.phone, verificationCode: values.captcha}, {ctlType: 'none'})
// // 实名认证
// const p2 = await postPayAllInPaySetRealName({name: values.name, cardType: values.cardType, cardNo: values.cardNo, phone: values.phone}, {ctlType:'none'})
// 提交
const { code } = await postPayAllInPayPersonalCrate({...values}, { ctlType: "none" })
const { code } = await postPayAllInPayPersonalCrate({...values, verificationCodeType: BIND_PHONE}, { ctlType: "none" })
if(code === 1000) {
reloadFormData()
message.success('操作成功')
message.success(intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.caozuochenggong', defaultMessage: '操作成功' }))
} else {
setLoading(false)
}
// Promise.all([p1, p2, p3]).then(res => {
// if(res.every(item => item['code'] === 1000)) {
// reloadFormData()
// message.success('操作成功')
// } else {
// message.error('接口请求异常')
// }
// setLoading(false)
// })
}
const { text, isActive, start } = useCountDown({
......@@ -142,17 +127,17 @@ const Personal: React.FC<{}> = () => {
<Row gutter={8}>
<Col span={20}>
<Form.Item
name="captcha"
name="verificationCode"
noStyle
rules={[
{
required: true,
message: intl.formatMessage({ id: 'payandSettle.eAccountApprove.components.personal.captcha.message' })
},
{
pattern: /^\d{5}$/,
message: intl.formatMessage({ id: 'payandSettle.eAccountApprove.components.personal.captcha.message' })
}
// {
// pattern: /^\d{5}$/,
// message: intl.formatMessage({ id: 'payandSettle.eAccountApprove.components.personal.captcha.message' })
// }
]}
>
<Input placeholder={intl.formatMessage({ id: 'payandSettle.eAccountApprove.components.personal.captcha.placeholder' })} />
......@@ -166,7 +151,7 @@ const Personal: React.FC<{}> = () => {
<Form.Item {...tailFormItemLayout}>
<Button type="primary" htmlType="submit" loading={loading}>
提交
{intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.tijiao', defaultMessage: '提交' })}
</Button>
</Form.Item>
</Form>
......
......@@ -10,7 +10,6 @@ import { createFormActions } from '@formily/antd'
import { bindSchema, unbindSchema } from '../../schema/modal'
import ModalForm from '@/components/ModalForm'
import PhoneCode from '../phone'
import { getManageCountryAreaGetTelCode } from '@/services/ManageV2Api'
import { useAsyncSelect } from '@/formSchema/effects/useAsyncSelect'
import { useIntl } from 'umi'
......@@ -43,12 +42,12 @@ const PersonalFinish: React.FC<{}> = () => {
Promise.all([p1, p2]).then(res => {
if(res.every(item => item['code'] === 1000)) {
reloadFormData()
message.success('操作成功')
message.success(intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.caozuochenggong', defaultMessage: '操作成功' }))
ctl.setFinish(true) // 已经完善
ctl.setPerfection(false) // 不需要完善
ctl.setShowAnchor(true)
} else {
message.error('接口请求异常')
message.error(intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.jiekouqingqiuyi', defaultMessage: '接口请求异常' }))
}
setLoading(false)
})
......@@ -72,7 +71,7 @@ const PersonalFinish: React.FC<{}> = () => {
const { text, isActive, start } = useCountDown({
maxTime: 60,
minTime: 0,
initText: '获取验证码',
initText: intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.huoquyanzhengma', defaultMessage: '获取验证码' }),
onEnd: () => { console.log("end") },
decayRate: 1,
delay: 1 * 1000
......@@ -89,7 +88,7 @@ const PersonalFinish: React.FC<{}> = () => {
identityNo: data.cardNo,
})
if(res.code === 1000) {
setExtra(`已将验证码发送至您尾号为${data.phone.substr(7, 4)}的手机号`)
setExtra(`${intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.yijiangyanzhengma', defaultMessage: '已将验证码发送至您尾号为' })}${data.phone.substr(7, 4)}${intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.deshoujihao', defaultMessage: '的手机号' })}`)
start()
reloadFormData()
}
......@@ -106,7 +105,6 @@ const PersonalFinish: React.FC<{}> = () => {
}
const handleBind = () => {
console.log(bindRef)
bindRef.current.setVisible(true)
}
......@@ -128,9 +126,9 @@ const PersonalFinish: React.FC<{}> = () => {
const unbindBlank = () => {
Modal.confirm({
title: '提示',
title: intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.tishi', defaultMessage: '提示' }),
icon: <ExclamationCircleOutlined />,
content: '是否确定解绑该银行卡?',
content: intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.shifouquedingjie', defaultMessage: '是否确定解绑该银行卡?' }),
onOk() {
postPayAllInPayUnbindBankCard({cardNo: data.bankNo}).then(({code, data}) => {
if(code === 1000) {
......@@ -146,49 +144,49 @@ const PersonalFinish: React.FC<{}> = () => {
return (<div>
{!perfection ? <div>
<MellowCard headStyle={{borderBottom:'none'}} title="个人信息" id="personalInfo">
<MellowCard headStyle={{borderBottom:'none'}} title={intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.gerenxinxi', defaultMessage: '个人信息' })} id="personalInfo">
<Row>
<Col span={12}>
<Row className={styles['card-list']}>
<Col span={6} className={styles['card-list_title']}>姓名</Col>
<Col span={6} className={styles['card-list_title']}>{intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.xingming', defaultMessage: '姓名' })}</Col>
<Col>{data.name}</Col>
</Row>
</Col>
<Col span={12}>
<Row className={styles['card-list']}>
<Col span={6} className={styles['card-list_title']}>证件类型</Col>
<Col>{data.cardType === 1 ? '身份证' : '' }</Col>
<Col span={6} className={styles['card-list_title']}>{intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.zhengjianleixing', defaultMessage: '证件类型' })}</Col>
<Col>{data.cardType === 1 ? intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.shenfenzheng', defaultMessage: '身份证' }) : '' }</Col>
</Row>
</Col>
</Row>
<Row>
<Col span={12}>
<Row className={styles['card-list']}>
<Col span={6} className={styles['card-list_title']}>证件号码</Col>
<Col span={6} className={styles['card-list_title']}>{intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.zhengjianhaoma', defaultMessage: '证件号码' })}</Col>
<Col>{data.cardNo}</Col>
</Row>
</Col>
<Col span={12}>
<Row className={styles['card-list']}>
<Col span={6} className={styles['card-list_title']}>手机号</Col>
<Col><p><span>{data.phone || '暂无'}</span><Button type="link" onClick={handleBind}>{data.phone ? '解绑' : '绑定'}</Button></p></Col>
<Col span={6} className={styles['card-list_title']}>{intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.shoujihao', defaultMessage: '手机号' })}</Col>
<Col><p><span>{data.phone || intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.zanwu', defaultMessage: '暂无' })}</span><Button type="link" onClick={handleBind}>{data.phone ? intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.jiebang', defaultMessage: '解绑' }) : intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.bangding', defaultMessage: '绑定' })}</Button></p></Col>
</Row>
</Col>
</Row>
</MellowCard>
{
data.bankNo ? <>
<MellowCard headStyle={{borderBottom:'none'}} style={{marginTop: 16}} title="银行账户" id="accountInfo">
<MellowCard headStyle={{borderBottom:'none'}} style={{marginTop: 16}} title={intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.yinhangzhanghu', defaultMessage: '银行账户' })} id="accountInfo">
<Row>
<Col span={12}>
<Row className={styles['card-list']}>
<Col span={6} className={styles['card-list_title']}>银行账号</Col>
<Col><p><span>{data.bankNo || '暂无'}</span><Button type="link" onClick={unbindBlank}>解绑</Button></p></Col>
<Col span={6} className={styles['card-list_title']}>{intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.yinhangzhanghao', defaultMessage: '银行账号' })}</Col>
<Col><p><span>{data.bankNo || intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.zanwu', defaultMessage: '暂无' })}</span><Button type="link" onClick={unbindBlank}>{intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.jiebang', defaultMessage: '解绑' })}</Button></p></Col>
</Row>
</Col>
<Col span={12}>
<Row className={styles['card-list']}>
<Col span={6} className={styles['card-list_title']}>开户行</Col>
<Col span={6} className={styles['card-list_title']}>{intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.kaihuhang', defaultMessage: '开户行' })}</Col>
<Col>{data.bankName}</Col>
</Row>
</Col>
......@@ -196,21 +194,21 @@ const PersonalFinish: React.FC<{}> = () => {
</MellowCard>
<MellowCard headStyle={{ borderBottom: 'none' }} style={{ marginTop: 16 }} title={intl.formatMessage({ id: 'payandSettle.eAccountApprove.components.personalFinish.mellowCard.3' })} id="electricInfo">
<Row className={styles['card-list']}>
<Col span={6} className={styles['card-list_title']}>电子协议</Col>
<Col><p><span>{data.contractNo}</span><Button type="link" onClick={contractPreview}>查看签约协议</Button></p></Col>
<Col span={6} className={styles['card-list_title']}>{intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.dianzixieyi', defaultMessage: '电子协议' })}</Col>
<Col><p><span>{data.contractNo}</span><Button type="link" onClick={contractPreview}>{intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.zhakanqianyuexie', defaultMessage: '查看签约协议' })}</Button></p></Col>
</Row>
</MellowCard>
</>
:
<MellowCard headStyle={{borderBottom:'none'}} style={{marginTop: 16}} title="">
<h3><SoundOutlined style={{color:'#00A98F'}} /> 进一步完善资料,可实现提现功能~</h3>
<Button type="primary" onClick={handleFinish}>立即完善</Button>
<h3><SoundOutlined style={{color:'#00A98F'}} /> {intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.jinyibuwanshan', defaultMessage: '进一步完善资料,可实现提现功能~' })}</h3>
<Button type="primary" onClick={handleFinish}>{intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.lijiwanshan', defaultMessage: '立即完善' })}</Button>
</MellowCard>
}
</div>
:
<div>
<MellowCard headStyle={{borderBottom:'none'}} title="完善信息">
<MellowCard headStyle={{borderBottom:'none'}} title={intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.wanshanxinxi', defaultMessage: '完善信息' })}>
<Form
{...formItemLayout}
form={form}
......@@ -225,7 +223,7 @@ const PersonalFinish: React.FC<{}> = () => {
>
<Form.Item
name="cardNo"
label="银行账号"
label={intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.yinhangzhanghao', defaultMessage: '银行账号' })}
rules={[
{
required: true,
......@@ -238,7 +236,7 @@ const PersonalFinish: React.FC<{}> = () => {
<Form.Item
name="cardName"
label="开户行"
label={intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.kaihuhang', defaultMessage: '开户行' })}
rules={[
{
required: true,
......@@ -249,7 +247,7 @@ const PersonalFinish: React.FC<{}> = () => {
<Input placeholder={intl.formatMessage({ id: 'payandSettle.eAccountApprove.components.personalFinish.mellowCard.4.idcard.placeholder' })} />
</Form.Item>
<Form.Item label="验证码" extra={extra}>
<Form.Item label={intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.yanzhengma', defaultMessage: '验证码' })} extra={extra}>
<Row gutter={8}>
<Col span={20}>
<Form.Item
......@@ -258,7 +256,7 @@ const PersonalFinish: React.FC<{}> = () => {
rules={[
{
required: true,
message: '请输入验证码'
message: intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.qingshuruyanzheng', defaultMessage: '请输入验证码' })
},
// {
// pattern: /^\d{6}$/,
......@@ -276,23 +274,23 @@ const PersonalFinish: React.FC<{}> = () => {
</Form.Item>
<Form.Item
label="电子协议签约"
label={intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.dianzixieyiqian', defaultMessage: '电子协议签约' })}
name="contractNo"
// rules={[{ required: true, message: '请签约电子协议' }]}
>
{ data.contractNo ? data.contractNo : (<Button onClick={clickSign} icon={<EditOutlined />} style={{width: '100%'}}>前往签约</Button>)}
{ data.contractNo ? data.contractNo : (<Button onClick={clickSign} icon={<EditOutlined />} style={{width: '100%'}}>{intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.qianwangqianyue', defaultMessage: '前往签约' })}</Button>)}
</Form.Item>
<Form.Item {...tailFormItemLayout}>
<Button type="primary" htmlType="submit" loading={loading}>
提交
{intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.tijiao', defaultMessage: '提交' })}
</Button>
</Form.Item>
</Form>
</MellowCard>
</div>}
<ModalForm
modalTitle={data?.phone ? '解绑手机号' : '绑定新手机号'}
modalTitle={data?.phone ? intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.jiebangshoujihao', defaultMessage: '解绑手机号' }) : intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.bangdingxinshouji', defaultMessage: '绑定新手机号' })}
currentRef={bindRef}
confirm={handleBindSubmit}
actions={bindActions}
......
import React, { useEffect, useRef, useState } from 'react'
import { Row, Input, Col, Button, Result, message, Modal } from 'antd';
import { useState } from 'react'
import { useIntl } from 'umi'
import { Row, Input, Col, Button, } from 'antd';
import useCountDown from '@/utils/hooks';
import { postPayAllInPaySendVerificationCode } from '@/services/PayV2Api';
import { UNBIND_PHONE } from '../../constant';
/**
* e账户认证 发送短信验证码
......@@ -11,13 +11,14 @@ import { UNBIND_PHONE } from '../../constant';
*/
const PhoneCode = (props) => {
const intl = useIntl()
const { value, form, schema } = props
const [loading, setLoading] = useState(false)
const {text, isActive, start} = useCountDown({
maxTime: 60,
minTime: 0,
initText: '获取验证码',
initText: intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.huoquyanzhengma', defaultMessage: '获取验证码' }),
onEnd: () => {
setLoading(false)
},
......
......@@ -8,21 +8,31 @@ import { useCallback, useState, useEffect } from 'react'
*/
export const MEMBER_TYPE_CORPORATE = 1;
/**
* 个人会员
* 企业个人会员
*/
export const MEMBER_TYPE_INDIVIDUAL = 2;
export const MEMBER_TYPE_CORPORATEPERSONAL = 2;
/**
* 渠道会员
*/
export const MEMBER_TYPE_CHANNEL = 3;
/**
* 渠道个人会员
*/
export const MEMBER_TYPE_CHANNELPERSONAL = 4;
export const MEMBER_TYPE = {
[MEMBER_TYPE_CORPORATE]: 'company',
[MEMBER_TYPE_INDIVIDUAL]: 'personal',
[MEMBER_TYPE_CHANNEL]: 'company',
[MEMBER_TYPE_CORPORATEPERSONAL]: 'personal',
[MEMBER_TYPE_CHANNELPERSONAL]: 'personal',
};
export const useEDetail = () => {
const { memberRoleType } = getAuth() || {}
/** 详情数据 null从未认证 undefined接口数据还没加载 */
const { memberType } = getAuth() || {}
/** 详情数据 */
const [formData, setFormData] = useState<PostPayAllInPayGetMemberInfoResponse>(undefined)
/** 企业/个人 */
const [type, setType] = useState<'company'|'personal'>(MEMBER_TYPE[memberRoleType])
const [type, setType] = useState<'company'|'personal'>(MEMBER_TYPE[memberType])
/** 是否需要完善 */
const [perfection, setPerfection] = useState<boolean>(false)
/** 是否完善过 */
......@@ -39,7 +49,8 @@ export const useEDetail = () => {
const reloadFormData = useCallback(async () => {
const { code, data, message: msg } = await postPayAllInPayGetMemberInfo({}, {ctlType: 'none'})
if (code === 1000) {
!data && await postPayAllInPayCreateMember({}, {ctlType: 'none'})
// 企业未设置信息0 或者 个人未提交
((type === "company" && data.step === 0) || (type === "personal" && data.isSubmit === 2)) && await postPayAllInPayCreateMember({}, {ctlType: 'none'})
setFormData(data)
} else {
message.error(msg)
......
......@@ -20,7 +20,7 @@ const EAccountApprove: React.FC<{}> = () => {
backed,
ctl,
data } = formContext
console.log(data, 'data')
const personalLinkList = [
{ title: intl.formatMessage({ id: 'payandSettle.eAccountApprove.personalLinkList.1' }), id: 'personalInfo' },
{ title: intl.formatMessage({ id: 'payandSettle.eAccountApprove.personalLinkList.2' }), id: 'accountInfo' },
......@@ -53,7 +53,7 @@ const EAccountApprove: React.FC<{}> = () => {
<div>
<EDetailContext.Provider value={formContext}>
<EDetailHeader
title="通联账户"
title={intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.tonglianzhanghu', defaultMessage: '通联账户' })}
anchorList={renderAnchorList()}
backLink={backed ? handleBack : false}
/>
......
import { PATTERN_MAPS } from "@/constants/regExp";
import { getIntl } from 'umi'
const intl = getIntl()
export const bindSchema = {
type: 'object',
......@@ -15,7 +18,7 @@ export const bindSchema = {
"x-component": 'mega-layout',
"x-component-props": {
grid: true,
label: '手机号',
label: intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.shoujihao', defaultMessage: '手机号' }),
columns: 6,
enableSafeWidth: false,
className: 'noMarbottom',
......@@ -34,7 +37,7 @@ export const bindSchema = {
"x-rules": [
{
required: true,
message: '请选择区号'
message: intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.qingxuanzequhao', defaultMessage: '请选择区号' })
}
]
},
......@@ -46,15 +49,15 @@ export const bindSchema = {
"x-rules": [
{
pattern: PATTERN_MAPS.phone,
message: '请输入正确的手机号'
message: intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.qingshuruzhengque', defaultMessage: '请输入正确的手机号' })
},
{
required: true,
message: '请输入手机号'
message: intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.qingshurushouji', defaultMessage: '请输入手机号' })
}
],
"x-component-props": {
placeholder: '输入你的手机号码',
placeholder: intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.shurunideshou', defaultMessage: '输入你的手机号码' }),
style: { width: '100%' }
}
}
......@@ -66,7 +69,7 @@ export const bindSchema = {
"x-rules": [
{
required: true,
message: '请填写验证码'
message: intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.qingtianxieyanzheng', defaultMessage: '请填写验证码' })
},
// {
// pattern: /^\d{6}$/,
......@@ -76,7 +79,7 @@ export const bindSchema = {
"x-component-props": {
btnSize: 'middle',
inputSize: 'middle',
placeholder: '请输入短信验证码',
placeholder: intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.qingshuruduanxin', defaultMessage: '请输入短信验证码' }),
type: null
}
},
......@@ -116,15 +119,15 @@ export const unbindSchema = {
"x-rules": [
{
pattern: PATTERN_MAPS.phone,
message: '请输入正确的手机号'
message: intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.qingshuruzhengque', defaultMessage: '请输入正确的手机号' })
},
{
required: true,
message: '请输入手机号'
message: intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.qingshurushouji', defaultMessage: '请输入手机号' })
}
],
"x-component-props": {
placeholder: '输入你的手机号码',
placeholder: intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.shurunideshou', defaultMessage: '输入你的手机号码' }),
style: { width: '100%' }
}
}
......@@ -136,7 +139,7 @@ export const unbindSchema = {
"x-rules": [
{
required: true,
message: '请填写验证码'
message: intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.qingtianxieyanzheng', defaultMessage: '请填写验证码' })
},
// {
// pattern: /^\d{6}$/,
......@@ -146,7 +149,7 @@ export const unbindSchema = {
"x-component-props": {
btnSize: 'middle',
inputSize: 'middle',
placeholder: '请输入短信验证码',
placeholder: intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.qingshuruduanxin', defaultMessage: '请输入短信验证码' }),
type: null
}
},
......
......@@ -79,7 +79,7 @@ const basicInfo: ISchema = {
type: 'string',
required: true,
enum: Object.values(PURCHASE_TYPE).map((item, index) => ({ label: item, value: ++index })),
title: '{{help(`"采购类型", "有固定采购金额:采购金额固定,合同期内不可超过采购金额,无固定采购金额:采购金额不固定,可在合同期内按需采购"`)}}',
title: `{{help('${getIntl().formatMessage({ id: 'schma.purchase.purchaseType.help', defaultMessage: '采购类型' })}', '${getIntl().formatMessage({ id: 'schma.purchase.purchaseType.help.text', defaultMessage: "有固定采购金额:采购金额固定,合同期内不可超过采购金额,无固定采购金额:采购金额不固定,可在合同期内按需采购" })}')}}`,
"x-component-props": {
placeholder: intl.formatMessage({ id: 'schma.purchase.purchaseType' }),
}
......
import { ISchema } from '@formily/antd';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { getIntl } from 'umi';
const intl = getIntl();
export const tableListSchema: ISchema = {
type: 'object',
......
......@@ -36,7 +36,7 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => {
const { data, payList, currentPayInfoId } = useContext(OrderDetailContext)
const [visible, setVisible] = useState(false)
const [checked, setChecked] = useState<any>({})
const [current, setCurrent] = useState(0) // 0选择方式 1线下支付方式 2授信支付 3余额支付 4微信支付 5货到付款 6支付宝 100账期 101月结 1000清除
const [current, setCurrent] = useState(0) // 0选择方式 1线下支付方式 2授信支付 3余额支付 4微信支付 5货到付款 6支付宝 9账期 8月结 99通联 1000清除
const [payStep, setPayStep] = useState(0) // 支付模态框的步骤 0选方式 1下一步的具体操作 2输入支付密码
const mobilePayFlag = useRef(0) // 用于判断移动支付类型 4微信6支付宝
const [qrLoading, setQrLoading] = useState(false)
......@@ -208,20 +208,25 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => {
setPayStep(1)
setQrLoading(true)
handleSubmitPay()
} else if(checked.id === 100) {
} else if(checked.id === 9) {
console.log('选择了账期结算模式')
mobilePayFlag.current = 0
setCurrent(100)
setCurrent(9)
setPayStep(1)
} else if(checked.id === 101) {
} else if(checked.id === 8) {
console.log('选择了月结结算模式')
mobilePayFlag.current = 0
setCurrent(101)
setCurrent(8)
setPayStep(1)
} else if(checked.id === 11 || checked.id === 12 || checked.id === 13 || checked.id === 14) {
console.log('选择了通联模式')
mobilePayFlag.current = 0
setCurrent(99)
setPayStep(1)
}
else {
message.error('暂只支持线下支付、授信额度支付、余额支付、货到付款、微信、支付宝、账期月结支付方式')
}
// else {
// message.error('暂只支持线下支付、授信额度支付、余额支付、货到付款、微信、支付宝、账期月结支付方式')
// }
} else {
message.error('请先选择支付方式')
}
......@@ -260,13 +265,17 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => {
} else if(current === 5) {
// 开始提交货到付款数据
handleSubmitPay()
} else if(current === 100) {
} else if(current === 9) {
// 开始提交账期结算数据
// @todo 与后端联调传参
handleSubmitPay()
} else if(current === 101) {
} else if(current === 8) {
// 开始提交月结结算数据
// @todo 与后端联调传参
handleSubmitPay()
} else if(current === 4 || current === 6) {
// 微信 支付宝 提示扫码支付
return message.info('请扫码完成支付')
} else if(current === 99) {
// 提交通联支付
handleSubmitPay()
}
......@@ -484,7 +493,6 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => {
本次需支付(元):
</span>
<span className={cx(style.amount, style.amount2)}>
{/* {data?.payments?.filter(item => item.paymentId === Number(currentPayInfoId))[0]?.payAmount?.toFixed(2)} */}
{Number(paymentAmount).toFixed(2)}
</span>
</p>
......@@ -508,7 +516,6 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => {
本次需支付(元):
</span>
<span className={cx(style.amount, style.amount2)}>
{/* {data?.payments?.filter(item => item.paymentId === Number(currentPayInfoId))[0]?.payAmount?.toFixed(2)} */}
{Number(paymentAmount).toFixed(2)}
</span>
</p>
......@@ -532,7 +539,6 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => {
支付金额(元):
</span>
<span className={cx(style.amount, style.amount2)}>
{/* {data?.payments?.filter(item => item.paymentId === Number(currentPayInfoId))[0]?.payAmount?.toFixed(2)} */}
{Number(paymentAmount).toFixed(2)}
</span>
</p>
......@@ -604,7 +610,7 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => {
}
{/* 账期结算 */}
{
current === 100 &&
current === 9 &&
<div>
<p style={{fontWeight: "bold"}}>账期支付确认</p>
<p>
......@@ -620,7 +626,7 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => {
支付渠道:
</span>
<span className={style.amount}>
{/* {transformPayList['5'][0]['label']} */}
{checked?.channel}
</span>
</p>
<p>
......@@ -628,7 +634,6 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => {
支付金额(元):
</span>
<span className={cx(style.amount, style.amount2)}>
{/* {data?.payments?.filter(item => item.paymentId === Number(currentPayInfoId))[0]?.payAmount?.toFixed(2)} */}
{Number(paymentAmount).toFixed(2)}
</span>
</p>
......@@ -636,7 +641,7 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => {
}
{/* 月结结算 */}
{
current === 101 &&
current === 8 &&
<div>
<p style={{fontWeight: "bold"}}>月结支付确认</p>
<p>
......@@ -652,7 +657,38 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => {
支付渠道:
</span>
<span className={style.amount}>
{/* {transformPayList['6'][0]['label']} */}
{checked?.channel}
</span>
</p>
<p>
<span className={style.title}>
支付金额(元):
</span>
<span className={cx(style.amount, style.amount2)}>
{Number(paymentAmount).toFixed(2)}
</span>
</p>
</div>
}
{/* 通联 */}
{
current === 99 &&
<div>
<p style={{fontWeight: "bold"}}>通联支付确认</p>
<p>
<span className={style.title}>
支付方式:
</span>
<span className={style.amount}>
通联支付
</span>
</p>
<p>
<span className={style.title}>
支付渠道:
</span>
<span className={style.amount}>
{checked?.channel}
</span>
</p>
<p>
......@@ -660,7 +696,6 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => {
支付金额(元):
</span>
<span className={cx(style.amount, style.amount2)}>
{/* {data?.payments?.filter(item => item.paymentId === Number(currentPayInfoId))[0]?.payAmount?.toFixed(2)} */}
{Number(paymentAmount).toFixed(2)}
</span>
</p>
......
......@@ -50,7 +50,7 @@ export const baseOrderListColumns: any = () => {
fixed: 'left',
},
{
title: intl.formatMessage({ id: 'purchaseOrder.dingdanzhaiyao', defaultMessage: '订单摘要' }),
title: intl.formatMessage({ id: 'purchaseOrder.dingdandigest', defaultMessage: '订单摘要' }),
align: 'center',
dataIndex: 'digest',
key: 'digest',
......
......@@ -116,7 +116,12 @@ const SaleOrder: React.FC<SaleOrderProps> = () => {
payForm.setFieldsValue({'payChart': `${window.location.origin}/memberCenter/tranactionAbility/purchaseOrder/readyPayOrder/detail?id=${currentPayRef.current.orderId}`})
} else if(payModel === "app") {
// 生成二维码
QRCode.toDataURL(JSON.stringify({path: 'MycommodityDetails', orderId: currentPayRef.current.orderId})).then((url:any) => {
QRCode.toDataURL(JSON.stringify({
path: 'MycommodityDetails',
orderId: currentPayRef.current.orderId,
buyerMemberId: currentPayRef.current.buyerMemberId,
buyerRoleId: currentPayRef.current.buyerRoleId
})).then((url:any) => {
setQrCode(url)
}).catch((err:any) => {
console.error(err)
......@@ -193,9 +198,6 @@ const SaleOrder: React.FC<SaleOrderProps> = () => {
// 转单调接口逻辑
const handelTransformOrder = async (defaultRoleId, orderId?) => {
if(!serversRoles.length) {
return message.error(intl.formatMessage({ id: 'saleOrder.dangqiandengluhui', defaultMessage: '当前登录会员,无服务消费者角色,无法进行转单' }))
}
orderIds.current = selectRef.current.length ? selectRef.current : (orderId ? [orderId] : []);
if(orderId) {
const { code, data } = await postOrderVendorTransferPreview({
......@@ -228,12 +230,18 @@ const SaleOrder: React.FC<SaleOrderProps> = () => {
// 单个转单 传入默认第一个角色
const onlyTransform = (orderId) => {
if(!serversRoles.length) {
return message.error(intl.formatMessage({ id: 'saleOrder.dangqiandengluhui', defaultMessage: '当前登录会员,无服务消费者角色,无法进行转单' }))
}
handelTransformOrder(serversRoles[0]['memberRoleId'], orderId)
transformActions.setFieldValue('orderId', orderId)
}
// 批量转
const batchTransform = () => {
if(!serversRoles.length) {
return message.error(intl.formatMessage({ id: 'saleOrder.dangqiandengluhui', defaultMessage: '当前登录会员,无服务消费者角色,无法进行转单' }))
}
handelTransformOrder(serversRoles[0]['memberRoleId'])
transformActions.setFieldValue('orderId', null)
}
......
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