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
4eb1ea9e
authored
2026-06-01 17:49:33 +0800
by
lttnew
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
个人会员+订单对公转账点击
1 parent
0b892d13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
170 additions
and
89 deletions
login/loginC.vue
myCenter/order.vue
myCenter/transferPay.vue
pages/index/daoGuanOrder.vue
pages/index/daoGuanPerson.vue
pages/invoice/apply.vue
pages/invoice/applyFeisui.vue
personal/addVip_per.vue
personal/home.vue
personal/levelRecord.vue
personal/memberInfo.vue
personalVip/addVip.vue
personalVip/order.vue
login/loginC.vue
View file @
4eb1ea9
...
...
@@ -235,11 +235,12 @@ function login() {
pcLogin
(
form
.
value
).
then
(()
=>
{
app
.
globalData
.
isLogin
=
true
goHomeAfterLogin
()
}).
catch
((
err
)
=>
{
console
.
error
(
'登录失败:'
,
err
)
uni
.
showToast
({
title
:
'登录失败'
,
icon
:
'none'
})
}).
finally
(()
=>
{
loading
.
value
=
false
}).
catch
((
err
)
=>
{
console
.
error
(
'登录失败:'
,
err
)
refreshCodeWhenNotServerError
(
err
)
uni
.
showToast
({
title
:
'登录失败'
,
icon
:
'none'
})
}).
finally
(()
=>
{
loading
.
value
=
false
})
}
else
if
(
isActive
.
value
==
1
)
{
if
(
!
form2
.
value
.
telNo
)
{
...
...
@@ -257,13 +258,16 @@ function login() {
}
if
(
loading
.
value
)
return
;
loading
.
value
=
true
loginByPhone
(
form2
.
value
.
telNo
,
form2
.
value
.
code
)
.
then
(()
=>
{
app
.
globalData
.
isLogin
=
true
goHomeAfterLogin
()
}).
finally
(()
=>
{
loading
.
value
=
false
})
loginByPhone
(
form2
.
value
.
telNo
,
form2
.
value
.
code
)
.
then
(()
=>
{
app
.
globalData
.
isLogin
=
true
goHomeAfterLogin
()
}).
catch
((
err
)
=>
{
console
.
error
(
'短信登录失败:'
,
err
)
refreshCodeWhenNotServerError
(
err
)
}).
finally
(()
=>
{
loading
.
value
=
false
})
}
}
...
...
@@ -284,16 +288,29 @@ function confirmRegister() {
uni
.
navigateTo
({
url
:
'/login/register'
})
}
function
getCode
()
{
uni
.
hideLoading
()
getCodeImg
().
then
((
res
)
=>
{
codeUrl
.
value
=
'data:image/gif;base64,'
+
res
.
data
.
img
form
.
value
.
uuid
=
res
.
data
.
uuid
form2
.
value
.
uuid
=
res
.
data
.
uuid
})
}
function
getCaptchaSms
()
{
function
getCode
()
{
uni
.
hideLoading
()
getCodeImg
().
then
((
res
)
=>
{
codeUrl
.
value
=
'data:image/gif;base64,'
+
res
.
data
.
img
form
.
value
.
uuid
=
res
.
data
.
uuid
form2
.
value
.
uuid
=
res
.
data
.
uuid
})
}
function
isServer500
(
err
)
{
const
message
=
String
(
err
?.
message
||
err
?.
errMsg
||
''
)
return
err
?.
statusCode
===
500
||
err
?.
code
===
500
||
err
?.
data
?.
code
===
500
||
message
.
includes
(
'HTTP 500'
)
}
function
refreshCodeWhenNotServerError
(
err
)
{
if
(
isServer500
(
err
))
return
getCode
()
}
function
getCaptchaSms
()
{
if
(
!
form2
.
value
.
telNo
)
{
uni
.
showToast
({
title
:
'手机号不能为空'
,
icon
:
'none'
})
return
...
...
myCenter/order.vue
View file @
4eb1ea9
...
...
@@ -53,7 +53,13 @@
<view
class=
"data-header"
>
<text
class=
"member-label"
>
{{
getOrderLabel
(
item
)
}}
·
</text>
<text
class=
"value ml10"
>
{{
item
.
wfCode
||
'——'
}}
·
</text>
<text
class=
"pay-type ml10"
>
{{
String
(
item
.
payType
)
===
'3'
?
'对公转账'
:
'民生付'
}}
</text>
<text
v-if=
"String(item.payType) === '3'"
:class=
"
{ 'pay-type-link': canClickTransferPay(item) }"
class="pay-type ml10"
@click.stop="handleTransferPay(item)"
>对公转账
</text>
<text
v-else
class=
"pay-type ml10"
>
民生付
</text>
</view>
<text
:class=
"
{
'status-wait': item.payStatus == 3,
...
...
@@ -361,6 +367,17 @@ const isRefundDisabled = (item) => String(item?.payStatus) !== '1' || hasInvoice
const
canShowRefund
=
(
item
)
=>
!
isRefundDisabled
(
item
)
const
canClickTransferPay
=
(
item
)
=>
{
return
String
(
item
?.
payType
)
===
'3'
&&
String
(
item
?.
payStatus
)
!==
'2'
}
const
handleTransferPay
=
(
item
)
=>
{
if
(
!
canClickTransferPay
(
item
))
return
uni
.
navigateTo
({
url
:
`/myCenter/transferPay?orderId=${item.id
}
`
}
)
}
// 数据请求核心方法
const
initData
=
async
()
=>
{
...
...
@@ -1257,6 +1274,10 @@ const confirmRefund = async (item) => {
font
-
weight
:
normal
;
flex
-
shrink
:
0
;
}
.
pay
-
type
.
pay
-
type
-
link
{
color
:
#
1677
ff
;
}
.
date
-
text
{
color
:
#
666
;
...
...
myCenter/transferPay.vue
View file @
4eb1ea9
...
...
@@ -27,33 +27,34 @@
<view
class=
"bank-row"
>
<text
class=
"bank-label"
>
收款人姓名
</text>
<text
class=
"bank-value"
>
中国跆拳道协会
</text>
<
!--
<view
class=
"copy-btn"
@
tap
.
stop=
"handleCopy('秦琦五洋赫公司')"
>
复制
</view>
--
>
<
view
class=
"copy-btn"
@
tap
.
stop=
"handleCopy('中国跆拳道协会')"
>
复制
</view
>
</view>
<view
class=
"bank-row"
>
<text
class=
"bank-label"
>
收款银行
</text>
<text
class=
"bank-value"
>
中国民生银行
</text>
<
!--
<view
class=
"copy-btn"
@
tap
.
stop=
"handleCopy('中国民生银行')"
>
复制
</view>
--
>
<
view
class=
"copy-btn"
@
tap
.
stop=
"handleCopy('中国民生银行')"
>
复制
</view
>
</view>
<view
class=
"bank-row"
>
<text
class=
"bank-label"
>
收款卡号
</text>
<text
class=
"bank-value card-number"
>
{{
form
.
ziZhangBu
||
'-'
}}
</text>
<
!--
<view
class=
"copy-btn"
@
tap
.
stop=
"handleCopy(form.ziZhangBu)"
>
复制
</view>
--
>
<
view
class=
"copy-btn"
@
tap
.
stop=
"handleCopy(form.ziZhangBu)"
>
复制
</view
>
</view>
<view
class=
"bank-row"
>
<text
class=
"bank-label"
>
收款金额
</text>
<text
class=
"bank-value highlight"
>
¥
{{
form
.
price
||
'0.00'
}}
</text>
<
!--
<view
class=
"copy-btn"
@
tap
.
stop=
"handleCopy(form.price)"
>
复制
</view>
--
>
<
view
class=
"copy-btn"
@
tap
.
stop=
"handleCopy(form.price)"
>
复制
</view
>
</view>
</view>
<!-- 金额说明 -->
<view
class=
"card notice-card"
>
<view
class=
"danger-title"
>
<
!--
<
view
class=
"danger-title"
>
<text>
请使用认证机构下的账号进行对公转账。
</text>
</view>
<view
class=
"notice-line"
>
1. 本订单将为您保留7天,请您及时支付;逾期未支付,订单将自动取消。
</view>
<view
class=
"notice-line"
>
2. 请通过网上银行(网银)或银行柜台或手机银行向以下账号划转款项。
</view>
<view
class=
"notice-line"
>
3. 转账金额与订单金额必须保持一致,不得多转、少转。
</view>
</view>
-->
<view
class=
"notice-line"
>
1. 请使用注册机构账号对公转账。
</view>
<view
class=
"notice-line"
>
2. 本订单将为您保留7天,请您及时支付;逾期未支付,订单将自动取消。
</view>
<view
class=
"notice-line"
>
3. 请通过网上银行(网银)或银行柜台或手机银行向以下账号划转款项。
</view>
<view
class=
"notice-line"
>
4. 转账金额与订单金额必须保持一致,不得多转、少转。
</view>
</view>
<!-- 温馨提示 -->
...
...
pages/index/daoGuanOrder.vue
View file @
4eb1ea9
...
...
@@ -86,7 +86,13 @@
<view
class=
"data-header"
>
<text
class=
"member-label"
>
{{
getOrderLabel
(
item
)
}}
·
</text>
<text
class=
"value ml10"
>
{{
item
.
wfCode
||
'——'
}}
·
</text>
<text
class=
"pay-type ml10"
>
{{
String
(
item
.
payType
)
===
'3'
?
'对公转账'
:
'民生付'
}}
</text>
<text
v-if=
"String(item.payType) === '3'"
:class=
"
{ 'pay-type-link': canClickTransferPay(item) }"
class="pay-type ml10"
@click.stop="handleTransferPay(item)"
>对公转账
</text>
<text
v-else
class=
"pay-type ml10"
>
民生付
</text>
</view>
<text
:class=
"
{
'status-wait': item.payStatus == 3,
...
...
@@ -437,6 +443,17 @@ const isRefundDisabled = (item) => String(item?.payStatus) !== '1' || String(ite
const
canShowRefund
=
(
item
)
=>
!
isRefundDisabled
(
item
)
const
canClickTransferPay
=
(
item
)
=>
{
return
String
(
item
?.
payType
)
===
'3'
&&
String
(
item
?.
payStatus
)
!==
'2'
}
const
handleTransferPay
=
(
item
)
=>
{
if
(
!
canClickTransferPay
(
item
))
return
uni
.
navigateTo
({
url
:
`/myCenter/transferPay?orderId=${item.id
}
`
}
)
}
const
encodeQueryValue
=
(
value
)
=>
encodeURIComponent
(
value
||
''
)
const
getPayName
=
(
item
)
=>
{
...
...
@@ -1511,6 +1528,10 @@ const onTabSwitch = (index, url) => {
flex
-
shrink
:
0
;
}
.
pay
-
type
.
pay
-
type
-
link
{
color
:
#
1677
ff
;
}
.
date
-
text
{
color
:
#
666
;
}
...
...
pages/index/daoGuanPerson.vue
View file @
4eb1ea9
...
...
@@ -363,12 +363,12 @@ async function goAuthPayV2() {
showAuthPayDialog
(
'当前账号状态暂无法办理缴费业务'
)
return
}
if
(
authPayDisabled
.
value
)
{
showAuthPayDialog
(
'您已成功提交审核,请耐心等待。'
)
return
}
const
canGoPay
=
await
handelGetMyRecent
()
if
(
!
canGoPay
)
return
// if (authPayDisabled.value) {
// showAuthPayDialog('您有一笔缴费正在审核中,请勿重复缴费。您可前往【认证详情】查看审核进度。')
// return
// }
goPath
(
'/myCenter/perfect'
)
}
...
...
pages/invoice/apply.vue
View file @
4eb1ea9
...
...
@@ -93,7 +93,7 @@
maxlength=
"20"
placeholder=
"请输入纳税人识别号"
/>
<text
class=
"hint"
>
企业税务登记证上的号码,一般为
15、18 或 20
位
</text>
<text
class=
"hint"
>
企业税务登记证上的号码,一般为
15~20
位
</text>
</view>
<!-- 接收方式 -->
...
...
@@ -216,7 +216,7 @@ const validateForm = () => {
// 纳税人识别号格式校验
if
(
form
.
type
===
'1'
)
{
const
taxReg
=
/^
[
A-Z0-9
]{
15}
$|^
[
A-Z0-9
]{18}
$|^
[
A-Z0-9
]{
20}
$/
;
const
taxReg
=
/^
[
A-Z0-9
]{
0,
20}
$/
;
if
(
!
taxReg
.
test
(
form
.
taxno
))
{
uni
.
showToast
({
title
:
'纳税人识别号格式不正确'
,
icon
:
'none'
});
return
false
;
...
...
pages/invoice/applyFeisui.vue
View file @
4eb1ea9
...
...
@@ -74,7 +74,7 @@
placeholder=
"请输入纳税人识别号"
:disabled=
"!showIndividualType"
/>
<text
class=
"hint"
>
企业税务登记证上的号码,一般为
15、18 或 20
位
</text>
<text
class=
"hint"
>
企业税务登记证上的号码,一般为
15~20
位
</text>
</view>
<!-- 开票金额(只读) -->
...
...
@@ -171,7 +171,7 @@ const validateForm = () => {
// 纳税人识别号格式校验
if
(
form
.
type
===
'0'
)
{
const
taxReg
=
/^
[
A-Z0-9
]{
15}
$|^
[
A-Z0-9
]{18}
$|^
[
A-Z0-9
]{
20}
$/
;
const
taxReg
=
/^
[
A-Z0-9
]{
0,
20}
$/
;
if
(
!
taxReg
.
test
(
form
.
taxno
))
{
uni
.
showToast
({
title
:
'纳税人识别号格式不正确'
,
icon
:
'none'
});
return
false
;
...
...
personal/addVip_per.vue
View file @
4eb1ea9
...
...
@@ -51,14 +51,13 @@
<uni-easyinput
v-model=
"baseFormData.phone"
:placeholderStyle=
"placeholderStyle"
:styles=
"inputstyle"
placeholder=
"请输入联系方式"
/>
</uni-forms-item>
<uni-forms-item
label=
"会员编号"
name=
"perCode"
>
<uni-easyinput
v-model=
"baseFormData.perCode"
:placeholderStyle=
"placeholderStyle"
:styles=
"inputstyle"
placeholder=
"会员编号"
/>
</uni-forms-item>
<uni-forms-item
label=
"会员有效期"
name=
"validityDate"
>
<uni-easyinput
v-model=
"baseFormData.validityDate"
:placeholderStyle=
"placeholderStyle"
:styles=
"inputstyle"
placeholder=
"会员有效期"
/>
</uni-forms-item>
<uni-forms-item
label=
"会员编号"
name=
"perCode"
v-if=
"baseFormData.perCode"
>
{{
baseFormData
.
perCode
}}
</uni-forms-item>
<uni-forms-item
label=
"会员有效期"
name=
"validityDate"
v-if=
"baseFormData.validityDate"
>
{{
baseFormData
.
validityDate
?.
slice
(
0
,
10
)
}}
</uni-forms-item>
<!--
<uni-forms-item
label=
"所在地区"
>
...
...
@@ -204,8 +203,8 @@ const validityDateText = ref('')
onLoad
(
async
(
option
)
=>
{
if
(
option
.
name
&&
option
.
idcCode
)
{
baseFormData
.
value
.
name
=
option
.
name
baseFormData
.
value
.
idcCode
=
option
.
idcCode
baseFormData
.
value
.
name
=
decodeURIComponent
(
option
.
name
)
baseFormData
.
value
.
idcCode
=
decodeURIComponent
(
option
.
idcCode
)
giveBirthDay
()
}
...
...
personal/home.vue
View file @
4eb1ea9
...
...
@@ -221,11 +221,11 @@ const perInfo = computed(() => userStore.perInfo ?? {})
console
.
log
(
222
,
userInfo
.
value
)
console
.
log
(
333
,
perInfo
.
value
)
// 是否已绑定学员
(根据会员卡号判断)
const
isBound
=
computed
(()
=>
{
const
perName
=
perInfo
.
value
?.
perName
return
perName
!==
undefined
&&
perName
!==
null
&&
perName
!==
''
})
// 是否已绑定学员
:绑定非会员时只有姓名,没有会员卡号,也应视为已绑定,避免反复弹绑定框。
const
isBound
=
computed
(()
=>
{
const
perName
=
perInfo
.
value
?.
perName
return
perName
!==
undefined
&&
perName
!==
null
&&
perName
!==
''
})
const
bindPopup
=
ref
(
null
)
const
bindForm
=
ref
({
...
...
@@ -236,11 +236,8 @@ const showConfirm = ref(false)
// 标记是否已经弹出过绑定框(避免重复弹出)
let
hasOpenedBindPopup
=
false
onShow
(()
=>
{
// 重置绑定弹框标志,确保每次进入页面都能正确弹出
hasOpenedBindPopup
=
false
let
webUserName
=
uni
.
getStorageSync
(
'webUserName'
)
onShow
(()
=>
{
let
webUserName
=
uni
.
getStorageSync
(
'webUserName'
)
if
(
!
webUserName
)
{
// 登录后需要等待数据加载完成
wxLogin
().
then
(
res
=>
{
...
...
@@ -262,13 +259,14 @@ onShow(() => {
})
// 检查是否需要弹出绑定框
const
checkAndOpenBindPopup
=
()
=>
{
// 确保 userStore 数据已更新
const
currentPerInfo
=
userStore
.
perInfo
if
(
currentPerInfo
&&
!
currentPerInfo
.
perCode
&&
!
hasOpenedBindPopup
)
{
hasOpenedBindPopup
=
true
nextTick
(()
=>
{
openBindPopup
()
const
checkAndOpenBindPopup
=
()
=>
{
// 确保 userStore 数据已更新
const
currentPerInfo
=
userStore
.
perInfo
const
hasBoundName
=
currentPerInfo
?.
perName
if
(
currentPerInfo
&&
!
hasBoundName
&&
!
hasOpenedBindPopup
)
{
hasOpenedBindPopup
=
true
nextTick
(()
=>
{
openBindPopup
()
})
}
}
...
...
@@ -479,13 +477,15 @@ const goToOrder = () => {
});
};
// 导航到缴费
const
goToPay
=
()
=>
{
const
perId
=
userInfo
.
value
.
perId
??
''
uni
.
navigateTo
({
url
:
`/personal/addVip_per?perId=
${
perId
}
`
});
};
// 导航到缴费
const
goToPay
=
()
=>
{
const
perId
=
userInfo
.
value
.
perId
??
''
const
name
=
perInfo
.
value
?.
perName
?
encodeURIComponent
(
perInfo
.
value
.
perName
)
:
''
const
idcCode
=
perInfo
.
value
?.
perIdcCode
?
encodeURIComponent
(
perInfo
.
value
.
perIdcCode
)
:
''
uni
.
navigateTo
({
url
:
`/personal/addVip_per?perId=
${
perId
}
&name=
${
name
}
&idcCode=
${
idcCode
}
`
});
};
// 下载电子会员证
const
downCert
=
async
()
=>
{
...
...
personal/levelRecord.vue
View file @
4eb1ea9
...
...
@@ -174,9 +174,13 @@
perId
.
value
=
userInfo
.
perId
;
getLevelRecords
();
}
else
{
const
userId
=
userInfo
?.
id
;
if
(
!
userId
)
{
return
;
}
// 如果userInfo中没有perId,尝试通过getAssoPers获取
try
{
const
res
=
await
getAssoPers
(
userI
nfo
?.
id
||
''
);
const
res
=
await
getAssoPers
(
userI
d
);
perId
.
value
=
res
.
data
[
10
]
||
''
;
if
(
perId
.
value
)
{
getLevelRecords
();
...
...
@@ -347,4 +351,4 @@
color
:
#666
;
font-weight
:
500
;
}
</
style
>
\ No newline at end of file
</
style
>
...
...
personal/memberInfo.vue
View file @
4eb1ea9
...
...
@@ -137,9 +137,13 @@
perId
.
value
=
userInfo
.
perId
;
getMemberInfo
();
}
else
{
const
userId
=
userInfo
?.
id
;
if
(
!
userId
)
{
return
;
}
// 如果userInfo中没有perId,尝试通过getAssoPers获取
try
{
const
res
=
await
getAssoPers
(
userI
nfo
?.
id
||
''
);
const
res
=
await
getAssoPers
(
userI
d
);
perId
.
value
=
res
.
data
[
10
]
||
''
;
if
(
perId
.
value
)
{
getMemberInfo
();
...
...
@@ -282,4 +286,4 @@
padding
:
24
rpx
20
rpx
;
}
}
</
style
>
\ No newline at end of file
</
style
>
...
...
personalVip/addVip.vue
View file @
4eb1ea9
...
...
@@ -51,13 +51,11 @@
<uni-easyinput
:styles=
"inputstyle"
:placeholderStyle=
"placeholderStyle"
v-model=
"baseFormData.phone"
placeholder=
"请输入联系方式"
/>
</uni-forms-item>
<uni-forms-item
label=
"会员编号"
name=
"perCode"
v-if=
"baseFormData.perCode"
>
<uni-easyinput
:styles=
"inputstyle"
:placeholderStyle=
"placeholderStyle"
v-model=
"baseFormData.perCode"
placeholder=
"请输入会员编号"
/>
<uni-forms-item
label=
"会员编号"
name=
"perCode"
v-if=
"baseFormData.perCode"
>
{{
baseFormData
.
perCode
}}
</uni-forms-item>
<uni-forms-item
label=
"会员有效期"
name=
"validityDate"
v-if=
"baseFormData.validityDate"
>
<uni-easyinput
:styles=
"inputstyle"
:placeholderStyle=
"placeholderStyle"
v-model=
"baseFormData.validityDate"
placeholder=
"请输入会员有效期"
/>
{{
baseFormData
.
validityDate
?.
slice
(
0
,
10
)
}}
</uni-forms-item>
...
...
personalVip/order.vue
View file @
4eb1ea9
...
...
@@ -37,7 +37,13 @@
<view
class=
"data-header"
>
<text
class=
"member-label"
>
{{
getOrderLabel
(
item
)
}}
·
</text>
<text
class=
"value ml10"
>
{{
item
.
wfCode
||
'——'
}}
·
</text>
<text
class=
"pay-type"
>
{{
getPayTypeText
(
item
)
}}
</text>
<text
v-if=
"String(item.payType) === '3'"
:class=
"
{ 'pay-type-link': canClickTransferPay(item) }"
class="pay-type"
@click.stop="handleTransferPay(item)"
>对公转账
</text>
<text
v-else
class=
"pay-type"
>
民生付
</text>
</view>
<text
:class=
"
{
'status-wait': item.payStatus == 4,
...
...
@@ -238,11 +244,17 @@ const loadMore = () => {
pageNum
.
value
++
;
initData
();
}
;
const
getPayWay
=
(
item
)
=>
{
uni
.
redirectTo
({
url
:
`/myCenter/transferPay?orderId=${item.id
}
`
}
);
const
canClickTransferPay
=
(
item
)
=>
{
return
String
(
item
?.
payType
)
===
'3'
&&
String
(
item
?.
payStatus
)
!==
'2'
}
const
handleTransferPay
=
(
item
)
=>
{
if
(
!
canClickTransferPay
(
item
))
return
uni
.
navigateTo
({
url
:
`/myCenter/transferPay?orderId=${item.id
}
`
}
)
}
// 切换标签
const
switchTab
=
(
index
)
=>
{
currentTab
.
value
=
index
;
...
...
@@ -888,6 +900,10 @@ const goToDetail = (item) => {
margin
-
left
:
10
rpx
;
}
.
pay
-
type
.
pay
-
type
-
link
{
color
:
#
1677
ff
;
}
.
status
-
tag
{
font
-
size
:
24
rpx
;
color
:
#
999
;
...
...
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