Skip to content
Toggle navigation
Toggle navigation
This project
Loading...
Sign in
杨炀
/
ztx_wx_gzt
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
94f120e1
authored
2026-04-16 16:35:46 +0800
by
lttnew
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
中跆协级位审核
1 parent
e4a0b6ec
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
391 additions
and
502 deletions
.claude/settings.local.json
common/api.js
common/mystyle.scss
config.js
level/addApply.vue
level/apply.vue
level/chooseStudent.vue
level/ztx/approval.vue
level/ztx/examinationAudit.vue
level/ztx/examinationDetail.vue
level/ztx/memberAuditPage.vue
pages/rank/applyDetail.vue
personalVip/orderDetail.vue
.claude/settings.local.json
View file @
94f120e
{
"permissions"
:
{
"allow"
:
[
"Bash(ls D:/ltt/ztx_wx_gzt/views/*/index.vue)"
"Bash(ls D:/ltt/ztx_wx_gzt/views/*/index.vue)"
,
"WebFetch(domain:minimax-algeng-chat-tts.oss-cn-wulanchabu.aliyuncs.com)"
]
}
}
...
...
common/api.js
View file @
94f120e
...
...
@@ -902,6 +902,24 @@ export function getVerityMergeList(params) {
})
}
// 中跆协审核列表
export
function
auditList
(
params
)
{
return
request
({
url
:
'/exam/info/list'
,
method
:
'get'
,
params
})
}
// 中跆协审核提交
export
function
auditJi
(
data
)
{
return
request
({
url
:
`/exam/info/auditJi/
${
data
.
ids
}
?flag=
${
data
.
flag
}
&reason=
${
data
.
reason
}
&ids=
${
data
.
ids
}
`
,
method
:
'post'
,
params
:
data
})
}
export
function
doMergeFlows
(
params
)
{
return
request
({
url
:
`/exam/info/submit/mergeFlows`
,
...
...
common/mystyle.scss
View file @
94f120e
...
...
@@ -3,6 +3,14 @@ page {
overflow
:
auto
;
background
:
#ecf0f6
;
}
/* uni-data-checkbox 选中色全局覆盖为红色 */
uni-data-checkbox
.checklist-box.is-checked
{
border-color
:
#C4121B
!
important
;
background-color
:
#C4121B
!
important
;
}
uni-data-checkbox
.checklist-box.is-checked
.checklist-text
{
color
:
#fff
!
important
;
}
.wBox
{
box-sizing
:
border-box
;}
.h3
{
font-weight
:
bold
;
line-height
:
2
;}
.text-center
{
text-align
:
center
;}
...
...
@@ -480,5 +488,10 @@ background-size: cover;position: relative;}
.check-icon
{
font-size
:
20rpx
;
color
:
#fff
;
font-weight
:
bold
;
// margin-right: 6rpx;
}
...
...
config.js
View file @
94f120e
// dev
//
const baseUrl_api = 'http://192.168.1.137:8787'
const
baseUrl_api
=
'http://tk001.wxjylt.com/stage-api'
const
baseUrl_api
=
'http://192.168.1.137:8787'
//
const baseUrl_api = 'http://tk001.wxjylt.com/stage-api'
const
loginImage_api
=
'http://tk001.wxjylt.com/stage-api'
const
payUrl
=
'https://wxpay.cmbc.com.cn/mobilePlatform/appserver/lcbpPay.do'
...
...
level/addApply.vue
View file @
94f120e
...
...
@@ -253,6 +253,10 @@
onShow
(()
=>
{
uni
.
$on
(
'chosen'
,
updateData
)
const
curExamId
=
examId
||
form
.
value
.
examId
if
(
curExamId
)
{
getChosedStudentList
()
}
})
function
updateData
(
e
)
{
...
...
@@ -406,6 +410,7 @@
}
function
getChosedStudentList
()
{
if
(
!
form
.
value
.
examId
)
return
var
obj
=
{
examId
:
form
.
value
.
examId
}
...
...
@@ -603,7 +608,7 @@
background
:
#fff
;
border
:
2
rpx
solid
#666
;
color
:
#666
;
font-size
:
2
4
rpx
;
font-size
:
2
6
rpx
;
display
:
flex
;
align-items
:
center
;
justify-content
:
center
;
...
...
@@ -612,7 +617,7 @@
}
.step-text
{
font-size
:
2
4
rpx
;
font-size
:
2
6
rpx
;
color
:
#666
;
transition
:
all
0.3s
;
}
...
...
@@ -691,7 +696,7 @@
.info-label
{
display
:
block
;
font-size
:
2
4
rpx
;
font-size
:
2
6
rpx
;
color
:
#666
;
margin-bottom
:
8
rpx
;
...
...
@@ -739,7 +744,7 @@
background
:
#FFF5F5
;
border
:
1
rpx
solid
#FFDDDD
;
border-radius
:
6
rpx
;
font-size
:
2
4
rpx
;
font-size
:
2
6
rpx
;
color
:
#AD181F
;
}
}
...
...
@@ -810,7 +815,7 @@
margin-bottom
:
8
rpx
;
.per-code
{
font-size
:
2
4
rpx
;
font-size
:
2
6
rpx
;
color
:
#666
;
font-weight
:
normal
;
margin-left
:
12
rpx
;
...
...
@@ -818,7 +823,7 @@
}
.student-idcard
{
font-size
:
2
4
rpx
;
font-size
:
2
6
rpx
;
color
:
#666
;
}
}
...
...
@@ -841,7 +846,7 @@
align-items
:
flex-end
;
.level-label
{
font-size
:
2
4
rpx
;
font-size
:
2
6
rpx
;
color
:
#666
;
margin-bottom
:
6
rpx
;
}
...
...
level/apply.vue
View file @
94f120e
...
...
@@ -40,14 +40,9 @@
</view>
<view
v-if=
"item.status=='0'||item.status=='3'||item.status=='4'||item.status=='9'"
class=
"func"
>
<button
:disabled=
"item.status=='1'||item.status=='2'||item.status=='3'"
@
click=
"handleDelete(item)"
>
删除
</button>
<button
:disabled=
"!(item.status=='0')"
@
click=
"editThis(item)"
>
编辑
</button>
<button
:disabled=
"item.status!='0'&&item.status!='9'||item.totalNum==0||item.pass==0"
@
click=
"handleSubmit(item)"
>
提交审核
</button>
<button
v-if=
"item.status !== '1' && item.status !== '2' && item.status !== '3'"
@
click=
"handleDelete(item)"
>
删除
</button>
<button
v-if=
"item.status === '0'"
@
click=
"editThis(item)"
>
编辑
</button>
<button
v-if=
"(item.status === '0' || item.status === '9') && item.totalNum > 0 && item.pass > 0"
@
click=
"handleSubmit(item)"
>
提交审核
</button>
</view>
</view>
</view>
...
...
@@ -214,12 +209,23 @@ function goDetail(item) {
.invertedbtn-red
{
border-radius
:
50px
;
background-color
:
#fff
;
font-size
:
30
rpx
;
padding
:
10
rpx
20
rpx
;
}
}
//
.func
button
[
disabled
]
{
//
background-color
:
#f5f5f5
;
//
color
:
#ccc
;
//
border-color
:
#eee
;
//
}
}
:deep
(
.func
button
[
disabled
])
{
background-color
:
#f5f5f5
!important
;
color
:
#ccc
!important
;
border-color
:
#eee
!important
;
opacity
:
0.6
;
}
.mt0
{
margin-top
:
0
!important
;
}
...
...
level/chooseStudent.vue
View file @
94f120e
...
...
@@ -16,7 +16,7 @@
</view>
<!-- 已选考生 -->
<view
class=
"selected-section"
v-if=
"selectedList.length > 0"
>
<
!--
<
view
class=
"selected-section"
v-if=
"selectedList.length > 0"
>
<view
class=
"section-header"
>
<text
class=
"section-title"
>
已选考生
</text>
<text
class=
"section-count"
>
{{
selectedList
.
length
}}
人
</text>
...
...
@@ -33,15 +33,15 @@
</view>
</view>
</scroll-view>
</view>
</view>
-->
<!-- 考生列表 -->
<scroll-view
class=
"student-scroll"
scroll-y
@
scrolltolower=
"loadMore"
>
<view
class=
"student-list"
>
<view
class=
"student-card"
v-for=
"(item, index) in studentList"
:key=
"index"
@
click=
"toggleSelect(item)"
>
<view
class=
"checkbox"
>
<image
v-if=
"item.checked"
src=
"/static/member/dx_dwn.png
"
mode=
"aspectFit"
></image>
<
view
v-else
class=
"checkbox-empty"
></view
>
<view
class=
"student-card"
v-for=
"(item, index) in studentList"
:key=
"index"
>
<view
class=
"checkbox"
@
click=
"toggleSelect(item)"
>
<image
v-if=
"item.checked"
:src=
"config.baseUrl_api+'/fs/static/member/dx_dwn.png'
"
mode=
"aspectFit"
></image>
<
image
v-else
:src=
"config.baseUrl_api+'/fs/static/member/dx.png'"
mode=
"aspectFit"
></image
>
</view>
<view
class=
"avatar"
>
<image
v-if=
"item.photo"
:src=
"item.photo"
mode=
"aspectFill"
></image>
...
...
@@ -335,7 +335,7 @@
.remove-btn
{
position
:
absolute
;
top
:
-
6
rpx
;
top
:
-
8
rpx
;
right
:
-6
rpx
;
width
:
28
rpx
;
height
:
28
rpx
;
...
...
@@ -370,13 +370,6 @@
.checkbox
{
margin-right
:
20
rpx
;
.checkbox-empty
{
width
:
40
rpx
;
height
:
40
rpx
;
border
:
2
rpx
solid
#ddd
;
border-radius
:
50%
;
}
image
{
width
:
40
rpx
;
height
:
40
rpx
;
...
...
level/ztx/approval.vue
View file @
94f120e
...
...
@@ -2,55 +2,49 @@
<view>
<uni-segmented-control
class=
"whitebg"
:current=
"current"
:values=
"navs"
@
clickItem=
"onClickItem"
styleType=
"text"
activeColor=
"#AD181F"
></uni-segmented-control>
<view
v-show=
"totalCost>0"
class=
"vipData"
>
<view>
费用合计:
<text>
{{
totalCost
.
toFixed
(
2
)
}}
元
</text>
</view>
<view
v-show=
"infoList.length>0"
class=
"stat-row"
>
<view
class=
"stat-item"
>
费用合计:
<text
class=
"red"
>
{{
totalCost
.
toFixed
(
2
)
}}
元
</text></view>
<view
class=
"stat-item"
>
考试人数:
<text
class=
"red"
>
{{
totalNum
}}
人
</text></view>
</view>
<view
class=
"appList"
>
<view
class=
"appItem"
v-for=
"item in infoList"
>
<view
class=
"appItem"
v-for=
"item in infoList"
:key=
"item.examId"
@
click=
"goDetail(item)"
>
<view
class=
"status"
:class=
"
{
'text-primary-bg':item.status=='0',
'text-success-bg':item.status=='1',
'text-danger-bg':item.status=='2',
'text-warning-bg':item.status=='3'
}" @click="goDetail(item)">
{{
item
.
statusStr
}}
'text-primary-bg': item.status=='1',
'text-success-bg': item.status=='2',
'text-danger-bg': item.status=='3'
}" >
{{
item
.
statusStr
||
'待提交'
}}
</view>
<view
class=
"date"
v-if=
"item.
status!='0'&&item.submitTime"
>
提交时间:
{{
item
.
submitTime
}}
</view>
<view
class=
"text-primary"
>
{{
item
.
flowCode
}}
</view>
<view
class=
"name mt10"
@
click=
"goDetail(item)"
>
{{
item
.
mergeName
}}
</view>
<view
class=
"flexbox"
@
click=
"goDetail(item)"
>
<view
class=
"date"
v-if=
"item.
commitTime"
>
提交时间:
{{
item
.
commitTime
.
substring
(
0
,
10
)
}}
</view>
<view
class=
"text-primary"
>
{{
item
.
examCode
}}
</view>
<view
class=
"name mt10"
>
{{
item
.
name
}}
</view>
<view
class=
"flexbox"
>
<view>
考试人数
<view>
{{
item
.
totalNum
}}
</view>
<view>
{{
item
.
totalNum
}}
</view>
</view>
<view>
缴费状态
支付方式
<view>
<text
:class=
"
{
'text-success':item.examPayStatusStr=='已上传',
'text-danger':item.examPayStatusStr=='未上传',
'text-warning':item.examPayStatusStr=='已结算'
}">
{{
item
.
examPayStatusStr
||
'--'
}}
</text>
民生付
<!--
<text
:class=
"
{
'text-success': item.examPayStatusStr=='已上传',
'text-danger': item.examPayStatusStr=='未上传',
'text-warning': item.examPayStatusStr=='已结算'
}">
{{
item
.
examPayStatusStr
||
'--'
}}
</text>
-->
</view>
</view>
<view>
总金额
<view>
¥
{{
item
.
totalAmount
}}
</view>
<view>
¥
{{
item
.
price
}}
</view>
</view>
</view>
<view
class=
"pp esp"
>
上报单位:
{{
item
.
memName
}}
</view>
<view
class=
"func"
v-if=
"item.status=='0'"
>
<button
@
click=
"audit(item,'2')"
>
拒绝
</button>
<button
@
click=
"audit(item,'1')"
>
同意
</button>
</view>
<view
class=
"func"
v-if=
"(item.isView=='1' && item.status=='1') || item.payStatus=='3'"
>
<button
@
click=
"handleBack(item)"
>
撤回
</button>
<view
class=
"pp esp"
>
上报单位:
{{
item
.
memberName
}}
</view>
<view
class=
"func"
v-if=
"item.status=='1'"
>
<button
@
click=
"goApproval(item)"
>
审批
</button>
</view>
</view>
</view>
...
...
@@ -65,189 +59,101 @@
<
script
setup
>
import
*
as
api
from
'@/common/api.js'
import
config
from
'@/config.js'
import
_
from
'underscore'
import
{
onMounted
,
ref
}
from
'vue'
import
{
onLoad
,
onShow
}
from
'@dcloudio/uni-app'
const
app
=
getApp
();
const
app
=
getApp
()
// 导航栏对应 status 值
const
statusValues
=
[
''
,
'1'
,
'2'
,
'3'
]
const
navs
=
ref
([
'全部'
,
'审批中'
,
'审批通过'
,
'审批拒绝'
])
const
current
=
ref
(
0
)
const
queryParams
=
ref
({
// pageNum: 1,
// pageSize: 10
status
:
'0'
,
type
:
'1'
status
:
''
,
auditSelectType
:
'1'
,
auditFlag
:
'1'
,
pageNum
:
1
,
pageSize
:
50
})
const
navs
=
ref
([
'审核中'
,
'审核通过'
,
'审核拒绝'
,
'审批撤回'
])
const
statusArr
=
[
'审批中'
,
'审批通过'
,
'审批拒绝'
,
'审批撤回'
]
const
current
=
ref
()
const
infoList
=
ref
([])
const
total
=
ref
(
0
)
const
totalCost
=
ref
(
0
)
const
deptType
=
ref
(
''
)
const
userType
=
ref
(
''
)
onLoad
(()
=>
{
const
totalNum
=
ref
(
0
)
})
onShow
(()
=>
{
if
(
app
.
globalData
.
isLogin
)
{
ini
t
()
getLis
t
()
}
else
{
app
.
firstLoadCallback
=
()
=>
{
ini
t
()
}
;
getLis
t
()
}
}
})
function
init
()
{
deptType
.
value
=
app
.
globalData
.
deptType
userType
.
value
=
app
.
globalData
.
userType
getList
()
}
function
getList
()
{
uni
.
showLoading
({
title
:
'加载中'
,
mask
:
true
})
uni
.
showLoading
({
title
:
'加载中'
,
mask
:
true
})
totalCost
.
value
=
0
api
.
getVerityMergeList
(
queryParams
.
value
).
then
(
response
=>
{
totalNum
.
value
=
0
api
.
auditList
(
queryParams
.
value
).
then
(
response
=>
{
uni
.
hideLoading
()
const
list
=
[]
_
.
each
(
response
.
rows
,
r
=>
{
const
item
=
JSON
.
parse
(
r
.
remark
)
item
.
recordId
=
r
.
recordId
item
.
status
=
r
.
auditStatus
item
.
statusStr
=
statusArr
[
r
.
auditStatus
]
item
.
isView
=
r
.
isView
item
.
payStatus
=
r
.
payStatus
item
.
examPayStatusStr
=
r
.
examPayStatusStr
item
.
sourceData
=
r
item
.
auditProcess
=
r
.
auditProcess
list
.
push
(
item
)
totalCost
.
value
+=
(
item
.
totalAmount
*
1
)
infoList
.
value
=
response
.
rows
||
[]
total
.
value
=
response
.
total
||
0
infoList
.
value
.
forEach
(
item
=>
{
totalCost
.
value
+=
Number
(
item
.
price
)
||
0
totalNum
.
value
+=
Number
(
item
.
totalNum
)
||
0
})
infoList
.
value
=
list
total
.
value
=
response
.
total
}).
catch
(()
=>
{
uni
.
hideLoading
()
})
}
function
onClickItem
(
e
)
{
c
onsole
.
log
(
e
)
queryParams
.
value
.
status
=
e
.
currentIndex
c
urrent
.
value
=
e
.
currentIndex
queryParams
.
value
.
status
=
statusValues
[
e
.
currentIndex
]
getList
()
}
function
goDetail
(
item
)
{
const
form
=
encodeURIComponent
(
JSON
.
stringify
(
item
))
// 查看
let
path
=
`/level/mergeUpDetail?form=
${
form
}
&type=1`
uni
.
navigateTo
({
url
:
path
});
}
function
audit
(
item
,
flag
)
{
var
obj
=
{
flag
:
flag
,
reason
:
null
,
id
:
item
.
recordId
}
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
)
uni
.
showLoading
({
title
:
'加载中'
})
api
.
doMergeFlows
(
obj
).
then
((
res
)
=>
{
uni
.
hideLoading
()
uni
.
showToast
({
title
:
'操作成功'
,
icon
:
'none'
})
getList
()
url
:
`/pages/rank/applyDetail?examId=
${
item
.
examId
}
&type=1`
})
}
function
handleBack
(
row
){
uni
.
showModal
({
title
:
'请输入撤回理由'
,
editable
:
true
,
success
:
function
(
res
)
{
if
(
res
.
confirm
)
{
if
(
!
res
.
content
)
{
uni
.
showToast
({
title
:
'请输入撤回理由'
,
icon
:
'none'
})
}
else
{
var
obj
=
{
flag
:
'2'
,
reason
:
res
.
content
,
recordId
:
row
.
recordId
}
api
.
doVerityBack
(
obj
).
then
(
rr
=>
{
uni
.
showToast
({
title
:
'操作成功'
,
icon
:
'none'
})
getList
()
})
}
}
}
function
goApproval
(
item
)
{
uni
.
navigateTo
({
url
:
`/level/ztx/memberAuditPage?ids=
${
item
.
examId
}
`
})
}
</
script
>
<
style
scoped
lang=
"scss"
>
.mt0
{
margin-top
:
0
!important
;
}
.stat-row
{
display
:
flex
;
gap
:
40
rpx
;
padding
:
20
rpx
30
rpx
;
background
:
#f3e5e5
;
font-size
:
26
rpx
;
color
:
#666
;
//
margin-top
:
20
rpx
;
.red
{
color
:
#C4121B
;
font-weight
:
600
;
}
}
.appList
.appItem
.name
{
width
:
100%
;
word-break
:
break-all
;
}
</
style
>
\ No newline at end of file
</
style
>
...
...
level/ztx/examinationAudit.vue
View file @
94f120e
...
...
@@ -19,22 +19,25 @@
<text
class=
"form-label"
>
审批结果
</text>
<view
class=
"radio-group"
>
<view
:class=
"
{ selected: form.flag === '1' }"
:class=
"
{ selected: form.flag == '1'
}"
class="radio-item"
@click="form.flag = '1'"
>
<view
class=
"radio-circle"
>
<uni-icons
v-if=
"form.flag === '1'"
color=
"#fff"
size=
"10"
type=
"checkmark"
></uni-icons>
<text
class=
"check-icon"
v-if=
"form.flag == '1'"
>
√
</text>
<!--
<uni-icons
v-if=
"form.flag == '1'"
color=
"#fff"
size=
"10"
type=
"checkmark"
></uni-icons>
-->
</view>
<text>
审批通过
</text>
</view>
<view
:class=
"
{ selected: form.flag ==
=
'0' }"
:class=
"
{ selected: form.flag == '0' }"
class="radio-item"
@click="form.flag = '0'"
>
<view
class=
"radio-circle"
>
<uni-icons
v-if=
"form.flag === '0'"
color=
"#fff"
size=
"10"
type=
"checkmark"
></uni-icons>
<text
v-if=
"form.flag == '0'"
class=
"check-icon"
>
√
</text>
<!--
<uni-icons
v-if=
"form.flag == '0'"
color=
"#fff"
size=
"10"
type=
"checkmark"
></uni-icons>
-->
</view>
<text>
审批拒绝
</text>
</view>
...
...
@@ -164,7 +167,7 @@ async function getExaminer() {
function
doSubmit
()
{
if
(
form
.
value
.
flag
==
=
'0'
&&
!
form
.
value
.
reason
)
{
if
(
form
.
value
.
flag
==
'0'
&&
!
form
.
value
.
reason
)
{
uni
.
showToast
({
title
:
'请输入拒绝理由'
,
icon
:
'none'
...
...
@@ -285,7 +288,7 @@ async function confirmDel() {
font-size
:
30
rpx
;
font-weight
:
600
;
color
:
#333
;
margin-left
:
10
rpx
;
//
margin-left
:
10
rpx
;
}
}
...
...
@@ -543,4 +546,12 @@ async function confirmDel() {
.btn-cancel
::after
,
.btn-confirm
::after
{
border
:
none
;
}
.check-icon
{
font-size
:
20
rpx
;
color
:
#fff
;
font-weight
:
bold
;
margin-right
:
6
rpx
;
}
</
style
>
...
...
level/ztx/examinationDetail.vue
View file @
94f120e
...
...
@@ -50,28 +50,16 @@
<uni-icons
color=
"#AD181F"
size=
"18"
type=
"checkmark-circle"
></uni-icons>
<text
class=
"section-title"
>
审核记录
</text>
</view>
<view
class=
"audit-list"
>
<view
v-for=
"(item, index) in auditList"
:key=
"index"
class=
"audit-item"
>
<view
:class=
"item.auditResult == 2 ? 'pass' : 'fail'"
class=
"audit-dot"
></view>
<view
class=
"audit-content"
>
<view
class=
"audit-row"
>
<text
class=
"audit-label"
>
审核协会
</text>
<text
class=
"audit-value"
>
{{
item
.
auditDeptName
||
'-'
}}
</text>
</view>
<view
class=
"audit-row"
>
<text
class=
"audit-label"
>
审核时间
</text>
<text
class=
"audit-value"
>
{{
formatDateTime
(
item
.
auditTime
)
}}
</text>
</view>
<view
class=
"audit-row"
>
<text
class=
"audit-label"
>
审核状态
</text>
<text
:class=
"item.auditResult == 1 ? 'text-success' : 'text-danger'"
class=
"audit-value"
>
{{
item
.
auditResult
==
1
?
'通过'
:
'拒绝'
}}
</text>
</view>
<view
v-if=
"item.auditMsg"
class=
"audit-row"
>
<text
class=
"audit-label"
>
备注
</text>
<text
class=
"audit-value"
>
{{
item
.
auditMsg
}}
</text>
<view
class=
"wBox"
>
<view
class=
"stepItem"
v-for=
"(item, index) in auditList"
:key=
"index"
>
<view
class=
"time"
>
{{
formatDateTime
(
item
.
auditTime
)
}}
</view>
<view
class=
"content"
>
<view
class=
"status"
>
<text
v-if=
"item.auditResult==1"
class=
"text-success"
>
审核通过
</text>
<text
v-if=
"item.auditResult==2"
class=
"text-danger"
>
审核拒绝
</text>
</view>
<view
class=
"deptName"
>
{{
item
.
auditDeptName
||
'--'
}}
</view>
<view
v-if=
"item.auditMsg"
>
备注:
{{
item
.
auditMsg
}}
</view>
</view>
</view>
</view>
...
...
@@ -191,7 +179,7 @@ function formatDateTime(dateStr) {
display
:
flex
;
align-items
:
center
;
margin-bottom
:
24
rpx
;
.section-title
{
font-size
:
30
rpx
;
font-weight
:
600
;
...
...
@@ -200,6 +188,54 @@ function formatDateTime(dateStr) {
}
}
.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
;
}
.stepItem
{
//
display
:
flex
;
padding
:
16
rpx
;
border-bottom
:
1
rpx
dashed
#eee
;
&:last-child
{
border-bottom
:
none
;
}
.time
{
width
:
80%
;
font-size
:
22
rpx
;
color
:
#999
;
flex-shrink
:
0
;
padding-top
:
4
rpx
;
}
.content
{
flex
:
1
;
.status
{
font-size
:
28
rpx
;
font-weight
:
600
;
margin-bottom
:
6
rpx
;
}
.deptName
{
font-size
:
26
rpx
;
color
:
#666
;
}
view
{
font-size
:
24
rpx
;
color
:
#999
;
margin-top
:
4
rpx
;
}
}
}
.info-card
{
.info-row
{
display
:
flex
;
...
...
@@ -238,69 +274,6 @@ function formatDateTime(dateStr) {
}
}
/* 审核记录 */
.audit-list
{
.audit-item
{
display
:
flex
;
padding
:
20
rpx
0
;
border-bottom
:
1px
dashed
#eee
;
&:last-child
{
border-bottom
:
none
;
}
.audit-dot
{
width
:
14
rpx
;
height
:
14
rpx
;
border-radius
:
50%
;
margin-top
:
8
rpx
;
margin-right
:
20
rpx
;
flex-shrink
:
0
;
&.pass
{
background-color
:
#4caf50
;
}
&
.fail
{
background-color
:
#f44336
;
}
}
.audit-content
{
flex
:
1
;
.audit-row
{
display
:
flex
;
margin-bottom
:
10
rpx
;
&:last-child
{
margin-bottom
:
0
;
}
.audit-label
{
font-size
:
24
rpx
;
color
:
#999
;
width
:
140
rpx
;
flex-shrink
:
0
;
}
.audit-value
{
font-size
:
26
rpx
;
color
:
#333
;
flex
:
1
;
&.text-success
{
color
:
#4caf50
;
}
&
.text-danger
{
color
:
#f44336
;
}
}
}
}
}
}
/* 考官表格 */
.examiner-table
{
...
...
level/ztx/memberAuditPage.vue
View file @
94f120e
...
...
@@ -17,28 +17,18 @@
<view
class=
"form-card"
>
<view
class=
"form-item"
>
<text
class=
"form-label"
>
审批结果
</text>
<
view
class=
"radio-group
"
>
<view
class=
"radio-item"
:class=
"
{ selected: form.flag === '1' }"
@click="form.flag = '1'"
>
<
view
class=
"radio-circle
"
>
<
uni-icons
v-if=
"form.flag === '1'"
type=
"checkmark"
size=
"10"
color=
"#fff"
></uni-icons
>
</view
>
<
text>
审批通过
</text
>
<
radio-group
@
change=
"onFlagChange
"
>
<view
class=
"radio-group"
>
<label
class=
"radio-item"
:class=
"
{ selected: form.flag == '1' }">
<radio
value=
"1"
:checked=
"form.flag == '1'"
color=
"#C4121B"
/>
<text>
审批通过
</text>
</label
>
<
label
class=
"radio-item"
:class=
"
{ selected: form.flag == '0' }
">
<
radio
value=
"0"
:checked=
"form.flag == '0'"
color=
"#C4121B"
/
>
<text>
审批拒绝
</text
>
<
/label
>
</view>
<view
class=
"radio-item"
:class=
"
{ selected: form.flag === '0' }"
@click="form.flag = '0'"
>
<view
class=
"radio-circle"
>
<uni-icons
v-if=
"form.flag === '0'"
type=
"checkmark"
size=
"10"
color=
"#fff"
></uni-icons>
</view>
<text>
审批拒绝
</text>
</view>
</view>
</radio-group>
</view>
<view
class=
"form-item"
>
...
...
@@ -65,7 +55,7 @@
</
template
>
<
script
setup
>
import
*
as
api
from
'@/common/api
_exam
.js'
import
*
as
api
from
'@/common/api.js'
import
{
ref
}
from
'vue'
import
{
onLoad
}
from
'@dcloudio/uni-app'
...
...
@@ -78,6 +68,10 @@ const form = ref({
reason
:
''
})
function
onFlagChange
(
e
)
{
form
.
value
.
flag
=
e
.
detail
.
value
}
onLoad
((
options
)
=>
{
if
(
options
.
type
)
{
type
.
value
=
options
.
type
...
...
@@ -92,7 +86,7 @@ function goBack() {
}
function
doSubmit
()
{
if
(
form
.
value
.
flag
==
=
'0'
&&
!
form
.
value
.
reason
)
{
if
(
form
.
value
.
flag
==
'0'
&&
!
form
.
value
.
reason
)
{
uni
.
showToast
({
title
:
'请输入拒绝理由'
,
icon
:
'none'
...
...
@@ -109,7 +103,7 @@ function doSubmit() {
reason
:
form
.
value
.
reason
||
''
}
api
.
shenAudit
(
params
).
then
(
res
=>
{
api
.
auditJi
(
params
).
then
(
res
=>
{
uni
.
showToast
({
title
:
'操作成功'
,
icon
:
'success'
...
...
@@ -168,7 +162,7 @@ function doSubmit() {
font-size
:
30
rpx
;
font-weight
:
600
;
color
:
#333
;
margin-left
:
10
rpx
;
//
margin-left
:
10
rpx
;
}
}
...
...
@@ -190,31 +184,31 @@ function doSubmit() {
.radio-group
{
display
:
flex
;
gap
:
40
rpx
;
gap
:
24
rpx
;
}
.radio-item
{
flex
:
1
;
display
:
flex
;
align-items
:
center
;
justify-content
:
center
;
gap
:
12
rpx
;
font-size
:
28
rpx
;
color
:
#333
;
color
:
#666
;
padding
:
20
rpx
0
;
border-radius
:
12
rpx
;
border
:
2
rpx
solid
#eee
;
background
:
#fafafa
;
.radio-circle
{
width
:
36
rpx
;
height
:
36
rpx
;
border-radius
:
50%
;
border
:
2
rpx
solid
#ddd
;
display
:
flex
;
align-items
:
center
;
justify-content
:
center
;
&.selected
{
color
:
#C4121B
;
border-color
:
#C4121B
;
background
:
#fff5f5
;
font-weight
:
500
;
}
&
.selected
{
.radio-circle
{
background-color
:
#C4121B
;
border-color
:
#C4121B
;
}
radio
{
transform
:
scale
(
0.8
);
}
}
...
...
pages/rank/applyDetail.vue
View file @
94f120e
...
...
@@ -6,7 +6,7 @@
<!-- 考段基本信息 -->
<view
class=
"card"
>
<view
class=
"card-header"
>
<view
class=
"header-left"
>
考段基本信息33
</view>
<view
class=
"header-left"
>
基本信息
</view>
</view>
<view
class=
"card-body"
>
<view
class=
"info-row"
>
...
...
@@ -122,26 +122,22 @@
<!--
<view
class=
"no-more"
v-if=
"!hasMore && list.length > 0"
>
没有更多了
</view>
-->
</view>
<!-- 审核信息 -->
<view
class=
"card"
>
<view
class=
"card-header"
>
<view
class=
"header-left"
>
审核信息
</view>
</view>
<!-- 审核记录 -->
<view
class=
"h3-padding"
>
审核记录
</view>
<view
class=
"wBox"
>
<view
v-if=
"loadingAudit"
class=
"state-tip"
>
加载中...
</view>
<view
v-else-if=
"recordList.length === 0"
class=
"state-tip"
>
暂无审核记录
</view>
<view
class=
"audit-list"
v-else
>
<view
class=
"audit-item"
v-for=
"(n, index) in recordList"
:key=
"index"
>
<view
class=
"audit-dot"
:class=
"n.auditResult == 1 ? 'pass' : 'fail'"
></view>
<view
class=
"audit-content"
>
<view
class=
"audit-time"
>
{{
n
.
auditTime
||
'待审批'
}}
</view>
<view
class=
"audit-status"
:class=
"n.auditResult == 1 ? 'text-green' : 'text-red'"
>
{{
getAuditResultText
(
n
.
auditResult
,
n
.
auditStatusStr
)
}}
</view>
<view
class=
"audit-dept"
>
{{
n
.
auditDeptName
||
n
.
deptName
||
'--'
}}
</view>
<view
class=
"audit-remark"
v-if=
"n.auditMsg"
>
备注:
{{
n
.
auditMsg
}}
</view>
<view
class=
"stepItem"
v-else
v-for=
"(n, index) in recordList"
:key=
"index"
>
<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>
<text
v-if=
"n.auditResult==3"
class=
"text-warning"
>
已撤回
</text>
</view>
<view
class=
"deptName"
>
{{
n
.
auditDeptName
||
n
.
deptName
||
'--'
}}
</view>
<view
v-if=
"n.auditMsg"
>
备注:
{{
n
.
auditMsg
}}
</view>
</view>
</view>
</view>
...
...
@@ -374,6 +370,61 @@ $content-gap: 24rpx; // 统一内容边距
box-sizing
:
border-box
;
}
.h3-padding
{
padding
:
30
rpx
30
rpx
0
;
font-size
:
30
rpx
;
font-weight
:
600
;
color
:
#333
;
}
.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
;
}
.stepItem
{
//
display
:
flex
;
padding
:
16
rpx
;
border-bottom
:
1
rpx
dashed
#eee
;
&:last-child
{
border-bottom
:
none
;
}
.time
{
width
:
80%
;
font-size
:
22
rpx
;
color
:
#999
;
flex-shrink
:
0
;
padding-top
:
4
rpx
;
}
.content
{
flex
:
1
;
.status
{
font-size
:
28
rpx
;
font-weight
:
600
;
margin-bottom
:
6
rpx
;
}
.deptName
{
font-size
:
26
rpx
;
color
:
#666
;
}
view
{
font-size
:
24
rpx
;
color
:
#999
;
margin-top
:
4
rpx
;
}
}
}
.card
{
background
:
$
card-bg
;
border-radius
:
16
rpx
;
...
...
@@ -550,68 +601,6 @@ $content-gap: 24rpx; // 统一内容边距
color
:
$
text-placeholder
;
}
.audit-list
{
padding
:
0
$
content-gap
24
rpx
;
}
.audit-item
{
display
:
flex
;
padding
:
20
rpx
0
;
border-bottom
:
1
rpx
dashed
$
border-color
;
&:last-child
{
border-bottom
:
none
;
}
.audit-dot
{
width
:
14
rpx
;
height
:
14
rpx
;
border-radius
:
50%
;
margin-top
:
8
rpx
;
margin-right
:
20
rpx
;
flex-shrink
:
0
;
&.pass
{
background
:
$
success-color
;
}
&
.fail
{
background
:
$
danger-color
;
}
}
.audit-content
{
flex
:
1
;
padding-right
:
8
rpx
;
.audit-time
{
font-size
:
24
rpx
;
color
:
$
text-placeholder
;
margin-bottom
:
6
rpx
;
}
.audit-status
{
font-size
:
28
rpx
;
font-weight
:
600
;
margin-bottom
:
6
rpx
;
}
.audit-dept
{
font-size
:
26
rpx
;
color
:
$
text-secondary
;
}
.audit-remark
{
font-size
:
24
rpx
;
color
:
$
text-placeholder
;
margin-top
:
6
rpx
;
padding
:
8
rpx
12
rpx
;
background
:
#f8f8f8
;
border-radius
:
8
rpx
;
}
}
}
.text-red
{
color
:
$
danger-color
!important
;
}
...
...
personalVip/orderDetail.vue
View file @
94f120e
...
...
@@ -45,25 +45,19 @@
</view>
<!-- 审核记录 -->
<view
class=
"card"
>
<view
class=
"card-header"
>
<view
class=
"header-left"
>
审核记录
</view>
</view>
<view
class=
"h3-padding"
>
审核记录
</view>
<view
class=
"wBox"
>
<view
v-if=
"loadingAudit"
class=
"state-tip"
>
加载中...
</view>
<view
v-else-if=
"auditList.length === 0"
class=
"state-tip"
>
暂无审核记录
</view>
<view
class=
"audit-list"
v-else
>
<view
class=
"audit-item"
v-for=
"(n, index) in auditList"
:key=
"index"
>
<view
class=
"audit-dot"
:class=
"n.auditResult == 1 ? 'pass' : 'fail'"
></view>
<view
class=
"audit-content"
>
<view
class=
"audit-time"
>
{{
parseDateTime
(
n
.
auditTime
)
}}
</view>
<view
class=
"audit-status"
:class=
"n.auditResult == 1 ? 'text-green' : 'text-red'"
>
{{
getAuditResultText
(
n
.
auditResult
)
}}
</view>
<view
class=
"audit-dept"
>
{{
n
.
auditDeptName
||
'——'
}}
</view>
<view
class=
"audit-remark"
v-if=
"n.auditMsg"
>
备注:
{{
n
.
auditMsg
}}
</view>
<view
class=
"stepItem"
v-else
v-for=
"(n, index) in auditList"
:key=
"index"
>
<view
class=
"time"
>
{{
parseDateTime
(
n
.
auditTime
)
}}
</view>
<view
class=
"content"
>
<view
class=
"status"
>
<text
v-if=
"n.auditResult==1"
class=
"text-success"
>
审核通过
</text>
<text
v-if=
"n.auditResult==0"
class=
"text-danger"
>
审核拒绝
</text>
</view>
<view
class=
"deptName"
>
{{
n
.
auditDeptName
||
'--'
}}
</view>
<view
v-if=
"n.auditMsg"
>
备注:
{{
n
.
auditMsg
}}
</view>
</view>
</view>
</view>
...
...
@@ -207,6 +201,61 @@ $content-gap: 24rpx;
box-sizing
:
border-box
;
}
.h3-padding
{
padding
:
30
rpx
30
rpx
0
;
font-size
:
30
rpx
;
font-weight
:
600
;
color
:
#333
;
}
.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
;
}
.stepItem
{
//
display
:
flex
;
padding
:
16
rpx
;
border-bottom
:
1
rpx
dashed
#eee
;
&:last-child
{
border-bottom
:
none
;
}
.time
{
width
:
80%
;
font-size
:
22
rpx
;
color
:
#999
;
flex-shrink
:
0
;
padding-top
:
4
rpx
;
}
.content
{
flex
:
1
;
.status
{
font-size
:
28
rpx
;
font-weight
:
600
;
margin-bottom
:
6
rpx
;
}
.deptName
{
font-size
:
26
rpx
;
color
:
#666
;
}
view
{
font-size
:
24
rpx
;
color
:
#999
;
margin-top
:
4
rpx
;
}
}
}
.card
{
background
:
$
card-bg
;
border-radius
:
16
rpx
;
...
...
@@ -314,73 +363,4 @@ $content-gap: 24rpx;
color
:
$
primary-color
;
}
.audit-list
{
padding
:
0
$
content-gap
24
rpx
;
}
.audit-item
{
display
:
flex
;
padding
:
20
rpx
0
;
border-bottom
:
1
rpx
dashed
$
border-color
;
&:last-child
{
border-bottom
:
none
;
}
.audit-dot
{
width
:
14
rpx
;
height
:
14
rpx
;
border-radius
:
50%
;
margin-top
:
8
rpx
;
margin-right
:
20
rpx
;
flex-shrink
:
0
;
&.pass
{
background
:
$
success-color
;
}
&
.fail
{
background
:
$
danger-color
;
}
}
.audit-content
{
flex
:
1
;
padding-right
:
8
rpx
;
.audit-time
{
font-size
:
24
rpx
;
color
:
$
text-placeholder
;
margin-bottom
:
6
rpx
;
}
.audit-status
{
font-size
:
28
rpx
;
font-weight
:
600
;
margin-bottom
:
6
rpx
;
}
.audit-dept
{
font-size
:
26
rpx
;
color
:
$
text-secondary
;
}
.audit-remark
{
font-size
:
24
rpx
;
color
:
$
text-placeholder
;
margin-top
:
6
rpx
;
padding
:
8
rpx
12
rpx
;
background
:
#f8f8f8
;
border-radius
:
8
rpx
;
}
}
}
.text-red
{
color
:
$
danger-color
!important
;
}
.text-green
{
color
:
$
success-color
!important
;
}
</
style
>
...
...
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