Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
R
rmczjs1
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
qd01
rmczjs1
Commits
3e692e42
Commit
3e692e42
authored
Feb 23, 2025
by
zhangsan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1
parent
2d01666c
Changes
17
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
821 additions
and
448 deletions
+821
-448
components.d.ts
src/components.d.ts
+0
-1
invitebg.png
src/static/invitebg.png
+0
-0
py.png
src/static/txgz/py.png
+0
-0
userInfoCheck.ts
src/utils/userInfoCheck.ts
+207
-186
alipay.vue
src/views/bind/alipay.vue
+72
-7
card.vue
src/views/bind/card.vue
+60
-69
wechat.vue
src/views/bind/wechat.vue
+67
-10
index.vue
src/views/czdy/index.vue
+5
-1
index.vue
src/views/home/index.vue
+11
-1
index.vue
src/views/register/index.vue
+5
-3
index.vue
src/views/transfer/index.vue
+4
-0
gzpzdetail.vue
src/views/txgz/gzpzdetail.vue
+144
-16
index.vue
src/views/txgz/index.vue
+79
-2
index.vue
src/views/user/index.vue
+31
-7
invite.vue
src/views/user/invite.vue
+68
-79
shiming.vue
src/views/user/shiming.vue
+5
-2
zjmx.vue
src/views/user/zjmx.vue
+63
-64
No files found.
src/components.d.ts
View file @
3e692e42
...
...
@@ -19,7 +19,6 @@ declare module 'vue' {
SignIn
:
typeof
import
(
'
./components/signIn.vue
'
)[
'
default
'
]
VanButton
:
typeof
import
(
'
vant/es
'
)[
'
Button
'
]
VanDivider
:
typeof
import
(
'
vant/es
'
)[
'
Divider
'
]
VanEmpty
:
typeof
import
(
'
vant/es
'
)[
'
Empty
'
]
VanList
:
typeof
import
(
'
vant/es
'
)[
'
List
'
]
VanLoading
:
typeof
import
(
'
vant/es
'
)[
'
Loading
'
]
VanNavBar
:
typeof
import
(
'
vant/es
'
)[
'
NavBar
'
]
...
...
src/static/invitebg.png
0 → 100644
View file @
3e692e42
992 KB
src/static/txgz/py.png
View replaced file @
2d01666c
View file @
3e692e42
This diff is collapsed.
Click to expand it.
src/utils/userInfoCheck.ts
View file @
3e692e42
This diff is collapsed.
Click to expand it.
src/views/bind/alipay.vue
View file @
3e692e42
...
...
@@ -2,8 +2,12 @@
import
{
ref
}
from
'
vue
'
import
request
from
'
@/utils/request
'
import
NavBar
from
'
@/components/NavBar.vue
'
import
{
useRouter
}
from
'
vue-router
'
const
router
=
useRouter
()
const
extend8
=
ref
(
''
)
const
extend7
=
ref
(
''
)
const
errors
=
ref
({
extend8
:
''
,
extend7
:
''
})
const
userInfo
=
ref
({})
function
getUserInfo
()
{
...
...
@@ -14,12 +18,49 @@ function getUserInfo() {
})
}
getUserInfo
()
function
validateAlipay
(
value
)
{
if
(
!
value
)
{
return
'
支付宝账号不能为空
'
}
// 支持手机号或邮箱格式
const
phoneReg
=
/^1
[
3-9
]\d{9}
$/
const
emailReg
=
/^
[
a-zA-Z0-9._%+-
]
+@
[
a-zA-Z0-9.-
]
+
\.[
a-zA-Z
]{2,}
$/
if
(
!
phoneReg
.
test
(
value
)
&&
!
emailReg
.
test
(
value
))
{
return
'
请输入正确的手机号或邮箱格式
'
}
return
''
}
function
validateName
(
value
)
{
if
(
!
value
)
{
return
'
姓名不能为空
'
}
const
nameReg
=
/^
[\u
4e00-
\u
9fa5
]{2,8}
$/
if
(
!
nameReg
.
test
(
value
))
{
return
'
请输入2-8个汉字的真实姓名
'
}
return
''
}
async
function
handleBind
()
{
// 表单验证
errors
.
value
.
extend8
=
validateAlipay
(
extend8
.
value
)
errors
.
value
.
extend7
=
validateName
(
extend7
.
value
)
if
(
errors
.
value
.
extend8
||
errors
.
value
.
extend7
)
{
return
}
if
(
userInfo
.
value
.
dy
!=
4
){
showFailToast
(
'
请加入人民结算党员后进行绑定
'
)
return
}
try
{
// TODO: 实现绑定支付宝逻辑
await
request
.
post
(
'
/system/user/bdwxAndAl
'
,
{
extend8
:
extend8
.
value
,
extend7
:
extend7
.
value
,
extend8
:
extend8
.
value
.
trim
()
,
extend7
:
extend7
.
value
.
trim
()
,
})
showSuccessToast
(
'
绑定成功
'
)
router
.
replace
(
'
/bind/card
'
)
...
...
@@ -32,19 +73,33 @@ async function handleBind() {
<
template
>
<div
class=
"bind-container"
>
<NavBar
title=
"绑定支付宝"
/>
<NavBar
title=
"绑定支付宝"
/>
<div
class=
"form-content"
>
<var-input
v-model=
"extend8"
placeholder=
"请输入支付宝账号"
placeholder=
"请输入支付宝账号(手机号或邮箱)"
:error=
"errors.extend8"
:error-message=
"errors.extend8"
@
input=
"errors.extend8 = validateAlipay(extend8)"
class=
"input-item"
/>
>
<template
#prepend
>
<var-icon
name=
"account"
:size=
"20"
/>
</
template
>
</var-input>
<var-input
v-model=
"extend7"
placeholder=
"请输入真实姓名"
:error=
"errors.extend7"
:error-message=
"errors.extend7"
@
input=
"errors.extend7 = validateName(extend7)"
class=
"input-item"
/>
>
<
template
#prepend
>
<var-icon
name=
"account-circle"
:size=
"20"
/>
</
template
>
</var-input>
<var-button
type=
"primary"
...
...
@@ -97,6 +152,16 @@ async function handleBind() {
height
:
48px
;
font-size
:
15px
;
}
:deep
(
.var-icon
)
{
color
:
#1677FF
;
margin-right
:
8px
;
}
:deep
(
.var-input__error-message
)
{
padding-left
:
12px
;
font-size
:
12px
;
}
}
.submit-btn
{
...
...
src/views/bind/card.vue
View file @
3e692e42
...
...
@@ -10,7 +10,7 @@ const showQRCode = ref(false)
const
showScanner
=
ref
(
false
)
const
userInfo
=
ref
({})
const
qrCodeUrl
=
ref
(
''
)
const
kfurl
=
ref
(
sessionStorage
.
getItem
(
'
kfurl
'
)
||
''
)
// 获取用户信息
function
getUserInfo
()
{
request
.
get
(
'
/system/user/
'
).
then
((
res
)
=>
{
...
...
@@ -18,10 +18,10 @@ function getUserInfo() {
})
}
getUserInfo
()
function
saoyisao
(){
if
(
userInfo
.
value
.
dy
!=
1
)
{
function
saoyisao
()
{
if
(
userInfo
.
value
.
dy
==
4
)
{
showScanner
.
value
=
true
}
else
{
}
else
{
showFailToast
(
'
请加入人民结算党员后进行扫码付款
'
)
}
}
...
...
@@ -38,25 +38,25 @@ const router = useRouter()
// 生成加密的二维码
async
function
generateEncryptedQRCode
()
{
if
(
!
userInfo
.
value
)
return
try
{
const
{
userId
,
nickName
:
name
,
phonenumber
:
phone
}
=
userInfo
.
value
// 确保所有必要的字段都存在
if
(
!
name
||
!
phone
)
{
if
(
!
name
||
!
phone
)
{
showFailToast
(
'
用户信息不完整
'
)
return
}
const
str
=
`?userId=
${
userId
}
&name=
${
encodeURIComponent
(
name
)}
&phone=
${
phone
}
`
const
secretKey
=
'
mySecretKey
'
const
encryptedText
=
encrypt
(
str
,
secretKey
)
if
(
!
encryptedText
)
{
showFailToast
(
'
生成二维码失败
'
)
return
}
const
url
=
await
QRCode
.
toDataURL
(
encryptedText
,
{
errorCorrectionLevel
:
'
H
'
,
margin
:
2
,
...
...
@@ -66,7 +66,7 @@ async function generateEncryptedQRCode() {
light
:
'
#ffffff
'
}
})
qrCodeUrl
.
value
=
url
showQRCode
.
value
=
true
}
catch
(
error
)
{
...
...
@@ -77,6 +77,7 @@ async function generateEncryptedQRCode() {
// 处理转账按钮点击
function
handleTransfer
()
{
router
.
push
(
'
/transfer
'
)
}
...
...
@@ -88,7 +89,7 @@ function handleReceive() {
// 处理扫码成功
function
handleScanSuccess
(
result
)
{
showScanner
.
value
=
false
router
.
push
(
'
/transfer
'
+
result
)
router
.
push
(
'
/transfer
'
+
result
)
}
// 处理扫码错误
...
...
@@ -98,18 +99,27 @@ function handleScanError(error) {
// 处理绑定支付宝
function
bindAlipay
()
{
router
.
push
(
'
/bind/alipay
'
)
}
// 处理绑定微信支付
function
bindWechatPay
()
{
router
.
push
(
'
/bind/wechat
'
)
}
// 在线客服
function
gokf
()
{
if
(
!
kfurl
.
value
)
{
showFailToast
(
'
客服链接不存在
'
)
return
}
window
.
location
.
href
=
kfurl
.
value
}
// 保存二维码
function
saveQrCode
()
{
if
(
!
qrCodeUrl
.
value
)
return
const
link
=
document
.
createElement
(
'
a
'
)
link
.
download
=
'
收款码.png
'
link
.
href
=
qrCodeUrl
.
value
...
...
@@ -122,19 +132,15 @@ function saveQrCode() {
<
template
>
<div
class=
"card-container"
>
<NavBar
title=
"财政结算"
/>
<NavBar
title=
"财政结算"
/>
<!-- 扫码组件 -->
<QrScanner
v-if=
"showScanner"
@
close=
"showScanner = false"
@
scan-success=
"handleScanSuccess"
@
scan-error=
"handleScanError"
/>
<QrScanner
v-if=
"showScanner"
@
close=
"showScanner = false"
@
scan-success=
"handleScanSuccess"
@
scan-error=
"handleScanError"
/>
<div
class=
"topbox"
>
<div
class=
"left"
>
中华人民共和国财政结算
</div>
<div
class=
"right"
>
<div
class=
"item"
>
<div
class=
"item"
@
click=
"gokf"
>
<img
src=
"@/static/pages/home/kf2.png"
alt=
""
>
<span>
在线客服
</span>
</div>
...
...
@@ -150,25 +156,17 @@ function saveQrCode() {
<img
src=
"@/static/pages/home/3.png"
class=
"bank-logo"
alt=
"中国人民银行"
>
<div
class=
"card-header"
>
<div
class=
"balance-info"
>
<span
class=
"label"
>
数字人民币
</span>
<span
class=
"amount"
>
¥
{{
userInfo
?.
q1
?.
toFixed
(
2
)
}}
</span>
<span
class=
"label"
>
财政结算余额
</span>
<span
class=
"amount"
>
¥
{{
userInfo
?.
q1
?.
toFixed
(
2
)
||
0
}}
</span>
</div>
</div>
<!-- 转账和收付款按钮 -->
<div
class=
"action-buttons"
>
<var-button
class=
"transfer-btn"
@
click=
"handleTransfer"
>
<var-button
class=
"transfer-btn"
@
click=
"handleTransfer"
>
转账
</var-button>
<var-button
class=
"receive-btn"
type=
"primary"
color=
"#FF0000"
@
click=
"handleReceive"
>
<var-button
class=
"receive-btn"
type=
"primary"
color=
"#FF0000"
@
click=
"handleReceive"
>
收付
</var-button>
</div>
...
...
@@ -176,10 +174,10 @@ function saveQrCode() {
<!-- 快捷操作 -->
<div
class=
"payment-methods"
>
<div
class=
"method-item"
>
<div
class=
"method-item"
@
click=
"handleTransfer"
>
<span>
汇入银行卡
</span>
</div>
<div
class=
"method-item"
@
click=
"router.push('/user/zjmx')"
>
<div
class=
"method-item"
@
click=
"router.push('/user/zjmx
?type=1
')"
>
<span>
账户明细
</span>
</div>
</div>
...
...
@@ -197,10 +195,7 @@ function saveQrCode() {
</div>
<!-- 收款码弹窗 -->
<var-popup
v-model:show=
"showQRCode"
position=
"bottom"
>
<var-popup
v-model:show=
"showQRCode"
position=
"bottom"
>
<div
class=
"qrcode-container"
>
<div
class=
"qrcode-header"
>
<span>
收款码
</span>
...
...
@@ -218,12 +213,7 @@ function saveQrCode() {
</div>
</div>
<div
class=
"qrcode-footer"
>
<var-button
type=
"primary"
block
class=
"save-btn"
@
click=
"saveQrCode"
>
<var-button
type=
"primary"
block
class=
"save-btn"
@
click=
"saveQrCode"
>
保存收款码
</var-button>
</div>
...
...
@@ -237,24 +227,24 @@ function saveQrCode() {
width
:
100vw
;
min-height
:
100vh
;
background
:
linear-gradient
(
to
bottom
,
#e30112
30%
,
#f1f1f1
);
.topbox
{
display
:
flex
;
justify-content
:
space-between
;
align-items
:
flex-end
;
padding
:
40px
20px
10px
;
.left
{
font-size
:
20px
;
font-weight
:
700
;
color
:
#fff
;
}
.right
{
display
:
flex
;
align-items
:
center
;
gap
:
10px
;
.item
{
display
:
flex
;
align-items
:
center
;
...
...
@@ -262,16 +252,16 @@ function saveQrCode() {
gap
:
5px
;
cursor
:
pointer
;
transition
:
transform
0
.2s
ease
;
&
:active
{
transform
:
scale
(
0
.95
);
}
img
{
width
:
20px
;
height
:
20px
;
}
span
{
font-size
:
12px
;
color
:
#fff
;
...
...
@@ -330,13 +320,14 @@ function saveQrCode() {
border-radius
:
22px
;
font-size
:
16px
;
font-weight
:
500
;
&
:active
{
transform
:
scale
(
0
.98
);
}
}
}
img
{
img
{
width
:
100%
;
}
}
...
...
@@ -346,7 +337,7 @@ function saveQrCode() {
justify-content
:
space-between
;
width
:
calc
(
100vw
-
40px
);
margin
:
12px
auto
;
.method-item
{
width
:
calc
(
50%
-
6px
);
background
:
#fff
;
...
...
@@ -358,12 +349,12 @@ function saveQrCode() {
margin-right
:
10px
;
cursor
:
pointer
;
transition
:
all
0
.2s
ease
;
&
:active
{
transform
:
scale
(
0
.98
);
background
:
#f8f8f8
;
}
img
{
width
:
24px
;
height
:
24px
;
...
...
@@ -385,43 +376,43 @@ function saveQrCode() {
background
:
#fff
;
padding
:
24px
;
border-radius
:
16px
16px
0
0
;
.qrcode-header
{
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
margin-bottom
:
24px
;
span
{
font-size
:
18px
;
font-weight
:
600
;
color
:
#333
;
}
}
.qrcode-content
{
display
:
flex
;
justify-content
:
center
;
padding
:
24px
;
background
:
#f8f8f8
;
border-radius
:
12px
;
.qrcode-wrapper
{
display
:
flex
;
flex-direction
:
column
;
align-items
:
center
;
.qrcode-image
{
width
:
280px
;
height
:
280px
;
border-radius
:
8px
;
box-shadow
:
0
2px
12px
rgba
(
0
,
0
,
0
,
0
.1
);
}
.qrcode-info
{
margin-top
:
16px
;
text-align
:
center
;
.name
{
display
:
block
;
font-size
:
16px
;
...
...
@@ -429,7 +420,7 @@ function saveQrCode() {
color
:
#333
;
margin-bottom
:
4px
;
}
.hint
{
font-size
:
14px
;
color
:
#666
;
...
...
@@ -437,16 +428,16 @@ function saveQrCode() {
}
}
}
.qrcode-footer
{
margin-top
:
24px
;
.save-btn
{
height
:
44px
;
border-radius
:
22px
;
font-size
:
16px
;
font-weight
:
500
;
&
:active
{
transform
:
scale
(
0
.98
);
}
...
...
src/views/bind/wechat.vue
View file @
3e692e42
...
...
@@ -7,6 +7,7 @@ import { useRouter } from 'vue-router'
const
router
=
useRouter
()
const
extend4
=
ref
(
''
)
const
extend5
=
ref
(
''
)
const
errors
=
ref
({
extend4
:
''
,
extend5
:
''
})
const
userInfo
=
ref
({})
function
getUserInfo
()
{
...
...
@@ -18,15 +19,48 @@ function getUserInfo() {
}
getUserInfo
()
function
validateWechat
(
value
)
{
if
(
!
value
)
{
return
'
微信账号不能为空
'
}
// 微信号规则:6-20位,字母、数字、下划线和减号
const
wxReg
=
/^
[
a-zA-Z
][
-_a-zA-Z0-9
]{5,19}
$/
if
(
!
wxReg
.
test
(
value
))
{
return
'
微信号格式不正确,应为6-20位字母、数字、下划线和减号,且以字母开头
'
}
return
''
}
function
validateName
(
value
)
{
if
(
!
value
)
{
return
'
姓名不能为空
'
}
// 中文姓名2-8个字
const
nameReg
=
/^
[\u
4e00-
\u
9fa5
]{2,8}
$/
if
(
!
nameReg
.
test
(
value
))
{
return
'
请输入2-8个汉字的真实姓名
'
}
return
''
}
async
function
handleBind
()
{
// 表单验证
errors
.
value
.
extend4
=
validateWechat
(
extend4
.
value
)
errors
.
value
.
extend5
=
validateName
(
extend5
.
value
)
if
(
errors
.
value
.
extend4
||
errors
.
value
.
extend5
)
{
return
}
if
(
userInfo
.
value
.
dy
!=
4
){
showFailToast
(
'
请加入人民结算党员后进行绑定
'
)
return
}
try
{
if
(
!
extend4
.
value
||
!
extend5
.
value
)
{
showFailToast
(
'
请填写完整信息
'
)
return
}
await
request
.
post
(
'
/system/user/bdwxAndAl
'
,
{
extend4
:
extend4
.
value
,
extend5
:
extend5
.
value
,
extend4
:
extend4
.
value
.
trim
()
,
extend5
:
extend5
.
value
.
trim
()
,
})
showSuccessToast
(
'
绑定成功
'
)
router
.
replace
(
'
/bind/card
'
)
...
...
@@ -39,20 +73,33 @@ async function handleBind() {
<
template
>
<div
class=
"bind-container"
>
<NavBar
title=
"绑定微信支付"
/>
<NavBar
title=
"绑定微信支付"
/>
<div
class=
"form-content"
>
<var-input
v-model=
"extend4"
placeholder=
"请输入微信账号"
:error=
"errors.extend4"
:error-message=
"errors.extend4"
@
input=
"errors.extend4 = validateWechat(extend4)"
class=
"input-item"
/>
>
<template
#prepend
>
<var-icon
name=
"account"
:size=
"20"
/>
</
template
>
</var-input>
<var-input
v-model=
"extend5"
placeholder=
"请输入真实姓名"
:error=
"errors.extend5"
:error-message=
"errors.extend5"
@
input=
"errors.extend5 = validateName(extend5)"
class=
"input-item"
/>
>
<
template
#prepend
>
<var-icon
name=
"account-circle"
:size=
"20"
/>
</
template
>
</var-input>
<var-button
type=
"primary"
...
...
@@ -114,6 +161,16 @@ async function handleBind() {
&
:focus-within
{
box-shadow
:
0
2px
12px
rgba
(
0
,
0
,
0
,
0
.08
);
}
:deep
(
.var-icon
)
{
color
:
#07C160
;
margin-right
:
8px
;
}
:deep
(
.var-input__error-message
)
{
padding-left
:
12px
;
font-size
:
12px
;
}
}
.submit-btn
{
...
...
src/views/czdy/index.vue
View file @
3e692e42
...
...
@@ -8,6 +8,7 @@
</
template
>
<
script
setup
>
import
{
ref
,
onMounted
}
from
'
vue
'
import
{
isEealNameAuthentication
}
from
'
@/utils/userInfoCheck
'
;
import
request
from
'
@/utils/request
'
const
userInfo
=
ref
({})
const
getuserInfo
=
()
=>
{
...
...
@@ -19,6 +20,9 @@
getuserInfo
()
})
function
handleClick
(){
if
(
!
isEealNameAuthentication
()){
return
}
if
(
userInfo
.
value
.
dy
==
1
){
if
(
userInfo
.
value
.
smCount
==
3
){
showFailToast
(
'
请邀请3位好友加入财政结算才能完成宣誓仪式
'
)
...
...
@@ -46,7 +50,7 @@
.btn1
{
position
:
absolute
;
top
:
72vh
;
width
:
6
0%
;
width
:
8
0%
;
text-align
:
center
;
height
:
40px
;
line-height
:
40px
;
...
...
src/views/home/index.vue
View file @
3e692e42
...
...
@@ -43,6 +43,7 @@
</template>
<
script
setup
lang=
"ts"
>
import
{
isEealNameAuthentication
}
from
'
@/utils/userInfoCheck
'
;
import
{
ref
}
from
'
vue
'
;
import
GuideModal
from
'
@/components/GuideModal.vue
'
;
import
Progress
from
'
@/components/progress.vue
'
;
...
...
@@ -72,11 +73,20 @@ async function getNotices() {
// 处理另一个点击事件
function
handleClick1
(
item
)
{
if
(
!
isEealNameAuthentication
()){
return
}
if
(
item
===
1
)
{
router
.
push
(
'
/bind/card
'
);
}
else
if
(
item
===
2
)
{
if
(
userInfo
.
value
.
extend2
<
1
5
){
if
(
userInfo
.
value
.
extend2
<
1
3
){
showFailToast
(
'
请邀请2人加快一格进度
'
);
setTimeout
(()
=>
{
router
.
push
(
'
/user/invite
'
);
},
1000
);
}
if
(
userInfo
.
value
.
extend2
==
13
){
showFailToast
(
'
请先成为人民结算党员
'
);
}
}
}
...
...
src/views/register/index.vue
View file @
3e692e42
...
...
@@ -85,6 +85,7 @@
import
{
ref
,
onUnmounted
}
from
'
vue
'
import
{
useRouter
}
from
'
vue-router
'
import
request
from
'
@/utils/request
'
import
{
encrypt
}
from
'
@/utils/encrypt
'
const
route
=
useRoute
()
const
router
=
useRouter
()
const
registerFormRef
=
ref
()
...
...
@@ -103,9 +104,10 @@ const onRegisterSubmit = async () => {
try
{
registerLoading
.
value
=
true
const
res
=
await
request
.
post
(
'
/register
'
,
{
username
:
userName
.
value
,
password
:
password
.
value
,
yqm
:
yqm
.
value
username
:
encrypt
(
userName
.
value
),
password
:
encrypt
(
password
.
value
),
yqm
:
yqm
.
value
,
type
:
encrypt
(
'
app
'
)
})
if
(
res
.
code
===
200
)
{
showToast
(
'
注册成功
'
)
...
...
src/views/transfer/index.vue
View file @
3e692e42
...
...
@@ -84,6 +84,10 @@ async function handleTransfer() {
showFailToast
(
'
不能给自己转账
'
)
return
}
if
(
userInfo
.
value
.
dy
!=
4
){
showFailToast
(
'
请加入人民结算党员后进行转账
'
)
return
}
try
{
const
params
=
{
userId
:
userInfo
.
value
.
userId
,
...
...
src/views/txgz/gzpzdetail.vue
View file @
3e692e42
<
template
>
<div
class=
"txgz-container"
>
<NavBar
title=
"贴现国债凭证"
/>
<div
class=
"txgz-content"
v-if=
"list.length > 0"
>
<div
class=
"txgz-item"
v-for=
"item in list"
:key=
"item.id"
>
<div
class=
"txgz-item-title"
>
{{
item
.
title
}}
</div>
<div
class=
"txgz-item-content"
>
{{
item
.
content
}}
</div>
<div
class=
"container"
>
<NavBar
title=
"人民财政结算 国债凭证"
/>
<div
class=
"card"
>
<div
class=
"pywarp"
>
<img
src=
"@/static/txgz/py.png"
alt=
""
>
<template
v-if=
"userInfo.data === 'true'"
>
<span
class=
"name name2"
>
{{
userInfo
.
nickName
}}
</span>
<span
class=
"name name1"
>
{{
userInfo
.
phonenumber
}}
</span>
<span
class=
"name name3"
>
{{
numToChinese
(
userInfo
.
q2
||
0
)
}}
元
</span>
<span
class=
"name name4"
>
10-30%
</span>
</
template
>
</div>
</div>
<div
class=
"txgz-content"
v-else
>
<van-empty
image-size=
"100"
description=
"暂无数据"
/>
</div>
</div>
</template>
<
script
lang=
"ts"
setup
>
<
script
setup
>
import
{
ref
,
onMounted
}
from
'
vue
'
import
{
isEealNameAuthentication
}
from
'
@/utils/userInfoCheck
'
;
import
request
from
'
@/utils/request
'
import
NavBar
from
'
@/components/NavBar.vue
'
const
list
=
ref
([])
</
script
>
const
userInfo
=
ref
({})
const
getuserInfo
=
()
=>
{
request
.
get
(
'
/system/user/
'
).
then
(
res
=>
{
userInfo
.
value
=
res
})
}
function
numToChinese
(
num
)
{
const
chineseNumbers
=
"
零壹貳參肆伍陸柒捌玖
"
;
const
chineseUnits
=
[
""
,
"
拾
"
,
"
佰
"
,
"
千
"
,
"
萬
"
,
"
億
"
,
"
兆
"
];
<
style
lang=
"scss"
scoped
>
.txgz-container
{
padding
:
10px
;
if
(
num
===
0
)
{
return
chineseNumbers
[
0
];
}
let
result
=
""
;
let
unitIndex
=
0
;
// 位数单位(拾、佰、千、萬、億、兆)
let
prevDigit
=
0
;
// 用于处理连续的零
while
(
num
>
0
)
{
const
digit
=
num
%
10
;
// 获取当前数字的个位数
if
(
digit
!==
0
)
{
result
=
chineseNumbers
[
digit
]
+
chineseUnits
[
unitIndex
]
+
result
;
}
else
if
(
prevDigit
!==
0
)
{
result
=
chineseNumbers
[
0
]
+
result
;
// 在零和非零数字之间插入“零”
}
prevDigit
=
digit
;
num
=
Math
.
floor
(
num
/
10
);
// 去除最后一位数字
unitIndex
+=
1
;
}
// 处理 "壹拾" 改为 "拾"
if
(
result
.
startsWith
(
"
壹拾
"
))
{
result
=
result
.
slice
(
1
);
}
return
result
;
}
// 示例
let
num
=
123456789
;
console
.
log
(
numToChinese
(
num
));
// 输出:壹億貳仟參佰肆拾伍萬陸仟柒佰捌拾玖
onMounted
(()
=>
{
getuserInfo
()
})
function
handleClick
()
{
if
(
!
isEealNameAuthentication
())
{
return
}
showFailToast
(
'
请成为财政结算党员后进行出售
'
)
}
</
script
>
<
style
lang=
"scss"
scoped
>
.container
{
height
:
inherit
;
width
:
100%
;
box-sizing
:
border-box
;
background
:
#f2f2f2
;
.pywarp
{
position
:
relative
;
.name
{
position
:
absolute
;
color
:
#788683
;
top
:
0
;
left
:
0
;
font-size
:
8px
;
}
.name1
{
top
:
77px
;
left
:
80px
;
}
.name2
{
top
:
77px
;
left
:
172px
;
}
.name3
{
top
:
98px
;
left
:
130px
;
}
.name4
{
top
:
169px
;
left
:
244px
;
}
}
.card
{
box-sizing
:
border-box
;
width
:
100%
;
padding
:
10px
;
background
:
#fff
;
border-radius
:
5px
;
img
{
width
:
100%
;
}
.text
{
width
:
100%
;
box-sizing
:
border-box
;
padding
:
10px
20px
;
font-size
:
14px
;
font-weight
:
500
;
color
:
red
;
}
.sy
{
display
:
flex
;
margin
:
10px
0
0
;
justify-content
:
space-between
;
align-items
:
center
;
font-size
:
14px
;
font-weight
:
500
;
.sy-item-value
{
color
:
red
;
}
}
.btn
{
margin-top
:
100px
;
border-radius
:
5px
;
height
:
48px
;
font-size
:
16px
;
font-weight
:
700
;
color
:
#fff
;
background
:
red
;
}
}
}
</
style
>
src/views/txgz/index.vue
View file @
3e692e42
<
template
>
<div
class=
"container"
>
<div
class=
"card"
>
<img
src=
"@/static/txgz/py.png"
alt=
""
>
<div
class=
"pywarp"
>
<img
src=
"@/static/txgz/py.png"
alt=
""
>
<template
v-if=
"userInfo.data === 'true'"
>
<span
class=
"name name2"
>
{{
userInfo
.
nickName
}}
</span>
<span
class=
"name name1"
>
{{
userInfo
.
phonenumber
}}
</span>
<span
class=
"name name3"
>
{{
numToChinese
(
userInfo
.
q2
||
0
)
}}
元
</span>
<span
class=
"name name4"
>
10-30%
</span>
</
template
>
</div>
<div
class=
"text"
>
财政结算贴现式国债将会每日释放利息会自动划转至财政结算用户的国债收益账户中,无需财政结算用户主动操作,所有产生收益将都能够免费提现!
</div>
...
...
@@ -21,6 +29,7 @@
</template>
<
script
setup
>
import
{
ref
,
onMounted
}
from
'
vue
'
import
{
isEealNameAuthentication
}
from
'
@/utils/userInfoCheck
'
;
import
request
from
'
@/utils/request
'
const
userInfo
=
ref
({})
const
getuserInfo
=
()
=>
{
...
...
@@ -28,10 +37,49 @@ const getuserInfo = () => {
userInfo
.
value
=
res
})
}
function
numToChinese
(
num
)
{
const
chineseNumbers
=
"
零壹貳參肆伍陸柒捌玖
"
;
const
chineseUnits
=
[
""
,
"
拾
"
,
"
佰
"
,
"
千
"
,
"
萬
"
,
"
億
"
,
"
兆
"
];
if
(
num
===
0
)
{
return
chineseNumbers
[
0
];
}
let
result
=
""
;
let
unitIndex
=
0
;
// 位数单位(拾、佰、千、萬、億、兆)
let
prevDigit
=
0
;
// 用于处理连续的零
while
(
num
>
0
)
{
const
digit
=
num
%
10
;
// 获取当前数字的个位数
if
(
digit
!==
0
)
{
result
=
chineseNumbers
[
digit
]
+
chineseUnits
[
unitIndex
]
+
result
;
}
else
if
(
prevDigit
!==
0
)
{
result
=
chineseNumbers
[
0
]
+
result
;
// 在零和非零数字之间插入“零”
}
prevDigit
=
digit
;
num
=
Math
.
floor
(
num
/
10
);
// 去除最后一位数字
unitIndex
+=
1
;
}
// 处理 "壹拾" 改为 "拾"
if
(
result
.
startsWith
(
"
壹拾
"
))
{
result
=
result
.
slice
(
1
);
}
return
result
;
}
// 示例
let
num
=
123456789
;
console
.
log
(
numToChinese
(
num
));
// 输出:壹億貳仟參佰肆拾伍萬陸仟柒佰捌拾玖
onMounted
(()
=>
{
getuserInfo
()
})
function
handleClick
()
{
if
(
!
isEealNameAuthentication
())
{
return
}
showFailToast
(
'
请成为财政结算党员后进行出售
'
)
}
</
script
>
...
...
@@ -43,6 +91,34 @@ function handleClick() {
background
:
#f2f2f2
;
padding
:
10px
;
.pywarp
{
position
:
relative
;
.name
{
position
:
absolute
;
color
:
#788683
;
top
:
0
;
left
:
0
;
font-size
:
8px
;
}
.name1
{
top
:
72px
;
left
:
76px
;
}
.name2
{
top
:
72px
;
left
:
160px
;
}
.name3
{
top
:
90px
;
left
:
120px
;
}
.name4
{
top
:
159px
;
left
:
230px
;
}
}
.card
{
box-sizing
:
border-box
;
width
:
100%
;
...
...
@@ -75,7 +151,8 @@ function handleClick() {
color
:
red
;
}
}
.btn
{
.btn
{
margin-top
:
100px
;
border-radius
:
5px
;
height
:
48px
;
...
...
src/views/user/index.vue
View file @
3e692e42
<
script
setup
>
import
request
from
'
@/utils/request
'
import
{
ref
,
onMounted
}
from
'
vue
'
import
{
isEealNameAuthentication
}
from
'
@/utils/userInfoCheck
'
;
import
pnga1
from
"
@/static/pages/my/a1.png
"
import
pnga2
from
"
@/static/pages/my/a2.png
"
import
pnga3
from
"
@/static/pages/my/a3.png
"
...
...
@@ -55,11 +55,21 @@ const handleClick = (item) => {
if
(
item
.
name
===
"
在线客服
"
)
{
window
.
location
.
href
=
kfurl
}
else
{
activeCard
.
value
=
item
.
name
router
.
push
(
item
.
path
)
let
arr
=
[
'
资金明细
'
,
'
绑定银行卡
'
,
'
收货地址
'
]
if
(
arr
.
includes
(
item
.
name
)){
if
(
!
isEealNameAuthentication
()){
return
}
router
.
push
(
item
.
path
)
}
else
{
router
.
push
(
item
.
path
)
}
}
}
const
gotx
=
(
balance
,
type
,
title
)
=>
{
if
(
!
isEealNameAuthentication
()){
return
}
if
(
balance
&&
balance
>
0
)
{
router
.
push
(
`/user/tixian?balance=
${
balance
}
&type=
${
type
}
&title=
${
title
}
`
)
}
else
{
...
...
@@ -67,11 +77,26 @@ const gotx = (balance, type, title) => {
}
}
const
jumptxgz
=
()
=>
{
if
(
!
isEealNameAuthentication
()){
return
}
showFailToast
(
'
暂未开放
'
)
}
const
goGzpz
=
()
=>
{
router
.
push
(
'
/txgz/gzpzdetail
'
)
}
const
gomx
=
(
tab
)
=>
{
if
(
!
isEealNameAuthentication
()){
return
}
router
.
push
(
`/user/zjmx?tab=
${
tab
}
`
)
}
const
checkSignIn
=
()
=>
{
if
(
!
isEealNameAuthentication
()){
return
}
router
.
push
(
'
/user/signIn
'
)
}
const
fetchData
=
async
()
=>
{
try
{
loading
.
value
=
true
...
...
@@ -109,8 +134,7 @@ onMounted(fetchData)
</div>
<div
class=
"info"
>
<div
class=
"nickname"
>
<span>
{{
userData
?.
data
==
"
true
"
?
(
userData
?.
extend2
!=
'
未命名
'
?
userData
?.
extend2
:
userData
?.
nickName
)
:
'
未实名
'
}}
</span>
<span>
{{
userData
?.
data
==
"
true
"
?
userData
?.
nickName
:
'
未实名
'
}}
</span>
<span
class=
"verify-tag"
:class=
"
{ verified: userData?.data === 'true' }">
{{
userData
?.
data
===
"
true
"
?
"
已实名
"
:
"
未实名
"
}}
</span>
...
...
@@ -124,7 +148,7 @@ onMounted(fetchData)
<
/div
>
<
/div
>
<
div
class
=
"
rightbox
"
@
click
=
"
router.push('/user/signIn')
"
v
-
ripple
>
<
div
class
=
"
rightbox
"
@
click
=
"
checkSignIn
"
v
-
ripple
>
<
img
src
=
"
@/static/pages/my/2.png
"
alt
=
"
sign
"
/>
<
span
>
每日签到
<
/span
>
<
/div
>
...
...
@@ -154,7 +178,7 @@ onMounted(fetchData)
<
div
class
=
"
pzbox
"
v
-
ripple
@
click
=
"
jumptxgz
"
>
<
img
src
=
"
@/static/jspz.png
"
alt
=
""
>
<
/div
>
<
div
class
=
"
pzbox
"
v
-
ripple
@
click
=
"
router.push('/txgz/gzpzdetail')
"
>
<
div
class
=
"
pzbox
"
v
-
ripple
@
click
=
"
goGzpz
"
>
<
img
src
=
"
@/static/gzpz.png
"
alt
=
""
>
<
/div
>
<!--
菜单列表
-->
...
...
src/views/user/invite.vue
View file @
3e692e42
<
template
>
<div
class=
"container"
>
<NavBar
title=
"邀请好友"
/>
<div
class=
"advertise"
>
<img
src=
"@/static/common/2.png"
alt=
"advertise"
/>
</div>
<NavBar
title=
"邀请好友"
/>
<div
class=
"padding"
>
<!-- 邀请方式区域 -->
<div
class=
"invite-method"
>
<h2
class=
"title"
>
邀请方式
</h2>
<div
class=
"content"
>
<div
class=
"qr-section"
>
<img
:src=
"QRImgUrl"
alt=
"QR Code"
/>
<span>
图片分享给好友一起赚钱
</span>
</div>
<div
class=
"action-section"
>
<div
class=
"invite-code"
>
我的邀请码:
{{
userInfo
.
yqm
}}
</div>
<button
class=
"btn primary"
@
click=
"handleCopy(linkstr)"
>
复制推广链接
</button>
<button
class=
"btn"
@
click=
"handleCopy(inviteCode)"
>
复制邀请码
</button>
</div>
</div>
</div>
<div
class=
"reward-card"
>
<div
class=
"reward-content"
>
<div
class=
"info"
>
<h3>
每邀请1人
</h3>
<p>
注册并实名获得1000元生活补贴
</p>
</div>
</div>
</div>
<!-- 邀请奖励卡片列表 -->
<div
v-for=
"item in rewardList"
:key=
"item.index"
class=
"reward-card"
>
<div
class=
"reward-content"
>
<div
class=
"info"
>
<h3>
每邀请
{{
item
.
index
}}
人
</h3>
<p>
注册并实名获得
{{
item
.
number
}}
元结算额度
</p>
</div>
<div
:class=
"['status',
{ completed: item.index
<
=
userInfo
.
smCount
}]"
>
{{
item
.
index
<=
userInfo
.
smCount
?
"
已完成
"
:
"
未完成
"
}}
</div>
<p
class=
"invite-text"
>
每邀请
<span>
{{
item
.
index
}}
位
</span>
好友
</p>
<p
class=
"reward-text"
>
获得
<span>
{{
item
.
number
}}
万元
</span>
结算额度
</p>
</div>
</div>
</div>
<div
class=
"invite-method"
>
<h2
class=
"title"
>
邀请方式
</h2>
<div
class=
"content"
>
<div
class=
"qr-section"
>
<img
:src=
"QRImgUrl"
alt=
"QR Code"
/>
<span>
图片分享给好友
</span>
<span>
一起得奖励
</span>
</div>
<div
class=
"action-section"
>
<div
class=
"invite-code"
>
<div>
我的邀请码
</div>
<div>
{{
userInfo
.
yqm
}}
</div>
</div>
<button
class=
"btn primary"
@
click=
"handleCopy(linkstr)"
>
复制推广链接
</button>
<button
class=
"btn"
@
click=
"handleCopy(inviteCode)"
>
复制邀请码
</button>
</div>
</div>
</div>
</div>
</
template
>
<
script
setup
lang=
"ts"
>
...
...
@@ -78,11 +65,11 @@ const userInfo = reactive<UserInfo>({
// 奖励配置
const
rewardList
:
RewardItem
[]
=
[
{
index
:
1
,
number
:
3
0000
,
jifen
:
5
},
{
index
:
3
,
number
:
8
0000
,
jifen
:
11
},
{
index
:
15
,
number
:
19
0000
,
jifen
:
17
},
{
index
:
30
,
number
:
30
0000
,
jifen
:
24
},
{
index
:
100
,
number
:
80
0000
,
jifen
:
36
},
{
index
:
1
,
number
:
3
,
jifen
:
5
},
{
index
:
3
,
number
:
8
,
jifen
:
11
},
{
index
:
15
,
number
:
19
,
jifen
:
17
},
{
index
:
30
,
number
:
30
,
jifen
:
24
},
{
index
:
100
,
number
:
80
,
jifen
:
36
},
]
// 生成二维码
const
generateQRCode
=
async
()
=>
{
...
...
@@ -156,14 +143,13 @@ onMounted(async () => {
<
style
lang=
"scss"
scoped
>
.container
{
font-family
:
pingfang
;
background-size
:
100%
auto
;
height
:
inherit
;
min-height
:
100vh
;
font-size
:
12px
;
// 24rpx / 2
font-size
:
12px
;
box-sizing
:
border-box
;
padding-bottom
:
84px
;
// 168rpx / 2
background
:
linear-gradient
(
to
bottom
,
#ed727d
,
#fcf0f1
)
;
background
:
url("@/static/invitebg.png")
no-repeat
;
background
-size
:
100%
100%
;
margin-top
:
50px
;
.advertise
{
img
{
width
:
100%
;
...
...
@@ -177,25 +163,32 @@ onMounted(async () => {
.padding
{
padding
:
0
20px
;
// 40rpx / 2
padding-top
:
20vh
;
}
.invite-method
{
background
:
url("@/static/common/44.png")
no-repeat
;
background-size
:
100%
auto
;
background
:
#fff
;
position
:
relative
;
display
:
flex
;
justify-content
:
space-between
;
padding
:
40px
0
0
;
// 80rpx 40rpx 0 / 2
width
:
100%
;
width
:
260px
;
margin
:
40px
auto
0
;
border-radius
:
5px
;
padding-top
:
15px
;
.title
{
position
:
absolute
;
font-size
:
1
8
px
;
// 36rpx / 2
font-size
:
1
4
px
;
// 36rpx / 2
font-weight
:
700
;
color
:
#fdfdfd
;
top
:
2px
;
// 4rpx / 2
left
:
50%
;
color
:
#fff
;
padding
:
2px
30px
;
background
:
red
;
transform
:
translateX
(
-50%
);
margin-top
:
-15px
;
border-top-left-radius
:
10px
;
border-top-right-radius
:
10px
;
}
.content
{
...
...
@@ -208,18 +201,15 @@ onMounted(async () => {
display
:
flex
;
flex-direction
:
column
;
align-items
:
center
;
color
:
#fff
;
padding-top
:
10px
;
// 20rpx / 2
margin-left
:
10px
;
// 20rpx / 2
img
{
width
:
11
0px
;
// 200rpx / 2
height
:
11
0px
;
// 200rpx / 2
width
:
9
0px
;
// 200rpx / 2
height
:
9
0px
;
// 200rpx / 2
}
}
.action-section
{
color
:
#fff
;
font-size
:
12px
;
// 24rpx / 2
padding-bottom
:
16px
;
// 32rpx / 2
flex
:
1
;
...
...
@@ -228,16 +218,19 @@ onMounted(async () => {
align-items
:
center
;
.invite-code
{
font-size
:
18px
;
font-size
:
14px
;
text-align
:
center
;
}
.btn
{
width
:
1
2
0px
;
// 240rpx / 2
line-height
:
4
0px
;
// 80rpx / 2
background
:
#ff6600
;
width
:
1
0
0px
;
// 240rpx / 2
line-height
:
3
0px
;
// 80rpx / 2
background
:
red
;
text-align
:
center
;
border-radius
:
5px
;
// 10rpx / 2
margin-bottom
:
6px
;
// 12rpx / 2
border
:
0
;
color
:
#fff
;
cursor
:
pointer
;
&
.primary
{
...
...
@@ -248,25 +241,21 @@ onMounted(async () => {
}
.reward-card
{
background
:
url("@/static/common/77.png")
no-repeat
;
background-size
:
100%
100%
;
margin-bottom
:
10px
;
.reward-content
{
padding-left
:
40px
;
display
:
flex
;
justify-content
:
space-between
;
padding
:
10px
20px
;
// 20rpx 40rpx / 2
color
:
#000
;
font-weight
:
700
;
font-size
:
14px
;
.info
{
h3
{
font-size
:
14px
;
// 28rpx / 2
color
:
#fff
;
}
.invite-text
{
width
:
120px
;
}
p
{
font-size
:
12px
;
// 24rpx / 2
color
:
#fff
;
}
span
{
color
:
red
;
}
.status
{
...
...
src/views/user/shiming.vue
View file @
3e692e42
...
...
@@ -34,6 +34,9 @@ import { ref, onMounted } from 'vue'
import
{
isValidIDCard
}
from
'
@/utils/userInfoCheck
'
import
request
from
'
@/utils/request
'
import
NavBar
from
'
@/components/NavBar.vue
'
import
{
encrypt
}
from
'
@/utils/encrypt
'
import
{
useRouter
}
from
'
vue-router
'
const
router
=
useRouter
()
const
xs
=
ref
(
-
1
)
const
title
=
ref
(
'
未实名认证
'
)
const
change
=
ref
(
true
)
...
...
@@ -73,7 +76,7 @@ const add = async () => {
try
{
const
data
=
{
nickName
:
username
.
value
,
identityId
:
identityId
.
value
,
identityId
:
encrypt
(
identityId
.
value
)
,
}
const
res
=
await
request
.
post
(
"
/system/user/certified
"
,
data
)
...
...
@@ -85,7 +88,7 @@ const add = async () => {
})
setTimeout
(()
=>
{
navigateTo
(
'
/
'
)
router
.
push
(
'
/user
'
)
},
1000
)
}
else
{
showToast
(
res
.
msg
)
...
...
src/views/user/zjmx.vue
View file @
3e692e42
<
script
setup
>
import
{
ref
,
watch
}
from
'
vue
'
import
request
from
'
@/utils/request
'
import
{
ref
,
watch
}
from
"
vue
"
;
import
request
from
"
@/utils/request
"
;
import
{
useRoute
}
from
"
vue-router
"
;
import
NavBar
from
'
@/components/NavBar.vue
'
const
route
=
useRoute
()
const
route
=
useRoute
()
;
// 响应式数据
const
list
=
ref
([])
const
pageSize
=
ref
(
10
)
const
pageNum
=
ref
(
1
)
const
total
=
ref
(
0
)
const
finished
=
ref
(
false
)
const
loading
=
ref
(
false
)
const
emptyTipsShow
=
ref
(
false
)
const
list
=
ref
([])
;
const
pageSize
=
ref
(
10
)
;
const
pageNum
=
ref
(
1
)
;
const
total
=
ref
(
0
)
;
const
finished
=
ref
(
false
)
;
const
loading
=
ref
(
false
)
;
const
emptyTipsShow
=
ref
(
false
)
;
// 下拉选项
const
range
=
ref
([
{
text
:
"
国债收益
"
,
value
:
'
2
'
},
{
text
:
"
国债余额
"
,
value
:
'
3
'
},
])
const
range
=
ref
([{
text
:
"
财政结算余额
"
,
value
:
1
},
{
text
:
"
国债收益
"
,
value
:
2
},
{
text
:
"
国债余额
"
,
value
:
3
}]);
// 获取路由参数中的tab
const
active
=
ref
(
route
.
query
.
tab
||
'
2
'
)
const
active
=
ref
(
Number
(
route
.
query
.
type
)
||
2
);
// 重置列表状态
const
resetList
=
()
=>
{
list
.
value
=
[]
...
...
@@ -29,54 +26,61 @@ const resetList = () => {
loading
.
value
=
false
total
.
value
=
0
emptyTipsShow
.
value
=
false
}
}
;
watch
(
active
,
()
=>
{
resetList
()
})
resetList
();
});
const
getList
=
async
()
=>
{
try
{
const
data
=
{
walletCod
e
:
active
.
value
,
balanceTyp
e
:
active
.
value
,
beginDate
:
""
,
}
const
res
=
await
request
.
post
(
`/ops/walletdetail/list?pageNum=
${
pageNum
.
value
}
&pageSize=
${
pageSize
.
value
}
`
,
{
...
data
,
})
};
const
res
=
await
request
.
post
(
`/ops/walletdetail/list?pageNum=
${
pageNum
.
value
}
&pageSize=
${
pageSize
.
value
}
`
,
data
);
if
(
res
.
code
===
200
)
{
list
.
value
=
[...
list
.
value
,
...(
res
.
rows
||
[])]
if
(
pageNum
.
value
===
1
)
{
list
.
value
=
res
.
rows
||
[]
}
else
{
list
.
value
=
[...
list
.
value
,
...(
res
.
rows
||
[])]
}
total
.
value
=
res
.
total
||
0
if
(
list
.
value
.
length
>=
total
.
value
)
{
finished
.
value
=
true
}
else
{
pageNum
.
value
++
}
if
(
list
.
value
.
length
>=
total
.
value
)
{
finished
.
value
=
true
}
}
else
{
showFailToast
(
res
.
msg
||
'
加载失败
'
)
finished
.
value
=
true
}
}
catch
(
error
)
{
console
.
error
(
'
获取列表失败:
'
,
error
)
showFailToast
(
'
加载失败,请重试
'
)
finished
.
value
=
true
}
finally
{
loading
.
value
=
false
}
}
};
// Tab 点击处理
const
handleClick
=
(
item
)
=>
{
if
(
active
.
value
===
item
.
value
)
return
;
active
.
value
=
item
.
value
;
resetList
();
getList
()
};
</
script
>
<
template
>
<div
class=
"wallet-detail"
>
<NavBar
title=
"资金明细"
/>
<!-- Tabs -->
<var-tabs
v-model:active=
"active"
class=
"fixed-tabs"
>
<var-tab
v-for=
"item in range"
:
name=
"item.value"
:key=
"item.value
"
>
<var-tab
v-for=
"item in range"
:
key=
"item.value"
:name=
"item.value"
@
click=
"handleClick(item)
"
>
{{
item
.
text
}}
</var-tab>
</var-tabs>
...
...
@@ -88,40 +92,28 @@ const getList = async () => {
<div
class=
"item-header"
>
<div
class=
"type-info"
>
<span
class=
"type-text"
>
{{
item
.
balanceType
==
2
?
'
国债收益
'
:
item
.
balanceType
==
3
?
'
国债余额
'
:
''
}}
{{
item
.
balanceType
==
1
?
"
财政结算余额
"
:
item
.
balanceType
==
2
?
"
国债收益
"
:
item
.
balanceType
==
3
?
"
国债余额
"
:
""
}}
</span>
</div>
<div
class=
"amount"
:class=
"
{ negative: item.type === '2' }">
{{
item
.
type
===
'
1
'
?
'
+
'
:
'
-
'
}}{{
item
.
changeAmount
}}
{{
item
.
balanceType
===
2
||
item
.
balanceType
===
1
?
'
元
'
:
''
}}
{{
item
.
type
===
"
1
"
?
"
+
"
:
"
-
"
}}{{
item
.
changeAmount
}}
{{
item
.
balanceType
===
2
||
item
.
balanceType
===
1
?
"
元
"
:
""
}}
</div>
</div>
<!-- 交易信息 -->
<div
class=
"item-content"
>
<div
class=
"transaction-info"
>
<template
v-if=
"item.balanceType && item.bankName"
>
<div
v-if=
"item.status == '0' || item.status == '1'"
class=
"processing"
>
审核中
</div>
<div
v-else-if=
"item.status == '2'"
class=
"success"
>
{{
item
.
source
}}
</div>
<div
v-else-if=
"item.status == '3'"
class=
"failed"
>
{{
item
.
source
}}
</div>
</
template
>
<
template
v-else
>
{{
item
.
source
}}
<span
v-if=
"item.bankName"
>
至
{{
item
.
bankName
}}{{
item
.
bankNum
.
slice
(
-
4
)
}}
</span>
</
template
>
{{
item
.
source
}}
</div>
<div
class=
"balance"
>
剩余:{{ item.amount }}{{ item.balanceType === 2 || item.balanceType === 1 ? '元' : '' }}
剩余:
{{
item
.
amount
}}{{
item
.
balanceType
===
2
||
item
.
balanceType
===
1
?
"
元
"
:
""
}}
</div>
</div>
<div
class=
"item-footer"
>
...
...
@@ -132,18 +124,25 @@ const getList = async () => {
</div>
</
template
>
<
style
lang=
"scss"
scoped
>
.wallet-detail
{
min-height
:
calc
(
100vh
-
54px
);
background
:
#fff
;
font-family
:
pingfang
;
// min-height: calc(100vh - 54px);
background
:
url("@/static/home/beijing.png")
;
background-size
:
100%
100%
;
background-repeat
:
no-repeat
;
padding-bottom
:
10px
;
height
:
100%
;
box-sizing
:
border-box
;
.fixed-tabs
{}
.list-container
{
min-height
:
200px
;
padding
:
0
15px
;
height
:
calc
(
100vh
-
120px
);
border-radius
:
10px
;
margin
:
10px
15px
10px
;
box-sizing
:
border-box
;
overflow-y
:
auto
;
max-height
:
calc
(
100vh
-
100px
)
;
background
:
#fff
;
}
.detail-item
{
...
...
@@ -213,4 +212,4 @@ const getList = async () => {
font-size
:
14px
;
}
}
</
style
>
\ No newline at end of file
</
style
>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
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 comment