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
linweijiong
jinfa-platform
Commits
39f20347
Commit
39f20347
authored
Jun 04, 2021
by
XieZhiXiong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
chore: 删除 会员审核 相关路由
parent
11a0e54c
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
0 additions
and
1930 deletions
+0
-1930
memberRoute.ts
config/routes/memberRoute.ts
+0
-88
menu.ts
src/locales/zh-CN/menu.ts
+0
-7
auditPr1.tsx
src/pages/member/memberPr1/auditPr1.tsx
+0
-14
index.less
src/pages/member/memberPr1/components/DetailInfo/index.less
+0
-0
index.tsx
src/pages/member/memberPr1/components/DetailInfo/index.tsx
+0
-259
index.less
src/pages/member/memberPr1/index.less
+0
-0
index.tsx
src/pages/member/memberPr1/index.tsx
+0
-264
pr1Detail.tsx
src/pages/member/memberPr1/pr1Detail.tsx
+0
-14
auditPr2.tsx
src/pages/member/memberPr2/auditPr2.tsx
+0
-14
index.less
src/pages/member/memberPr2/components/DetailInfo/index.less
+0
-0
index.tsx
src/pages/member/memberPr2/components/DetailInfo/index.tsx
+0
-260
index.less
src/pages/member/memberPr2/index.less
+0
-0
index.tsx
src/pages/member/memberPr2/index.tsx
+0
-264
pr2Detail.tsx
src/pages/member/memberPr2/pr2Detail.tsx
+0
-14
auditPrComfirm.tsx
src/pages/member/memberPrConfirm/auditPrComfirm.tsx
+0
-14
index.less
...s/member/memberPrConfirm/components/DetailInfo/index.less
+0
-0
index.tsx
...es/member/memberPrConfirm/components/DetailInfo/index.tsx
+0
-275
index.less
src/pages/member/memberPrConfirm/index.less
+0
-0
index.tsx
src/pages/member/memberPrConfirm/index.tsx
+0
-279
prComfirmDetail.tsx
src/pages/member/memberPrConfirm/prComfirmDetail.tsx
+0
-14
index.ts
src/pages/member/memberPrConfirm/schema/index.ts
+0
-150
No files found.
config/routes/memberRoute.ts
View file @
39f20347
...
...
@@ -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'
,
...
...
src/locales/zh-CN/menu.ts
View file @
39f20347
...
...
@@ -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'
:
'待审核入库资料详情'
,
...
...
src/pages/member/memberPr1/auditPr1.tsx
deleted
100644 → 0
View file @
11a0e54c
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
src/pages/member/memberPr1/components/DetailInfo/index.less
deleted
100644 → 0
View file @
11a0e54c
src/pages/member/memberPr1/components/DetailInfo/index.tsx
deleted
100644 → 0
View file @
11a0e54c
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
;
src/pages/member/memberPr1/index.less
deleted
100644 → 0
View file @
11a0e54c
src/pages/member/memberPr1/index.tsx
deleted
100644 → 0
View file @
11a0e54c
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
;
src/pages/member/memberPr1/pr1Detail.tsx
deleted
100644 → 0
View file @
11a0e54c
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
src/pages/member/memberPr2/auditPr2.tsx
deleted
100644 → 0
View file @
11a0e54c
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
src/pages/member/memberPr2/components/DetailInfo/index.less
deleted
100644 → 0
View file @
11a0e54c
src/pages/member/memberPr2/components/DetailInfo/index.tsx
deleted
100644 → 0
View file @
11a0e54c
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
;
src/pages/member/memberPr2/index.less
deleted
100644 → 0
View file @
11a0e54c
src/pages/member/memberPr2/index.tsx
deleted
100644 → 0
View file @
11a0e54c
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
;
src/pages/member/memberPr2/pr2Detail.tsx
deleted
100644 → 0
View file @
11a0e54c
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
src/pages/member/memberPrConfirm/auditPrComfirm.tsx
deleted
100644 → 0
View file @
11a0e54c
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
src/pages/member/memberPrConfirm/components/DetailInfo/index.less
deleted
100644 → 0
View file @
11a0e54c
src/pages/member/memberPrConfirm/components/DetailInfo/index.tsx
deleted
100644 → 0
View file @
11a0e54c
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
;
src/pages/member/memberPrConfirm/index.less
deleted
100644 → 0
View file @
11a0e54c
src/pages/member/memberPrConfirm/index.tsx
deleted
100644 → 0
View file @
11a0e54c
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
;
src/pages/member/memberPrConfirm/prComfirmDetail.tsx
deleted
100644 → 0
View file @
11a0e54c
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
src/pages/member/memberPrConfirm/schema/index.ts
deleted
100644 → 0
View file @
11a0e54c
/*
* @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
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