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
677c988b
authored
2026-04-16 11:48:20 +0800
by
lttnew
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
样式优化
1 parent
cccdbc00
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
242 additions
and
333 deletions
common/mystyle.scss
config.js
group/apply/applyList.vue
level/ztx/approval.vue
level/ztx/cert.vue
myCenter/order.vue
pages/exam/score.vue
pages/rank/approval.vue
pages/rank/cert.vue
pages/rank/scoreApproval.vue
personal/order.vue
personalVip/changeVipAudit.vue
personalVip/order.vue
common/mystyle.scss
View file @
677c988
...
...
@@ -20,7 +20,7 @@ page {
.mt20
{
margin-top
:
20px
!
important
;}
.must
{
color
:
#AD181F
;
font-size
:
24rpx
;}
.vipData
.w50
{
width
:
45%
;}
.esp
{
text-overflow
:
ellipsis
;
overflow
:
hidden
;
white-space
:
nowrap
;}
.esp
{
text-overflow
:
ellipsis
;
overflow
:
hidden
;
white-space
:
nowrap
;
margin-top
:
16rpx
;
}
.flex
{
display
:
flex
;}
.flexbox
{
display
:
flex
;}
.mt30
{
margin-top
:
30rpx
;}
...
...
@@ -148,7 +148,7 @@ page {
}
.name
{
margin
:
30rpx
0
20rpx
;
color
:
#0A1629
;
font-size
:
30rpx
;}
.flexbox
{
justify-content
:
space-between
;
padding
:
10rpx
;
.flexbox
{
justify-content
:
space-between
;
padding
:
1
5rpx
3
0rpx
;
background-color
:
rgba
(
244
,
249
,
253
,
1
);
border-radius
:
4px
;
font-size
:
28rpx
;
color
:
#91929E
;
box-sizing
:
border-box
;
view
{
font-size
:
26rpx
;
...
...
@@ -209,11 +209,55 @@ page {
}
}
}
.text-gray
{
color
:
#919191
;}
.text-gray
{
color
:
#919191
;
}
.text-primary
{
color
:
#1561CB
;}
.text-success
{
color
:
#32B16C
;}
.text-danger
{
color
:
#d51515
;}
.text-warning
{
color
:
#e6a23c
;}
.text-gray-bg
{
color
:
#919191
;
background
:
linear-gradient
(
135deg
,
#f5f5f5
,
#eeeeee
);
padding
:
2rpx
15rpx
;
font-size
:
22rpx
;
border-radius
:
20rpx
;
border
:
1rpx
solid
rgba
(
145
,
145
,
145
,
0
.25
);
}
.text-success-bg
{
background
:
linear-gradient
(
135deg
,
#e6f7ef
,
#d4f5e2
);
color
:
#1db024
;
font-size
:
22rpx
;
padding
:
2rpx
10rpx
;
border-radius
:
20rpx
;
border
:
1rpx
solid
rgba
(
82
,
196
,
26
,
0
.3
);
}
.text-danger-bg
{
padding
:
2rpx
15rpx
;
border-radius
:
20rpx
;
background
:
linear-gradient
(
135deg
,
#fff1f0
,
#ffe5e5
);
color
:
#e8341d
;
font-size
:
22rpx
;
border
:
1rpx
solid
rgba
(
232
,
52
,
29
,
0
.3
);
}
.text-primary-bg
{
background
:
linear-gradient
(
135deg
,
#e6f3ff
,
#d4e9ff
);
color
:
#1890ff
;
font-size
:
22rpx
;
padding
:
2rpx
15rpx
;
border-radius
:
20rpx
;
border
:
1rpx
solid
rgba
(
24
,
144
,
255
,
0
.3
);
}
.text-warning-bg
{
background
:
linear-gradient
(
135deg
,
#fff7e6
,
#fff1cc
);
color
:
#faad14
;
font-size
:
22rpx
;
padding
:
2rpx
15rpx
;
border-radius
:
20rpx
;
border
:
1rpx
solid
rgba
(
250
,
173
,
20
,
0
.3
);
}
.h3-padding
{
padding
:
50rpx
30rpx
0
;
font-size
:
36rpx
;
box-sizing
:
border-box
;
font-weight
:
500
;
color
:
#0A1629
;
...
...
@@ -295,10 +339,10 @@ page {
font-size
:
28rpx
;
color
:
#91929E
;
view
{
font-size
:
26rpx
;
text
{
color
:
#0A1629
;
font-size
:
28rpx
;
display
:
block
;}
.text-primary
{
color
:
#1561CB
;}
.text-success
{
color
:
#13B5B1
;}
.text-danger
{
color
:
#d51515
;}
.text-warning
{
color
:
#e6a23c
;}
.text-primary
{
color
:
#1561CB
;
background
:
linear-gradient
(
135deg
,
#e6f3ff
,
#d4e9ff
);
}
.text-success
{
color
:
#32B16C
;
background
:
linear-gradient
(
135deg
,
#e6f7ef
,
#d4f5e2
)
;}
.text-danger
{
color
:
#d51515
;
background
:
linear-gradient
(
135deg
,
#fff1f0
,
#ffe5e5
)
;}
.text-warning
{
color
:
#e6a23c
;
background
:
linear-gradient
(
135deg
,
#fff7e6
,
#fff1cc
)
;}
}
}
...
...
config.js
View file @
677c988
// 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'
...
...
group/apply/applyList.vue
View file @
677c988
...
...
@@ -12,9 +12,9 @@
<view
v-for=
"(item,index) in list"
:key=
"index"
class=
"appItem"
>
<view
class=
"status"
@
click=
"goDetail(item)"
>
<text
v-if=
"item.auditStatus == 1"
class=
"text-primary"
>
审核中
</text>
<text
v-if=
"item.auditStatus == 2"
class=
"text-success"
>
审核通过
</text>
<text
v-if=
"item.auditStatus == 3"
class=
"text-danger"
>
审核拒绝
</text>
<text
v-if=
"item.auditStatus == 1"
class=
"text-primary
-bg
"
>
审核中
</text>
<text
v-if=
"item.auditStatus == 2"
class=
"text-success
-bg
"
>
审核通过
</text>
<text
v-if=
"item.auditStatus == 3"
class=
"text-danger
-bg
"
>
审核拒绝
</text>
</view>
<view
class=
"date"
>
<uni-icons
color=
"#AD181F"
size=
"16"
type=
"calendar-filled"
></uni-icons>
...
...
level/ztx/approval.vue
View file @
677c988
...
...
@@ -11,18 +11,17 @@
<view
class=
"appList"
>
<view
class=
"appItem"
v-for=
"item in infoList"
>
<view
class=
"status"
:class=
"
{
'text-primary':item.status=='0',
'text-success':item.status=='1',
'text-danger':item.status=='2',
'text-warning':item.status=='3'
'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
}}
</view>
<view
class=
"date"
v-if=
"item.status!='0'&&item.submitTime"
>
提交时间:
{{
item
.
submitTime
}}
</view>
<view
class=
"text-primary"
>
{{
item
.
flowCode
}}
</view>
<view
class=
"name mt0"
@
click=
"goDetail(item)"
>
{{
item
.
mergeName
}}
</view>
<view
class=
"pp esp"
>
上报单位:
{{
item
.
memName
}}
</view>
<view
class=
"name mt10"
@
click=
"goDetail(item)"
>
{{
item
.
mergeName
}}
</view>
<view
class=
"flexbox"
@
click=
"goDetail(item)"
>
<view>
考试人数
...
...
@@ -44,6 +43,8 @@
<view>
¥
{{
item
.
totalAmount
}}
</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>
...
...
level/ztx/cert.vue
View file @
677c988
...
...
@@ -8,9 +8,9 @@
<view
class=
"appItem"
v-for=
"(item,index) in infoList"
:key=
"index"
>
<view
class=
"status"
@
click=
"goDetail(item)"
>
<text
:class=
"
{
'text-warning':item.certStatus=='0',
'text-primary':item.certStatus=='1',
'text-success':item.certStatus=='2'
'text-warning
-bg
':item.certStatus=='0',
'text-primary
-bg
':item.certStatus=='1',
'text-success
-bg
':item.certStatus=='2'
}">
{{
item
.
certStatusStr
}}
</text>
</view>
...
...
@@ -19,8 +19,7 @@
{{
item
.
submitTimeStr
}}
提交
</view>
<view
class=
"text-primary"
v-if=
"item.payCode"
@
click=
"goDetail(item)"
>
{{
item
.
payCode
}}
</view>
<view
class=
"name mt0 w100"
@
click=
"goDetail(item)"
><text
class=
"dot"
></text>
{{
item
.
name
}}
</view>
<view
class=
"pp esp"
v-if=
"item.certTimeStr"
>
证书发送时间:
{{
item
.
certTimeStr
}}
</view>
<view
class=
"name mt10 w100"
@
click=
"goDetail(item)"
><text
class=
"dot"
></text>
{{
item
.
name
}}
</view>
<view
class=
"flexbox"
@
click=
"goDetail(item)"
>
<view>
申请单位
...
...
@@ -32,6 +31,8 @@
</view>
</view>
<view
class=
"pp esp"
v-if=
"item.certTimeStr"
>
证书发送时间:
{{
item
.
certTimeStr
}}
</view>
<!-- v-if="item.certStatus != '2'" -->
<view
class=
"func"
>
<button
@
click=
"send(item)"
>
更新证书
</button>
...
...
myCenter/order.vue
View file @
677c988
...
...
@@ -6,8 +6,8 @@
v-for=
"(tab, index) in tabs"
:key=
"index"
class=
"tab-item"
:class=
"
{ active: currentTab ===
index
}"
@click="switchTab(
index
)"
:class=
"
{ active: currentTab ===
tab.type
}"
@click="switchTab(
tab.type
)"
>
{{
tab
.
name
}}
</view>
...
...
@@ -29,16 +29,17 @@
v-for=
"(item, index) in list"
:key=
"index"
class=
"order-card"
@
click=
"goToDetail(item)"
>
<!-- 订单头部:日期 + 状态 -->
<view
class=
"card-header"
>
<view
class=
"date"
>
<
image
:src=
"config.baseUrl_api + '/fs/static/calendar@2x.png'"
mode=
"widthFix"
style=
"width:30rpx;height:30rpx;"
/
>
<
!--
<image
:src=
"config.baseUrl_api + '/fs/static/calendar@2x.png'"
mode=
"widthFix"
style=
"width:30rpx;height:30rpx;"
/>
--
>
<!-- -->
<text
class=
"value
code-text"
@
click=
"goToDetail(item)"
>
{{
item
.
wfCode
||
'——'
}}
</text>
<text
class=
"value
text-primary"
>
{{
item
.
wfCode
||
'——'
}}
</text>
</view>
<view
class=
"status-tags"
>
<view
<
!--
<
view
class=
"status-tag"
:class=
"
{
success: item.payStatus == 1,
...
...
@@ -47,11 +48,12 @@
}"
>
{{
getStatusText
(
item
.
payStatus
)
}}
</view>
</view>
-->
<view
class=
"status-tag ml-10"
:class=
"
{
'status-pending': item.auditStatus == 0 || item.auditStatus == 1,
'status-wait': item.auditStatus == 0,
'status-pending': item.auditStatus == 1,
'status-success': item.auditStatus == 2,
'status-danger': item.auditStatus == 3
}"
...
...
@@ -74,17 +76,17 @@
<!-- 核心:前2tab仅展示缴费年限,后2tab仅展示人数合计 -->
<view
class=
"info-section flex f-j-s"
v-if=
"item.content"
>
<!-- 个人/单位会员(仅缴费年限) -->
<view
v-if=
"currentTab ===
0 || currentTab === 1
"
class=
"single-info"
>
<view
v-if=
"currentTab ===
'0' || currentTab === '1'
"
class=
"single-info"
>
<view
class=
"label"
>
缴费年限:
</view>
<view
class=
"value"
>
{{
item
.
content
.
yearCount
||
0
}}
</view>
</view>
<view
class=
"line"
v-if=
"currentTab ===
0 || currentTab === 1
"
></view>
<view
class=
"line"
v-if=
"currentTab ===
'0' || currentTab === '1'
"
></view>
<!-- 级位/段位考试(仅人数合计) -->
<view
v-if=
"currentTab ===
2 || currentTab === 3
"
class=
"single-info"
>
<view
v-if=
"currentTab ===
'2' || currentTab === '3' || currentTab === '4'
"
class=
"single-info"
>
<view
class=
"label"
>
人数合计
</view>
<view
class=
"value"
>
{{
item
.
content
.
allPersonCount
||
0
}}
</view>
</view>
<view
class=
"line"
v-if=
"currentTab ===
2 || currentTab === 3
"
></view>
<view
class=
"line"
v-if=
"currentTab ===
'2' || currentTab === '3' || currentTab === '4'
"
></view>
<view
class=
"single-info"
>
<view
class=
"label"
>
订单状态
</view>
<view
class=
"value"
:class=
"item.effect == 1 ? 'text-success' : 'text-warning'"
>
...
...
@@ -204,7 +206,7 @@ const tabs = computed(() => {
];
}
});
const
currentTab
=
ref
(
0
);
const
currentTab
=
ref
(
'0'
);
// 数据与分页配置
const
list
=
ref
([]);
...
...
@@ -242,6 +244,9 @@ onMounted(() => {
console
.
log
(
'onMounted - app.globalData:'
,
app
.
globalData
);
deptType
.
value
=
Number
(
app
.
globalData
?.
deptType
||
0
);
console
.
log
(
'onMounted - deptType.value:'
,
deptType
.
value
,
typeof
deptType
.
value
);
const
firstType
=
tabs
.
value
[
0
]?.
type
??
'0'
;
currentTab
.
value
=
firstType
;
queryParams
.
type
=
firstType
;
initData
();
});
...
...
@@ -269,9 +274,9 @@ const loadMore = () => {
};
// 切换标签
const
switchTab
=
(
index
)
=>
{
currentTab
.
value
=
index
;
queryParams
.
type
=
t
abs
.
value
[
index
].
t
ype
;
const
switchTab
=
(
type
)
=>
{
currentTab
.
value
=
type
;
queryParams
.
type
=
type
;
pageNum
.
value
=
1
;
list
.
value
=
[];
hasMore
.
value
=
true
;
...
...
@@ -489,10 +494,11 @@ const closeCancelPopup = () => {
margin-bottom
:
20
rpx
;
padding
:
20
rpx
;
box-shadow
:
0
2
rpx
8
rpx
rgba
(
0
,
0
,
0
,
0.04
);
border-top
:
6
rpx
solid
transparent
;
background-clip
:
padding-box
,
border-box
;
background-origin
:
padding-box
,
border-box
;
background-image
:
linear-gradient
(
#fff
,
#fff
),
linear-gradient
(
90deg
,
#FF755A
,
#F51722
);
border-radius
:
12
rpx
;
//
border-top
:
6
rpx
solid
transparent
;
//
background-clip
:
padding-box
,
border-box
;
//
background-origin
:
padding-box
,
border-box
;
//
background-image
:
linear-gradient
(
#fff
,
#fff
),
linear-gradient
(
90deg
,
#FF755A
,
#F51722
);
}
}
...
...
@@ -502,8 +508,8 @@ const closeCancelPopup = () => {
justify-content
:
space-between
;
align-items
:
center
;
padding-bottom
:
20
rpx
;
margin-bottom
:
20
rpx
;
border-bottom
:
1
rpx
dashed
#eee
;
//
margin-bottom
:
20
rpx
;
//
border-bottom
:
1
rpx
dashed
#eee
;
.date
{
display
:
flex
;
...
...
@@ -545,19 +551,28 @@ const closeCancelPopup = () => {
margin-left
:
10
rpx
;
}
&
.status-wait
{
background
:
#f0f5ff
;
color
:
#597ef7
;
border
:
1
rpx
solid
rgba
(
89
,
126
,
247
,
0.3
);
}
&
.status-pending
{
background
:
#fff7e6
;
color
:
#faad14
;
border
:
1
rpx
solid
rgba
(
250
,
173
,
20
,
0.3
);
}
&
.status-success
{
background
:
#e6f7ef
;
color
:
#52c41a
;
border
:
1
rpx
solid
rgba
(
82
,
196
,
26
,
0.3
);
}
&
.status-danger
{
background
:
#fff1f0
;
color
:
#ff4d4f
;
border
:
1
rpx
solid
rgba
(
232
,
52
,
29
,
0.3
);
}
}
}
...
...
@@ -622,8 +637,8 @@ const closeCancelPopup = () => {
//
费用合计
.price-section
{
border-top
:
1
rpx
dashed
#eee
;
padding-top
:
16
rpx
;
//
border-top
:
1
rpx
dashed
#eee
;
//
padding-top
:
16
rpx
;
margin-top
:
8
rpx
;
.price-row
{
...
...
pages/exam/score.vue
View file @
677c988
...
...
@@ -9,10 +9,10 @@
<view
@
click=
"goDetail(item)"
>
<view
class=
"status"
>
<text
:class=
"
{
'text-primary':item.scoreStatus=='0',
'text-success':item.scoreStatus=='2',
'text-danger':item.scoreStatus=='3',
'text-warning':item.scoreStatus=='4'
'text-primary
-bg
':item.scoreStatus=='0',
'text-success
-bg
':item.scoreStatus=='2',
'text-danger
-bg
':item.scoreStatus=='3',
'text-warning
-bg
':item.scoreStatus=='4'
}">
{{
item
.
scoreStatusStr
}}
</text>
</view>
...
...
pages/rank/approval.vue
View file @
677c988
...
...
@@ -9,18 +9,16 @@
<view
@
click=
"goDetail(item)"
>
<view
class=
"status"
>
<text
:class=
"
{
'text-primary':item.auditStatus=='0',
'text-success':item.auditStatus=='1',
'text-danger':item.auditStatus=='2',
'text-warning':item.auditStatus=='3'
'text-primary
-bg
':item.auditStatus=='0',
'text-success
-bg
':item.auditStatus=='1',
'text-danger
-bg
':item.auditStatus=='2',
'text-warning
-bg
':item.auditStatus=='3'
}">
{{
item
.
statusStr
}}
</text>
</view>
<view
class=
"date"
v-if=
"item.status!='0'&&item.submitTime"
>
提交时间:
{{
item
.
submitTime
}}
</view>
<view
class=
"text-primary"
>
{{
item
.
examCode
}}
</view>
<view
class=
"name mt0"
>
{{
item
.
name
}}
</view>
<view
class=
"pp esp"
>
申请单位:
{{
item
.
memberName
}}
</view>
<view
class=
"pp esp"
>
考段日期:
{{
item
.
startTime
.
substring
(
0
,
16
)
}}
至
{{
item
.
endTime
.
substring
(
0
,
16
)
}}
</view>
<view
class=
"flexbox"
>
<view>
申请日期
...
...
@@ -31,6 +29,9 @@
<view>
{{
item
.
totalNum
||
'--'
}}
</view>
</view>
</view>
<view
class=
"pp esp"
>
申请单位:
{{
item
.
memberName
}}
</view>
<view
class=
"pp esp"
>
考段日期:
{{
item
.
startTime
.
substring
(
0
,
16
)
}}
至
{{
item
.
endTime
.
substring
(
0
,
16
)
}}
</view>
</view>
<view
class=
"func"
v-if=
"item.auditStatus=='0'"
>
<button
@
click=
"audit(item,'2')"
>
拒绝
</button>
...
...
pages/rank/cert.vue
View file @
677c988
...
...
@@ -8,15 +8,14 @@
<view
@
click=
"goDetail(item)"
>
<view
class=
"status"
>
<text
:class=
"
{
'text-primary':item.certStatus=='0',
'text-warning':item.certStatus=='1',
'text-success':item.certStatus=='2',
'text-primary
-bg
':item.certStatus=='0',
'text-warning
-bg
':item.certStatus=='1',
'text-success
-bg
':item.certStatus=='2',
}">
{{
item
.
certStatusStr
}}
</text>
</view>
<view
class=
"date"
>
结算编号:
{{
item
.
payCode
}}
</view>
<view
class=
"name mt0"
>
{{
item
.
name
}}
</view>
<view
class=
"pp esp"
>
考试时间:
{{
item
.
startTime
?.
substring
(
0
,
16
)
}}
至
{{
item
.
endTime
?.
substring
(
0
,
16
)
}}
</view>
<view
class=
"flexbox"
>
<view>
申请日期
...
...
@@ -35,6 +34,8 @@
<view>
{{
item
.
noCerts
}}
</view>
</view>
</view>
<view
class=
"pp esp"
>
考试时间:
{{
item
.
startTime
?.
substring
(
0
,
16
)
}}
至
{{
item
.
endTime
?.
substring
(
0
,
16
)
}}
</view>
</view>
<view
class=
"func"
>
<button
@
click=
"send(item)"
>
一键生成
</button>
...
...
pages/rank/scoreApproval.vue
View file @
677c988
...
...
@@ -9,10 +9,10 @@
<view
@
click=
"goDetail(item)"
>
<view
class=
"status"
>
<text
:class=
"
{
'text-primary':item.auditStatus=='0',
'text-success':item.auditStatus=='1',
'text-danger':item.auditStatus=='2',
'text-warning':item.auditStatus=='3'
'text-primary
-bg
':item.auditStatus=='0',
'text-success
-bg
':item.auditStatus=='1',
'text-danger
-bg
':item.auditStatus=='2',
'text-warning
-bg
':item.auditStatus=='3'
}">
{{
item
.
statusStr
}}
</text>
</view>
...
...
@@ -22,8 +22,6 @@
</view>
<view
class=
"text-primary"
>
{{
item
.
examCode
}}
</view>
<view
class=
"name mt10"
><text
class=
"dot"
></text>
{{
item
.
name
}}
</view>
<view
class=
"pp esp"
>
考段日期:
{{
item
.
startTime
.
substring
(
0
,
16
)
}}
至
{{
item
.
endTime
.
substring
(
0
,
16
)
}}
</view>
<view
class=
"flexbox"
>
<view>
申请日期
...
...
@@ -40,6 +38,9 @@
</view>
</view>
</view>
<view
class=
"pp esp"
>
考段日期:
{{
item
.
startTime
.
substring
(
0
,
16
)
}}
至
{{
item
.
endTime
.
substring
(
0
,
16
)
}}
</view>
</view>
<view
class=
"func"
v-if=
"item.auditStatus=='0'"
>
<button
@
click=
"audit(item,'2')"
>
拒绝
</button>
...
...
personal/order.vue
View file @
677c988
...
...
@@ -19,9 +19,10 @@
<!-- 订单头部:日期 + 状态 -->
<view
class=
"card-header"
>
<view
class=
"date"
>
<image
v-if=
"item.payTime"
:src=
"config.baseUrl_api + '/fs/static/calendar@2x.png'"
mode=
"widthFix"
style=
"width:30rpx;height:30rpx;"
/>
<text
v-if=
"item.payTime"
class=
"date-text"
>
{{
item
.
payTime
}}
</text>
<!--
<image
v-if=
"item.payTime"
:src=
"config.baseUrl_api + '/fs/static/calendar@2x.png'"
mode=
"widthFix"
--
>
<!-- style="width:30rpx;height:30rpx;"/> -->
<!--
<text
v-if=
"item.payTime"
class=
"date-text"
>
{{
item
.
payTime
}}
</text>
-->
<text
class=
"value text-primary"
>
{{
item
.
wfCode
||
'——'
}}
</text>
</view>
<view
:class=
"
{
...
...
@@ -41,8 +42,8 @@
<text
class=
"value"
>
{{
item
.
tradeNo
||
'——'
}}
</text>
</view>
<view
class=
"info-row"
>
<text
class=
"label"
>
缴费编号
:
</text>
<text
class=
"value"
>
{{
item
.
wfCode
||
'——
'
}}
</text>
<text
class=
"label"
>
支付时间
:
</text>
<text
class=
"value"
>
{{
item
.
payTime
||
'
'
}}
</text>
</view>
<!-- 核心:个人会员仅展示缴费年限 -->
...
...
@@ -305,7 +306,7 @@ const closeCancelPopup = () => {
<
style
lang=
"scss"
scoped
>
.order-page
{
background
:
#f5f7fa
;
min-
height
:
100vh
;
height
:
100vh
;
display
:
flex
;
flex-direction
:
column
;
...
...
@@ -318,7 +319,8 @@ const closeCancelPopup = () => {
//
滚动列表容器
.order-list-scroll
{
flex
:
1
;
height
:
0
;
height
:
auto
;
overflow
:
auto
;
}
//
订单列表
...
...
@@ -330,10 +332,7 @@ const closeCancelPopup = () => {
margin-bottom
:
20
rpx
;
padding
:
20
rpx
;
box-shadow
:
0
2
rpx
8
rpx
rgba
(
0
,
0
,
0
,
0.04
);
border-top
:
6
rpx
solid
transparent
;
background-clip
:
padding-box
,
border-box
;
background-origin
:
padding-box
,
border-box
;
background-image
:
linear-gradient
(
#fff
,
#fff
),
linear-gradient
(
90deg
,
#FF755A
,
#F51722
);
border-radius
:
12
rpx
;
}
}
...
...
@@ -343,8 +342,6 @@ const closeCancelPopup = () => {
justify-content
:
space-between
;
align-items
:
center
;
padding-bottom
:
20
rpx
;
margin-bottom
:
20
rpx
;
border-bottom
:
1
rpx
dashed
#eee
;
.date
{
display
:
flex
;
...
...
@@ -358,23 +355,26 @@ const closeCancelPopup = () => {
}
.status-tag
{
font-size
:
2
4
rpx
;
font-size
:
2
2
rpx
;
padding
:
6
rpx
16
rpx
;
border-radius
:
20
rpx
;
&.success
{
background
:
#e6f7ef
;
color
:
#52c41a
;
border
:
1
rpx
solid
rgba
(
82
,
196
,
26
,
0.3
);
}
&
.danger
{
background
:
#fff1f0
;
color
:
#ff4d4f
;
border
:
1
rpx
solid
rgba
(
232
,
52
,
29
,
0.3
);
}
&
.pending
{
background
:
#f5f5f5
;
color
:
#999
;
background
:
#fff7e6
;
color
:
#faad14
;
border
:
1
rpx
solid
rgba
(
250
,
173
,
20
,
0.3
);
}
}
}
...
...
@@ -436,10 +436,9 @@ const closeCancelPopup = () => {
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
margin
:
0
0
30
rpx
;
padding
:
15
rpx
0
;
font-size
:
28
rpx
;
border-bottom
:
1
rpx
dashed
#eee
;
margin
:
0
0
16
rpx
;
padding
:
8
rpx
0
;
font-size
:
26
rpx
;
.label
{
color
:
#333
;
...
...
@@ -448,7 +447,7 @@ const closeCancelPopup = () => {
.amount
{
color
:
#EB6100
;
font-weight
:
600
;
font-size
:
32
rpx
;
font-size
:
28
rpx
;
}
}
...
...
@@ -507,9 +506,6 @@ const closeCancelPopup = () => {
}
}
//
空状态
//
加载
/
无更多提示
.loading-tip
,
.no-more
{
text-align
:
center
;
...
...
personalVip/changeVipAudit.vue
View file @
677c988
...
...
@@ -12,11 +12,11 @@
<view
class=
"appItem"
v-for=
"(item,index) in list"
:key=
"index"
>
<view
class=
"status"
@
click=
"goDetail(item)"
>
<view>
<text
v-if=
"item.status == 0"
class=
"text-warning"
>
待提交
</text>
<text
v-if=
"item.status == 1"
class=
"text-primary"
>
审核中
</text>
<text
v-if=
"item.status == 2"
class=
"text-success"
>
审核通过
</text>
<text
v-if=
"item.status == 3"
class=
"text-danger"
>
审核拒绝
</text>
<text
v-if=
"item.status == 4"
class=
"text-warning"
>
已撤回
</text>
<text
v-if=
"item.status == 0"
class=
"text-warning
-bg
"
>
待提交
</text>
<text
v-if=
"item.status == 1"
class=
"text-primary
-bg
"
>
审核中
</text>
<text
v-if=
"item.status == 2"
class=
"text-success
-bg
"
>
审核通过
</text>
<text
v-if=
"item.status == 3"
class=
"text-danger
-bg
"
>
审核拒绝
</text>
<text
v-if=
"item.status == 4"
class=
"text-warning
-bg
"
>
已撤回
</text>
</view>
</view>
...
...
personalVip/order.vue
View file @
677c988
...
...
@@ -22,88 +22,64 @@
:scroll-enabled=
"!isPopupOpen"
>
<view
class=
"order-list"
>
<!-- 有数据才循环 -->
<view
v-if=
"list.length > 0"
>
<view
v-for=
"(item, index) in list"
:key=
"index"
class=
"order-card"
class=
"order-card"
@
click=
"goToDetail(item)"
>
<!-- 订单头部:日期 + 状态 -->
<!-- 订单头部:日期 +
审核
状态 -->
<view
class=
"card-header"
>
<view
class=
"date"
>
<image
:src=
"config.baseUrl_api + '/fs/static/calendar@2x.png'"
v-if=
"item.payTime"
mode=
"widthFix"
style=
"width:30rpx;height:30rpx;"
/>
<text
class=
"date-text"
v-if=
"item.payTime"
>
{{
item
.
payTime
}}
</text>
<text
class=
"value order-no text-primary"
>
{{
item
.
wfCode
||
''
}}
</text>
<!--
<image
:src=
"config.baseUrl_api + '/fs/static/calendar@2x.png'"
v-if=
"item.payTime"
mode=
"widthFix"
style=
"width:30rpx;height:30rpx;"
/>
<text
class=
"date-text"
v-if=
"item.payTime"
>
{{
item
.
payTime
}}
</text>
-->
</view>
<view
class=
"status-tag"
:class=
"get
StatusClass(item.pay
Status)"
class=
"
audit-
status-tag"
:class=
"get
AuditStatusClass(item.audit
Status)"
>
{{
get
StatusText
(
item
.
pay
Status
)
}}
{{
get
AuditStatusText
(
item
.
audit
Status
)
}}
</view>
</view>
<!-- 订单编号
、缴费编号
-->
<!-- 订单编号 -->
<view
class=
"info-row"
>
<text
class=
"label"
>
订单编号
</text>
<text
class=
"value order-no"
>
{{
item
.
tradeNo
||
'——'
}}
</text>
</view>
<view
class=
"flex f-j-s"
>
<view
class=
"info-row"
>
<text
class=
"label"
>
缴费编号:
</text>
<view
class=
"payment-code"
@
click=
"goToDetail(item)"
>
<text
class=
"code-text"
>
{{
item
.
wfCode
||
'——'
}}
</text>
<!--
<text
class=
"code-arrow"
>
›
</text>
-->
</view>
</view>
<view
class=
"audit-row"
>
<!--
<text
class=
"label"
>
审核状态:
</text>
-->
<text
class=
"audit-status"
:class=
"getAuditStatusClass(item.auditStatus)"
>
{{
getAuditStatusText
(
item
.
auditStatus
)
}}
</text>
</view>
<!-- 缴费编号 -->
<view
class=
"info-row payment-code-row"
v-if=
"item.payTime"
>
<text
class=
"label"
>
缴费时间
</text>
<text
class=
"value order-no"
>
{{
item
.
payTime
||
''
}}
</text>
<!--
<view
class=
"payment-code"
>
<text
class=
"code-text"
>
{{
item
.
payTime
||
'——'
}}
</text>
</view>
-->
</view>
<!-- 核心:根据tab类型展示不同内容 -->
<view
class=
"info-section flex f-j-s"
v-if=
"item.content"
>
<!-- 个人/单位会员(缴费年限) -->
<!-- 核心信息区:缴费年限/人数 + 缴费方式 -->
<view
class=
"info-section flex f-j-s"
>
<view
v-if=
"currentTab === 0 || currentTab === 1"
class=
"single-info"
>
<view
class=
"label"
>
缴费年限
:
</view>
<view
class=
"value"
>
{{
item
.
content
.
yearCount
||
0
}}
</view>
<view
class=
"label"
>
缴费年限
</view>
<view
class=
"value"
>
{{
item
.
content
?.
yearCount
||
0
}}
年
</view>
</view>
<!-- 级位/段位/越段考试(人数合计) -->
<view
v-if=
"currentTab === 2 || currentTab === 3 || currentTab === 4"
class=
"single-info"
>
<view
class=
"label"
>
人数合计
</view>
<view
class=
"value"
>
{{
item
.
content
.
allPersonCount
||
0
}}
</view>
<view
class=
"value"
>
{{
item
.
content
?.
allPersonCount
||
0
}}
人
</view>
</view>
<view
class=
"
line
"
></view>
<view
class=
"
divider
"
></view>
<view
class=
"single-info"
>
<view
class=
"label"
>
缴费方式
</view>
<view
class=
"value"
>
民生付
</view>
<view
class=
"value"
>
{{
item
.
payWay
||
'民生付'
}}
</view>
</view>
</view>
<!-- 费用合计 -->
<view
class=
"total-row"
>
<text
class=
"label"
>
费用合计
:
</text>
<text
class=
"label"
>
费用合计
</text>
<text
class=
"amount"
>
¥
{{
(
Number
(
item
.
price
)
||
0
).
toFixed
(
2
)
}}
</text>
</view>
<!-- 审核状态 -->
<!--
<view
class=
"btn-group"
>
<button
class=
"btn btn-delete"
@
click=
"handleDelete(item)"
>
删除
</button>
<template
v-if=
"item.payStatus == 1"
>
<button
class=
"btn btn-invoice"
@
click=
"makeInvoiceFN(item)"
:disabled=
"item.invoiceStatus === 1"
>
{{
item
.
invoiceStatus
===
1
?
'已开票'
:
'申请开票'
}}
</button>
</
template
>
<
template
v-if=
"item.payStatus == 0"
>
<button
class=
"btn btn-cancel"
@
click=
"handleCancel(item)"
>
取消订单
</button>
<button
class=
"btn btn-pay"
@
click=
"handlePay(item)"
>
去缴费
</button>
</
template
>
</view>
-->
</view>
</view>
...
...
@@ -149,6 +125,7 @@ import { ref, reactive, onMounted, computed } from 'vue';
import
{
onReachBottom
,
onLoad
}
from
'@dcloudio/uni-app'
import
*
as
api
from
'@/common/api.js'
import
config
from
'@/config.js'
// 标签栏配置
const
tabs
=
ref
([
{
name
:
'个人会员'
,
type
:
'0'
},
...
...
@@ -188,7 +165,6 @@ const currentOrder = ref(null);
// 页面加载
onLoad
(
option
=>
{
// 根据传入的type参数设置当前tab
if
(
option
.
type
)
{
const
type
=
option
.
type
;
const
tabIndex
=
tabs
.
value
.
findIndex
(
tab
=>
tab
.
type
===
type
);
...
...
@@ -218,33 +194,8 @@ const switchTab = (index) => {
initData
();
};
// 状态文本映射
const
getStatusText
=
(
status
)
=>
{
// 确保status是字符串类型
const
statusStr
=
String
(
status
);
const
map
=
{
'0'
:
'待缴费'
,
'1'
:
'缴费成功'
,
'2'
:
'订单取消'
};
return
map
[
statusStr
]
||
'未知状态'
;
};
// 缴费状态样式类
const
getStatusClass
=
(
status
)
=>
{
// 确保status是字符串类型
const
statusStr
=
String
(
status
);
const
map
=
{
'0'
:
'status-pending'
,
'1'
:
'status-success'
,
'2'
:
'status-danger'
};
return
map
[
statusStr
]
||
''
;
};
// 审核状态文本
const
getAuditStatusText
=
(
status
)
=>
{
// 确保status是字符串类型
const
statusStr
=
String
(
status
);
const
map
=
{
'0'
:
'待提交'
,
...
...
@@ -257,7 +208,6 @@ const getAuditStatusText = (status) => {
// 审核状态样式类
const
getAuditStatusClass
=
(
status
)
=>
{
// 确保status是字符串类型
const
statusStr
=
String
(
status
);
const
map
=
{
'0'
:
'audit-pending'
,
...
...
@@ -280,7 +230,6 @@ const initData = async () => {
hasMore
.
value
=
false
;
return
;
}
// 安全解析content字段
res
.
rows
.
forEach
(
item
=>
{
if
(
item
.
content
)
{
try
{
...
...
@@ -290,13 +239,11 @@ const initData = async () => {
}
}
});
// 分页拼接数据
if
(
pageNum
.
value
===
1
)
{
list
.
value
=
res
.
rows
;
}
else
{
list
.
value
.
push
(...
res
.
rows
);
}
// 判断是否还有更多数据
hasMore
.
value
=
list
.
value
.
length
<
(
res
.
total
||
0
);
}
catch
(
e
)
{
console
.
error
(
'订单加载异常:'
,
e
);
...
...
@@ -385,21 +332,17 @@ const closeCancelPopup = () => {
// 跳转到详情页
const
goToDetail
=
(
item
)
=>
{
const
form
=
encodeURIComponent
(
JSON
.
stringify
(
item
))
// 根据订单类型跳转到不同页面
switch
(
queryParams
.
type
)
{
case
'1'
:
// 单位会员
// 跳转到新的单位会员订单详情页
case
'1'
:
uni
.
navigateTo
({
url
:
`/group/groupOrderDetail?form=
${
form
}
`
});
break
;
case
'2'
:
// 级位考试
case
'3'
:
// 段位考试
case
'4'
:
// 越段考试
// 考试类型使用 sourceId 作为 examId,传递 type 参数用于获取审核记录
case
'2'
:
case
'3'
:
case
'4'
:
uni
.
navigateTo
({
url
:
`/pages/rank/applyDetail?examId=
${
item
.
sourceId
||
item
.
id
}
&type=
${
queryParams
.
type
}
`
});
break
;
case
'0'
:
// 个人会员
case
'0'
:
default
:
// 个人会员使用 sourceId 作为 rangeId
uni
.
navigateTo
({
url
:
`/personalVip/orderDetail?rangeId=
${
item
.
sourceId
||
item
.
id
}
&type=
${
queryParams
.
type
}
`
});
break
;
}
...
...
@@ -466,14 +409,11 @@ const goToDetail = (item) => {
.order-card
{
background
:
#fff
;
margin-bottom
:
20
rpx
;
padding
:
2
0
rpx
;
padding
:
2
4
rpx
;
border-radius
:
16
rpx
;
box-shadow
:
0
4
rpx
16
rpx
rgba
(
0
,
0
,
0
,
0.06
);
//
border-left
:
6
rpx
solid
#e8341d
;
position
:
relative
;
overflow
:
hidden
;
}
}
...
...
@@ -483,42 +423,48 @@ const goToDetail = (item) => {
justify-content
:
space-between
;
align-items
:
center
;
padding-bottom
:
20
rpx
;
margin-bottom
:
20
rpx
;
border-bottom
:
1
rpx
solid
#f0f0f0
;
//
margin-bottom
:
20
rpx
;
//
border-bottom
:
1
rpx
solid
#f0f0f0
;
.date
{
display
:
flex
;
align-items
:
center
;
gap
:
8
rpx
;
font-size
:
2
6
rpx
;
//
gap
:
8
rpx
;
font-size
:
2
8
rpx
;
.date-text
{
color
:
#666
;
}
}
.status-tag
{
font-size
:
2
2
rpx
;
.
audit-
status-tag
{
font-size
:
2
4
rpx
;
padding
:
6
rpx
18
rpx
;
border-radius
:
22
rpx
;
font-weight
:
500
;
&.
status
-success
{
&.
audit
-success
{
background
:
linear-gradient
(
135deg
,
#e6f7ef
,
#d4f5e2
);
color
:
#1db024
;
border
:
1
rpx
solid
rgba
(
#52c41a
,
0.3
);
border
:
1
rpx
solid
rgba
(
82
,
196
,
26
,
0.3
);
}
&
.
status
-danger
{
&
.
audit
-danger
{
background
:
linear-gradient
(
135deg
,
#fff1f0
,
#ffe5e5
);
color
:
#e8341d
;
border
:
1
rpx
solid
rgba
(
#e8341c
,
0.3
);
border
:
1
rpx
solid
rgba
(
232
,
52
,
29
,
0.3
);
}
&
.status-pending
{
background
:
linear-gradient
(
135deg
,
#f5f5f5
,
#ebebeb
);
color
:
#666
;
border
:
1
rpx
solid
rgba
(
#999
,
0.3
);
&
.audit-processing
{
background
:
linear-gradient
(
135deg
,
#e6f3ff
,
#d4e9ff
);
color
:
#1890ff
;
border
:
1
rpx
solid
rgba
(
24
,
144
,
255
,
0.3
);
}
&
.audit-pending
{
background
:
linear-gradient
(
135deg
,
#fff7e6
,
#fff1cc
);
color
:
#faad14
;
border
:
1
rpx
solid
rgba
(
250
,
173
,
20
,
0.3
);
}
}
}
...
...
@@ -527,13 +473,14 @@ const goToDetail = (item) => {
.info-row
{
display
:
flex
;
align-items
:
center
;
margin-bottom
:
20
rpx
;
font-size
:
2
6
rpx
;
margin-bottom
:
16
rpx
;
font-size
:
2
8
rpx
;
.label
{
color
:
#
999
;
color
:
#
666
;
flex-shrink
:
0
;
margin-right
:
20
rpx
;
width
:
120
rpx
;
margin-right
:
10
rpx
;
}
.value
{
...
...
@@ -541,72 +488,65 @@ const goToDetail = (item) => {
word-break
:
break-all
;
&.order-no
{
font-size
:
24
rpx
;
color
:
#999
;
letter-spacing
:
1
rpx
;
font-size
:
26
rpx
;
}
}
}
//
缴费编号行
.payment-code-row
{
margin-bottom
:
20
rpx
;
}
//
缴费编号
-
醒目可点击
.payment-code
{
display
:
inline-flex
;
align-items
:
center
;
gap
:
6
rpx
;
//
background
:
linear-gradient
(
135deg
,
#fff5f5
,
#ffeaea
);
padding
:
8
rpx
20
rpx
8
rpx
16
rpx
;
border-radius
:
24
rpx
;
//
border
:
1
rpx
solid
rgba
(
#e8341d
,
0.2
);
transition
:
all
0.2s
ease
;
//
transition
:
all
0.2s
ease
;
&:active
{
background
:
linear-gradient
(
135deg
,
#ffeaea
,
#ffd5d5
)
;
opacity
:
0.8
;
transform
:
scale
(
0.98
);
}
.code-text
{
font-size
:
28
rpx
;
font-weight
:
600
;
color
:
#e8341d
;
letter-spacing
:
1
rpx
;
}
.code-arrow
{
font-size
:
32
rpx
;
color
:
#e8341d
;
font-weight
:
bold
;
line-height
:
1
;
font-size
:
30
rpx
;
//
font-weight
:
600
;
color
:
#1890ff
;
//
letter-spacing
:
1
rpx
;
}
}
//
核心信息区
.info-section
{
background
:
linear-gradient
(
135deg
,
#f8f9fc
,
#f0f4fa
)
;
background
:
#f4f9fd
;
display
:
flex
;
align-items
:
center
;
padding
:
0
40
rpx
;
justify-content
:
space-around
;
margin
:
20
rpx
0
;
border-radius
:
12
rpx
;
padding
:
16
rpx
0
;
}
.line
{
.divider
{
width
:
1
rpx
;
height
:
90%
;
background
:
#e
ee
;
height
:
60
rpx
;
background
:
#e
5e5e5
;
}
.single-info
{
padding
:
16
rpx
20
rpx
;
border-radius
:
8
rpx
;
font-size
:
26
rpx
;
.label
{
color
:
#999
;
flex
:
1
;
text-align
:
center
;
font-size
:
28
rpx
;
.label
{
color
:
#666
;
margin-bottom
:
8
rpx
;
}
.value
{
color
:
#333
;
font-weight
:
500
;
text-align
:
center
;
margin-top
:
10
rpx
;
}
}
...
...
@@ -615,10 +555,9 @@ const goToDetail = (item) => {
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
//
margin
:
0
0
3
0
rpx
;
padding
:
15
rpx
0
;
padding-top
:
1
0
rpx
;
//
border-top
:
1
rpx
solid
#f0f0f
0
;
font-size
:
28
rpx
;
//
border-bottom
:
1
rpx
dashed
#eee
;
.label
{
color
:
#333
;
...
...
@@ -633,96 +572,6 @@ const goToDetail = (item) => {
}
}
//
审核状态
.audit-row
{
display
:
flex
;
align-items
:
center
;
//
margin
:
0
0
30
rpx
;
//
padding
:
15
rpx
0
;
font-size
:
26
rpx
;
.label
{
color
:
#999
;
flex-shrink
:
0
;
width
:
140
rpx
;
}
.audit-status
{
font-weight
:
500
;
&.audit-success
{
color
:
#52c41a
;
}
&
.audit-danger
{
color
:
#ff4d4f
;
}
&
.audit-processing
{
color
:
#1890ff
;
}
&
.audit-pending
{
color
:
#faad14
;
}
}
}
//
按钮组
.btn-group
{
display
:
flex
;
justify-content
:
flex-end
;
align-items
:
center
;
gap
:
16
rpx
;
width
:
100%
;
.btn
{
padding
:
12
rpx
32
rpx
;
border-radius
:
40
rpx
;
font-size
:
24
rpx
;
line-height
:
1.5
;
white-space
:
nowrap
;
display
:
inline-block
;
margin
:
0
;
border
:
none
;
width
:
80px
;
background
:
transparent
;
&::after
{
border
:
none
;
}
&
.btn-delete
{
background
:
#fff
;
color
:
#e4393c
;
border
:
1
rpx
solid
#e4393c
;
}
&
.btn-invoice
{
background
:
#fff
;
color
:
#e4393c
;
border
:
1
rpx
solid
#e4393c
;
}
&
.btn-cancel
{
background
:
#fff
;
color
:
#666
;
border
:
1
rpx
solid
#ccc
;
}
&
.btn-pay
{
background
:
linear-gradient
(
90deg
,
#FF755A
,
#F51722
);
color
:
#fff
;
border
:
none
;
}
&
:disabled
{
opacity
:
0.6
;
pointer-events
:
none
;
}
}
}
//
空状态
.empty
{
display
:
flex
;
...
...
@@ -731,7 +580,7 @@ const goToDetail = (item) => {
padding
:
120
rpx
0
;
.empty-text
{
color
:
#
999
;
color
:
#
666
;
font-size
:
28
rpx
;
}
}
...
...
@@ -740,7 +589,7 @@ const goToDetail = (item) => {
.loading-tip
,
.no-more
{
text-align
:
center
;
padding
:
20
rpx
0
;
color
:
#
999
;
color
:
#
666
;
font-size
:
26
rpx
;
}
...
...
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