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
4b004652
authored
2026-04-30 14:02:26 +0800
by
lttnew
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
B2B
1 parent
59468e57
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
955 additions
and
146 deletions
common/api.js
level/paymentDetail.vue
myCenter/goPay.vue
myCenter/payOrder.vue
myCenter/perfect.vue
myCenter/transferPay.vue
pages.json
pages/index/notice-membership-vip.vue
personal/addVip_per.vue
personalVip/addVip.vue
common/api.js
View file @
4b00465
...
...
@@ -1548,14 +1548,31 @@ export function creditCodeExist(code) {
}
// 生成单位订单renewYear
export
function
certifiedNew
(
renewYear
)
{
export
function
certifiedNew
(
data
)
{
let
url
=
'/system/certifiedNew/commit'
const
params
=
[]
if
(
data
.
renewYear
)
params
.
push
(
`renewYear=
${
data
.
renewYear
}
`
)
if
(
data
.
type
)
params
.
push
(
`type=
${
data
.
type
}
`
)
if
(
data
.
contactPerson
)
params
.
push
(
`contactPerson=
${
data
.
contactPerson
}
`
)
if
(
data
.
contactTel
)
params
.
push
(
`contactTel=
${
data
.
contactTel
}
`
)
if
(
params
.
length
>
0
)
{
url
+=
'?'
+
params
.
join
(
'&'
)
}
return
request
({
url
:
`/system/certifiedNew/commit?renewYear=
${
renewYear
}
`
,
url
,
method
:
'post'
,
showLoading
:
false
})
}
// 订单详情
export
function
orderDetail
(
orderId
)
{
return
request
({
url
:
`/common/order/
${
orderId
}
`
,
method
:
'get'
})
}
// 模拟回调
export
function
callBack2
(
orderId
)
{
return
request
({
...
...
@@ -1638,9 +1655,18 @@ export function getMyStatus() {
}
// 个人会员缴费支付
export
function
goPay
(
id
,
payType
)
{
export
function
goPay
(
params
)
{
let
url
=
`/person/paymentRangeNew/pay/
${
params
.
id
}
/
${
params
.
payType
}
`
const
queryParams
=
[]
if
(
params
.
id
)
queryParams
.
push
(
`id=
${
params
.
id
}
`
)
if
(
params
.
contactPerson
)
queryParams
.
push
(
`contactPerson=
${
params
.
contactPerson
}
`
)
if
(
params
.
contactTel
)
queryParams
.
push
(
`contactTel=
${
params
.
contactTel
}
`
)
if
(
params
.
payType
)
queryParams
.
push
(
`payType=
${
params
.
payType
}
`
)
if
(
queryParams
.
length
>
0
)
{
url
+=
'?'
+
queryParams
.
join
(
'&'
)
}
return
request
({
url
:
`/person/paymentRangeNew/pay/
${
id
}
/
${
payType
}
`
,
url
,
method
:
'post'
,
showLoading
:
false
})
...
...
@@ -1866,10 +1892,16 @@ export function confirmExam(examId) {
// 提交级位考试订单
export
function
commitJiExam
(
params
)
{
let
url
=
`/exam/info/commitJi/
${
params
.
id
}
/
${
params
.
addresId
}
/
${
params
.
payType
}
`
const
queryParams
=
[]
if
(
params
.
contactPerson
)
queryParams
.
push
(
`contactPerson=
${
params
.
contactPerson
}
`
)
if
(
params
.
contactTel
)
queryParams
.
push
(
`contactTel=
${
params
.
contactTel
}
`
)
if
(
queryParams
.
length
>
0
)
{
url
+=
'?'
+
queryParams
.
join
(
'&'
)
}
return
request
({
url
:
`/exam/info/commitJi/
${
params
.
id
}
/
${
params
.
addresId
}
/
${
params
.
payType
}
`
,
url
,
method
:
'post'
,
params
,
showLoading
:
false
})
}
...
...
level/paymentDetail.vue
View file @
4b00465
...
...
@@ -75,11 +75,32 @@
<view
class=
"payment-section"
>
<view
class=
"section-title"
>
支付方式
</view>
<view
class=
"payment-methods"
>
<view
class=
"payment-item selected"
>
<image
:src=
"config.baseUrl_api + '/fs/static/min.png'"
class=
"icon"
mode=
"widthFix"
></image>
<text
class=
"payment-name"
>
民生付
</text>
<view
class=
"check-icon"
>
✓
</view>
</view>
<radio-group
@
change=
"onPayTypeChange"
>
<label
class=
"payment-item"
:class=
"
{ selected: payType === '1' }">
<radio
:checked=
"payType === '1'"
value=
"1"
/>
<image
:src=
"config.baseUrl_api + '/fs/static/min.png'"
class=
"icon ml10"
mode=
"widthFix"
></image>
<text
class=
"payment-name ml10"
>
民生付
</text>
<!--
<view
v-if=
"payType === '1'"
class=
"check-icon"
>
✓
</view>
-->
</label>
<label
class=
"payment-item"
:class=
"
{ selected: payType === '3' }">
<radio
:checked=
"payType === '3'"
value=
"3"
/>
<image
:src=
"config.baseUrl_api + '/fs/static/min.png'"
class=
"icon ml10"
mode=
"widthFix"
></image>
<text
class=
"payment-name ml10"
>
对公转账
</text>
<!--
<view
v-if=
"payType === '3'"
class=
"check-icon"
>
✓
</view>
-->
</label>
</radio-group>
</view>
</view>
<!-- 对公转账表单 -->
<view
v-if=
"payType === '3'"
class=
"info-card transfer-form"
>
<view
class=
"form-item"
>
<text
class=
"form-label"
>
联系人
</text>
<input
class=
"form-input"
v-model=
"formData.contactPerson"
placeholder=
"请输入联系人"
/>
</view>
<view
class=
"form-item"
>
<text
class=
"form-label"
>
联系方式
</text>
<input
class=
"form-input"
v-model=
"formData.contactTel"
type=
"number"
placeholder=
"请输入联系方式"
/>
</view>
</view>
</view>
...
...
@@ -116,6 +137,11 @@ const examData = ref({});
const
selectedAddress
=
ref
({});
const
memberInfo
=
ref
({});
const
deptInfo
=
ref
({});
const
payType
=
ref
(
'1'
);
const
formData
=
ref
({
contactPerson
:
''
,
contactTel
:
''
});
// 级别标签
const
levelTags
=
computed
(()
=>
{
...
...
@@ -203,39 +229,71 @@ const goAddressManage = () => {
});
};
const
onPayTypeChange
=
(
e
)
=>
{
payType
.
value
=
e
.
detail
.
value
formData
.
value
.
contactPerson
=
''
formData
.
value
.
contactTel
=
''
};
const
handleSubmit
=
async
()
=>
{
if
(
!
selectedAddress
.
value
.
id
)
{
return
uni
.
showToast
({
title
:
'请先选择地址'
,
icon
:
'none'
});
}
// 对公转账校验
if
(
payType
.
value
===
'3'
)
{
if
(
!
formData
.
value
.
contactPerson
)
{
return
uni
.
showToast
({
title
:
'请输入联系人'
,
icon
:
'none'
});
}
if
(
!
formData
.
value
.
contactTel
)
{
return
uni
.
showToast
({
title
:
'请输入联系方式'
,
icon
:
'none'
});
}
// 手机号格式校验
if
(
!
/^1
[
3-9
]\d{9}
$/
.
test
(
formData
.
value
.
contactTel
))
{
return
uni
.
showToast
({
title
:
'请输入正确的手机号'
,
icon
:
'none'
});
}
}
uni
.
showModal
({
title
:
'提示'
,
content
:
`确定提交订单吗?`
,
success
:
async
(
res
)
=>
{
if
(
res
.
confirm
)
{
uni
.
showLoading
({
title
:
'
支付
中...'
,
title
:
'
提交
中...'
,
mask
:
true
})
try
{
const
commitRes
=
await
api
.
commitJiExam
({
addresId
:
selectedAddress
.
value
.
id
,
id
:
examId
.
value
,
payType
:
'2'
payType
:
payType
.
value
,
contactPerson
:
formData
.
value
.
contactPerson
,
contactTel
:
formData
.
value
.
contactTel
})
if
(
commitRes
.
data
&&
commitRes
.
data
.
payResult
.
encryptedData
)
{
// 对公转账
if
(
commitRes
.
data
.
payFlag
==
2
)
{
uni
.
hideLoading
();
uni
.
redirectTo
({
url
:
`/myCenter/transferPay?orderId=
${
commitRes
.
data
.
orderId
}
`
});
return
;
}
// 民生付
if
(
commitRes
.
data
.
payResult
&&
commitRes
.
data
.
payResult
.
encryptedData
)
{
const
res
=
await
minShengPay
(
commitRes
.
data
.
orderId
,
commitRes
.
data
.
payResult
.
encryptedData
)
if
(
res
==
'OK'
)
{
uni
.
showToast
({
title
:
'支付成功'
,
icon
:
'success'
});
setTimeout
(()
=>
{
// uni.navigateBack();
uni
.
redirectTo
({
url
:
'/level/apply'
})
},
1500
)
}
}
}
catch
(
e
)
{
uni
.
hideLoading
();
console
.
error
(
'提交失败'
,
e
);
...
...
@@ -434,7 +492,7 @@ const handleSubmit = async () => {
border-radius
:
16
rpx
;
padding
:
30
rpx
;
margin-bottom
:
20
rpx
;
.section-title
{
font-size
:
32
rpx
;
font-weight
:
600
;
...
...
@@ -442,7 +500,7 @@ const handleSubmit = async () => {
margin-bottom
:
20
rpx
;
position
:
relative
;
padding-left
:
20
rpx
;
&::before
{
content
:
''
;
position
:
absolute
;
...
...
@@ -455,41 +513,55 @@ const handleSubmit = async () => {
border-radius
:
3
rpx
;
}
}
.payment-methods
{
background
:
#f8f9fa
;
border-radius
:
12
rpx
;
padding
:
20
rpx
;
.payment-item
{
display
:
flex
;
align-items
:
center
;
padding
:
16
rpx
;
border-radius
:
12
rpx
;
border
:
2
rpx
solid
transparent
;
&.selected
{
border-color
:
#e4393c
;
background
:
#fff
;
.check-icon
{
display
:
flex
;
}
}
//
覆盖原生
radio
样式
::v-deep
radio
.wx-radio-input
,
::v-deep
radio
.uni-radio-input
{
width
:
36
rpx
;
height
:
36
rpx
;
border-color
:
#ccc
!important
;
}
::v-deep
radio
.wx-radio-input.wx-radio-input-checked
,
::v-deep
radio
.uni-radio-input-checked
{
border-color
:
#e4393c
!important
;
background
:
#e4393c
!important
;
}
.payment-icon
{
width
:
48
rpx
;
height
:
48
rpx
;
margin-right
:
16
rpx
;
}
.payment-name
{
flex
:
1
;
font-size
:
30
rpx
;
color
:
#333
;
font-weight
:
500
;
}
.check-icon
{
width
:
40
rpx
;
height
:
40
rpx
;
...
...
@@ -553,6 +625,34 @@ const handleSubmit = async () => {
}
}
/* 对公转账表单 */
.transfer-form
{
.form-item
{
display
:
flex
;
align-items
:
center
;
padding
:
20
rpx
0
;
border-bottom
:
1
rpx
solid
#f5f5f5
;
&:last-child
{
border-bottom
:
none
;
}
}
.form-label
{
font-size
:
28
rpx
;
color
:
#333
;
width
:
140
rpx
;
flex-shrink
:
0
;
}
.form-input
{
flex
:
1
;
font-size
:
28
rpx
;
color
:
#333
;
text-align
:
right
;
}
}
.icon
{
width
:
40
rpx
;
height
:
40
rpx
;
...
...
myCenter/goPay.vue
View file @
4b00465
...
...
@@ -53,8 +53,27 @@
<text>
民生付
</text>
</view>
</label>
<label
class=
"radioItem mt10"
>
<radio
:checked=
"payType === '3'"
class=
"custom-radio"
value=
"3"
/>
<view
class=
"payInfo"
>
<image
:src=
"config.baseUrl_api + '/fs/static/min.png'"
class=
"icon"
mode=
"widthFix"
></image>
<text>
对公转账
</text>
</view>
</label>
</radio-group>
</view>
<!-- 对公转账表单 -->
<view
v-if=
"payType === '3'"
class=
"card transfer-form"
>
<view
class=
"form-item"
>
<text
class=
"form-label"
>
联系人
</text>
<input
class=
"form-input"
v-model=
"form.contactPerson"
placeholder=
"请输入联系人"
/>
</view>
<view
class=
"form-item"
>
<text
class=
"form-label"
>
联系电话
</text>
<input
class=
"form-input"
v-model=
"form.contactTel"
type=
"number"
placeholder=
"请输入联系电话"
/>
</view>
</view>
<view
class=
"totalRow "
>
<text
class=
"label"
>
支付费用合计
</text>
...
...
@@ -88,7 +107,9 @@ import {minShengPay} from '@/common/pay.js'
import
config
from
'@/config.js'
const
form
=
ref
({
renewYear
:
1
renewYear
:
1
,
contactPerson
:
''
,
contactTel
:
''
})
const
memberFee
=
ref
(
0
)
const
preferentialPolicy
=
ref
(
false
)
...
...
@@ -135,7 +156,33 @@ const handelPay = async () => {
})
return
}
// 对公转账校验
if
(
payType
.
value
===
'3'
)
{
if
(
!
form
.
value
.
contactPerson
)
{
uni
.
showToast
({
title
:
'请输入联系人'
,
icon
:
'none'
})
return
}
if
(
!
form
.
value
.
contactTel
)
{
uni
.
showToast
({
title
:
'请输入联系电话'
,
icon
:
'none'
})
return
}
// 手机号格式校验
if
(
!
/^1
[
3-9
]\d{9}
$/
.
test
(
form
.
value
.
contactTel
))
{
uni
.
showToast
({
title
:
'请输入正确的手机号'
,
icon
:
'none'
})
return
}
}
// 显示 loading
uni
.
showLoading
({
title
:
'支付中...'
,
...
...
@@ -143,8 +190,21 @@ const handelPay = async () => {
})
if
(
isPaying
.
value
)
return
isPaying
.
value
=
true
// 构建请求参数
const
params
=
{
renewYear
:
form
.
value
.
renewYear
,
type
:
payType
.
value
}
// 对公转账需要传联系人信息
if
(
payType
.
value
===
'3'
)
{
params
.
contactPerson
=
form
.
value
.
contactPerson
params
.
contactTel
=
form
.
value
.
contactTel
}
// 创建订单 - 参考PC端逻辑
const
[
orderErr
,
orderRes
]
=
await
to
(
api
.
certifiedNew
(
form
.
value
.
renewYear
))
const
[
orderErr
,
orderRes
]
=
await
to
(
api
.
certifiedNew
(
params
))
if
(
orderErr
)
{
uni
.
hideLoading
()
isPaying
.
value
=
false
...
...
@@ -154,7 +214,7 @@ const handelPay = async () => {
})
return
}
const
data
=
orderRes
.
data
// 无需支付,直接成功
if
(
data
.
payFlag
==
0
)
{
...
...
@@ -165,6 +225,18 @@ const handelPay = async () => {
})
return
}
// 对公转账 - 跳转转账信息页面
if
(
data
.
payFlag
==
2
)
{
uni
.
hideLoading
()
isPaying
.
value
=
false
uni
.
redirectTo
({
url
:
`/myCenter/transferPay?orderId=
${
data
.
orderId
}
`
})
return
}
// 民生支付
if
(
data
.
payResult
&&
data
.
payResult
.
encryptedData
)
{
try
{
const
res
=
await
minShengPay
(
data
.
orderId
,
data
.
payResult
.
encryptedData
)
...
...
@@ -370,6 +442,36 @@ async function getZtxDiscountPolicyApi() {
line-height
:
1.4
;
}
/* 对公转账表单 */
.transfer-form
{
margin-bottom
:
20
rpx
;
}
.form-item
{
display
:
flex
;
align-items
:
center
;
padding
:
20
rpx
0
;
border-bottom
:
1
rpx
solid
#f5f5f5
;
&:last-child
{
border-bottom
:
none
;
}
}
.form-label
{
font-size
:
28
rpx
;
color
:
#333
;
width
:
140
rpx
;
flex-shrink
:
0
;
}
.form-input
{
flex
:
1
;
font-size
:
28
rpx
;
color
:
#333
;
text-align
:
right
;
}
.hint-icon
{
width
:
24
rpx
;
height
:
24
rpx
;
...
...
myCenter/payOrder.vue
View file @
4b00465
...
...
@@ -25,22 +25,37 @@
</view>
</view>
<!-- 支付方式选择
(修复v-model报错 + 默认勾选)
-->
<!-- 支付方式选择 -->
<view
class=
"pay-type-section"
>
<text
class=
"section-title"
>
选择支付方式
</text>
<!-- uni-app小程序原生radio-group写法 -->
<radio-group
:value=
"payType"
@
change=
"handlePayTypeChange"
>
<label
class=
"radio-item"
>
<!-- checked属性实现默认勾选 -->
<radio
:checked=
"payType === '0'"
color=
"#E60012"
value=
"0"
/>
<view
class=
"pay-method"
>
<image
:src=
"config.baseUrl_api + '/fs/static/min.png'"
class=
"icon"
mode=
"widthFix"
></image>
<text
class=
"pay-name"
>
民生付
</text>
</view>
</label>
</radio-group>
<view
class=
"section-title"
>
选择支付方式
</view>
<view
class=
"payment-methods"
>
<radio-group
@
change=
"handlePayTypeChange"
>
<label
class=
"payment-item"
:class=
"
{ selected: payType === '1' }">
<radio
:checked=
"payType === '1'"
value=
"0"
/>
<image
:src=
"config.baseUrl_api + '/fs/static/min.png'"
class=
"icon ml10"
mode=
"widthFix"
></image>
<text
class=
"pay-name ml10"
>
民生付
</text>
</label>
<label
class=
"payment-item"
:class=
"
{ selected: payType === '3' }">
<radio
:checked=
"payType === '3'"
value=
"1"
/>
<image
:src=
"config.baseUrl_api + '/fs/static/min.png'"
class=
"icon ml10"
mode=
"widthFix"
></image>
<text
class=
"pay-name ml10"
>
对公转账
</text>
</label>
</radio-group>
</view>
</view>
<!-- 对公转账表单 -->
<view
v-if=
"payType === '3'"
class=
"transfer-form"
>
<view
class=
"form-item"
>
<text
class=
"form-label"
>
联系人
</text>
<input
class=
"form-input"
v-model=
"form.contactPerson"
placeholder=
"请输入联系人"
/>
</view>
<view
class=
"form-item"
>
<text
class=
"form-label"
>
联系电话
</text>
<input
class=
"form-input"
v-model=
"form.contactTel"
type=
"number"
placeholder=
"请输入联系电话"
/>
</view>
</view>
<!-- 底部支付按钮 -->
<view
class=
"fixed-bottom"
>
<button
:loading=
"payLoading"
class=
"pay-btn red-bg"
@
click=
"handlePay"
>
立即支付
</button>
...
...
@@ -62,8 +77,12 @@ import {minShengPay} from "@/common/pay";
// 核心数据
const
formData
=
ref
({})
// 订单统计数据
const
rangeId
=
ref
(
''
)
// 核心业务ID
const
payType
=
ref
(
'
0
'
)
// 支付方式(默认0=民生付)
const
payType
=
ref
(
'
1
'
)
// 支付方式(默认0=民生付)
const
payLoading
=
ref
(
false
)
// 支付按钮加载状态
const
form
=
ref
({
contactPerson
:
''
,
contactTel
:
''
})
// 页面加载接收参数
onLoad
(
async
(
options
)
=>
{
...
...
@@ -93,7 +112,12 @@ async function getCount() {
// 支付方式切换
function
handlePayTypeChange
(
e
)
{
payType
.
value
=
e
.
detail
.
value
payType
.
value
=
e
.
detail
.
value
==
'0'
?
'1'
:
'3'
console
.
log
(
'支付方式:'
,
payType
.
value
)
if
(
payType
.
value
===
'3'
)
{
form
.
value
.
contactPerson
=
''
form
.
value
.
contactTel
=
''
}
}
// 立即支付核心逻辑
...
...
@@ -105,23 +129,55 @@ async function handlePay() {
icon
:
'none'
})
}
// 对公转账校验
if
(
payType
.
value
===
'3'
)
{
if
(
!
form
.
value
.
contactPerson
)
{
return
uni
.
showToast
({
title
:
'请输入联系人'
,
icon
:
'none'
})
}
if
(
!
form
.
value
.
contactTel
)
{
return
uni
.
showToast
({
title
:
'请输入联系电话'
,
icon
:
'none'
})
}
// 手机号格式校验
if
(
!
/^1
[
3-9
]\d{9}
$/
.
test
(
form
.
value
.
contactTel
))
{
return
uni
.
showToast
({
title
:
'请输入正确的手机号'
,
icon
:
'none'
})
}
}
try
{
payLoading
.
value
=
true
uni
.
showLoading
({
title
:
'
支付
中...'
,
title
:
'
提交
中...'
,
mask
:
true
})
const
res
=
await
api
.
goPay
(
rangeId
.
value
,
'2'
)
if
(
res
.
data
.
payResult
&&
res
.
data
.
payResult
.
encryptedData
)
{
const
reason
=
await
minShengPay
(
res
.
data
.
orderId
,
res
.
data
.
payResult
.
encryptedData
)
// 构建请求参数
const
params
=
{
id
:
rangeId
.
value
,
payType
:
payType
.
value
}
if
(
payType
.
value
===
'3'
)
{
params
.
contactPerson
=
form
.
value
.
contactPerson
params
.
contactTel
=
form
.
value
.
contactTel
}
const
res
=
await
api
.
goPay
(
params
)
const
resData
=
res
.
data
// 对公转账 - 跳转转账信息页面
if
(
resData
.
payFlag
==
2
)
{
uni
.
hideLoading
()
uni
.
redirectTo
({
url
:
`/myCenter/transferPay?orderId=
${
resData
.
orderId
}
`
})
return
}
// 民生付
if
(
resData
.
payResult
&&
resData
.
payResult
.
encryptedData
)
{
const
reason
=
await
minShengPay
(
resData
.
orderId
,
resData
.
payResult
.
encryptedData
)
if
(
reason
==
'OK'
)
{
// // 支付成功,跳转到成功页面
// uni.redirectTo({
// url: `/myCenter/sucPay?orderId=${res.data.orderId}`
// })
uni
.
showToast
({
title
:
'支付成功'
,
icon
:
'success'
});
uni
.
showToast
({
title
:
'支付成功'
,
icon
:
'success'
})
setTimeout
(()
=>
{
uni
.
hideLoading
()
uni
.
redirectTo
({
...
...
@@ -130,9 +186,7 @@ async function handlePay() {
},
1500
)
}
}
// 跳转到支付成功页
}
catch
(
err
)
{
console
.
log
(
err
)
const
errMsg
=
err
?.
data
?.
msg
||
err
?.
message
||
'支付失败,请稍后重试'
...
...
@@ -216,35 +270,111 @@ async function handlePay() {
//
支付方式区域
.pay-type-section
{
margin-bottom
:
8
0
rpx
;
margin-bottom
:
3
0
rpx
;
.section-title
{
font-size
:
32
rpx
;
font-weight
:
600
;
color
:
#333
;
margin-bottom
:
20
rpx
;
display
:
block
;
position
:
relative
;
padding-left
:
20
rpx
;
&::before
{
content
:
''
;
position
:
absolute
;
left
:
0
;
top
:
50%
;
transform
:
translateY
(
-50%
);
width
:
6
rpx
;
height
:
28
rpx
;
background
:
linear-gradient
(
180deg
,
#FF755A
,
#F51722
);
border-radius
:
3
rpx
;
}
}
.radio-item
{
}
.payment-methods
{
background
:
#f8f9fa
;
border-radius
:
12
rpx
;
padding
:
20
rpx
;
.payment-item
{
display
:
flex
;
align-items
:
center
;
font-size
:
32
rpx
;
padding
:
10
rpx
0
;
.pay-method
{
display
:
flex
;
align-items
:
center
;
padding
:
16
rpx
;
border-radius
:
12
rpx
;
border
:
2
rpx
solid
transparent
;
&.selected
{
border-color
:
#e4393c
;
background
:
#fff
;
}
//
覆盖原生
radio
样式
::v-deep
radio
.wx-radio-input
,
::v-deep
radio
.uni-radio-input
{
width
:
36
rpx
;
height
:
36
rpx
;
border-color
:
#ccc
!important
;
}
::v-deep
radio
.wx-radio-input.wx-radio-input-checked
,
::v-deep
radio
.uni-radio-input-checked
{
border-color
:
#e4393c
!important
;
background
:
#e4393c
!important
;
}
.icon
{
width
:
40
rpx
;
height
:
40
rpx
;
}
.pay-name
{
font-size
:
30
rpx
;
color
:
#333
;
font-weight
:
500
;
}
.ml10
{
margin-left
:
10
rpx
;
.pay-name
{
font-size
:
32
rpx
;
margin-left
:
20
rpx
;
color
:
#333
;
}
}
}
}
//
对公转账表单
.transfer-form
{
background
:
#f8f9fa
;
border-radius
:
12
rpx
;
padding
:
20
rpx
;
margin-bottom
:
30
rpx
;
.form-item
{
display
:
flex
;
align-items
:
center
;
padding
:
20
rpx
0
;
border-bottom
:
1
rpx
solid
#eee
;
&:last-child
{
border-bottom
:
none
;
}
}
.form-label
{
font-size
:
28
rpx
;
color
:
#333
;
width
:
140
rpx
;
flex-shrink
:
0
;
}
.form-input
{
flex
:
1
;
font-size
:
28
rpx
;
color
:
#333
;
text-align
:
right
;
}
}
//
底部支付按钮
.fixed-bottom
{
position
:
fixed
;
...
...
myCenter/perfect.vue
View file @
4b00465
...
...
@@ -77,6 +77,17 @@
@
select=
"upPicArr"
@
delete=
"delpicArr"
>
</uni-file-picker>
</uni-forms-item>
<view
class=
"notice-box"
>
<checkbox-group
@
change=
"onNoticeChange"
>
<label
class=
"notice-label"
>
<checkbox
:checked=
"form.notice"
color=
"#e64329"
value=
"1"
/>
<text
class=
"notice-text"
>
我已阅读并同意
</text>
<text
class=
"notice-link"
@
click
.
stop=
"showNotice(1)"
>
《注册须知》
</text>
<text
class=
"notice-link"
@
click
.
stop=
"showNotice(2)"
>
《入会须知》
</text>
<text
class=
"notice-link"
@
click
.
stop=
"showNotice(3)"
>
《免责声明》
</text>
</label>
</checkbox-group>
</view>
</uni-forms>
<view
class=
"fixedBottom"
>
<button
class=
"btn-red"
@
click=
"submit()"
>
确定
</button>
...
...
@@ -134,7 +145,8 @@
type
:
'1'
,
applyPoints
:
'0'
,
renewYear
:
1
,
legalIdcCode
:
''
legalIdcCode
:
''
,
notice
:
false
});
const
years
=
ref
([
'1'
,
'2'
,
'3'
,
'4'
,
'5'
])
const
yesno
=
ref
([{
...
...
@@ -458,6 +470,13 @@
})
return
}
if
(
!
form
.
value
.
notice
)
{
uni
.
showToast
({
title
:
'请阅读并同意注册须知、入会须知、免责声明'
,
icon
:
'none'
})
return
}
if
(
form
.
value
.
parentId
==
-
1
||
form
.
value
.
parentId
==
0
)
{
uni
.
showToast
({
title
:
'请选择所属协会'
,
...
...
@@ -784,6 +803,25 @@
function
delpicArr
(
e
)
{
picArr
.
value
.
splice
(
e
.
index
,
1
)
}
// 须知勾选
function
onNoticeChange
(
e
)
{
const
values
=
e
.
detail
.
value
form
.
value
.
notice
=
values
.
includes
(
'1'
)
}
// 查看须知 - 跳转到须知页面
function
showNotice
(
type
)
{
const
pageMap
=
{
1
:
'/pages/index/notice-registration'
,
2
:
'/pages/index/notice-membership'
,
3
:
'/pages/index/notice-disclaimer'
}
const
url
=
pageMap
[
type
]
if
(
url
)
{
uni
.
navigateTo
({
url
})
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
...
...
@@ -837,6 +875,25 @@
border-radius
:
15
rpx
;
}
.notice-box
{
padding
:
20
rpx
0
;
}
.notice-label
{
display
:
flex
;
align-items
:
center
;
flex-wrap
:
wrap
;
font-size
:
24
rpx
;
}
.notice-text
{
color
:
#666
;
}
.notice-link
{
color
:
#007AFF
;
}
.imgArea
{
padding
:
1px
;
display
:
flex
;
...
...
myCenter/transferPay.vue
0 → 100644
View file @
4b00465
<
template
>
<view
class=
"container"
>
<!-- 订单信息 -->
<view
class=
"card info-card"
>
<view
class=
"info-row"
>
<text
class=
"info-label"
>
订单号
</text>
<text
class=
"info-value"
>
{{
form
.
tradeNo
||
'-'
}}
</text>
</view>
<view
class=
"info-row"
>
<text
class=
"info-label"
>
缴费单位
</text>
<text
class=
"info-value"
>
{{
form
.
orderName
||
'-'
}}
</text>
</view>
<view
class=
"info-row"
>
<text
class=
"info-label"
>
订单金额
</text>
<text
class=
"info-value highlight"
>
¥
{{
form
.
price
||
'0.00'
}}
</text>
</view>
</view>
<!-- 转账提示 -->
<view
class=
"transfer-tip"
>
请通过网上银行(网银)或银行柜台或手机银行
</view>
<!-- 转账信息卡片 -->
<view
class=
"card bank-card"
>
<view
class=
"card-title"
>
转账信息
</view>
<view
class=
"bank-row"
>
<text
class=
"bank-label"
>
收款人姓名
</text>
<text
class=
"bank-value"
>
秦琦五洋赫公司
</text>
<text
class=
"copy-btn"
@
click=
"handelCoPy('秦琦五洋赫公司')"
>
复制
</text>
</view>
<view
class=
"bank-row"
>
<text
class=
"bank-label"
>
收款银行
</text>
<text
class=
"bank-value"
>
中国民生银行
</text>
<text
class=
"copy-btn"
@
click=
"handelCoPy('中国民生银行')"
>
复制
</text>
</view>
<view
class=
"bank-row"
>
<text
class=
"bank-label"
>
收款卡号
</text>
<text
class=
"bank-value card-number"
>
{{
form
.
ziZhangBu
||
'-'
}}
</text>
<text
class=
"copy-btn"
@
click=
"handelCoPy(form.ziZhangBu)"
>
复制
</text>
</view>
<view
class=
"bank-row"
>
<text
class=
"bank-label"
>
收款金额
</text>
<text
class=
"bank-value highlight"
>
¥
{{
form
.
price
||
'0.00'
}}
</text>
<text
class=
"copy-btn"
@
click=
"handelCoPy(form.price)"
>
复制
</text>
</view>
</view>
<!-- 金额说明 -->
<view
class=
"card notice-card"
>
<view
class=
"notice-line"
>
1. 请通过网上银行(网银)或银行柜台或手机银行向以下账号划转款项。
</view>
<view
class=
"notice-line"
>
2. 转账金额与订单金额必须保持一致,不得多转、少转。
</view>
</view>
<!-- 温馨提示 -->
<view
class=
"card warning-card"
>
<view
class=
"warning-title"
>
<text
class=
"warning-icon"
>
!
</text>
<text>
温馨提示
</text>
</view>
<view
class=
"warning-content"
>
<view
class=
"warning-line"
>
1. 转账时请务必核对账户余额,否则造成的资金损失由您自行承担。
</view>
<view
class=
"warning-line"
>
2. 转账成功后请及时查询交易状态。
</view>
</view>
</view>
<!-- 底部按钮 -->
<view
class=
"bottomBtn"
>
<button
class=
"cancelBtn"
@
click=
"handelClose"
>
取 消
</button>
<button
class=
"confirmBtn"
@
click=
"handelClose"
>
确 定
</button>
</view>
</view>
</
template
>
<
script
setup
>
import
{
ref
}
from
'vue'
import
{
onLoad
}
from
'@dcloudio/uni-app'
import
*
as
api
from
'@/common/api.js'
const
form
=
ref
({
tradeNo
:
''
,
orderName
:
''
,
price
:
''
,
ziZhangBu
:
''
})
const
orderId
=
ref
(
''
)
onLoad
((
option
)
=>
{
orderId
.
value
=
option
.
orderId
||
''
getOrderDetail
()
})
async
function
getOrderDetail
()
{
if
(
!
orderId
.
value
)
return
uni
.
showLoading
({
title
:
'加载中...'
})
try
{
const
res
=
await
api
.
orderDetail
(
orderId
.
value
)
if
(
res
.
data
)
{
form
.
value
=
res
.
data
}
}
catch
(
e
)
{
console
.
error
(
'获取订单详情失败'
,
e
)
}
finally
{
uni
.
hideLoading
()
}
}
function
handelCoPy
(
text
)
{
if
(
!
text
||
text
===
'-'
)
{
uni
.
showToast
({
title
:
'暂无内容可复制'
,
icon
:
'none'
})
return
}
uni
.
setClipboardData
({
data
:
String
(
text
),
success
:
()
=>
{
uni
.
showToast
({
title
:
'复制成功'
,
icon
:
'success'
})
},
fail
:
()
=>
{
uni
.
showToast
({
title
:
'复制失败'
,
icon
:
'none'
})
}
})
}
function
handelClose
()
{
uni
.
navigateBack
({
delta
:
2
})
}
</
script
>
<
style
lang=
"scss"
scoped
>
.hidden-input
{
position
:
fixed
;
left
:
-9999px
;
opacity
:
0
;
}
.container
{
min-height
:
100vh
;
background-color
:
#f7f7f7
;
padding
:
20
rpx
20
rpx
120
rpx
;
}
/* 订单信息卡片 */
.info-card
{
background
:
#fff
;
border-radius
:
8
rpx
;
padding
:
25
rpx
20
rpx
;
margin-bottom
:
20
rpx
;
.info-row
{
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
padding
:
16
rpx
0
;
border-bottom
:
1
rpx
solid
#f5f5f5
;
&:last-child
{
border-bottom
:
none
;
}
.info-label
{
font-size
:
28
rpx
;
color
:
#666
;
}
.info-value
{
font-size
:
28
rpx
;
color
:
#333
;
font-weight
:
500
;
}
.highlight
{
color
:
#FF8124
;
font-weight
:
600
;
}
}
}
/* 转账提示 */
.transfer-tip
{
background-color
:
#E8F4FF
;
color
:
#409EFF
;
padding
:
20
rpx
;
border-radius
:
8
rpx
;
font-size
:
28
rpx
;
text-align
:
center
;
font-weight
:
500
;
margin-bottom
:
20
rpx
;
}
/* 银行卡信息 */
.bank-card
{
background
:
#fff
;
border-radius
:
8
rpx
;
padding
:
25
rpx
20
rpx
;
margin-bottom
:
20
rpx
;
.card-title
{
font-size
:
30
rpx
;
font-weight
:
600
;
color
:
#333
;
margin-bottom
:
20
rpx
;
padding-bottom
:
16
rpx
;
border-bottom
:
1
rpx
solid
#e4e7ed
;
}
.bank-row
{
display
:
flex
;
align-items
:
center
;
padding
:
16
rpx
0
;
font-size
:
28
rpx
;
.bank-label
{
color
:
#666
;
width
:
160
rpx
;
flex-shrink
:
0
;
}
.bank-value
{
flex
:
1
;
color
:
#333
;
font-weight
:
500
;
&.card-number
{
font-family
:
monospace
;
letter-spacing
:
2
rpx
;
}
&
.highlight
{
color
:
#FF8124
;
}
}
.copy-btn
{
color
:
#007AFF
;
font-size
:
26
rpx
;
padding
:
8
rpx
16
rpx
;
}
}
}
/* 金额说明 */
.notice-card
{
background
:
#FEF0F0
;
border-radius
:
8
rpx
;
padding
:
25
rpx
20
rpx
;
margin-bottom
:
20
rpx
;
.notice-line
{
font-size
:
26
rpx
;
color
:
#F56C6C
;
line-height
:
1.6
;
margin-bottom
:
8
rpx
;
&:last-child
{
margin-bottom
:
0
;
}
}
}
/* 温馨提示 */
.warning-card
{
background
:
#FDF6EC
;
border-radius
:
8
rpx
;
padding
:
25
rpx
20
rpx
;
.warning-title
{
display
:
flex
;
align-items
:
center
;
font-size
:
28
rpx
;
color
:
#E6A23C
;
font-weight
:
600
;
margin-bottom
:
16
rpx
;
.warning-icon
{
width
:
36
rpx
;
height
:
36
rpx
;
background
:
#E6A23C
;
color
:
#fff
;
border-radius
:
50%
;
display
:
flex
;
align-items
:
center
;
justify-content
:
center
;
font-size
:
24
rpx
;
margin-right
:
10
rpx
;
}
}
.warning-content
{
.warning-line
{
font-size
:
26
rpx
;
color
:
#E6A23C
;
line-height
:
1.6
;
margin-bottom
:
8
rpx
;
&:last-child
{
margin-bottom
:
0
;
}
}
}
}
/* 底部按钮 */
.bottomBtn
{
position
:
fixed
;
bottom
:
0
;
left
:
0
;
right
:
0
;
display
:
flex
;
gap
:
20
rpx
;
padding
:
20
rpx
30
rpx
;
background
:
#fff
;
border-top
:
1
rpx
solid
#eee
;
}
.cancelBtn
{
flex
:
1
;
height
:
88
rpx
;
line-height
:
88
rpx
;
background
:
#f5f5f5
;
color
:
#666
;
border-radius
:
44
rpx
;
font-size
:
32
rpx
;
border
:
none
;
}
.confirmBtn
{
flex
:
1
;
height
:
88
rpx
;
line-height
:
88
rpx
;
background
:
#C4121B
;
color
:
#fff
;
border-radius
:
44
rpx
;
font-size
:
32
rpx
;
border
:
none
;
}
</
style
>
pages.json
View file @
4b00465
...
...
@@ -83,6 +83,13 @@
}
},
{
"path"
:
"pages/index/notice-membership-vip"
,
"style"
:
{
"navigationBarTitleText"
:
"入会须知"
,
"enablePullDownRefresh"
:
false
}
},
{
"path"
:
"pages/index/notice-disclaimer"
,
"style"
:
{
"navigationBarTitleText"
:
"免责声明"
,
...
...
@@ -1026,6 +1033,13 @@
}
},
{
"path"
:
"transferPay"
,
"style"
:
{
"navigationBarTitleText"
:
"对公转账"
,
"enablePullDownRefresh"
:
false
}
},
{
"path"
:
"examPointApply"
,
"style"
:
{
"navigationBarTitleText"
:
"申请考点"
,
...
...
pages/index/notice-membership-vip.vue
0 → 100644
View file @
4b00465
<
template
>
<view
class=
"notice-page"
>
<view
class=
"notice-body"
>
<view
class=
"notice-content"
>
欢迎您申请成为中国跆拳道协会(以下简称中国跆协)会员,请确保本次申请是经过您本人或监护人授权同意后的自愿行为,请您务必仔细阅读本入会须知。
</view>
<view
class=
"notice-item"
>
一、中国跆协会员分为个人会员和单位会员。
</view>
<view
class=
"notice-item"
>
二、成为本协会会员条件:遵守中国跆协章程和协会各项规章制度及相关决议,按期交纳会费,积极支持和参与中国跆拳道事业发展的社会各届人士或地方跆拳道协会、俱乐部、培训机构等,均可自愿申请成为中国跆协会员。
</view>
<view
class=
"notice-item"
>
三、个人会员为在中国工作和生活的跆拳道爱好者,16 周岁以下应有监护人协助申请,会员须为中国公民。
</view>
<view
class=
"notice-item"
>
四、会员入会需向所在区域内中国跆协单位会员提出入会申请,并按程序报中国跆协批准,按规定交纳会费。
</view>
<view
class=
"notice-item"
>
五、会员享有《中国跆拳道协会会员管理办法》规定的会员权利。
</view>
<view
class=
"notice-item"
>
六、会员应履行《中国跆拳道协会会员管理办法》规定的会员义务。
</view>
<view
class=
"notice-item"
>
七、凡中国跆协会员,须按照《中国跆拳道协会会员会费标准(2021 版)》按时交纳年度会费。
</view>
<view
class=
"notice-item"
>
八、会员行为违反《中国跆拳道协会会员管理办法》中规定的,按照相关处罚规定进行处理。
</view>
<view
class=
"notice-item"
>
九、其它会员相关内容请查看《中国跆拳道协会章程》《中国跆拳道协会会员管理办法》。
</view>
</view>
</view>
</
template
>
<
script
setup
>
</
script
>
<
style
lang=
"scss"
scoped
>
.notice-page
{
min-height
:
100vh
;
background
:
#f7f7f7
;
}
.notice-header
{
background
:
#fff
;
padding
:
30
rpx
;
text-align
:
center
;
border-bottom
:
1
rpx
solid
#eee
;
}
.notice-title
{
font-size
:
34
rpx
;
font-weight
:
600
;
color
:
#333
;
}
.notice-body
{
padding
:
30
rpx
;
background
:
#fff
;
margin
:
20
rpx
;
border-radius
:
12
rpx
;
}
.notice-content
{
font-size
:
28
rpx
;
color
:
#333
;
line-height
:
1.8
;
margin-bottom
:
20
rpx
;
}
.notice-item
{
font-size
:
28
rpx
;
color
:
#333
;
line-height
:
1.8
;
margin-bottom
:
20
rpx
;
text-indent
:
2em
;
}
</
style
>
personal/addVip_per.vue
View file @
4b00465
...
...
@@ -92,6 +92,7 @@
<!-- 会员须知 -->
<uni-popup
ref=
"popup"
type=
"bottom"
background-color=
"#fff"
animation
:disable-scroll=
"true"
:mask-click=
"false"
>
<view
class=
"tt"
>
注册须知
</view>
<view
class=
"tt"
>
入会须知
</view>
<view
class=
"popBody"
>
_
{{
baseFormData
.
name
}}
_欢迎您申请成为中国跆拳道协会(以下简称中国跆协)会员,请确保本次申请是经过您本人或监护人授权同意后的自愿行为,请您务必仔细阅读本入会须知。
...
...
personalVip/addVip.vue
View file @
4b00465
...
...
@@ -79,50 +79,17 @@
</uni-forms>
</view>
<view
class=
"agreeline"
>
<image
@
click=
"changeAgree(agree)"
v-if=
"agree"
:src=
"config.baseUrl_api+'/fs/static/login/xz_dwn@2x.png'"
></image>
<image
@
click=
"changeAgree(agree)"
v-else
:src=
"config.baseUrl_api+'/fs/static/login/xz@2x.png'"
>
</image>
<view>
我已阅读
<text
@
click=
"openpopup"
>
《入会须知》
</text></view>
<checkbox-group
@
change=
"onAgreeChange"
>
<label
class=
"agree-label"
>
<checkbox
:checked=
"agree"
color=
"#C40F18"
value=
"1"
/>
<text
class=
"agree-text"
>
我已阅读并同意
</text>
<text
class=
"notice-link"
@
click
.
stop=
"showNotice(1)"
>
《注册须知》
</text>
<text
class=
"notice-link"
@
click
.
stop=
"showNotice(2)"
>
《入会须知》
</text>
</label>
</checkbox-group>
</view>
</view>
<view
class=
"fixedBottom"
><button
class=
"btn-red"
@
click=
"goSubmit"
>
确 定
</button></view>
<!-- 会员须知 -->
<uni-popup
ref=
"popup"
type=
"bottom"
background-color=
"#fff"
animation
:disable-scroll=
"true"
:mask-click=
"false"
>
<view
class=
"tt"
>
入会须知
</view>
<view
class=
"popBody"
>
_
{{
baseFormData
.
name
}}
_欢迎您申请成为中国跆拳道协会(以下简称中国跆协)会员,请确保本次申请是经过您本人或监护人授权同意后的自愿行为,请您务必仔细阅读本入会须知。
<br
/>
一、中国跆协会员分为个人会员和单位会员。
<br
/>
二、成为本协会会员条件:遵守中国跆协章程和协会各项规章制度及相关决议,按期交纳会费,积极支持和参与中国跆拳道事业发展的社会各届人士或地方跆拳道协会、俱乐部、培训机构等,均可自愿申请成为中国跆协会员。
<br
/>
三、个人会员为在中国工作和生活的跆拳道爱好者,16 周岁以下应有监护人协助申请,会员须为中国公民。
<br
/>
四、会员入会需向所在区域内中国跆协单位会员提出入会申请,并按程序报中国跆协批准,按规定交纳会费。
<br
/>
五、会员享有《中国跆拳道协会会员管理办法》规定的会员权利。
<br
/>
六、会员应履行《中国跆拳道协会会员管理办法》规定的会员义务。
<br
/>
七、凡中国跆协会员,须按照《中国跆拳道协会会员会费标准(2021 版)》按时交纳年度会费。
<br
/>
八、会员行为违反《中国跆拳道协会会员管理办法》中规定的,按照相关处罚规定进行处理。
<br
/>
九、其它会员相关内容请查看《中国跆拳道协会章程》《中国跆拳道协会会员管理办法》。
<br
/>
<button
@
click=
"closepopup"
class=
"btn-red"
>
我已阅读
</button>
</view>
</uni-popup>
<uni-popup
ref=
"infoConfirm"
type=
"center"
:disable-scroll=
"true"
:mask-click=
"false"
>
<view
class=
"tt"
>
确认信息
</view>
<view
class=
"popBody"
>
<view>
</view>
<button
@
click=
"closepopup"
class=
"btn-red"
>
已确认
</button>
</view>
</uni-popup>
</view>
</
template
>
...
...
@@ -137,8 +104,6 @@
import
config
from
'@/config.js'
import
*
as
aes2
from
'@/common/utils.js'
const
current
=
ref
(
0
)
const
popup
=
ref
(
null
)
const
infoConfirm
=
ref
(
null
)
const
agree
=
ref
(
false
)
const
perId
=
ref
()
const
photoArr
=
ref
({})
...
...
@@ -244,8 +209,21 @@
}
function
changeAgree
(
item
)
{
agree
.
value
=
!
item
function
onAgreeChange
(
e
)
{
const
values
=
e
.
detail
.
value
agree
.
value
=
values
.
includes
(
'1'
)
}
// 查看须知 - 跳转到须知页面
function
showNotice
(
type
)
{
const
pageMap
=
{
1
:
'/pages/index/notice-registration'
,
2
:
'/pages/index/notice-membership-vip'
}
const
url
=
pageMap
[
type
]
if
(
url
)
{
uni
.
navigateTo
({
url
})
}
}
//身份证识别
...
...
@@ -444,17 +422,6 @@
}
function
openpopup
()
{
popup
.
value
.
open
()
}
function
closepopup
()
{
agree
.
value
=
true
popup
.
value
.
close
()
}
function
changeIdcType
(
e
)
{
console
.
log
(
e
)
// 切换证件照类型把当前页面数据清空
...
...
@@ -473,7 +440,7 @@
if
(
!
agree
.
value
)
{
uni
.
showToast
({
icon
:
'none'
,
title
:
'请阅
知
入会须知'
,
title
:
'请阅
读并同意注册须知、
入会须知'
,
duration
:
2000
});
return
...
...
@@ -647,21 +614,24 @@
}
.agreeline
{
padding
:
20
rpx
4
0
rpx
;
padding
:
20
rpx
3
0
rpx
;
box-sizing
:
border-box
;
display
:
flex
;
font-size
:
30
rpx
;
}
.agree-label
{
display
:
flex
;
align-items
:
center
;
flex-wrap
:
wrap
;
font-size
:
24
rpx
;
}
text
{
color
:
#014A9F
;
}
.agree-text
{
color
:
#666
;
margin-left
:
10
rpx
;
}
image
{
width
:
40
rpx
;
height
:
40
rpx
;
margin-right
:
20
rpx
;
}
.notice-link
{
color
:
#007AFF
;
}
.upCard
{
...
...
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