Commit 25d74114 authored by XieZhiXiong's avatar XieZhiXiong

merge

parents 111ff870 9c7ffe64
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-10-15 15:41:51
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-10-26 16:58:35
* @LastEditTime: 2020-10-27 16:41:49
* @Description:
*/
import {
......@@ -24,19 +24,13 @@ import {
CREDIT_INNER_STATUS_FAILED,
CREDIT_INNER_STATUS_CONFIRM_SUCCESS,
CREDIT_INNER_STATUS_CONFIRM_FAILED,
CREDIT_STATUS_NOT_APPLIED,
CREDIT_STATUS_APPLYING,
CREDIT_STATUS_NORMAL,
CREDIT_STATUS_FROZEN,
} from '@/constants';
// 授信会员状态
export const CREDIT_MEMBER_STATUS_NOT_APPLIED = 1; // 未申请的
export const CREDIT_MEMBER_STATUS_APPLYING = 2; // 申请中
export const CREDIT_MEMBER_STATUS_NORMAL = 3; // 正常的
export const CREDIT_MEMBER_STATUS_FROZEN = 4; // 已冻结
export const CREDIT_MEMBER_STATUS = {
[CREDIT_MEMBER_STATUS_NOT_APPLIED]: '未申请',
[CREDIT_MEMBER_STATUS_APPLYING]: '申请中',
[CREDIT_MEMBER_STATUS_NORMAL]: '正常的',
[CREDIT_MEMBER_STATUS_FROZEN]: '已冻结',
};
// 授信状态 Badge map
// 账单交易状态
export const BILL_TRADE_STATUS_UNCONFIRMED = 1; // 待确认还款结果
......@@ -58,20 +52,20 @@ export const CREDIT_REPAYMENT_STATUS_TAG_MAP = {
[CREDIT_REPAYMENT_STATUS_OVERDUE]: 'danger',
};
// 会员状态 Badge map
export const MEMBER_STATUS_BADGE_MAP = {
[CREDIT_MEMBER_STATUS_NOT_APPLIED]: '#FF991F',
[CREDIT_MEMBER_STATUS_APPLYING]: '#00B37A',
[CREDIT_MEMBER_STATUS_NORMAL]: '#00B37A',
[CREDIT_MEMBER_STATUS_FROZEN]: '#E63F3B',
// 授信状态 Badge map
export const CREDIT_STATUS_BADGE_MAP = {
[CREDIT_STATUS_NOT_APPLIED]: '#FF991F',
[CREDIT_STATUS_APPLYING]: '#00B37A',
[CREDIT_STATUS_NORMAL]: '#00B37A',
[CREDIT_STATUS_FROZEN]: '#E63F3B',
};
// 会员状态 StatusTag map
export const MEMBER_STATUS_TAG_MAP = {
[CREDIT_MEMBER_STATUS_NOT_APPLIED]: 'warning',
[CREDIT_MEMBER_STATUS_APPLYING]: 'success',
[CREDIT_MEMBER_STATUS_NORMAL]: 'success',
[CREDIT_MEMBER_STATUS_FROZEN]: 'danger',
// 授信状态 StatusTag map
export const CREDIT_STATUS_TAG_MAP = {
[CREDIT_STATUS_NOT_APPLIED]: 'warning',
[CREDIT_STATUS_APPLYING]: 'success',
[CREDIT_STATUS_NORMAL]: 'success',
[CREDIT_STATUS_FROZEN]: 'danger',
};
// 授信外部状态
......
......@@ -16,7 +16,7 @@ import { GetPayCreditApplyGetApplyDetailResponse } from '@/services/PayApi';
import { CREDIT_INNER_STATUS, CREDIT_OUTER_STATUS } from '@/constants';
import AvatarWrap from '@/components/AvatarWrap';
import StatusTag from '@/components/StatusTag';
import { MEMBER_STATUS_TAG_MAP, CREDIT_OUTER_STATUS_TAG_MAP, CREDIT_OUTER_STATUS_BADGE_MAP } from '../../../constant';
import { CREDIT_STATUS_TAG_MAP, CREDIT_OUTER_STATUS_TAG_MAP, CREDIT_OUTER_STATUS_BADGE_MAP } from '../../../constant';
const OuterCirculation = React.lazy(() => import('../OuterCirculation'));
const QuotaApplicationInfo = React.lazy(() => import('../QuotaApplicationInfo'));
......@@ -148,7 +148,7 @@ const DetailInfo: React.FC<DetailInfoProps> = ({
<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]}
type={CREDIT_STATUS_TAG_MAP[quotaInfo && quotaInfo.member ? quotaInfo.member.status || 1 : 1]}
title={quotaInfo && quotaInfo.member ? quotaInfo.member.status || 1 : 1}
/>
</Descriptions.Item>
......
......@@ -13,12 +13,12 @@ import { GetPayCreditApplyGetCreditDetailResponse } from '@/services/PayApi';
import { usePageStatus, PageStatus } from '@/hooks/usePageStatus';
import {
CREDIT_REPAYMENT_STATUS,
CREDIT_STATUS,
} from '@/constants';
import AvatarWrap from '@/components/AvatarWrap';
import StatusTag from '@/components/StatusTag';
import {
MEMBER_STATUS_BADGE_MAP,
CREDIT_MEMBER_STATUS,
CREDIT_STATUS_BADGE_MAP,
CREDIT_REPAYMENT_STATUS_TAG_MAP,
} from '../../../constant';
import { BillDetailParams, BillDetailData, BillRecordParams } from './components/IntroduceRow';
......@@ -159,8 +159,8 @@ const QuotaMenageDetail: React.FC = () => {
</Descriptions.Item>
<Descriptions.Item label="会员状态" span={2}>
<Badge
color={MEMBER_STATUS_BADGE_MAP[creditInfo?.member?.status]}
text={CREDIT_MEMBER_STATUS[creditInfo?.member?.status]}
color={CREDIT_STATUS_BADGE_MAP[creditInfo?.member?.status]}
text={CREDIT_STATUS[creditInfo?.member?.status]}
/>
</Descriptions.Item>
</Descriptions>
......
......@@ -20,6 +20,7 @@ import {
} from '@/constants';
import {
CREDIT_REPAYMENT_STATUS_TAG_MAP,
CREDIT_STATUS_BADGE_MAP,
} from '../../constant';
import EyePreview from '@/components/EyePreview';
import NiceForm from '@/components/NiceForm';
......@@ -126,7 +127,7 @@ const QuotaMenage: React.FC = () => {
align: 'center',
filters: [],
onFilter: (value, record) => record.status === value,
render: (text, record) => <Badge color="#41CC9E" text={text} />,
render: (text, record) => <Badge color={CREDIT_STATUS_BADGE_MAP[record.status]} text={text} />,
},
{
title: '操作',
......
......@@ -28,7 +28,7 @@ export const STATUS_COLOR_TXT = {
};
// 会员状态 StatusTag map
export const MEMBER_STATUS_TAG_MAP = {
export const CREDIT_STATUS_TAG_MAP = {
[MEMBER_STATUS_NORMAL]: 'success',
[MEMBER_STATUS_FROZEN]: 'default'
};
......
......@@ -155,7 +155,7 @@ const IntroduceRow: React.FC<IntroduceRowProps> = ({
</div>
</div>
<div className={styles['repayment-right']}>
<Button type="primary" onClick={handleRepayment}>立即还款</Button>
<Button type="primary" onClick={handleRepayment}>确认还款结果</Button>
</div>
</div>
</Col>
......
......@@ -6,51 +6,39 @@ import {
Button,
Modal,
Descriptions,
message,
} from 'antd';
import { CheckCircleOutlined } from '@ant-design/icons';
import { StandardTable } from 'god';
import { ColumnType } from 'antd/lib/table/interface';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { createFormActions } from '@formily/antd';
import { PublicApi } from '@/services/api';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { useAsyncInitSelect } from '@/formSchema/effects/useAsyncInitSelect';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { coverColFiltersItem } from '@/utils';
import EyePreview from '@/components/EyePreview';
import NiceForm from '@/components/NiceForm';
import StatusTag from '@/components/StatusTag';
import quotes from '@/assets/imgs/quotes.png';
import {
CREDIT_STATUS_NOT_APPLIED,
CREDIT_STATUS_APPLYING,
CREDIT_STATUS_NORMAL,
CREDIT_STATUS_FROZEN,
CREDIT_STATUS,
CREDIT_REPAYMENT_STATUS_OVERDUE,
} from '@/constants';
import {
CREDIT_REPAYMENT_STATUS_TAG_MAP,
CREDIT_STATUS_BADGE_MAP,
} from '../../constant';
import { listSearchSchema } from './schema';
import styles from './index.less';
const formActions = createFormActions();
const mock = [
{
id: 1,
memberName: '广州白马皮具交易有限公司',
memberType: '企业会员',
memberRole: '采购商',
memberLevel: '青铜会员',
available : '50,000.00',
count: '48,000',
used: '48,000',
repaymentStatus: 1,
status: 1,
},
{
id: 2,
memberName: '广州白马皮具交易有限公司',
memberType: '企业会员',
memberRole: '采购商',
memberLevel: '青铜会员',
available : '50,000.00',
count: '48,000',
used: '48,000',
repaymentStatus: 1,
status: 1,
},
];
const QuotaMenage: React.FC = () => {
const [collectionModalVisible, setCollectionModalVisible] = useState(false);
const [successModalVisible, setSuccessModalVisible] = useState(false);
......@@ -61,6 +49,43 @@ const QuotaMenage: React.FC = () => {
setCollectionModalVisible(true);
};
// 调额
const handleAdjustment = record => {
const msg = message.loading({
content: '正在申请',
duration: 0,
});
PublicApi.postPayCreditHandleAdjustQuota({
creditId: record.id,
}).then(res => {
if (res.code === 1000) {
ref.current.reload();
}
}).finally(() => {
msg();
});
};
// 冻结/解冻
const handleFrozen = record => {
const status = record.status === CREDIT_STATUS_NORMAL ? CREDIT_STATUS_FROZEN : CREDIT_STATUS_NORMAL;
const msg = message.loading({
content: `正在${status === CREDIT_STATUS_NORMAL ? '解除' : '冻结'}`,
duration: 0,
});
PublicApi.postPayCreditHandleUpdateStatus({
id: record.id,
status,
}).then(res => {
if (res.code === 1000) {
ref.current.reload();
}
}).finally(() => {
msg();
});
};
const defaultColumns: ColumnType<any>[] = [
{
title: '会员名称',
......@@ -68,41 +93,48 @@ const QuotaMenage: React.FC = () => {
align: 'center',
render: (text, record) => (
<>
<EyePreview
url={`/memberCenter/payandSettle/creditManage/quotaMenage/detail`}
>
{text}
</EyePreview>
<div>
{'青铜会员'}
</div>
{/* 未申请过,并且授信状态为未申请 或者 申请中 则显示文本 */}
{(!record.isHasApply && (record.status === CREDIT_STATUS_NOT_APPLIED || record.status === CREDIT_STATUS_APPLYING)) ? (
text
) : (
<>
<EyePreview
url={`/memberCenter/payandSettle/creditManage/quotaMenage/detail`}
>
{text}
</EyePreview>
<div>
{'青铜会员'}
</div>
</>
)}
</>
),
},
{
title: '会员类型',
dataIndex: 'memberType',
dataIndex: 'memberTypeName',
align: 'center',
},
{
title: '会员角色',
dataIndex: 'memberRole',
dataIndex: 'memberRoleName',
align: 'center',
render: (text, record) => <>{text}</>,
},
{
title: '剩余可用额度(元)',
dataIndex: 'available',
dataIndex: 'canUseQuota',
align: 'center',
},
{
title: '总额度/已用额度(元)',
dataIndex: 'count',
dataIndex: 'quota',
align: 'center',
render: (text, record) => (
<>
<div>总额度:{text}</div>
<div>已使用:{record.used}</div>
<div>已使用:{record.useQuota}</div>
</>
),
},
......@@ -113,7 +145,7 @@ const QuotaMenage: React.FC = () => {
render: (text, record) => (
<Progress
type="circle"
percent={40}
percent={Math.floor(record.useQuota / record.quota) * 100}
strokeColor="#41CC9E"
strokeWidth={12}
width={40}
......@@ -123,43 +155,62 @@ const QuotaMenage: React.FC = () => {
},
{
title: '还款状态',
dataIndex: 'repaymentStatus',
dataIndex: 'repayStatusName',
align: 'center',
render: (text, record) => (
<StatusTag type="warning" title="逾期 3 天" />
<>
{text ? (
<StatusTag
type={CREDIT_REPAYMENT_STATUS_TAG_MAP[record.repayStatus]}
title={record.repayStatus !== CREDIT_REPAYMENT_STATUS_OVERDUE ? text : record.overdueDay}
/>
) : null}
</>
),
},
{
title: '状态',
dataIndex: 'status',
dataIndex: 'statusName',
align: 'center',
filters: [],
onFilter: (value, record) => record.innerStatus === value,
render: (text, record) => <Badge color="#41CC9E" text="正常" />,
},
onFilter: (value, record) => record.status === value,
render: (text, record) => <Badge color={CREDIT_STATUS_BADGE_MAP[record.status]} text={text} />,
},
{
title: '操作',
dataIndex: 'action',
align: 'center',
render: (text, record) => (
<>
<Button
type="link"
>
调额
</Button>
<Button
{/* 授信状态为 正常 时可申请调额 */}
{record.status === CREDIT_STATUS_NORMAL && (
<Button
type="link"
onClick={() => handleAdjustment(record)}
>
调额
</Button>
)}
{/* 暂时不做了 */}
{/* <Button
type="link"
onClick={() => handleCollection()}
>
催收
</Button>
<Button
type="link"
danger
>
冻结
</Button>
</Button> */}
{/* 授信状态为 正常、冻结 可操作 */}
{(
record.status === CREDIT_STATUS_NORMAL ||
record.status === CREDIT_STATUS_FROZEN
) && (
<Button
type="link"
onClick={() => handleFrozen(record)}
danger
>
{record.status === CREDIT_STATUS_NORMAL ? '冻结' : '解除'}
</Button>
)}
</>
),
},
......@@ -168,14 +219,52 @@ const QuotaMenage: React.FC = () => {
const [columns, setColumns] = useState<any[]>(defaultColumns);
const fetchListData = (params: any) => {
return Promise.resolve({
total: 2,
data: mock,
const { status = 0, rePayStatus = 0, ...rest } = params;
return new Promise((resolve, reject) => {
PublicApi.getPayCreditHandlePageCredit({
status,
rePayStatus,
...rest,
})
.then(res => {
if (res.code === 1000) {
resolve(res.data);
}
reject();
})
.catch(() => {
reject();
});
});
};
// 初始化高级筛选选项
const fetchSelectOptions = async () => {
const fetchSearchItems = async () => {
const res = await PublicApi.getPayCreditHandlePageItemsBySupplier();
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 {};
};
......@@ -202,12 +291,12 @@ const QuotaMenage: React.FC = () => {
useStateFilterSearchLinkageEffect(
$,
actions,
'name',
'memberName',
FORM_FILTER_PATH,
);
useAsyncInitSelect(
['innerStatus', 'outerStatus'],
fetchSelectOptions,
fetchSearchItems,
);
}}
schema={listSearchSchema}
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-09-27 17:47:42
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-09-27 19:29:08
* @LastEditTime: 2020-10-27 15:28:17
* @Description:
*/
import { ISchema } from '@formily/antd';
......@@ -16,13 +16,13 @@ export const listSearchSchema: ISchema = {
type: 'object',
'x-component': 'mega-layout',
properties: {
name: {
memberName: {
type: 'string',
'x-component': 'Search',
'x-component-props': {
placeholder: '搜索',
align: 'flex-left',
tip: '输入 会员归属 进行搜索',
tip: '输入 会员名称 进行搜索',
},
},
[FORM_FILTER_PATH]: {
......@@ -35,7 +35,34 @@ export const listSearchSchema: ISchema = {
columns: 6,
},
properties: {
repaymentStatus: {
memberLevelName: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '会员等级(全部)',
allowClear: true,
},
},
memberTypeName: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '会员类型(全部)',
allowClear: true,
},
},
memberRoleName: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '会员角色(全部)',
allowClear: true,
},
},
rePayStatus: {
type: 'string',
default: undefined,
enum: [],
......
......@@ -9,7 +9,7 @@ import styles from './index.less';
const formActions = createFormActions();
const PAGE_SIZE = 2;
const PAGE_SIZE = 10;
export interface Search {
/**
......
......@@ -43,6 +43,7 @@ export const evaluateSchema: ISchema = {
'x-component': 'Rating',
'x-component-props': {
allowHalf: false,
allowClear: false,
},
'x-rules': [
{
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-10-19 16:02:53
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-10-20 13:40:11
* @LastEditTime: 2020-10-27 17:00:44
* @Description:
*/
......@@ -31,7 +31,7 @@ export const normalizeUnevaluatedList = (arr: {[key: string]: any}[]) => {
inventory: item.inventory,
productAttributeJson: item.productAttributeJson,
},
star: 0, // 评分星星
star: 5, // 评分星星
comment: '', // 评价
picture: [],
smile: 1, // 笑脸
......
......@@ -9,7 +9,7 @@ import styles from './index.less';
const formActions = createFormActions();
const PAGE_SIZE = 2;
const PAGE_SIZE = 10;
export interface Search {
/**
......
......@@ -53,7 +53,7 @@ const EvaluateOrder: React.FC = () => {
return;
}
setInfoLoading(true);
PublicApi.getOrderProcurementOrderDetails({
PublicApi.getOrderPurchaseOrderDetails({
id,
}).then(res => {
if (res.code === 1000) {
......@@ -91,7 +91,7 @@ const EvaluateOrder: React.FC = () => {
product: JSON.stringify(good),
remark: orderInfo.orderNo,
productId: good.productId,
orderId: orderInfo.id,
id: orderInfo.id,
productImgUrl: good.pic,
dealTime: orderInfo.createTime,
dealCount: good.purchaseCount,
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-09-23 17:00:24
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-10-20 17:58:51
* @LastEditTime: 2020-10-27 16:59:38
* @Description:
*/
import { ISchema } from '@formily/antd';
......@@ -43,6 +43,7 @@ export const evaluateSchema: ISchema = {
'x-component': 'Rating',
'x-component-props': {
allowHalf: false,
allowClear: false,
},
'x-rules': [
{
......
......@@ -84,7 +84,7 @@ const Unevaluated: React.FC = () => {
align: 'center',
render: (text, record) => (
<>
<Link to={`/memberCenter/tranactionAbility/supplierEvaluation/unevaluated/evaluate?orderId=${record.id}`}>
<Link to={`/memberCenter/tranactionAbility/supplierEvaluation/unevaluated/evaluate?id=${record.id}`}>
<Button
type="link"
>
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-10-19 16:02:53
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-10-20 18:03:34
* @LastEditTime: 2020-10-27 17:00:33
* @Description:
*/
......@@ -31,7 +31,7 @@ export const normalizeUnevaluatedList = (arr: {[key: string]: any}[]) => {
inventory: item.inventory,
productAttributeJson: item.productAttributeJson,
},
star: 0, // 评分星星
star: 5, // 评分星星
comment: '', // 评价
picture: [],
smile: 1, // 笑脸
......
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