Skip to content
Toggle navigation
Toggle navigation
This project
Loading...
Sign in
杨炀
/
ztx_wx_admin
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
f9c6474d
authored
2023-10-21 16:14:40 +0800
by
杨炀
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
no message
1 parent
759d9885
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
1263 additions
and
370 deletions
common/api.js
common/mystyle.scss
config.js
pages.json
pages/group/apply/applyDetail.vue
pages/group/applyList.vue → pages/group/apply/applyList.vue
pages/group/apply/record.vue
pages/index/index.vue
pages/index/perfect.vue
pages/level/addApply.vue
pages/level/apply.vue
pages/level/approval.vue
pages/level/chooseExaminer.vue
pages/personalVip/auditDetail.vue
pages/personalVip/list.vue
pages/personalVip/paymentDetail.vue
pages/personalVip/vipList.vue
common/api.js
View file @
f9c6474
...
...
@@ -321,6 +321,56 @@ function addLevelInfo(data) {
params
:
data
})
}
function
chooseStudentsList
(
query
)
{
return
request
({
url
:
'/person/info/chooseStudentsList'
,
method
:
'get'
,
params
:
query
})
}
function
batchChoose
(
data
)
{
return
request
({
url
:
'/exam/person/batch/choose'
,
method
:
'post'
,
params
:
data
})
}
function
editLevel
(
data
)
{
return
request
({
url
:
'/exam/person/editLevel'
,
method
:
'put'
,
params
:
data
})
}
function
getVerityList
(
params
)
{
return
request
({
url
:
'/exam/info/verityList'
,
method
:
'get'
,
params
:
params
})
}
function
getGroupHistoryByRelateId
(
id
)
{
return
request
({
url
:
`/member/certified/getHistoryByRelateId/
${
id
}
`
,
method
:
'get'
})
}
// 创建自己的团队
function
createMyMember
(
data
)
{
return
request
({
url
:
'/member/info/createMyMember'
,
method
:
'post'
,
params
:
data
})
}
function
doVerity
(
data
)
{
return
request
({
url
:
`/exam/info/verity`
,
method
:
'put'
,
params
:
data
})
}
export
{
getMessage
,
...
...
@@ -357,5 +407,8 @@ export {
getLevelApplyInfo
,
getStudentList
,
getApprovalRecord
,
submitVerity
,
getCoachList
,
updateLevelInfo
,
addLevelInfo
updateLevelInfo
,
addLevelInfo
,
chooseStudentsList
,
batchChoose
,
getVerityList
,
getGroupHistoryByRelateId
,
createMyMember
,
doVerity
}
\ No newline at end of file
...
...
common/mystyle.scss
View file @
f9c6474
...
...
@@ -5,6 +5,7 @@ page {
}
.esp
{
text-overflow
:
ellipsis
;
overflow
:
hidden
;
white-space
:
nowrap
;}
.flexbox
{
display
:
flex
;}
.mt30
{
margin-top
:
30rpx
;}
.mt40
{
margin-top
:
40rpx
;}
.mt50
{
margin-top
:
50rpx
;}
.align-forms-item-placeHolder
{
color
:
#999
;
line-height
:
2
.6
;}
...
...
@@ -55,7 +56,11 @@ font-size: 24rpx;}
}
.btn-red-kx
{
background-color
:
#fff
;
border
:
1px
solid
#AD181F
;
color
:
#AD181F
;}
color
:
#AD181F
;
}
.btn-red-kx.mini
{
font-size
:
30rpx
;
line-height
:
2
;
border-radius
:
30px
;}
/* 底部固定按钮 */
.fixedBottom
{
background
:
#fff
;
height
:
150rpx
;
box-shadow
:
0px
-2rpx
10rpx
0px
#e8e8e8
;
padding
:
30rpx
0
0
;
...
...
@@ -325,3 +330,24 @@ color: #7D8592;}
display
:
block
;
font-size
:
14px
;
}
.bgbg
{
padding
:
0
0
60rpx
;
color
:
#fff
;
background
:
#C40F18
;
}
.girdBox
{
display
:
flex
;
flex-wrap
:
wrap
;
padding
:
0
0
40rpx
;
background
:
#FFFFFF
;
position
:
relative
;
top
:
-30rpx
;
border-radius
:
20rpx
20rpx
0rpx
0rpx
;
view
{
width
:
25%
;
text-align
:
center
;
font-size
:
24rpx
;
color
:
#434343
;
image
{
width
:
20vw
;
height
:
20vw
;
display
:
block
;
margin
:
auto
;}
}
}
...
...
config.js
View file @
f9c6474
...
...
@@ -3,7 +3,7 @@
// staging
const
baseUrl_api
=
"http://192.168.1.9
6
:8787"
;
const
baseUrl_api
=
"http://192.168.1.9
7
:8787"
;
const
fileUrl_api
=
"http://192.168.1.11:8787"
;
export
default
{
...
...
pages.json
View file @
f9c6474
...
...
@@ -288,7 +288,7 @@
}
,{
"path"
:
"pages/group/applyList"
,
"path"
:
"pages/group/apply
/apply
List"
,
"style"
:
{
"navigationBarTitleText"
:
"团体会员审核"
,
...
...
@@ -341,6 +341,24 @@
}
}
,{
"path"
:
"pages/group/apply/applyDetail"
,
"style"
:
{
"navigationBarTitleText"
:
"团体会员审核详情"
,
"enablePullDownRefresh"
:
false
}
}
,{
"path"
:
"pages/group/apply/record"
,
"style"
:
{
"navigationBarTitleText"
:
"审核记录"
,
"enablePullDownRefresh"
:
false
}
}
],
"globalStyle"
:
{
"navigationStyle"
:
"custom"
,
...
...
pages/group/apply/applyDetail.vue
0 → 100644
View file @
f9c6474
<
template
>
<view
class=
"hasfixedbottom"
>
<view
class=
"wBox"
>
<view
class=
"tt"
>
{{
form
.
name
}}
</view>
<!-- 成员 -->
<view
class=
"userlist"
>
<view
class=
"item"
v-for=
"n in list"
>
<view
class=
"photobox"
>
<view
class=
"colorful"
>
{{
n
.
perName
?.
slice
(
0
,
1
)
}}
</view>
</view>
<view>
<view
class=
"name"
>
{{
n
.
perName
}}
</view>
<view
class=
"date"
>
申请调入一级协会
{{
n
.
sourceShenDeptName
||
'--'
}}
</view>
<view
class=
"date"
>
申请调入单位
{{
n
.
targetDeptName
||
'--'
}}
</view>
</view>
</view>
</view>
</view>
<view
class=
"h3-padding"
>
审核流程
</view>
<view
class=
"wBox"
>
<view
class=
"stepItem"
v-for=
"(n,index) in auditLog"
>
<view
class=
"time"
>
{{
n
.
auditTime
||
'待审批'
}}
</view>
<view
class=
"content"
>
<view
class=
"status"
>
<text
v-if=
"n.auditResult==1"
class=
"text-success"
>
审核通过
</text>
<text
v-if=
"n.auditResult==2"
class=
"text-danger"
>
审核拒绝
</text>
<text
v-if=
"n.auditResult==0"
class=
"text-primary"
>
审核中
</text>
</view>
<!--
<view
class=
"name"
>
第
{{
index
+
1
}}
步
</view>
-->
<view
class=
"deptName"
>
{{
n
.
auditDeptName
}}
</view>
<view
v-if=
"n.auditResult==2"
>
备注:
{{
n
.
auditMsg
||
'/'
}}
</view>
</view>
</view>
</view>
<view
class=
"fixedBottom"
v-if=
"(deptType == 1)&&form.ztxRes == 0"
>
<button
class=
"btn-red-kx"
@
click=
"audit(form.id,'2')"
>
拒绝
</button>
<button
class=
"btn-red"
@
click=
"audit(form.id,'1')"
>
同意
</button>
</view>
<view
class=
"fixedBottom"
v-if=
"(deptType == 2 || deptType == 3)&&form.shenRes == 0"
>
<button
class=
"btn-red-kx"
@
click=
"audit(form.id,'2')"
>
拒绝
</button>
<button
class=
"btn-red"
@
click=
"audit(form.id,'1')"
>
同意
</button>
</view>
</view>
</
template
>
<
script
setup
>
import
*
as
api
from
'@/common/api.js'
import
config
from
'@/config.js'
import
{
onMounted
,
ref
}
from
'vue'
import
{
onLoad
}
from
'@dcloudio/uni-app'
const
app
=
getApp
();
const
queryParams
=
ref
({})
const
form
=
ref
({})
const
list
=
ref
([])
const
auditLog
=
ref
([])
const
feelList
=
ref
([])
const
total
=
ref
(
0
)
const
totalYear
=
ref
(
0
)
const
deptType
=
ref
()
let
rangeId
=
''
onLoad
((
option
)
=>
{
rangeId
=
option
.
rangeId
if
(
'auditLog'
in
option
)
{
auditLog
.
value
=
JSON
.
parse
(
decodeURIComponent
(
option
.
auditLog
))
}
if
(
'form'
in
option
)
{
form
.
value
=
JSON
.
parse
(
decodeURIComponent
(
option
.
form
))
}
console
.
log
(
form
.
value
)
if
(
app
.
globalData
.
isLogin
)
{
init
()
}
else
{
app
.
firstLoadCallback
=
()
=>
{
init
()
};
}
})
function
init
()
{
deptType
.
value
=
app
.
globalData
.
deptType
getForm
()
}
function
getForm
()
{
uni
.
showLoading
({
title
:
'加载中'
})
api
.
getTransferList
({
rangeId
:
rangeId
}).
then
(
res
=>
{
uni
.
hideLoading
()
list
.
value
=
res
.
rows
})
}
function
audit
(
rangeId
,
flag
)
{
if
(
flag
==
'2'
)
{
// 拒绝
// 弹出框填写理由
uni
.
showModal
({
title
:
'请输入拒绝理由'
,
editable
:
true
,
success
:
function
(
res
)
{
if
(
res
.
confirm
)
{
if
(
!
res
.
content
)
{
uni
.
showToast
({
title
:
'请输入拒绝理由'
,
icon
:
'none'
})
}
else
{
doApproval
(
rangeId
,
flag
,
res
.
content
)
}
}
}
})
}
else
if
(
flag
==
'1'
)
{
// 二次确认
uni
.
showModal
({
title
:
'提示'
,
content
:
`确定审批通过吗`
,
success
:
function
(
res
)
{
if
(
res
.
confirm
)
{
doApproval
(
rangeId
,
flag
)
}
}
})
}
}
function
doApproval
(
rangeId
,
flag
,
reason
)
{
var
obj
=
{
flag
:
flag
,
reason
:
reason
||
''
,
rangeIds
:
rangeIds
}
console
.
log
(
obj
)
api
.
mobilizeAudit
(
obj
).
then
((
res
)
=>
{
uni
.
showToast
({
title
:
'操作成功'
,
icon
:
'none'
})
uni
.
navigateBack
()
})
}
</
script
>
<
style
scoped
lang=
"scss"
>
.wBox
{
width
:
700
rpx
;
padding
:
30
rpx
;
margin
:
20
rpx
auto
0
;
background
:
#FFFFFF
;
box-shadow
:
0
rpx
12
rpx
116
rpx
0
rpx
rgba
(
196
,
203
,
214
,
0.1
);
border-radius
:
15
rpx
;
.tt
{
color
:
#0A1629
;
font-size
:
30
rpx
;
}
}
.userlist
{
.item
{
border-bottom
:
1px
dashed
#e5e5e5
;
position
:
relative
;
.date
{
margin-top
:
10
rpx
;
}
.name
{
text
{
margin-left
:
1em
;
color
:
#4C5359
;
font-size
:
26
rpx
;
}
}
.nian
{
position
:
absolute
;
right
:
0
;
font-size
:
30
rpx
;
color
:
#AD181F
;
}
}
}
.info
{
display
:
flex
;
margin
:
30
rpx
0
20
rpx
;
font-size
:
28
rpx
;
view
{
color
:
#7D8592
;
margin-right
:
20
rpx
;
}
}
.fixedBottom
{
justify-content
:
center
;
button
{
margin
:
0
20
rpx
;
width
:
286
rpx
;
}
.btn-red
{
width
:
286
rpx
;
}
}
</
style
>
\ No newline at end of file
pages/group/applyList.vue
→
pages/group/apply
/apply
List.vue
View file @
f9c6474
...
...
@@ -19,15 +19,19 @@
缴费单位
<view>
{{
item
.
content
.
memberName
}}
</view>
</view>
<view>
会员合计
<view>
{{
item
.
content
.
allCount
}}
</view>
<view
v-if=
"userType = '3'"
>
所属省份
<view>
{{
item
.
content
.
province
}}
</view>
</view>
<view>
新会员合计
年限
<view>
{{
item
.
content
.
renewYear
}}
</view>
</view>
<view>
<view
v-if=
"deptType == 1"
>
团体会员/新会员
<view>
{{
item
.
content
.
allCount
}}
/
{{
item
.
content
.
newCount
}}
</view>
</view>
<view
v-if=
"deptType == 1"
>
费用合计
<view>
{{
(
item
?.
content
?.
allFee
*
1
).
toFixed
(
2
)
}}
</view>
</view>
...
...
@@ -71,7 +75,8 @@
const
current
=
ref
()
const
list
=
ref
([])
const
total
=
ref
(
0
)
const
deptType
=
ref
(
''
)
const
deptType
=
ref
(
''
)
const
userType
=
ref
(
''
)
onLoad
(()
=>
{
if
(
app
.
globalData
.
isLogin
)
{
init
()
...
...
@@ -84,7 +89,8 @@
})
function
init
()
{
deptType
.
value
=
app
.
globalData
.
deptType
deptType
.
value
=
app
.
globalData
.
deptType
userType
.
value
=
app
.
globalData
.
userType
getList
()
}
...
...
@@ -171,11 +177,22 @@
function
goDetail
(
item
)
{
const
auditLog
=
encodeURIComponent
(
JSON
.
stringify
(
item
.
auditLog
))
const
form
=
encodeURIComponent
(
JSON
.
stringify
(
item
))
let
path
=
`/pages/personalVip/mobilizeDetail?rangeId=
${
item
.
id
}
&auditLog=
${
auditLog
}
&form=
${
form
}
`
uni
.
navigateTo
({
url
:
path
});
if
(
userType
.
value
==
'1'
){
// 查看
let
path
=
`/pages/group/apply/applyDetail?rangeId=
${
item
.
id
}
&auditLog=
${
auditLog
}
&form=
${
form
}
`
uni
.
navigateTo
({
url
:
path
});
}
else
if
(
userType
.
value
==
'3'
){
// 审核记录
let
path
=
`/pages/group/apply/record?certId=
${
item
.
content
.
certId
}
`
uni
.
navigateTo
({
url
:
path
});
}
}
</
script
>
...
...
pages/group/apply/record.vue
0 → 100644
View file @
f9c6474
<
template
>
<view
class=
"hasfixedbottom"
>
<view
class=
"h3-padding"
>
审核记录
</view>
<view
class=
"wBox"
>
<view
class=
"stepItem"
v-for=
"(n,index) in list"
>
<view
class=
"time"
>
{{
n
.
handleDate
||
'待审批'
}}
</view>
<view
class=
"content"
>
<view
class=
"status"
>
<text
v-if=
"n.auditStatus==0"
class=
"text-primary"
>
审核中
</text>
<text
v-if=
"n.auditStatus==1"
class=
"text-success"
>
审核通过
</text>
<text
v-if=
"n.auditStatus==2"
class=
"text-danger"
>
审核拒绝
</text>
<text
v-if=
"n.auditStatus==3"
class=
"text-warning"
>
已撤回
</text>
<text
v-if=
"n.auditStatus==100"
class=
"text-primary"
>
审核中
</text>
</view>
<!--
<view
class=
"name"
>
第
{{
index
+
1
}}
步
</view>
-->
<view
class=
"deptName"
>
{{
n
.
handlerDeptName
}}
</view>
<view
v-if=
"n.reason"
>
备注:
{{
n
.
reason
}}
</view>
</view>
</view>
</view>
</view>
</
template
>
<
script
setup
>
import
*
as
api
from
'@/common/api.js'
import
config
from
'@/config.js'
import
{
onMounted
,
ref
}
from
'vue'
import
{
onLoad
}
from
'@dcloudio/uni-app'
const
app
=
getApp
();
const
list
=
ref
([])
const
total
=
ref
(
0
)
const
deptType
=
ref
()
let
certId
=
''
onLoad
((
option
)
=>
{
certId
=
option
.
certId
if
(
app
.
globalData
.
isLogin
)
{
init
()
}
else
{
app
.
firstLoadCallback
=
()
=>
{
init
()
};
}
})
function
init
()
{
deptType
.
value
=
app
.
globalData
.
deptType
getList
()
}
function
getList
()
{
uni
.
showLoading
({
title
:
'加载中'
})
api
.
getGroupHistoryByRelateId
(
certId
).
then
(
res
=>
{
uni
.
hideLoading
()
list
.
value
=
res
.
data
})
}
</
script
>
<
style
scoped
lang=
"scss"
>
.wBox
{
width
:
700
rpx
;
padding
:
30
rpx
;
margin
:
20
rpx
auto
0
;
background
:
#FFFFFF
;
box-shadow
:
0
rpx
12
rpx
116
rpx
0
rpx
rgba
(
196
,
203
,
214
,
0.1
);
border-radius
:
15
rpx
;
.tt
{
color
:
#0A1629
;
font-size
:
30
rpx
;
}
}
.userlist
{
.item
{
border-bottom
:
1px
dashed
#e5e5e5
;
position
:
relative
;
.date
{
margin-top
:
10
rpx
;
}
.name
{
text
{
margin-left
:
1em
;
color
:
#4C5359
;
font-size
:
26
rpx
;
}
}
.nian
{
position
:
absolute
;
right
:
0
;
font-size
:
30
rpx
;
color
:
#AD181F
;
}
}
}
.info
{
display
:
flex
;
margin
:
30
rpx
0
20
rpx
;
font-size
:
28
rpx
;
view
{
color
:
#7D8592
;
margin-right
:
20
rpx
;
}
}
.fixedBottom
{
justify-content
:
center
;
button
{
margin
:
0
20
rpx
;
width
:
286
rpx
;
}
.btn-red
{
width
:
286
rpx
;
}
}
</
style
>
\ No newline at end of file
pages/index/index.vue
View file @
f9c6474
<
template
>
<view
class=
"page"
>
<view>
<view
class=
"welcome"
>
您好!
<br
/>
欢迎使用中跆协会员管理系统
</view>
<view
class=
"bgbg"
>
<view
class=
"welcome"
>
您好!
<!--
{{
memberInfo
.
name
}}
-->
<br
/>
欢迎使用中跆协会员管理系统
</view>
<view
class=
"flexbox"
>
<!-- userType 1:中跆协 2:省 3:市区 4:道馆-->
<!-- 4 -->
...
...
@@ -9,24 +11,35 @@
<view
v-if=
"userType=='4'"
@
click=
"goPath('/pages/personalVip/payment')"
>
会员缴费
</view>
<view
v-if=
"userType=='2'"
@
click=
"goPath('/pages/personalVip/feeBill')"
>
会员缴费单
</view>
<!-- 3 2 1-->
<view
v-if=
"userType!='4'"
@
click=
"goPath('/pages/personalVip/audit')"
>
缴费审核
</view>
<view
v-if=
"userType!='4'"
@
click=
"goPath('/pages/personalVip/audit')"
>
缴费审核
</view>
<!-- 都有 -->
<view
@
click=
"goPath('/pages/personalVip/list')"
>
会员查询
</view>
</view>
</view>
<view>
<view
v-if=
"userType!='3'"
@
click=
"goPath('/pages/personalVip/mobilize')"
>
会员调动
</view>
<view
v-if=
"userType!='4'"
@
click=
"goPath('/pages/group/list')"
>
团体会员查询
</view>
<view
v-if=
"userType!='4'"
@
click=
"goPath('/pages/group/applyList')"
>
团体会员审核
</view>
<view
v-if=
"userType=='2'"
@
click=
"goPath('/pages/group/pay')"
>
团体会员认证
</view>
<view
v-if=
"userType=='4'"
@
click=
"goPath('/pages/level/apply')"
>
级位考试申请
</view>
<view
v-if=
"userType!='4'"
@
click=
"goPath('/pages/level/approval')"
>
级位考试审核
</view>
<view
class=
"girdBox"
>
<view
v-if=
"userType!='3'"
@
click=
"goPath('/pages/personalVip/mobilize')"
>
<image
/>
会员调动
</view>
<view
v-if=
"userType!='4'"
@
click=
"goPath('/pages/group/list')"
>
<image
/>
团体会员查询
</view>
<view
v-if=
"userType!='4'"
@
click=
"goPath('/pages/group/apply/applyList')"
>
<image
/>
团体会员审核
</view>
<view
v-if=
"userType=='2'"
@
click=
"goPath('/pages/group/pay')"
>
<image
/>
团体会员认证
</view>
<view
v-if=
"userType=='4'"
@
click=
"goPath('/pages/level/apply')"
>
<image
/>
级位考试申请
</view>
<view
v-if=
"userType!='4'"
@
click=
"goPath('/pages/level/approval')"
>
<image
/>
级位考试审核
</view>
</view>
<uni-section
title=
"待办提醒"
padding
>
<template
v-slot:right
>
...
...
@@ -37,10 +50,10 @@
<text
class=
"dot"
:class=
"n.readFlag=='1'?'done':''"
></text>
<view
class=
"tt esp"
>
{{n.name}}
</view>
<view
class=
"date"
>
{{n.createTime}}
</view>
</view>
<view
class=
"nodata"
v-if=
"messageList.length==0"
>
<image
mode=
"aspectFit"
src=
"/static/nodata.png"
></image>
<text>
暂无数据
</text>
</view>
<view
class=
"nodata"
v-if=
"messageList.length==0"
>
<image
mode=
"aspectFit"
src=
"/static/nodata.png"
></image>
<text>
暂无数据
</text>
</view>
</view>
</uni-section>
...
...
@@ -67,46 +80,27 @@
}
=
getCurrentInstance
()
const
app
=
getApp
();
const
userType
=
ref
(
'1'
)
const
memberInfo
=
ref
({})
let
proId
;
const
svId
=
ref
(
null
);
const
list
=
ref
([
{
url
:
''
,
text
:
'段位考试申请'
},
{
url
:
''
,
text
:
'段位考试审核'
},
{
url
:
''
,
text
:
'级位证书发送'
},
{
url
:
''
,
text
:
'段位证书发送'
}
]);
const
messageList
=
ref
([])
onShow
(()
=>
{
if
(
app
.
globalData
.
isLogin
)
{
init
()
}
else
{
app
.
firstLoadCallback
=
()
=>
{
init
()
};
}
})
onLoad
(
option
=>
{
if
(
option
.
scene
)
{
proId
=
decodeURIComponent
(
option
.
scene
);
}
else
{
proId
=
option
.
proId
;
}
});
function
goPath
(
path
)
{
...
...
@@ -144,78 +138,83 @@
});
}
function
init
()
{
uni
.
showLoading
({
title
:
'加载中'
function
init
()
{
uni
.
showLoading
({
title
:
'加载中'
});
loginServer
.
getMyOwnMemberInfo
().
then
(
res
=>
{
userType
.
value
=
app
.
globalData
.
userType
if
(
userType
.
value
!=
'1'
&&
app
.
globalData
.
authenticationStatus
!=
'2'
&&
app
.
globalData
.
authenticationStatus
!=
'4'
){
// 注册引导
uni
.
navigateTo
({
url
:
'/pages/index/perfect'
});
}
else
{
getMes
()
}
uni
.
hideLoading
();
})
// loginServer.getMyOwnMemberInfo().then(res=>{
userType
.
value
=
app
.
globalData
.
userType
memberInfo
.
value
=
app
.
globalData
.
memberInfo
console
.
log
(
userType
.
value
,
app
.
globalData
.
authenticationStatus
)
if
(
userType
.
value
!=
'1'
&&
app
.
globalData
.
authenticationStatus
!=
'2'
&&
app
.
globalData
.
authenticationStatus
!=
'4'
)
{
// 注册引导
// uni.navigateTo({
// url: '/pages/index/perfect'
// });
}
else
{
getMes
()
}
uni
.
hideLoading
();
// })
}
function
getMes
(){
api
.
getMessage
({
pageNum
:
1
,
pageSize
:
10
}).
then
(
res
=>
{
if
(
res
.
rows
&&
res
.
rows
.
length
>
0
)
for
(
var
d
of
res
.
rows
)
{
switch
(
d
.
type
)
{
case
30001
:
d
.
name
=
'你有一条会员缴费等待审批,点击去处理!'
d
.
path
=
'/personalVip/audit'
break
case
30002
:
d
.
name
=
'你有一条级位考试等待审批,点击去处理!'
d
.
path
=
'/level/approval'
break
case
30003
:
d
.
name
=
'你有一条段位考试等待审批,点击去处理!'
d
.
path
=
'/rank/approval'
break
case
30004
:
d
.
name
=
'你有一条会员调动等待审批,点击去处理!'
d
.
path
=
'/personalVip/mobillize'
break
case
30005
:
d
.
name
=
'你有一条团体会员认证等待审批,点击去处理!'
d
.
path
=
'/group/authentication'
break
case
30006
:
d
.
name
=
'你有一条段位成绩等待审批,点击去处理!'
d
.
path
=
'/rank/scoreApproval'
break
case
40001
:
d
.
name
=
'你有一条级位申请待提交,点击去处理!'
d
.
path
=
`/level/apply/modify?id=
${
d
.
eventId
}
`
break
case
40002
:
d
.
name
=
'你有一条段位申请待提交,点击去处理!'
d
.
path
=
`/rank/apply/modify?id=
${
d
.
eventId
}
`
break
case
40003
:
d
.
name
=
'你有一条成绩维护的数据待提交,点击去处理!'
d
.
path
=
`/rank/score/modify?id=
${
d
.
eventId
}
`
break
case
50001
:
d
.
name
=
'你有一条新的个人会员申请,点击去处理!'
d
.
path
=
'/personalVip/approvalList'
break
}
}
messageList
.
value
=
res
.
rows
})
}
function
getMes
()
{
api
.
getMessage
({
pageNum
:
1
,
pageSize
:
10
}).
then
(
res
=>
{
if
(
res
.
rows
&&
res
.
rows
.
length
>
0
)
for
(
var
d
of
res
.
rows
)
{
switch
(
d
.
type
)
{
case
30001
:
d
.
name
=
'你有一条会员缴费等待审批,点击去处理!'
d
.
path
=
'/pages/personalVip/audit'
break
case
30002
:
d
.
name
=
'你有一条级位考试等待审批,点击去处理!'
d
.
path
=
'/pages/level/approval'
break
case
30003
:
d
.
name
=
'你有一条段位考试等待审批,点击去处理!'
d
.
path
=
'/pages/rank/approval'
break
case
30004
:
d
.
name
=
'你有一条会员调动等待审批,点击去处理!'
d
.
path
=
'/pages/personalVip/mobillize'
break
case
30005
:
d
.
name
=
'你有一条团体会员认证等待审批,点击去处理!'
d
.
path
=
'/pages/group/authentication'
break
case
30006
:
d
.
name
=
'你有一条段位成绩等待审批,点击去处理!'
d
.
path
=
'/pages/rank/scoreApproval'
break
case
40001
:
d
.
name
=
'你有一条级位申请待提交,点击去处理!'
d
.
path
=
`/pages/level/apply/modify?id=
${
d
.
eventId
}
`
break
case
40002
:
d
.
name
=
'你有一条段位申请待提交,点击去处理!'
d
.
path
=
`/pages/rank/apply/modify?id=
${
d
.
eventId
}
`
break
case
40003
:
d
.
name
=
'你有一条成绩维护的数据待提交,点击去处理!'
d
.
path
=
`/pages/rank/score/modify?id=
${
d
.
eventId
}
`
break
case
50001
:
d
.
name
=
'你有一条新的个人会员申请,点击去处理!'
d
.
path
=
'/pages/personalVip/approvalList'
break
}
}
messageList
.
value
=
res
.
rows
})
}
function
readMessage
(
item
)
{
uni
.
navigateTo
({
url
:
item
.
path
...
...
pages/index/perfect.vue
View file @
f9c6474
<
template
>
<view>
<view
class=
"pd30"
>
<uni-steps
:options=
"list1"
:active=
"active"
/>
<view>
<uni-forms
ref=
"baseForm"
:modelValue=
"baseFormData"
label-width=
"100"
>
<uni-forms-item
label=
"所属协会"
required
><uni-easyinput
v-model=
"baseFormData.name"
:disabled=
"!editIng"
placeholder=
"所属协会"
/></uni-forms-item>
<uni-forms-item
label=
"机构名称"
required
><uni-easyinput
v-model=
"baseFormData.name"
:disabled=
"!editIng"
placeholder=
"机构名称"
/></uni-forms-item>
<uni-forms-item
label=
"单位类型"
required
>
<uni-data-select
:disabled=
"!editIng"
v-model=
"baseFormData.type"
:localdata=
"typeList"
></uni-data-select>
</uni-forms-item>
<uni-forms-item
label=
"联系人"
required
>
<uni-easyinput
v-model=
"baseFormData.contactPerson"
:disabled=
"!editIng"
placeholder=
"请输入联系人姓名"
/>
</uni-forms-item>
<uni-forms-item
label=
"联系方式"
required
>
<uni-easyinput
v-model=
"baseFormData.contactTelno"
:disabled=
"!editIng"
placeholder=
"请输入联系方式"
/>
<view
class=
"pd30"
style=
"padding: 30rpx 30rpx 180rpx;"
>
<uni-steps
:options=
"list1"
:active=
"active"
/>
<view
class=
"wBox"
v-if=
"active == 0"
>
<uni-forms
ref=
"baseForm"
:modelValue=
"form"
label-width=
"100"
>
<uni-forms-item
label=
"单位名称"
required
>
<uni-easyinput
v-model=
"form.baseName"
:disabled=
"!editIng"
placeholder=
"单位名称"
/></uni-forms-item>
<uni-forms-item
label=
"单位类型"
required
>
<uni-data-select
:disabled=
"!editIng"
v-model=
"form.type"
:localdata=
"typeList"
></uni-data-select>
</uni-forms-item>
<uni-forms-item
label=
"联系人"
required
>
<uni-easyinput
v-model=
"form.contact"
:disabled=
"!editIng"
placeholder=
"请输入联系人姓名"
/>
</uni-forms-item>
<uni-forms-item
label=
"联系方式"
required
>
<uni-easyinput
v-model=
"form.phone"
:disabled=
"!editIng"
placeholder=
"请输入联系方式"
/>
</uni-forms-item>
<uni-forms-item
label=
"所属省份"
required
>
<uni-data-select
v-if=
"editIng"
v-model=
"form.belongProvinceId"
:localdata=
"options"
></uni-data-select>
</uni-forms-item>
<uni-forms-item
label=
"地址"
required
>
<uni-data-select
v-if=
"editIng"
v-model=
"form.coordinates1"
:localdata=
"options"
></uni-data-select>
</uni-forms-item>
<uni-forms-item
label=
"详细地址"
required
><uni-easyinput
v-model=
"form.siteAddress"
:disabled=
"!editIng"
placeholder=
"请输入详细地址"
type=
'textarea'
/></uni-forms-item>
<uni-forms-item
label=
"机构介绍"
required
><uni-easyinput
v-model=
"form.introduce"
placeholder=
"请输入机构介绍"
:disabled=
"!editIng"
type=
'textarea'
/></uni-forms-item>
</uni-forms>
<view
class=
"fixedBottom"
>
<button
class=
"btn-red"
@
click=
"submit()"
>
提交,下一步
</button>
</view>
</view>
<view
class=
"wBox"
v-if=
"active == 1"
>
<view>
<view>
认证状态:
<text
v-if=
"authenticationStatusa == 0 ||!authenticationStatusa"
class=
"text-danger"
>
未认证
</text>
<text
v-if=
"authenticationStatusa == 1"
class=
"text-success"
>
认证中
</text>
<text
v-if=
"authenticationStatusa == 2"
class=
"text-success"
>
已认证
</text>
<text
v-if=
"authenticationStatusa == 3"
class=
"text-danger"
>
认证未通过
</text>
<text
v-if=
"authenticationStatusa == 4"
class=
"text-danger"
>
即将过期
</text>
<text
v-if=
"authenticationStatusa == 5"
class=
"text-danger"
>
已过期
</text>
</view>
<view>
<button
v-if=
"authenticationStatusa==2"
type=
"primary"
:disabled=
"!result"
@
click=
"audioFN1"
>
去缴费
</button>
<button
v-if=
"authenticationStatusa!=2"
type=
"primary"
:disabled=
"!result"
@
click=
"audioFN2"
>
去认证
</button>
<button
v-if=
"form.deptType!=2"
type=
"primary"
@
click=
"auditEditFN"
>
审核详情
</button>
</view>
</view>
<uni-forms>
<uni-forms-item
label=
"选择所属协会"
required
>
<uni-data-select
:disabled=
"!editIng"
v-model=
"form.parentId"
:localdata=
"typeList"
@
change=
"changCase"
></uni-data-select>
</uni-forms-item>
<uni-forms-item
label=
"所在地区"
required
>
<uni-data-picker
v-if=
"editIng"
class=
"fixUniFormItemStyle"
:clear-icon=
"!editIng"
v-model=
"regionArr"
@
change=
"onchangeRegionId"
:localdata=
"regionsList"
popup-title=
"请选择所在地区"
></uni-data-picker>
<uni-easyinput
v-model=
"baseFormData.regionStr"
v-else
disabled
/>
<uni-forms-item
label=
"机构名称"
required
>
<uni-easyinput
v-model=
"form.name"
:disabled=
"!editIng"
placeholder=
"请输入机构名称"
/>
</uni-forms-item>
<uni-forms-item
label=
"详细地址"
required
><uni-easyinput
v-model=
"baseFormData.address"
:disabled=
"!editIng"
placeholder=
"请输入详细地址"
/></uni-forms-item>
</uni-forms>
<view
class=
"fixedBottom"
>
<button
class=
"btn-red"
@
click=
"saveMyteam()"
>
下一步
</button>
</view>
</uni-forms>
</view>
</view>
</view>
...
...
@@ -48,18 +81,26 @@
onLoad
,
onShow
}
from
'@dcloudio/uni-app'
;
import
{
tagList
,
typeList
,
comList
}
from
'@/static/js/data'
;
import
config
from
'@/config.js'
const
app
=
getApp
();
const
baseFormData
=
ref
({
const
form
=
ref
({
type
:
'1'
});
const
dataList
=
ref
([]);
const
memberList
=
ref
([]);
const
typeList
=
ref
([{
value
:
'1'
,
text
:
'企业'
},
{
value
:
'1'
,
text
:
'国家组织'
},
{
value
:
'1'
,
text
:
'社会组织'
},
{
value
:
'1'
,
text
:
'其他'
}])
const
options
=
ref
([])
const
regionArr
=
ref
();
const
regionsList
=
ref
([]);
const
ranksList
=
ref
([]);
...
...
@@ -74,184 +115,129 @@
type
:
0
});
const
active
=
ref
(
0
)
const
memberInfo
=
ref
({})
const
authenticationStatus
=
ref
()
const
list1
=
ref
([{
title
:
'完善信息'
},
{
title
:
'会员认证'
}])
title
:
'完善信息'
},
{
title
:
'会员认证'
}])
onLoad
(
option
=>
{
console
.
log
(
option
)
getRegionsList
();
getDetail
()
if
(
app
.
globalData
.
isLogin
)
{
init
()
}
else
{
app
.
firstLoadCallback
=
()
=>
{
init
()
};
}
});
function
getDetail
(){
api
.
getMyOwnMemberInfo
().
then
(
res
=>
{
if
(
!
res
.
data
.
memberInfo
)
res
.
data
.
memberInfo
=
{}
baseFormData
.
value
=
res
.
data
.
memberInfo
baseFormData
.
value
.
coordinates1
=
[]
authenticationStatusa
.
value
=
res
.
data
.
authenticationStatus
if
(
baseFormData
.
value
.
siteProvinceId
)
baseFormData
.
value
.
coordinates1
.
push
(
baseFormData
.
value
.
siteProvinceId
)
if
(
baseFormData
.
value
.
siteCityId
)
baseFormData
.
value
.
coordinates1
.
push
(
baseFormData
.
value
.
siteCityId
)
if
(
baseFormData
.
value
.
siteRegionId
)
baseFormData
.
value
.
coordinates1
.
push
(
baseFormData
.
value
.
siteRegionId
)
})
function
init
()
{
getDetail
()
getRegionsList
()
}
function
getDetail
()
{
api
.
getMyOwnMemberInfo
().
then
(
res
=>
{
if
(
res
.
data
.
memberInfo
)
{
form
.
value
=
res
.
data
.
memberInfo
}
form
.
value
.
coordinates1
=
[]
authenticationStatus
.
value
=
res
.
data
.
authenticationStatus
if
(
form
.
value
.
siteProvinceId
)
{
form
.
value
.
coordinates1
.
push
(
form
.
value
.
siteProvinceId
)
}
if
(
form
.
value
.
siteCityId
)
{
form
.
value
.
coordinates1
.
push
(
form
.
value
.
siteCityId
)
}
if
(
form
.
value
.
siteRegionId
)
{
form
.
value
.
coordinates1
.
push
(
form
.
value
.
siteRegionId
)
}
})
}
function
getRegionsList
()
{
api
.
regionsList
().
then
(
res
=>
{
regionsList
.
value
=
res
.
data
;
options
.
value
=
res
.
data
;
});
}
function
onchangeRegionId
(
e
)
{
console
.
log
(
e
.
detail
.
value
)
baseFormData
.
value
.
regionId
=
regionArr
.
value
}
function
saveMyteam
()
{
function
submit
()
{
// 验证必填项
if
(
baseFormData
.
value
.
imgUrl
==
''
)
{
uni
.
showToast
({
title
:
'请上传logo'
,
duration
:
2000
,
icon
:
'none'
})
return
}
if
(
baseFormData
.
value
.
name
==
''
)
{
if
(
form
.
value
.
baseName
==
''
)
{
uni
.
showToast
({
title
:
'请填写
团体
名称'
,
title
:
'请填写
单位
名称'
,
duration
:
2000
,
icon
:
'none'
})
return
}
if
(
baseFormData
.
value
.
abreviations
==
''
)
{
if
(
form
.
value
.
contact
==
''
)
{
uni
.
showToast
({
title
:
'请填写简称'
,
duration
:
2000
,
icon
:
'none'
})
return
}
if
(
baseFormData
.
value
.
type
==
''
)
{
uni
.
showToast
({
title
:
'请选择参赛队类型'
,
title
:
'请填写联系人'
,
duration
:
2000
,
icon
:
'none'
})
return
}
// if(baseFormData.value.type=='3'&&!baseFormData.value.ctype){
// uni.showToast({
// title: '请选择企业性质',
// duration: 2000,
// icon:'none'
// })
// return
// }
if
(
baseFormData
.
value
.
contactPerson
==
''
)
{
if
(
form
.
value
.
phone
==
''
)
{
uni
.
showToast
({
title
:
'请填写联系
人
'
,
title
:
'请填写联系
电话
'
,
duration
:
2000
,
icon
:
'none'
})
return
}
if
(
baseFormData
.
value
.
contactTelno
==
''
)
{
if
(
form
.
value
.
belongProvinceId
==
''
)
{
uni
.
showToast
({
title
:
'请
填写联系方式
'
,
title
:
'请
选择所属省份
'
,
duration
:
2000
,
icon
:
'none'
})
return
}
var
pattern
=
/^1
[
3456789
]\d{9}
$/
;
if
(
!
pattern
.
test
(
baseFormData
.
value
.
contactTelno
))
{
if
(
form
.
value
.
siteAddress
==
''
)
{
uni
.
showToast
({
title
:
'请
输入正确的手机号
'
,
title
:
'请
填写详细地址
'
,
duration
:
2000
,
icon
:
'none'
})
return
}
if
(
baseFormData
.
value
.
regionId
==
''
)
{
if
(
form
.
value
.
coordinates1
==
''
)
{
uni
.
showToast
({
title
:
'选择所在地
区
'
,
title
:
'选择所在地
址
'
,
duration
:
2000
,
icon
:
'none'
})
return
}
if
(
baseFormData
.
value
.
address
==
''
)
{
if
(
form
.
value
.
introduce
==
''
)
{
uni
.
showToast
({
title
:
'请填写
详细地址
'
,
title
:
'请填写
机构介绍
'
,
duration
:
2000
,
icon
:
'none'
})
return
}
for
(
let
n
in
participantsInfoArr
.
value
)
{
if
(
participantsInfoArr
.
value
[
n
].
status
==
0
&&
(
!
participantsInfoArr
.
value
[
n
].
value
))
{
uni
.
showToast
({
title
:
'请完善必填字段'
,
duration
:
2000
,
icon
:
'none'
})
return
}
}
match
.
saveMyGroup
(
baseFormData
.
value
).
then
(
res
=>
{
groupId
.
value
=
res
.
data
if
(
participantsInfoArr
.
value
&&
participantsInfoArr
.
value
.
length
>
0
)
{
// 保存补充信息
const
obj
=
{
cptId
:
cptId
.
value
,
groupId
:
groupId
.
value
,
groupInfo
:
JSON
.
stringify
(
participantsInfoArr
.
value
)
}
match
.
saveMyGroupExtraInfo
(
obj
).
then
(
res
=>
{
})
}
if
(
!
signType
.
value
)
{
uni
.
showToast
({
title
:
'保存成功'
,
icon
:
'none'
,
duration
:
2000
});
editIng
.
value
=
false
;
}
else
if
(
signType
.
value
==
1
)
{
// 团队
if
(
coachOrLeaderFlag
.
value
==
"1"
)
{
uni
.
navigateTo
({
url
:
`/pages_match/match/choose_coach?matchId=
${
cptId
.
value
}
&groupId=
${
groupId
.
value
}
&signType=
${
signType
.
value
}
`
});
}
else
{
// 选运动员
uni
.
navigateTo
({
url
:
`/pages_match/match/choose_sportman?matchId=
${
cptId
.
value
}
&groupId=
${
groupId
.
value
}
&signType=
${
signType
.
value
}
`
});
}
}
else
if
(
signType
.
value
==
2
)
{
// 队伍
uni
.
navigateTo
({
url
:
`/pages_match/match/add_rank?matchId=
${
cptId
.
value
}
&groupId=
${
groupId
.
value
}
&signType=
${
signType
.
value
}
`
});
api
.
createMyMember
(
form
.
value
).
then
(
res
=>
{
if
(
res
.
data
.
token
)
{
uni
.
setStorageSync
(
'token'
,
'Bearer '
+
res
.
data
.
token
)
}
});
active
.
value
=
1
})
}
</
script
>
<
style
lang=
"scss"
>
<
style
lang=
"scss"
scoped
>
.wBox
{
width
:
700
rpx
;
padding
:
30
rpx
;
margin
:
20
rpx
auto
0
;
background
:
#FFFFFF
;
box-shadow
:
0
rpx
12
rpx
116
rpx
0
rpx
rgba
(
196
,
203
,
214
,
0.1
);
border-radius
:
15
rpx
;
}
</
style
>
\ No newline at end of file
...
...
pages/level/addApply.vue
View file @
f9c6474
...
...
@@ -6,7 +6,7 @@
<view
class=
"wBox"
v-if=
"active == 0"
>
<uni-forms
ref=
"baseForm"
:modelValue=
"form"
label-width=
"100"
>
<uni-forms-item
label=
"考试名称"
>
<view
v-if=
"form.name"
>
{{
form
.
name
}}
</view>
<view
class=
"align-forms-item"
v-if=
"form.name"
>
{{
form
.
name
}}
</view>
<view
v-else
class=
"align-forms-item-placeHolder"
>
自动生成
</view>
</uni-forms-item>
<uni-forms-item
label=
"申请单位"
required
>
...
...
@@ -24,7 +24,8 @@
<uni-forms-item
label=
"考级地点"
required
>
<uni-easyinput
v-model=
"form.examLocation"
placeholder=
"考级地点"
/>
</uni-forms-item>
<uni-forms-item
@
updateData=
"updateData"
:label=
"`考官$
{ec}`" v-for="ec in examinerForChoose" :key="ec">
<uni-forms-item
@
updateData=
"updateData"
:label=
"`考官$
{ec}`" v-for="ec in examinerForChoose"
:key="ec">
<view
@
click=
"selectFN(ec)"
class=
"mask"
>
<uni-easyinput
v-model=
"form[`examiner_$
{ec}`]" clearable placeholder="点击选择考官" />
</view>
...
...
@@ -33,55 +34,97 @@
</uni-forms>
</view>
<view
class=
"wBox"
v-if=
"active == 1"
>
<!-- 添加考生 -->
<button
class=
"btn-red-kx"
>
在线选择
</button>
<view
class=
"vipData"
>
<view>
共
<text>
{{
total
}}
</text>
人
</view>
</view>
<view
class=
"userlist"
>
<view
class=
"item"
v-for=
"n in list"
style=
"background-color: #fffafa;"
>
<view
class=
"wBox"
v-if=
"active == 1"
>
<!-- 添加考生 -->
<button
class=
"btn-red-kx mini"
@
click=
"chooseOnline"
>
在线选择
</button>
<view
class=
"vipData mt30"
>
<view>
共
<text>
{{
tablePersonInfo
.
total
}}
</text>
人
</view>
<view
v-for=
"l in tablePersonInfo.levelArr"
:key=
"l.level"
>
{{
szToHz
(
l
.
level
)
}}
级:
<text>
{{
tablePersonInfo
.
total
}}
</text>
人
</view>
</view>
<view
class=
"userlist"
>
<view
class=
"item"
v-for=
"n in infoList"
style=
"background-color: #fffafa;"
>
<view
class=
"w100"
>
<view
class=
"photobox"
>
<image
class=
"photo"
v-if=
"n.photo"
:src=
"n.photo"
mode=
'aspectFill'
></image>
<view
class=
"colorful"
v-else
>
{{
n
.
name
.
slice
(
0
,
1
)
}}
</view>
<view
style=
"display: flex;"
>
<view
class=
"photobox"
>
<image
class=
"photo"
v-if=
"n.photo"
:src=
"config.baseUrl_api+n.photo"
mode=
'aspectFill'
></image>
<view
class=
"colorful"
v-else
>
{{
n
.
realName
?.
slice
(
0
,
1
)
}}
</view>
</view>
<view
class=
"name"
>
{{
n
.
realName
}}
<text>
{{
n
.
code
}}
</text></view>
<view
class=
"date"
>
{{
n
.
idcTypeStr
}}
:
{{
n
.
idcCode
}}
</view>
<view
class=
"flexbox"
>
<view>
原有级别
<text>
{{
n
}}
</text>
</view>
<view>
<view>
<view
class=
"name"
>
{{
n
.
realName
}}
<text>
{{
n
.
perCode
}}
</text></view>
<view
class=
"date"
>
{{
n
.
idcTypeStr
}}
:
{{
n
.
idcCode
}}
</view>
</view>
</view>
<view
class=
"flexbox mt30"
>
<view>
原有级别
<text
style=
"padding: 15rpx 0;"
>
{{
szToHz
(
n
.
levelOld
)
}}
级
</text>
</view>
<view
style=
"width: 40%;"
>
考试级别
<uni-data-select
v-model=
"value
"
:localdata=
"range"
@
change=
"change"
></uni-data-select>
</view>
<view
>
<view
@
click=
"changeLevelfather(n)"
>
<uni-data-select
v-model=
"n.levelNew"
:localdata=
"levelArr
"
@
change=
"changeLevel"
></uni-data-select>
</view>
</view>
<view
style=
"width: 30%;"
>
是否通过
<uni-data-select
v-model=
"value"
:localdata=
"range"
@
change=
"change"
></uni-data-select>
</view>
</view>
</view>
<view>
<uni-data-select
v-model=
"n.isPass"
:localdata=
"range"
></uni-data-select>
</view>
</view>
</view>
</view>
</view>
<view
class=
"nodata"
v-if=
"infoList.length==0"
>
<image
mode=
"aspectFit"
src=
"/static/nodata.png"
></image>
<text>
待添加考生
</text>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
<view
class=
"fixedBottom"
>
<view
class=
"fixedBottom"
v-if=
"active == 0"
>
<button
class=
"btn-red-kx"
style=
"width: 40%;"
@
click=
"submitForm(0)"
>
保存
</button>
<button
class=
"btn-red"
style=
"width: 40%;"
@
click=
"submitForm(1)"
>
下一步
</button>
</view>
<view
class=
"fixedBottom"
v-if=
"active == 1"
>
<button
class=
"btn-red-kx"
style=
"width: 25%;"
@
click=
"active=0"
>
上一步
</button>
<button
class=
"btn-red"
style=
"width: 25%;"
@
click=
"submitForm2(0)"
>
保存
</button>
<button
class=
"btn-red"
style=
"width: 30%;"
@
click=
"submitForm2(1)"
>
提交审核
</button>
</view>
<uni-popup
ref=
"choseStudent"
type=
"bottom"
background-color=
"#fff"
animation
>
<view
class=
"popBody"
>
<view
class=
"userlist"
>
<view
class=
"item"
v-for=
" n in studentList"
>
<view
@
click=
"checkThis(n)"
>
<image
class=
"icon"
v-if=
"n.checked"
src=
"@/static/member/dx_dwn.png"
/>
<image
class=
"icon"
v-else
src=
"@/static/member/dx.png"
/>
</view>
<view
class=
"photobox"
>
<image
class=
"photo"
v-if=
"n.photo"
:src=
"config.baseUrl_api+n.photo"
mode=
'aspectFill'
>
</image>
<view
class=
"colorful"
v-else
>
{{
n
.
name
.
slice
(
0
,
1
)
}}
</view>
</view>
<view>
<view
class=
"name"
>
{{
n
.
name
}}
<text>
{{
n
.
perCode
}}
</text></view>
<view
class=
"date"
>
到期时间:
{{
n
.
validityDate
}}
</view>
<view
class=
"date"
style=
"color: #1561CB;"
v-if=
"n.levelJi&&n.levelJi!=0"
>
级位:
{{
szToHz
(
n
.
levelJi
)
}}
级
</view>
<view
class=
"date"
v-else
>
级位:十级
</view>
</view>
</view>
<button
class=
"btn-red-kx"
@
click=
"submitStudents"
>
确定
</button>
</view>
</view>
</uni-popup>
</view>
</
template
>
...
...
@@ -94,11 +137,6 @@
onLoad
,
onShow
}
from
'@dcloudio/uni-app'
;
import
{
tagList
,
typeList
,
comList
}
from
'@/static/js/data'
;
import
config
from
'@/config.js'
import
dayjs
from
'dayjs'
import
_
from
'lodash'
...
...
@@ -110,13 +148,21 @@
const
dataList
=
ref
([]);
const
examinerForChoose
=
[
'A'
,
'B'
,
'C'
]
const
examinerArr
=
[]
const
active
=
ref
(
0
)
const
active
=
ref
(
0
)
const
total
=
ref
(
0
)
const
list1
=
ref
([{
title
:
'考级基本信息'
},
{
title
:
'添加考生'
}])
const
choseStudent
=
ref
(
null
)
const
studentList
=
ref
([])
const
infoList
=
ref
([])
const
ids
=
ref
([])
const
tablePersonInfo
=
ref
({})
const
transcript
=
ref
([])
const
levelArr
=
ref
([{
value
:
'10'
,
text
:
'十级'
},{
value
:
'9'
,
text
:
'九级'
},{
value
:
'8'
,
text
:
'八级'
},{
value
:
'7'
,
text
:
'七级'
},{
value
:
'6'
,
text
:
'六级'
},{
value
:
'5'
,
text
:
'五级'
},{
value
:
'4'
,
text
:
'四级'
},{
value
:
'3'
,
text
:
'三级'
},{
value
:
'2'
,
text
:
'二级'
},{
value
:
'1'
,
text
:
'一级'
}])
const
range
=
ref
([{
value
:
'1'
,
text
:
'是'
},{
value
:
'0'
,
text
:
'否'
}])
let
examId
onLoad
(
option
=>
{
console
.
log
(
option
)
...
...
@@ -155,7 +201,7 @@
uni
.
$on
(
'chosen'
,
updateData
)
})
function
updateData
(
e
)
{
function
updateData
(
e
)
{
// console.log(e)
examinerArr
.
push
(
e
.
obj
)
form
.
value
[
`examiner_
${
e
.
ec
}
`
]
=
e
.
obj
.
name
...
...
@@ -253,30 +299,204 @@
return
}
save
().
then
(()
=>
{
// form.value.examId 下一步
active
.
value
==
1
// form.value.examId 下一步
active
.
value
=
1
getChosedStudentList
()
})
}
}
function
save
()
{
if
(
form
.
value
.
examId
)
{
return
updateLevelInfo
(
form
.
value
).
then
(()
=>
{
}
function
save
()
{
if
(
form
.
value
.
examId
)
{
return
api
.
updateLevelInfo
(
form
.
value
).
then
(()
=>
{
uni
.
showToast
({
title
:
`保存成功`
,
icon
:
'none'
})
})
}
else
{
return
api
.
addLevelInfo
(
form
.
value
).
then
((
res
)
=>
{
form
.
value
.
examId
=
res
.
data
.
examId
form
.
value
.
name
=
res
.
data
.
name
uni
.
showToast
({
title
:
`保存成功`
,
icon
:
'none'
})
})
}
}
function
chooseOnline
()
{
var
obj
=
{
memId
:
memberInfo
.
memId
,
examId
:
form
.
value
.
examId
,
examType
:
form
.
value
.
type
}
api
.
chooseStudentsList
(
obj
).
then
(
response
=>
{
studentList
.
value
=
response
.
rows
for
(
var
s
of
studentList
.
value
)
{
s
.
checked
=
false
}
choseStudent
.
value
.
open
()
})
}
function
checkThis
(
item
)
{
if
(
item
.
checked
)
{
item
.
checked
=
false
}
else
{
item
.
checked
=
true
}
}
function
submitStudents
()
{
ids
.
value
=
[]
for
(
var
s
of
studentList
.
value
)
{
if
(
s
.
checked
)
{
ids
.
value
.
push
(
s
.
perId
)
}
}
if
(
ids
.
value
.
length
==
0
)
{
uni
.
showToast
({
title
:
`保存成功`
,
title
:
'请选择考生'
,
icon
:
'none'
})
})
}
else
{
return
addInfo
(
form
.
value
).
then
((
res
)
=>
{
form
.
value
.
examId
=
res
.
data
.
examId
form
.
value
.
name
=
res
.
data
.
name
uni
.
showToast
({
title
:
`保存成功`
,
icon
:
'none'
})
})
}
return
}
api
.
batchChoose
({
examId
:
form
.
value
.
examId
,
perIds
:
ids
.
value
}).
then
(()
=>
{
getChosedStudentList
()
choseStudent
.
value
.
close
()
})
}
function
getChosedStudentList
()
{
var
obj
=
{
examId
:
form
.
value
.
examId
}
api
.
getStudentList
(
obj
).
then
(
res
=>
{
_
.
each
(
res
.
rows
,
(
d
)
=>
{
if
(
d
.
levelOld
)
{
d
.
levelRecommend
=
(
parseInt
(
d
.
levelOld
)
-
1
)
+
''
if
(
d
.
levelRecommend
===
'0'
)
{
d
.
levelRecommend
=
'1'
}
}
else
{
d
.
levelRecommend
=
'9'
}
if
(
!
d
.
levelNew
)
{
d
.
levelNew
=
d
.
levelRecommend
}
if
(
!
d
.
isPass
)
{
d
.
isPass
=
'1'
}
})
infoList
.
value
=
res
.
rows
}).
then
(
getTablePersonInfo
)
}
function
getTablePersonInfo
()
{
const
total
=
infoList
.
value
.
length
const
levelArr
=
[]
_
.
each
(
infoList
.
value
,
(
d
)
=>
{
const
temp
=
_
.
find
(
levelArr
,
(
l
)
=>
{
return
l
.
level
==
d
.
levelNew
})
if
(
temp
)
{
temp
.
num
++
}
else
{
levelArr
.
push
({
level
:
d
.
levelNew
,
num
:
1
})
}
})
tablePersonInfo
.
value
=
{
total
:
total
,
levelArr
:
_
.
sortBy
(
levelArr
,
(
l
)
=>
{
return
l
.
level
})
}
}
function
szToHz
(
num
)
{
const
hzArr
=
[
'〇'
,
'一'
,
'二'
,
'三'
,
'四'
,
'五'
,
'六'
,
'七'
,
'八'
,
'九'
,
'十'
]
return
hzArr
[
parseInt
(
num
)]
}
let
nowRow
function
changeLevelfather
(
row
){
nowRow
=
row
}
function
changeLevel
(
e
){
console
.
log
(
e
)
if
(
e
!==
nowRow
.
levelRecommend
)
{
uni
.
showModal
({
title
:
'提示'
,
content
:
`建议考试级别为 "
${
szToHz
(
nowRow
.
levelRecommend
)}
级" ,确定要修改吗?`
,
success
:
function
(
res
)
{
if
(
res
.
confirm
)
{
getTablePersonInfo
()
}
},
fail
:
function
(
res
)
{
nowRow
.
levelNew
=
nowRow
.
levelRecommend
}
})
}
}
function
submitForm2
(
flag
){
if
(
flag
===
1
)
{
if
(
infoList
.
value
.
length
==
0
)
{
uni
.
showToast
({
title
:
'请选择考生'
,
icon
:
'none'
})
return
}
if
(
!
form
.
value
.
transcript
)
{
uni
.
showToast
({
title
:
'请上传成绩单'
,
icon
:
'none'
})
return
}
uni
.
showModal
({
title
:
'提示'
,
content
:
`确定提交审核?`
,
success
:
function
(
res
)
{
saveStep2
(
flag
)
}
})
}
else
{
saveStep2
(
flag
)
}
}
function
saveStep2
(
flag
){
const
data
=
_
.
map
(
infoList
.
value
,
(
d
)
=>
{
return
{
id
:
d
.
id
,
levelNew
:
d
.
levelNew
,
// score: d.score,
isPass
:
d
.
isPass
}
})
return
api
.
editLevel
({
examId
:
form
.
value
.
examId
,
personInfo
:
JSON
.
stringify
(
data
),
transcript
:
form
.
value
.
transcript
,
status
:
flag
})
}
</
script
>
<
style
lang=
"scss"
scoped
>
...
...
@@ -291,13 +511,6 @@
:deep
(
.uni-forms-item__inner
)
{
padding-bottom
:
20
rpx
;
}
:deep
(
.uni-forms-item__label
.label-text
)
{
font-size
:
28
rpx
!important
;
}
:deep
(
.uni-input-input
)
{
font-size
:
30
rpx
!important
;
}
}
.popBody
{
padding
:
30
rpx
;}
</
style
>
\ No newline at end of file
...
...
pages/level/apply.vue
View file @
f9c6474
...
...
@@ -10,6 +10,7 @@
<view
class=
"appItem"
v-for=
"item in list"
>
<view
class=
"status"
@
click=
"goDetail(item)"
>
<text
:class=
"
{
'text-primary':item.status=='1',
'text-success':item.status=='2',
'text-danger':item.status=='3',
'text-warning':item.status=='4'
...
...
pages/level/approval.vue
View file @
f9c6474
<
template
>
<view>
<uni-segmented-control
class=
"whitebg"
:current=
"current"
:values=
"navs"
@
clickItem=
"onClickItem"
styleType=
"text"
activeColor=
"#AD181F"
></uni-segmented-control>
<view
class=
"appList"
>
<view
class=
"appItem"
v-for=
"item in infoList"
>
<view
class=
"status"
@
click=
"goDetail(item)"
>
<text
:class=
"
{
'text-primary':item.auditStatus=='0',
'text-success':item.auditStatus=='1',
'text-danger':item.auditStatus=='2',
'text-warning':item.auditStatus=='3'
}">
{{
item
.
statusStr
}}
</text>
</view>
<view
class=
"date"
v-if=
"item.status!='0'&&item.submitTime"
>
提交时间:
{{
item
.
submitTime
}}
</view>
<view
class=
"name mt0"
@
click=
"goDetail(item)"
>
{{
item
.
name
}}
</view>
<view
class=
"pp esp"
>
考级日期:
{{
item
.
startTime
.
substring
(
0
,
16
)
}}
至
{{
item
.
endTime
.
substring
(
0
,
16
)
}}
</view>
<view
class=
"flexbox"
@
click=
"goDetail(item)"
>
<view>
申请日期
<view>
{{
item
.
applyTime
.
substring
(
0
,
10
)
}}
</view>
</view>
<view>
申请单位
<view>
{{
item
.
memberName
}}
</view>
</view>
<view>
通过人数
<view>
{{
item
.
pass
}}
</view>
</view>
</view>
<view
class=
"func"
v-if=
"item.auditStatus=='0'"
>
<button
@
click=
"audit(item,'2')"
>
拒绝
</button>
<button
@
click=
"audit(item,'1')"
>
同意
</button>
</view>
</view>
</view>
<view
class=
"nodata"
v-if=
"infoList.length==0"
>
<image
mode=
"aspectFit"
src=
"/static/nodata.png"
></image>
<text>
暂无数据
</text>
</view>
</view>
</
template
>
<
script
setup
>
</
script
>
<
script
setup
>
import
*
as
api
from
'@/common/api.js'
import
config
from
'@/config.js'
import
_
from
'lodash'
import
{
onMounted
,
ref
}
from
'vue'
import
{
onLoad
,
onShow
}
from
'@dcloudio/uni-app'
const
app
=
getApp
();
const
queryParams
=
ref
({
// pageNum: 1,
// pageSize: 10
status
:
'0'
,
type
:
'1'
})
const
navs
=
ref
([
'审核中'
,
'审核通过'
,
'审核拒绝'
])
const
statusArr
=
[
'审批中'
,
'审批通过'
,
'审批拒绝'
,
'审批撤回'
]
const
current
=
ref
()
const
infoList
=
ref
([])
const
total
=
ref
(
0
)
const
deptType
=
ref
(
''
)
onLoad
(()
=>
{
})
onShow
(()
=>
{
if
(
app
.
globalData
.
isLogin
)
{
init
()
}
else
{
app
.
firstLoadCallback
=
()
=>
{
init
()
};
}
})
function
init
()
{
uni
.
showLoading
({
title
:
'加载中'
})
deptType
.
value
=
app
.
globalData
.
deptType
getList
()
}
function
getList
()
{
api
.
getVerityList
(
queryParams
.
value
).
then
(
res
=>
{
uni
.
hideLoading
()
const
list
=
[]
_
.
each
(
res
.
rows
,
r
=>
{
const
item
=
JSON
.
parse
(
r
.
content
)
item
.
recordId
=
r
.
recordId
item
.
auditStatus
=
r
.
auditStatus
item
.
submitStatus
=
r
.
submitStatus
item
.
distributeTime
=
r
.
distributeTime
item
.
statusStr
=
statusArr
[
r
.
auditStatus
]
item
.
remark
=
r
.
remark
item
.
isView
=
r
.
isView
item
.
sourceData
=
r
item
.
auditProcess
=
r
.
auditProcess
list
.
push
(
item
)
})
infoList
.
value
=
list
total
.
value
=
res
.
total
})
}
function
onClickItem
(
e
)
{
console
.
log
(
e
)
uni
.
showLoading
({
title
:
'加载中'
})
queryParams
.
value
.
status
=
e
.
currentIndex
getList
()
}
function
goDetail
(
item
)
{
if
(
item
.
status
!=
'0'
){
let
path
=
`/pages/level/applyDetail?examId=
${
item
.
examId
}
`
uni
.
navigateTo
({
url
:
path
});
}
else
{
return
}
}
function
audit
(
item
,
flag
)
{
console
.
log
(
item
.
sourceData
)
var
obj
=
{
flag
:
flag
,
reason
:
null
,
body
:
[
JSON
.
stringify
(
item
.
sourceData
)]
}
if
(
flag
==
'2'
)
{
// 拒绝
// 弹出框填写理由
uni
.
showModal
({
title
:
'请输入拒绝理由'
,
editable
:
true
,
success
:
function
(
res
)
{
if
(
res
.
confirm
)
{
if
(
!
res
.
content
)
{
uni
.
showToast
({
title
:
'请输入拒绝理由'
,
icon
:
'none'
})
}
else
{
obj
.
reason
=
res
.
content
doApproval
(
obj
)
}
}
}
})
}
else
if
(
flag
==
'1'
)
{
// 二次确认
uni
.
showModal
({
title
:
'提示'
,
content
:
`确定审批通过吗`
,
success
:
function
(
res
)
{
if
(
res
.
confirm
)
{
doApproval
(
obj
)
}
}
})
}
}
function
doApproval
(
obj
)
{
console
.
log
(
obj
)
api
.
doVerity
(
obj
).
then
((
res
)
=>
{
uni
.
showToast
({
title
:
'操作成功'
,
icon
:
'none'
})
getList
()
})
}
</
script
>
<
style
lang=
"scss"
>
<
style
scoped
>
.searchbar
{
display
:
flex
;
align-items
:
center
;
padding
:
25
rpx
;
box-sizing
:
border-box
;
:deep(.uni-easyinput
.uni-easyinput__content)
{
border-radius
:
35
rpx
;
border
:
none
;
height
:
70
rpx
;
}
:deep
(
.uni-easyinput__content-input
)
{
font-size
:
26
rpx
;
}
.invertedbtn-red
{
border-radius
:
50px
;
background-color
:
#fff
;
font-size
:
30
rpx
;
padding
:
10
rpx
20
rpx
;
}
}
.mt0
{
margin-top
:
0
!important
;
}
.appList
.appItem
.name
{
width
:
80%
;
word-break
:
break-all
;
}
</
style
>
...
...
pages/level/chooseExaminer.vue
View file @
f9c6474
...
...
@@ -9,7 +9,7 @@
<view
class=
"userlist"
>
<view
class=
"item"
v-for=
"n in list"
>
<view
class=
"photobox"
>
<image
class=
"photo"
v-if=
"n.photo"
:src=
"n.photo"
mode=
'aspectFill'
></image>
<image
class=
"photo"
v-if=
"n.photo"
:src=
"
config.baseUrl_api+
n.photo"
mode=
'aspectFill'
></image>
<view
class=
"colorful"
v-else
>
{{
n
.
name
.
slice
(
1
,
2
)
}}
</view>
</view>
<view>
...
...
pages/personalVip/auditDetail.vue
View file @
f9c6474
...
...
@@ -10,7 +10,7 @@
<view
class=
"userlist"
>
<view
class=
"item"
v-for=
"n in list"
>
<view
class=
"photobox"
>
<image
class=
"photo"
v-if=
"n.photo"
:src=
"n.photo"
mode=
'aspectFill'
></image>
<image
class=
"photo"
v-if=
"n.photo"
:src=
"
config.baseUrl_api+
n.photo"
mode=
'aspectFill'
></image>
<view
class=
"colorful"
v-else
>
{{
n
.
personName
?.
slice
(
0
,
1
)
}}
</view>
</view>
<view>
...
...
pages/personalVip/list.vue
View file @
f9c6474
...
...
@@ -12,7 +12,7 @@
<view
class=
"content-box"
@
click=
"handleInfo(n)"
>
<view
class=
"flexbox"
>
<view
class=
"photobox"
>
<image
class=
"photo"
v-if=
"n.photo"
:src=
"n.photo"
mode=
'aspectFill'
></image>
<image
class=
"photo"
v-if=
"n.photo"
:src=
"
config.baseUrl_api+
n.photo"
mode=
'aspectFill'
></image>
<view
class=
"colorful"
v-else
>
{{
n
.
name
.
slice
(
0
,
1
)
}}
</view>
</view>
<view>
...
...
pages/personalVip/paymentDetail.vue
View file @
f9c6474
...
...
@@ -9,7 +9,7 @@
<view
class=
"userlist"
>
<view
class=
"item"
v-for=
"n in list"
>
<view
class=
"photobox"
>
<image
class=
"photo"
v-if=
"n.photo"
:src=
"n.photo"
mode=
'aspectFill'
></image>
<image
class=
"photo"
v-if=
"n.photo"
:src=
"
config.baseUrl_api+
n.photo"
mode=
'aspectFill'
></image>
<view
class=
"colorful"
v-else
>
{{
n
.
personName
?.
slice
(
0
,
1
)
}}
</view>
</view>
<view>
...
...
pages/personalVip/vipList.vue
View file @
f9c6474
...
...
@@ -15,7 +15,7 @@
<image
class=
"icon"
v-else
src=
"@/static/member/dx.png"
/>
</view>
<view
class=
"photobox"
>
<image
class=
"photo"
v-if=
"n.photo"
:src=
"n.photo"
mode=
'aspectFill'
></image>
<image
class=
"photo"
v-if=
"n.photo"
:src=
"
config.baseUrl_api+
n.photo"
mode=
'aspectFill'
></image>
<view
class=
"colorful"
v-else
>
{{
n
.
name
.
slice
(
0
,
1
)
}}
</view>
</view>
<view
@
click=
"handleInfo(n)"
>
...
...
Write
Preview
Styling with
Markdown
is supported
Attach a file
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 post a comment