Commit 4eb617d3 authored by XieZhiXiong's avatar XieZhiXiong

feat: 调整 会员查询 相关UI

parent 8b815e2b
......@@ -35,100 +35,99 @@ const MemberBasicInfo: React.FC<MemberBasicInfoProps> = ({
MemberStore,
}) => {
const { memberInfo } = MemberStore;
return (
<Row gutter={[16, 16]}>
{/* 会员审核流程 */}
<Col span={24}>
<AuditProcess
outerVerifySteps={memberInfo?.outerVerifySteps}
outerVerifyCurrent={memberInfo?.currentOuterStep}
innerVerifySteps={memberInfo?.innerVerifySteps}
innerVerifyCurrent={memberInfo?.currentInnerStep}
id="verifySteps"
/>
</Col>
{/* 基本信息 */}
<Col span={24}>
<BasicInfo
dataSource={{
memberId: memberInfo?.memberId,
memberTypeName: memberInfo?.memberTypeName,
account: memberInfo?.account,
name: memberInfo?.name,
roleName: memberInfo?.roleName,
phone: memberInfo?.phone,
outerStatus: memberInfo?.outerStatus,
outerStatusName: memberInfo?.outerStatusName,
levelTag: memberInfo?.levelTag,
email: memberInfo?.email,
createTime: memberInfo?.createTime,
}}
id="basicInfo"
/>
</Col>
{/* 渠道信息 */}
{
memberInfo?.memberTypeEnum === MEMBER_TYPE_CHANNEL_CORPORATE
|| memberInfo?.memberTypeEnum === MEMBER_TYPE_CHANNEL_INDIVIDUAL
? (
<Col span={24}>
<MemberChannelInfo
dataSource={{
level: memberInfo?.channelLevelTag,
type: memberInfo?.channelTypeName,
areas: memberInfo?.areas,
desc: memberInfo?.remark,
}}
id="channelInfo"
/>
</Col>
)
: null
}
{/* 会员审核流程 */}
<Col span={24}>
<AuditProcess
outerVerifySteps={memberInfo?.outerVerifySteps}
outerVerifyCurrent={memberInfo?.currentOuterStep}
innerVerifySteps={memberInfo?.innerVerifySteps}
innerVerifyCurrent={memberInfo?.currentInnerStep}
id="verifySteps"
/>
</Col>
{/* 基本信息 */}
<Col span={24}>
<BasicInfo
dataSource={{
memberId: memberInfo?.memberId,
memberTypeName: memberInfo?.memberTypeName,
account: memberInfo?.account,
name: memberInfo?.name,
roleName: memberInfo?.roleName,
phone: memberInfo?.phone,
outerStatus: memberInfo?.outerStatus,
outerStatusName: memberInfo?.outerStatusName,
levelTag: memberInfo?.levelTag,
email: memberInfo?.email,
createTime: memberInfo?.createTime,
}}
id="basicInfo"
/>
</Col>
{/* 渠道信息 */}
{
memberInfo?.memberTypeEnum === MEMBER_TYPE_CHANNEL_CORPORATE
|| memberInfo?.memberTypeEnum === MEMBER_TYPE_CHANNEL_INDIVIDUAL
? (
<Col span={24}>
<MemberChannelInfo
dataSource={{
level: memberInfo?.channelLevelTag,
type: memberInfo?.channelTypeName,
areas: memberInfo?.areas,
desc: memberInfo?.remark,
}}
id="channelInfo"
/>
</Col>
)
: null
}
{/* 其他注册信息 */}
{
memberInfo && memberInfo.groups
? memberInfo.groups.map((item, index) => (
<Col span={24} key={`group${index}`}>
<CustomizeColumn
title={item.groupName}
data={(
item.elements.map((ele) => ({
title: ele.fieldCNName,
value: (
ele.fieldType !== 'upload'
? ele.fieldValue
: (
<PicWrap
pics={[ele.fieldValue]}
/>
)
),
}))
)}
id={`group${index}`}
/>
</Col>
))
: null
}
{/* 其他注册信息 */}
{
memberInfo && memberInfo.groups
? memberInfo.groups.map((item, index) => (
<Col span={24} key={`group${index}`}>
<CustomizeColumn
title={item.groupName}
data={(
item.elements.map((ele) => ({
title: ele.fieldCNName,
value: (
ele.fieldType !== 'upload'
? ele.fieldValue
: (
<PicWrap
pics={[ele.fieldValue]}
/>
)
),
}))
)}
id={`group${index}`}
/>
</Col>
))
: null
}
{/* 流转记录 */}
<Col span={24}>
<FlowRecords
outerColumns={MEMBER_OUTER_COLUMNS}
innerColumns={MEMBER_INNER_COLUMNS}
outerRowkey="id"
innerRowkey="id"
outerDataSource={memberInfo?.outerHistory}
id="flowRecords"
/>
</Col>
</Row>
{/* 流转记录 */}
<Col span={24}>
<FlowRecords
outerColumns={MEMBER_OUTER_COLUMNS}
innerColumns={MEMBER_INNER_COLUMNS}
outerRowkey="id"
innerRowkey="id"
outerDataSource={memberInfo?.outerHistory}
id="flowRecords"
/>
</Col>
</Row>
);
};
......
/*
* @Author: XieZhiXiong
* @Date: 2021-01-06 11:36:35
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-05-26 16:08:41
* @Description: 会员信用信息详情
*/
import React, { useEffect, useState } from 'react';
import { Row, Col } from 'antd';
import { usePageStatus } from '@/hooks/usePageStatus';
......@@ -91,7 +98,6 @@ const MemberSincerityInfo: React.FC<{}> = () => {
return;
}
const { rows = [] } = (res.data || {});
setOrderEstimateSum(rows);
}).finally(() => {
setOrderEstimateSumLoading(false);
......@@ -109,7 +115,6 @@ const MemberSincerityInfo: React.FC<{}> = () => {
return;
}
const { rows = [] } = (res.data || {});
setAfterServiceEstimateSum(rows);
}).finally(() => {
setAfterServiceEstimateSumLoading(false);
......@@ -117,7 +122,7 @@ const MemberSincerityInfo: React.FC<{}> = () => {
};
// 反馈汇总
const getComplaintSum = () => {
const getFeedbackSum = () => {
PublicApi.getMemberAbilityMaintenanceDetailCreditComplainSummary({
memberId: id,
validateId,
......@@ -133,7 +138,7 @@ const MemberSincerityInfo: React.FC<{}> = () => {
getBasicInfo();
getOrderEstimateSum();
getAfterEstimateSum();
getComplaintSum();
getFeedbackSum();
}, []);
// 交易评论历史记录
......
import React, { useState, useEffect, useRef, ReactNode } from 'react';
import React, { useState, useEffect } from 'react';
import { history, Prompt } from 'umi';
import { Badge, Button, Card, Spin, message } from 'antd';
import { Button, Card, Spin, message } from 'antd';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { SaveOutlined } from '@ant-design/icons';
import { createFormActions, FormEffectHooks, FormPath } from '@formily/antd';
import { createFormActions, FormEffectHooks } from '@formily/antd';
import { usePageStatus } from '@/hooks/usePageStatus';
import ReutrnEle from '@/components/ReturnEle';
import NiceForm from '@/components/NiceForm';
import { useLinkageUtils } from '@/utils/formEffectUtils';
import { PublicApi } from '@/services/api';
import { GetMemberAbilitySubGetResponse } from '@/services/MemberApi';
import { initDetailSchema } from './schema';
const formActions = createFormActions();
const {
onFieldValueChange$,
onFieldInputChange$,
onFormInputChange$,
const {
onFormInputChange$,
} = FormEffectHooks;
const AddSubRole: React.FC<any> = props => {
const areaRef = useRef<any[]>([])
const { memberTypeId, roleId } = usePageStatus();
const [memberItems, setMemberItems] = useState<any>({});
const [memberInfo, setMemberInfo] = useState<GetMemberAbilitySubGetResponse>(null);
......
/*
* @Author: XieZhiXiong
* @Date: 2021-05-26 14:21:57
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-05-26 14:42:49
* @Description: 新增会员角色 Drawer
*/
import React from 'react';
import {
Drawer,
Button,
} from 'antd';
import { DatePicker } from '@formily/antd-components';
import NiceForm from '@/components/NiceForm';
import {
createFormActions,
FormEffectHooks,
FormPath,
} from '@formily/antd';
import { useLinkageUtils } from '@/utils/formEffectUtils';
import { PublicApi } from '@/services/api';
import schema from './schema';
const formActions = createFormActions();
const {
onFieldValueChange$,
onFieldInputChange$,
onFormInputChange$,
onFormInit$,
} = FormEffectHooks;
interface IProps {
/**
* 是否可见
*/
visible: boolean,
/**
* Form 确认事件
*/
onSubmit: (values: any) => void,
/**
* 抽屉关闭事件
*/
onClose: () => void,
}
const AddRoleDrawer: React.FC<IProps> = (props: IProps) => {
const {
visible,
onSubmit,
onClose,
} = props;
const handleClose = () => {
if (onClose) {
onClose();
}
};
const getMembertype = () => {
return new Promise((resolve, reject) => {
PublicApi.getMemberAbilityInfoMembertypeList().then(res => {
if (res.code === 1000) {
const options = res.data.map(item => ({ label: item.memberTypeName, value: item.memberTypeId }))
resolve(options);
}
reject();
}).catch(() => {
reject();
});
});
};
const useAsyncDataSource = (name, service) => {
const { dispatch, setFieldState } = createFormActions();
const linkage = useLinkageUtils();
onFormInit$().subscribe(() => {
setFieldState(name, state => {
FormPath.setIn(state, 'props.x-props.hasFeedback', true);
});
linkage.loading(name);
service().then(res => {
linkage.loaded(name);
linkage.enum(name, res);
// 请求结束可以dispatch一个自定义事件收尾,方便后续针对该事件做联动
dispatch('requestAsyncDataSource', {
name,
payload: res
});
});
});
};
const getRoleByMemberType = memberTypeId => {
return new Promise((resolve, reject) => {
PublicApi.getMemberAbilityInfoRoleList({
memberTypeId,
}).then(res => {
if (res.code === 1000) {
const { roles = [], checkIds = [] } = res.data;
const options = roles.map(item => (
{
label: item.roleName,
value: item.roleId,
disabled: checkIds.find(id => id === item.roleId),
}
));
resolve(options);
}
reject();
}).catch(() => {
reject();
});
});
};
const handleSubmit = (values: any) => {
if (onSubmit) {
onSubmit(values);
}
};
return (
<Drawer
title="增加会员角色"
width={600}
onClose={handleClose}
visible={visible}
footer={
<div
style={{
textAlign: 'right',
}}
>
<Button onClick={handleClose} style={{ marginRight: 16 }}>
取消
</Button>
<Button onClick={() => formActions.submit()} type="primary">
确 定
</Button>
</div>
}
>
<NiceForm
previewPlaceholder="' '"
components={{
DatePicker,
}}
effects={($, { setFieldState, getFieldValue }) => {
const linkage = useLinkageUtils();
onFieldValueChange$('agree').subscribe(fieldState => {
setFieldState('reason', state => {
state.visible = !fieldState.value;
});
});
useAsyncDataSource('memberTypeId', getMembertype);
onFieldInputChange$('memberTypeId').subscribe(fieldState => {
const roleIdValue = getFieldValue('roleId');
if (roleIdValue) {
linkage.value('roleId', undefined);
setTimeout(() => {
formActions.clearErrors('roleId');
}, 0);
}
setFieldState('roleId', state => {
FormPath.setIn(state, 'props.x-props.hasFeedback', true);
});
linkage.loading('roleId');
getRoleByMemberType(fieldState.value)
.then(res => {
linkage.enum('roleId', res);
})
.finally(() => {
linkage.loaded('roleId');
});
});
}}
actions={formActions}
schema={schema}
onSubmit={values => handleSubmit(values)}
/>
</Drawer>
);
};
export default AddRoleDrawer;
/*
* @Author: XieZhiXiong
* @Date: 2021-05-26 14:26:06
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-05-26 14:46:11
* @Description:
*/
import { ISchema } from '@formily/antd';
const schema: ISchema = {
type: 'object',
properties: {
tip: {
type: 'object',
'x-component': 'Children',
'x-component-props': {
children: '您需要增加的会员角色是:',
},
},
MEGA_LAYOUT: {
type: 'object',
'x-component': 'Mega-Layout',
'x-component-props': {
labelCol: 4,
wrapperCol: 20,
labelAlign: 'left',
},
properties: {
memberTypeId: {
type: 'string',
title: '会员类型',
'x-component': "Radio",
'x-rules': [
{
required: true,
message: '请选择会员类型',
},
],
enum: [],
},
roleId: {
type: 'string',
title: '会员角色',
'x-component': "Radio",
'x-rules': [
{
required: true,
message: '请选择会员角色',
},
],
enum: [],
},
},
},
},
};
export default schema;
/*
* @Author: XieZhiXiong
* @Date: 2021-05-21 16:45:32
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-05-21 18:11:51
* @Description: 会员档案信息
*/
import React from 'react';
import { Row, Col } from 'antd';
import MemberDocCategory from '../../components/MemberDocCategory';
import MemberDocIncomingInfo from '../../components/MemberDocIncomingInfo';
import MemberDocQualification from '../../components/MemberDocQualification';
import MemberDocInspection from '../../components/MemberDocInspection';
import MemberDocScoredInfo from '../../components/MemberDocScoredInfo';
import MemberDocRectificationInfo from '../../components/MemberDocRectificationInfo';
const MemberArchiveInfo = () => {
return (
<Row gutter={[16, 16]}>
{/* 分类信息 */}
<Col span={24}>
<MemberDocCategory />
</Col>
{/* 入库信息 */}
<Col span={24}>
<MemberDocIncomingInfo />
</Col>
{/* 资质证明 */}
<Col span={24}>
<MemberDocQualification />
</Col>
{/* 考察信息 */}
<Col span={24}>
<MemberDocInspection />
</Col>
{/* 考评信息 */}
<Col span={24}>
<MemberDocScoredInfo />
</Col>
{/* 整改信息 */}
<Col span={24}>
<MemberDocRectificationInfo />
</Col>
</Row>
);
};
export default MemberArchiveInfo;
......@@ -2,15 +2,30 @@
* @Author: XieZhiXiong
* @Date: 2021-01-06 11:36:35
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-05-20 13:47:55
* @Description:
* @LastEditTime: 2021-05-26 15:59:34
* @Description: 会员基础信息详情
*/
import React from 'react';
import { Steps } from 'antd';
import {
Row,
Col,
} from 'antd';
import { observer, inject } from 'mobx-react';
import { IMemberModule } from '@/module/memberModule';
import MellowCard from '@/components/MellowCard';
import BasicInfo from '../../components/BasicInfo';
import {
MEMBER_TYPE_CHANNEL_CORPORATE,
MEMBER_TYPE_CHANNEL_INDIVIDUAL,
} from '@/constants/member';
import AuditProcess from '@/components/AuditProcess';
import CustomizeColumn from '@/components/CustomizeColumn';
import FlowRecords from '@/components/FlowRecords';
import {
MEMBER_OUTER_COLUMNS,
MEMBER_INNER_COLUMNS,
} from '../../constant';
import BasicInfo from '../../components/MemberBasicInfo';
import MemberChannelInfo from '../../components/MemberChannelInfo';
import PicWrap from '../../components/PicWrap';
interface MemberBasicInfoProps {
MemberStore?: IMemberModule;
......@@ -20,48 +35,99 @@ const MemberBasicInfo: React.FC<MemberBasicInfoProps> = ({
MemberStore,
}) => {
const { memberInfo } = MemberStore;
return (
<div>
<MellowCard
title="外部审核流程"
style={{
marginBottom: 24,
}}
>
<Steps
style={{ marginTop: 30 }}
progressDot
current={
memberInfo && memberInfo.currentOuterStep > 0 ?
memberInfo.currentOuterStep - 1 :
0
}
>
{memberInfo.outerVerifySteps ? memberInfo.outerVerifySteps.map((item, index) => (
<Steps.Step key={index} title={item.roleName} description={item.stepName} />
)) : null}
</Steps>
</MellowCard>
<Row gutter={[16, 16]}>
{/* 会员审核流程 */}
<Col span={24}>
<AuditProcess
outerVerifySteps={memberInfo?.outerVerifySteps}
outerVerifyCurrent={memberInfo?.currentOuterStep}
innerVerifySteps={memberInfo?.innerVerifySteps}
innerVerifyCurrent={memberInfo?.currentInnerStep}
id="verifySteps"
/>
</Col>
{/* 基本信息 */}
<Col span={24}>
<BasicInfo
dataSource={{
memberId: memberInfo?.memberId,
memberTypeName: memberInfo?.memberTypeName,
account: memberInfo?.account,
name: memberInfo?.name,
roleName: memberInfo?.roleName,
phone: memberInfo?.phone,
outerStatus: memberInfo?.outerStatus,
outerStatusName: memberInfo?.outerStatusName,
levelTag: memberInfo?.levelTag,
email: memberInfo?.email,
createTime: memberInfo?.createTime,
}}
id="basicInfo"
/>
</Col>
{/* 渠道信息 */}
{
memberInfo?.memberTypeEnum === MEMBER_TYPE_CHANNEL_CORPORATE
|| memberInfo?.memberTypeEnum === MEMBER_TYPE_CHANNEL_INDIVIDUAL
? (
<Col span={24}>
<MemberChannelInfo
dataSource={{
level: memberInfo?.channelLevelTag,
type: memberInfo?.channelTypeName,
areas: memberInfo?.areas,
desc: memberInfo?.remark,
}}
id="channelInfo"
/>
</Col>
)
: null
}
{/* 其他注册信息 */}
{
memberInfo && memberInfo.groups
? memberInfo.groups.map((item, index) => (
<Col span={24} key={`group${index}`}>
<CustomizeColumn
title={item.groupName}
data={(
item.elements.map((ele) => ({
title: ele.fieldCNName,
value: (
ele.fieldType !== 'upload'
? ele.fieldValue
: (
<PicWrap
pics={[ele.fieldValue]}
/>
)
),
}))
)}
id={`group${index}`}
/>
</Col>
))
: null
}
<BasicInfo
basic={{
account: memberInfo?.account,
phone: memberInfo?.phone,
email: memberInfo?.email,
created: memberInfo?.createTime,
}}
channel={{
memberType: memberInfo?.memberTypeEnum,
level: memberInfo?.channelLevelTag,
type: memberInfo?.channelTypeName,
areas: memberInfo?.areas,
desc: memberInfo?.remark,
}}
extra={memberInfo?.groups}
outerHistory={memberInfo?.outerHistory}
/>
</div>
{/* 流转记录 */}
<Col span={24}>
<FlowRecords
outerColumns={MEMBER_OUTER_COLUMNS}
innerColumns={MEMBER_INNER_COLUMNS}
outerRowkey="id"
innerRowkey="id"
outerDataSource={memberInfo?.outerHistory}
id="flowRecords"
/>
</Col>
</Row>
);
};
......
/*
* @Author: XieZhiXiong
* @Date: 2021-05-21 18:18:44
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-05-21 18:20:06
* @Description: 会员变更信息详情
*/
import React from 'react';
import { Row, Col } from 'antd';
import ChangedInfo from '../../components/MemberChangedInfo';
const MemberChangedInfo = () => {
return (
<Row gutter={[16, 16]}>
{/* 分类信息 */}
<Col span={24}>
<ChangedInfo />
</Col>
</Row>
);
};
export default MemberChangedInfo;
/*
* @Author: XieZhiXiong
* @Date: 2021-01-06 11:36:35
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-05-26 16:07:15
* @Description: 会员权益信息详情
*/
import React, { useEffect, useState } from 'react';
import { Spin } from 'antd';
import { Spin, Row, Col } from 'antd';
import { usePageStatus } from '@/hooks/usePageStatus';
import { PublicApi } from '@/services/api';
import { GetMemberAbilityMaintenanceDetailRightBasicResponse } from '@/services/MemberApi';
import Info, { ReceivedData, UsageData } from '../../components/EquityInfo';
import MemberRightsAnalysis from '../../components/MemberRightsAnalysis';
import MemberRights from '../../components/MemberRights';
import MemberRightsRecords, { ReceivedData, UsageData } from '../../components/MemberRightsRecords';
const EquityInfo: React.FC<{}> = () => {
const MemberRightsInfo: React.FC<{}> = () => {
const { id, validateId } = usePageStatus();
const [equityInfo, setEquityInfo] = useState<GetMemberAbilityMaintenanceDetailRightBasicResponse>(null);
const [infoLoading, setInfoLoading] = useState(false);
......@@ -61,18 +70,38 @@ const EquityInfo: React.FC<{}> = () => {
return (
<Spin spinning={infoLoading}>
<Info
equityInfo={{
sumReturnMoney: equityInfo?.sumReturnMoney,
sumUsedPoint: equityInfo?.sumUsedPoint,
sumPoint: equityInfo?.sumPoint,
rights: equityInfo?.rights,
}}
fetchReceivedList={getReceivedList}
fetchUsageList={getUsageList}
/>
<Row gutter={[16, 16]}>
{/* 基本信息 */}
<Col span={24}>
<MemberRightsAnalysis
data={{
sumReturnMoney: equityInfo?.sumReturnMoney,
sumUsedPoint: equityInfo?.sumUsedPoint,
sumPoint: equityInfo?.sumPoint,
}}
id="basicInfo"
/>
</Col>
{/* 会员权益 */}
<Col span={24}>
<MemberRights
data={equityInfo?.rights}
id="memberEquity"
/>
</Col>
{/* 会员权益 */}
<Col span={24}>
<MemberRightsRecords
fetchReceivedList={getReceivedList}
fetchUsageList={getUsageList}
id="equityRecords"
/>
</Col>
</Row>
</Spin>
);
};
export default EquityInfo;
\ No newline at end of file
export default MemberRightsInfo;
\ No newline at end of file
import React, { useState, useEffect } from 'react';
import { history } from 'umi';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { PageHeader, Descriptions, Badge, Spin } from 'antd';
import { Spin } from 'antd';
import {
UnorderedListOutlined,
FolderOutlined,
BarChartOutlined,
InsuranceOutlined,
BulbOutlined,
EditOutlined,
} from '@ant-design/icons';
import { observer, inject } from 'mobx-react';
import { usePageStatus } from '@/hooks/usePageStatus';
import { PublicApi } from '@/services/api';
import { GetMemberAbilityInfoDetailBasicResponse } from '@/services/MemberApi';
import { IMemberModule } from '@/module/memberModule';
import AvatarWrap from '@/components/AvatarWrap';
import {
MEMBER_STATUS_TAG_MAP,
MEMBER_OUTER_STATUS_TYPE,
} from '../../constant';
import StatusTag from '../../components/StatusTag';
import styles from './index.less';
MEMBER_TYPE_CHANNEL_CORPORATE,
MEMBER_TYPE_CHANNEL_INDIVIDUAL,
} from '@/constants/member';
import AnchorPage from '@/layouts/AnchorPage';
import AvatarWrap from '@/components/AvatarWrap';
import LevelBrand from '@/components/LevelBrand';
import Bookmark from '../../components/Bookmark';
interface QueryProps {
match: {
......@@ -29,7 +37,7 @@ interface QueryProps {
const MemberQueryDetailed: React.FC<QueryProps> = props => {
const { MemberStore, children } = props;
const { id, validateId } = usePageStatus();
const [basicInfo, setBasicInfo] = useState<GetMemberAbilityInfoDetailBasicResponse>(null);
const [memberInfo, setMemberInfo] = useState<GetMemberAbilityInfoDetailBasicResponse>(null);
const [infoLoading, setInfoLoading] = useState(false);
const getBasicInfo = () => {
......@@ -44,7 +52,7 @@ const MemberQueryDetailed: React.FC<QueryProps> = props => {
if (res.code !== 1000) {
return;
}
setBasicInfo(res.data);
setMemberInfo(res.data);
MemberStore.setMemberInfo(res.data);
}).finally(() => {
setInfoLoading(false);
......@@ -57,36 +65,13 @@ const MemberQueryDetailed: React.FC<QueryProps> = props => {
getBasicInfo();
}, []);
const tabList = [
{
key: 'basicInfo',
tab: '基本信息',
},
{
key: 'levelInfo',
tab: '等级信息',
},
{
key: 'equityInfo',
tab: '权益信息',
},
{
key: 'sincerityInfo',
tab: '诚信信息',
},
];
const handleTabChange = (val: string) => {
const handleBookmarkChange = (val: string) => {
const { match } = props;
const url = match.url === '/' ? '' : match.url;
switch (val) {
case 'basicInfo':
history.push(`${url}/basicInfo?id=${id}&validateId=${validateId}`);
break;
case 'powerInfo':
history.push(`${url}/powerInfo?id=${id}&validateId=${validateId}`);
break;
case 'levelInfo':
history.push(`${url}/levelInfo?id=${id}&validateId=${validateId}`);
break;
......@@ -101,63 +86,135 @@ const MemberQueryDetailed: React.FC<QueryProps> = props => {
}
};
const getTabKey = () => {
const getBookmarkKey = () => {
const { match, location } = props;
const url = match.path === '/' ? '' : match.path;
const tabKey = location.pathname.replace(`${url}/`, '');
if (tabKey && tabKey !== '/') {
return tabKey;
const markKey = location.pathname.replace(`${url}/`, '');
if (markKey && markKey !== '/') {
return markKey;
}
return 'basicInfo';
};
const getAnchorsArr = () => {
const markKey = getBookmarkKey();
let ret = [];
switch (markKey) {
case 'basicInfo':
ret = [
{
key: 'verifySteps',
name: '流转进度',
},
{
key: 'basicInfo',
name: '基本信息',
},
(
memberInfo?.memberTypeEnum === MEMBER_TYPE_CHANNEL_CORPORATE
|| memberInfo?.memberTypeEnum === MEMBER_TYPE_CHANNEL_INDIVIDUAL
? {
key: 'channelInfo',
name: '渠道信息',
}
: null
),
...(
memberInfo && memberInfo.groups
? memberInfo.groups.map((item, index) => ({
key: `group${index}`,
name: item.groupName,
}))
: []
),
{
key: 'flowRecords',
name: '流转记录',
},
].filter(Boolean);
break;
case 'levelInfo':
ret = [
{
key: 'memberLevel',
name: '会员等级',
},
{
key: 'activePoints',
name: '活跃分获取记录',
},
];
break;
case 'equityInfo':
ret = [
{
key: 'basicInfo',
name: '基本信息',
},
{
key: 'memberEquity',
name: '会员权益',
},
{
key: 'equityRecords',
name: '权益记录',
},
];
break;
case 'sincerityInfo':
ret = [
{
key: 'basicInfo',
name: '基本信息',
},
{
key: 'orderEvaluation',
name: '交易评价',
},
{
key: 'afterServiceEvaluation',
name: '售后评价',
},
{
key: 'feedbackRecords',
name: '反馈记录',
},
];
break;
default:
break;
}
return ret;
};
return (
<Spin spinning={infoLoading}>
<PageHeaderWrapper
style={{
padding: 24,
}}
title={
<>
<PageHeader
style={{ padding: '0' }}
onBack={() => history.push(`/memberCenter/memberAbility/query`)}
title={
<AvatarWrap
info={{
name: basicInfo?.name,
}}
extra={(
<span style={{ fontSize: 12, fontWeight: 'normal' }}>{basicInfo?.levelTag}</span>
)}
/>
}
>
<Descriptions
size="small"
column={3}
style={{
padding: '0 32px',
}}
>
<Descriptions.Item label="会员类型">{basicInfo?.memberTypeName}</Descriptions.Item>
<Descriptions.Item label="会员角色" span={2}>{basicInfo?.roleName}</Descriptions.Item>
<Descriptions.Item label="会员状态">
<StatusTag type={MEMBER_STATUS_TAG_MAP[basicInfo?.status]} title={basicInfo?.statusName} />
</Descriptions.Item>
<Descriptions.Item label="审核状态">
<StatusTag type={MEMBER_OUTER_STATUS_TYPE[basicInfo?.outerStatus]} title={basicInfo?.outerStatusName} />
</Descriptions.Item>
</Descriptions>
</PageHeader>
</>
}
tabList={tabList}
tabActiveKey={getTabKey()}
onTabChange={handleTabChange}
<AnchorPage
title={(
<AvatarWrap
info={{
name: memberInfo?.name,
}}
extra={(
<LevelBrand level={2} />
)}
/>
)}
onBack={() => history.push(`/memberCenter/memberAbility/manage/maintain`)}
anchors={getAnchorsArr()}
extra={(
<Bookmark value={getBookmarkKey()} onChange={handleBookmarkChange}>
<Bookmark.Item value="basicInfo" title="基本信息" icon={<UnorderedListOutlined />} />
<Bookmark.Item value="2" title="档案信息" icon={<FolderOutlined />} />
<Bookmark.Item value="levelInfo" title="等级信息" icon={<BarChartOutlined />} />
<Bookmark.Item value="equityInfo" title="权益信息" icon={<InsuranceOutlined />} />
<Bookmark.Item value="sincerityInfo" title="信用信息" icon={<BulbOutlined />} />
<Bookmark.Item value="3" title="变更信息" icon={<EditOutlined />} />
</Bookmark>
)}
>
{children}
</PageHeaderWrapper>
</AnchorPage>
</Spin>
);
};
......
/*
* @Author: XieZhiXiong
* @Date: 2021-01-06 11:36:35
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-05-26 16:06:56
* @Description: 会员等级信息详情
*/
import React, { useState, useEffect } from 'react';
import { Spin } from 'antd';
import { Spin, Row, Col } from 'antd';
import { usePageStatus } from '@/hooks/usePageStatus';
import { PublicApi } from '@/services/api';
import { GetMemberAbilityMaintenanceDetailLevelBasicResponse } from '@/services/MemberApi';
import Info, { DataProps } from '../../components/LevelInfo';
import { reject } from 'lodash';
import LevelInfo from '../../components/MemberLevelInfo';
import MemberActivePointRecords, { ListItem } from '../../components/MemberActivePointRecords';
import MemberDocCategory from '../../components/MemberDocCategory';
import MemberDocIncomingInfo from '../../components/MemberDocIncomingInfo';
import MemberDocQualification from '../../components/MemberDocQualification';
import MemberDocInspection from '../../components/MemberDocInspection';
import MemberDocScoredInfo from '../../components/MemberDocScoredInfo';
import MemberDocRectificationInfo from '../../components/MemberDocRectificationInfo';
import MemberChangedInfo from '../../components/MemberChangedInfo';
const LevelInfo: React.FC<{}> = () => {
const MemberLevelInfo: React.FC<{}> = () => {
const { id, validateId } = usePageStatus();
const [levelInfo, setLevelInfo] = useState<GetMemberAbilityMaintenanceDetailLevelBasicResponse>(null);
const [infoLoading, setInfoLoading] = useState(false);
......@@ -34,8 +48,8 @@ const LevelInfo: React.FC<{}> = () => {
getMemberLevelInfo();
}, []);
const getHistroyList = params => {
return new Promise<{ data: DataProps[] , totalCount: number }>((resolve, reject) => {
const getActivePointRecords = params => {
return new Promise<{ data: ListItem[] , totalCount: number }>((resolve, reject) => {
PublicApi.getMemberAbilityInfoDetailLevelHistoryPage({
memberId: id,
validateId,
......@@ -51,18 +65,66 @@ const LevelInfo: React.FC<{}> = () => {
return (
<Spin spinning={infoLoading}>
<Info
levelInfo={{
level: levelInfo?.levelTag,
score: levelInfo?.score,
nextLevel: levelInfo?.nextLevelTag,
nextScore: levelInfo?.nextScore,
}}
chartData={levelInfo?.points}
fetchList={getHistroyList}
/>
</Spin>
<Row gutter={[16, 16]}>
{/* 会员等级信息 */}
<Col span={24}>
<LevelInfo
levelInfo={{
level: levelInfo?.levelTag,
score: levelInfo?.score,
nextLevel: levelInfo?.nextLevelTag,
nextScore: levelInfo?.nextScore,
}}
chartData={levelInfo?.points}
id="memberLevel"
/>
</Col>
{/* 会员等级信息 */}
<Col span={24}>
<MemberActivePointRecords
fetchList={getActivePointRecords}
id="activePoints"
/>
</Col>
{/* 分类信息 */}
<Col span={24}>
<MemberDocCategory />
</Col>
{/* 入库信息 */}
<Col span={24}>
<MemberDocIncomingInfo />
</Col>
{/* 资质证明 */}
<Col span={24}>
<MemberDocQualification />
</Col>
{/* 考察信息 */}
<Col span={24}>
<MemberDocInspection />
</Col>
{/* 考评信息 */}
<Col span={24}>
<MemberDocScoredInfo />
</Col>
{/* 整改信息 */}
<Col span={24}>
<MemberDocRectificationInfo />
</Col>
{/* 变更信息 */}
<Col span={24}>
<MemberChangedInfo />
</Col>
</Row>
</Spin>
);
};
export default LevelInfo;
\ No newline at end of file
export default MemberLevelInfo;
\ No newline at end of file
/*
* @Author: XieZhiXiong
* @Date: 2021-01-06 11:36:35
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-05-26 16:16:46
* @Description: 会员信用信息详情
*/
import React, { useEffect, useState } from 'react';
import { Row, Col } from 'antd';
import { usePageStatus } from '@/hooks/usePageStatus';
import { PublicApi } from '@/services/api';
import Info, { BasicInfo, ComplaintSum, EstimateSum, SalesProps, ComplaintProps } from '../../components/SincerityInfo';
import MemberSincerityAnalysis from '../../components/MemberSincerityAnalysis';
import MemberEvaluation, { EstimateSumItems, ListItem } from '../../components/MemberEvaluation';
import MemberFeedbackRecords, { ListItem as FeedbackItem, AnalysisData } from '../../components/MemberFeedbackRecords';
const SincerityInfo: React.FC<{}> = () => {
export interface BasicInfo {
pieData: {
x: string,
y: number,
}[],
items: {
id: number,
creditTypeName: string,
remark: string,
creditPoint: number,
currentPoint: number,
}[],
loading?: boolean,
};
const MemberSincerityInfo: React.FC<{}> = () => {
const { id, validateId } = usePageStatus();
const [basicInfo, setBasicInfo] = useState<BasicInfo>(null);
const [infoLoading, setInfoLoading] = useState(false);
const [salesEstimateSum, setSalesEstimateSum] = useState<EstimateSum>(null);
const [salesEstimateSumLoading, setSalesEstimateSumLoading] = useState(false);
const [afterEstimateSum, setAfterEstimateSum] = useState<EstimateSum>(null);
const [afterEstimateSumLoading, setAfterEstimateSumLoading] = useState(false);
const [complainSum, setComplainSum] = useState<ComplaintSum>(null);
const [complainSumLoading, setComplainSumLoading] = useState(false);
const [basicInfoLoading, setBasicInfoLoading] = useState(false);
const [orderEstimateSum, setOrderEstimateSum] = useState<EstimateSumItems[]>([]);
const [orderEstimateSumLoading, setOrderEstimateSumLoading] = useState(false);
const [afterServiceEstimateSum, setAfterServiceEstimateSum] = useState<EstimateSumItems[]>([]);
const [afterServiceEstimateSumLoading, setAfterServiceEstimateSumLoading] = useState(false);
const [feedbackSum, setFeedbackSum] = useState<AnalysisData>({
last7days: 0,
last30days: 0,
last180days: 0,
before180days: 0,
sum: 0,
});
const getBasicInfo = () => {
setInfoLoading(true);
setBasicInfoLoading(true);
PublicApi.getMemberAbilityInfoDetailCreditBasic({
memberId: id,
validateId,
......@@ -53,13 +83,13 @@ const SincerityInfo: React.FC<{}> = () => {
items: configs,
});
}).finally(() => {
setInfoLoading(false);
setBasicInfoLoading(false);
});
};
// 交易评价汇总
const getSalesEstimateSum = () => {
setSalesEstimateSumLoading(true);
const getOrderEstimateSum = () => {
setOrderEstimateSumLoading(true);
PublicApi.getMemberAbilityInfoDetailCreditTradeSummary({
memberId: id,
validateId,
......@@ -68,18 +98,15 @@ const SincerityInfo: React.FC<{}> = () => {
return;
}
const { rows = [] } = (res.data || {});
setSalesEstimateSum({
dataSource: rows,
});
setOrderEstimateSum(rows);
}).finally(() => {
setSalesEstimateSumLoading(false);
setOrderEstimateSumLoading(false);
});
};
// 售后评价汇总
const getAfterEstimateSum = () => {
setAfterEstimateSumLoading(true);
setAfterServiceEstimateSumLoading(true);
PublicApi.getMemberAbilityInfoDetailCreditAftersaleSummary({
memberId: id,
validateId,
......@@ -88,18 +115,14 @@ const SincerityInfo: React.FC<{}> = () => {
return;
}
const { rows = [] } = (res.data || {});
setAfterEstimateSum({
dataSource: rows,
});
setAfterServiceEstimateSum(rows);
}).finally(() => {
setAfterEstimateSumLoading(false);
setAfterServiceEstimateSumLoading(false);
});
};
// 投诉汇总
const getComplaintSum = () => {
setComplainSumLoading(true);
// 反馈汇总
const getFeedbackSum = () => {
PublicApi.getMemberAbilityInfoDetailCreditComplainSummary({
memberId: id,
validateId,
......@@ -107,24 +130,20 @@ const SincerityInfo: React.FC<{}> = () => {
if (res.code !== 1000) {
return;
}
setComplainSum({
dataSource: res.data,
});
}).finally(() => {
setComplainSumLoading(false);
setFeedbackSum(res.data);
});
};
useEffect(() => {
getBasicInfo();
getSalesEstimateSum();
getOrderEstimateSum();
getAfterEstimateSum();
getComplaintSum();
getFeedbackSum();
}, []);
// 交易评论历史记录
const getSalesList = (params) => {
return new Promise<{ data: SalesProps[] , totalCount: number }>((resolve, reject) => {
const getOrderEvaluationList = (params) => {
return new Promise<{ data: ListItem[] , totalCount: number }>((resolve, reject) => {
PublicApi.getMemberAbilityInfoDetailCreditTradeHistoryPage({
memberId: id,
validateId,
......@@ -139,8 +158,8 @@ const SincerityInfo: React.FC<{}> = () => {
};
// 售后评论历史记录
const getAfterList = (params) => {
return new Promise<{ data: SalesProps[] , totalCount: number }>((resolve, reject) => {
const getAfterServiceEvaluationList = (params) => {
return new Promise<{ data: ListItem[] , totalCount: number }>((resolve, reject) => {
PublicApi.getMemberAbilityInfoDetailCreditAftersaleHistoryPage({
memberId: id,
validateId,
......@@ -154,9 +173,9 @@ const SincerityInfo: React.FC<{}> = () => {
});
};
// 投诉历史记录
const getComplaintList = (params) => {
return new Promise<{ data: ComplaintProps[] , totalCount: number }>((resolve, reject) => {
// 反馈历史记录
const getFeedbackList = (params) => {
return new Promise<{ data: FeedbackItem[] , totalCount: number }>((resolve, reject) => {
PublicApi.getMemberAbilityInfoDetailCreditComplainHistoryPage({
memberId: id,
validateId,
......@@ -171,30 +190,51 @@ const SincerityInfo: React.FC<{}> = () => {
};
return (
<div>
<Info
basicInfo={{
...basicInfo,
loading: infoLoading,
}}
salesEstimateSum={{
...salesEstimateSum,
loading: salesEstimateSumLoading,
}}
fetchSalesList={getSalesList}
afterEstimateSum={{
...afterEstimateSum,
loading: afterEstimateSumLoading,
}}
fetchAfterList={getAfterList}
complaintSum={{
...complainSum,
loading: complainSumLoading,
}}
fetchComplaintList={getComplaintList}
/>
</div>
<>
<Row gutter={[16, 16]}>
{/* 基本信息 */}
<Col span={24}>
<MemberSincerityAnalysis
creditData={basicInfo?.pieData}
integralItems={basicInfo?.items}
loading={basicInfoLoading}
id="basicInfo"
/>
</Col>
{/* 交易评价 */}
<Col span={24}>
<MemberEvaluation
title="交易评价"
analysis={orderEstimateSum}
loading={orderEstimateSumLoading}
fetchEvaluationList={getOrderEvaluationList}
id="orderEvaluation"
/>
</Col>
{/* 售后评价 */}
<Col span={24}>
<MemberEvaluation
title="售后评价"
analysis={afterServiceEstimateSum}
loading={afterServiceEstimateSumLoading}
fetchEvaluationList={getAfterServiceEvaluationList}
id="afterServiceEvaluation"
/>
</Col>
{/* 反馈记录 */}
<Col span={24}>
<MemberFeedbackRecords
analysis={feedbackSum}
fetchList={getFeedbackList}
id="feedbackRecords"
/>
</Col>
</Row>
</>
);
};
export default SincerityInfo;
\ No newline at end of file
export default MemberSincerityInfo;
\ No newline at end of file
import React, { ReactNode, useState, useRef } from 'react';
import React, { useState, useRef } from 'react';
import { history } from 'umi';
import {
Card,
Space,
Button,
Badge,
Modal,
} from 'antd';
import {
PlusOutlined,
DeleteOutlined,
ClockCircleOutlined,
DownOutlined,
} from '@ant-design/icons';
import { StandardTable } from 'god';
import { ColumnType } from 'antd/lib/table/interface';
import { createFormActions, FormEffectHooks, FormPath } from '@formily/antd';
import { createFormActions } from '@formily/antd';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { useAsyncInitSelect } from '@/formSchema/effects/useAsyncInitSelect';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import EyePreview from '@/components/EyePreview';
import NiceForm from '@/components/NiceForm';
import { PublicApi } from '@/services/api';
import { useLinkageUtils } from '@/utils/formEffectUtils';
import {
MEMBER_LEVEL_TYPE_PLATFORM,
MEMBER_LEVEL_TYPE_PLATFORM,
MEMBER_LEVEL_TYPE_MERCHANT,
MEMBER_LEVEL_TYPE_CHANNEL,
MEMBER_OUTER_STATUS_FAILED,
MEMBER_LEVEL_TYPE_CHANNEL,
MEMBER_OUTER_STATUS_FAILED,
} from '@/constants/member';
import LevelBrand from '../../../components/LevelBrand';
import { maintianSchema, addRoleSchema } from './schema';
import { maintianSchema } from './schema';
import { coverColFiltersItem } from '../utils';
import {
MEMBER_STATUS_TAG_MAP,
MEMBER_INNER_STATUS_BADGE_COLOR,
MEMBER_OUTER_STATUS_TYPE,
MEMBER_OUTER_STATUS_BADGE_COLOR,
import {
MEMBER_OUTER_STATUS_BADGE_COLOR,
} from '../constant';
import LevelBrand from '../../../components/LevelBrand';
import AddRoleDrawer from './components/AddRoleDrawer';
const formActions = createFormActions();
const modalFormActions = createFormActions();
const {
onFieldValueChange$,
onFieldInputChange$,
onFormInputChange$,
onFormInit$,
} = FormEffectHooks;
const MemberQuery: React.FC<{}> = () => {
const ref = useRef<any>({});
const [modalVisible, setModalVisible] = useState(false);
const [confirmLoading, setConfirmLoading] = useState(false);
const fetchData = async (params: any) => {
let res = await PublicApi.getMemberAbilityInfoPage(params);
......@@ -76,44 +61,32 @@ const MemberQuery: React.FC<{}> = () => {
const defaultColumns: ColumnType<any>[] = [
{
title: 'ID',
dataIndex: 'memberId',
align: 'center',
},
{
title: '会员归属',
dataIndex: 'name',
align: 'center',
render: (text, record) => (
<>
<EyePreview
url={`/memberCenter/memberAbility/query/detail?id=${record.memberId}&validateId=${record.validateId}`}
>
{text}
</EyePreview>
<div>
<LevelBrand level={record.level} />
</div>
</>
<EyePreview
url={`/memberCenter/memberAbility/query/detail?id=${record.memberId}&validateId=${record.validateId}`}
>
{text}
</EyePreview>
),
},
{
title: '会员类型',
dataIndex: 'memberTypeName',
align: 'center',
render: (text, record) => <>{text}</>,
},
{
title: '会员角色',
dataIndex: 'roleName',
align: 'center',
render: (text, record) => <>{text}</>,
},
{
title: '会员等级',
dataIndex: 'levelTag',
dataIndex: 'level',
align: 'center',
render: (text, record) => <>{text}</>,
render: text => <LevelBrand level={text} />,
},
{
title: '会员等级类型',
......@@ -126,17 +99,18 @@ const MemberQuery: React.FC<{}> = () => {
align: 'center',
},
{
title: '入库时间',
dataIndex: 'comingTime',
align: 'center',
},
{
title: '会员状态',
dataIndex: 'statusName',
align: 'center',
filters: [],
onFilter: (value, record) => record.status === value,
render: (text, record) => <span>{text}</span>,
},
{
title: '审核状态',
dataIndex: 'outerStatusName',
align: 'center',
filters: [],
onFilter: (value, record) => record.outerStatus === value,
filterMultiple: false,
......@@ -223,63 +197,6 @@ const MemberQuery: React.FC<{}> = () => {
});
};
const getMembertype = () => {
return new Promise((resolve, reject) => {
PublicApi.getMemberAbilityInfoMembertypeList().then(res => {
if (res.code === 1000) {
const options = res.data.map(item => ({ label: item.memberTypeName, value: item.memberTypeId }))
resolve(options);
}
reject();
}).catch(() => {
reject();
});
});
};
const getRoleByMemberType = memberTypeId => {
return new Promise((resolve, reject) => {
PublicApi.getMemberAbilityInfoRoleList({
memberTypeId,
}).then(res => {
if (res.code === 1000) {
const { roles = [], checkIds = [] } = res.data;
const options = roles.map(item => (
{
label: item.roleName,
value: item.roleId,
disabled: checkIds.find(id => id === item.roleId),
}
));
resolve(options);
}
reject();
}).catch(() => {
reject();
});
});
};
const useAsyncDataSource = (name, service) => {
const { dispatch, setFieldState } = createFormActions();
const linkage = useLinkageUtils();
onFormInit$().subscribe(() => {
setFieldState(name, state => {
FormPath.setIn(state, 'props.x-props.hasFeedback', true)
})
linkage.loading(name)
service().then(res => {
linkage.loaded(name)
linkage.enum(name, res)
// 请求结束可以dispatch一个自定义事件收尾,方便后续针对该事件做联动
dispatch('requestAsyncDataSource', {
name,
payload: res
})
})
})
}
const controllerBtns = (
<Space>
<Button
......@@ -325,40 +242,11 @@ const MemberQuery: React.FC<{}> = () => {
}
/>
<Modal
title="新增会员角色"
<AddRoleDrawer
visible={modalVisible}
confirmLoading={confirmLoading}
onOk={() => modalFormActions.submit()}
onCancel={() => setModalVisible(false)}
destroyOnClose
>
<NiceForm
effects={($, { setFieldState }) => {
const linkage = useLinkageUtils();
onFieldValueChange$('agree').subscribe(fieldState => {
setFieldState('reason', state => {
state.visible = !fieldState.value;
});
});
useAsyncDataSource('memberTypeId', getMembertype);
onFieldInputChange$('memberTypeId').subscribe(fieldState => {
linkage.loading('roleId');
getRoleByMemberType(fieldState.value)
.then(res => {
linkage.enum('roleId', res);
})
.finally(() => {
linkage.loaded('roleId');
});
});
}}
actions={modalFormActions}
schema={addRoleSchema}
onSubmit={handleSubmit}
/>
</Modal>
onClose={() => setModalVisible(false)}
onSubmit={handleSubmit}
/>
</Card>
);
};
......
......@@ -82,46 +82,39 @@ export const maintianSchema: ISchema = {
},
};
const FIELD_TYPE_MAP = {
'string': 'string',
'long': 'string',
'upload': 'customUpload',
};
const getXComponentProps = (type, item) => {
const MAP = {
'string': {
placeholder: item.fieldRemark,
disabled: item.disabled,
},
'upload': {
listType: 'card',
action: '/api/file/file/upload',
data: { fileType: UPLOAD_TYPE },
fileList: [],
onChange: file => console.log(file),
disabled: item.disabled,
},
const getFieldType = (field) => {
if (field.fieldType === 'upload') {
return {
type: 'string',
required: field.fieldEmpty === 0,
title: field.fieldCNName,
default: field.fieldValue,
'x-component': 'CustomUpload',
'x-component-props': {
showDesc: false,
disabled: field.disabled,
},
};
}
return {
type: 'string',
required: field.fieldEmpty === 0,
title: field.fieldCNName,
default: field.fieldValue,
'x-component-props': {
placeholder: field.fieldRemark,
disabled: field.disabled,
},
};
return MAP[type];
};
const getCompnentValue = (elements: any) => {
const components = {};
for (let item of elements) {
// 先判断是否存在 type,防止不存在的 type 报错
const realType = FIELD_TYPE_MAP[item.fieldType];
if (realType) {
components[item.fieldName] = {
type: FIELD_TYPE_MAP[item.fieldType],
required: item.fieldEmpty === 0,
title: item.fieldCNName,
default: item.fieldValue,
'x-component-props': getXComponentProps(realType, item),
};
}
components[item.fieldName] = getFieldType(item);
}
console.log('components', components)
return components;
};
......@@ -170,49 +163,3 @@ export const initDetailSchema = (props: any) => {
const maintianDetailSchema: ISchema = detailSchema;
return maintianDetailSchema;
};
export const addRoleSchema: ISchema = {
type: 'object',
properties: {
tip: {
type: 'object',
'x-component': 'Children',
'x-component-props': {
children: '您需要增加的会员角色是:',
},
},
MEGA_LAYOUT: {
type: 'object',
'x-component': 'Mega-Layout',
'x-component-props': {
},
properties: {
memberTypeId: {
type: 'string',
title: '会员类型',
'x-component': "Radio",
'x-rules': [
{
required: true,
message: '请选择会员类型',
},
],
enum: [],
},
roleId: {
type: 'string',
title: '会员角色',
'x-component': "Radio",
'x-rules': [
{
required: true,
message: '请选择会员角色',
},
],
enum: [],
},
},
},
},
};
import React, { useState, useEffect, useRef, ReactNode } from 'react';
import React, { useState, useEffect, useRef } from 'react';
import { history, Prompt } from 'umi';
import { Badge, Button, Card, Spin, message } from 'antd';
import { Button, Card, Spin, message } from 'antd';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { SaveOutlined } from '@ant-design/icons';
import { createFormActions, FormEffectHooks, FormPath } from '@formily/antd';
import { usePageStatus } from '@/hooks/usePageStatus';
import ReutrnEle from '@/components/ReturnEle';
import NiceForm from '@/components/NiceForm';
import { useLinkageUtils } from '@/utils/formEffectUtils';
import { PublicApi } from '@/services/api';
import { GetMemberAbilitySubGetResponse } from '@/services/MemberApi';
import { initDetailSchema } from './schema';
const formActions = createFormActions();
const {
onFieldValueChange$,
onFieldInputChange$,
onFormInputChange$,
const {
onFormInputChange$,
} = FormEffectHooks;
const MemberUpdate: React.FC<any> = props => {
......
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