Commit 0e13e571 authored by GuanHua's avatar GuanHua
parents 8eba425b eae42aa1
import React, { useState } from 'react'; import React, { useState, useEffect } from 'react';
import { import {
Row, Row,
Col, Col,
...@@ -18,19 +18,60 @@ import styles from './index.less'; ...@@ -18,19 +18,60 @@ import styles from './index.less';
const { TabPane } = Tabs; const { TabPane } = Tabs;
interface EquityInfoProps { const PAGE_SIZE = 8;
export interface ReceivedData {
id?: number;
createTime?: string;
ruleName?: string;
score?: number;
remark?: string;
};
export interface UsageData {
id?: number;
createTime?: string;
rightTypeName?: string;
spendTypeName?: string;
point?: number;
remark?: string;
};
export interface FetchParams {
current: number;
pageSize: number;
};
export interface EquityInfoProps {
equityInfo?: { equityInfo?: {
sumReturnMoney?: number, sumReturnMoney?: number, // 累计返现金额
sumUsedPoint?: number, sumUsedPoint?: number, // 已用积分
sumPoint?: number, sumPoint?: number, // 累计积分
}; };
fetchReceivedList?: (params: FetchParams) => Promise<{ data: ReceivedData[] , totalCount: number }>;
fetchUsageList?: (params: FetchParams) => Promise<{ data: UsageData[] , totalCount: number }>;
} }
const EquityInfo: React.FC<EquityInfoProps> = ({ const EquityInfo: React.FC<EquityInfoProps> = ({
equityInfo = {}, equityInfo = {},
fetchReceivedList,
fetchUsageList,
}) => { }) => {
const columns: EditableColumns[] = [ const [receivedPage, setReceivedPage] = useState(1);
const [receivedSize, setReceivedSize] = useState(PAGE_SIZE);
const [receivedTotal, setReceivedTotal] = useState(0);
const [receivedList, setReceivedList] = useState([]);
const [receivedListLoading, setReceivedListLoading] = useState(false);
const [usagePage, setUsagePage] = useState(1);
const [usageSize, setUsageSize] = useState(PAGE_SIZE);
const [usageTotal, setUsageTotal] = useState(0);
const [usageList, setUsageList] = useState([]);
const [usageListLoading, setUsageListLoading] = useState(false);
const receivedColumns: EditableColumns[] = [
{ {
title: 'ID', title: 'ID',
dataIndex: 'id', dataIndex: 'id',
...@@ -38,28 +79,28 @@ const EquityInfo: React.FC<EquityInfoProps> = ({ ...@@ -38,28 +79,28 @@ const EquityInfo: React.FC<EquityInfoProps> = ({
}, },
{ {
title: '会员权益名称', title: '会员权益名称',
dataIndex: 'project', dataIndex: 'rightTypeName ',
align: 'center', align: 'center',
}, },
{ {
title: '获取数量', title: '获取数量',
dataIndex: 'score', dataIndex: 'point',
align: 'center', align: 'center',
}, },
{ {
title: '获取时间', title: '获取时间',
dataIndex: 'created', dataIndex: 'createTime',
align: 'center', align: 'center',
}, },
{ {
title: '备注', title: '备注',
dataIndex: 'node', dataIndex: 'remark',
align: 'center', align: 'center',
ellipsis: true, ellipsis: true,
}, },
]; ];
const columns2: EditableColumns[] = [ const usageColumns: EditableColumns[] = [
{ {
title: 'ID', title: 'ID',
dataIndex: 'id', dataIndex: 'id',
...@@ -67,34 +108,99 @@ const EquityInfo: React.FC<EquityInfoProps> = ({ ...@@ -67,34 +108,99 @@ const EquityInfo: React.FC<EquityInfoProps> = ({
}, },
{ {
title: '会员权益名称', title: '会员权益名称',
dataIndex: 'project', dataIndex: 'rightTypeName',
align: 'center', align: 'center',
}, },
{ {
title: '会员权益使用名称', title: '会员权益使用名称',
dataIndex: 'name', dataIndex: 'spendTypeName',
align: 'center', align: 'center',
}, },
{ {
title: '使用数量', title: '使用数量',
dataIndex: 'count', dataIndex: 'point',
align: 'center', align: 'center',
}, },
{ {
title: '使用时间', title: '使用时间',
dataIndex: 'created', dataIndex: 'createTime',
align: 'center', align: 'center',
}, },
{ {
title: '备注', title: '备注',
dataIndex: 'node', dataIndex: 'remark',
align: 'center', align: 'center',
ellipsis: true, ellipsis: true,
}, },
]; ];
const getReceivedList = () => {
if (fetchReceivedList) {
if (receivedListLoading) {
return;
}
setReceivedListLoading(true);
fetchReceivedList({
current: receivedPage,
pageSize: receivedSize,
}).then(res => {
const { data = [], totalCount = 0 } = (res || {});
setReceivedList(data);
setReceivedTotal(totalCount);
}).finally(() => {
setReceivedListLoading(false);
});
}
};
const getUsageList = () => {
if (fetchUsageList) {
if (usageListLoading) {
return;
}
setUsageListLoading(true);
fetchUsageList({
current: usagePage,
pageSize: usageSize,
}).then(res => {
const { data = [], totalCount = 0 } = (res || {});
setUsageList(data);
setUsageTotal(totalCount);
}).finally(() => {
setUsageListLoading(false);
});
}
};
useEffect(() => {
getReceivedList();
}, []);
const handleTabChange = key => { const handleTabChange = key => {
console.log('key', key) switch (key) {
case '1':
getReceivedList();
break;
case '2':
getUsageList();
break;
default:
break;
}
};
const handleReceivedPaginationChange = (page: number, size: number) => {
setReceivedPage(page);
setReceivedSize(size);
getReceivedList();
};
const handleUsagePaginationChange = (page: number, size: number) => {
setUsagePage(page);
setUsageSize(size);
getReceivedList();
}; };
return ( return (
...@@ -209,18 +315,26 @@ const EquityInfo: React.FC<EquityInfoProps> = ({ ...@@ -209,18 +315,26 @@ const EquityInfo: React.FC<EquityInfoProps> = ({
<Tabs onChange={handleTabChange}> <Tabs onChange={handleTabChange}>
<TabPane tab="权益获取记录" key="1"> <TabPane tab="权益获取记录" key="1">
<PolymericTable <PolymericTable
dataSource={[]} dataSource={receivedList}
columns={columns} columns={receivedColumns}
loading={false} loading={receivedListLoading}
pagination={null} pagination={{
pageSize: receivedSize,
total: receivedTotal,
}}
onPaginationChange={handleReceivedPaginationChange}
/> />
</TabPane> </TabPane>
<TabPane tab="权益使用记录" key="2"> <TabPane tab="权益使用记录" key="2">
<PolymericTable <PolymericTable
dataSource={[]} dataSource={usageList}
columns={columns2} columns={usageColumns}
loading={false} loading={usageListLoading}
pagination={null} pagination={{
pageSize: usageSize,
total: usageTotal,
}}
onPaginationChange={handleUsagePaginationChange}
/> />
</TabPane> </TabPane>
</Tabs> </Tabs>
......
import React, { useState } from 'react'; import React, { useState, useEffect } from 'react';
import { import {
Row, Row,
Col, Col,
Tabs, Tabs,
Card, Card,
Tooltip, Tooltip,
Radio, Radio,
Spin,
} from 'antd'; } from 'antd';
import { import {
QuestionCircleOutlined, QuestionCircleOutlined,
...@@ -13,7 +14,6 @@ import { ...@@ -13,7 +14,6 @@ import {
MehFilled, MehFilled,
FrownFilled, FrownFilled,
} from '@ant-design/icons'; } from '@ant-design/icons';
import classNames from 'classnames';
import PolymericTable from '@/components/PolymericTable'; import PolymericTable from '@/components/PolymericTable';
import { EditableColumns } from '@/components/PolymericTable/interface'; import { EditableColumns } from '@/components/PolymericTable/interface';
import { Pie } from '@/components/Charts'; import { Pie } from '@/components/Charts';
...@@ -21,18 +21,6 @@ import MellowCard from '@/components/MellowCard'; ...@@ -21,18 +21,6 @@ import MellowCard from '@/components/MellowCard';
import equity5 from '@/assets/imgs/equity-5.png'; import equity5 from '@/assets/imgs/equity-5.png';
import styles from './index.less'; import styles from './index.less';
import {
Chart,
registerShape,
Geom,
Axis,
Tooltip as ChartTooltip,
Interval,
Interaction,
Coordinate,
} from 'bizcharts';
import DataSet from '@antv/data-set';
const { TabPane } = Tabs; const { TabPane } = Tabs;
interface ContentBoxProps { interface ContentBoxProps {
...@@ -131,9 +119,51 @@ const evaluateData = [ ...@@ -131,9 +119,51 @@ const evaluateData = [
}, },
]; ];
const SincerityInfo: React.FC<{}> = props => { export interface BasicInfo {
pieData: {
x: string,
y: number,
}[],
items: {
id: number,
creditTypeName: string,
remark: string,
creditPoint: number,
}[],
loading?: boolean,
};
export interface EstimateSumItems {
id?: number,
title?: JSX.Element,
star?: number,
last7days?: number,
last30days?: number,
last180days?: number,
before180days?: number,
sum?: number,
};
export interface EstimateSum {
dataSource: EstimateSumItems[],
loading?: boolean,
};
interface SincerityInfoProps {
basicInfo?: BasicInfo;
estimateSum?: EstimateSum;
};
const SincerityInfo: React.FC<SincerityInfoProps> = ({
basicInfo = {},
estimateSum = {},
}) => {
const creditData = basicInfo.pieData || [];
const integralItems = basicInfo.items || [];
const [recordType, setRecordType] = useState('business'); const [recordType, setRecordType] = useState('business');
const [evaluate, setEvaluate] = useState([]);
const [evaluatePie, setEvaluatePie] = useState([]);
const recordColumns: EditableColumns[] = const recordColumns: EditableColumns[] =
recordType === 'business' ? recordType === 'business' ?
...@@ -224,22 +254,22 @@ const SincerityInfo: React.FC<{}> = props => { ...@@ -224,22 +254,22 @@ const SincerityInfo: React.FC<{}> = props => {
}, },
{ {
title: '最近7天', title: '最近7天',
dataIndex: 'day7', dataIndex: 'last7days',
align: 'center', align: 'center',
}, },
{ {
title: '最近30天', title: '最近30天',
dataIndex: 'day30', dataIndex: 'last30days',
align: 'center', align: 'center',
}, },
{ {
title: '最近180天', title: '最近180天',
dataIndex: 'day180', dataIndex: 'last180days',
align: 'center', align: 'center',
}, },
{ {
title: '180天前', title: '180天前',
dataIndex: 'day180+', dataIndex: 'before180days',
align: 'center', align: 'center',
}, },
]; ];
...@@ -278,144 +308,183 @@ const SincerityInfo: React.FC<{}> = props => { ...@@ -278,144 +308,183 @@ const SincerityInfo: React.FC<{}> = props => {
}, },
]; ];
const evaluate = [ const summaryEvaluate = (items: EstimateSumItems[]): EstimateSumItems[] => {
{ // 顺序写死的 1:表示好评,2:表示中评,3:表示差评
id: 1, // 根据 1、2星级为差评,3星级为中评,4、5星级为好评往里边塞数据
title: (<Mood type="smile" />), const source = items || [];
day7: 10, const ret = [
day30: 10, {
day180: 10, id: 1,
'day180+': 10, title: (<Mood type="smile" />),
}, },
{ {
id: 2, id: 2,
title: (<Mood type="notBad" />), title: (<Mood type="notBad" />),
day7: 10, },
day30: 10, {
day180: 10, id: 3,
'day180+': 10, title: (<Mood type="sad" />),
}, },
{ ];
id: 3,
title: (<Mood type="sad" />),
day7: 10,
day30: 10,
day180: 10,
'day180+': 10,
},
];
const handleTabChange = key => { for (let i = 0; i < source.length; i++) {
setRecordType(key); const item = source[i];
const { star, ...rest } = item;
let target = null;
switch (item.star) {
case 1:
case 2: {
target = ret[0];
break;
}
case 3: {
target = ret[1];
break;
}
case 4:
case 5: {
target = ret[2];
break;
}
default:
break;
}
if (!target) {
continue;
}
// 大于 2 表示已经添加过一次数据,之后就累加上去,否则直接赋值
if (Object.keys(target).length <= 2) {
target = Object.assign(target, rest);
} else {
for (const key in target) {
if (!Object.prototype.hasOwnProperty.call(target, key)) {
continue;
}
// 排除 id、title 固定的 key
if (key !== 'id' && key !== 'title') {
target[key] += item[key];
}
}
}
}
return ret;
};
const getSummaryEvaluatePie = (data: EstimateSumItems[]) => {
const source = data || [];
const count = source.reduce((pre, now) => now.sum + pre, 0);
const ret = [
{
x: `好评 ${((source[0].sum || 0) / count * 100).toFixed(2)}%`,
y: source[0].sum || 0,
},
{
x: `中评 ${((source[1].sum || 0) / count * 100).toFixed(2)}%`,
y: source[1].sum || 0,
},
{
x: `差评 ${((source[2].sum || 0) / count * 100).toFixed(2)}%`,
y: source[2].sum || 0,
},
];
return ret;
}; };
useEffect(() => {
const evaluate = summaryEvaluate(estimateSum.dataSource);
const evaluatePie = getSummaryEvaluatePie(evaluate);
setEvaluate(evaluate);
setEvaluatePie(evaluatePie);
}, [estimateSum.dataSource]);
const { DataView } = DataSet; const handleTabChange = key => {
const dv = new DataView(); setRecordType(key);
dv.source(creditData).transform({ };
type: 'percent',
field: 'y',
dimension: 'x',
as: 'percent',
});
return ( return (
<div className={styles.sincerityInfo}> <div className={styles.sincerityInfo}>
<Row gutter={[0, 24]}> <Row gutter={[0, 24]}>
<Col span={24}> <Col span={24}>
<Row gutter={24}> <Spin spinning={Boolean(basicInfo.loading)}>
<Col span={8}>
<MellowCard
title="信用积分"
>
<Pie
hasLegend
subTitle="信用积分"
total="123.4"
data={creditData}
height={178}
/>
</MellowCard>
</Col>
<Col span={16}>
<div className={styles.tofo}>
<MellowCard>
<Card.Grid className={styles['tofo-item']}>
<ContentBox
title="交易评价积分"
desc="交易完成后评价为5分时增加信用积分"
content="+1000"
extra={
<img className={styles['tofo-item-logo']} src={equity5} />
}
/>
</Card.Grid>
<Card.Grid className={styles['tofo-item']}>
<ContentBox
title="售后评价积分"
desc="交易完成后评价为5分时增加信用积分"
content="+1000"
extra={
<img className={styles['tofo-item-logo']} src={equity5} />
}
/>
</Card.Grid>
<Card.Grid className={styles['tofo-item']}>
<ContentBox
title="投诉扣分"
desc="交易完成后评价为5分时增加信用积分"
content="+1000"
extra={
<img className={styles['tofo-item-logo']} src={equity5} />
}
/>
</Card.Grid>
<Card.Grid className={styles['tofo-item']}>
<ContentBox
title="入驻年数积分"
desc="交易完成后评价为5分时增加信用积分"
content="+1000"
extra={
<img className={styles['tofo-item-logo']} src={equity5} />
}
/>
</Card.Grid>
</MellowCard>
</div>
</Col>
</Row>
</Col>
<Col span={24}>
<MellowCard
title="评价统计"
>
<Row gutter={24}> <Row gutter={24}>
<Col span={8}> <Col span={8}>
<Pie <MellowCard
hasLegend title="信用积分"
subTitle="累计评价" >
total="1234" <Pie
data={evaluateData} hasLegend
height={178} subTitle="信用积分"
colProps={{ total={() => creditData.reduce((pre, now) => now.y + pre, 0)}
span: 8, data={creditData}
}} height={178}
/> />
</MellowCard>
</Col> </Col>
<Col span={16}> {basicInfo.loading === false && (
<PolymericTable <Col span={16}>
dataSource={evaluate} <div className={styles.tofo}>
columns={evaluateColumns} <MellowCard>
loading={false} {integralItems.map(item => (
pagination={null} <Card.Grid key={item.id} className={styles['tofo-item']}>
rowClassName={() => styles['record-row']} <ContentBox
/> title={item.creditTypeName}
</Col> desc={item.remark}
content={item.creditPoint}
extra={
<img className={styles['tofo-item-logo']} src={equity5} />
}
/>
</Card.Grid>
))}
</MellowCard>
</div>
</Col>
)}
</Row> </Row>
</MellowCard> </Spin>
</Col>
<Col span={24}>
<Spin spinning={Boolean(estimateSum.loading)}>
<MellowCard
title="评价统计"
>
<Row gutter={24}>
<Col span={8}>
<Pie
hasLegend
subTitle="累计评价"
total={() => evaluatePie.reduce((pre, now) => now.y + pre, 0)}
data={evaluatePie}
height={178}
colProps={{
span: 8,
}}
/>
</Col>
<Col span={16}>
<PolymericTable
dataSource={evaluate}
columns={evaluateColumns}
loading={false}
pagination={null}
rowClassName={() => styles['record-row']}
/>
</Col>
</Row>
</MellowCard>
</Spin>
</Col> </Col>
<Col span={24}> <Col span={24}>
......
...@@ -4,6 +4,7 @@ import { Badge, Button, Card, Spin, message } from 'antd'; ...@@ -4,6 +4,7 @@ import { Badge, Button, Card, Spin, message } from 'antd';
import { PageHeaderWrapper } from '@ant-design/pro-layout'; import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { SaveOutlined } from '@ant-design/icons'; import { SaveOutlined } from '@ant-design/icons';
import { createFormActions, FormEffectHooks, FormPath } from '@formily/antd'; import { createFormActions, FormEffectHooks, FormPath } from '@formily/antd';
import { Select, Input } from '@formily/antd-components'
import { merge } from 'rxjs'; import { merge } from 'rxjs';
import { usePageStatus } from '@/hooks/usePageStatus'; import { usePageStatus } from '@/hooks/usePageStatus';
import ReutrnEle from '@/components/ReturnEle'; import ReutrnEle from '@/components/ReturnEle';
...@@ -19,7 +20,6 @@ const formActions = createFormActions(); ...@@ -19,7 +20,6 @@ const formActions = createFormActions();
const { const {
onFieldValueChange$, onFieldValueChange$,
onFieldInputChange$, onFieldInputChange$,
onFormInit$,
} = FormEffectHooks; } = FormEffectHooks;
const addMember: React.FC<any> = props => { const addMember: React.FC<any> = props => {
...@@ -338,13 +338,6 @@ const addMember: React.FC<any> = props => { ...@@ -338,13 +338,6 @@ const addMember: React.FC<any> = props => {
getPageitemsBasic, getPageitemsBasic,
); );
onFormInit$().subscribe(() => {
actions.setFieldState('roleId', state => {
state.loading = true;
})
})
useAsyncLinkageEffect(); useAsyncLinkageEffect();
}} }}
schema={initDetailSchema(memberItems)} schema={initDetailSchema(memberItems)}
......
...@@ -230,6 +230,9 @@ export const initDetailSchema = (props: any) => { ...@@ -230,6 +230,9 @@ export const initDetailSchema = (props: any) => {
'x-component-props': { 'x-component-props': {
placeholder: '请选择', placeholder: '请选择',
}, },
'x-props': {
hasFeedback: true,
},
}, },
levelId: { levelId: {
type: 'string', type: 'string',
...@@ -239,6 +242,9 @@ export const initDetailSchema = (props: any) => { ...@@ -239,6 +242,9 @@ export const initDetailSchema = (props: any) => {
'x-component-props': { 'x-component-props': {
placeholder: '请选择', placeholder: '请选择',
}, },
'x-props': {
hasFeedback: true,
},
}, },
MEGA_LAYOUT1_1: { MEGA_LAYOUT1_1: {
type: 'object', type: 'object',
...@@ -259,11 +265,17 @@ export const initDetailSchema = (props: any) => { ...@@ -259,11 +265,17 @@ export const initDetailSchema = (props: any) => {
}, },
phone: { phone: {
type: 'string', type: 'string',
required: true,
'x-component-props': { 'x-component-props': {
placeholder: '请输入你的手机号码', placeholder: '请输入你的手机号码',
maxLength: 11, maxLength: 11,
}, },
required: true, 'x-rules': [
{
pattern: PATTERN_MAPS.phone,
message: '请输入正确格式的手机号',
},
],
}, },
}, },
}, },
......
import React from 'react'; import React, { useEffect, useState } from 'react';
import Info from '../../components/EquityInfo'; import { Spin } from 'antd';
import { usePageStatus } from '@/hooks/usePageStatus';
import { PublicApi } from '@/services/api';
import { GetMemberAbilityMaintenanceDetailRightBasicResponse } from '@/services/MemberApi';
import Info, { ReceivedData, UsageData } from '../../components/EquityInfo';
const EquityInfo: React.FC<{}> = () => { const EquityInfo: React.FC<{}> = () => {
const { id, validateId } = usePageStatus();
const [equityInfo, setEquityInfo] = useState<GetMemberAbilityMaintenanceDetailRightBasicResponse>(null);
const [infoLoading, setInfoLoading] = useState(false);
const getEquityInfo = () => {
setInfoLoading(true);
PublicApi.getMemberAbilityMaintenanceDetailRightBasic({
memberId: id,
validateId,
}).then(res => {
if (res.code !== 1000) {
return;
}
setEquityInfo(res.data);
}).finally(() => {
setInfoLoading(false);
});
};
useEffect(() => {
getEquityInfo();
}, []);
const getReceivedList = params => {
return new Promise<{ data: ReceivedData[] , totalCount: number }>((resolve, reject) => {
PublicApi.getMemberAbilityMaintenanceDetailRightHistoryPage({
memberId: id,
validateId,
...params,
}).then(res => {
const { data = [], totalCount = 0 } = res.data;
resolve({ data, totalCount });
}).catch(err => {
reject(err);
});
})
};
const getUsageList = params => {
return new Promise<{ data: UsageData[] , totalCount: number }>((resolve, reject) => {
PublicApi.getMemberAbilityMaintenanceDetailRightSpendHistoryPage({
memberId: id,
validateId,
...params,
}).then(res => {
const { data = [], totalCount = 0 } = res.data;
resolve({ data, totalCount });
}).catch(err => {
reject(err);
});
})
};
return ( return (
<div> <Spin spinning={infoLoading}>
<Info /> <Info
</div> equityInfo={{
sumReturnMoney: equityInfo?.sumReturnMoney,
sumUsedPoint: equityInfo?.sumUsedPoint,
sumPoint: equityInfo?.sumPoint,
}}
fetchReceivedList={getReceivedList}
fetchUsageList={getUsageList}
/>
</Spin>
); );
}; };
......
...@@ -38,13 +38,13 @@ const MemberQueryDetailed: React.FC<QueryProps> = props => { ...@@ -38,13 +38,13 @@ const MemberQueryDetailed: React.FC<QueryProps> = props => {
const { MemberStore, children } = props; const { MemberStore, children } = props;
const { id, validateId } = usePageStatus(); const { id, validateId } = usePageStatus();
const [basicInfo, setBasicInfo] = useState<GetMemberAbilityMaintenanceDetailBasicResponse>(null); const [basicInfo, setBasicInfo] = useState<GetMemberAbilityMaintenanceDetailBasicResponse>(null);
const [infoLoading, setInfoLoaading] = useState(false); const [infoLoading, setInfoLoading] = useState(false);
const getBasicInfo = () => { const getBasicInfo = () => {
if (!id || !validateId) { if (!id || !validateId) {
return; return;
} }
setInfoLoaading(true); setInfoLoading(true);
PublicApi.getMemberAbilityMaintenanceDetailBasic({ PublicApi.getMemberAbilityMaintenanceDetailBasic({
memberId: id, memberId: id,
validateId, validateId,
...@@ -55,7 +55,7 @@ const MemberQueryDetailed: React.FC<QueryProps> = props => { ...@@ -55,7 +55,7 @@ const MemberQueryDetailed: React.FC<QueryProps> = props => {
setBasicInfo(res.data); setBasicInfo(res.data);
MemberStore.setmemberMaintainInfo(res.data); MemberStore.setmemberMaintainInfo(res.data);
}).finally(() => { }).finally(() => {
setInfoLoaading(false); setInfoLoading(false);
}); });
}; };
......
...@@ -9,13 +9,13 @@ import { reject } from 'lodash'; ...@@ -9,13 +9,13 @@ import { reject } from 'lodash';
const LevelInfo: React.FC<{}> = () => { const LevelInfo: React.FC<{}> = () => {
const { id, validateId } = usePageStatus(); const { id, validateId } = usePageStatus();
const [levelInfo, setLevelInfo] = useState<GetMemberAbilityMaintenanceDetailLevelBasicResponse>(null); const [levelInfo, setLevelInfo] = useState<GetMemberAbilityMaintenanceDetailLevelBasicResponse>(null);
const [infoLoading, setInfoLoaading] = useState(false); const [infoLoading, setInfoLoading] = useState(false);
const getMemberLevelInfo = () => { const getMemberLevelInfo = () => {
if (!id && !validateId) { if (!id && !validateId) {
return; return;
} }
setInfoLoaading(true); setInfoLoading(true);
PublicApi.getMemberAbilityMaintenanceDetailLevelBasic({ PublicApi.getMemberAbilityMaintenanceDetailLevelBasic({
memberId: id, memberId: id,
validateId, validateId,
...@@ -26,7 +26,7 @@ const LevelInfo: React.FC<{}> = () => { ...@@ -26,7 +26,7 @@ const LevelInfo: React.FC<{}> = () => {
setLevelInfo(res.data); setLevelInfo(res.data);
}).finally(() => { }).finally(() => {
setInfoLoaading(false); setInfoLoading(false);
}); });
}; };
......
import React from 'react'; import React, { useEffect, useState } from 'react';
import Info from '../../components/SincerityInfo'; import { usePageStatus } from '@/hooks/usePageStatus';
import { PublicApi } from '@/services/api';
import Info, { BasicInfo, EstimateSum } from '../../components/SincerityInfo';
const SincerityInfo: React.FC<{}> = () => { const SincerityInfo: React.FC<{}> = () => {
const { id, validateId } = usePageStatus();
const [basicInfo, setBasicInfo] = useState<BasicInfo>(null);
const [infoLoading, setInfoLoading] = useState(false);
const [estimateSum, setEstimateSum] = useState<EstimateSum>(null);
const [estimateSumLoading, setEstimateSumLoading] = useState(false);
const getBasicInfo = () => {
setInfoLoading(true);
PublicApi.getMemberAbilityMaintenanceDetailCreditBasic({
memberId: id,
validateId,
}).then(res => {
if (res.code !== 1000) {
return;
}
const {
tradeCommentPoint,
afterSaleCommentPoint,
complainPoint,
registerYearsPoint,
configs,
} = (res.data || {});
const pieData = [
{
x: '交易评价积分',
y: tradeCommentPoint || 0,
},
{
x: '售后评价积分',
y: afterSaleCommentPoint || 0,
},
{
x: '投诉扣分',
y: complainPoint || 0,
},
{
x: '入驻年数积分',
y: registerYearsPoint || 0,
},
];
setBasicInfo({
pieData,
items: configs,
});
}).finally(() => {
setInfoLoading(false);
});
};
const getEstimateSum = () => {
setEstimateSumLoading(true);
PublicApi.getMemberAbilityMaintenanceDetailCreditTradeSummary({
memberId: id,
validateId,
}).then(res => {
if (res.code !== 1000) {
return;
}
const { rows = [] } = (res.data || {});
const mock = [
{
before180days: 1,
last7days: 1,
last30days: 1,
last180days: 1,
star: 1,
sum: 1,
},
{
before180days: 2,
last7days: 2,
last30days: 2,
last180days: 2,
star: 2,
sum: 2,
},
{
before180days: 3,
last7days: 3,
last30days: 3,
last180days: 3,
star: 3,
sum: 3,
},
{
before180days: 4,
last7days: 4,
last30days: 4,
last180days: 4,
star: 4,
sum: 4,
},
{
before180days: 5,
last7days: 5,
last30days: 5,
last180days: 5,
star: 5,
sum: 5,
},
];
setEstimateSum({
dataSource: mock,
});
}).finally(() => {
setEstimateSumLoading(false);
});
};
useEffect(() => {
getBasicInfo();
getEstimateSum();
}, []);
return ( return (
<div> <div>
<Info /> <Info
basicInfo={{
...basicInfo,
loading: infoLoading,
}}
estimateSum={{
...estimateSum,
loading: estimateSumLoading,
}}
/>
</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