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