Commit 9dd97460 authored by 卢均锐's avatar 卢均锐

feat: 缓存支付能力国际化

parent e41961b9
......@@ -18,6 +18,7 @@ import content from './zh-CN/content'
import commodity from './zh-CN/commodity'
import trademark from './zh-CN/trademark'
import repositories from './zh-CN/repositories'
import payandSettle from './zh-CN/payandSettle'
import processRuleSetting from './zh-CN/system/processRuleSetting'
export default {
......@@ -33,6 +34,7 @@ export default {
...commodity,
...trademark,
...repositories,
...payandSettle,
...member,
...purchase,
...editor,
......
This diff is collapsed.
......@@ -5,6 +5,7 @@
* @LastEditTime: 2021-01-18 11:20:03
* @Description:
*/
import { getIntl } from 'umi';
import {
CREDIT_REPAYMENT_STATUS_OUTSTANDING,
CREDIT_REPAYMENT_STATUS_UNCONFIRMED,
......@@ -29,17 +30,18 @@ import {
CREDIT_STATUS_APPLYING,
CREDIT_STATUS_NORMAL,
CREDIT_STATUS_FROZEN,
CREDIT_INNER_STATUS_UNCOMMITTED_PURCHASER,
CREDIT_INNER_STATUS_COMMITTED_PURCHASER,
} from '@/constants/payment';
const intl = getIntl();
// 授信状态 Badge map
// 账单交易状态
export const BILL_TRADE_STATUS_UNCONFIRMED = 1; // 待确认还款结果
export const BILL_TRADE_STATUS_OUTSTANDIND = 2; // 确认未到账
export const BILL_TRADE_STATUS_RECEIVED = 3; // 确认到账
export const BILL_TRADE_STATUS_UNCONFIRMED = 1; // 待确认还款结果
export const BILL_TRADE_STATUS_OUTSTANDIND = 2; // 确认未到账
export const BILL_TRADE_STATUS_RECEIVED = 3; // 确认到账
// 账单状态 StatusTag map
export const BILL_TRADE_STATUS_TAB_MAP = {
......@@ -102,62 +104,61 @@ export const CREDIT_INNER_STATUS_BADGE_MAP_PURCHASER = {
[CREDIT_INNER_STATUS_COMMITTED_PURCHASER]: '#41CC9E',
};
/**
* 资金账户相关常量
*/
// 交易记录状态
export const statusMap = {
'1': { title: '申请提现', type: 'warning' },
'2': { title: '审核通过', type: 'success' },
'3': { title: '审核不通过', type: 'default' },
'4': { title: '提现成功', type: 'success' },
'5': { title: '提现失败', type: 'danger' },
'6': { title: '支付中', type: 'processing' },
'7': { title: '支付失败', type: 'danger' },
'8': { title: '确认到账', type: 'success' },
'9': { title: '支付成功', type: 'success' },
}
export const statusMap = {
'1': { title: intl.formatMessage({id: 'payandSettle.constant.statusMap.1'}), type: 'warning' },
'2': { title: intl.formatMessage({id: 'payandSettle.constant.statusMap.2'}), type: 'success' },
'3': { title: intl.formatMessage({id: 'payandSettle.constant.statusMap.3'}), type: 'default' },
'4': { title: intl.formatMessage({id: 'payandSettle.constant.statusMap.4'}), type: 'success' },
'5': { title: intl.formatMessage({id: 'payandSettle.constant.statusMap.5'}), type: 'danger' },
'6': { title: intl.formatMessage({id: 'payandSettle.constant.statusMap.6'}), type: 'processing' },
'7': { title: intl.formatMessage({id: 'payandSettle.constant.statusMap.7'}), type: 'danger' },
'8': { title: intl.formatMessage({id: 'payandSettle.constant.statusMap.8'}), type: 'success' },
'9': { title: intl.formatMessage({id: 'payandSettle.constant.statusMap.9'}), type: 'success' },
};
// 流转状态
export const moveStatusMap = {
'2': { title: '冻结', type: 'danger' },
'1': { title: '解冻', type: 'success' },
}
'2': { title: intl.formatMessage({id: 'payandSettle.constant.moveStatusMap.1'}), type: 'danger' },
'1': { title: intl.formatMessage({id: 'payandSettle.constant.moveStatusMap.2'}), type: 'success' },
};
// 会员状态
export const memberStatusMap = {
'1': { title: '正常', type: 'success' },
'2': { title: '已冻结', type: 'danger' },
}
'1': { title: intl.formatMessage({id: 'payandSettle.constant.memberStatusMap.1'}), type: 'success' },
'2': { title: intl.formatMessage({id: 'payandSettle.constant.memberStatusMap.2'}), type: 'danger' },
};
// 账户状态
export const accountStatusMap = {
'1': { title: '正常', className: 'commonStatusValid' },
'2': { title: '已冻结', className: 'commonStatusNoPass' },
}
'1': { title: intl.formatMessage({id: 'payandSettle.constant.accountStatusMap.1'}), className: 'commonStatusValid' },
'2': { title: intl.formatMessage({id: 'payandSettle.constant.accountStatusMap.2'}), className: 'commonStatusNoPass' },
};
// 会员等级类型
export const memberLevelTypeMap = {
'1': '平台会员',
'2': '商户会员',
'3': '渠道会员',
}
'1': intl.formatMessage({id: 'payandSettle.constant.memberLevelTypeMap.1'}),
'2': intl.formatMessage({id: 'payandSettle.constant.memberLevelTypeMap.2'}),
'3': intl.formatMessage({id: 'payandSettle.constant.memberLevelTypeMap.3'}),
};
// 操作项目
export const operationMap = {
'1': {title: '账户充值', operator: '+'},
'2': {title: '账户提现', operator: '-'},
'3': {title: '订单支付', operator: '-'},
'4': {title: '订单退款', operator: '+'},
'5': {title: '订单返利', operator: '+'}
}
'1': { title: intl.formatMessage({id: 'payandSettle.constant.operationMap.1'}), operator: '+' },
'2': { title: intl.formatMessage({id: 'payandSettle.constant.operationMap.2'}), operator: '-' },
'3': { title: intl.formatMessage({id: 'payandSettle.constant.operationMap.3'}), operator: '-' },
'4': { title: intl.formatMessage({id: 'payandSettle.constant.operationMap.4'}), operator: '+' },
'5': { title: intl.formatMessage({id: 'payandSettle.constant.operationMap.5'}), operator: '+' },
};
// 会员类型
export const accountMemberType = {
'1': '企业会员',
'2': '企业个人会员',
'3': '渠道会员',
'4': '渠道个人会员',
}
'1': intl.formatMessage({id: 'payandSettle.constant.accountMemberType.1'}),
'2': intl.formatMessage({id: 'payandSettle.constant.accountMemberType.2'}),
'3': intl.formatMessage({id: 'payandSettle.constant.accountMemberType.3'}),
'4': intl.formatMessage({id: 'payandSettle.constant.accountMemberType.4'}),
};
......@@ -5,7 +5,7 @@ import {
Spin,
Badge,
} from 'antd';
import { history } from 'umi';
import { history, useIntl } from 'umi';
import { isNumber } from 'lodash';
import { getPayCreditHandleGetApplyDetail, GetPayCreditHandleGetApplyDetailResponse, postPayCreditHandleUpdateVerify } from '@/services/PayV2Api';
import {
......@@ -73,6 +73,7 @@ interface QuotaInfo extends GetPayCreditHandleGetApplyDetailResponse {
};
const DetailInfo: React.FC<DetailInfoProps> = (props) => {
const intl = useIntl();
const {
id,
creditId,
......@@ -190,8 +191,8 @@ const DetailInfo: React.FC<DetailInfoProps> = (props) => {
title={
<AvatarWrap
info={{
aloneTxt: '单',
name: `申请单号:${quotaInfo && quotaInfo.member ? quotaInfo.member.applyNo : ''}`,
aloneTxt: intl.formatMessage({ id: 'payandSettle.creditManage.components.detailInfo.avatarWrap.aloneTxt' }),
name: `${intl.formatMessage({ id: 'payandSettle.creditManage.components.detailInfo.avatarWrap.name' })}${quotaInfo && quotaInfo.member ? quotaInfo.member.applyNo : ''}`,
}}
extra={quotaInfo?.member?.levelTag}
/>
......@@ -209,19 +210,19 @@ const DetailInfo: React.FC<DetailInfoProps> = (props) => {
padding: '0 32px',
}}
>
<Descriptions.Item label="会员名称">{quotaInfo?.member.memberName}</Descriptions.Item>
<Descriptions.Item label="会员类型">{quotaInfo?.member.memberTypeName}</Descriptions.Item>
<Descriptions.Item label="会员角色名称">{quotaInfo?.member.roleName}</Descriptions.Item>
<Descriptions.Item label="会员状态">
<Descriptions.Item label={intl.formatMessage({ id: 'payandSettle.creditManage.components.detailInfo.descriptions.1' })}>{quotaInfo?.member.memberName}</Descriptions.Item>
<Descriptions.Item label={intl.formatMessage({ id: 'payandSettle.creditManage.components.detailInfo.descriptions.2' })}>{quotaInfo?.member.memberTypeName}</Descriptions.Item>
<Descriptions.Item label={intl.formatMessage({ id: 'payandSettle.creditManage.components.detailInfo.descriptions.3' })}>{quotaInfo?.member.roleName}</Descriptions.Item>
<Descriptions.Item label={intl.formatMessage({ id: 'payandSettle.creditManage.components.detailInfo.descriptions.4' })}>
<StatusTag
type={CREDIT_STATUS_TAG_MAP[quotaInfo && quotaInfo.member ? quotaInfo.member.status : 'default']}
title={quotaInfo && quotaInfo.member ? CREDIT_STATUS[quotaInfo.member.status] : ''}
/>
</Descriptions.Item>
<Descriptions.Item label="外部状态">
<Descriptions.Item label={intl.formatMessage({ id: 'payandSettle.creditManage.components.detailInfo.descriptions.5' })}>
<StatusTag type={CREDIT_OUTER_STATUS_TAG_MAP[quotaInfo?.member.outerStatus]} title={CREDIT_OUTER_STATUS[quotaInfo?.member.outerStatus]} />
</Descriptions.Item>
<Descriptions.Item label="内部状态">
<Descriptions.Item label={intl.formatMessage({ id: 'payandSettle.creditManage.components.detailInfo.descriptions.6' })}>
<Badge color={CREDIT_INNER_STATUS_BADGE_MAP[quotaInfo?.member.innerStatus] || '#606266'} text={quotaInfo?.member.innerStatusName} />
</Descriptions.Item>
</Descriptions>
......
import React from 'react';
import {
Tabs,
Badge,
import { useIntl } from 'umi';
import {
Tabs,
Badge,
} from 'antd';
import PolymericTable from '@/components/PolymericTable';
import { EditableColumns } from '@/components/PolymericTable/interface';
import MellowCard from '@/components/MellowCard';
import StatusTag from '@/components/StatusTag';
import {
CREDIT_OUTER_STATUS,
import {
CREDIT_OUTER_STATUS,
} from '@/constants/payment';
import {
CREDIT_INNER_STATUS_BADGE_MAP,
CREDIT_OUTER_STATUS_TAG_MAP,
import {
CREDIT_INNER_STATUS_BADGE_MAP,
CREDIT_OUTER_STATUS_TAG_MAP,
} from '../../../constant';
import styles from './index.less';
......@@ -23,7 +24,7 @@ export interface InnerHistoryItem {
jobTitle: string;
status: number;
operate: string;
operateTime: string,
operateTime: string,
opinion: string;
};
......@@ -36,104 +37,105 @@ export interface OuterHistoryItem {
};
interface FlowRecordsProps {
outerHistory?: OuterHistoryItem[];
outerHistory?: OuterHistoryItem[];
innerHistory: InnerHistoryItem[];
};
const FlowRecords: React.FC<FlowRecordsProps> = ({ outerHistory = [], innerHistory }) => {
const intl = useIntl();
const outerColumns: EditableColumns[] = [
{
title: '序号',
title: intl.formatMessage({ id: 'payandSettle.creditManage.components.flowRecords.outerColumns.index' }),
dataIndex: 'index',
align: 'center',
render: (_, record, index) => index + 1,
render: (_, record, index) => index + 1,
},
{
title: '操作角色',
title: intl.formatMessage({ id: 'payandSettle.creditManage.components.flowRecords.outerColumns.roleName' }),
dataIndex: 'roleName',
align: 'center',
},
{
title: '状态',
title: intl.formatMessage({ id: 'payandSettle.creditManage.components.flowRecords.outerColumns.status' }),
dataIndex: 'status',
align: 'center',
align: 'center',
render: (text, record) => (
<StatusTag type={CREDIT_OUTER_STATUS_TAG_MAP[text]} title={CREDIT_OUTER_STATUS[text]} />
),
},
{
title: '操作',
title: intl.formatMessage({ id: 'payandSettle.creditManage.components.flowRecords.outerColumns.operate' }),
dataIndex: 'operate',
align: 'center',
},
{
title: '操作时间',
title: intl.formatMessage({ id: 'payandSettle.creditManage.components.flowRecords.outerColumns.operateTime' }),
dataIndex: 'operateTime',
align: 'center',
ellipsis: true,
ellipsis: true,
},
{
title: '审核意见',
title: intl.formatMessage({ id: 'payandSettle.creditManage.components.flowRecords.outerColumns.opinion' }),
dataIndex: 'opinion',
align: 'center',
ellipsis: true,
ellipsis: true,
},
];
const innerColumns: EditableColumns[] = [
{
title: '序号',
title: intl.formatMessage({ id: 'payandSettle.creditManage.components.flowRecords.innerColumns.step' }),
dataIndex: 'step',
align: 'center',
},
{
title: '操作人',
title: intl.formatMessage({ id: 'payandSettle.creditManage.components.flowRecords.innerColumns.operator' }),
dataIndex: 'operator',
align: 'center',
},
{
title: '部门',
title: intl.formatMessage({ id: 'payandSettle.creditManage.components.flowRecords.innerColumns.department' }),
dataIndex: 'department',
align: 'center',
},
{
title: '职位',
title: intl.formatMessage({ id: 'payandSettle.creditManage.components.flowRecords.innerColumns.jobTitle' }),
dataIndex: 'jobTitle',
align: 'center',
},
{
title: '状态',
title: intl.formatMessage({ id: 'payandSettle.creditManage.components.flowRecords.innerColumns.status' }),
dataIndex: 'status',
align: 'center',
align: 'center',
render: (text, record) => (
<Badge color={CREDIT_INNER_STATUS_BADGE_MAP[text] || '#606266'} text={record.statusName} />
),
},
{
title: '操作',
title: intl.formatMessage({ id: 'payandSettle.creditManage.components.flowRecords.innerColumns.operate' }),
dataIndex: 'operate',
align: 'center',
},
{
title: '操作时间',
title: intl.formatMessage({ id: 'payandSettle.creditManage.components.flowRecords.innerColumns.operateTime' }),
dataIndex: 'operateTime',
align: 'center',
ellipsis: true,
ellipsis: true,
},
{
title: '审核意见',
title: intl.formatMessage({ id: 'payandSettle.creditManage.components.flowRecords.innerColumns.opinion' }),
dataIndex: 'opinion',
align: 'center',
ellipsis: true,
ellipsis: true,
},
];
return (
<MellowCard>
<Tabs onChange={() => {}}>
<Tabs onChange={() => { }}>
{outerHistory ? (
<Tabs.TabPane tab="外部流转记录" key="1">
<Tabs.TabPane tab={intl.formatMessage({ id: 'payandSettle.creditManage.components.flowRecords.tab.1' })} key="1">
<PolymericTable
rowKey="step"
dataSource={outerHistory}
......@@ -143,7 +145,7 @@ const FlowRecords: React.FC<FlowRecordsProps> = ({ outerHistory = [], innerHisto
/>
</Tabs.TabPane>
) : null}
<Tabs.TabPane tab="内部流转记录" key="2">
<Tabs.TabPane tab={intl.formatMessage({ id: 'payandSettle.creditManage.components.flowRecords.tab.2' })} key="2">
<PolymericTable
rowKey="step"
dataSource={innerHistory}
......@@ -157,4 +159,4 @@ const FlowRecords: React.FC<FlowRecordsProps> = ({ outerHistory = [], innerHisto
);
};
export default FlowRecords;
\ No newline at end of file
export default FlowRecords;
import React from 'react';
import { useIntl } from 'umi';
import MellowCard from '@/components/MellowCard';
import PolymericTable from '@/components/PolymericTable';
import { EditableColumns } from '@/components/PolymericTable/interface';
......@@ -6,7 +7,7 @@ import EyePreview from '@/components/EyePreview';
interface HistoryListHistoryListProps {
dataSource: {
applyNo: string,
applyNo: string,
originalQuota: number;
applyQuota: number;
auditQuota: number;
......@@ -17,14 +18,14 @@ interface HistoryListHistoryListProps {
};
const HistoryList: React.FC<HistoryListHistoryListProps> = ({
dataSource = [],
target,
dataSource = [],
target,
}) => {
const intl = useIntl();
const columns: EditableColumns[] = [
{
title: '申请单号',
dataIndex: 'applyNo',
title: intl.formatMessage({ id: 'payandSettle.creditManage.components.historyList.columns.applyNo' }),
dataIndex: 'applyNo',
render: (text, record) => (
<EyePreview
url={`${target ? target : '/memberCenter/payandSettle/creditManage/quotaFormQuery/detail'}?id=${record.id}&creditId=${record.creditId}`}
......@@ -34,22 +35,22 @@ const HistoryList: React.FC<HistoryListHistoryListProps> = ({
),
},
{
title: '调整前额度(元)',
title: intl.formatMessage({ id: 'payandSettle.creditManage.components.historyList.columns.originalQuota' }),
dataIndex: 'originalQuota',
align: 'center',
},
{
title: '申请调整额度(元)',
title: intl.formatMessage({ id: 'payandSettle.creditManage.components.historyList.columns.applyQuota' }),
dataIndex: 'applyQuota',
align: 'center',
},
{
title: '审批调整额度(元)',
title: intl.formatMessage({ id: 'payandSettle.creditManage.components.historyList.columns.auditQuota' }),
dataIndex: 'auditQuota',
align: 'center',
},
{
title: '申请时间',
title: intl.formatMessage({ id: 'payandSettle.creditManage.components.historyList.columns.applyTime' }),
dataIndex: 'applyTime',
align: 'center',
},
......@@ -57,9 +58,9 @@ const HistoryList: React.FC<HistoryListHistoryListProps> = ({
return (
<MellowCard
title="历史授信申请"
title={intl.formatMessage({ id: 'payandSettle.creditManage.components.historyList.title' })}
style={{
marginBottom: 24,
marginBottom: 24,
}}
>
<PolymericTable
......@@ -73,4 +74,4 @@ const HistoryList: React.FC<HistoryListHistoryListProps> = ({
);
};
export default HistoryList;
\ No newline at end of file
export default HistoryList;
/*
* @Author: XieZhiXiong
* @Date: 2020-09-29 15:51:31
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-01-04 10:44:01
* @Description:
*/
import { ISchema } from '@formily/antd';
import { PATTERN_MAPS } from '@/constants/regExp';
export const editModalSchema: ISchema = {
type: 'object',
properties: {
MEGA_LAYOUT: {
type: 'object',
'x-component': 'mega-layout',
'x-component-props': {
labelAlign: 'top',
full: true,
},
properties: {
quota: {
type: 'string',
title: '审批额度',
'x-component-props': {
placeholder: '',
addonBefore: '¥',
},
'x-rules': [
{
required: true,
message: '请填写审批额度',
},
],
},
quotaSlide: {
type: 'number',
title: '',
'x-component': 'range',
'x-component-props': {
min: 0,
// max: 1024,
// marks: {
// 0: {
// label: '{{MinMarks}}',
// },
// 1024: {
// label: '{{MaxMarks}}',
// },
// },
step: 0.01,
style: {
margin: '0 20px 28px'
},
},
},
billDay: {
type: 'string',
title: '审批账单日期',
'x-component-props': {
placeholder: '',
addonAfter: '日',
},
'x-rules': [
{
required: true,
message: '请填写申请调整账单日期',
},
{
pattern: PATTERN_MAPS.quantity,
message: '请填写大于等于1的正整数',
},
{
validator(value) {
const intVal = +value;
return intVal > 28 || intVal < 0 ? '请输入大于0 小于等于 28的数值' : '';
}
},
],
},
repayPeriod: {
type: 'string',
title: '审批还款周期',
'x-component-props': {
placeholder: '',
addonAfter: '天',
},
'x-rules': [
{
required: true,
message: '请填写申请还款周期',
},
{
pattern: PATTERN_MAPS.quantity,
message: '请填写大于等于1的正整数',
},
],
},
},
},
},
};
\ No newline at end of file
/*
* @Author: XieZhiXiong
* @Date: 2020-09-29 15:51:31
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-01-04 10:44:01
* @Description:
*/
import { getIntl } from 'umi';
import { ISchema } from '@formily/antd';
import { PATTERN_MAPS } from '@/constants/regExp';
const intl = getIntl();
export const editModalSchema: ISchema = {
type: 'object',
properties: {
MEGA_LAYOUT: {
type: 'object',
'x-component': 'mega-layout',
'x-component-props': {
labelAlign: 'top',
full: true,
},
properties: {
quota: {
type: 'string',
title: intl.formatMessage({id: 'payandSettle.creditManage.components.quotaApplicationInfo.editModalSchema.quota'}),
'x-component-props': {
placeholder: '',
addonBefore: intl.formatMessage({id: 'payandSettle.creditManage.components.quotaApplicationInfo.editModalSchema.quota.addonBefore'}),
},
'x-rules': [
{
required: true,
message: intl.formatMessage({id: 'payandSettle.creditManage.components.quotaApplicationInfo.editModalSchema.quota.message'}),
},
],
},
quotaSlide: {
type: 'number',
title: '',
'x-component': 'range',
'x-component-props': {
min: 0,
// max: 1024,
// marks: {
// 0: {
// label: '{{MinMarks}}',
// },
// 1024: {
// label: '{{MaxMarks}}',
// },
// },
step: 0.01,
style: {
margin: '0 20px 28px',
},
},
},
billDay: {
type: 'string',
title: intl.formatMessage({id: 'payandSettle.creditManage.components.quotaApplicationInfo.editModalSchema.billDay'}),
'x-component-props': {
placeholder: '',
addonAfter: intl.formatMessage({id: 'payandSettle.creditManage.components.quotaApplicationInfo.editModalSchema.billDay.addonAfter'}),
},
'x-rules': [
{
required: true,
message: intl.formatMessage({id: 'payandSettle.creditManage.components.quotaApplicationInfo.editModalSchema.billDay.message.1'}),
},
{
pattern: PATTERN_MAPS.quantity,
message: intl.formatMessage({id: 'payandSettle.creditManage.components.quotaApplicationInfo.editModalSchema.billDay.message.2'}),
},
{
validator(value) {
const intVal = +value;
return intVal > 28 || intVal < 0
? intl.formatMessage({id: 'payandSettle.creditManage.components.quotaApplicationInfo.editModalSchema.billDay.message.3'})
: '';
},
},
],
},
repayPeriod: {
type: 'string',
title: intl.formatMessage({id: 'payandSettle.creditManage.components.quotaApplicationInfo.editModalSchema.repayPeriod'}),
'x-component-props': {
placeholder: '',
addonAfter: intl.formatMessage({id: 'payandSettle.creditManage.components.quotaApplicationInfo.editModalSchema.repayPeriod.addonAfter'}),
},
'x-rules': [
{
required: true,
message: intl.formatMessage({id: 'payandSettle.creditManage.components.quotaApplicationInfo.editModalSchema.repayPeriod.message.1'}),
},
{
pattern: PATTERN_MAPS.quantity,
message: intl.formatMessage({id: 'payandSettle.creditManage.components.quotaApplicationInfo.editModalSchema.repayPeriod.message.2'}),
},
],
},
},
},
},
};
/*
* @Author: XieZhiXiong
* @Date: 2020-10-28 17:29:14
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-01-18 11:30:49
* @Description: 提交审核 Modal
*/
import React, { useEffect } from 'react';
import { Modal } from 'antd';
import { createAsyncFormActions, FormEffectHooks, FormPath } from '@formily/antd';
import NiceForm from '@/components/NiceForm';
import { auditModalSchema } from './schema';
const modalFormActions = createAsyncFormActions();
const {
onFieldValueChange$,
onFieldInputChange$,
} = FormEffectHooks;
interface VerifyModalProps {
visible: boolean;
confirmLoading: boolean;
onSubmit: (values: { agree: 0 | 1, reason: string }) => void;
onVisible: (flag: boolean) => void;
/**
* 是否只可以选择 不接受申请
*/
rejected?: boolean;
};
const VerifyModal: React.FC<VerifyModalProps> = ({
visible,
confirmLoading,
onSubmit,
onVisible,
rejected = false,
}) => {
useEffect(() => {
// 内部状态为 审核通过 才能选择 审核通过选项
if (rejected) {
modalFormActions.setFieldState('agree', state => {
const newMenu =
state.props.enum.map(
(item: { label: string, value: any }) => ({
...item,
disabled: item.value === 1,
})
);
FormPath.setIn(state, 'props.enum', newMenu);
FormPath.setIn(state, 'value', 0);
});
}
}, [rejected]);
const handleSubmit = values => {
if (onSubmit) {
onSubmit(values);
}
};
return (
<Modal
title="提交审核"
visible={visible}
confirmLoading={confirmLoading}
onOk={() => modalFormActions.submit()}
onCancel={() => onVisible(false)}
>
<NiceForm
effects={($, { setFieldState }) => {
onFieldValueChange$('agree').subscribe(fieldState => {
setFieldState('opinion', state => {
state.visible = !fieldState.value;
});
});
}}
actions={modalFormActions}
schema={auditModalSchema}
onSubmit={handleSubmit}
/>
</Modal>
);
};
export default VerifyModal;
\ No newline at end of file
/*
* @Author: XieZhiXiong
* @Date: 2020-10-28 17:29:14
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-01-18 11:30:49
* @Description: 提交审核 Modal
*/
import React, { useEffect } from 'react';
import { useIntl } from 'umi';
import { Modal } from 'antd';
import { createAsyncFormActions, FormEffectHooks, FormPath } from '@formily/antd';
import NiceForm from '@/components/NiceForm';
import { auditModalSchema } from './schema';
const modalFormActions = createAsyncFormActions();
const {
onFieldValueChange$,
onFieldInputChange$,
} = FormEffectHooks;
interface VerifyModalProps {
visible: boolean;
confirmLoading: boolean;
onSubmit: (values: { agree: 0 | 1, reason: string }) => void;
onVisible: (flag: boolean) => void;
/**
* 是否只可以选择 不接受申请
*/
rejected?: boolean;
};
const VerifyModal: React.FC<VerifyModalProps> = ({
visible,
confirmLoading,
onSubmit,
onVisible,
rejected = false,
}) => {
const intl = useIntl();
useEffect(() => {
// 内部状态为 审核通过 才能选择 审核通过选项
if (rejected) {
modalFormActions.setFieldState('agree', state => {
const newMenu =
state.props.enum.map(
(item: { label: string, value: any }) => ({
...item,
disabled: item.value === 1,
})
);
FormPath.setIn(state, 'props.enum', newMenu);
FormPath.setIn(state, 'value', 0);
});
}
}, [rejected]);
const handleSubmit = values => {
if (onSubmit) {
onSubmit(values);
}
};
return (
<Modal
title={intl.formatMessage({ id: 'payandSettle.creditManage.components.verifyModal.title' })}
visible={visible}
confirmLoading={confirmLoading}
onOk={() => modalFormActions.submit()}
onCancel={() => onVisible(false)}
>
<NiceForm
effects={($, { setFieldState }) => {
onFieldValueChange$('agree').subscribe(fieldState => {
setFieldState('opinion', state => {
state.visible = !fieldState.value;
});
});
}}
actions={modalFormActions}
schema={auditModalSchema}
onSubmit={handleSubmit}
/>
</Modal>
);
};
export default VerifyModal;
import { ISchema } from '@formily/antd';
export const auditModalSchema: ISchema = {
type: 'object',
properties: {
MEGA_LAYOUT: {
type: 'object',
'x-component': 'mega-layout',
'x-component-props': {
labelAlign: 'top',
},
properties: {
agree: {
type: 'string',
default: 1,
enum: [
{ label: '审核通过', value: 1 },
{ label: '审核不通过', value: 0 },
],
'x-component': 'radio',
'x-component-props': {},
},
opinion: {
type: 'string',
title: '审核不通过原因',
'x-component': 'textarea',
required: true,
'x-component-props': {
placeholder: '在此输入你的内容,最长120个字符,60个汉字',
rows: 5,
},
'x-rules': [
{
limitByte: true, // 自定义校验规则
maxByte: 120,
}
],
},
},
},
},
};
\ No newline at end of file
import { ISchema } from '@formily/antd';
import { getIntl } from 'umi';
const intl = getIntl();
export const auditModalSchema: ISchema = {
type: 'object',
properties: {
MEGA_LAYOUT: {
type: 'object',
'x-component': 'mega-layout',
'x-component-props': {
labelAlign: 'top',
},
properties: {
agree: {
type: 'string',
default: 1,
enum: [
{ label: intl.formatMessage({id: 'payandSettle.creditManage.components.verifyModal.schema.auditModalSchema.agree.1'}), value: 1 },
{ label: intl.formatMessage({id: 'payandSettle.creditManage.components.verifyModal.schema.auditModalSchema.agree.2'}), value: 0 },
],
'x-component': 'radio',
'x-component-props': {},
},
opinion: {
type: 'string',
title: intl.formatMessage({id: 'payandSettle.creditManage.components.verifyModal.schema.auditModalSchema.opinion'}),
'x-component': 'textarea',
required: true,
'x-component-props': {
placeholder: intl.formatMessage({id: 'payandSettle.creditManage.components.verifyModal.schema.auditModalSchema.opinion.placeholder'}),
rows: 5,
},
'x-rules': [
{
limitByte: true, // 自定义校验规则
maxByte: 120,
},
],
},
},
},
},
};
/*
* @Author: XieZhiXiong
* @Date: 2020-09-29 10:03:06
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-01-13 10:33:56
* @Description:
*/
import { ISchema } from '@formily/antd';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { UPLOAD_TYPE } from '@/constants';
export const listSearchSchema: ISchema = {
type: 'object',
properties: {
megaLayout: {
type: 'object',
'x-component': 'mega-layout',
properties: {
memberName: {
type: 'string',
'x-component': 'Search',
'x-component-props': {
placeholder: '搜索',
align: 'flex-left',
tip: '输入 会员名称 进行搜索',
},
},
[FORM_FILTER_PATH]: {
type: 'object',
'x-component': 'mega-layout',
'x-component-props': {
grid: true,
full: true,
autoRow: true,
columns: 6,
},
properties: {
applyNo: {
type: 'string',
'x-component-props': {
placeholder: '申请单号',
allowClear: true,
},
},
'[startTime, endTime]': {
type: 'string',
default: '',
'x-component': 'dateSelect',
'x-component-props': {
placeholder: '单据时间(全部)',
allowClear: true,
},
},
outerStatus: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '外部状态(全部)',
allowClear: true,
},
},
innerStatus: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '内部状态(全部)',
allowClear: true,
},
},
submit: {
'x-component': 'Submit',
'x-mega-props': {
span: 1,
},
'x-component-props': {
children: '查询',
},
},
},
},
},
},
},
};
\ No newline at end of file
/*
* @Author: XieZhiXiong
* @Date: 2020-09-29 10:03:06
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-01-13 10:33:56
* @Description:
*/
import { getIntl } from 'umi';
import { ISchema } from '@formily/antd';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { UPLOAD_TYPE } from '@/constants';
const intl = getIntl();
export const listSearchSchema: ISchema = {
type: 'object',
properties: {
megaLayout: {
type: 'object',
'x-component': 'mega-layout',
properties: {
memberName: {
type: 'string',
'x-component': 'Search',
'x-component-props': {
placeholder: intl.formatMessage({id: 'payandSettle.creditManage.quotaFormQuery.schema.listSearchSchema.memberName'}),
align: 'flex-left',
tip: intl.formatMessage({id: 'payandSettle.creditManage.quotaFormQuery.schema.listSearchSchema.memberName.tip'}),
},
},
[FORM_FILTER_PATH]: {
type: 'object',
'x-component': 'mega-layout',
'x-component-props': {
grid: true,
full: true,
autoRow: true,
columns: 6,
},
properties: {
applyNo: {
type: 'string',
'x-component-props': {
placeholder: intl.formatMessage({id: 'payandSettle.creditManage.quotaFormQuery.schema.listSearchSchema.applyNo'}),
allowClear: true,
},
},
'[startTime, endTime]': {
type: 'string',
default: '',
'x-component': 'dateSelect',
'x-component-props': {
placeholder: intl.formatMessage({id: 'payandSettle.creditManage.quotaFormQuery.schema.listSearchSchema.time'}),
allowClear: true,
},
},
outerStatus: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: intl.formatMessage({id: 'payandSettle.creditManage.quotaFormQuery.schema.listSearchSchema.outerStatus'}),
allowClear: true,
},
},
innerStatus: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: intl.formatMessage({id: 'payandSettle.creditManage.quotaFormQuery.schema.listSearchSchema.innerStatus'}),
allowClear: true,
},
},
submit: {
'x-component': 'Submit',
'x-mega-props': {
span: 1,
},
'x-component-props': {
children: intl.formatMessage({id: 'payandSettle.creditManage.quotaFormQuery.schema.listSearchSchema.submit'}),
},
},
},
},
},
},
},
};
import React, { useState } from 'react';
import { useIntl } from 'umi';
import {
Tabs,
Descriptions,
......@@ -26,6 +27,7 @@ const BillInfo: React.FC<BillInfoProps> = ({
overdueList = [],
loading = false,
}) => {
const intl = useIntl();
const [currentVoucher, setCurrentVoucher] = useState<FileData[]>([]);
const [voucherVisible, setVoucherVisible] = useState(false);
......@@ -49,13 +51,13 @@ const BillInfo: React.FC<BillInfoProps> = ({
}}
>
<div className={styles.billInfo}>
{(!loading && overdueList && overdueList.length > 0 ) ? (
<Tabs onChange={() => {}}>
{(!loading && overdueList && overdueList.length > 0) ? (
<Tabs onChange={() => { }}>
{overdueList.map((item, index) => (
<TabPane
tab={(
<div className={styles.dateWrap}>
<StatusTag type="danger" title={`逾期 ${item.overdueDay} 天`} />
<StatusTag type="danger" title={intl.formatMessage({ id: 'payandSettle.creditManage.quotaMenage.detail.components.billInfo.statusTag' }, { data: item.overdueDay })} />
<div className={styles.time}>{item.billName}</div>
</div>
)}
......@@ -64,10 +66,10 @@ const BillInfo: React.FC<BillInfoProps> = ({
<div className={styles.content}>
<div className={styles['content-left']}>
<Descriptions column={1}>
<Descriptions.Item label="账单金额(元)">{item.billQuota}</Descriptions.Item>
<Descriptions.Item label="账单最后还款日期">{item.lastRepayDate}</Descriptions.Item>
<Descriptions.Item label="账单最后还款金额(元)">{item.lastRepayQuota}</Descriptions.Item>
<Descriptions.Item label="还清日期">{item.payOffDate}</Descriptions.Item>
<Descriptions.Item label={intl.formatMessage({ id: 'payandSettle.creditManage.quotaMenage.detail.components.billInfo.descriptions.1' })}>{item.billQuota}</Descriptions.Item>
<Descriptions.Item label={intl.formatMessage({ id: 'payandSettle.creditManage.quotaMenage.detail.components.billInfo.descriptions.2' })}>{item.lastRepayDate}</Descriptions.Item>
<Descriptions.Item label={intl.formatMessage({ id: 'payandSettle.creditManage.quotaMenage.detail.components.billInfo.descriptions.3' })}>{item.lastRepayQuota}</Descriptions.Item>
<Descriptions.Item label={intl.formatMessage({ id: 'payandSettle.creditManage.quotaMenage.detail.components.billInfo.descriptions.4' })}>{item.payOffDate}</Descriptions.Item>
</Descriptions>
</div>
<div className={styles['content-right']}>
......@@ -78,7 +80,7 @@ const BillInfo: React.FC<BillInfoProps> = ({
key={trade.tradeCode}
>
<Descriptions column={1}>
<Descriptions.Item label="交易流水号">
<Descriptions.Item label={intl.formatMessage({ id: 'payandSettle.creditManage.quotaMenage.detail.components.billInfo.descriptions.5' })}>
<Row justify="space-between" style={{ width: '100%' }}>
<Col span={12}>
<a onClick={() => handleCheckVoucher(trade.payProveList)}>{trade.tradeCode}</a>
......@@ -89,11 +91,11 @@ const BillInfo: React.FC<BillInfoProps> = ({
textAlign: 'right',
}}
>
<StatusTag type="danger" title={`逾期 ${trade.overdueDay} 天`} />
<StatusTag type="danger" title={intl.formatMessage({ id: 'payandSettle.creditManage.quotaMenage.detail.components.billInfo.statusTag' }, { data: item.overdueDay })} />
</Col>
</Row>
</Descriptions.Item>
<Descriptions.Item label="交易项目">
<Descriptions.Item label={intl.formatMessage({ id: 'payandSettle.creditManage.quotaMenage.detail.components.billInfo.descriptions.6' })}>
<Row justify="space-between" style={{ width: '100%' }}>
<Col span={12}>
{BILL_TRADE_OPERATION[trade.operation]}
......@@ -108,7 +110,7 @@ const BillInfo: React.FC<BillInfoProps> = ({
</Col>
</Row>
</Descriptions.Item>
<Descriptions.Item label="交易时间">{trade.tradeTime}</Descriptions.Item>
<Descriptions.Item label={intl.formatMessage({ id: 'payandSettle.creditManage.quotaMenage.detail.components.billInfo.descriptions.7' })}>{trade.tradeTime}</Descriptions.Item>
</Descriptions>
</TradeWrap.TradeItem>
))}
......
import React from 'react';
import { Modal, Upload } from 'antd';
import styles from './index.less';
interface CheckVoucherModalProps {
visible: boolean;
fileList: {
uid: string,
name: string,
status: string,
url: string,
}[],
onCancel: () => void;
};
const CheckVoucherModal: React.FC<CheckVoucherModalProps> = ({
visible,
fileList = [],
onCancel,
}) => {
const handleCancel = () => {
if (onCancel) {
onCancel();
}
};
return (
<Modal
title="查看凭证"
width={576}
visible={visible}
onCancel={handleCancel}
footer={null}
bodyStyle={{
padding: '16px 24px 24px',
}}
destroyOnClose
>
<Upload
defaultFileList={fileList}
disabled
/>
</Modal>
);
};
export default CheckVoucherModal;
\ No newline at end of file
import React from 'react';
import { useIntl } from 'umi';
import { Modal, Upload } from 'antd';
import styles from './index.less';
interface CheckVoucherModalProps {
visible: boolean;
fileList: {
uid: string,
name: string,
status: string,
url: string,
}[],
onCancel: () => void;
};
const CheckVoucherModal: React.FC<CheckVoucherModalProps> = ({
visible,
fileList = [],
onCancel,
}) => {
const intl = useIntl();
const handleCancel = () => {
if (onCancel) {
onCancel();
}
};
return (
<Modal
title={intl.formatMessage({ id: 'payandSettle.creditManage.quotaMenage.detail.components.checkVoucherModal' })}
width={576}
visible={visible}
onCancel={handleCancel}
footer={null}
bodyStyle={{
padding: '16px 24px 24px',
}}
destroyOnClose
>
<Upload
defaultFileList={fileList}
disabled
/>
</Modal>
);
};
export default CheckVoucherModal;
import React, { useState, useEffect, useRef } from 'react';
import { useIntl } from 'umi';
import {
Row,
Col,
......@@ -162,8 +163,9 @@ class IntroduceRow extends React.Component<IntroduceRowProps, IntroduceRowState>
};
handleRecordCheckboxChange = e => {
const intl = useIntl();
if (!this.state.billId) {
message.warning('暂无可查询记录');
message.warning(intl.formatMessage({ id: 'payandSettle.creditManage.quotaMenage.detail.components.introduceRow.warning' }));
return;
}
this.setState({ visibleRecord: e.target.checked });
......@@ -212,6 +214,7 @@ class IntroduceRow extends React.Component<IntroduceRowProps, IntroduceRowState>
visibleRecord,
billInfo,
} = this.state;
const intl = useIntl();
return (
<>
......@@ -222,7 +225,7 @@ class IntroduceRow extends React.Component<IntroduceRowProps, IntroduceRowState>
}}
>
<Col span={10}>
<MellowCard title="授信额度" fullHeight>
<MellowCard title={intl.formatMessage({ id: 'payandSettle.creditManage.quotaMenage.detail.components.introduceRow.title.1' })} fullHeight>
<Row gutter={20} align="middle">
<Col span={14}>
<Pie
......@@ -239,7 +242,7 @@ class IntroduceRow extends React.Component<IntroduceRowProps, IntroduceRowState>
<Col span={10}>
<div className={styles.statistic}>
<div className={styles['statistic-title']}>
<Badge color="#41CC9E" text="剩余可用额度(元):" />
<Badge color="#41CC9E" text={intl.formatMessage({ id: 'payandSettle.creditManage.quotaMenage.detail.components.introduceRow.badge.1' })} />
</div>
<div className={styles['statistic-amount']}>{extraData?.canUseQuota}</div>
</div>
......@@ -250,13 +253,13 @@ class IntroduceRow extends React.Component<IntroduceRowProps, IntroduceRowState>
<Row>
<Col span={12}>
<div className={styles.badgeWrap}>
<Badge color="#EF6260" text={(<span className={styles['badgeWrap-title']}>已用额度(元)::</span>)} />
<Badge color="#EF6260" text={(<span className={styles['badgeWrap-title']}>{intl.formatMessage({ id: 'payandSettle.creditManage.quotaMenage.detail.components.introduceRow.badge.2' })}</span>)} />
<span className={styles['badgeWrap-content']}>{extraData?.useQuota}</span>
</div>
</Col>
<Col span={12}>
<div className={styles.badgeWrap}>
<Badge color="#DFE1E6" text={(<span className={styles['badgeWrap-title']}>总额度(元):</span>)} />
<Badge color="#DFE1E6" text={(<span className={styles['badgeWrap-title']}>{intl.formatMessage({ id: 'payandSettle.creditManage.quotaMenage.detail.components.introduceRow.badge.3' })}</span>)} />
<span className={styles['badgeWrap-content']}>{extraData?.quota}</span>
</div>
</Col>
......@@ -267,11 +270,11 @@ class IntroduceRow extends React.Component<IntroduceRowProps, IntroduceRowState>
<Col span={14}>
<MellowCard
title="账单记录"
title={intl.formatMessage({ id: 'payandSettle.creditManage.quotaMenage.detail.components.introduceRow.title.2' })}
extra={(
<div className={styles.recordExtra}>
<Space>
<Checkbox onChange={this.handleRecordCheckboxChange}>查看交易记录</Checkbox>
<Checkbox onChange={this.handleRecordCheckboxChange}>{intl.formatMessage({ id: 'payandSettle.creditManage.quotaMenage.detail.components.introduceRow.check' })}</Checkbox>
<Select
value={billId}
style={{ width: 256 }}
......@@ -300,18 +303,18 @@ class IntroduceRow extends React.Component<IntroduceRowProps, IntroduceRowState>
<div className={styles.repayment}>
<div className={styles['repayment-left']}>
<div className={styles.statistic}>
<div className={styles['statistic-title']}>剩余应还(元):</div>
<div className={styles['statistic-title']}>intl.formatMessage({id: 'payandSettle.creditManage.quotaMenage.detail.components.introduceRow.col.1'})</div>
<div className={styles['statistic-amount']}>{billInfo?.residueRepayQuota}</div>
</div>
<div className={styles['repayment-end']}>
<span className={styles['repayment-time']}>
{billInfo?.expireTime} 到期
{billInfo?.expireTime} {intl.formatMessage({ id: 'payandSettle.creditManage.quotaMenage.detail.components.introduceRow.col.1.expireTime' })}
</span>
<StatusTag
type="danger"
title={
billInfo && billInfo.expireDay !== undefined ?
billInfo.expireDay > 0 ? `${billInfo.expireDay}天后` : `逾期 ${billInfo.expireDay} 天` :
billInfo.expireDay > 0 ? intl.formatMessage({ id: 'payandSettle.creditManage.quotaMenage.detail.components.introduceRow.col.1.statusTag.1' }, { data: billInfo.expireDay }) : intl.formatMessage({ id: 'payandSettle.creditManage.quotaMenage.detail.components.introduceRow.col.1.statusTag.2' }, { data: billInfo.expireDay }) :
''
}
/>
......@@ -324,7 +327,7 @@ class IntroduceRow extends React.Component<IntroduceRowProps, IntroduceRowState>
</Col>
<Col span={10}>
<div className={styles.statistic}>
<div className={styles['statistic-title']}>本期账单(元):</div>
<div className={styles['statistic-title']}>{intl.formatMessage({ id: 'payandSettle.creditManage.quotaMenage.detail.components.introduceRow.col.2' })}</div>
<div className={styles['statistic-amount']}>{billInfo?.billQuota}</div>
</div>
</Col>
......@@ -333,19 +336,19 @@ class IntroduceRow extends React.Component<IntroduceRowProps, IntroduceRowState>
<Row>
<Col span={8}>
<div className={styles.badgeWrap}>
<Badge color="#EF6260" text={(<span className={styles['badgeWrap-title']}>最后还款日期:</span>)} />
<Badge color="#EF6260" text={(<span className={styles['badgeWrap-title']}>{intl.formatMessage({ id: 'payandSettle.creditManage.quotaMenage.detail.components.introduceRow.col.3' })}</span>)} />
<span className={styles['badgeWrap-content']}>{billInfo?.lastRepayDate}</span>
</div>
</Col>
<Col span={8}>
<div className={styles.badgeWrap}>
<Badge color="#DFE1E6" text={(<span className={styles['badgeWrap-title']}>还款周期:</span>)} />
<Badge color="#DFE1E6" text={(<span className={styles['badgeWrap-title']}>{intl.formatMessage({ id: 'payandSettle.creditManage.quotaMenage.detail.components.introduceRow.col.4' })}</span>)} />
<span className={styles['badgeWrap-content']}>{billInfo?.repayPeriod}</span>
</div>
</Col>
<Col span={8}>
<div className={styles.badgeWrap}>
<Badge color="#DFE1E6" text={(<span className={styles['badgeWrap-title']}>账单日期:</span>)} />
<Badge color="#DFE1E6" text={(<span className={styles['badgeWrap-title']}>{intl.formatMessage({ id: 'payandSettle.creditManage.quotaMenage.detail.components.introduceRow.col.5' })}</span>)} />
<span className={styles['badgeWrap-content']}>{billInfo?.billDay}</span>
</div>
</Col>
......
/*
* @Author: XieZhiXiong
* @Date: 2020-09-27 17:47:42
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-01-08 14:48:06
* @Description:
*/
import { ISchema } from '@formily/antd';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { UPLOAD_TYPE } from '@/constants';
export const listSearchSchema: ISchema = {
type: 'object',
properties: {
megaLayout: {
type: 'object',
'x-component': 'mega-layout',
properties: {
memberName: {
type: 'string',
'x-component': 'Search',
'x-component-props': {
placeholder: '搜索',
align: 'flex-left',
tip: '输入 会员名称 进行搜索',
},
},
[FORM_FILTER_PATH]: {
type: 'object',
'x-component': 'mega-layout',
'x-component-props': {
grid: true,
full: true,
autoRow: true,
columns: 6,
},
properties: {
level: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '会员等级(全部)',
allowClear: true,
},
},
memberTypeId: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '会员类型(全部)',
allowClear: true,
},
},
subRoleId: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '会员角色(全部)',
allowClear: true,
},
},
rePayStatus: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '还款状态(全部)',
allowClear: true,
},
},
status: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '状态(全部)',
allowClear: true,
},
},
submit: {
'x-component': 'Submit',
'x-mega-props': {
span: 1,
},
'x-component-props': {
children: '查询',
},
},
},
},
},
},
},
};
\ No newline at end of file
/*
* @Author: XieZhiXiong
* @Date: 2020-09-27 17:47:42
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-01-08 14:48:06
* @Description:
*/
import { getIntl } from 'umi';
import { ISchema } from '@formily/antd';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { UPLOAD_TYPE } from '@/constants';
const intl = getIntl();
export const listSearchSchema: ISchema = {
type: 'object',
properties: {
megaLayout: {
type: 'object',
'x-component': 'mega-layout',
properties: {
memberName: {
type: 'string',
'x-component': 'Search',
'x-component-props': {
placeholder: intl.formatMessage({id: 'payandSettle.creditManage.quotaMenage.schema.listSearchSchema.memberName'}),
align: 'flex-left',
tip: intl.formatMessage({id: 'payandSettle.creditManage.quotaMenage.schema.listSearchSchema.memberName.tip'}),
},
},
[FORM_FILTER_PATH]: {
type: 'object',
'x-component': 'mega-layout',
'x-component-props': {
grid: true,
full: true,
autoRow: true,
columns: 6,
},
properties: {
level: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: intl.formatMessage({id: 'payandSettle.creditManage.quotaMenage.schema.listSearchSchema.level'}),
allowClear: true,
},
},
memberTypeId: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: intl.formatMessage({id: 'payandSettle.creditManage.quotaMenage.schema.listSearchSchema.memberTypeId'}),
allowClear: true,
},
},
subRoleId: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: intl.formatMessage({id: 'payandSettle.creditManage.quotaMenage.schema.listSearchSchema.subRoleId'}),
allowClear: true,
},
},
rePayStatus: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: intl.formatMessage({id: 'payandSettle.creditManage.quotaMenage.schema.listSearchSchema.rePayStatus'}),
allowClear: true,
},
},
status: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: intl.formatMessage({id: 'payandSettle.creditManage.quotaMenage.schema.listSearchSchema.status'}),
allowClear: true,
},
},
submit: {
'x-component': 'Submit',
'x-mega-props': {
span: 1,
},
'x-component-props': {
children: intl.formatMessage({id: 'payandSettle.creditManage.quotaMenage.schema.listSearchSchema.submit'}),
},
},
},
},
},
},
},
};
/*
* @Author: XieZhiXiong
* @Date: 2021-10-18 11:11:16
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-11-18 10:16:53
* @Description:
*/
import React, { useState } from 'react';
import {
Button,
} from 'antd';
import { history } from 'umi';
import { postPayCreditHandleVerifyStepOne } from '@/services/PayV2Api';
import { FormOutlined } from '@ant-design/icons';
import { usePageStatus } from '@/hooks/usePageStatus';
import DetailInfo from '../components/DetailInfo';
import VerifyModal from '../components/VerifyModal';
const QuotaPr1Verify: React.FC = () => {
const { id, creditId } = usePageStatus();
const [modalVisible, setModalVisible] = useState(false);
const [submitLoading, setSubmitLoading] = useState(false);
const handleSubmit = values => {
if (!id) {
return;
}
setSubmitLoading(true);
postPayCreditHandleVerifyStepOne({
applyId: +id,
isPass: values.agree,
opinion: values.reason,
}).then(res => {
if (res.code === 1000) {
history.goBack();
}
}).finally(() => {
setSubmitLoading(false);
});
};
const handleVisible = flag => {
setModalVisible(!!flag);
};
return (
<>
<DetailInfo
id={id}
creditId={creditId}
target="/memberCenter/payandSettle/creditManage/quotaPr1/history"
headExtra={() => (
<Button
type="primary"
icon={<FormOutlined />}
onClick={() => handleVisible(true)}
>
审核
</Button>
)}
/>
<VerifyModal
visible={modalVisible}
confirmLoading={submitLoading}
onSubmit={handleSubmit}
onVisible={handleVisible}
/>
</>
);
};
export default QuotaPr1Verify;
\ No newline at end of file
/*
* @Author: XieZhiXiong
* @Date: 2021-10-18 11:11:16
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-11-18 10:16:53
* @Description:
*/
import React, { useState } from 'react';
import {
Button,
} from 'antd';
import { history, useIntl } from 'umi';
import { postPayCreditHandleVerifyStepOne } from '@/services/PayV2Api';
import { FormOutlined } from '@ant-design/icons';
import { usePageStatus } from '@/hooks/usePageStatus';
import DetailInfo from '../components/DetailInfo';
import VerifyModal from '../components/VerifyModal';
const QuotaPr1Verify: React.FC = () => {
const intl = useIntl();
const { id, creditId } = usePageStatus();
const [modalVisible, setModalVisible] = useState(false);
const [submitLoading, setSubmitLoading] = useState(false);
const handleSubmit = values => {
if (!id) {
return;
}
setSubmitLoading(true);
postPayCreditHandleVerifyStepOne({
applyId: +id,
isPass: values.agree,
opinion: values.reason,
}).then(res => {
if (res.code === 1000) {
history.goBack();
}
}).finally(() => {
setSubmitLoading(false);
});
};
const handleVisible = flag => {
setModalVisible(!!flag);
};
return (
<>
<DetailInfo
id={id}
creditId={creditId}
target="/memberCenter/payandSettle/creditManage/quotaPr1/history"
headExtra={() => (
<Button
type="primary"
icon={<FormOutlined />}
onClick={() => handleVisible(true)}
>
{intl.formatMessage({ id: 'payandSettle.creditManage.quotaPr1.verify' })}
</Button>
)}
/>
<VerifyModal
visible={modalVisible}
confirmLoading={submitLoading}
onSubmit={handleSubmit}
onVisible={handleVisible}
/>
</>
);
};
export default QuotaPr1Verify;
/*
* @Author: XieZhiXiong
* @Date: 2021-10-18 11:11:16
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-11-18 10:17:33
* @Description:
*/
import React, { useState } from 'react';
import {
Button,
} from 'antd';
import { history } from 'umi';
import { postPayCreditHandleVerifyStepTwo } from '@/services/PayV2Api';
import { FormOutlined } from '@ant-design/icons';
import { usePageStatus } from '@/hooks/usePageStatus';
import DetailInfo from '../components/DetailInfo';
import VerifyModal from '../components/VerifyModal';
const QuotaPr2Verify: React.FC = () => {
const { id, creditId } = usePageStatus();
const [modalVisible, setModalVisible] = useState(false);
const [submitLoading, setSubmitLoading] = useState(false);
const handleSubmit = values => {
if (!id) {
return;
}
setSubmitLoading(true);
postPayCreditHandleVerifyStepTwo({
applyId: +id,
isPass: values.agree,
opinion: values.reason,
}).then(res => {
if (res.code === 1000) {
history.goBack();
}
}).finally(() => {
setSubmitLoading(false);
});
};
const handleVisible = flag => {
setModalVisible(!!flag);
};
return (
<>
<DetailInfo
id={id}
creditId={creditId}
target="/memberCenter/payandSettle/creditManage/quotaPr2/history"
headExtra={() => (
<Button
type="primary"
icon={<FormOutlined />}
onClick={() => handleVisible(true)}
>
审核
</Button>
)}
/>
<VerifyModal
visible={modalVisible}
confirmLoading={submitLoading}
onSubmit={handleSubmit}
onVisible={handleVisible}
/>
</>
);
};
export default QuotaPr2Verify;
\ No newline at end of file
/*
* @Author: XieZhiXiong
* @Date: 2021-10-18 11:11:16
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-11-18 10:17:33
* @Description:
*/
import React, { useState } from 'react';
import {
Button,
} from 'antd';
import { history, useIntl } from 'umi';
import { postPayCreditHandleVerifyStepTwo } from '@/services/PayV2Api';
import { FormOutlined } from '@ant-design/icons';
import { usePageStatus } from '@/hooks/usePageStatus';
import DetailInfo from '../components/DetailInfo';
import VerifyModal from '../components/VerifyModal';
const QuotaPr2Verify: React.FC = () => {
const intl = useIntl();
const { id, creditId } = usePageStatus();
const [modalVisible, setModalVisible] = useState(false);
const [submitLoading, setSubmitLoading] = useState(false);
const handleSubmit = values => {
if (!id) {
return;
}
setSubmitLoading(true);
postPayCreditHandleVerifyStepTwo({
applyId: +id,
isPass: values.agree,
opinion: values.reason,
}).then(res => {
if (res.code === 1000) {
history.goBack();
}
}).finally(() => {
setSubmitLoading(false);
});
};
const handleVisible = flag => {
setModalVisible(!!flag);
};
return (
<>
<DetailInfo
id={id}
creditId={creditId}
target="/memberCenter/payandSettle/creditManage/quotaPr2/history"
headExtra={() => (
<Button
type="primary"
icon={<FormOutlined />}
onClick={() => handleVisible(true)}
>
{intl.formatMessage({ id: 'payandSettle.creditManage.quotaPr2.verify' })}
</Button>
)}
/>
<VerifyModal
visible={modalVisible}
confirmLoading={submitLoading}
onSubmit={handleSubmit}
onVisible={handleVisible}
/>
</>
);
};
export default QuotaPr2Verify;
/*
* @Author: XieZhiXiong
* @Date: 2021-10-18 11:11:16
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-11-18 10:18:41
* @Description:
*/
import React, { useState } from 'react';
import {
Button,
} from 'antd';
import { history } from 'umi';
import { postPayCreditHandleVerifyStepThree } from '@/services/PayV2Api';
import { FormOutlined } from '@ant-design/icons';
import { usePageStatus } from '@/hooks/usePageStatus';
import DetailInfo from '../components/DetailInfo';
import VerifyModal from '../components/VerifyModal';
const QuotaPr3Verify: React.FC = () => {
const { id, creditId } = usePageStatus();
const [modalVisible, setModalVisible] = useState(false);
const [submitLoading, setSubmitLoading] = useState(false);
const handleSubmit = values => {
if (!id) {
return;
}
setSubmitLoading(true);
postPayCreditHandleVerifyStepThree({
applyId: +id,
isPass: values.agree,
opinion: values.reason,
}).then(res => {
if (res.code === 1000) {
history.goBack();
}
}).finally(() => {
setSubmitLoading(false);
});
};
const handleVisible = flag => {
setModalVisible(!!flag);
};
return (
<>
<DetailInfo
id={id}
creditId={creditId}
target="/memberCenter/payandSettle/creditManage/quotaPr3/history"
headExtra={() => (
<Button
type="primary"
icon={<FormOutlined />}
onClick={() => handleVisible(true)}
>
审核
</Button>
)}
/>
<VerifyModal
visible={modalVisible}
confirmLoading={submitLoading}
onSubmit={handleSubmit}
onVisible={handleVisible}
/>
</>
);
};
export default QuotaPr3Verify;
\ No newline at end of file
/*
* @Author: XieZhiXiong
* @Date: 2021-10-18 11:11:16
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-11-18 10:18:41
* @Description:
*/
import React, { useState } from 'react';
import {
Button,
} from 'antd';
import { history, useIntl } from 'umi';
import { postPayCreditHandleVerifyStepThree } from '@/services/PayV2Api';
import { FormOutlined } from '@ant-design/icons';
import { usePageStatus } from '@/hooks/usePageStatus';
import DetailInfo from '../components/DetailInfo';
import VerifyModal from '../components/VerifyModal';
const QuotaPr3Verify: React.FC = () => {
const intl = useIntl();
const { id, creditId } = usePageStatus();
const [modalVisible, setModalVisible] = useState(false);
const [submitLoading, setSubmitLoading] = useState(false);
const handleSubmit = values => {
if (!id) {
return;
}
setSubmitLoading(true);
postPayCreditHandleVerifyStepThree({
applyId: +id,
isPass: values.agree,
opinion: values.reason,
}).then(res => {
if (res.code === 1000) {
history.goBack();
}
}).finally(() => {
setSubmitLoading(false);
});
};
const handleVisible = flag => {
setModalVisible(!!flag);
};
return (
<>
<DetailInfo
id={id}
creditId={creditId}
target="/memberCenter/payandSettle/creditManage/quotaPr3/history"
headExtra={() => (
<Button
type="primary"
icon={<FormOutlined />}
onClick={() => handleVisible(true)}
>
{intl.formatMessage({ id: 'payandSettle.creditManage.quotaPr3.verify' })}
</Button>
)}
/>
<VerifyModal
visible={modalVisible}
confirmLoading={submitLoading}
onSubmit={handleSubmit}
onVisible={handleVisible}
/>
</>
);
};
export default QuotaPr3Verify;
/*
* @Author: XieZhiXiong
* @Date: 2021-10-18 11:11:47
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-11-18 10:19:18
* @Description:
*/
import React, { useState } from 'react';
import {
Button,
} from 'antd';
import { history } from 'umi';
import { postPayCreditHandleConfirmVerifyCreditApply } from '@/services/PayV2Api';
import { FormOutlined } from '@ant-design/icons';
import { usePageStatus } from '@/hooks/usePageStatus';
import {
CREDIT_INNER_STATUS_COMMITTED_FAILED,
CREDIT_INNER_STATUS_FAILED_1,
CREDIT_INNER_STATUS_FAILED_2,
CREDIT_INNER_STATUS_FAILED_3,
} from '@/constants/payment';
import DetailInfo from '../components/DetailInfo';
import VerifyModal from '../components/VerifyModal';
const QuotaPrConfirmVerify: React.FC = () => {
const { id, creditId } = usePageStatus();
const [modalVisible, setModalVisible] = useState(false);
const [submitLoading, setSubmitLoading] = useState(false);
const [rejected, setRejected] = useState(false);
const handleSubmit = values => {
if (!id) {
return;
}
setSubmitLoading(true);
postPayCreditHandleConfirmVerifyCreditApply({
applyId: +id,
isPass: values.agree,
opinion: values.reason,
}).then(res => {
if (res.code === 1000) {
history.goBack();
}
}).finally(() => {
setSubmitLoading(false);
});
};
const handleVisible = flag => {
setModalVisible(!!flag);
};
const handleVerify = (info) => {
if (
info?.member?.innerStatus === CREDIT_INNER_STATUS_COMMITTED_FAILED ||
info?.member?.innerStatus === CREDIT_INNER_STATUS_FAILED_1 ||
info?.member?.innerStatus === CREDIT_INNER_STATUS_FAILED_2 ||
info?.member?.innerStatus === CREDIT_INNER_STATUS_FAILED_3
) {
setRejected(true);
}
handleVisible(true);
};
return (
<>
<DetailInfo
id={id}
creditId={creditId}
target="/memberCenter/payandSettle/creditManage/quotaPrConfirm/history"
headExtra={(info) => (
<Button
type="primary"
icon={<FormOutlined />}
onClick={() => handleVerify(info)}
>
确认
</Button>
)}
/>
<VerifyModal
visible={modalVisible}
rejected={rejected}
confirmLoading={submitLoading}
onSubmit={handleSubmit}
onVisible={handleVisible}
/>
</>
);
};
export default QuotaPrConfirmVerify;
\ No newline at end of file
/*
* @Author: XieZhiXiong
* @Date: 2021-10-18 11:11:47
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-11-18 10:19:18
* @Description:
*/
import React, { useState } from 'react';
import {
Button,
} from 'antd';
import { history,useIntl } from 'umi';
import { postPayCreditHandleConfirmVerifyCreditApply } from '@/services/PayV2Api';
import { FormOutlined } from '@ant-design/icons';
import { usePageStatus } from '@/hooks/usePageStatus';
import {
CREDIT_INNER_STATUS_COMMITTED_FAILED,
CREDIT_INNER_STATUS_FAILED_1,
CREDIT_INNER_STATUS_FAILED_2,
CREDIT_INNER_STATUS_FAILED_3,
} from '@/constants/payment';
import DetailInfo from '../components/DetailInfo';
import VerifyModal from '../components/VerifyModal';
const QuotaPrConfirmVerify: React.FC = () => {
const intl = useIntl();ƒ
const { id, creditId } = usePageStatus();
const [modalVisible, setModalVisible] = useState(false);
const [submitLoading, setSubmitLoading] = useState(false);
const [rejected, setRejected] = useState(false);
const handleSubmit = values => {
if (!id) {
return;
}
setSubmitLoading(true);
postPayCreditHandleConfirmVerifyCreditApply({
applyId: +id,
isPass: values.agree,
opinion: values.reason,
}).then(res => {
if (res.code === 1000) {
history.goBack();
}
}).finally(() => {
setSubmitLoading(false);
});
};
const handleVisible = flag => {
setModalVisible(!!flag);
};
const handleVerify = (info) => {
if (
info?.member?.innerStatus === CREDIT_INNER_STATUS_COMMITTED_FAILED ||
info?.member?.innerStatus === CREDIT_INNER_STATUS_FAILED_1 ||
info?.member?.innerStatus === CREDIT_INNER_STATUS_FAILED_2 ||
info?.member?.innerStatus === CREDIT_INNER_STATUS_FAILED_3
) {
setRejected(true);
}
handleVisible(true);
};
return (
<>
<DetailInfo
id={id}
creditId={creditId}
target="/memberCenter/payandSettle/creditManage/quotaPrConfirm/history"
headExtra={(info) => (
<Button
type="primary"
icon={<FormOutlined />}
onClick={() => handleVerify(info)}
>
{intl.formatMessage({ id: 'payandSettle.creditManage.quotaPrConfirm.verify' })}
</Button>
)}
/>
<VerifyModal
visible={modalVisible}
rejected={rejected}
confirmLoading={submitLoading}
onSubmit={handleSubmit}
onVisible={handleVisible}
/>
</>
);
};
export default QuotaPrConfirmVerify;
/*
* @Author: XieZhiXiong
* @Date: 2021-10-18 11:11:16
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-11-18 10:20:30
* @Description:
*/
import React, { useState } from 'react';
import {
Button,
} from 'antd';
import { history } from 'umi';
import { postPayCreditHandleSubmitVerifyCreditApply } from '@/services/PayV2Api';
import { FormOutlined } from '@ant-design/icons';
import { usePageStatus } from '@/hooks/usePageStatus';
import DetailInfo from '../components/DetailInfo';
import VerifyModal from '../components/VerifyModal';
const QuotaPrSubmitVerify: React.FC = () => {
const { id, creditId } = usePageStatus();
const [modalVisible, setModalVisible] = useState(false);
const [submitLoading, setSubmitLoading] = useState(false);
const handleSubmit = values => {
if (!id) {
return;
}
setSubmitLoading(true);
postPayCreditHandleSubmitVerifyCreditApply({
applyId: +id,
isPass: values.agree,
opinion: values.reason,
}).then(res => {
if (res.code === 1000) {
history.goBack();
}
}).finally(() => {
setSubmitLoading(false);
});
};
const handleVisible = flag => {
setModalVisible(!!flag);
};
return (
<>
<DetailInfo
id={id}
creditId={creditId}
target="/memberCenter/payandSettle/creditManage/quotaPrSubmit/history"
headExtra={() => (
<Button
type="primary"
icon={<FormOutlined />}
onClick={() => handleVisible(true)}
>
提交审核
</Button>
)}
approvalEditable
/>
<VerifyModal
visible={modalVisible}
confirmLoading={submitLoading}
onSubmit={handleSubmit}
onVisible={handleVisible}
/>
</>
);
};
export default QuotaPrSubmitVerify;
\ No newline at end of file
/*
* @Author: XieZhiXiong
* @Date: 2021-10-18 11:11:16
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-11-18 10:20:30
* @Description:
*/
import React, { useState } from 'react';
import {
Button,
} from 'antd';
import { history,useIntl } from 'umi';
import { postPayCreditHandleSubmitVerifyCreditApply } from '@/services/PayV2Api';
import { FormOutlined } from '@ant-design/icons';
import { usePageStatus } from '@/hooks/usePageStatus';
import DetailInfo from '../components/DetailInfo';
import VerifyModal from '../components/VerifyModal';
const QuotaPrSubmitVerify: React.FC = () => {
const intl = useIntl();ƒ
const { id, creditId } = usePageStatus();
const [modalVisible, setModalVisible] = useState(false);
const [submitLoading, setSubmitLoading] = useState(false);
const handleSubmit = values => {
if (!id) {
return;
}
setSubmitLoading(true);
postPayCreditHandleSubmitVerifyCreditApply({
applyId: +id,
isPass: values.agree,
opinion: values.reason,
}).then(res => {
if (res.code === 1000) {
history.goBack();
}
}).finally(() => {
setSubmitLoading(false);
});
};
const handleVisible = flag => {
setModalVisible(!!flag);
};
return (
<>
<DetailInfo
id={id}
creditId={creditId}
target="/memberCenter/payandSettle/creditManage/quotaPrSubmit/history"
headExtra={() => (
<Button
type="primary"
icon={<FormOutlined />}
onClick={() => handleVisible(true)}
>
{intl.formatMessage({ id: 'payandSettle.creditManage.quotaPrSubmit.verify' })}
</Button>
)}
approvalEditable
/>
<VerifyModal
visible={modalVisible}
confirmLoading={submitLoading}
onSubmit={handleSubmit}
onVisible={handleVisible}
/>
</>
);
};
export default QuotaPrSubmitVerify;
/*
* @Author: XieZhiXiong
* @Date: 2020-09-29 10:03:06
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-01-08 14:47:30
* @Description:
*/
import { ISchema } from '@formily/antd';
import { FORM_FILTER_PATH } from '@/formSchema/const';
export const listSearchSchema: ISchema = {
type: 'object',
properties: {
megaLayout: {
type: 'object',
'x-component': 'mega-layout',
properties: {
memberName: {
type: 'string',
'x-component': 'Search',
'x-component-props': {
placeholder: '搜索',
align: 'flex-left',
tip: '输入 会员名称 进行搜索',
},
},
[FORM_FILTER_PATH]: {
type: 'object',
'x-component': 'mega-layout',
'x-component-props': {
grid: true,
full: true,
autoRow: true,
columns: 6,
},
properties: {
applyNo: {
type: 'string',
'x-component-props': {
placeholder: '申请单号',
allowClear: true,
},
},
'[startTime, endTime]': {
type: 'string',
default: '',
'x-component': 'dateSelect',
'x-component-props': {
placeholder: '单据时间(全部)',
allowClear: true,
},
},
applyType: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '单据类型(全部)',
allowClear: true,
},
},
level: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '会员等级(全部)',
allowClear: true,
},
},
memberTypeId: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '会员类型(全部)',
allowClear: true,
},
},
subRoleId: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '会员角色(全部)',
allowClear: true,
},
},
submit: {
'x-component': 'Submit',
'x-mega-props': {
span: 1,
},
'x-component-props': {
children: '查询',
},
},
},
},
},
},
},
};
\ No newline at end of file
/*
* @Author: XieZhiXiong
* @Date: 2020-09-29 10:03:06
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-01-08 14:47:30
* @Description:
*/
import {getIntl} from 'umi';
import { ISchema } from '@formily/antd';
import { FORM_FILTER_PATH } from '@/formSchema/const';
const intl = getIntl();
export const listSearchSchema: ISchema = {
type: 'object',
properties: {
megaLayout: {
type: 'object',
'x-component': 'mega-layout',
properties: {
memberName: {
type: 'string',
'x-component': 'Search',
'x-component-props': {
placeholder: intl.formatMessage({id: 'payandSettle.creditManage.schema.listSearchSchema.memberName'}),
align: 'flex-left',
tip: intl.formatMessage({id: 'payandSettle.creditManage.schema.listSearchSchema.memberName.tip'}),
},
},
[FORM_FILTER_PATH]: {
type: 'object',
'x-component': 'mega-layout',
'x-component-props': {
grid: true,
full: true,
autoRow: true,
columns: 6,
},
properties: {
applyNo: {
type: 'string',
'x-component-props': {
placeholder: intl.formatMessage({id: 'payandSettle.creditManage.schema.listSearchSchema.applyNo'}),
allowClear: true,
},
},
'[startTime, endTime]': {
type: 'string',
default: '',
'x-component': 'dateSelect',
'x-component-props': {
placeholder: intl.formatMessage({id: 'payandSettle.creditManage.schema.listSearchSchema.time'}),
allowClear: true,
},
},
applyType: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: intl.formatMessage({id: 'payandSettle.creditManage.schema.listSearchSchema.applyType'}),
allowClear: true,
},
},
level: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: intl.formatMessage({id: 'payandSettle.creditManage.schema.listSearchSchema.level'}),
allowClear: true,
},
},
memberTypeId: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: intl.formatMessage({id: 'payandSettle.creditManage.schema.listSearchSchema.memberTypeId'}),
allowClear: true,
},
},
subRoleId: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: intl.formatMessage({id: 'payandSettle.creditManage.schema.listSearchSchema.subRoleId'}),
allowClear: true,
},
},
submit: {
'x-component': 'Submit',
'x-mega-props': {
span: 1,
},
'x-component-props': {
children: intl.formatMessage({id: 'payandSettle.creditManage.schema.listSearchSchema.submit'}),
},
},
},
},
},
},
},
};
import React, { useContext } from 'react'
import {useIntl} from 'umi';
import { Button, Col, Form, Row, Image } from 'antd'
import MellowCard from '@/components/MellowCard';
import styles from './index.less'
......@@ -6,22 +7,23 @@ import { EDetailContext } from '../../constant'
/** 企业认证详情 */
const CompanyFinish: React.FC<{}> = () => {
const intl = useIntl();
const [form] = Form.useForm();
const eDetailContext = useContext(EDetailContext)
const { ctl, finish, perfection } = eDetailContext
return (<div>
<MellowCard headStyle={{borderBottom:'none'}} title="企业信息" id="companyInfo">
<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.eAccountApprove.components.companyFinish.1.name'})}</Col>
<Col>吴彦祖</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.eAccountApprove.components.companyFinish.1.name'})}</Col>
<Col>吴彦祖</Col>
</Row>
</Col>
......@@ -29,21 +31,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.eAccountApprove.components.companyFinish.1.name'})}</Col>
<Col>吴彦祖</Col>
</Row>
</Col>
<Col span={12}>
<Row className={styles['card-list']}>
<Col span={6} className={styles['card-list_title']}>手机号</Col>
<Col><p><span>188888888888</span><Button type="link">解绑</Button></p></Col>
<Col span={6} className={styles['card-list_title']}>{intl.formatMessage({id: 'payandSettle.eAccountApprove.components.companyFinish.1.phone'})}</Col>
<Col><p><span>188888888888</span><Button type="link">{intl.formatMessage({id: 'payandSettle.eAccountApprove.components.companyFinish.1.phone.button'})}</Button></p></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.eAccountApprove.components.companyFinish.1.idCardAhead'})}</Col>
<Col>
<Image
width={104}
......@@ -54,7 +56,7 @@ const CompanyFinish: React.FC<{}> = () => {
</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.eAccountApprove.components.companyFinish.1.idCardBehind'})}</Col>
<Col>
<Image
width={104}
......@@ -65,10 +67,10 @@ const CompanyFinish: React.FC<{}> = () => {
</Col>
</Row>
</MellowCard>
<MellowCard headStyle={{borderBottom:'none'}} style={{marginTop: 16}} title="电子协议" id="electricInfo">
<MellowCard headStyle={{borderBottom:'none'}} style={{marginTop: 16}} title={intl.formatMessage({id: 'payandSettle.eAccountApprove.components.companyFinish.2.title'})} id="electricInfo">
<Row className={styles['card-list']}>
<Col span={6} className={styles['card-list_title']}>电子协议</Col>
<Col><p><span>188888888888</span><Button type="link">查看签约协议</Button></p></Col>
<Col span={6} className={styles['card-list_title']}>{intl.formatMessage({id: 'payandSettle.eAccountApprove.components.companyFinish.2.electric'})}</Col>
<Col><p><span>188888888888</span><Button type="link">{intl.formatMessage({id: 'payandSettle.eAccountApprove.components.companyFinish.2.electric.button'})}</Button></p></Col>
</Row>
</MellowCard>
</div>)
......
import React, { useContext } from 'react'
import { useIntl } from 'umi';
import { Button, Col, Form, Input, Row, Select } from 'antd'
import MellowCard from '@/components/MellowCard';
import { BIND_PHONE, EDetailContext, formItemLayout, prefixSelector, tailFormItemLayout } from '../../constant';
......@@ -8,14 +9,15 @@ import { postPayAllInPayPersonalCrate, postPayAllInPaySendVerificationCode } fro
/** 个人 初始认证 */
const Personal: React.FC<{}> = () => {
const intl = useIntl();
const { Option } = Select;
const [form] = Form.useForm();
const eDetailContext = useContext(EDetailContext)
const { ctl, reloadFormData } = eDetailContext
const onFinish = async (values: any) => {
const { code } = await postPayAllInPayPersonalCrate({...values})
if(code === 1000) {
const { code } = await postPayAllInPayPersonalCrate({ ...values })
if (code === 1000) {
reloadFormData()
}
console.log('Received values of form: ', values);
......@@ -24,7 +26,7 @@ const Personal: React.FC<{}> = () => {
const { text, isActive, start } = useCountDown({
maxTime: 60,
minTime: 0,
initText: '获取验证码',
initText: intl.formatMessage({ id: 'payandSettle.eAccountApprove.components.personal.initText' }),
onEnd: () => { console.log("end") },
decayRate: 1,
delay: 1 * 1000
......@@ -34,14 +36,14 @@ const Personal: React.FC<{}> = () => {
form.validateFields(['phone']).then(result => {
console.log(result)
// 发送验证码
postPayAllInPaySendVerificationCode({...result, verificationCodeType: BIND_PHONE}).then(res => {
postPayAllInPaySendVerificationCode({ ...result, verificationCodeType: BIND_PHONE }).then(res => {
res.code === 1000 && start()
})
})
}
return (
<MellowCard headStyle={{borderBottom:'none'}} title="个人认证">
<MellowCard headStyle={{ borderBottom: 'none' }} title={intl.formatMessage({ id: 'payandSettle.eAccountApprove.components.personal.title' })}>
<Form
{...formItemLayout}
form={form}
......@@ -56,67 +58,67 @@ const Personal: React.FC<{}> = () => {
>
<Form.Item
name="name"
label="姓名"
label={intl.formatMessage({ id: 'payandSettle.eAccountApprove.components.personal.name' })}
rules={[
{
required: true,
message: '请输入姓名',
message: intl.formatMessage({ id: 'payandSettle.eAccountApprove.components.personal.name.message' }),
},
]}
>
<Input placeholder="请输入姓名" />
<Input placeholder={intl.formatMessage({ id: 'payandSettle.eAccountApprove.components.personal.name.message' })} />
</Form.Item>
<Form.Item
name="cardType"
label="证件类型"
label={intl.formatMessage({ id: 'payandSettle.eAccountApprove.components.personal.cardType' })}
rules={[
{
required: true,
message: '请选择证件类型',
message: intl.formatMessage({ id: 'payandSettle.eAccountApprove.components.personal.cardType.message' }),
},
]}
>
<Select placeholder="请选择证件类型">
<Option value="1">身份证</Option>
<Select placeholder={intl.formatMessage({ id: 'payandSettle.eAccountApprove.components.personal.cardType.placeholder' })}>
<Option value="1">{intl.formatMessage({ id: 'payandSettle.eAccountApprove.components.personal.cardType.1' })}</Option>
</Select>
</Form.Item>
<Form.Item
name="cardNo"
label="证件号码"
label={intl.formatMessage({ id: 'payandSettle.eAccountApprove.components.personal.cardNo' })}
rules={[
{
required: true,
message: '请输入证件号码',
message: intl.formatMessage({ id: 'payandSettle.eAccountApprove.components.personal.cardNo.message' }),
},
{
pattern: PATTERN_MAPS.identity,
message: '请输入证件号码'
message: intl.formatMessage({ id: 'payandSettle.eAccountApprove.components.personal.cardNo.message' })
}
]}
>
<Input placeholder="请输入证件号码" />
<Input placeholder={intl.formatMessage({ id: 'payandSettle.eAccountApprove.components.personal.cardNo.placeholder' })} />
</Form.Item>
<Form.Item
name="phone"
label="手机号码"
label={intl.formatMessage({ id: 'payandSettle.eAccountApprove.components.personal.phone' })}
rules={[
{
required: true,
message: '请输入手机号码'
message: intl.formatMessage({ id: 'payandSettle.eAccountApprove.components.personal.phone.message' })
},
{
pattern: PATTERN_MAPS.phone,
message: '请输入手机号码'
message: intl.formatMessage({ id: 'payandSettle.eAccountApprove.components.personal.phone.message' })
}
]}
>
<Input addonBefore={prefixSelector} style={{ width: '100%' }} placeholder="请输入手机号码" />
<Input addonBefore={prefixSelector} style={{ width: '100%' }} placeholder={intl.formatMessage({ id: 'payandSettle.eAccountApprove.components.personal.phone.placeholder' })} />
</Form.Item>
<Form.Item label="验证码">
<Form.Item label={intl.formatMessage({ id: 'payandSettle.eAccountApprove.components.personal.captcha' })}>
<Row gutter={8}>
<Col span={20}>
<Form.Item
......@@ -125,15 +127,15 @@ const Personal: React.FC<{}> = () => {
rules={[
{
required: true,
message: '请输入验证码'
message: intl.formatMessage({ id: 'payandSettle.eAccountApprove.components.personal.captcha.message' })
},
{
pattern: /^\d{5}$/,
message: '请输入验证码'
message: intl.formatMessage({ id: 'payandSettle.eAccountApprove.components.personal.captcha.message' })
}
]}
>
<Input placeholder="请输入验证码" />
<Input placeholder={intl.formatMessage({ id: 'payandSettle.eAccountApprove.components.personal.captcha.placeholder' })} />
</Form.Item>
</Col>
<Col span={4}>
......@@ -144,7 +146,7 @@ const Personal: React.FC<{}> = () => {
<Form.Item {...tailFormItemLayout}>
<Button type="primary" htmlType="submit">
提交
{intl.formatMessage({ id: 'payandSettle.eAccountApprove.components.personal.submit' })}
</Button>
</Form.Item>
</Form>
......
import React from 'react'
import { useIntl } from 'umi';
import EDetailHeader from './components/header'
import Personal from './components/personal'
import styles from './index.less'
......@@ -9,6 +10,7 @@ import Company from './components/company'
import CompanyFinish from './components/companyFinish'
const EAccountApprove: React.FC<{}> = () => {
const intl = useIntl();
const { formContext } = useEDetail()
......@@ -21,21 +23,21 @@ const EAccountApprove: React.FC<{}> = () => {
data } = formContext
const personalLinkList = [
{ title: '个人信息', id: 'personalInfo' },
{ title: '账户信息', id: 'accountInfo' },
{ title: '电子协议', id: 'electricInfo' },
{ title: intl.formatMessage({ id: 'payandSettle.eAccountApprove.personalLinkList.1' }), id: 'personalInfo' },
{ title: intl.formatMessage({ id: 'payandSettle.eAccountApprove.personalLinkList.2' }), id: 'accountInfo' },
{ title: intl.formatMessage({ id: 'payandSettle.eAccountApprove.personalLinkList.3' }), id: 'electricInfo' },
]
const companyLinkList = [
{ title: '企业信息', id: 'companyInfo' },
{ title: '电子协议', id: 'electricInfo' },
{ title: intl.formatMessage({ id: 'payandSettle.eAccountApprove.companyLinkList.1' }), id: 'companyInfo' },
{ title: intl.formatMessage({ id: 'payandSettle.eAccountApprove.companyLinkList.2' }), id: 'electricInfo' },
]
return (
<div>
<EDetailContext.Provider value={formContext}>
<EDetailHeader
title="通联账户"
title={intl.formatMessage({ id: 'payandSettle.eAccountApprove.title' })}
anchorList={finish ? (type === "personal" ? personalLinkList : companyLinkList) : []}
/>
<div className={styles.wrapper}>
......
import React, { useCallback, useEffect, useState } from 'react';
import { useIntl } from 'umi';
import { isEmpty } from 'lodash';
import { Modal, Form, Select, Input, Typography, Upload, Button, message } from 'antd';
import { DeleteOutlined, UploadOutlined } from '@ant-design/icons';
......@@ -50,6 +51,7 @@ const ModalLayout: React.FC<ModalProps> = ({
onConfirm,
onCancel,
}) => {
const intl = useIntl();
const [form] = Form.useForm();
const [channel, setChannel] = useState<channel>([])
const [files, setFiles] = useState<any>({});
......@@ -89,7 +91,7 @@ const ModalLayout: React.FC<ModalProps> = ({
const beforeDocUpload = (file: any) => {
const isLt20M = file.size / 1024 / 1024 < 20;
if (!isLt20M) {
message.error('上传文件大小不超过 20M!');
message.error(intl.formatMessage({ id: 'payandSettle.paySetting.components.modal.error' }));
}
return isLt20M;
}
......@@ -131,7 +133,7 @@ const ModalLayout: React.FC<ModalProps> = ({
return (
<Modal
width={576}
title='参数配置'
title={intl.formatMessage({ id: 'payandSettle.paySetting.components.modal.title' })}
visible={visible}
onOk={handleConfirm}
onCancel={handleCancel}
......@@ -140,7 +142,7 @@ const ModalLayout: React.FC<ModalProps> = ({
form={form}
{...layout}
>
<Form.Item name='code' label='参数代码' rules={[{ required: true, message: '请选择参数代码' }]}>
<Form.Item name='code' label={intl.formatMessage({ id: 'payandSettle.paySetting.components.modal.code' })} rules={[{ required: true, message: intl.formatMessage({ id: 'payandSettle.paySetting.components.modal.code.message' }) }]}>
<Select>
{
channel.map(item => (
......@@ -155,7 +157,7 @@ const ModalLayout: React.FC<ModalProps> = ({
>
{({ getFieldValue }) =>
getFieldValue('code') === 14 ? (
<Form.Item name='value' label='退款证书' rules={[{ required: true, message: '请上传退款证书' }]}>
<Form.Item name='value' label={intl.formatMessage({ id: 'payandSettle.paySetting.components.modal.value.message' })} rules={[{ required: true, message: intl.formatMessage({ id: 'payandSettle.paySetting.components.modal.value.message' }) }]}>
{!isEmpty(files) && (
<div className={style.upload_fileList}>
<Typography.Link>{files.url}</Typography.Link>
......@@ -169,16 +171,16 @@ const ModalLayout: React.FC<ModalProps> = ({
beforeUpload={beforeDocUpload}
onChange={handleChange}
>
<Button loading={loading} icon={<UploadOutlined />}>上传文件</Button>
<Button loading={loading} icon={<UploadOutlined />}>{intl.formatMessage({ id: 'payandSettle.paySetting.components.modal.value.upload' })}</Button>
</Upload>
)}
</Form.Item>
) : <Form.Item name='value' label='参数值' rules={[{ required: true, message: '请输入参数值' }]}>
) : <Form.Item name='value' label={intl.formatMessage({ id: 'payandSettle.paySetting.components.modal.value.2' })} rules={[{ required: true, message: intl.formatMessage({ id: 'payandSettle.paySetting.components.modal.value.2.message' }) }]}>
<Input />
</Form.Item>
}
</Form.Item>
<Form.Item name='remark' label='参数描述'>
<Form.Item name='remark' label={intl.formatMessage({ id: 'payandSettle.paySetting.components.modal.remark' })}>
<TextArea maxLength={200} rows={4} />
</Form.Item>
</Form>
......
import React, { useEffect, useState, Fragment } from 'react';
import { useIntl } from 'umi';
import PeripheralLayout from '@/pages/transaction/components/detailLayout';
import { ColumnType } from 'antd/lib/table/interface';
import { Tabs, Form, Button, Radio, Table, Space, Image, Popconfirm, Empty, Input, Typography } from 'antd';
......@@ -61,6 +62,7 @@ type FindProps = {
}
const PaySettingLayout = () => {
const intl = useIntl();
const [form] = Form.useForm();
const [visible, setVisible] = useState<boolean>(false);
const [tabLink, setTabLink] = useState<TabLink>([])
......@@ -75,12 +77,12 @@ const PaySettingLayout = () => {
const columns: ColumnType<any>[] = [
{
title: '参数代码',
title: intl.formatMessage({ id: 'payandSettle.paySetting.columns.key' }),
key: 'key',
dataIndex: 'key'
},
{
title: '参数值',
title: intl.formatMessage({ id: 'payandSettle.paySetting.columns.value' }),
key: 'value',
dataIndex: 'value',
width: '50%',
......@@ -91,25 +93,25 @@ const PaySettingLayout = () => {
</>
},
{
title: '参数描述',
title: intl.formatMessage({ id: 'payandSettle.paySetting.columns.remark' }),
key: 'remark',
dataIndex: 'remark',
ellipsis: true,
},
{
title: '操作',
title: intl.formatMessage({ id: 'payandSettle.paySetting.columns.options' }),
key: 'options',
dataIndex: 'options',
render: (_: any, record: any, index: number) => <>
<Button type='link' onClick={() => handleEdit(record, index)} disabled={payChannel === '1'}>编辑</Button>
<Button type='link' onClick={() => handleEdit(record, index)} disabled={payChannel === '1'}>{intl.formatMessage({ id: 'payandSettle.paySetting.columns.options.button.1' })}</Button>
<Popconfirm
disabled={payChannel === '1'}
title="确定要执行这个操作?"
disabled={payChannel === '1'}
title={intl.formatMessage({ id: 'payandSettle.paySetting.columns.options.button.1.popconfirm.title' })}
onConfirm={() => handleDelete(index)}
okText="是"
cancelText="否"
okText={intl.formatMessage({ id: 'payandSettle.paySetting.columns.options.button.1.popconfirm.okText' })}
cancelText={intl.formatMessage({ id: 'payandSettle.paySetting.columns.options.button.1.popconfirm.cancelText' })}
>
<Button type='link' disabled={payChannel === '1'}>删除</Button>
<Button type='link' disabled={payChannel === '1'}>{intl.formatMessage({ id: 'payandSettle.paySetting.columns.options.button.2' })}</Button>
</Popconfirm>
</>
......@@ -278,7 +280,7 @@ const PaySettingLayout = () => {
<PeripheralLayout
onBack
hideBreak
detail="会员支付参数配置"
detail={intl.formatMessage({ id: 'payandSettle.paySetting.detail' })}
tabLink={tabLink}
effect={
<Button
......@@ -286,7 +288,7 @@ const PaySettingLayout = () => {
icon={<SaveOutlined />}
onClick={handleSubmit}
>
保存
{intl.formatMessage({ id: 'payandSettle.paySetting.effect' })}
</Button>
}
components={
......@@ -305,7 +307,7 @@ const PaySettingLayout = () => {
{item.channels.map((_item, _index) => (
<TabPane tab={<Space><Image preview={false} width={16} height={16} src={PIC_MAP[_item.payChannel]} />{_item.payChannelName}</Space>} key={_item.payChannel} forceRender>
<Form.Item
label={`是否开启${_item.payChannelName}`}
label={`${intl.formatMessage({ id: 'payandSettle.paySetting.label' })}${_item.payChannelName}`}
name={`payChannel_${_item.payChannel}`}
initialValue={`_${_item.payChannel}`}
>
......@@ -314,8 +316,8 @@ const PaySettingLayout = () => {
buttonStyle="solid"
onChange={(e) => handleRadioChang(e, item.payType)}
>
<Radio.Button value={_item.payChannel}></Radio.Button>
<Radio.Button value={`_${_item.payChannel}`}></Radio.Button>
<Radio.Button value={_item.payChannel}>{intl.formatMessage({ id: 'payandSettle.paySetting.radio.1' })}</Radio.Button>
<Radio.Button value={`_${_item.payChannel}`}>{intl.formatMessage({ id: 'payandSettle.paySetting.radio.2' })}</Radio.Button>
</Radio.Group>
</Form.Item>
<Form.Item
......@@ -327,7 +329,7 @@ const PaySettingLayout = () => {
getFieldValue(`payChannel_${_item.payChannel}`) === 2
) && (
<Fragment>
<div className={style.anchor}>{`${_item.payChannelName}支付参数配置`}</div>
<div className={style.anchor}>{`${_item.payChannelName}${intl.formatMessage({ id: 'payandSettle.paySetting.parameters' })}`}</div>
<Form.Item
wrapperCol={{ span: 24 }}
name={[`payChannel_${_item.payChannel}`, 'parameters']}
......@@ -346,7 +348,7 @@ const PaySettingLayout = () => {
onClick={() => toggle(_item.payChannel)}
disabled={getFieldValue(`payChannel_${_item.payChannel}`) === 1}
>
新增参数配置
{intl.formatMessage({ id: 'payandSettle.paySetting.parameters.button' })}
</Button>
</Form.Item>
</Fragment>
......@@ -392,8 +394,8 @@ const PaySettingLayout = () => {
buttonStyle="solid"
onChange={(e) => handleRadioChang(e, item.payType)}
>
<Radio.Button value={_item.payChannel}></Radio.Button>
<Radio.Button value={`_${_item.payChannel}`}></Radio.Button>
<Radio.Button value={_item.payChannel}>{intl.formatMessage({ id: 'payandSettle.paySetting.radio.1' })}</Radio.Button>
<Radio.Button value={`_${_item.payChannel}`}>{intl.formatMessage({ id: 'payandSettle.paySetting.radio.2' })}</Radio.Button>
</Radio.Group>
</Form.Item>
<Form.Item
......@@ -404,24 +406,24 @@ const PaySettingLayout = () => {
getFieldValue(`payChannel_${_item.payChannel}`) === 6) && (
<Fragment>
<Form.Item
label='授信额度设置'
label={intl.formatMessage({ id: 'payandSettle.paySetting.label.2' })}
>
<Space direction='vertical' style={{ width: '100%' }}>
初始申请额度不超过:
{intl.formatMessage({ id: 'payandSettle.paySetting.label.2.1' })}
<NumberInput
onChange={(e) => handleInputChange(e, 30, item.payType, 0)}
addonAfter='人民币'
addonAfter={intl.formatMessage({ id: 'payandSettle.paySetting.label.2.1.addonAfter' })}
pattern={/^(\-)?\d+(\.(\d){0,2})?$/}
fieldValue={_item.parameters[0]?.value}
/>
允许满:
{intl.formatMessage({ id: 'payandSettle.paySetting.label.2.2' })}
<NumberInput
onChange={(e) => handleInputChange(e, 31, item.payType, 1)}
addonAfter='天'
addonAfter={intl.formatMessage({ id: 'payandSettle.paySetting.label.2.2.addonAfter' })}
pattern={/^[1-9]\d*$/}
fieldValue={_item.parameters[1]?.value}
/>
申请上调:
{intl.formatMessage({ id: 'payandSettle.paySetting.label.2.3' })}
<NumberInput
onChange={(e) => handleInputChange(e, 32, item.payType, 2)}
addonAfter='%'
......
import React from 'react';
import { useIntl } from 'umi';
import { Button } from 'antd';
import noDataIcon from '@/assets/imgs/nodata_default.png';
import styles from './index.less';
const PayEmptyLayout = (props) => {
const { content = "平台还未配置您的支付方式,请联系平台客服" } = props
const intl = useIntl();
const { content = intl.formatMessage({ id: 'payandSettle.paySetting.payEmpty.content' }) } = props
return (
<div className={styles.nodata_wrap}>
<img src={noDataIcon} />
<div className={styles.content_wrap}>
<h3>抱歉</h3>
<h3>{intl.formatMessage({ id: 'payandSettle.paySetting.payEmpty.h3' })}</h3>
<p>{content}</p>
<Button type='primary'>联系客服</Button>
<Button type='primary'>{intl.formatMessage({ id: 'payandSettle.paySetting.payEmpty.button' })}</Button>
</div>
</div>
)
......
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