Commit 39f20347 authored by XieZhiXiong's avatar XieZhiXiong

chore: 删除 会员审核 相关路由

parent 11a0e54c
......@@ -132,94 +132,6 @@ const MemberRoute: RouterChild = {
noMargin: true,
component: '@/pages/member/memberMaintain/black',
},
// // 待提交审核
// {
// path: '/memberCenter/memberAbility/manage/memberPrSubmit',
// name: 'memberPrSubmit',
// component: '@/pages/member/memberPrSubmit/index',
// },
// // 待提交审核-详情
// {
// path: '/memberCenter/memberAbility/manage/memberPrSubmit/detail',
// name: 'memberPrSubmitDetail',
// hideInMenu: true,
// noMargin: true,
// component: '@/pages/member/memberPrSubmit/prSubmitDetail',
// },
// // 待提交审核-审核
// {
// path: '/memberCenter/memberAbility/manage/memberPrSubmit/verify',
// name: 'memberPrSubmitDetail',
// hideInMenu: true,
// noMargin: true,
// component: '@/pages/member/memberPrSubmit/auditPrSubmit',
// },
// // 待审核(一级)
// {
// path: '/memberCenter/memberAbility/manage/memberPr1',
// name: 'memberPr1',
// component: '@/pages/member/memberPr1/index',
// },
// // 待审核(一级)-详情
// {
// path: '/memberCenter/memberAbility/manage/memberPr1/detail',
// name: 'memberPr1Detail',
// hideInMenu: true,
// noMargin: true,
// component: '@/pages/member/memberPr1/pr1Detail',
// },
// // 待审核(一级)-审核
// {
// path: '/memberCenter/memberAbility/manage/memberPr1/verify',
// name: 'memberPr1Detail',
// hideInMenu: true,
// noMargin: true,
// component: '@/pages/member/memberPr1/auditPr1',
// },
// // 待审核(二级)
// {
// path: '/memberCenter/memberAbility/manage/memberPr2',
// name: 'memberPr2',
// component: '@/pages/member/memberPr2/index',
// },
// // 待审核(二级)-详情
// {
// path: '/memberCenter/memberAbility/manage/memberPr2/detail',
// name: 'memberPr2Detail',
// hideInMenu: true,
// noMargin: true,
// component: '@/pages/member/memberPr2/pr2Detail',
// },
// // 待审核(二级)-审核
// {
// path: '/memberCenter/memberAbility/manage/memberPr2/verify',
// name: 'memberPr2Detail',
// hideInMenu: true,
// noMargin: true,
// component: '@/pages/member/memberPr2/auditPr2',
// },
// // 待确认审核
// {
// path: '/memberCenter/memberAbility/manage/memberPrConfirm',
// name: 'memberPrConfirm',
// component: '@/pages/member/memberPrConfirm/index',
// },
// // 待确认审核-详情
// {
// path: '/memberCenter/memberAbility/manage/memberPrConfirm/detail',
// name: 'memberPrConfirmDetail',
// hideInMenu: true,
// noMargin: true,
// component: '@/pages/member/memberPrConfirm/prComfirmDetail',
// },
// // 待确认审核-审核
// {
// path: '/memberCenter/memberAbility/manage/memberPrConfirm/verify',
// name: 'memberPrConfirmDetail',
// hideInMenu: true,
// noMargin: true,
// component: '@/pages/member/memberPrConfirm/auditPrComfirm',
// },
// 待审核入库资料
{
path: '/memberCenter/memberAbility/manage/memberPrVerifyComingData',
......
......@@ -87,13 +87,6 @@ export default {
'menu.memberAbility.memberManage.memberImportDetail': '查看会员导入',
'menu.memberAbility.memberManage.memberMaintain': '会员信息',
'menu.memberAbility.memberManage.maintianDetail': '会员详情',
// 'menu.memberAbility.memberManage.memberPrSubmit': '待提交审核',
// 'menu.memberAbility.memberManage.memberPrSubmitDetail': '待提交审核详情',
// 'menu.memberAbility.memberManage.memberPr1': '待审核(一级)',
// 'menu.memberAbility.memberManage.memberPr1Detail': '待审核详情(一级)',
// 'menu.memberAbility.memberManage.memberPr2': '待审核(二级)',
// 'menu.memberAbility.memberManage.memberPr2Detail': '待审核详情(二级)',
// 'menu.memberAbility.memberManage.memberPrConfirm': '待确认审核',
'menu.memberAbility.memberManage.memberPrConfirmDetail': '待确认审核详情',
'menu.memberAbility.memberManage.memberPrVerifyComingData': '待审核入库资料',
'menu.memberAbility.memberManage.memberPrVerifyComingDataDetail': '待审核入库资料详情',
......
import React from 'react';
import { usePageStatus } from '@/hooks/usePageStatus';
import DetailInfo from './components/DetailInfo';
const AuditPr1: React.FC = () => {
const { id, validateId, pageStatus } = usePageStatus();
return (
<DetailInfo id={id} validateId={validateId} isEdit />
);
};
export default AuditPr1;
\ 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,
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 { GetMemberAbilityValidateStep1DetailResponse } from '@/services/MemberApi';
import { createFormActions, FormEffectHooks, FormPath } from '@formily/antd';
import NiceForm from '@/components/NiceForm';
import AvatarWrap from '@/components/AvatarWrap';
import { MEMBER_INNER_STATUS_BADGE_COLOR, MEMBER_STATUS_TAG_MAP, MEMBER_OUTER_STATUS_TYPE } from '../../../constant';
import { auditModalSchema } from '../../../schema/auditSchema';
import AuditProcess from '../../../components/AuditProcess';
import BasicInfo from '../../../components/BasicInfo';
import StatusTag from '../../../components/StatusTag';
import styles from './index.less';
interface AreaItem {
name: string;
code: string;
children: AreaItem[];
};
interface MemberInfo extends GetMemberAbilityValidateStep1DetailResponse {
channelTypeName: string;
areasInfo?: string[];
};
interface DetailInfoProps {
id?: string;
validateId?: string;
// 是否是编辑的
isEdit?: boolean;
};
const modalFormActions = createFormActions();
const {
onFieldValueChange$,
onFieldInputChange$,
} = FormEffectHooks;
const DetailInfo: React.FC<DetailInfoProps> = ({
id,
validateId,
isEdit = false,
}) => {
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);
if (province) {
let str = province.name;
// 存在 市级
if (ccode && province && province.children) {
const city = province.children.find(item => item.code === ccode);
if (city) {
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 => {
if (!isEdit) {
return;
}
setConfirmLoading(true);
// 调用渠道 Form 的 submit
const promises: any = [
PublicApi.postMemberAbilityValidateStep1Submit({
memberId: id,
validateId: validateId,
...values,
}),
];
Promise.all(promises).then(resArr => {
if (resArr.every((item: { code: number }) => item.code === 1000)) {
setModalVisible(false);
setTimeout(() => {
history.goBack();
}, 800);
}
setConfirmLoading(false);
}).catch(err => {
setConfirmLoading(false);
});
};
return (
<Spin spinning={infoLoading}>
<PageHeaderWrapper
style={{
padding: 24,
}}
title={
<>
<PageHeader
style={{ padding: 0 }}
onBack={() => history.goBack()}
title={
<AvatarWrap
info={{
name: memberInfo?.name,
}}
extra={(
<span style={{ fontSize: 12, fontWeight: 'normal' }}>{memberInfo?.levelTag}</span>
)}
/>
}
extra={(
<>
{isEdit && (
<Button
type="primary"
icon={<FormOutlined />}
onClick={() => setModalVisible(true)}
>
提交审核
</Button>
)}
</>
)}
>
<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>
</>
}
>
<div
style={{
marginBottom: 24,
}}
>
<AuditProcess
outerVerifySteps={memberInfo?.outerVerifySteps}
innerVerifySteps={memberInfo?.innerVerifySteps}
outerVerifyCurrent={
memberInfo && memberInfo.currentOuterStep > 0 ?
memberInfo.currentOuterStep - 1 :
0
}
innerVerifyCurrent={
memberInfo && memberInfo.currentInnerStep > 0 ?
memberInfo.currentInnerStep -1 :
0
}
/>
</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}
/>
<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 DetailInfo;
import React, { useState, useEffect, useRef } from 'react';
import { history } from 'umi';
import { Card, Space, Button, Badge, Modal, message } from 'antd';
import { ClockCircleOutlined, QuestionCircleOutlined } from '@ant-design/icons';
import { StandardTable } from 'god';
import moment from 'moment';
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/auditSchema';
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';
import LevelBrand from '../../../components/LevelBrand';
const { confirm } = Modal;
const formActions = createFormActions();
const MemberPr1: React.FC<{}> = props => {
const ref = useRef<any>({});
const [selectedRowKeys, setSelectedRowKeys] = useState<Array<string>>([]);
const [selectedList, setSelectList] = useState<any>([]);
const handleJumpAudit = record => {
history.push(`/memberCenter/memberAbility/manage/memberPr1/verify?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/memberPr1/detail?id=${record.memberId}&validateId=${record.validateId}`}
>
{text}
</EyePreview>
<div>
<LevelBrand level={record.level} />
</div>
</>
),
},
{
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',
render: (text, record) => (
<StatusTag type={MEMBER_OUTER_STATUS_TYPE[record.outerStatus]} title={text} />
),
},
{
title: '内部状态',
dataIndex: 'innerStatusName',
align: 'center',
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: (keys: any, rows: {}[]) => {
setSelectedRowKeys(keys);
setSelectList(rows);
},
selectedRowKeys: selectedRowKeys,
};
const fetchListData = async (params: any) => {
const { startDate = null, endDate = null } = params;
const payload = { ...params };
if (startDate) {
payload.startDate = moment(+startDate).format('YYYY-MM-DD');
}
if (endDate) {
payload.endDate = moment(+endDate).format('YYYY-MM-DD');
}
const res = await PublicApi.getMemberAbilityValidateStep1Page(payload);
if (res.code === 1000) {
return res.data;
}
return [];
};
const handleBatch = () => {
if (!selectedList.length) {
message.warning('未选择任何会员');
return;
}
confirm({
title: '提示',
icon: <QuestionCircleOutlined />,
content: '确定要审核通过选中的会员吗?',
onOk() {
const members = selectedList.map(item => ({ memberId: item.memberId, validateId: item.validateId }));
return new Promise((resolve, reject) => {
PublicApi.postMemberAbilityValidateStep1Batch(members)
.then(res => {
if (res.code === 1000) {
ref.current.reload();
setSelectedRowKeys([]);
resolve();
}
reject();
})
.catch(() => {
reject();
});
});
},
});
};
// 初始化高级筛选选项
const fetchSearchItems = async () => {
const res = await PublicApi.getMemberAbilityValidateStep1Pageitems();
if (res.code === 1000) {
const { data = {} }: any = res;
const {
memberTypes = [],
status = [],
roles = [],
levels = [],
sources = [],
} = data;
const newColumns = columns.slice();
// filter 0 过滤掉全部选项
coverColFiltersItem(
newColumns,
'statusName',
status.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.levelTag, value: item.level })),
source: sources.map(item => ({ label: item.text, value: item.id })),
};
}
return {};
};
const controllerBtns = (
<Space>
<Button onClick={handleBatch}>
批量审核通过
</Button>
</Space>
);
return (
<Card>
<StandardTable
tableProps={{
rowKey: 'validateId',
}}
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 MemberPr1;
import React from 'react';
import { usePageStatus } from '@/hooks/usePageStatus';
import DetailInfo from './components/DetailInfo';
const Pr1Detail: React.FC = () => {
const { id, validateId, pageStatus } = usePageStatus();
return (
<DetailInfo id={id} validateId={validateId} />
);
};
export default Pr1Detail;
\ No newline at end of file
import React from 'react';
import { usePageStatus } from '@/hooks/usePageStatus';
import DetailInfo from './components/DetailInfo';
const AuditPr2: React.FC = () => {
const { id, validateId, pageStatus } = usePageStatus();
return (
<DetailInfo id={id} validateId={validateId} isEdit />
);
};
export default AuditPr2;
\ 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,
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 { GetMemberAbilityValidateStep1DetailResponse } from '@/services/MemberApi';
import { createFormActions, FormEffectHooks, FormPath } from '@formily/antd';
import NiceForm from '@/components/NiceForm';
import AvatarWrap from '@/components/AvatarWrap';
import { MEMBER_INNER_STATUS_BADGE_COLOR, MEMBER_STATUS_TAG_MAP, MEMBER_OUTER_STATUS_TYPE } from '../../../constant';
import { auditModalSchema } from '../../../schema/auditSchema';
import AuditProcess from '../../../components/AuditProcess';
import BasicInfo from '../../../components/BasicInfo';
import StatusTag from '../../../components/StatusTag';
import styles from './index.less';
interface AreaItem {
name: string;
code: string;
children: AreaItem[];
};
interface MemberInfo extends GetMemberAbilityValidateStep1DetailResponse {
channelTypeName: string;
areasInfo?: string[];
};
interface DetailInfoProps {
id?: string;
validateId?: string;
// 是否是编辑的
isEdit?: boolean;
};
const modalFormActions = createFormActions();
const {
onFieldValueChange$,
onFieldInputChange$,
} = FormEffectHooks;
const DetailInfo: React.FC<DetailInfoProps> = ({
id,
validateId,
isEdit = false,
}) => {
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);
if (province) {
let str = province.name;
// 存在 市级
if (ccode && province && province.children) {
const city = province.children.find(item => item.code === ccode);
if (city) {
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 => {
if (!isEdit) {
return;
}
setConfirmLoading(true);
// 调用渠道 Form 的 submit
const promises: any = [
PublicApi.postMemberAbilityValidateStep2Submit({
memberId: id,
validateId: validateId,
...values,
}),
];
Promise.all(promises).then(resArr => {
if (resArr.every((item: { code: number }) => item.code === 1000)) {
setModalVisible(false);
setTimeout(() => {
history.goBack();
}, 800);
}
setConfirmLoading(false);
}).catch(err => {
setConfirmLoading(false);
});
};
return (
<Spin spinning={infoLoading}>
<PageHeaderWrapper
style={{
padding: 24,
}}
title={
<>
<PageHeader
style={{ padding: 0 }}
onBack={() => history.goBack()}
title={
<AvatarWrap
info={{
name: memberInfo?.name,
level: 1,
}}
extra={(
<span style={{ fontSize: 12, fontWeight: 'normal' }}>{memberInfo?.levelTag}</span>
)}
/>
}
extra={(
<>
{isEdit && (
<Button
type="primary"
icon={<FormOutlined />}
onClick={() => setModalVisible(true)}
>
提交审核
</Button>
)}
</>
)}
>
<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>
</>
}
>
<div
style={{
marginBottom: 24,
}}
>
<AuditProcess
outerVerifySteps={memberInfo?.outerVerifySteps}
innerVerifySteps={memberInfo?.innerVerifySteps}
outerVerifyCurrent={
memberInfo && memberInfo.currentOuterStep > 0 ?
memberInfo.currentOuterStep - 1 :
0
}
innerVerifyCurrent={
memberInfo && memberInfo.currentInnerStep > 0 ?
memberInfo.currentInnerStep -1 :
0
}
/>
</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}
/>
<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 DetailInfo;
import React, { useState, useEffect, useRef } from 'react';
import { history } from 'umi';
import { Card, Space, Button, Badge, Modal, message } from 'antd';
import { ClockCircleOutlined, QuestionCircleOutlined } from '@ant-design/icons';
import { StandardTable } from 'god';
import moment from 'moment';
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/auditSchema';
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';
import LevelBrand from '../../../components/LevelBrand';
const { confirm } = Modal;
const formActions = createFormActions();
const MemberPr2: React.FC<{}> = props => {
const ref = useRef<any>({});
const [selectedRowKeys, setSelectedRowKeys] = useState<Array<string>>([]);
const [selectedList, setSelectList] = useState<any>([]);
const handleJumpAudit = record => {
history.push(`/memberCenter/memberAbility/manage/memberPr2/verify?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/memberPr2/detail?id=${record.memberId}&validateId=${record.validateId}`}
>
{text}
</EyePreview>
<div>
<LevelBrand level={record.level} />
</div>
</>
),
},
{
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',
render: (text, record) => (
<StatusTag type={MEMBER_OUTER_STATUS_TYPE[record.outerStatus]} title={text} />
),
},
{
title: '内部状态',
dataIndex: 'innerStatusName',
align: 'center',
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: (keys: any, rows: {}[]) => {
setSelectedRowKeys(keys);
setSelectList(rows);
},
selectedRowKeys: selectedRowKeys,
};
const fetchListData = async (params: any) => {
const { startDate = null, endDate = null } = params;
const payload = { ...params };
if (startDate) {
payload.startDate = moment(+startDate).format('YYYY-MM-DD');
}
if (endDate) {
payload.endDate = moment(+endDate).format('YYYY-MM-DD');
}
const res = await PublicApi.getMemberAbilityValidateStep2Page(payload);
if (res.code === 1000) {
return res.data;
}
return [];
};
const handleBatch = () => {
if (!selectedList.length) {
message.warning('未选择任何会员');
return;
}
confirm({
title: '提示',
icon: <QuestionCircleOutlined />,
content: '确定要审核通过选中的会员吗?',
onOk() {
const members = selectedList.map(item => ({ memberId: item.memberId, validateId: item.validateId }));
return new Promise((resolve, reject) => {
PublicApi.postMemberAbilityValidateStep2Batch(members)
.then(res => {
if (res.code === 1000) {
ref.current.reload();
setSelectedRowKeys([]);
resolve();
}
reject();
})
.catch(() => {
reject();
});
});
},
});
};
// 初始化高级筛选选项
const fetchSearchItems = async () => {
const res = await PublicApi.getMemberAbilityValidateStep2Pageitems();
if (res.code === 1000) {
const { data = {} }: any = res;
const {
memberTypes = [],
status = [],
roles = [],
levels = [],
sources = [],
} = data;
const newColumns = columns.slice();
// filter 0 过滤掉全部选项
coverColFiltersItem(
newColumns,
'statusName',
status.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.levelTag, value: item.level })),
source: sources.map(item => ({ label: item.text, value: item.id })),
};
}
return {};
};
const controllerBtns = (
<Space>
<Button onClick={handleBatch}>
批量审核通过
</Button>
</Space>
);
return (
<Card>
<StandardTable
tableProps={{
rowKey: 'validateId',
}}
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 MemberPr2;
import React from 'react';
import { usePageStatus } from '@/hooks/usePageStatus';
import DetailInfo from './components/DetailInfo';
const Pr2Detail: React.FC = () => {
const { id, validateId, pageStatus } = usePageStatus();
return (
<DetailInfo id={id} validateId={validateId} />
);
};
export default Pr2Detail;
\ No newline at end of file
import React from 'react';
import { usePageStatus } from '@/hooks/usePageStatus';
import DetailInfo from './components/DetailInfo';
const AuditPrComfirm: React.FC = () => {
const { id, validateId, pageStatus } = usePageStatus();
return (
<DetailInfo id={id} validateId={validateId} isEdit />
);
};
export default AuditPrComfirm;
\ 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,
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 { GetMemberAbilityValidateStep1DetailResponse } from '@/services/MemberApi';
import { createAsyncFormActions, FormEffectHooks, FormPath } from '@formily/antd';
import NiceForm from '@/components/NiceForm';
import AvatarWrap from '@/components/AvatarWrap';
import { MEMBER_INNER_STATUS_SUCCESS } from '@/constants/member';
import { MEMBER_INNER_STATUS_BADGE_COLOR, MEMBER_STATUS_TAG_MAP, MEMBER_OUTER_STATUS_TYPE } from '../../../constant';
import { auditModalSchema } from '../../../schema/auditSchema';
import AuditProcess from '../../../components/AuditProcess';
import BasicInfo from '../../../components/BasicInfo';
import StatusTag from '../../../components/StatusTag';
import styles from './index.less';
interface AreaItem {
name: string;
code: string;
children: AreaItem[];
};
interface MemberInfo extends GetMemberAbilityValidateStep1DetailResponse {
channelTypeName: string;
areasInfo?: string[];
};
interface DetailInfoProps {
id?: string;
validateId?: string;
// 是否是编辑的
isEdit?: boolean;
};
const modalFormActions = createAsyncFormActions();
const {
onFieldValueChange$,
onFieldInputChange$,
} = FormEffectHooks;
const DetailInfo: React.FC<DetailInfoProps> = ({
id,
validateId,
isEdit = false,
}) => {
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);
if (province) {
let str = province.name;
// 存在 市级
if (ccode && province && province.children) {
const city = province.children.find(item => item.code === ccode);
if (city) {
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);
// 内部状态为 审核通过 才能选择 审核通过选项
if (res.data.innerStatus !== MEMBER_INNER_STATUS_SUCCESS) {
modalFormActions.setFieldState('agree', state => {
const newMenu =
state.props.enum.map(
(item: { label: string, value: any }) => ({
...item,
disabled: item.value === 1,
})
);
FormPath.setIn(state, 'props.enum', newMenu);
FormPath.setIn(state, 'value', 0);
});
}
}).finally(() => {
setInfoLoading(false);
});
}
};
useEffect(() => {
getDetailedInfo();
}, []);
// 提交审核
const handleSubmit = values => {
if (!isEdit) {
return;
}
setConfirmLoading(true);
// 调用渠道 Form 的 submit
const promises: any = [
PublicApi.postMemberAbilityValidateConfirmSubmit({
memberId: id,
validateId: validateId,
...values,
}),
];
Promise.all(promises).then(resArr => {
if (resArr.every((item: { code: number }) => item.code === 1000)) {
setModalVisible(false);
setTimeout(() => {
history.goBack();
}, 800);
}
setConfirmLoading(false);
}).catch(err => {
setConfirmLoading(false);
});
};
return (
<Spin spinning={infoLoading}>
<PageHeaderWrapper
style={{
padding: 24,
}}
title={
<>
<PageHeader
style={{ padding: 0 }}
onBack={() => history.goBack()}
title={
<AvatarWrap
info={{
name: memberInfo?.name,
}}
extra={(
<span style={{ fontSize: 12, fontWeight: 'normal' }}>{memberInfo?.levelTag}</span>
)}
/>
}
extra={(
<>
{isEdit && (
<Button
type="primary"
icon={<FormOutlined />}
onClick={() => setModalVisible(true)}
>
提交审核
</Button>
)}
</>
)}
>
<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>
</>
}
>
<div
style={{
marginBottom: 24,
}}
>
<AuditProcess
outerVerifySteps={memberInfo?.outerVerifySteps}
innerVerifySteps={memberInfo?.innerVerifySteps}
outerVerifyCurrent={
memberInfo && memberInfo.currentOuterStep > 0 ?
memberInfo.currentOuterStep - 1 :
0
}
innerVerifyCurrent={
memberInfo && memberInfo.currentInnerStep > 0 ?
memberInfo.currentInnerStep -1 :
0
}
/>
</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}
/>
<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 DetailInfo;
import React, { useState, useEffect, useRef } from 'react';
import { history } from 'umi';
import { Card, Space, Button, Badge, Modal, message } from 'antd';
import { ClockCircleOutlined, QuestionCircleOutlined } from '@ant-design/icons';
import { StandardTable } from 'god';
import moment from 'moment';
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 { MEMBER_INNER_STATUS_FAILED } from '@/constants/member';
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';
import LevelBrand from '../../../components/LevelBrand';
const { confirm } = Modal;
const formActions = createFormActions();
const MemberPrConfirm: React.FC<{}> = props => {
const ref = useRef<any>({});
const [selectedRowKeys, setSelectedRowKeys] = useState<Array<string>>([]);
const [selectedList, setSelectList] = useState<any>([]);
const handleJumpAudit = record => {
history.push(`/memberCenter/memberAbility/manage/memberPrConfirm/verify?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/memberPrConfirm/detail?id=${record.memberId}&validateId=${record.validateId}`}
>
{text}
</EyePreview>
<div>
<LevelBrand level={record.level} />
</div>
</>
),
},
{
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',
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: (keys: any, rows: {}[]) => {
setSelectedRowKeys(keys);
setSelectList(rows);
},
selectedRowKeys: selectedRowKeys,
getCheckboxProps: record => ({
disabled: record.innerStatus === MEMBER_INNER_STATUS_FAILED,
}),
};
const fetchListData = async (params: any) => {
const { startDate = null, endDate = null } = params;
const payload = { ...params };
if (startDate) {
payload.startDate = moment(+startDate).format('YYYY-MM-DD');
}
if (endDate) {
payload.endDate = moment(+endDate).format('YYYY-MM-DD');
}
const res = await PublicApi.getMemberAbilityValidateConfirmPage(payload);
if (res.code === 1000) {
return res.data;
}
return [];
};
const handleBatch = () => {
if (!selectedList.length) {
message.warning('未选择任何会员');
return;
}
confirm({
title: '提示',
icon: <QuestionCircleOutlined />,
content: '确定要审核通过选中的会员吗?',
onOk() {
const members = selectedList.map(item => ({ memberId: item.memberId, validateId: item.validateId }));
return new Promise((resolve, reject) => {
PublicApi.postMemberAbilityValidateConfirmBatch(members)
.then(res => {
if (res.code === 1000) {
ref.current.reload();
setSelectedRowKeys([]);
resolve();
}
reject();
})
.catch(() => {
reject();
});
});
},
});
};
// 初始化高级筛选选项
const fetchSearchItems = async () => {
const res = await PublicApi.getMemberAbilityValidateConfirmPageitems();
if (res.code === 1000) {
const { data = {} }: any = res;
const {
memberTypes = [],
status = [],
roles = [],
levels = [],
sources = [],
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,
'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.levelTag, value: item.level })),
source: sources.map(item => ({ label: item.text, value: item.id })),
innerStatus: innerStatus.map(item => ({ label: item.text, value: item.id })).filter(item => item.value !== 0),
};
}
return {};
};
const controllerBtns = (
<Space>
<Button onClick={handleBatch}>
批量确认审核通过
</Button>
</Space>
);
return (
<Card>
<StandardTable
tableProps={{
rowKey: 'validateId',
}}
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', 'innerStatus'],
fetchSearchItems,
);
}}
schema={auditSchema}
/>
}
/>
</Card>
);
};
export default MemberPrConfirm;
import React from 'react';
import { usePageStatus } from '@/hooks/usePageStatus';
import DetailInfo from './components/DetailInfo';
const PrComfirmDetail: React.FC = () => {
const { id, validateId, pageStatus } = usePageStatus();
return (
<DetailInfo id={id} validateId={validateId} />
);
};
export default PrComfirmDetail;
\ No newline at end of file
/*
* @Author: XieZhiXiong
* @Date: 2021-01-08 16:27:19
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-01-08 16:35:11
* @Description:
*/
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: '搜索',
tip: '输入 会员名称 进行搜索',
},
},
},
},
[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,
style: {
width: 160,
},
},
},
status: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '会员状态(全部)',
allowClear: true,
style: {
width: 160,
},
},
},
roleId: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '会员角色(全部)',
allowClear: true,
style: {
width: 160,
},
},
},
level: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '会员等级(全部)',
allowClear: true,
style: {
width: 160,
},
},
},
source: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '申请来源(全部)',
allowClear: true,
style: {
width: 160,
},
},
},
innerStatus: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '内部状态(全部)',
allowClear: true,
style: {
width: 160,
},
},
},
'[startDate, endDate]': {
type: 'string',
default: '',
'x-component': 'dateSelect',
'x-component-props': {
placeholder: '时间范围(全部)',
allowClear: true,
style: {
width: 160,
},
},
},
submit: {
'x-component': 'Submit',
'x-mega-props': {
span: 1,
},
'x-component-props': {
children: '查询',
},
},
},
},
},
},
},
};
\ No newline at end of file
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