Commit 77c93b5c authored by XieZhiXiong's avatar XieZhiXiong

fibux、对接批量审核接口

parent 86121090
......@@ -33,15 +33,20 @@ const CustomAddArray = (props) => {
const onAdd = () => mutators.push(schema.items.getEmptyValue())
const onRemove = index => mutators.remove(index)
return <div>
{ toArr(value).map((item, index, arr) => {
return <RowStyleLayout {...componentProps} key={index}>
<SchemaField path={FormPath.parse(path).concat(index)} onlyRenderProperties/>
<Button onClick={onAdd.bind(null, index)} type='primary'>+</Button>
{ index !== 0 && <Button onClick={onRemove.bind(null, index)}>-</Button>}
</RowStyleLayout>
}) }
</div>
return (
<div>
{toArr(value).map((item, index, arr) => (
<RowStyleLayout {...componentProps} key={index}>
<SchemaField path={FormPath.parse(path).concat(index)} onlyRenderProperties/>
<Button onClick={onAdd.bind(null, index)} type='primary'>+</Button>
<Button onClick={onRemove.bind(null, index)}>-</Button>
</RowStyleLayout>
))}
{(!value || !value.length) && (
<Button onClick={onAdd} type='primary'>+</Button>
)}
</div>
)
}
CustomAddArray.isFieldComponent = true
......
......@@ -191,4 +191,8 @@
}
}
.ant-badge-count {
z-index: 1;
}
}
\ No newline at end of file
......@@ -24,65 +24,117 @@ const {
} = FormEffectHooks;
const AddMember: React.FC<any> = props => {
const areaRef = useRef<any[]>([])
const { id, validateId } = usePageStatus();
const [memberItems, setMemberItems] = useState<any>({});
const [memberInfo, setMemberInfo] = useState<GetMemberAbilitySubGetResponse>(null);
const [submitLoading, setSubmitLoading] = useState(false);
const [infoLoading, setInfoLoading] = useState(false);
const getDetailedInfo = () => {
const getDetailedInfo = async () => {
if (id && validateId) {
setInfoLoading(true);
PublicApi.getMemberAbilitySubGet({
const infoRes = await PublicApi.getMemberAbilitySubGet({
memberId: id,
validateId,
}).then(res => {
if (res.code !== 1000) {
return;
}
const {
memberTypeEnum,
groups = [],
areaCodes,
account,
channelLevelTag,
channelTypeName,
countryCode,
createTime,
currentStep,
levelTag,
memberId,
memberTypeName,
name,
outerHistory,
outerStatusName,
roleName,
verifySteps,
...rest
}: any = (res.data || {});
// 注册资料处理
const detail = {};
for (let i = 0; i < groups.length; i++) {
const item = groups[i];
if (item.elements) {
for (let j = 0; j < item.elements.length; j++) {
const ele = item.elements[j];
detail[ele.fieldName] = ele.fieldValue;
}
});
if (infoRes.code !== 1000) {
return;
}
const {
memberTypeEnum,
groups = [],
areaCodes,
account,
channelLevelTag,
channelTypeName,
countryCode,
createTime,
currentStep,
levelTag,
memberId,
memberTypeName,
name,
outerHistory,
outerStatusName,
roleName,
verifySteps,
...rest
}: any = infoRes.data;
// 注册资料处理
const detail = {};
for (let i = 0; i < groups.length; i++) {
const item = groups[i];
if (item.elements) {
for (let j = 0; j < item.elements.length; j++) {
const ele = item.elements[j];
detail[ele.fieldName] = ele.fieldValue;
}
}
}
formActions.setFieldState('tabs', state => {
state.props['x-component-props'] =
state.props['x-component-props'] || {};
state.props['x-component-props'].hiddenKeys =
!channelLevelTag ? ['tab-2'] : [];
});
// 获取渠道信息
const channelRes = await PublicApi.getMemberAbilitySubPageitemsChannel({
memberTypeId: rest.memberTypeId,
});
if (channelRes.code !== 1000) {
return;
}
const {
areas = [],
channelTypes = [],
} = channelRes.data;
const areasOptions = areas.map(item => ({ label: item.name, value: item.code }));
const channelType = channelTypes.map(item => ({ label: item.channelTypeName, value: item.channelTypeId }));
setMemberInfo({
memberTypeId: memberTypeEnum,
...rest,
areas: areaCodes,
...detail,
if (areasOptions.length) {
formActions.setFieldState('areas.*.pcode', state => {
FormPath.setIn(state, 'props.enum', areasOptions);
});
}).finally(() => {
setInfoLoading(false);
areaCodes.forEach((area, index) => {
const { pcode, ccode } = area;
const province = areas.find(item => item.code === pcode);
if (province && province.children) {
const citys =
province.children.map((item: { code: string, name: string }) => ({ label: item.name, value: item.code }));
formActions.setFieldState(
`areas.${index}.ccode`,
state => {
FormPath.setIn(state, 'props.enum', citys);
}
);
}
});
}
formActions.setFieldState('channelTypeId', state => {
FormPath.setIn(state, 'props.enum', channelType);
});
areaRef.current = areas;
setMemberInfo({
memberTypeId: memberTypeEnum,
...rest,
areas: areaCodes,
channelLevel: channelLevelTag,
...detail,
});
setInfoLoading(false);
}
};
......@@ -102,11 +154,19 @@ const AddMember: React.FC<any> = props => {
channelTypeId,
areas,
remark,
outerStatus,
status,
statusName,
...rest
} = values;
if (!id) {
setSubmitLoading(true);
const msg = message.loading({
content: '正在添加,请稍候...',
duration: 0,
});
PublicApi.postMemberAbilitySubAdd({
memberTypeId,
roleId,
......@@ -126,10 +186,15 @@ const AddMember: React.FC<any> = props => {
history.replace('/memberCenter/memberAbility/manage/import');
}, 1000);
}).finally(() => {
msg();
setSubmitLoading(false);
});
} else {
setSubmitLoading(true);
const msg = message.loading({
content: '正在保存,请稍候...',
duration: 0,
});
PublicApi.postMemberAbilitySubUpdate({
memberId: id,
validateId,
......@@ -151,6 +216,7 @@ const AddMember: React.FC<any> = props => {
history.replace('/memberCenter/memberAbility/manage/import');
}, 1000);
}).finally(() => {
msg();
setSubmitLoading(false);
});
}
......@@ -177,21 +243,8 @@ const AddMember: React.FC<any> = props => {
const useAsyncLinkageEffect = () => {
const linkage = useLinkageUtils();
let areasData = [];
onFormInitialValueChange$().subscribe(initialValues => {
console.log('1111', initialValues)
});
// 手动触发改变的话重置角色、等级下拉框
onFieldInputChange$('memberTypeId').subscribe(() => {
linkage.value('roleId', undefined);
linkage.enum('roleId', []);
linkage.value('levelId', undefined);
linkage.enum('levelId', []);
});
// 根据会员类型
// 间接触发根据会员类型
onFieldValueChange$('memberTypeId').subscribe(fieldState => {
if (!fieldState.value) {
return;
......@@ -209,6 +262,23 @@ const AddMember: React.FC<any> = props => {
}).finally(() => {
linkage.loaded('roleId');
});
});
// 根据会员类型
onFieldInputChange$('memberTypeId').subscribe(fieldState => {
if (!fieldState.value) {
return;
}
linkage.value('roleId', undefined);
linkage.enum('roleId', []);
linkage.value('levelId', undefined);
linkage.enum('levelId', []);
// 清空渠道原来数据
linkage.value('channelTypeId', undefined);
linkage.value('areas', []);
linkage.value('remark', '');
// 获取渠道信息
PublicApi.getMemberAbilitySubPageitemsChannel({
......@@ -218,11 +288,10 @@ const AddMember: React.FC<any> = props => {
return;
}
const {
data: {
channelLevelTag = '',
areas = [],
channelTypes = [],
} } = res;
channelLevelTag = '',
areas = [],
channelTypes = [],
} = res.data;
formActions.setFieldState('tabs', state => {
state.props['x-component-props'] =
state.props['x-component-props'] || {};
......@@ -230,16 +299,16 @@ const AddMember: React.FC<any> = props => {
state.props['x-component-props'].hiddenKeys =
!channelLevelTag ? ['tab-2'] : [];
});
areaRef.current = areas;
const areasOptions = areas.map(item => ({ label: item.name, value: item.code }));
const channelType = channelTypes.map(item => ({ label: item.channelTypeName, value: item.channelTypeId }))
const channelType = channelTypes.map(item => ({ label: item.channelTypeName, value: item.channelTypeId }));
if (areasOptions.length) {
formActions.setFieldState('areas.*.pcode', state => {
FormPath.setIn(state, 'props.enum', areasOptions);
});
}
formActions.setFieldState('channelLevel', state => {
FormPath.setIn(state, 'value', channelLevelTag);
});
......@@ -247,28 +316,6 @@ 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;
});
});
......@@ -306,6 +353,8 @@ const AddMember: React.FC<any> = props => {
PublicApi.getMemberAbilitySubPageitemsLevel({
memberTypeId: selfName == 'memberTypeId' ? selfValue : otherValue,
roleId: selfName == 'memberTypeId' ? otherValue : selfValue,
}, {
useCache: true,
}).then(res => {
if (res.code === 1000) {
const { data = [] } = res;
......@@ -318,19 +367,9 @@ 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);
onFieldInputChange$('areas.*.pcode').subscribe(fieldState => {
const province = areaRef.current.find(item => item.code === fieldState.value);
if (!province) {
return;
}
......@@ -338,14 +377,13 @@ 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
......
......@@ -322,11 +322,8 @@ export const initDetailSchema = (props: any) => {
areas: {
type: 'array',
title: '代理城市',
required: true,
'x-component': 'CustomAddArray',
default: [
{ pcode: undefined, ccode: undefined },
],
default: [],
items: {
type: 'object',
properties: {
......
......@@ -35,7 +35,7 @@ interface QueryProps {
}
const MemberQueryDetailed: React.FC<QueryProps> = props => {
const { MemberStore, children } = props;
const { MemberStore, location, children } = props;
const { id, validateId } = usePageStatus();
const [basicInfo, setBasicInfo] = useState<GetMemberAbilityMaintenanceDetailBasicResponse>(null);
const [infoLoading, setInfoLoading] = useState(false);
......
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 { Card, Space, Button, Badge, Modal, message } from 'antd';
import { ClockCircleOutlined, QuestionCircleOutlined } from '@ant-design/icons';
import { StandardTable } from 'god';
import { ColumnType } from 'antd/lib/table/interface';
import { createFormActions } from '@formily/antd';
......@@ -20,12 +20,12 @@ import {
import { coverColFiltersItem } from '../utils';
import StatusTag from '../components/StatusTag';
const { confirm } = Modal;
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>([]);
......@@ -122,13 +122,9 @@ const MemberPr1: React.FC<{}> = props => {
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);
onChange: (keys: any, rows: {}[]) => {
setSelectedRowKeys(keys);
setSelectList(rows);
},
selectedRowKeys: selectedRowKeys,
};
......@@ -139,7 +135,32 @@ const MemberPr1: React.FC<{}> = props => {
};
const handleBatch = () => {
console.log('批量')
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();
});
});
},
});
};
// 初始化高级筛选选项
......@@ -192,17 +213,9 @@ const MemberPr1: React.FC<{}> = props => {
const controllerBtns = (
<Space>
<Popconfirm
title="是否继续操作 ?"
placement="bottom"
onConfirm={handleBatch}
okText="是"
cancelText="否"
>
<Button>
批量提交审核
</Button>
</Popconfirm>
<Button onClick={handleBatch}>
批量审核通过
</Button>
</Space>
);
......
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 { Card, Space, Button, Badge, Modal, message } from 'antd';
import { ClockCircleOutlined, QuestionCircleOutlined } from '@ant-design/icons';
import { StandardTable } from 'god';
import { ColumnType } from 'antd/lib/table/interface';
import { createFormActions } from '@formily/antd';
......@@ -20,12 +20,12 @@ import {
import { coverColFiltersItem } from '../utils';
import StatusTag from '../components/StatusTag';
const { confirm } = Modal;
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>([]);
......@@ -122,13 +122,9 @@ const MemberPr2: React.FC<{}> = props => {
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);
onChange: (keys: any, rows: {}[]) => {
setSelectedRowKeys(keys);
setSelectList(rows);
},
selectedRowKeys: selectedRowKeys,
};
......@@ -139,7 +135,32 @@ const MemberPr2: React.FC<{}> = props => {
};
const handleBatch = () => {
console.log('批量')
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();
});
});
},
});
};
// 初始化高级筛选选项
......@@ -192,17 +213,9 @@ const MemberPr2: React.FC<{}> = props => {
const controllerBtns = (
<Space>
<Popconfirm
title="是否继续操作 ?"
placement="bottom"
onConfirm={handleBatch}
okText="是"
cancelText="否"
>
<Button>
批量提交审核
</Button>
</Popconfirm>
<Button onClick={handleBatch}>
批量审核通过
</Button>
</Space>
);
......
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 { Card, Space, Button, Badge, Modal, message } from 'antd';
import { ClockCircleOutlined, QuestionCircleOutlined } from '@ant-design/icons';
import { StandardTable } from 'god';
import { ColumnType } from 'antd/lib/table/interface';
import { createFormActions } from '@formily/antd';
......@@ -20,12 +20,12 @@ import {
import { coverColFiltersItem } from '../utils';
import StatusTag from '../components/StatusTag';
const { confirm } = Modal;
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>([]);
......@@ -122,13 +122,9 @@ const MemberPrConfirm: React.FC<{}> = props => {
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);
onChange: (keys: any, rows: {}[]) => {
setSelectedRowKeys(keys);
setSelectList(rows);
},
selectedRowKeys: selectedRowKeys,
};
......@@ -139,7 +135,32 @@ const MemberPrConfirm: React.FC<{}> = props => {
};
const handleBatch = () => {
console.log('批量')
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();
});
});
},
});
};
// 初始化高级筛选选项
......@@ -192,17 +213,9 @@ const MemberPrConfirm: React.FC<{}> = props => {
const controllerBtns = (
<Space>
<Popconfirm
title="是否继续操作 ?"
placement="bottom"
onConfirm={handleBatch}
okText="是"
cancelText="否"
>
<Button>
批量提交审核
</Button>
</Popconfirm>
<Button onClick={handleBatch}>
批量确认审核通过
</Button>
</Space>
);
......
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 { Card, Space, Button, Badge, Modal, message } from 'antd';
import { ClockCircleOutlined, QuestionCircleOutlined } from '@ant-design/icons';
import { StandardTable } from 'god';
import { ColumnType } from 'antd/lib/table/interface';
import { createFormActions } from '@formily/antd';
......@@ -20,12 +20,12 @@ import {
import { coverColFiltersItem } from '../utils';
import StatusTag from '../components/StatusTag';
const { confirm } = Modal;
const formActions = createFormActions();
const MemberPrSubmit: 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>([]);
......@@ -122,13 +122,9 @@ const MemberPrSubmit: React.FC<{}> = props => {
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);
onChange: (keys: any, rows: {}[]) => {
setSelectedRowKeys(keys);
setSelectList(rows);
},
selectedRowKeys: selectedRowKeys,
};
......@@ -139,7 +135,32 @@ const MemberPrSubmit: React.FC<{}> = props => {
};
const handleBatch = () => {
console.log('批量')
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.postMemberAbilityValidateCommitBatch(members)
.then(res => {
if (res.code === 1000) {
ref.current.reload();
setSelectedRowKeys([]);
resolve();
}
reject();
})
.catch(() => {
reject();
});
});
},
});
};
// 初始化高级筛选选项
......@@ -192,17 +213,9 @@ const MemberPrSubmit: React.FC<{}> = props => {
const controllerBtns = (
<Space>
<Popconfirm
title="是否继续操作 ?"
placement="bottom"
onConfirm={handleBatch}
okText="是"
cancelText="否"
>
<Button>
批量提交审核
</Button>
</Popconfirm>
<Button onClick={handleBatch}>
批量审核通过
</Button>
</Space>
);
......@@ -210,7 +223,7 @@ const MemberPrSubmit: React.FC<{}> = props => {
<Card>
<StandardTable
tableProps={{
rowKey: 'memberId',
rowKey: 'memberId',
}}
columns={columns}
currentRef={ref}
......
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