Commit 90f2c422 authored by GuanHua's avatar GuanHua
parents b6d3b129 7a5f11e4
......@@ -40,6 +40,14 @@ const MemberRoute: RouterChild = {
noMargin: true,
component: '@/pages/member/memberImport/editMember',
},
// 修改 自己个人信息
{
path: '/memberCenter/memberAbility/manage/import/editMySelf',
name: 'editMySelf',
hideInMenu: true,
noMargin: true,
component: '@/pages/member/memberImport/editMySelf',
},
// 会员导入-详情
{
path: '/memberCenter/memberAbility/manage/import/detail',
......
......@@ -81,6 +81,7 @@ export default {
'menu.memberAbility.memberManage.memberImport': '会员导入',
'menu.memberAbility.memberManage.addMember': '新建会员',
'menu.memberAbility.memberManage.editMember': '编辑会员',
'menu.memberAbility.memberManage.editMySelf': '修改会员信息',
'menu.memberAbility.memberManage.memberImportDetail': '会员导入详情',
'menu.memberAbility.memberManage.memberMaintain': '会员维护',
'menu.memberAbility.memberManage.maintianDetail': '会员详情',
......
......@@ -64,7 +64,7 @@ const PaycodeVerifyPanel: React.FC<IProps> = (props) => {
// 验证旧的支付密码
const handleVerifySuccess = () => {
const payPassword = form.getFieldValue('paycode');
const payPassword = encryptedByAES(form.getFieldValue('paycode'));
const service = PublicApi.postMemberSecurityPayCheck;
service({payPassword: payPassword}, { ctlType: "none" }).then((data) => {
console.log(data);
......@@ -96,7 +96,7 @@ const PaycodeVerifyPanel: React.FC<IProps> = (props) => {
noStyle
rules={[{ required: true, message: '请填写支付密码' }]}
>
<Input autoComplete="off" />
<Input.Password autoComplete="off" />
</Form.Item>
</Col>
</Row>
......
......@@ -76,7 +76,7 @@ const InvoiceArray = (props) => {
{toArr(value).map((item, index) => {
return (
<RowStyleLayout {...componentProps} key={index}>
<div style={{display: 'flex'}}>
<div style={{display: 'flex', position: 'relative'}}>
<SchemaField path={FormPath.parse(path).concat(index)} />
{
length - 1 === index
......@@ -84,15 +84,15 @@ const InvoiceArray = (props) => {
: null
}
<Button
style={{marginLeft: length - 1 === index ? '0' : '-16px'}}
<Button
style={{marginLeft: length - 1 === index ? '0' : '-16px'}}
onClick={() => mutators.remove(index)}
>
<MinusOutlined width={44}/>
<MinusOutlined width={44}/>
</Button>
</div>
</RowStyleLayout>
)
})}
......@@ -117,5 +117,5 @@ const InvoiceArray = (props) => {
)
}
InvoiceArray.isFieldComponent = true;
export default InvoiceArray
\ No newline at end of file
InvoiceArray.isFieldComponent = true;
export default InvoiceArray
......@@ -132,46 +132,51 @@ const InvoiceDrawer: React.FC<Iprops> = (props) => {
getContainer={false}
destroyOnClose
visible={visible}
bodyStyle={{overflow: 'auto'}}
title={title}
width={width}
onClose={onCancel}
footer={renderFooter()}
>
<InvoiceInfo infos={invoiceInfo} />
{
type === TypeEnum.edit
? (
<>
<div className={styles.formHeader}>
<div className={styles.invoiceNum}>发票号码</div>
<div className={styles.invoiceDate}>开票日期</div>
<div>备注</div>
</div>
<SchemaForm onSubmit={handleForm} actions={formActions} components={{ InvoiceArray, Input, DatePicker }}>
<Field
name="list"
type="array"
x-component="InvoiceArray"
>
<Field type="object">
<Field name="number" x-component="Input" x-rules={[{required: true, message: '请填写发票号'}]} />
<Field name="invoiceDate" x-component="DatePicker" x-rules={[{required: true, message: '请选择发票日期'}]} />
<Field name="remark" x-component="Input" x-component-props={{style: {width: '240px'}}} />
<div style={{display: 'flex', flexDirection: 'column'}}>
<InvoiceInfo infos={invoiceInfo} />
{
type === TypeEnum.edit
? (
<>
<div className={styles.formHeader}>
<div className={styles.invoiceNum}>发票号码</div>
<div className={styles.invoiceDate}>开票日期</div>
<div>备注</div>
</div>
{/* getPopupContainer={triggerNode => { console.log(triggerNode, triggerNode.parentElement); return triggerNode.parentNode}} */}
<SchemaForm onSubmit={handleForm} actions={formActions} components={{ InvoiceArray, Input, DatePicker }}>
<Field
name="list"
type="array"
x-component="InvoiceArray"
>
<Field type="object">
<Field name="number" x-component="Input" x-rules={[{required: true, message: '请填写发票号'}]} />
<Field name="invoiceDate" x-component-props={{
getPopupContainer: (triggernode) => triggernode.parentElement
}} x-component="DatePicker" x-rules={[{required: true, message: '请选择发票日期'}]} />
<Field name="remark" x-component="Input" x-component-props={{style: {width: '240px'}}} />
</Field>
</Field>
</Field>
</SchemaForm>
</>
)
: (
<Table
columns={columns}
dataSource={tableList}
rowKey={record => record.id}
/>
)
}
</SchemaForm>
</>
)
: (
<Table
columns={columns}
dataSource={tableList}
rowKey={record => record.id}
/>
)
}
</div>
</Drawer>
)
}
......
......@@ -21,7 +21,7 @@ interface Iprops {}
const WEEKDAYS = ["天", "一","二", "三", "四", "五","六"];
const LEVEL_IMAGE = [level1, level1, level2, level3, level4];
const EDIT_USER_URL = '/memberCenter/memberAbility/query';
const EDIT_USER_URL = '/memberCenter/memberAbility/manage/import/editMySelf';
const USER_CENTER_URL = '/memberCenter/memberAbility/manage/maintain'
const STATUS_COLOR: ("default" | "processing" | "error" | "success")[] = ["default", "processing", "error", "success"]
......@@ -64,7 +64,7 @@ const UserCenter: React.FC<Iprops> = (props) => {
if (info.file.status === 'done') {
const { code, data } = info.file.response
if(code === 1000) {
PublicApi.postMemberBusinessLogoAdd({logo: data})
PublicApi.postMemberMainpageLogoAdd({logo: data})
.then((res) => {
if(res.code === 1000) {
dispatch({type: 'done', payload: {url: data}})
......@@ -134,7 +134,10 @@ const UserCenter: React.FC<Iprops> = (props) => {
</div>
</div>
</div>
<Link to={EDIT_USER_URL} className={styles.link}>修改会员信息</Link>
{
userAuth.validateStatus === 2 &&
<Link to={EDIT_USER_URL} className={styles.link}>修改会员信息</Link>
}
</div>
<div className={styles.otherValues}>
<div className={styles.divider}>
......
......@@ -17,23 +17,25 @@ import { GetMemberAbilitySubGetResponse } from '@/services/MemberApi';
import { initDetailSchema } from './schema';
const formActions = createFormActions();
const {
onFieldValueChange$,
onFieldInputChange$,
onFormInputChange$,
const {
onFieldValueChange$,
onFieldInputChange$,
onFormInputChange$,
} = FormEffectHooks;
interface MemberFormProps {
id?: number;
validateId?: number;
validateId?: number;
// 是否是编辑的
isEdit?: boolean,
isEdit?: boolean,
mode?: 'myself' | "any"
};
const MemberForm: React.FC<MemberFormProps> = ({
id,
validateId,
isEdit = false,
id,
validateId,
mode,
isEdit = false,
}) => {
const areaRef = useRef<any[]>([])
const [memberItems, setMemberItems] = useState<any>({});
......@@ -43,35 +45,42 @@ const MemberForm: React.FC<MemberFormProps> = ({
const [unsaved, setUnsaved] = useState(false);
const getDetailedInfo = async () => {
if (id && validateId && isEdit) {
if (id && validateId && isEdit || mode === 'myself') {
setInfoLoading(true);
const infoRes = await PublicApi.getMemberAbilitySubGet({
memberId: `${id}`,
validateId: `${validateId}`,
});
let infoRes = null;
if (mode === 'myself') {
infoRes = await PublicApi.getMemberMainpageDetailGet();
} else {
infoRes = await PublicApi.getMemberAbilitySubGet({
memberId: `${id}`,
validateId: `${validateId}`,
});
}
if (infoRes.code !== 1000) {
return;
}
const {
memberTypeEnum,
groups = [],
areaCodes,
account,
channelLevelTag,
channelTypeName,
countryCode,
createTime,
currentStep,
levelTag,
memberId,
memberTypeName,
name,
outerHistory,
outerStatusName,
roleName,
verifySteps,
memberTypeEnum,
groups = [],
areaCodes,
account,
channelLevelTag,
channelTypeName,
countryCode,
createTime,
currentStep,
levelTag,
memberId,
memberTypeName,
name,
outerHistory,
outerStatusName,
roleName,
verifySteps,
...rest
}: any = infoRes.data;
// 注册资料处理
......@@ -101,9 +110,9 @@ const MemberForm: React.FC<MemberFormProps> = ({
if (channelRes.code !== 1000) {
return;
}
const {
areas = [],
channelTypes = [],
const {
areas = [],
channelTypes = [],
} = channelRes.data;
const areasOptions = areas.map(item => ({ label: item.name, value: item.code }));
......@@ -117,9 +126,9 @@ const MemberForm: React.FC<MemberFormProps> = ({
areaCodes.forEach((area, index) => {
const { pcode, ccode } = area;
const province = areas.find(item => item.code === pcode);
if (province && province.children) {
const citys =
const citys =
province.children.map((item: { code: string, name: string }) => ({ label: item.name, value: item.code }));
formActions.setFieldState(
`areas.${index}.ccode`,
......@@ -138,11 +147,11 @@ const MemberForm: React.FC<MemberFormProps> = ({
areaRef.current = areas;
setMemberInfo({
memberTypeId: memberTypeEnum,
...rest,
areas: areaCodes,
channelLevel: channelLevelTag,
...detail,
memberTypeId: memberTypeEnum,
...rest,
areas: areaCodes,
channelLevel: channelLevelTag,
...detail,
});
setInfoLoading(false);
......@@ -153,23 +162,31 @@ const MemberForm: React.FC<MemberFormProps> = ({
getDetailedInfo();
}, []);
useEffect(() => {
if (mode === "myself") {
formActions.setFieldState('tabs.tab-1.*', state => {
state.editable = false;
});
}
}, [mode])
const handleSubmit = (values: any) => {
const {
memberTypeId,
roleId,
level,
countryCodeId,
phone,
email,
channelLevel,
channelTypeId,
areas = [],
remark,
outerStatus,
status,
statusName,
...rest
const {
memberTypeId,
roleId,
level,
countryCodeId,
phone,
email,
channelLevel,
channelTypeId,
areas = [],
remark,
outerStatus,
status,
statusName,
...rest
} = values;
const filtered = areas.filter(item => item.pcode || item.ccode);
......@@ -177,22 +194,22 @@ const MemberForm: React.FC<MemberFormProps> = ({
if (!id && !isEdit) {
setSubmitLoading(true);
const msg = message.loading({
content: '正在添加,请稍候...',
content: '正在添加,请稍候...',
duration: 0,
});
PublicApi.postMemberAbilitySubAdd({
memberTypeId,
roleId,
level,
countryCodeId,
phone,
email,
channelTypeId,
areas: filtered,
remark,
detail: rest,
memberTypeId,
roleId,
level,
countryCodeId,
phone,
email,
channelTypeId,
areas: filtered,
remark,
detail: rest,
}, {
timeout: 0,
timeout: 0,
}).then(res => {
if (res.code !== 1000) {
return;
......@@ -207,28 +224,28 @@ const MemberForm: React.FC<MemberFormProps> = ({
});
return;
}
}
if (id && validateId && isEdit) {
setSubmitLoading(true);
const msg = message.loading({
content: '正在保存,请稍候...',
content: '正在保存,请稍候...',
duration: 0,
});
PublicApi.postMemberAbilitySubUpdate({
memberId: id,
validateId,
memberTypeId,
roleId,
level,
countryCodeId,
phone,
email,
channelTypeId,
areas: filtered,
remark,
detail: rest,
memberId: id,
validateId,
memberTypeId,
roleId,
level,
countryCodeId,
phone,
email,
channelTypeId,
areas: filtered,
remark,
detail: rest,
}, {
timeout: 0,
timeout: 0,
}).then(res => {
if (res.code !== 1000) {
return;
......@@ -242,6 +259,28 @@ const MemberForm: React.FC<MemberFormProps> = ({
setSubmitLoading(false);
});
}
if (mode === 'myself') {
setSubmitLoading(true);
const msg = message.loading({
content: '正在保存,请稍候...',
duration: 0,
});
PublicApi.postMemberMainpageDetailUpdate({
detail: rest,
}).then(({ data, code }) => {
if (code !== 1000) {
return;
}
setUnsaved(false);
setTimeout(() => {
history.push('/memberCenter/home')
}, 800);
}).finally(() => {
msg();
setSubmitLoading(false);
});
}
};
// 会员类型、注册手机下拉框
......@@ -251,8 +290,8 @@ const MemberForm: React.FC<MemberFormProps> = ({
if (res.code === 1000) {
const { data = {} }: any = res;
const {
memberTypes = [],
countryCodes = [],
memberTypes = [],
countryCodes = [],
} = data;
return {
......@@ -285,7 +324,7 @@ const MemberForm: React.FC<MemberFormProps> = ({
linkage.loaded('roleId');
});
});
// 根据会员类型
onFieldInputChange$('memberTypeId').subscribe(fieldState => {
if (!fieldState.value) {
......@@ -309,10 +348,10 @@ const MemberForm: React.FC<MemberFormProps> = ({
if (res.code !== 1000) {
return;
}
const {
channelLevelTag = '',
areas = [],
channelTypes = [],
const {
channelLevelTag = '',
areas = [],
channelTypes = [],
} = res.data;
formActions.setFieldState('tabs', state => {
state.props['x-component-props'] =
......@@ -356,7 +395,7 @@ const MemberForm: React.FC<MemberFormProps> = ({
}
});
});
// 手动触发改变的话重置等级下拉框
onFieldInputChange$('*(memberTypeId,roleId)').subscribe(() => {
linkage.value('level', undefined);
......@@ -371,15 +410,15 @@ const MemberForm: React.FC<MemberFormProps> = ({
setTimeout(() => {
const otherValue = formActions.getFieldState(otherName, state => state.value);
if (selfValue && otherValue) {
linkage.loading('level');
PublicApi.getMemberAbilitySubPageitemsLevel({
memberTypeId: selfName == 'memberTypeId' ? selfValue : otherValue,
roleId: selfName == 'memberTypeId' ? otherValue : selfValue,
memberTypeId: selfName == 'memberTypeId' ? selfValue : otherValue,
roleId: selfName == 'memberTypeId' ? otherValue : selfValue,
}, {
useCache: true,
useCache: true,
}).then(res => {
if (res.code === 1000) {
const { data = [] } = res;
......@@ -412,13 +451,13 @@ const MemberForm: React.FC<MemberFormProps> = ({
return (
<Spin spinning={infoLoading}>
<PageHeaderWrapper
<PageHeaderWrapper
style={{
padding: 24,
padding: 24,
}}
onBack={() => history.goBack()}
backIcon={<ReutrnEle description="返回" />}
title={!id ? '新建会员' : '编辑会员'}
title={!id && mode !== "myself" ? '新建会员' : '编辑会员'}
extra={[
<Button
key="1"
......@@ -460,4 +499,8 @@ const MemberForm: React.FC<MemberFormProps> = ({
);
};
MemberForm.defaultProps = {
mode: 'any',
}
export default MemberForm;
......@@ -10,4 +10,4 @@ const EditMember: React.FC = () => {
);
};
export default EditMember;
\ No newline at end of file
export default EditMember;
import React from 'react';
import { usePageStatus } from '@/hooks/usePageStatus';
import MemberForm from './components/MemberForm';
const EditMySelf: React.FC = () => {
const { id, validateId } = usePageStatus();
console.log(123);
return (
<MemberForm id={+id} validateId={+validateId} isEdit={true} mode={"myself"} />
);
};
export default EditMySelf;
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