Commit d77ca746 authored by XieZhiXiong's avatar XieZhiXiong

Merge branch 'dev' into test

parents 280bff38 ef941cc9
import { RouterChild } from '../../utils'; // import { RouterChild } from '../../utils';
import goodsOffer from './goodsOffer'; import goodsOffer from './goodsOffer';
import inquiryQuote from './inquiryQuote'; import inquiryQuote from './inquiryQuote';
import confirmInquiryQuote from './confirmInquiryQuote'; import confirmInquiryQuote from './confirmInquiryQuote';
...@@ -11,7 +11,7 @@ import comfirmDemandPosts from './comfirmDemandPosts'; ...@@ -11,7 +11,7 @@ import comfirmDemandPosts from './comfirmDemandPosts';
/** /**
* 交易能力路由 * 交易能力路由
*/ */
const TranactionRoute: RouterChild = { const TranactionRoute = {
path: '/memberCenter/tranactionAbility', path: '/memberCenter/tranactionAbility',
name: 'tranactionAbility', name: 'tranactionAbility',
icon: 'smile', icon: 'smile',
...@@ -191,12 +191,28 @@ const TranactionRoute: RouterChild = { ...@@ -191,12 +191,28 @@ const TranactionRoute: RouterChild = {
// 新增交易规则 // 新增交易规则
{ {
path: '/memberCenter/tranactionAbility/transactionRules/addRule', path: '/memberCenter/tranactionAbility/transactionRules/add',
name: 'addRule', name: 'addRule',
hideInMenu: true, hideInMenu: true,
component: '@/pages/transaction/transactionRules/addRule', component: '@/pages/transaction/transactionRules/addRule',
}, },
// 编辑交易规则
{
path: '/memberCenter/tranactionAbility/transactionRules/edit',
name: 'editRule',
hideInMenu: true,
component: '@/pages/transaction/transactionRules/addRule',
},
// 交易规则详情
{
path: '/memberCenter/tranactionAbility/transactionRules/detail',
name: 'ruleDetail',
hideInMenu: true,
component: '@/pages/transaction/transactionRules/addRule',
},
// 供应会员评价管理 // 供应会员评价管理
{ {
path: '/memberCenter/tranactionAbility/supplierEvaluation', path: '/memberCenter/tranactionAbility/supplierEvaluation',
......
...@@ -60,21 +60,21 @@ const AccountLists: React.FC<{}> = () => { ...@@ -60,21 +60,21 @@ const AccountLists: React.FC<{}> = () => {
}, },
{ {
title: '账户余额', title: '账户余额',
dataIndex: 'accountStatus', dataIndex: 'accountBalance',
key: 'accountStatus', key: 'accountBalance',
render: text => `¥${text}` render: text => `¥${text.toFixed(2)}`
}, },
{ {
title: '锁定余额', title: '锁定余额',
dataIndex: 'lockBalance', dataIndex: 'lockBalance',
key: 'lockBalance', key: 'lockBalance',
render: text => `¥${text}` render: text => `¥${text.toFixed(2)}`
}, },
{ {
title: '可用余额', title: '可用余额',
dataIndex: 'usableBalance', dataIndex: 'usableBalance',
key: 'usableBalance', key: 'usableBalance',
render: (t, r) => `¥${r.accountStatus - r.lockBalance}` render: (t, r) => `¥${((r.accountBalance*100 - r.lockBalance*100)/100).toFixed(2)}`
}, },
{ {
title: '会员状态', title: '会员状态',
......
...@@ -12,13 +12,15 @@ import { memberStatusMap, moveStatusMap, statusMap } from '../../constant' ...@@ -12,13 +12,15 @@ import { memberStatusMap, moveStatusMap, statusMap } from '../../constant'
import { SettingOutlined, StopOutlined } from '@ant-design/icons' import { SettingOutlined, StopOutlined } from '@ant-design/icons'
import { validatorByte } from '@/utils/regExp' import { validatorByte } from '@/utils/regExp'
import { PublicApi } from '@/services/api' import { PublicApi } from '@/services/api'
import { GetPayMemberAssetAccountGetMemberAssetAccountResponse } from '@/services/PayApi' import { StandardTable } from 'god'
const { TextArea } = Input const { TextArea } = Input
const AccountDetail: React.FC<{}> = () => { const AccountDetail: React.FC<{}> = () => {
const refTrade = useRef<any>({})
const refMove = useRef<any>({})
const [checkForm] = Form.useForm() const [checkForm] = Form.useForm()
const [dealRecord, setDealRecord] = useState<any>() // const [dealRecord, setDealRecord] = useState<any>()
const [moveRecord, setMoveRecord] = useState<any>() const [moveRecord, setMoveRecord] = useState<any>()
const [isDisabled, setIsDisabled] = useState<boolean>(false) const [isDisabled, setIsDisabled] = useState<boolean>(false)
const [visibleModal, setVisibleModal] = useState<boolean>(false) const [visibleModal, setVisibleModal] = useState<boolean>(false)
...@@ -26,7 +28,6 @@ const AccountDetail: React.FC<{}> = () => { ...@@ -26,7 +28,6 @@ const AccountDetail: React.FC<{}> = () => {
useEffect(() => { useEffect(() => {
getAccountInfo() getAccountInfo()
// pay/memberAssetAccount/getMemberAssetAccount
}, []) }, [])
const getAccountInfo = async () => { const getAccountInfo = async () => {
...@@ -35,13 +36,33 @@ const AccountDetail: React.FC<{}> = () => { ...@@ -35,13 +36,33 @@ const AccountDetail: React.FC<{}> = () => {
const { code, data } = res const { code, data } = res
setDetails(data) setDetails(data)
if(code === 1000){ if(code === 1000){
let tradeRecord = await PublicApi.getPayMemberAssetAccountGetAccountTradeRecord({memberAssetAccountId: data.id + ''}) // let tradeRecord = await PublicApi.getPayMemberAssetAccountGetAccountTradeRecord({memberAssetAccountId: data.id + ''})
let statusRecord = await PublicApi.getPayMemberAssetAccountGetAccountCheckRecord({memberAssetAccountId: data.id + ''}) let statusRecord = await PublicApi.getPayMemberAssetAccountGetAccountCheckRecord({memberAssetAccountId: data.id + ''})
setDealRecord(tradeRecord.data) // setDealRecord(tradeRecord.data)
setMoveRecord(statusRecord.data) setMoveRecord(statusRecord.data)
} }
} }
// 获取交易记录
const fetchTradeData = (params) => {
return new Promise((resolve, reject) => {
PublicApi.getPayMemberAssetAccountGetAccountTradeRecord({memberAssetAccountId: history.location.query.id + '', ...params}).then(res => {
const { data } = res
resolve(data)
})
})
}
// // 获取流转记录
// const fetchMoveData = (params) => {
// return new Promise((resolve, reject) => {
// PublicApi.getPayMemberAssetAccountGetAccountCheckRecord({memberAssetAccountId: history.location.query.id + ''}).then(res => {
// const { data } = res
// resolve(data)
// })
// })
// }
const columns: ColumnType<any>[] = [ const columns: ColumnType<any>[] = [
{ {
title: '交易流水号', title: '交易流水号',
...@@ -65,11 +86,6 @@ const AccountDetail: React.FC<{}> = () => { ...@@ -65,11 +86,6 @@ const AccountDetail: React.FC<{}> = () => {
key: 'operation', key: 'operation',
}, },
{ {
title: '交易金额(元)',
dataIndex: 'tradeMoney',
key: 'tradeMoney',
},
{
title: '状态', title: '状态',
dataIndex: 'status', dataIndex: 'status',
key: 'status', key: 'status',
...@@ -91,8 +107,8 @@ const AccountDetail: React.FC<{}> = () => { ...@@ -91,8 +107,8 @@ const AccountDetail: React.FC<{}> = () => {
}, },
{ {
title: '操作角色', title: '操作角色',
dataIndex: 'parentMemberRoleName', dataIndex: ['memberAssetAccount','parentMemberRoleName'],
key: 'parentMemberRoleName', key: 'id',
}, },
{ {
title: '状态', title: '状态',
...@@ -165,7 +181,7 @@ const AccountDetail: React.FC<{}> = () => { ...@@ -165,7 +181,7 @@ const AccountDetail: React.FC<{}> = () => {
<div className={styles.statistic}> <div className={styles.statistic}>
<div className={styles['statistic-title']}>可用余额(元):</div> <div className={styles['statistic-title']}>可用余额(元):</div>
<div className={styles['statistic-amount']}> <div className={styles['statistic-amount']}>
{`${details.accountBalance - details.lockBalance}`.replace(/\B(?=(\d{3})+(?!\d))/g, ',')} {`${((details.accountBalance*100 - details.lockBalance*100)/100).toFixed(2)}`.replace(/\B(?=(\d{3})+(?!\d))/g, ',')}
</div> </div>
</div> </div>
<div className={styles['repayment-end']}> <div className={styles['repayment-end']}>
...@@ -191,7 +207,7 @@ const AccountDetail: React.FC<{}> = () => { ...@@ -191,7 +207,7 @@ const AccountDetail: React.FC<{}> = () => {
<p className={styles.rightTitle}>账户余额(元):</p> <p className={styles.rightTitle}>账户余额(元):</p>
</Col> </Col>
<Col span={20}> <Col span={20}>
<p className={styles.rightInfo}>{details?.accountBalance}</p> <p className={styles.rightInfo}>{details?.accountBalance?.toFixed(2)}</p>
</Col> </Col>
</Row> </Row>
<Row> <Row>
...@@ -199,7 +215,7 @@ const AccountDetail: React.FC<{}> = () => { ...@@ -199,7 +215,7 @@ const AccountDetail: React.FC<{}> = () => {
<p className={styles.rightTitle}>锁定金额(元):</p> <p className={styles.rightTitle}>锁定金额(元):</p>
</Col> </Col>
<Col span={20}> <Col span={20}>
<p className={styles.rightInfo}>{details?.lockBalance}</p> <p className={styles.rightInfo}>{details?.lockBalance?.toFixed(2)}</p>
</Col> </Col>
</Row> </Row>
<Row> <Row>
...@@ -222,12 +238,24 @@ const AccountDetail: React.FC<{}> = () => { ...@@ -222,12 +238,24 @@ const AccountDetail: React.FC<{}> = () => {
</Space> </Space>
<Space direction="vertical" style={{width:'100%'}}> <Space direction="vertical" style={{width:'100%'}}>
<Card headStyle={{borderBottom:'none'}} title="交易记录"> <Card headStyle={{borderBottom:'none'}} title="交易记录">
<Table dataSource={dealRecord} columns={columns} /> <StandardTable
columns={columns}
currentRef={refTrade}
fetchTableData={(params: any) => fetchTradeData(params)}
/>
</Card> </Card>
</Space> </Space>
<Space direction="vertical" style={{width:'100%'}}> <Space direction="vertical" style={{width:'100%'}}>
<Card headStyle={{borderBottom:'none'}} title="流转记录"> <Card headStyle={{borderBottom:'none'}} title="流转记录">
<Table dataSource={moveRecord} columns={moveColumns} /> <Table columns={moveColumns} dataSource={moveRecord} pagination={false} />
{/* <StandardTable
columns={moveColumns}
currentRef={refMove}
fetchTableData={(params: any) => fetchMoveData(params)}
tableProps={{
pagination: false
}}
/> */}
</Card> </Card>
</Space> </Space>
<Modal <Modal
......
import React, { useState, useEffect, useRef, ReactNode } from 'react' import React, { useState, useEffect, useRef, ReactNode } from 'react'
import { history } from 'umi' import { history } from 'umi'
import { Card, Space, Row, Col, Button, Table } from 'antd' import { Card, Space, Row, Col, Button, Table, Modal } from 'antd'
import { PageHeaderWrapper } from '@ant-design/pro-layout' import { PageHeaderWrapper } from '@ant-design/pro-layout'
import ReutrnEle from '@/components/ReturnEle' import ReutrnEle from '@/components/ReturnEle'
import styles from './index.less' import styles from './index.less'
...@@ -11,16 +11,20 @@ import { ColumnType } from 'antd/lib/table/interface' ...@@ -11,16 +11,20 @@ import { ColumnType } from 'antd/lib/table/interface'
import ModalForm from '@/components/ModalForm' import ModalForm from '@/components/ModalForm'
import { createFormActions } from '@formily/antd' import { createFormActions } from '@formily/antd'
import { rechargeSchema } from './schema' import { rechargeSchema } from './schema'
import { memberStatusMap, moveStatusMap, statusMap } from '../../constant' import { memberStatusMap, moveStatusMap, operationMap, statusMap } from '../../constant'
import { PublicApi } from '@/services/api' import { PublicApi } from '@/services/api'
import { StandardTable } from 'god'
const schemaActions = createFormActions() const schemaActions = createFormActions()
const AccountDetail: React.FC<{}> = () => { const AccountDetail: React.FC<{}> = () => {
const modalRef = useRef<any>() const modalRef = useRef<any>()
const refTrade = useRef<any>({})
// const refMove = useRef<any>({})
const [moveData, setMoveData] = useState<any>()
const [ details, setDetails ] = useState<any>({ accountBalance: 0, lockBalance: 0}) const [ details, setDetails ] = useState<any>({ accountBalance: 0, lockBalance: 0})
const [dealRecord, setDealRecord] = useState<any>([]) const [pageId, setPageId] = useState<any>()
const [moveRecord, setMoveRecord] = useState<any>([]) const [isBtnLoading, setIsBtnLoading] = useState<boolean>(false)
useEffect(() => { useEffect(() => {
getAccountInfo() getAccountInfo()
...@@ -28,17 +32,36 @@ const AccountDetail: React.FC<{}> = () => { ...@@ -28,17 +32,36 @@ const AccountDetail: React.FC<{}> = () => {
const getAccountInfo = async () => { const getAccountInfo = async () => {
const { id } = history.location.query const { id } = history.location.query
setPageId(id)
let res = await PublicApi.getPayAssetAccountGetAssetAccount({id}) let res = await PublicApi.getPayAssetAccountGetAssetAccount({id})
const { code, data } = res const { code, data } = res
setDetails(data) setDetails(data)
if(code === 1000){ PublicApi.getPayAssetAccountGetAccountStatusRecord({memberAssetAccountId: id + ''}).then(res => {
let tradeRecord = await PublicApi.getPayAssetAccountGetAccountTradeRecord({memberAssetAccountId: data.id + ''}) const { data } = res
let statusRecord = await PublicApi.getPayAssetAccountGetAccountStatusRecord({memberAssetAccountId: data.id + ''}) setMoveData(data)
setDealRecord(tradeRecord.data) })
setMoveRecord(statusRecord.data) }
}
// 获取交易记录
const fetchTradeData = (params) => {
return new Promise((resolve, reject) => {
PublicApi.getPayAssetAccountGetAccountTradeRecord({memberAssetAccountId: history.location.query.id + '', ...params}).then(res => {
const { data } = res
resolve(data)
})
})
} }
// // 获取流转记录
// const fetchMoveData = (params) => {
// return new Promise((resolve, reject) => {
// PublicApi.getPayAssetAccountGetAccountStatusRecord({memberAssetAccountId: history.location.query.id + ''}).then(res => {
// const { data } = res
// resolve(data)
// })
// })
// }
const columns: ColumnType<any>[] = [ const columns: ColumnType<any>[] = [
{ {
title: '交易流水号', title: '交易流水号',
...@@ -60,11 +83,7 @@ const AccountDetail: React.FC<{}> = () => { ...@@ -60,11 +83,7 @@ const AccountDetail: React.FC<{}> = () => {
title: '交易项目', title: '交易项目',
dataIndex: 'operation', dataIndex: 'operation',
key: 'operation', key: 'operation',
}, render: (t, r) => operationMap[t]
{
title: '交易金额(元)',
dataIndex: 'tradeMoney',
key: 'tradeMoney',
}, },
{ {
title: '状态', title: '状态',
...@@ -119,6 +138,7 @@ const AccountDetail: React.FC<{}> = () => { ...@@ -119,6 +138,7 @@ const AccountDetail: React.FC<{}> = () => {
]; ];
const handleConfirm = () => { const handleConfirm = () => {
setIsBtnLoading(true)
schemaActions.submit() schemaActions.submit()
} }
...@@ -127,7 +147,21 @@ const AccountDetail: React.FC<{}> = () => { ...@@ -127,7 +147,21 @@ const AccountDetail: React.FC<{}> = () => {
} }
const handleSubmit = (value) => { const handleSubmit = (value) => {
console.log(value) // 提交重置
let parasm = {
memberAssetAccountId: pageId,
money: Number(value.money),
type: value['type'][0]
}
PublicApi.postPayAssetAccountRecharge(parasm).then(res => {
if(res.code === 1000){
getAccountInfo()
refTrade.current.reload()
// refMove.current.reload()
}
modalRef.current.setVisible(false)
setIsBtnLoading(false)
})
} }
const handleRecharge = () => { const handleRecharge = () => {
...@@ -149,7 +183,7 @@ const AccountDetail: React.FC<{}> = () => { ...@@ -149,7 +183,7 @@ const AccountDetail: React.FC<{}> = () => {
<div className={styles.statistic}> <div className={styles.statistic}>
<div className={styles['statistic-title']}>可用余额(元):</div> <div className={styles['statistic-title']}>可用余额(元):</div>
<div className={styles['statistic-amount']}> <div className={styles['statistic-amount']}>
{`${details.accountBalance - details.lockBalance}`.replace(/\B(?=(\d{3})+(?!\d))/g, ',')} {`${((details.accountBalance*100 - details.lockBalance*100)/100).toFixed(2)}`.replace(/\B(?=(\d{3})+(?!\d))/g, ',')}
</div> </div>
</div> </div>
<div className={styles['repayment-end']}> <div className={styles['repayment-end']}>
...@@ -175,7 +209,7 @@ const AccountDetail: React.FC<{}> = () => { ...@@ -175,7 +209,7 @@ const AccountDetail: React.FC<{}> = () => {
<p className={styles.rightTitle}>账户余额(元):</p> <p className={styles.rightTitle}>账户余额(元):</p>
</Col> </Col>
<Col span={20}> <Col span={20}>
<p className={styles.rightInfo}>{details?.accountBalance}</p> <p className={styles.rightInfo}>{details?.accountBalance?.toFixed(2)}</p>
</Col> </Col>
</Row> </Row>
<Row> <Row>
...@@ -183,7 +217,7 @@ const AccountDetail: React.FC<{}> = () => { ...@@ -183,7 +217,7 @@ const AccountDetail: React.FC<{}> = () => {
<p className={styles.rightTitle}>锁定金额(元):</p> <p className={styles.rightTitle}>锁定金额(元):</p>
</Col> </Col>
<Col span={20}> <Col span={20}>
<p className={styles.rightInfo}>{details?.lockBalance}</p> <p className={styles.rightInfo}>{details?.lockBalance?.toFixed(2)}</p>
</Col> </Col>
</Row> </Row>
<Row> <Row>
...@@ -212,12 +246,24 @@ const AccountDetail: React.FC<{}> = () => { ...@@ -212,12 +246,24 @@ const AccountDetail: React.FC<{}> = () => {
</Space> </Space>
<Space direction="vertical" style={{width:'100%'}}> <Space direction="vertical" style={{width:'100%'}}>
<Card headStyle={{borderBottom:'none'}} title="交易记录"> <Card headStyle={{borderBottom:'none'}} title="交易记录">
<Table dataSource={dealRecord} columns={columns} /> <StandardTable
columns={columns}
currentRef={refTrade}
fetchTableData={(params: any) => fetchTradeData(params)}
/>
</Card> </Card>
</Space> </Space>
<Space direction="vertical" style={{width:'100%'}}> <Space direction="vertical" style={{width:'100%'}}>
<Card headStyle={{borderBottom:'none'}} title="流转记录"> <Card headStyle={{borderBottom:'none'}} title="流转记录">
<Table dataSource={moveRecord} columns={moveColumns} /> <Table columns={moveColumns} dataSource={moveData} pagination={false} />
{/* <StandardTable
columns={moveColumns}
currentRef={refMove}
fetchTableData={(params: any) => fetchMoveData(params)}
tableProps={{
pagination: false
}}
/> */}
</Card> </Card>
</Space> </Space>
<ModalForm <ModalForm
...@@ -228,6 +274,11 @@ const AccountDetail: React.FC<{}> = () => { ...@@ -228,6 +274,11 @@ const AccountDetail: React.FC<{}> = () => {
confirm={handleConfirm} confirm={handleConfirm}
onSubmit={handleSubmit} onSubmit={handleSubmit}
cancel={handleCannel} cancel={handleCannel}
modalProps={{
okText: "确定充值",
confirmLoading: isBtnLoading,
destroyOnClose: true
}}
// effects={($, {setFieldState}) => { // effects={($, {setFieldState}) => {
// $('onFieldInputChange', 'money').subscribe(parentState => { // $('onFieldInputChange', 'money').subscribe(parentState => {
// console.log(parentState.value) // console.log(parentState.value)
......
import React, { useState, useEffect, useRef, ReactNode } from 'react' import React, { useState, useEffect, useRef, ReactNode } from 'react'
import { history } from 'umi' import { history } from 'umi'
import { Card, Space, Steps, Row, Col, Button, InputNumber, Table } from 'antd' import { Card, Space, Steps, Row, Col, Button, InputNumber, Table, message } from 'antd'
import { PageHeaderWrapper } from '@ant-design/pro-layout' import { PageHeaderWrapper } from '@ant-design/pro-layout'
import ReutrnEle from '@/components/ReturnEle' import ReutrnEle from '@/components/ReturnEle'
import styles from './index.less' import styles from './index.less'
...@@ -8,15 +8,19 @@ import StatusTag from '@/components/StatusTag' ...@@ -8,15 +8,19 @@ import StatusTag from '@/components/StatusTag'
import cx from 'classnames' import cx from 'classnames'
import moment from 'moment' import moment from 'moment'
import { ColumnType } from 'antd/lib/table/interface' import { ColumnType } from 'antd/lib/table/interface'
import { memberStatusMap, statusMap } from '../../constant' import { memberStatusMap, operationMap, statusMap } from '../../constant'
import { PublicApi } from '@/services/api' import { PublicApi } from '@/services/api'
import { GetSettleAccountsCorporateAccountConfigResponse } from '@/services/SettleApi'
import { StandardTable } from 'god'
const { Step } = Steps; const { Step } = Steps;
const AccountDetail: React.FC<{}> = () => { const AccountDetail: React.FC<{}> = () => {
const refTrade = useRef<any>({})
const [ details, setDetails ] = useState<any>({ accountBalance: 0, lockBalance: 0}) const [ details, setDetails ] = useState<any>({ accountBalance: 0, lockBalance: 0})
const [dealRecord, setDealRecord] = useState<any>() const [withdrawAmount, setWidthdrawAmount] = useState<any>(0)
const [withdrawAmount, setWidthdrawAmount] = useState<number>(0) const [bankDetail, setBankDetail] = useState<GetSettleAccountsCorporateAccountConfigResponse>()
const [btnLoading, setBtnLoading] = useState<boolean>(false)
useEffect(() => { useEffect(() => {
getAccountInfo() getAccountInfo()
...@@ -28,11 +32,20 @@ const AccountDetail: React.FC<{}> = () => { ...@@ -28,11 +32,20 @@ const AccountDetail: React.FC<{}> = () => {
const { code, data } = res const { code, data } = res
setDetails(data) setDetails(data)
if(code === 1000){ if(code === 1000){
let tradeRecord = await PublicApi.getPayAssetAccountGetAccountTradeRecord({memberAssetAccountId: data.id + ''}) let bankRes = await PublicApi.getSettleAccountsCorporateAccountConfig({memberId: data.memberId + ''})
setDealRecord(tradeRecord.data) setBankDetail(bankRes.data)
} }
} }
const fetchTradeData = (params) => {
return new Promise((resolve, reject) => {
PublicApi.getPayAssetAccountGetAccountTradeRecord({memberAssetAccountId: history.location.query.id + '', ...params}).then(res => {
const { data } = res
resolve(data)
})
})
}
const columns: ColumnType<any>[] = [ const columns: ColumnType<any>[] = [
{ {
title: '交易流水号', title: '交易流水号',
...@@ -54,11 +67,7 @@ const AccountDetail: React.FC<{}> = () => { ...@@ -54,11 +67,7 @@ const AccountDetail: React.FC<{}> = () => {
title: '交易项目', title: '交易项目',
dataIndex: 'operation', dataIndex: 'operation',
key: 'operation', key: 'operation',
}, render: (t, r) => operationMap[t]
{
title: '交易金额(元)',
dataIndex: 'tradeMoney',
key: 'tradeMoney',
}, },
{ {
title: '状态', title: '状态',
...@@ -74,7 +83,32 @@ const AccountDetail: React.FC<{}> = () => { ...@@ -74,7 +83,32 @@ const AccountDetail: React.FC<{}> = () => {
]; ];
const handleAllCharge = () => { const handleAllCharge = () => {
setWidthdrawAmount(details.accountBalance - details.lockBalance) let amount = (details.accountBalance*100 - details.lockBalance*100)/100
setWidthdrawAmount(amount)
}
// 提交提现申请
const handleSubmitApply = () => {
setBtnLoading(true)
let amount = (details.accountBalance*100 - details.lockBalance*100)/100
if(withdrawAmount > 0 && withdrawAmount <= amount){ // 大于0并且小于可用金额
let params = {
memberAssetAccountId: details.id,
money: withdrawAmount,
bankAccountName: bankDetail.name,
bankAccount: bankDetail.bankAccount,
bankName: bankDetail.bankDeposit
}
PublicApi.postPayAssetAccountCashOut(params).then(res => {
setBtnLoading(false)
getAccountInfo()
setWidthdrawAmount(0)
refTrade.current.reload()
})
}else{
setBtnLoading(false)
message.error('请正确输入提现金额!')
}
} }
return ( return (
...@@ -108,8 +142,11 @@ const AccountDetail: React.FC<{}> = () => { ...@@ -108,8 +142,11 @@ const AccountDetail: React.FC<{}> = () => {
formatter={value => `${value}`.replace(/\B(?=(\d{3})+(?!\d))/g, ',')} formatter={value => `${value}`.replace(/\B(?=(\d{3})+(?!\d))/g, ',')}
parser={value => value.replace(/\$\s?|(,*)/g, '')} parser={value => value.replace(/\$\s?|(,*)/g, '')}
className={styles['statistic-input']} className={styles['statistic-input']}
onChange={value => setWidthdrawAmount(value)}
precision={2}
min={0}
/> />
<Button <Button
type="text" type="text"
size="small" size="small"
style={{marginLeft:24, color:'#fff'}} style={{marginLeft:24, color:'#fff'}}
...@@ -121,12 +158,12 @@ const AccountDetail: React.FC<{}> = () => { ...@@ -121,12 +158,12 @@ const AccountDetail: React.FC<{}> = () => {
</div> </div>
<div className={styles['repayment-end']}> <div className={styles['repayment-end']}>
<span className={styles['repayment-time']}> <span className={styles['repayment-time']}>
最多可以提现:¥ {details.accountBalance - details.lockBalance} 最多可以提现:¥ {((details.accountBalance*100 - details.lockBalance*100)/100).toFixed(2)}
</span> </span>
</div> </div>
</div> </div>
<div className={styles['repayment-right']}> <div className={styles['repayment-right']}>
<Button ghost>提交</Button> <Button ghost onClick={handleSubmitApply} loading={btnLoading}>提交</Button>
</div> </div>
</div> </div>
</Col> </Col>
...@@ -137,7 +174,7 @@ const AccountDetail: React.FC<{}> = () => { ...@@ -137,7 +174,7 @@ const AccountDetail: React.FC<{}> = () => {
<p className={styles.rightTitle}>账户归属:</p> <p className={styles.rightTitle}>账户归属:</p>
</Col> </Col>
<Col span={20}> <Col span={20}>
<p className={styles.rightInfo}>{details?.parentMemberName}</p> <p className={styles.rightInfo}>{bankDetail?.name}</p>
</Col> </Col>
</Row> </Row>
<Row> <Row>
...@@ -145,7 +182,7 @@ const AccountDetail: React.FC<{}> = () => { ...@@ -145,7 +182,7 @@ const AccountDetail: React.FC<{}> = () => {
<p className={styles.rightTitle}>银行账号:</p> <p className={styles.rightTitle}>银行账号:</p>
</Col> </Col>
<Col span={20}> <Col span={20}>
<p className={styles.rightInfo}>6214 7812 3456 7891 1234</p> <p className={styles.rightInfo}>{bankDetail?.bankAccount}</p>
</Col> </Col>
</Row> </Row>
<Row> <Row>
...@@ -153,7 +190,7 @@ const AccountDetail: React.FC<{}> = () => { ...@@ -153,7 +190,7 @@ const AccountDetail: React.FC<{}> = () => {
<p className={styles.rightTitle}>开户行:</p> <p className={styles.rightTitle}>开户行:</p>
</Col> </Col>
<Col span={20}> <Col span={20}>
<p className={styles.rightInfo}>中国建设银行广州市分行营业部</p> <p className={styles.rightInfo}>{bankDetail?.bankDeposit}</p>
</Col> </Col>
</Row> </Row>
</div> </div>
...@@ -170,7 +207,7 @@ const AccountDetail: React.FC<{}> = () => { ...@@ -170,7 +207,7 @@ const AccountDetail: React.FC<{}> = () => {
<div className={styles.statistic}> <div className={styles.statistic}>
<div className={styles['statistic-title']}>可用余额(元):</div> <div className={styles['statistic-title']}>可用余额(元):</div>
<div className={styles['statistic-amount']}> <div className={styles['statistic-amount']}>
{`${details.accountBalance - details.lockBalance}`.replace(/\B(?=(\d{3})+(?!\d))/g, ',')} {`${((details.accountBalance*100 - details.lockBalance*100)/100).toFixed(2)}`.replace(/\B(?=(\d{3})+(?!\d))/g, ',')}
</div> </div>
</div> </div>
<div className={styles['repayment-end']}> <div className={styles['repayment-end']}>
...@@ -196,7 +233,7 @@ const AccountDetail: React.FC<{}> = () => { ...@@ -196,7 +233,7 @@ const AccountDetail: React.FC<{}> = () => {
<p className={styles.rightTitle}>账户余额(元):</p> <p className={styles.rightTitle}>账户余额(元):</p>
</Col> </Col>
<Col span={20}> <Col span={20}>
<p className={styles.rightInfo}>{details?.accountBalance}</p> <p className={styles.rightInfo}>{details?.accountBalance?.toFixed(2)}</p>
</Col> </Col>
</Row> </Row>
<Row> <Row>
...@@ -204,7 +241,7 @@ const AccountDetail: React.FC<{}> = () => { ...@@ -204,7 +241,7 @@ const AccountDetail: React.FC<{}> = () => {
<p className={styles.rightTitle}>锁定金额(元):</p> <p className={styles.rightTitle}>锁定金额(元):</p>
</Col> </Col>
<Col span={20}> <Col span={20}>
<p className={styles.rightInfo}>{details?.lockBalance}</p> <p className={styles.rightInfo}>{details?.lockBalance?.toFixed(2)}</p>
</Col> </Col>
</Row> </Row>
<Row> <Row>
...@@ -225,7 +262,11 @@ const AccountDetail: React.FC<{}> = () => { ...@@ -225,7 +262,11 @@ const AccountDetail: React.FC<{}> = () => {
</Space> </Space>
<Space direction="vertical" style={{width:'100%'}}> <Space direction="vertical" style={{width:'100%'}}>
<Card headStyle={{borderBottom:'none'}} title="提现处理记录"> <Card headStyle={{borderBottom:'none'}} title="提现处理记录">
<Table dataSource={dealRecord} columns={columns} /> <StandardTable
columns={columns}
currentRef={refTrade}
fetchTableData={(params: any) => fetchTradeData(params)}
/>
</Card> </Card>
</Space> </Space>
</PageHeaderWrapper> </PageHeaderWrapper>
......
import React, { useState, useEffect, useRef } from 'react' import React, { useState, useEffect, useRef } from 'react'
import { Card, Space, Button, } from 'antd' import { Card } from 'antd'
import { PageHeaderWrapper } from '@ant-design/pro-layout' import { PageHeaderWrapper } from '@ant-design/pro-layout'
import { StandardTable } from 'god' import { StandardTable } from 'god'
import { ColumnType } from 'antd/lib/table/interface' import { ColumnType } from 'antd/lib/table/interface'
...@@ -9,7 +9,6 @@ import { createFormActions, FormEffectHooks } from '@formily/antd' ...@@ -9,7 +9,6 @@ import { createFormActions, FormEffectHooks } from '@formily/antd'
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch' import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch'
import { searchSchema } from './schema' import { searchSchema } from './schema'
import { FORM_FILTER_PATH } from '@/formSchema/const' import { FORM_FILTER_PATH } from '@/formSchema/const'
import { PlusOutlined } from '@ant-design/icons'
import EyePreview from '@/components/EyePreview' import EyePreview from '@/components/EyePreview'
import { DatePicker } from '@formily/antd-components' import { DatePicker } from '@formily/antd-components'
import StatusTag from '@/components/StatusTag' import StatusTag from '@/components/StatusTag'
...@@ -69,21 +68,21 @@ const AccountLists: React.FC<{}> = () => { ...@@ -69,21 +68,21 @@ const AccountLists: React.FC<{}> = () => {
}, },
{ {
title: '账户余额', title: '账户余额',
dataIndex: 'accountStatus', dataIndex: 'accountBalance',
key: 'accountStatus', key: 'accountBalance',
render: text => `¥${text}` render: text => `¥${text.toFixed(2)}`
}, },
{ {
title: '锁定余额', title: '锁定余额',
dataIndex: 'lockBalance', dataIndex: 'lockBalance',
key: 'lockBalance', key: 'lockBalance',
render: text => `¥${text}` render: text => `¥${text.toFixed(2)}`
}, },
{ {
title: '可用余额', title: '可用余额',
dataIndex: 'usableBalance', dataIndex: 'usableBalance',
key: 'usableBalance', key: 'usableBalance',
render: (t, r) => `¥${r.accountStatus - r.lockBalance}` render: (t, r) => `¥${((r.accountBalance*100 - r.lockBalance*100)/100).toFixed(2)}`
}, },
] ]
......
...@@ -121,6 +121,16 @@ export const rechargeSchema: ISchema = { ...@@ -121,6 +121,16 @@ export const rechargeSchema: ISchema = {
required: true, required: true,
message: '请输入充值金额' message: '请输入充值金额'
}, },
{
validator: value => {
return isNaN(value)
},
message:'请正确输入数字金额'
},
{
pattern: /^\d+(\.\d{1,2})?$/,
message: '充值金额仅限两位小数',
},
] ]
}, },
...@@ -129,8 +139,6 @@ export const rechargeSchema: ISchema = { ...@@ -129,8 +139,6 @@ export const rechargeSchema: ISchema = {
"x-component": 'CardCheckBox', "x-component": 'CardCheckBox',
"x-component-props": { "x-component-props": {
dataSource: [ dataSource: [
// {id: 1, name: '支付宝', logo: 'https://shushangyun01.oss-cn-shenzhen.aliyuncs.com/66bf577211624304947938a2afde771b1603682420367.png'},
// {id: 2, name: '微信', logo: 'https://shushangyun01.oss-cn-shenzhen.aliyuncs.com/733815c243ce4cec8a8cb10e0e92876f1603682449715.png'}
{id: 1, name: '支付宝', logoUrl: alipay}, {id: 1, name: '支付宝', logoUrl: alipay},
{id: 2, name: '微信', logoUrl: wxpay} {id: 2, name: '微信', logoUrl: wxpay}
], ],
......
...@@ -99,6 +99,7 @@ export const CREDIT_OUTER_STATUS_BADGE_MAP = { ...@@ -99,6 +99,7 @@ export const CREDIT_OUTER_STATUS_BADGE_MAP = {
* 资金账户相关常量 * 资金账户相关常量
*/ */
// 交易记录状态
export const statusMap = { export const statusMap = {
'1': { title: '申请提现', type: 'warning' }, '1': { title: '申请提现', type: 'warning' },
'2': { title: '审核通过', type: 'success' }, '2': { title: '审核通过', type: 'success' },
...@@ -108,23 +109,36 @@ export const CREDIT_OUTER_STATUS_BADGE_MAP = { ...@@ -108,23 +109,36 @@ export const CREDIT_OUTER_STATUS_BADGE_MAP = {
'6': { title: '确认到账', type: 'success' }, '6': { title: '确认到账', type: 'success' },
} }
// 流转状态
export const moveStatusMap = { export const moveStatusMap = {
'1': { title: '冻结', type: 'danger' }, '1': { title: '冻结', type: 'danger' },
'2': { title: '解冻', type: 'success' }, '2': { title: '解冻', type: 'success' },
} }
// 会员状态
export const memberStatusMap = { export const memberStatusMap = {
'1': { title: '正常', type: 'success' }, '1': { title: '正常', type: 'success' },
'2': { title: '已冻结', type: 'danger' }, '2': { title: '已冻结', type: 'danger' },
} }
// 账户状态
export const accountStatusMap = { export const accountStatusMap = {
'1': { title: '正常', className: 'commonStatusValid' }, '1': { title: '正常', className: 'commonStatusValid' },
'2': { title: '已冻结', className: 'commonStatusNoPass' }, '2': { title: '已冻结', className: 'commonStatusNoPass' },
} }
// 会员等级类型
export const memberLevelTypeMap = { export const memberLevelTypeMap = {
'1': '平台会员', '1': '平台会员',
'2': '商户会员', '2': '商户会员',
'3': '渠道会员', '3': '渠道会员',
}
// 操作项目
export const operationMap = {
'1': '账户充值',
'2': '账户提现',
'3': '订单支付',
'4': '订单退款',
'5': '订单返利'
} }
\ No newline at end of file
...@@ -2,11 +2,11 @@ ...@@ -2,11 +2,11 @@
* @Author: XieZhiXiong * @Author: XieZhiXiong
* @Date: 2020-09-29 10:47:07 * @Date: 2020-09-29 10:47:07
* @LastEditors: XieZhiXiong * @LastEditors: XieZhiXiong
* @LastEditTime: 2020-10-26 17:11:54 * @LastEditTime: 2020-10-27 10:33:24
* @Description: 外部流转组件 * @Description: 外部流转组件
*/ */
import React from 'react'; import React from 'react';
import { Steps } from 'antd'; import { Steps, Empty } from 'antd';
import MellowCard from '@/components/MellowCard'; import MellowCard from '@/components/MellowCard';
import styles from './index.less'; import styles from './index.less';
...@@ -34,11 +34,15 @@ const OuterCirculation: React.FC<OuterCirculation> = ({ ...@@ -34,11 +34,15 @@ const OuterCirculation: React.FC<OuterCirculation> = ({
marginBottom: 24, marginBottom: 24,
}} }}
> >
<Steps style={{ marginTop: 30 }} progressDot current={current}> {(steps && steps.length > 0) ? (
{steps.map((item, index) => ( <Steps style={{ marginTop: 30 }} progressDot current={current}>
<Steps.Step key={index} title={item.title} description={item.description} /> {steps.map((item, index) => (
))} <Steps.Step key={index} title={item.title} description={item.description} />
</Steps> ))}
</Steps>
) : (
<Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />
)}
</MellowCard> </MellowCard>
); );
}; };
......
...@@ -46,21 +46,28 @@ interface QuotaApplicationInfo { ...@@ -46,21 +46,28 @@ interface QuotaApplicationInfo {
repayPeriod: number, repayPeriod: number,
// 审批时间 // 审批时间
verifyTime: string, verifyTime: string,
}, } | null,
}; };
const QuotaApplicationInfo: React.FC<QuotaApplicationInfo> = ({ const QuotaApplicationInfo: React.FC<QuotaApplicationInfo> = ({
editable = false, editable = false,
onSubmit, onSubmit,
quotaInfo = {}, quotaInfo = {},
verify = {}, verify,
}) => { }) => {
const [modalVisible, setModalVisible] = useState(false); const [modalVisible, setModalVisible] = useState(false);
const handleSubmit = values => { const handleSubmit = values => {
if (onSubmit) { if (onSubmit) {
const { billDay, repayPeriod, ...rest } = values; const {
applyQuota,
billDay,
repayPeriod,
quotaSlide,
...rest
} = values;
onSubmit({ onSubmit({
applyQuota: +applyQuota,
billDay: +billDay, billDay: +billDay,
repayPeriod: +repayPeriod, repayPeriod: +repayPeriod,
...rest, ...rest,
...@@ -114,7 +121,7 @@ const QuotaApplicationInfo: React.FC<QuotaApplicationInfo> = ({ ...@@ -114,7 +121,7 @@ const QuotaApplicationInfo: React.FC<QuotaApplicationInfo> = ({
marginBottom: 24 marginBottom: 24
}} }}
> >
<Col span={14}> <Col span={verify ? 14 : 24}>
<MellowCard <MellowCard
title="授信申请信息" title="授信申请信息"
extra={( extra={(
...@@ -210,36 +217,38 @@ const QuotaApplicationInfo: React.FC<QuotaApplicationInfo> = ({ ...@@ -210,36 +217,38 @@ const QuotaApplicationInfo: React.FC<QuotaApplicationInfo> = ({
</MellowCard> </MellowCard>
</Col> </Col>
<Col span={10}> {verify ? (
<MellowCard <Col span={10}>
title={( <MellowCard
<div style={{ color: '#fff' }}> title={(
授信审批信息 <div style={{ color: '#fff' }}>
</div> 授信审批信息
)} </div>
style={{ )}
background: '#4279DF', style={{
}} background: '#4279DF',
fullHeight }}
> fullHeight
<div className={styles.approval}> >
<div className={styles['approval-amountWrap']}> <div className={styles.approval}>
<div className={styles['approval-amountWrap']}>
<Descriptions column={1}>
<Descriptions.Item label="审批额度(元)">
<div className={styles['approval-amount']}>
{verify.quota}
</div>
</Descriptions.Item>
</Descriptions>
</div>
<Descriptions column={1}> <Descriptions column={1}>
<Descriptions.Item label="审批额度(元)"> <Descriptions.Item label="审批账单日期">{verify.billDay}</Descriptions.Item>
<div className={styles['approval-amount']}> <Descriptions.Item label="审批还款周期">{verify.repayPeriod}</Descriptions.Item>
{verify.quota} <Descriptions.Item label="审批时间">{verify.verifyTime}</Descriptions.Item>
</div>
</Descriptions.Item>
</Descriptions> </Descriptions>
</div> </div>
<Descriptions column={1}> </MellowCard>
<Descriptions.Item label="审批账单日期">{verify.billDay}</Descriptions.Item> </Col>
<Descriptions.Item label="审批还款周期">{verify.repayPeriod}</Descriptions.Item> ) : null}
<Descriptions.Item label="审批时间">{verify.verifyTime}</Descriptions.Item>
</Descriptions>
</div>
</MellowCard>
</Col>
</Row> </Row>
<Modal <Modal
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* @Author: XieZhiXiong * @Author: XieZhiXiong
* @Date: 2020-09-29 15:51:31 * @Date: 2020-09-29 15:51:31
* @LastEditors: XieZhiXiong * @LastEditors: XieZhiXiong
* @LastEditTime: 2020-10-26 18:46:02 * @LastEditTime: 2020-10-27 09:52:57
* @Description: * @Description:
*/ */
import { ISchema } from '@formily/antd'; import { ISchema } from '@formily/antd';
...@@ -32,6 +32,10 @@ export const editModalSchema: ISchema = { ...@@ -32,6 +32,10 @@ export const editModalSchema: ISchema = {
required: true, required: true,
message: '请填写申请调整额度', message: '请填写申请调整额度',
}, },
{
pattern: PATTERN_MAPS.money,
message: '请填写正数',
},
], ],
}, },
quotaSlide: { quotaSlide: {
......
import React, { Suspense } from 'react'; import React, { Suspense, useEffect, useState } from 'react';
import { import {
PageHeader, PageHeader,
Descriptions, Descriptions,
...@@ -11,114 +11,167 @@ import { ...@@ -11,114 +11,167 @@ import {
import { FormOutlined } from '@ant-design/icons'; import { FormOutlined } from '@ant-design/icons';
import { PageHeaderWrapper } from '@ant-design/pro-layout'; import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { history } from 'umi'; import { history } from 'umi';
import { PublicApi } from '@/services/api';
import { GetPayCreditApplyGetApplyDetailResponse } from '@/services/PayApi';
import { CREDIT_INNER_STATUS, CREDIT_OUTER_STATUS } from '@/constants';
import { usePageStatus } from '@/hooks/usePageStatus';
import AvatarWrap from '@/components/AvatarWrap'; import AvatarWrap from '@/components/AvatarWrap';
import StatusTag from '@/components/StatusTag'; import StatusTag from '@/components/StatusTag';
import { MEMBER_STATUS_TAG_MAP, CREDIT_OUTER_STATUS_TAG_MAP, CREDIT_OUTER_STATUS_BADGE_MAP } from '../../constant';
const OuterCirculation = React.lazy(() => import('../components/OuterCirculation')); const OuterCirculation = React.lazy(() => import('../components/OuterCirculation'));
const QuotaApplicationInfo = React.lazy(() => import('../components/QuotaApplicationInfo')); const QuotaApplicationInfo = React.lazy(() => import('../components/QuotaApplicationInfo'));
const HitoryList = React.lazy(() => import('../components/HistoryList')); const HitoryList = React.lazy(() => import('../components/HistoryList'));
const OuterCirculationRecord = React.lazy(() => import('../components/OuterCirculationRecord')); const OuterCirculationRecord = React.lazy(() => import('../components/OuterCirculationRecord'));
interface DetailInfo {
// 授信id
id: string;
// 申请id
applyId: string;
// 是否是编辑的
isEdit?: boolean;
};
interface QuotaValues {
// 申请调整额度
applyQuota: number | null;
// 申请调整账单日期
billDay: number | null;
// 申请还款周期
repayPeriod: number | null;
};
const QuotaFormQueryDetail: React.FC = () => { const QuotaFormQueryDetail: React.FC = () => {
const { id } = usePageStatus();
const [quotaInfo, setQuotaInfo] = useState<GetPayCreditApplyGetApplyDetailResponse>(null);
const [quotaValues, setQuotaValues] = useState<QuotaValues>({
applyQuota: null,
billDay: null,
repayPeriod: null,
});
const [infoLoading, setInfoloading] = useState(false);
const steps = [ const getQuotaInfo = () => {
{ if (!id) {
title: '提交授信申请单', return;
description: '采购商', }
}, setInfoloading(true);
{ PublicApi.getPayCreditApplyGetApplyDetail({
title: '确认授信申请单', id,
description: '供应商', }).then(res => {
}, if (res.code === 1000) {
{ setQuotaInfo(res.data);
title: '完成', setQuotaValues({
description: '', applyQuota: res.data.applyQuota,
}, billDay: res.data.billDay,
]; repayPeriod: res.data.repayPeriod,
});
}
}).finally(() => {
setInfoloading(false);
});
};
const outerRecord = [ useEffect(() => {
{ getQuotaInfo();
id: 1, }, []);
order: 1,
role: '采购商',
status: 2,
action: '提交授信申请单',
createTime: '2020-05-12 08:08',
opinion: '同意',
},
{
id: 2,
order: 2,
role: '采购商',
status: 2,
action: '提交授信申请单',
createTime: '2020-05-12 08:08',
opinion: '同意',
},
];
return ( return (
<PageHeaderWrapper <Spin spinning={infoLoading}>
title={ <PageHeaderWrapper
<> title={
<PageHeader <>
style={{ padding: '0' }} <PageHeader
onBack={() => history.goBack()} style={{ padding: '0' }}
title={ onBack={() => history.goBack()}
<AvatarWrap title={
info={{ <AvatarWrap
aloneTxt: '单', info={{
name: '申请单号:DPTY12', aloneTxt: '单',
name: `申请单号:${quotaInfo && quotaInfo.applyNo ? quotaInfo.applyNo : ''}`,
}}
extra={quotaInfo && quotaInfo.member ? quotaInfo.member.levelTag || '' : ''}
/>
}
extra={(
<>
</>
)}
>
<Descriptions
size="small"
column={3}
style={{
padding: '0 32px',
}} }}
extra="青铜会员" >
/> <Descriptions.Item label="会员归属">{'暂无'}</Descriptions.Item>
<Descriptions.Item label="会员类型">{quotaInfo?.member?.memberTypeName}</Descriptions.Item>
<Descriptions.Item label="会员角色名称">{quotaInfo?.member?.roleName}</Descriptions.Item>
<Descriptions.Item label="会员状态">
<StatusTag
type={MEMBER_STATUS_TAG_MAP[quotaInfo && quotaInfo.member ? quotaInfo.member.status || 1 : 1]}
title={quotaInfo && quotaInfo.member ? quotaInfo.member.status || 1 : 1}
/>
</Descriptions.Item>
<Descriptions.Item label="外部状态">
<StatusTag type={CREDIT_OUTER_STATUS_TAG_MAP[quotaInfo?.outerStatus]} title={CREDIT_OUTER_STATUS[quotaInfo?.outerStatus]} />
</Descriptions.Item>
<Descriptions.Item label="内部状态">
<Badge color={CREDIT_OUTER_STATUS_BADGE_MAP[quotaInfo?.innerStatus]} text={CREDIT_INNER_STATUS[quotaInfo?.innerStatus]} />
</Descriptions.Item>
</Descriptions>
</PageHeader>
</>
}
>
<Suspense fallback={null}>
<OuterCirculation
steps={
quotaInfo && quotaInfo.outerVerifyRecordList ?
quotaInfo.outerVerifyRecordList.map(item => ({
title: item.operate,
description: item.roleName,
})) :
[]
} }
extra={( current={0}
<> />
</Suspense>
</>
)} <Suspense fallback={null}>
> <QuotaApplicationInfo
<Descriptions quotaInfo={{
size="small" originalQuota: quotaInfo?.originalQuota,
column={3} applyQuota: quotaValues.applyQuota,
style={{ billDay: quotaValues.billDay,
padding: '0 32px', repayPeriod: quotaValues.repayPeriod,
}} applyTime: quotaInfo?.applyTime,
> }}
<Descriptions.Item label="会员归属">广州白马皮具交易中心</Descriptions.Item> verify={
<Descriptions.Item label="会员类型">企业会员</Descriptions.Item> quotaInfo && quotaInfo.verify ? {
<Descriptions.Item label="会员角色名称">采购商</Descriptions.Item> quota: quotaInfo?.verify?.quota,
<Descriptions.Item label="会员状态"> billDay: quotaInfo?.verify?.billDay,
<StatusTag type="success" title="正常" /> repayPeriod: quotaInfo?.verify?.repayPeriod,
</Descriptions.Item> verifyTime: quotaInfo?.verify?.verifyTime,
<Descriptions.Item label="外部状态"> } :
<StatusTag type="success" title="接受申请" /> null
</Descriptions.Item> }
<Descriptions.Item label="内部状态"> editable={false}
<Badge color="#41CC9E" text="正常" /> />
</Descriptions.Item> </Suspense>
</Descriptions>
</PageHeader> <Suspense fallback={null}>
</> <HitoryList dataSource={quotaInfo?.historyApplyList} />
} </Suspense>
>
<Suspense fallback={null}> <Suspense fallback={null}>
<OuterCirculation steps={steps} /> <OuterCirculationRecord dataSource={quotaInfo?.outerVerifyRecordList} />
</Suspense> </Suspense>
</PageHeaderWrapper>
<Suspense fallback={null}> </Spin>
<QuotaApplicationInfo />
</Suspense>
<Suspense fallback={null}>
<HitoryList />
</Suspense>
<Suspense fallback={null}>
<OuterCirculationRecord dataSource={outerRecord} />
</Suspense>
</PageHeaderWrapper>
); );
}; };
......
...@@ -64,7 +64,7 @@ const QuotaFormQuery: React.FC = () => { ...@@ -64,7 +64,7 @@ const QuotaFormQuery: React.FC = () => {
render: (text, record) => ( render: (text, record) => (
<> <>
<EyePreview <EyePreview
url={`/memberCenter/payandSettle/creditApplication/quotaFormQuery/detail`} url={`/memberCenter/payandSettle/creditApplication/quotaFormQuery/detail?id=${record.id}`}
> >
{text} {text}
</EyePreview> </EyePreview>
......
...@@ -9,6 +9,7 @@ import { PublicApi } from '@/services/api'; ...@@ -9,6 +9,7 @@ import { PublicApi } from '@/services/api';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch'; import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { useAsyncInitSelect } from '@/formSchema/effects/useAsyncInitSelect'; import { useAsyncInitSelect } from '@/formSchema/effects/useAsyncInitSelect';
import { FORM_FILTER_PATH } from '@/formSchema/const'; import { FORM_FILTER_PATH } from '@/formSchema/const';
import { coverColFiltersItem } from '@/utils';
import { import {
CREDIT_STATUS_NOT_APPLIED, CREDIT_STATUS_NOT_APPLIED,
CREDIT_STATUS_APPLYING, CREDIT_STATUS_APPLYING,
...@@ -192,7 +193,32 @@ const QuotaMenage: React.FC = () => { ...@@ -192,7 +193,32 @@ const QuotaMenage: React.FC = () => {
}; };
// 初始化高级筛选选项 // 初始化高级筛选选项
const fetchSelectOptions = async () => { const fetchSearchItems = async () => {
const res = await PublicApi.getPayCreditApplyPageItemsByConsumer();
if (res.code === 1000) {
const { data } = res;
const {
statusList = [],
repayStatusList = [],
} = data;
const newColumns = columns.slice();
// filter 0 过滤掉全部选项
coverColFiltersItem(
newColumns,
'statusName',
statusList.map(item => ({ text: item.name, value: item.status })).filter(item => item.value),
);
setColumns(newColumns);
return {
status: statusList.map(item => ({ label: item.name, value: item.status })).filter(item => item.value),
rePayStatus: repayStatusList.map(item => ({ label: item.name, value: item.status })).filter(item => item.value),
};
}
return {}; return {};
}; };
...@@ -218,8 +244,8 @@ const QuotaMenage: React.FC = () => { ...@@ -218,8 +244,8 @@ const QuotaMenage: React.FC = () => {
FORM_FILTER_PATH, FORM_FILTER_PATH,
); );
useAsyncInitSelect( useAsyncInitSelect(
['innerStatus', 'outerStatus'], ['status', 'rePayStatus'],
fetchSelectOptions, fetchSearchItems,
); );
}} }}
schema={listSearchSchema} schema={listSearchSchema}
......
...@@ -7,18 +7,6 @@ ...@@ -7,18 +7,6 @@
*/ */
import { ISchema } from '@formily/antd'; import { ISchema } from '@formily/antd';
import { FORM_FILTER_PATH } from '@/formSchema/const'; import { FORM_FILTER_PATH } from '@/formSchema/const';
import {
CREDIT_STATUS_NOT_APPLIED,
CREDIT_STATUS_APPLYING,
CREDIT_STATUS_NORMAL,
CREDIT_STATUS_FROZEN,
CREDIT_STATUS,
CREDIT_REPAYMENT_STATUS_OUTSTANDING,
CREDIT_REPAYMENT_STATUS_UNCONFIRMED,
CREDIT_REPAYMENT_STATUS_PAID,
CREDIT_REPAYMENT_STATUS_OVERDUE,
CREDIT_REPAYMENT_STATUS,
} from '@/constants';
export const listSearchSchema: ISchema = { export const listSearchSchema: ISchema = {
type: 'object', type: 'object',
...@@ -49,24 +37,7 @@ export const listSearchSchema: ISchema = { ...@@ -49,24 +37,7 @@ export const listSearchSchema: ISchema = {
rePayStatus: { rePayStatus: {
type: 'string', type: 'string',
default: undefined, default: undefined,
enum: [ enum: [],
{
label: CREDIT_STATUS[CREDIT_STATUS_NOT_APPLIED],
value: CREDIT_STATUS_NOT_APPLIED,
},
{
label: CREDIT_STATUS[CREDIT_STATUS_APPLYING],
value: CREDIT_STATUS_APPLYING,
},
{
label: CREDIT_STATUS[CREDIT_STATUS_NORMAL],
value: CREDIT_STATUS_NORMAL,
},
{
label: CREDIT_STATUS[CREDIT_STATUS_FROZEN],
value: CREDIT_STATUS_FROZEN,
},
],
'x-component-props': { 'x-component-props': {
placeholder: '还款状态(全部)', placeholder: '还款状态(全部)',
allowClear: true, allowClear: true,
...@@ -75,24 +46,7 @@ export const listSearchSchema: ISchema = { ...@@ -75,24 +46,7 @@ export const listSearchSchema: ISchema = {
status: { status: {
type: 'string', type: 'string',
default: undefined, default: undefined,
enum: [ enum: [],
{
label: CREDIT_REPAYMENT_STATUS[CREDIT_REPAYMENT_STATUS_OUTSTANDING],
value: CREDIT_REPAYMENT_STATUS_OUTSTANDING
},
{
label: CREDIT_REPAYMENT_STATUS[CREDIT_REPAYMENT_STATUS_UNCONFIRMED],
value: CREDIT_REPAYMENT_STATUS_UNCONFIRMED
},
{
label: CREDIT_REPAYMENT_STATUS[CREDIT_REPAYMENT_STATUS_PAID],
value: CREDIT_REPAYMENT_STATUS_PAID
},
{
label: CREDIT_REPAYMENT_STATUS[CREDIT_REPAYMENT_STATUS_OVERDUE],
value: CREDIT_REPAYMENT_STATUS_OVERDUE
},
],
'x-component-props': { 'x-component-props': {
placeholder: '状态(全部)', placeholder: '状态(全部)',
allowClear: true, allowClear: true,
......
...@@ -24,19 +24,26 @@ const HitoryList = React.lazy(() => import('../../../components/HistoryList')); ...@@ -24,19 +24,26 @@ const HitoryList = React.lazy(() => import('../../../components/HistoryList'));
const OuterCirculationRecord = React.lazy(() => import('../../../components/OuterCirculationRecord')); const OuterCirculationRecord = React.lazy(() => import('../../../components/OuterCirculationRecord'));
interface DetailInfo { interface DetailInfo {
// 授信id
id: string; id: string;
// 申请id
applyId: string;
// 是否是编辑的 // 是否是编辑的
isEdit?: boolean; isEdit?: boolean;
}; };
interface QuotaValues { interface QuotaValues {
// 申请调整额度
applyQuota: number | null; applyQuota: number | null;
// 申请调整账单日期
billDay: number | null; billDay: number | null;
// 申请还款周期
repayPeriod: number | null; repayPeriod: number | null;
}; };
const DetailInfo: React.FC<DetailInfo> = ({ const DetailInfo: React.FC<DetailInfo> = ({
id, id,
applyId,
isEdit = false, isEdit = false,
}) => { }) => {
const [quotaInfo, setQuotaInfo] = useState<GetPayCreditApplyGetApplyDetailResponse>(null); const [quotaInfo, setQuotaInfo] = useState<GetPayCreditApplyGetApplyDetailResponse>(null);
...@@ -58,6 +65,11 @@ const DetailInfo: React.FC<DetailInfo> = ({ ...@@ -58,6 +65,11 @@ const DetailInfo: React.FC<DetailInfo> = ({
}).then(res => { }).then(res => {
if (res.code === 1000) { if (res.code === 1000) {
setQuotaInfo(res.data); setQuotaInfo(res.data);
setQuotaValues({
applyQuota: res.data.applyQuota,
billDay: res.data.billDay,
repayPeriod: res.data.repayPeriod,
});
} }
}).finally(() => { }).finally(() => {
setInfoloading(false); setInfoloading(false);
...@@ -76,11 +88,14 @@ const DetailInfo: React.FC<DetailInfo> = ({ ...@@ -76,11 +88,14 @@ const DetailInfo: React.FC<DetailInfo> = ({
const handleSubmit = () => { const handleSubmit = () => {
setSubmitLoading(true); setSubmitLoading(true);
PublicApi.postPayCreditApplyAddCreditApply({ PublicApi.postPayCreditApplyAddCreditApply({
creditId: +id, creditId: +id,
applyId: applyId ? +applyId : 0,
...quotaValues, ...quotaValues,
}).then(res => { }).then(res => {
if (res.code === 1000) { if (res.code === 1000) {
history.goBack(); setTimeout(() => {
history.goBack();
}, 800);
} }
}).finally(() => { }).finally(() => {
setSubmitLoading(false); setSubmitLoading(false);
...@@ -99,9 +114,9 @@ const DetailInfo: React.FC<DetailInfo> = ({ ...@@ -99,9 +114,9 @@ const DetailInfo: React.FC<DetailInfo> = ({
<AvatarWrap <AvatarWrap
info={{ info={{
aloneTxt: '单', aloneTxt: '单',
name: `申请单号:${quotaInfo?.applyNo}`, name: `申请单号:${quotaInfo && quotaInfo.applyNo ? quotaInfo.applyNo : ''}`,
}} }}
extra={quotaInfo?.member?.levelTag} extra={quotaInfo && quotaInfo.member ? quotaInfo.member.levelTag || '' : ''}
/> />
} }
extra={( extra={(
...@@ -163,17 +178,20 @@ const DetailInfo: React.FC<DetailInfo> = ({ ...@@ -163,17 +178,20 @@ const DetailInfo: React.FC<DetailInfo> = ({
<QuotaApplicationInfo <QuotaApplicationInfo
quotaInfo={{ quotaInfo={{
originalQuota: quotaInfo?.originalQuota, originalQuota: quotaInfo?.originalQuota,
applyQuota: quotaInfo?.applyQuota, applyQuota: quotaValues.applyQuota,
billDay: quotaInfo?.billDay, billDay: quotaValues.billDay,
repayPeriod: quotaInfo?.repayPeriod, repayPeriod: quotaValues.repayPeriod,
applyTime: quotaInfo?.applyTime, applyTime: quotaInfo?.applyTime,
}} }}
verify={{ verify={
quota: quotaInfo?.verify.quota, quotaInfo && quotaInfo.verify ? {
billDay: quotaInfo?.verify.billDay, quota: quotaInfo?.verify?.quota,
repayPeriod: quotaInfo?.verify.repayPeriod, billDay: quotaInfo?.verify?.billDay,
verifyTime: quotaInfo?.verify.verifyTime, repayPeriod: quotaInfo?.verify?.repayPeriod,
}} verifyTime: quotaInfo?.verify?.verifyTime,
} :
null
}
editable={isEdit} editable={isEdit}
onSubmit={handleQuotaSubmit} onSubmit={handleQuotaSubmit}
/> />
......
...@@ -35,7 +35,7 @@ const QuotaPrSubmit: React.FC = () => { ...@@ -35,7 +35,7 @@ const QuotaPrSubmit: React.FC = () => {
render: (text, record) => ( render: (text, record) => (
<> <>
<EyePreview <EyePreview
url={`/memberCenter/payandSettle/creditApplication/quotaPrSubmit/detail`} url={`/memberCenter/payandSettle/creditApplication/quotaPrSubmit/detail?id=${record.id}`}
> >
{text} {text}
</EyePreview> </EyePreview>
...@@ -84,7 +84,7 @@ const QuotaPrSubmit: React.FC = () => { ...@@ -84,7 +84,7 @@ const QuotaPrSubmit: React.FC = () => {
filters: [], filters: [],
onFilter: (value, record) => record.outerStatus === value, onFilter: (value, record) => record.outerStatus === value,
render: (text, record) => ( render: (text, record) => (
<StatusTag type={CREDIT_OUTER_STATUS_TAG_MAP[record.outerStatus]} title={text} /> <StatusTag type={CREDIT_OUTER_STATUS_TAG_MAP[record.outerStatus]} title={record.outerStatusName} />
), ),
}, },
{ {
...@@ -93,7 +93,7 @@ const QuotaPrSubmit: React.FC = () => { ...@@ -93,7 +93,7 @@ const QuotaPrSubmit: React.FC = () => {
align: 'center', align: 'center',
filters: [], filters: [],
onFilter: (value, record) => record.innerStatus === value, onFilter: (value, record) => record.innerStatus === value,
render: (text, record) => <Badge color={CREDIT_OUTER_STATUS_BADGE_MAP[record.innerStatus]} text={text} />, render: (text, record) => <Badge color={CREDIT_OUTER_STATUS_BADGE_MAP[record.innerStatus]} text={record.innerStatusName} />,
}, },
{ {
title: '操作', title: '操作',
......
...@@ -494,6 +494,27 @@ export const isJSONStr = str => { ...@@ -494,6 +494,27 @@ export const isJSONStr = str => {
return str; return str;
} }
/**
* 给 Table columns 的 filters 赋值
* @param {array} data 需要赋值的数组
* @param {string} dataIndex 索引
* @param {array} item 需要赋值的值
*/
export const coverColFiltersItem = (
data: Array<{[key: string]: any}>,
dataIndex: string,
item: {[key: string]: any}
) => {
const index = data.findIndex(i => i.dataIndex === dataIndex);
if (index !== -1) {
data.splice(index, 1, {
...data[index],
filters: item,
});
}
};
export default { export default {
isArray, isArray,
isObject, isObject,
......
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