Commit 5702bedc authored by XieZhiXiong's avatar XieZhiXiong

对接完毕会员审核流程

parent 53b29f93
......@@ -17,7 +17,6 @@ const getPrevTime = (num, flag) => {
const DateSelect = (props) => {
const { value = [], mutators } = props
console.log('value', value)
const todayStartTime = moment().startOf('day').format('x')
const nowTime = moment().format('x').valueOf()
const dateMemo = useMemo(() => [
......
......@@ -242,6 +242,27 @@ const addMember: React.FC<any> = props => {
FormPath.setIn(state, 'props.enum', channelType);
});
// 如果会员信息存在渠道代理城市信息,设置一下每项的 市级数据
setTimeout(() => {
console.log('memberInfo1', memberInfo)
if (memberInfo && memberInfo.areas.length) {
memberInfo.areas.forEach((area, index) => {
const { pcode, ccode } = area;
const province = areas.find(item => item.code === pcode);
if (province && province.children) {
const city = province.children.find((item: any) => item.code === ccode);
formActions.setFieldState(
`areas.${index}.ccode`,
state => {
FormPath.setIn(state, 'props.enum', city);
}
);
}
});
}
}, 2000);
areasData = areas;
});
});
......@@ -292,6 +313,16 @@ const addMember: React.FC<any> = props => {
}
});
// 主动的渠道信息省级变化,重置市级 value
onFieldInputChange$('areas.*.pcode').subscribe(fieldState => {
formActions.setFieldState(
FormPath.transform(fieldState.name, /\d/, $1 => `areas.${$1}.ccode`),
state => {
FormPath.setIn(state, 'value', undefined);
}
);
});
// 渠道信息省级变化,筛选出对应的市级数据
onFieldValueChange$('areas.*.pcode').subscribe(fieldState => {
const province = areasData.find(item => item.code === fieldState.value);
......@@ -302,13 +333,14 @@ const addMember: React.FC<any> = props => {
formActions.setFieldState(
FormPath.transform(fieldState.name, /\d/, $1 => `areas.${$1}.ccode`),
state => {
FormPath.setIn(state, 'value', undefined);
FormPath.setIn(state, 'props.enum', city);
}
);
});
}
console.log('memberInfo2', memberInfo)
return (
<Spin spinning={infoLoading}>
<PageHeaderWrapper
......
......@@ -96,7 +96,7 @@ export const importSchema: ISchema = {
allowClear: true,
},
},
'[starTime, endTime]': {
'[startDate, endDate]': {
type: 'string',
default: '',
'x-component': 'dateSelect',
......
......@@ -90,23 +90,14 @@ export const maintianSchema: ISchema = {
allowClear: true,
},
},
timeRange: {
'[startDate, endDate]': {
type: 'string',
default: 0,
default: '',
'x-component': 'dateSelect',
'x-component-props': {
placeholder: '请选择',
placeholder: '时间范围(全部)',
allowClear: true,
},
enum: [
{ label: '时间范围(全部)', value: 0 },
{ label: '今天', value: 1 },
{ label: '一周内', value: 2 },
{ label: '一个月内', value: 3 },
{ label: '三个月内', value: 4 },
{ label: '六个月内', value: 5 },
{ label: '一年内', value: 6 },
{ label: '一年前', value: 7 },
],
},
submit: {
'x-component': 'Submit',
......
import React, { useState, useEffect } from 'react';
import { history } from 'umi';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { PageHeader, Tag, Descriptions, Button } from 'antd';
import { FormOutlined, StopOutlined } from '@ant-design/icons';
import { STATUS_COLOR_MAP, STATUS_COLOR_TXT } from '../constant';
import { usePageStatus } from '@/hooks/usePageStatus';
import {
PageHeader,
Tag,
Descriptions,
Button,
Badge,
Spin,
Modal,
} from 'antd';
import { FormOutlined } from '@ant-design/icons';
import { usePageStatus, PageStatus } from '@/hooks/usePageStatus';
import { PublicApi } from '@/services/api';
import MellowCard from '@/components/MellowCard';
import { GetMemberAbilityValidateStep1DetailResponse } from '@/services/MemberApi';
import { createFormActions, FormEffectHooks, FormPath } from '@formily/antd';
import NiceForm from '@/components/NiceForm';
import { MEMBER_INNER_STATUS_BADGE_COLOR, MEMBER_STATUS_TAG_MAP, MEMBER_OUTER_STATUS_TYPE } from '../constant';
import { auditModalSchema } from './schema';
import HeadInfo from '../components/HeadInfo';
import AuditProcess from '../components/AuditProcess';
import BasicInfo from '../components/BasicInfo';
import StatusTag from '../components/StatusTag';
import styles from './index.less';
const auditPr1: React.FC<{}> = () => {
const { pageStatus, id, validateId } = usePageStatus();
const [detailed, setDetailed] = useState<any>({});
interface AreaItem {
name: string;
code: string;
children: AreaItem[];
};
interface MemberInfo extends GetMemberAbilityValidateStep1DetailResponse {
channelTypeName?: string;
areasInfo?: string[];
};
useEffect(() => {
const modalFormActions = createFormActions();
const {
onFieldValueChange$,
onFieldInputChange$,
} = FormEffectHooks;
const AuditPr1: React.FC<{}> = () => {
const { id, validateId, pageStatus } = usePageStatus();
const [memberInfo, setMemberInfo] = useState<MemberInfo>(null);
const [modalVisible, setModalVisible] = useState(false);
const [infoLoading, setInfoLoading] = useState(false);
const [confirmLoading, setConfirmLoading] = useState(false);
const getAreasInfo = (
vals: { pcode: string, ccode: string }[] = [],
source: AreaItem[] = []
) => {
const ret = [];
vals.forEach(val => {
const { pcode, ccode } = val;
const province = source.find(item => item.code === pcode);
let str = province.name;
// 存在 市级
if (ccode && province && province.children) {
const city = province.children.find(item => item.code === ccode);
str += `/${city.name}`;
}
ret.push(str);
});
return ret;
};
const getDetailedInfo = () => {
if (id && validateId) {
setInfoLoading(true);
PublicApi.getMemberAbilityValidateStep1Detail({
memberId: id,
validateId,
}).then(res => {
if (res.code !== 1000) {
return;
}
setMemberInfo(res.data || null);
}).finally(() => {
setInfoLoading(false);
});
}
};
useEffect(() => {
getDetailedInfo();
}, []);
// 提交审核
const handleSubmit = values => {
setConfirmLoading(true);
// 调用渠道 Form 的 submit
const promises: any = [
PublicApi.postMemberAbilityValidateStep1Submit({
memberId: id,
validateId: validateId,
...values,
}),
];
Promise.all(promises).then(res => {
setConfirmLoading(false);
setModalVisible(false);
setTimeout(() => {
history.goBack();
}, 1000);
}).catch(err => {
setConfirmLoading(false);
});
};
return (
<PageHeaderWrapper
title={
<>
<PageHeader
style={{ padding: 0 }}
onBack={() => history.goBack()}
title={
<HeadInfo
info={{
name: '广州市极致皮具有限公司',
level: 1,
}}
/>
}
extra={(
<>
<Button
icon={<StopOutlined />}
onClick={() => {}}
>
审核不通过
</Button>
<Button
type="primary"
icon={<FormOutlined />}
onClick={() => {}}
>
提交审核
</Button>
</>
)}
>
<Descriptions
size="small"
column={3}
style={{
padding: '0 32px',
}}
<Spin spinning={infoLoading}>
<PageHeaderWrapper
title={
<>
<PageHeader
style={{ padding: 0 }}
onBack={() => history.goBack()}
title={
<HeadInfo
info={{
name: memberInfo?.name,
level: 1,
}}
/>
}
extra={(
<>
{pageStatus === PageStatus.EDIT && (
<Button
type="primary"
icon={<FormOutlined />}
onClick={() => setModalVisible(true)}
>
提交审核
</Button>
)}
</>
)}
>
<Descriptions.Item label="会员类型">{123}</Descriptions.Item>
<Descriptions.Item label="会员角色" span={2}>{123}</Descriptions.Item>
<Descriptions.Item label="会员状态">
<Tag color={STATUS_COLOR_MAP[1]}>{STATUS_COLOR_TXT[1]}</Tag>
</Descriptions.Item>
<Descriptions.Item label="外部状态">
<Tag color={STATUS_COLOR_MAP[2]}>{STATUS_COLOR_TXT[2]}</Tag>
</Descriptions.Item>
</Descriptions>
</PageHeader>
</>
}
>
<div
style={{
marginBottom: 24,
}}
<Descriptions
size="small"
column={3}
style={{
padding: '0 32px',
}}
>
<Descriptions.Item label="会员类型">{memberInfo?.memberTypeName}</Descriptions.Item>
<Descriptions.Item label="会员角色" span={2}>{memberInfo?.roleName}</Descriptions.Item>
<Descriptions.Item label="会员状态">
<StatusTag type={MEMBER_STATUS_TAG_MAP[memberInfo?.status]} title={memberInfo?.statusName} />
</Descriptions.Item>
<Descriptions.Item label="外部状态">
<StatusTag type={MEMBER_OUTER_STATUS_TYPE[memberInfo?.outerStatus]} title={memberInfo?.outerStatusName} />
</Descriptions.Item>
<Descriptions.Item label="内部状态">
<Badge color={MEMBER_INNER_STATUS_BADGE_COLOR[memberInfo?.innerStatus]} text={memberInfo?.innerStatusName} />
</Descriptions.Item>
</Descriptions>
</PageHeader>
</>
}
>
<AuditProcess />
</div>
<div
style={{
marginBottom: 24,
}}
>
<AuditProcess
outerVerifySteps={memberInfo?.outerVerifySteps}
innerVerifySteps={memberInfo?.innerVerifySteps}
/>
</div>
<BasicInfo
basic={{
account: memberInfo?.account,
phone: memberInfo?.phone,
email: memberInfo?.email,
created: memberInfo?.registerTime,
}}
channel={{
memberType: memberInfo?.memberTypeEnum,
level: memberInfo?.channelLevelTag,
type: memberInfo?.channelTypeName,
areas: memberInfo?.areas,
desc: memberInfo?.remark,
}}
extra={memberInfo?.groups}
outerHistory={memberInfo?.outerHistory}
innerHistory={memberInfo?.innerHistory}
/>
<BasicInfo />
</PageHeaderWrapper>
<Modal
title="提交审核"
visible={modalVisible}
confirmLoading={confirmLoading}
onOk={() => modalFormActions.submit()}
onCancel={() => setModalVisible(false)}
destroyOnClose
>
<NiceForm
effects={($, { setFieldState }) => {
onFieldValueChange$('agree').subscribe(fieldState => {
setFieldState('reason', state => {
state.visible = !fieldState.value;
});
});
}}
actions={modalFormActions}
schema={auditModalSchema}
onSubmit={handleSubmit}
/>
</Modal>
</PageHeaderWrapper>
</Spin>
);
};
export default auditPr1;
export default AuditPr1;
import React from 'react';
import AuditList from '../components/auditList';
import React, { useState, useEffect, useRef } from 'react';
import { history } from 'umi';
import { Card, Space, Button, Badge, Popconfirm } from 'antd';
import { ClockCircleOutlined } from '@ant-design/icons';
import { StandardTable } from 'god';
import { ColumnType } from 'antd/lib/table/interface';
import { createFormActions } from '@formily/antd';
import EyePreview from '@/components/EyePreview';
import NiceForm from '@/components/NiceForm';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { useAsyncInitSelect } from '@/formSchema/effects/useAsyncInitSelect';
import { PublicApi } from '@/services/api';
import { auditSchema } from './schema';
import {
MEMBER_STATUS_TAG_MAP,
MEMBER_INNER_STATUS_BADGE_COLOR,
MEMBER_OUTER_STATUS_TYPE,
} from '../constant';
import { coverColFiltersItem } from '../utils';
import StatusTag from '../components/StatusTag';
const memberPr = () => {
return <AuditList pageType="2" />;
const formActions = createFormActions();
const MemberPr1: React.FC<{}> = props => {
const ref = useRef<any>({});
const [searchItems, setSearchItems] = useState<any>({});
const [filteredInfo, setFilteredInfo] = useState<any>({});
const [selectedRowKeys, setSelectedRowKeys] = useState<Array<string>>([]);
const [selectedList, setSelectList] = useState<any>([]);
const handleJumpAudit = record => {
history.push(`/memberCenter/memberAbility/manage/auditPr1?id=${record.memberId}&validateId=${record.validateId}`);
};
const defaultColumns: ColumnType<any>[] = [
{
title: 'ID',
dataIndex: 'memberId',
align: 'center',
},
{
title: '会员名称',
dataIndex: 'name',
align: 'center',
render: (text: any, record: any) => (
<EyePreview
url={`/memberCenter/memberAbility/manage/auditPr1?id=${record.memberId}&validateId=${record.validateId}&preview=1`}
>
{text}
</EyePreview>
),
},
{
title: '会员类型',
dataIndex: 'memberTypeName',
align: 'center',
render: (text: any, record: any) => <span>{text}</span>,
},
{
title: '会员角色',
dataIndex: 'roleName',
align: 'center',
render: (text: any, record: any) => <span>{text}</span>,
},
{
title: '申请来源/时间',
dataIndex: 'sourceName',
align: 'center',
render: (text, record) => (
<>
<div>{text}</div>
<div>
<ClockCircleOutlined /> {record.registerTime}
</div>
</>
),
},
{
title: '会员状态',
dataIndex: 'statusName',
align: 'center',
filters: [],
onFilter: (value, record) => record.status === value,
render: (text, record) => (
<StatusTag type={MEMBER_STATUS_TAG_MAP[record.status]} title={text} />
),
},
{
title: '外部状态',
dataIndex: 'outerStatusName',
align: 'center',
filters: [],
onFilter: (value, record) => record.outerStatus === value,
render: (text, record) => (
<StatusTag type={MEMBER_OUTER_STATUS_TYPE[record.outerStatus]} title={text} />
),
},
{
title: '内部状态',
dataIndex: 'innerStatusName',
align: 'center',
filters: [],
onFilter: (value, record) => record.innerStatus === value,
render: (text, record) => <Badge color={MEMBER_INNER_STATUS_BADGE_COLOR[record.innerStatus]} text={text} />,
},
{
title: '操作',
dataIndex: 'option',
align: 'center',
render: (text: any, record: any) => (
<Button
type="link"
onClick={() => handleJumpAudit(record)}
>
审核
</Button>
),
},
];
const [columns, setColumns] = useState<any[]>(defaultColumns);
const rowSelection = {
onChange: (selectedRowKeys: any, selectedRows: any) => {
let result = selectedRows.map(v => ({
memberId: v.memberId,
validateId: v.validateId,
}));
setSelectedRowKeys(selectedRowKeys);
setSelectList(result);
},
selectedRowKeys: selectedRowKeys,
};
const fetchListData = async (params: any) => {
let res = await PublicApi.getMemberAbilityValidateStep1Page(params);
return res.data;
};
const handleBatch = () => {
console.log('批量')
};
// 初始化高级筛选选项
const fetchSearchItems = async () => {
const res = await PublicApi.getMemberAbilityValidateStep1Pageitems();
if (res.code === 1000) {
const { data = {} }: any = res;
const {
memberTypes = [],
status = [],
roles = [],
levels = [],
sources = [],
outerStatus = [],
innerStatus = [],
} = data;
const newColumns = columns.slice();
// filter 0 过滤掉全部选项
coverColFiltersItem(
newColumns,
'statusName',
status.map(item => ({ text: item.text, value: item.id })).filter(item => item.value !== 0),
);
coverColFiltersItem(
newColumns,
'outerStatusName',
outerStatus.map(item => ({ text: item.text, value: item.id })).filter(item => item.value !== 0),
);
coverColFiltersItem(
newColumns,
'innerStatusName',
innerStatus.map(item => ({ text: item.text, value: item.id })).filter(item => item.value !== 0),
);
setColumns(newColumns);
return {
memberTypeId: memberTypes.map(item => ({ label: item.memberTypeName, value: item.memberTypeId })),
status: status.map(item => ({ label: item.text, value: item.id })),
roleId: roles.map(item => ({ label: item.roleName, value: item.roleId })),
level: levels.map(item => ({ label: item.level, value: item.levelTag })),
source: sources.map(item => ({ label: item.text, value: item.id })),
};
}
return {};
};
const controllerBtns = (
<Space>
<Popconfirm
title="是否继续操作 ?"
placement="bottom"
onConfirm={handleBatch}
okText="是"
cancelText="否"
>
<Button>
批量提交审核
</Button>
</Popconfirm>
</Space>
);
return (
<Card>
<StandardTable
tableProps={{
rowKey: 'memberId',
}}
columns={columns}
currentRef={ref}
fetchTableData={(params: any) => fetchListData(params)}
rowSelection={rowSelection}
controlRender={
<NiceForm
actions={formActions}
onSubmit={values => ref.current.reload(values)}
expressionScope={{
controllerBtns,
}}
effects={($, actions) => {
useStateFilterSearchLinkageEffect(
$,
actions,
'name',
FORM_FILTER_PATH,
);
useAsyncInitSelect(
['memberTypeId', 'status', 'level', 'roleId', 'level', 'source'],
fetchSearchItems,
);
}}
schema={auditSchema}
/>
}
/>
</Card>
);
};
export default memberPr;
export default MemberPr1;
import { ISchema } from '@formily/antd';
import { FORM_FILTER_PATH } from '@/formSchema/const';
export const auditSchema: ISchema = {
type: 'object',
properties: {
MEGA_LAYOUT: {
type: 'object',
'x-component': 'mega-layout',
properties: {
topLayout: {
type: 'object',
'x-component': 'mega-layout',
'x-component-props': {
grid: true,
},
properties: {
ctl: {
type: 'object',
'x-component': 'Children',
'x-component-props': {
children: '{{controllerBtns}}',
},
},
name: {
type: 'string',
'x-component': 'Search',
'x-component-props': {
placeholder: '搜索',
},
},
},
},
[FORM_FILTER_PATH]: {
type: 'object',
'x-component': 'flex-layout',
'x-component-props': {
colStyle: {
marginLeft: 20,
},
},
properties: {
memberTypeId: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '会员类型(全部)',
allowClear: true,
},
},
status: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '会员状态(全部)',
allowClear: true,
},
},
roleId: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '会员角色(全部)',
allowClear: true,
},
},
level: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '会员等级(全部)',
allowClear: true,
},
},
source: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '申请来源(全部)',
allowClear: true,
},
},
'[startDate, endDate]': {
type: 'string',
default: '',
'x-component': 'dateSelect',
'x-component-props': {
placeholder: '时间范围(全部)',
allowClear: true,
},
},
submit: {
'x-component': 'Submit',
'x-mega-props': {
span: 1,
},
'x-component-props': {
children: '查询',
},
},
},
},
},
},
},
};
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': {},
},
reason: {
type: 'string',
title: '审核不通过原因',
'x-component': 'textarea',
'x-component-props': {
placeholder: '在此输入你的内容,最长120个字符,60个汉字',
maxLength: 60,
rows: 5,
},
'x-rules': [
// {
// required: true,
// message: '请填写审核不通过原因',
// }
],
},
},
},
},
};
import React, { useState, useEffect } from 'react';
import { history } from 'umi';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { PageHeader, Tag, Descriptions, Button } from 'antd';
import { FormOutlined, StopOutlined } from '@ant-design/icons';
import { STATUS_COLOR_MAP, STATUS_COLOR_TXT } from '../constant';
import { usePageStatus } from '@/hooks/usePageStatus';
import {
PageHeader,
Tag,
Descriptions,
Button,
Badge,
Spin,
Modal,
} from 'antd';
import { FormOutlined } from '@ant-design/icons';
import { usePageStatus, PageStatus } from '@/hooks/usePageStatus';
import { PublicApi } from '@/services/api';
import MellowCard from '@/components/MellowCard';
import { GetMemberAbilityValidateStep1DetailResponse } from '@/services/MemberApi';
import { createFormActions, FormEffectHooks, FormPath } from '@formily/antd';
import NiceForm from '@/components/NiceForm';
import { MEMBER_INNER_STATUS_BADGE_COLOR, MEMBER_STATUS_TAG_MAP, MEMBER_OUTER_STATUS_TYPE } from '../constant';
import { auditModalSchema } from './schema';
import HeadInfo from '../components/HeadInfo';
import AuditProcess from '../components/AuditProcess';
import BasicInfo from '../components/BasicInfo';
import StatusTag from '../components/StatusTag';
import styles from './index.less';
const auditPr2: React.FC<{}> = () => {
const { pageStatus, id, validateId } = usePageStatus();
const [detailed, setDetailed] = useState<any>({});
interface AreaItem {
name: string;
code: string;
children: AreaItem[];
};
interface MemberInfo extends GetMemberAbilityValidateStep1DetailResponse {
channelTypeName?: string;
areasInfo?: string[];
};
useEffect(() => {
const modalFormActions = createFormActions();
const {
onFieldValueChange$,
onFieldInputChange$,
} = FormEffectHooks;
const AuditPr2: React.FC<{}> = () => {
const { id, validateId, pageStatus } = usePageStatus();
const [memberInfo, setMemberInfo] = useState<MemberInfo>(null);
const [modalVisible, setModalVisible] = useState(false);
const [infoLoading, setInfoLoading] = useState(false);
const [confirmLoading, setConfirmLoading] = useState(false);
const getAreasInfo = (
vals: { pcode: string, ccode: string }[] = [],
source: AreaItem[] = []
) => {
const ret = [];
vals.forEach(val => {
const { pcode, ccode } = val;
const province = source.find(item => item.code === pcode);
let str = province.name;
// 存在 市级
if (ccode && province && province.children) {
const city = province.children.find(item => item.code === ccode);
str += `/${city.name}`;
}
ret.push(str);
});
return ret;
};
const getDetailedInfo = () => {
if (id && validateId) {
setInfoLoading(true);
PublicApi.getMemberAbilityValidateStep2Detail({
memberId: id,
validateId,
}).then(res => {
if (res.code !== 1000) {
return;
}
setMemberInfo(res.data || null);
}).finally(() => {
setInfoLoading(false);
});
}
};
useEffect(() => {
getDetailedInfo();
}, []);
// 提交审核
const handleSubmit = values => {
setConfirmLoading(true);
// 调用渠道 Form 的 submit
const promises: any = [
PublicApi.postMemberAbilityValidateStep2Submit({
memberId: id,
validateId: validateId,
...values,
}),
];
Promise.all(promises).then(res => {
setConfirmLoading(false);
setModalVisible(false);
setTimeout(() => {
history.goBack();
}, 1000);
}).catch(err => {
setConfirmLoading(false);
});
};
return (
<PageHeaderWrapper
title={
<>
<PageHeader
style={{ padding: 0 }}
onBack={() => history.goBack()}
title={
<HeadInfo
info={{
name: '广州市极致皮具有限公司',
level: 1,
}}
/>
}
extra={(
<>
<Button
icon={<StopOutlined />}
onClick={() => {}}
>
审核不通过
</Button>
<Button
type="primary"
icon={<FormOutlined />}
onClick={() => {}}
>
提交审核
</Button>
</>
)}
>
<Descriptions
size="small"
column={3}
style={{
padding: '0 32px',
}}
<Spin spinning={infoLoading}>
<PageHeaderWrapper
title={
<>
<PageHeader
style={{ padding: 0 }}
onBack={() => history.goBack()}
title={
<HeadInfo
info={{
name: memberInfo?.name,
level: 1,
}}
/>
}
extra={(
<>
{pageStatus === PageStatus.EDIT && (
<Button
type="primary"
icon={<FormOutlined />}
onClick={() => setModalVisible(true)}
>
提交审核
</Button>
)}
</>
)}
>
<Descriptions.Item label="会员类型">{123}</Descriptions.Item>
<Descriptions.Item label="会员角色" span={2}>{123}</Descriptions.Item>
<Descriptions.Item label="会员状态">
<Tag color={STATUS_COLOR_MAP[1]}>{STATUS_COLOR_TXT[1]}</Tag>
</Descriptions.Item>
<Descriptions.Item label="外部状态">
<Tag color={STATUS_COLOR_MAP[2]}>{STATUS_COLOR_TXT[2]}</Tag>
</Descriptions.Item>
</Descriptions>
</PageHeader>
</>
}
>
<div
style={{
marginBottom: 24,
}}
<Descriptions
size="small"
column={3}
style={{
padding: '0 32px',
}}
>
<Descriptions.Item label="会员类型">{memberInfo?.memberTypeName}</Descriptions.Item>
<Descriptions.Item label="会员角色" span={2}>{memberInfo?.roleName}</Descriptions.Item>
<Descriptions.Item label="会员状态">
<StatusTag type={MEMBER_STATUS_TAG_MAP[memberInfo?.status]} title={memberInfo?.statusName} />
</Descriptions.Item>
<Descriptions.Item label="外部状态">
<StatusTag type={MEMBER_OUTER_STATUS_TYPE[memberInfo?.outerStatus]} title={memberInfo?.outerStatusName} />
</Descriptions.Item>
<Descriptions.Item label="内部状态">
<Badge color={MEMBER_INNER_STATUS_BADGE_COLOR[memberInfo?.innerStatus]} text={memberInfo?.innerStatusName} />
</Descriptions.Item>
</Descriptions>
</PageHeader>
</>
}
>
<AuditProcess />
</div>
<div
style={{
marginBottom: 24,
}}
>
<AuditProcess
outerVerifySteps={memberInfo?.outerVerifySteps}
innerVerifySteps={memberInfo?.innerVerifySteps}
/>
</div>
<BasicInfo
basic={{
account: memberInfo?.account,
phone: memberInfo?.phone,
email: memberInfo?.email,
created: memberInfo?.registerTime,
}}
channel={{
memberType: memberInfo?.memberTypeEnum,
level: memberInfo?.channelLevelTag,
type: memberInfo?.channelTypeName,
areas: memberInfo?.areas,
desc: memberInfo?.remark,
}}
extra={memberInfo?.groups}
outerHistory={memberInfo?.outerHistory}
innerHistory={memberInfo?.innerHistory}
/>
<BasicInfo />
</PageHeaderWrapper>
<Modal
title="提交审核"
visible={modalVisible}
confirmLoading={confirmLoading}
onOk={() => modalFormActions.submit()}
onCancel={() => setModalVisible(false)}
destroyOnClose
>
<NiceForm
effects={($, { setFieldState }) => {
onFieldValueChange$('agree').subscribe(fieldState => {
setFieldState('reason', state => {
state.visible = !fieldState.value;
});
});
}}
actions={modalFormActions}
schema={auditModalSchema}
onSubmit={handleSubmit}
/>
</Modal>
</PageHeaderWrapper>
</Spin>
);
};
export default auditPr2;
export default AuditPr2;
import React from 'react';
import AuditList from '../components/auditList';
import React, { useState, useEffect, useRef } from 'react';
import { history } from 'umi';
import { Card, Space, Button, Badge, Popconfirm } from 'antd';
import { ClockCircleOutlined } from '@ant-design/icons';
import { StandardTable } from 'god';
import { ColumnType } from 'antd/lib/table/interface';
import { createFormActions } from '@formily/antd';
import EyePreview from '@/components/EyePreview';
import NiceForm from '@/components/NiceForm';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { useAsyncInitSelect } from '@/formSchema/effects/useAsyncInitSelect';
import { PublicApi } from '@/services/api';
import { auditSchema } from './schema';
import {
MEMBER_STATUS_TAG_MAP,
MEMBER_INNER_STATUS_BADGE_COLOR,
MEMBER_OUTER_STATUS_TYPE,
} from '../constant';
import { coverColFiltersItem } from '../utils';
import StatusTag from '../components/StatusTag';
const memberPr = () => {
return <AuditList pageType="3" />;
const formActions = createFormActions();
const MemberPr2: React.FC<{}> = props => {
const ref = useRef<any>({});
const [searchItems, setSearchItems] = useState<any>({});
const [filteredInfo, setFilteredInfo] = useState<any>({});
const [selectedRowKeys, setSelectedRowKeys] = useState<Array<string>>([]);
const [selectedList, setSelectList] = useState<any>([]);
const handleJumpAudit = record => {
history.push(`/memberCenter/memberAbility/manage/auditPr2?id=${record.memberId}&validateId=${record.validateId}`);
};
const defaultColumns: ColumnType<any>[] = [
{
title: 'ID',
dataIndex: 'memberId',
align: 'center',
},
{
title: '会员名称',
dataIndex: 'name',
align: 'center',
render: (text: any, record: any) => (
<EyePreview
url={`/memberCenter/memberAbility/manage/auditPr2?id=${record.memberId}&validateId=${record.validateId}&preview=1`}
>
{text}
</EyePreview>
),
},
{
title: '会员类型',
dataIndex: 'memberTypeName',
align: 'center',
render: (text: any, record: any) => <span>{text}</span>,
},
{
title: '会员角色',
dataIndex: 'roleName',
align: 'center',
render: (text: any, record: any) => <span>{text}</span>,
},
{
title: '申请来源/时间',
dataIndex: 'sourceName',
align: 'center',
render: (text, record) => (
<>
<div>{text}</div>
<div>
<ClockCircleOutlined /> {record.registerTime}
</div>
</>
),
},
{
title: '会员状态',
dataIndex: 'statusName',
align: 'center',
filters: [],
onFilter: (value, record) => record.status === value,
render: (text, record) => (
<StatusTag type={MEMBER_STATUS_TAG_MAP[record.status]} title={text} />
),
},
{
title: '外部状态',
dataIndex: 'outerStatusName',
align: 'center',
filters: [],
onFilter: (value, record) => record.outerStatus === value,
render: (text, record) => (
<StatusTag type={MEMBER_OUTER_STATUS_TYPE[record.outerStatus]} title={text} />
),
},
{
title: '内部状态',
dataIndex: 'innerStatusName',
align: 'center',
filters: [],
onFilter: (value, record) => record.innerStatus === value,
render: (text, record) => <Badge color={MEMBER_INNER_STATUS_BADGE_COLOR[record.innerStatus]} text={text} />,
},
{
title: '操作',
dataIndex: 'option',
align: 'center',
render: (text: any, record: any) => (
<Button
type="link"
onClick={() => handleJumpAudit(record)}
>
审核
</Button>
),
},
];
const [columns, setColumns] = useState<any[]>(defaultColumns);
const rowSelection = {
onChange: (selectedRowKeys: any, selectedRows: any) => {
let result = selectedRows.map(v => ({
memberId: v.memberId,
validateId: v.validateId,
}));
setSelectedRowKeys(selectedRowKeys);
setSelectList(result);
},
selectedRowKeys: selectedRowKeys,
};
const fetchListData = async (params: any) => {
let res = await PublicApi.getMemberAbilityValidateStep2Page(params);
return res.data;
};
const handleBatch = () => {
console.log('批量')
};
// 初始化高级筛选选项
const fetchSearchItems = async () => {
const res = await PublicApi.getMemberAbilityValidateStep2Pageitems();
if (res.code === 1000) {
const { data = {} }: any = res;
const {
memberTypes = [],
status = [],
roles = [],
levels = [],
sources = [],
outerStatus = [],
innerStatus = [],
} = data;
const newColumns = columns.slice();
// filter 0 过滤掉全部选项
coverColFiltersItem(
newColumns,
'statusName',
status.map(item => ({ text: item.text, value: item.id })).filter(item => item.value !== 0),
);
coverColFiltersItem(
newColumns,
'outerStatusName',
outerStatus.map(item => ({ text: item.text, value: item.id })).filter(item => item.value !== 0),
);
coverColFiltersItem(
newColumns,
'innerStatusName',
innerStatus.map(item => ({ text: item.text, value: item.id })).filter(item => item.value !== 0),
);
setColumns(newColumns);
return {
memberTypeId: memberTypes.map(item => ({ label: item.memberTypeName, value: item.memberTypeId })),
status: status.map(item => ({ label: item.text, value: item.id })),
roleId: roles.map(item => ({ label: item.roleName, value: item.roleId })),
level: levels.map(item => ({ label: item.level, value: item.levelTag })),
source: sources.map(item => ({ label: item.text, value: item.id })),
};
}
return {};
};
const controllerBtns = (
<Space>
<Popconfirm
title="是否继续操作 ?"
placement="bottom"
onConfirm={handleBatch}
okText="是"
cancelText="否"
>
<Button>
批量提交审核
</Button>
</Popconfirm>
</Space>
);
return (
<Card>
<StandardTable
tableProps={{
rowKey: 'memberId',
}}
columns={columns}
currentRef={ref}
fetchTableData={(params: any) => fetchListData(params)}
rowSelection={rowSelection}
controlRender={
<NiceForm
actions={formActions}
onSubmit={values => ref.current.reload(values)}
expressionScope={{
controllerBtns,
}}
effects={($, actions) => {
useStateFilterSearchLinkageEffect(
$,
actions,
'name',
FORM_FILTER_PATH,
);
useAsyncInitSelect(
['memberTypeId', 'status', 'level', 'roleId', 'level', 'source'],
fetchSearchItems,
);
}}
schema={auditSchema}
/>
}
/>
</Card>
);
};
export default memberPr;
export default MemberPr2;
import { ISchema } from '@formily/antd';
import { FORM_FILTER_PATH } from '@/formSchema/const';
export const auditSchema: ISchema = {
type: 'object',
properties: {
MEGA_LAYOUT: {
type: 'object',
'x-component': 'mega-layout',
properties: {
topLayout: {
type: 'object',
'x-component': 'mega-layout',
'x-component-props': {
grid: true,
},
properties: {
ctl: {
type: 'object',
'x-component': 'Children',
'x-component-props': {
children: '{{controllerBtns}}',
},
},
name: {
type: 'string',
'x-component': 'Search',
'x-component-props': {
placeholder: '搜索',
},
},
},
},
[FORM_FILTER_PATH]: {
type: 'object',
'x-component': 'flex-layout',
'x-component-props': {
colStyle: {
marginLeft: 20,
},
},
properties: {
memberTypeId: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '会员类型(全部)',
allowClear: true,
},
},
status: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '会员状态(全部)',
allowClear: true,
},
},
roleId: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '会员角色(全部)',
allowClear: true,
},
},
level: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '会员等级(全部)',
allowClear: true,
},
},
source: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '申请来源(全部)',
allowClear: true,
},
},
'[startDate, endDate]': {
type: 'string',
default: '',
'x-component': 'dateSelect',
'x-component-props': {
placeholder: '时间范围(全部)',
allowClear: true,
},
},
submit: {
'x-component': 'Submit',
'x-mega-props': {
span: 1,
},
'x-component-props': {
children: '查询',
},
},
},
},
},
},
},
};
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': {},
},
reason: {
type: 'string',
title: '审核不通过原因',
'x-component': 'textarea',
'x-component-props': {
placeholder: '在此输入你的内容,最长120个字符,60个汉字',
maxLength: 60,
rows: 5,
},
'x-rules': [
// {
// required: true,
// message: '请填写审核不通过原因',
// }
],
},
},
},
},
};
import React, { useState, useEffect } from 'react';
import { history } from 'umi';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { PageHeader, Tag, Descriptions, Button } from 'antd';
import { FormOutlined, StopOutlined } from '@ant-design/icons';
import { STATUS_COLOR_MAP, STATUS_COLOR_TXT } from '../constant';
import { usePageStatus } from '@/hooks/usePageStatus';
import {
PageHeader,
Tag,
Descriptions,
Button,
Badge,
Spin,
Modal,
} from 'antd';
import { FormOutlined } from '@ant-design/icons';
import { usePageStatus, PageStatus } from '@/hooks/usePageStatus';
import { PublicApi } from '@/services/api';
import MellowCard from '@/components/MellowCard';
import { GetMemberAbilityValidateStep1DetailResponse } from '@/services/MemberApi';
import { createFormActions, FormEffectHooks, FormPath } from '@formily/antd';
import NiceForm from '@/components/NiceForm';
import { MEMBER_INNER_STATUS_BADGE_COLOR, MEMBER_STATUS_TAG_MAP, MEMBER_OUTER_STATUS_TYPE } from '../constant';
import { auditModalSchema } from './schema';
import HeadInfo from '../components/HeadInfo';
import AuditProcess from '../components/AuditProcess';
import BasicInfo from '../components/BasicInfo';
import StatusTag from '../components/StatusTag';
import styles from './index.less';
const auditPrComfirm: React.FC<{}> = () => {
const { pageStatus, id, validateId } = usePageStatus();
const [detailed, setDetailed] = useState<any>({});
interface AreaItem {
name: string;
code: string;
children: AreaItem[];
};
interface MemberInfo extends GetMemberAbilityValidateStep1DetailResponse {
channelTypeName?: string;
areasInfo?: string[];
};
useEffect(() => {
const modalFormActions = createFormActions();
const {
onFieldValueChange$,
onFieldInputChange$,
} = FormEffectHooks;
const AuditPrComfirm: React.FC<{}> = () => {
const { id, validateId, pageStatus } = usePageStatus();
const [memberInfo, setMemberInfo] = useState<MemberInfo>(null);
const [modalVisible, setModalVisible] = useState(false);
const [infoLoading, setInfoLoading] = useState(false);
const [confirmLoading, setConfirmLoading] = useState(false);
const getAreasInfo = (
vals: { pcode: string, ccode: string }[] = [],
source: AreaItem[] = []
) => {
const ret = [];
vals.forEach(val => {
const { pcode, ccode } = val;
const province = source.find(item => item.code === pcode);
let str = province.name;
// 存在 市级
if (ccode && province && province.children) {
const city = province.children.find(item => item.code === ccode);
str += `/${city.name}`;
}
ret.push(str);
});
return ret;
};
const getDetailedInfo = () => {
if (id && validateId) {
setInfoLoading(true);
PublicApi.getMemberAbilityValidateConfirmDetail({
memberId: id,
validateId,
}).then(res => {
if (res.code !== 1000) {
return;
}
setMemberInfo(res.data || null);
}).finally(() => {
setInfoLoading(false);
});
}
};
useEffect(() => {
getDetailedInfo();
}, []);
// 提交审核
const handleSubmit = values => {
setConfirmLoading(true);
// 调用渠道 Form 的 submit
const promises: any = [
PublicApi.postMemberAbilityValidateConfirmSubmit({
memberId: id,
validateId: validateId,
...values,
}),
];
Promise.all(promises).then(res => {
setConfirmLoading(false);
setModalVisible(false);
setTimeout(() => {
history.goBack();
}, 1000);
}).catch(err => {
setConfirmLoading(false);
});
};
return (
<PageHeaderWrapper
title={
<>
<PageHeader
style={{ padding: '0' }}
onBack={() => history.goBack()}
title={
<HeadInfo
info={{
name: '广州市极致皮具有限公司',
level: 1,
}}
/>
}
extra={(
<>
<Button
icon={<StopOutlined />}
onClick={() => {}}
>
审核不通过
</Button>
<Button
type="primary"
icon={<FormOutlined />}
onClick={() => {}}
>
审核通过
</Button>
</>
)}
>
<Descriptions
size="small"
column={3}
style={{
padding: '0 32px',
}}
<Spin spinning={infoLoading}>
<PageHeaderWrapper
title={
<>
<PageHeader
style={{ padding: 0 }}
onBack={() => history.goBack()}
title={
<HeadInfo
info={{
name: memberInfo?.name,
level: 1,
}}
/>
}
extra={(
<>
{pageStatus === PageStatus.EDIT && (
<Button
type="primary"
icon={<FormOutlined />}
onClick={() => setModalVisible(true)}
>
提交审核
</Button>
)}
</>
)}
>
<Descriptions.Item label="会员类型">{123}</Descriptions.Item>
<Descriptions.Item label="会员角色" span={2}>{123}</Descriptions.Item>
<Descriptions.Item label="会员状态">
<Tag color={STATUS_COLOR_MAP[1]}>{STATUS_COLOR_TXT[1]}</Tag>
</Descriptions.Item>
<Descriptions.Item label="外部状态">
<Tag color={STATUS_COLOR_MAP[2]}>{STATUS_COLOR_TXT[2]}</Tag>
</Descriptions.Item>
</Descriptions>
</PageHeader>
</>
}
>
<div
style={{
marginBottom: 24,
}}
<Descriptions
size="small"
column={3}
style={{
padding: '0 32px',
}}
>
<Descriptions.Item label="会员类型">{memberInfo?.memberTypeName}</Descriptions.Item>
<Descriptions.Item label="会员角色" span={2}>{memberInfo?.roleName}</Descriptions.Item>
<Descriptions.Item label="会员状态">
<StatusTag type={MEMBER_STATUS_TAG_MAP[memberInfo?.status]} title={memberInfo?.statusName} />
</Descriptions.Item>
<Descriptions.Item label="外部状态">
<StatusTag type={MEMBER_OUTER_STATUS_TYPE[memberInfo?.outerStatus]} title={memberInfo?.outerStatusName} />
</Descriptions.Item>
<Descriptions.Item label="内部状态">
<Badge color={MEMBER_INNER_STATUS_BADGE_COLOR[memberInfo?.innerStatus]} text={memberInfo?.innerStatusName} />
</Descriptions.Item>
</Descriptions>
</PageHeader>
</>
}
>
<AuditProcess />
</div>
<div
style={{
marginBottom: 24,
}}
>
<AuditProcess
outerVerifySteps={memberInfo?.outerVerifySteps}
innerVerifySteps={memberInfo?.innerVerifySteps}
/>
</div>
<BasicInfo
basic={{
account: memberInfo?.account,
phone: memberInfo?.phone,
email: memberInfo?.email,
created: memberInfo?.registerTime,
}}
channel={{
memberType: memberInfo?.memberTypeEnum,
level: memberInfo?.channelLevelTag,
type: memberInfo?.channelTypeName,
areas: memberInfo?.areas,
desc: memberInfo?.remark,
}}
extra={memberInfo?.groups}
outerHistory={memberInfo?.outerHistory}
innerHistory={memberInfo?.innerHistory}
/>
<BasicInfo />
</PageHeaderWrapper>
<Modal
title="提交审核"
visible={modalVisible}
confirmLoading={confirmLoading}
onOk={() => modalFormActions.submit()}
onCancel={() => setModalVisible(false)}
destroyOnClose
>
<NiceForm
effects={($, { setFieldState }) => {
onFieldValueChange$('agree').subscribe(fieldState => {
setFieldState('reason', state => {
state.visible = !fieldState.value;
});
});
}}
actions={modalFormActions}
schema={auditModalSchema}
onSubmit={handleSubmit}
/>
</Modal>
</PageHeaderWrapper>
</Spin>
);
};
export default auditPrComfirm;
export default AuditPrComfirm;
import React from 'react';
import AuditList from '../components/auditList';
import React, { useState, useEffect, useRef } from 'react';
import { history } from 'umi';
import { Card, Space, Button, Badge, Popconfirm } from 'antd';
import { ClockCircleOutlined } from '@ant-design/icons';
import { StandardTable } from 'god';
import { ColumnType } from 'antd/lib/table/interface';
import { createFormActions } from '@formily/antd';
import EyePreview from '@/components/EyePreview';
import NiceForm from '@/components/NiceForm';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { useAsyncInitSelect } from '@/formSchema/effects/useAsyncInitSelect';
import { PublicApi } from '@/services/api';
import { auditSchema } from './schema';
import {
MEMBER_STATUS_TAG_MAP,
MEMBER_INNER_STATUS_BADGE_COLOR,
MEMBER_OUTER_STATUS_TYPE,
} from '../constant';
import { coverColFiltersItem } from '../utils';
import StatusTag from '../components/StatusTag';
const memberPrConfirm = () => {
return <AuditList pageType="4" />;
const formActions = createFormActions();
const MemberPrConfirm: React.FC<{}> = props => {
const ref = useRef<any>({});
const [searchItems, setSearchItems] = useState<any>({});
const [filteredInfo, setFilteredInfo] = useState<any>({});
const [selectedRowKeys, setSelectedRowKeys] = useState<Array<string>>([]);
const [selectedList, setSelectList] = useState<any>([]);
const handleJumpAudit = record => {
history.push(`/memberCenter/memberAbility/manage/auditPrComfirm?id=${record.memberId}&validateId=${record.validateId}`);
};
const defaultColumns: ColumnType<any>[] = [
{
title: 'ID',
dataIndex: 'memberId',
align: 'center',
},
{
title: '会员名称',
dataIndex: 'name',
align: 'center',
render: (text: any, record: any) => (
<EyePreview
url={`/memberCenter/memberAbility/manage/auditPrComfirm?id=${record.memberId}&validateId=${record.validateId}&preview=1`}
>
{text}
</EyePreview>
),
},
{
title: '会员类型',
dataIndex: 'memberTypeName',
align: 'center',
render: (text: any, record: any) => <span>{text}</span>,
},
{
title: '会员角色',
dataIndex: 'roleName',
align: 'center',
render: (text: any, record: any) => <span>{text}</span>,
},
{
title: '申请来源/时间',
dataIndex: 'sourceName',
align: 'center',
render: (text, record) => (
<>
<div>{text}</div>
<div>
<ClockCircleOutlined /> {record.registerTime}
</div>
</>
),
},
{
title: '会员状态',
dataIndex: 'statusName',
align: 'center',
filters: [],
onFilter: (value, record) => record.status === value,
render: (text, record) => (
<StatusTag type={MEMBER_STATUS_TAG_MAP[record.status]} title={text} />
),
},
{
title: '外部状态',
dataIndex: 'outerStatusName',
align: 'center',
filters: [],
onFilter: (value, record) => record.outerStatus === value,
render: (text, record) => (
<StatusTag type={MEMBER_OUTER_STATUS_TYPE[record.outerStatus]} title={text} />
),
},
{
title: '内部状态',
dataIndex: 'innerStatusName',
align: 'center',
filters: [],
onFilter: (value, record) => record.innerStatus === value,
render: (text, record) => <Badge color={MEMBER_INNER_STATUS_BADGE_COLOR[record.innerStatus]} text={text} />,
},
{
title: '操作',
dataIndex: 'option',
align: 'center',
render: (text: any, record: any) => (
<Button
type="link"
onClick={() => handleJumpAudit(record)}
>
确认审核结果
</Button>
),
},
];
const [columns, setColumns] = useState<any[]>(defaultColumns);
const rowSelection = {
onChange: (selectedRowKeys: any, selectedRows: any) => {
let result = selectedRows.map(v => ({
memberId: v.memberId,
validateId: v.validateId,
}));
setSelectedRowKeys(selectedRowKeys);
setSelectList(result);
},
selectedRowKeys: selectedRowKeys,
};
const fetchListData = async (params: any) => {
let res = await PublicApi.getMemberAbilityValidateConfirmPage(params);
return res.data;
};
const handleBatch = () => {
console.log('批量')
};
// 初始化高级筛选选项
const fetchSearchItems = async () => {
const res = await PublicApi.getMemberAbilityValidateConfirmPageitems();
if (res.code === 1000) {
const { data = {} }: any = res;
const {
memberTypes = [],
status = [],
roles = [],
levels = [],
sources = [],
outerStatus = [],
innerStatus = [],
} = data;
const newColumns = columns.slice();
// filter 0 过滤掉全部选项
coverColFiltersItem(
newColumns,
'statusName',
status.map(item => ({ text: item.text, value: item.id })).filter(item => item.value !== 0),
);
coverColFiltersItem(
newColumns,
'outerStatusName',
outerStatus.map(item => ({ text: item.text, value: item.id })).filter(item => item.value !== 0),
);
coverColFiltersItem(
newColumns,
'innerStatusName',
innerStatus.map(item => ({ text: item.text, value: item.id })).filter(item => item.value !== 0),
);
setColumns(newColumns);
return {
memberTypeId: memberTypes.map(item => ({ label: item.memberTypeName, value: item.memberTypeId })),
status: status.map(item => ({ label: item.text, value: item.id })),
roleId: roles.map(item => ({ label: item.roleName, value: item.roleId })),
level: levels.map(item => ({ label: item.level, value: item.levelTag })),
source: sources.map(item => ({ label: item.text, value: item.id })),
};
}
return {};
};
const controllerBtns = (
<Space>
<Popconfirm
title="是否继续操作 ?"
placement="bottom"
onConfirm={handleBatch}
okText="是"
cancelText="否"
>
<Button>
批量提交审核
</Button>
</Popconfirm>
</Space>
);
return (
<Card>
<StandardTable
tableProps={{
rowKey: 'memberId',
}}
columns={columns}
currentRef={ref}
fetchTableData={(params: any) => fetchListData(params)}
rowSelection={rowSelection}
controlRender={
<NiceForm
actions={formActions}
onSubmit={values => ref.current.reload(values)}
expressionScope={{
controllerBtns,
}}
effects={($, actions) => {
useStateFilterSearchLinkageEffect(
$,
actions,
'name',
FORM_FILTER_PATH,
);
useAsyncInitSelect(
['memberTypeId', 'status', 'level', 'roleId', 'level', 'source'],
fetchSearchItems,
);
}}
schema={auditSchema}
/>
}
/>
</Card>
);
};
export default memberPrConfirm;
export default MemberPrConfirm;
import { ISchema } from '@formily/antd';
import { FORM_FILTER_PATH } from '@/formSchema/const';
export const auditSchema: ISchema = {
type: 'object',
properties: {
MEGA_LAYOUT: {
type: 'object',
'x-component': 'mega-layout',
properties: {
topLayout: {
type: 'object',
'x-component': 'mega-layout',
'x-component-props': {
grid: true,
},
properties: {
ctl: {
type: 'object',
'x-component': 'Children',
'x-component-props': {
children: '{{controllerBtns}}',
},
},
name: {
type: 'string',
'x-component': 'Search',
'x-component-props': {
placeholder: '搜索',
},
},
},
},
[FORM_FILTER_PATH]: {
type: 'object',
'x-component': 'flex-layout',
'x-component-props': {
colStyle: {
marginLeft: 20,
},
},
properties: {
memberTypeId: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '会员类型(全部)',
allowClear: true,
},
},
status: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '会员状态(全部)',
allowClear: true,
},
},
roleId: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '会员角色(全部)',
allowClear: true,
},
},
level: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '会员等级(全部)',
allowClear: true,
},
},
source: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '申请来源(全部)',
allowClear: true,
},
},
'[startDate, endDate]': {
type: 'string',
default: '',
'x-component': 'dateSelect',
'x-component-props': {
placeholder: '时间范围(全部)',
allowClear: true,
},
},
submit: {
'x-component': 'Submit',
'x-mega-props': {
span: 1,
},
'x-component-props': {
children: '查询',
},
},
},
},
},
},
},
};
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': {},
},
reason: {
type: 'string',
title: '审核不通过原因',
'x-component': 'textarea',
'x-component-props': {
placeholder: '在此输入你的内容,最长120个字符,60个汉字',
maxLength: 60,
rows: 5,
},
'x-rules': [
// {
// required: true,
// message: '请填写审核不通过原因',
// }
],
},
},
},
},
};
......@@ -11,7 +11,7 @@ import {
Modal,
} from 'antd';
import { FormOutlined } from '@ant-design/icons';
import { usePageStatus } from '@/hooks/usePageStatus';
import { usePageStatus, PageStatus } from '@/hooks/usePageStatus';
import { PublicApi } from '@/services/api';
import { GetMemberAbilityValidateCommitDetailResponse } from '@/services/MemberApi';
import { createAsyncFormActions, createFormActions, FormEffectHooks, FormPath } from '@formily/antd';
......@@ -41,8 +41,8 @@ const {
onFieldInputChange$,
} = FormEffectHooks;
const auditPrSubmit: React.FC<{}> = () => {
const { id, validateId, preview } = usePageStatus();
const AuditPrSubmit: React.FC<{}> = () => {
const { id, validateId, pageStatus } = usePageStatus();
const [memberInfo, setMemberInfo] = useState<MemberInfo>(null);
const [modalVisible, setModalVisible] = useState(false);
const [infoLoading, setInfoLoading] = useState(false);
......@@ -153,6 +153,8 @@ const auditPrSubmit: React.FC<{}> = () => {
memberId: id,
validateId,
...rest,
}, {
ctlType: 'none',
});
};
......@@ -160,7 +162,6 @@ const auditPrSubmit: React.FC<{}> = () => {
const handleSubmit = values => {
setConfirmLoading(true);
// 调用渠道 Form 的 submit
formActions.submit();
const promises: any = [
formActions.submit(),
PublicApi.postMemberAbilityValidateCommitSubmit({
......@@ -171,6 +172,7 @@ const auditPrSubmit: React.FC<{}> = () => {
];
Promise.all(promises).then(res => {
setConfirmLoading(false);
setModalVisible(false);
setTimeout(() => {
history.goBack();
......@@ -180,8 +182,6 @@ const auditPrSubmit: React.FC<{}> = () => {
});
};
console.log('preview', preview)
return (
<Spin spinning={infoLoading}>
<PageHeaderWrapper
......@@ -199,13 +199,17 @@ const auditPrSubmit: React.FC<{}> = () => {
/>
}
extra={(
<Button
type="primary"
icon={<FormOutlined />}
onClick={() => setModalVisible(true)}
>
提交审核
</Button>
<>
{pageStatus === PageStatus.EDIT && (
<Button
type="primary"
icon={<FormOutlined />}
onClick={() => setModalVisible(true)}
>
提交审核
</Button>
)}
</>
)}
>
<Descriptions
......@@ -303,4 +307,4 @@ const auditPrSubmit: React.FC<{}> = () => {
);
};
export default auditPrSubmit;
export default AuditPrSubmit;
......@@ -85,20 +85,14 @@ export const auditSchema: ISchema = {
allowClear: true,
},
},
timeRange: {
'[startDate, endDate]': {
type: 'string',
default: 0,
enum: [
{ label: '时间范围(全部)', value: 0 },
{ label: '今天', value: 1 },
{ label: '一周内', value: 2 },
{ label: '一个月内', value: 3 },
{ label: '三个月内', value: 4 },
{ label: '六个月内', value: 5 },
{ label: '一年内', value: 6 },
{ label: '一年前', value: 7 },
],
'x-component-props': {},
default: '',
'x-component': 'dateSelect',
'x-component-props': {
placeholder: '时间范围(全部)',
allowClear: true,
},
},
submit: {
'x-component': 'Submit',
......
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