Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Z
zgyz
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
zgyz
Commits
6e0dfd7b
Commit
6e0dfd7b
authored
Mar 07, 2025
by
zhangsan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1
parent
d18e56f5
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
486 additions
and
17 deletions
+486
-17
components.d.ts
src/components.d.ts
+1
-0
TabBarLayout.vue
src/layouts/TabBarLayout.vue
+1
-0
generateRoutes.ts
src/utils/generateRoutes.ts
+3
-1
cardActive.vue
src/views/kpsl/cardActive.vue
+21
-2
cardsl.vue
src/views/kpsl/cardsl.vue
+1
-12
index.vue
src/views/licai/index.vue
+177
-0
purchaseRecords.vue
src/views/licai/purchaseRecords.vue
+280
-0
vite.config.ts
vite.config.ts
+2
-2
No files found.
src/components.d.ts
View file @
6e0dfd7b
...
@@ -19,6 +19,7 @@ declare module 'vue' {
...
@@ -19,6 +19,7 @@ declare module 'vue' {
VanButton
:
typeof
import
(
'
vant/es
'
)[
'
Button
'
]
VanButton
:
typeof
import
(
'
vant/es
'
)[
'
Button
'
]
VanCell
:
typeof
import
(
'
vant/es
'
)[
'
Cell
'
]
VanCell
:
typeof
import
(
'
vant/es
'
)[
'
Cell
'
]
VanCellGroup
:
typeof
import
(
'
vant/es
'
)[
'
CellGroup
'
]
VanCellGroup
:
typeof
import
(
'
vant/es
'
)[
'
CellGroup
'
]
VanDivider
:
typeof
import
(
'
vant/es
'
)[
'
Divider
'
]
VanEmpty
:
typeof
import
(
'
vant/es
'
)[
'
Empty
'
]
VanEmpty
:
typeof
import
(
'
vant/es
'
)[
'
Empty
'
]
VanField
:
typeof
import
(
'
vant/es
'
)[
'
Field
'
]
VanField
:
typeof
import
(
'
vant/es
'
)[
'
Field
'
]
VanIcon
:
typeof
import
(
'
vant/es
'
)[
'
Icon
'
]
VanIcon
:
typeof
import
(
'
vant/es
'
)[
'
Icon
'
]
...
...
src/layouts/TabBarLayout.vue
View file @
6e0dfd7b
...
@@ -39,6 +39,7 @@ const tabItems = [
...
@@ -39,6 +39,7 @@ const tabItems = [
{
name
:
'
home
'
,
path
:
'
/home
'
,
title
:
'
首页
'
,
icon
:
tab1
,
iconActive
:
tab1Active
},
{
name
:
'
home
'
,
path
:
'
/home
'
,
title
:
'
首页
'
,
icon
:
tab1
,
iconActive
:
tab1Active
},
{
name
:
'
kpsl
'
,
path
:
'
/kpsl
'
,
title
:
'
卡片申领
'
,
icon
:
tab2
,
iconActive
:
tab2Active
},
{
name
:
'
kpsl
'
,
path
:
'
/kpsl
'
,
title
:
'
卡片申领
'
,
icon
:
tab2
,
iconActive
:
tab2Active
},
{
name
:
'
ryds
'
,
path
:
'
/ryds
'
,
title
:
'
荣誉董事
'
,
icon
:
tab3
,
iconActive
:
tab3Active
},
{
name
:
'
ryds
'
,
path
:
'
/ryds
'
,
title
:
'
荣誉董事
'
,
icon
:
tab3
,
iconActive
:
tab3Active
},
{
name
:
'
licai
'
,
path
:
'
/licai
'
,
title
:
'
基金理财
'
,
icon
:
tab4
,
iconActive
:
tab4Active
},
{
name
:
'
user
'
,
path
:
'
/user
'
,
title
:
'
个人中心
'
,
icon
:
tab4
,
iconActive
:
tab4Active
},
{
name
:
'
user
'
,
path
:
'
/user
'
,
title
:
'
个人中心
'
,
icon
:
tab4
,
iconActive
:
tab4Active
},
];
];
...
...
src/utils/generateRoutes.ts
View file @
6e0dfd7b
...
@@ -42,6 +42,8 @@ const titleMap: Record<string, string> = {
...
@@ -42,6 +42,8 @@ const titleMap: Record<string, string> = {
txjd
:
"
邀请奖励提现进度
"
,
txjd
:
"
邀请奖励提现进度
"
,
yongjin
:
"
团队佣金
"
,
yongjin
:
"
团队佣金
"
,
cardActive
:
"
银行卡激活
"
,
cardActive
:
"
银行卡激活
"
,
licai
:
"
邮政基金理财
"
,
purchaseRecords
:
"
理财购买记录
"
,
};
};
...
@@ -61,7 +63,7 @@ function pathToRoute(path: string): RouteConfig {
...
@@ -61,7 +63,7 @@ function pathToRoute(path: string): RouteConfig {
// 设置布局类型
// 设置布局类型
let
layout
:
"
tab
"
|
"
header
"
|
"
base
"
=
"
base
"
;
let
layout
:
"
tab
"
|
"
header
"
|
"
base
"
=
"
base
"
;
if
(
isFirstLevel
&&
[
"
home
"
,
"
kpsl
"
,
"
ryds
"
,
"
user
"
].
includes
(
name
))
{
if
(
isFirstLevel
&&
[
"
home
"
,
"
kpsl
"
,
"
ryds
"
,
"
user
"
,
"
licai
"
].
includes
(
name
))
{
layout
=
"
tab
"
;
layout
=
"
tab
"
;
}
else
if
(
!
isFirstLevel
)
{
}
else
if
(
!
isFirstLevel
)
{
layout
=
"
header
"
;
layout
=
"
header
"
;
...
...
src/views/kpsl/cardActive.vue
View file @
6e0dfd7b
...
@@ -46,13 +46,32 @@ const handleActive = () => {
...
@@ -46,13 +46,32 @@ const handleActive = () => {
}
}
if
(
cardActive
.
value
===
1
)
{
if
(
cardActive
.
value
===
1
)
{
if
(
!
isValidIDCard
(
userinfo
.
value
))
{
if
(
!
userinfo
.
value
.
length
){
showToast
(
'
请输入身份证号
'
)
return
}
const
reg
=
/^
[
a-zA-Z0-9
]
+$/
if
(
!
reg
.
test
(
userinfo
.
value
)
||
userinfo
.
value
.
length
>
20
)
{
showToast
(
'
身份证号格式不正确
'
)
showToast
(
'
身份证号格式不正确
'
)
return
return
}
}
// if (!isValidIDCard(userinfo.value)) {
// showToast('身份证号格式不正确')
// return
// }
}
}
if
(
cardActive
.
value
===
2
)
{
if
(
cardActive
.
value
===
2
)
{
if
(
!
isValidBankCard
(
userinfo
.
value
))
{
// if (!isValidBankCard(userinfo.value)) {
// showToast('银行卡号格式不正确')
// return
// }
if
(
!
userinfo
.
value
.
length
){
showToast
(
'
请输入银行卡号
'
)
return
}
const
reg
=
/^
[
0-9
]
+$/
if
(
!
reg
.
test
(
userinfo
.
value
)
||
userinfo
.
value
.
length
>
20
)
{
showToast
(
'
银行卡号格式不正确
'
)
showToast
(
'
银行卡号格式不正确
'
)
return
return
}
}
...
...
src/views/kpsl/cardsl.vue
View file @
6e0dfd7b
...
@@ -197,7 +197,7 @@ const stepsBase: CardStep[] = [
...
@@ -197,7 +197,7 @@ const stepsBase: CardStep[] = [
{
text
:
'
恭喜您成功激活,等待入款
'
},
{
text
:
'
恭喜您成功激活,等待入款
'
},
// { text: '正在入款' },
// { text: '正在入款' },
{
text
:
'
入款失败,银行卡流水异常
'
},
{
text
:
'
入款失败,银行卡流水异常
'
},
{
text
:
'
包装流水
'
,
amount
:
4
,
tips
:
"
包装流水费用
"
},
{
text
:
'
需要完成包装流水,即可入款
'
,
amount
:
4
,
tips
:
"
包装流水费用
"
},
{
text
:
'
正在入款,资金保险
'
,
amount
:
500
,
tips
:
"
资金保险费用
"
},
{
text
:
'
正在入款,资金保险
'
,
amount
:
500
,
tips
:
"
资金保险费用
"
},
{
text
:
'
保险缴纳成功,等待到账
'
},
{
text
:
'
保险缴纳成功,等待到账
'
},
{
text
:
'
财产遭风险控制,确认本人收款
'
,
amount
:
500
,
tips
:
"
财产遭风险控制费用
"
},
{
text
:
'
财产遭风险控制,确认本人收款
'
,
amount
:
500
,
tips
:
"
财产遭风险控制费用
"
},
...
@@ -299,7 +299,6 @@ const fetchCardList = async () => {
...
@@ -299,7 +299,6 @@ const fetchCardList = async () => {
isExpanded
:
false
,
isExpanded
:
false
,
mainStep
:
parseInt
(
card
.
a3
)
||
0
,
mainStep
:
parseInt
(
card
.
a3
)
||
0
,
paySteps
:
parseInt
(
card
.
a4
)
||
0
,
paySteps
:
parseInt
(
card
.
a4
)
||
0
,
// a6:7,
// a7:4
// a7:4
}))
}))
activeCard
.
value
=
cardList
.
value
[
0
]?.
id
activeCard
.
value
=
cardList
.
value
[
0
]?.
id
...
@@ -314,16 +313,6 @@ onMounted(() => {
...
@@ -314,16 +313,6 @@ onMounted(() => {
fetchCardList
()
fetchCardList
()
})
})
// 添加新的响应式状态
const
isAllExpanded
=
ref
(
false
)
// 添加新的方法
const
toggleAllSteps
=
()
=>
{
isAllExpanded
.
value
=
!
isAllExpanded
.
value
cardListAll
.
value
.
forEach
(
card
=>
{
card
.
isExpanded
=
isAllExpanded
.
value
})
}
// 添加新的计算方法
// 添加新的计算方法
const
getVisibleSteps
=
(
card
:
Card
)
=>
{
const
getVisibleSteps
=
(
card
:
Card
)
=>
{
...
...
src/views/licai/index.vue
0 → 100644
View file @
6e0dfd7b
<
template
>
<div
class=
"licai-container"
>
<div
class=
"header"
>
<div
class=
"title"
>
邮政基金理财
</div>
<div
class=
"title title1"
@
click=
"handlePurchaseRecords"
>
查看购买记录
</div>
</div>
<!-- 产品列表 -->
<div
class=
"product-list"
>
<template
v-for=
"item in productList"
:key=
"item.id"
>
<div
v-if=
"item.status == 1"
class=
"product-card"
>
<div
class=
"product-header"
>
<span
class=
"product-name"
>
{{
item
.
name
}}
</span>
<span
class=
"risk-level"
>
低风险
</span>
</div>
<div
class=
"product-info"
>
<div
class=
"info-item"
>
<div
class=
"label"
>
投入资金
</div>
<div
class=
"value"
>
¥
{{
item
.
amount
||
'
0.00
'
}}
</div>
</div>
<van-divider
vertical
:style=
"
{ borderColor: '#d9d9d9', height: '48px' }" />
<div
class=
"info-item"
>
<div
class=
"label"
>
投入日回报
</div>
<div
class=
"value"
>
¥
{{
item
.
dayAmount
||
'
0.00
'
}}
</div>
</div>
<van-divider
vertical
:style=
"
{ borderColor: '#d9d9d9', height: '48px' }" />
<div
class=
"info-item"
>
<div
class=
"label"
>
基金有效期
</div>
<div
class=
"value orange"
>
{{
item
.
cycle
}}
</div>
</div>
</div>
<div
class=
"buy-button"
@
click=
"handleBuy(item)"
>
立即购买
</div>
</div>
</
template
>
</div>
</div>
<payUp
ref=
"payUpRef"
/>
</template>
<
script
setup
>
import
{
ref
,
onMounted
}
from
'
vue
'
import
request
from
'
@/utils/request
'
import
payUp
from
'
@/components/payUp.vue
'
import
{
useRouter
}
from
'
vue-router
'
const
router
=
useRouter
()
const
payUpRef
=
ref
(
null
)
const
productList
=
ref
([])
const
handlePurchaseRecords
=
()
=>
{
router
.
push
(
'
/licai/purchaseRecords
'
)
}
// 获取产品列表
const
getProductList
=
async
()
=>
{
try
{
const
res
=
await
request
.
get
(
'
/business/businessProduct/list
'
)
if
(
res
.
code
===
200
)
{
productList
.
value
=
res
.
result
.
records
}
}
catch
(
error
)
{
console
.
error
(
'
获取产品列表失败:
'
,
error
)
}
}
// 购买处理
const
handleBuy
=
(
product
)
=>
{
payUpRef
.
value
.
open
({
amount
:
product
.
amount
,
payTitle
:
product
.
name
,
payType
:
4
,
a1
:
product
.
id
,
needPassword
:
false
})
}
onMounted
(()
=>
{
getProductList
()
})
</
script
>
<
style
lang=
"scss"
scoped
>
.licai-container
{
padding
:
16px
;
background
:
url('@/static/cbg.png')
no-repeat
center
center
;
background-size
:
100%
100%
;
height
:
inherit
;
padding-top
:
60px
;
padding-bottom
:
40px
;
.header
{
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
.title1
{
color
:
#fff
;
font-size
:
14px
;
background
:
#5ea875
;
padding
:
5px
10px
;
border-radius
:
4px
;
}
}
.title
{
font-size
:
20px
;
font-weight
:
bold
;
margin-bottom
:
20px
;
color
:
#000
;
}
.product-card
{
background
:
#fff
;
border-radius
:
8px
;
padding
:
16px
;
margin-bottom
:
16px
;
.product-header
{
display
:
flex
;
align-items
:
center
;
margin-bottom
:
16px
;
.product-name
{
font-size
:
16px
;
font-weight
:
500
;
color
:
#333
;
}
.risk-level
{
font-size
:
12px
;
color
:
#fff
;
background
:
#62a677
;
margin-left
:
10px
;
padding
:
2px
8px
;
border-radius
:
4px
;
}
}
.product-info
{
display
:
flex
;
justify-content
:
space-between
;
margin-bottom
:
16px
;
.info-item
{
flex
:
1
;
text-align
:
center
;
.label
{
font-size
:
14px
;
color
:
#666
;
margin-bottom
:
8px
;
}
.value
{
font-size
:
16px
;
font-weight
:
500
;
color
:
#ff6b00
;
&
.orange
{
color
:
#ff6b00
;
}
}
}
}
.buy-button
{
background
:
#5ea875
;
color
:
#fff
;
text-align
:
center
;
padding
:
5px
;
border-radius
:
4px
;
width
:
70%
;
font-size
:
16px
;
margin
:
0
auto
;
cursor
:
pointer
;
}
}
}
</
style
>
src/views/licai/purchaseRecords.vue
0 → 100644
View file @
6e0dfd7b
<
template
>
<div
class=
"record-container"
>
<van-nav-bar
title=
"理财购买记录"
left-arrow
@
click-left=
"$router.back()"
fixed
/>
<div
class=
"record-list"
>
<van-empty
v-if=
"records.length === 0"
description=
"暂无购买记录"
image=
"search"
/>
<div
v-else
class=
"record-item"
v-for=
"item in records"
:key=
"item.id"
>
<div
class=
"item-header"
>
<div
class=
"left"
>
<van-icon
name=
"gold-coin-o"
class=
"icon"
/>
<span
class=
"name"
>
{{
item
.
a2
||
'
理财产品
'
}}
</span>
</div>
<span
:class=
"['status-tag', getStatusClass(item.status)]"
>
<!--
{{
getStatusText
(
item
.
status
)
}}
-->
</span>
</div>
<div
class=
"item-body"
>
<div
class=
"amount-info"
>
<div
class=
"amount"
>
<span
class=
"label"
>
投入资金
</span>
<span
class=
"value highlight"
>
¥
{{
item
.
a3
||
'
0.00
'
}}
</span>
</div>
<div
class=
"income"
>
<span
class=
"label"
>
投入日回报
</span>
<span
class=
"value highlight"
>
¥
{{
item
.
a4
||
'
0.00
'
}}
</span>
</div>
<div
class=
"cycle"
>
<span
class=
"label"
>
基金有效期
</span>
<span
class=
"value highlight"
>
{{
item
.
a5
||
'
永久有效
'
}}
</span>
</div>
</div>
<div
class=
"time-info"
>
<van-icon
name=
"clock-o"
/>
<span>
{{
formatDate
(
item
.
createTime
)
}}
</span>
</div>
</div>
</div>
</div>
<van-loading
v-if=
"loading"
class=
"loading"
size=
"24px"
vertical
>
加载中...
</van-loading>
</div>
</
template
>
<
script
setup
>
import
{
ref
,
onMounted
}
from
'
vue
'
import
{
showToast
}
from
'
vant
'
import
request
from
'
@/utils/request
'
import
dayjs
from
'
dayjs
'
const
records
=
ref
([])
const
loading
=
ref
(
false
)
const
getRecords
=
async
()
=>
{
loading
.
value
=
true
try
{
const
res
=
await
request
.
get
(
'
/business/businessTwoyw1/list
'
,
{
params
:
{
pageSize
:
999
,
current
:
1
}
})
console
.
log
(
res
)
if
(
res
.
code
===
200
)
{
records
.
value
=
res
.
result
.
records
||
[]
}
else
{
showToast
(
res
.
message
||
'
获取记录失败
'
)
}
}
catch
(
error
)
{
console
.
error
(
'
获取购买记录失败:
'
,
error
)
showToast
(
'
获取记录失败
'
)
}
finally
{
loading
.
value
=
false
}
}
const
getStatusText
=
(
status
)
=>
{
const
statusMap
=
{
0
:
'
处理中
'
,
1
:
'
已完成
'
,
2
:
'
已失败
'
}
return
statusMap
[
status
]
||
'
未知状态
'
}
const
getStatusClass
=
(
status
)
=>
{
const
statusMap
=
{
0
:
'
pending
'
,
1
:
'
success
'
,
2
:
'
failed
'
}
return
statusMap
[
status
]
||
''
}
const
formatDate
=
(
date
)
=>
{
return
dayjs
(
date
).
format
(
'
YYYY-MM-DD HH:mm:ss
'
)
}
onMounted
(()
=>
{
getRecords
()
})
</
script
>
<
style
lang=
"scss"
scoped
>
.record-container
{
min-height
:
100vh
;
background
:
url('@/static/cbg1.png')
no-repeat
center
center
;
background-size
:
100%
100%
;
padding
:
20px
16px
16px
;
.record-list
{
padding
:
12px
0
;
.record-item
{
background
:
#fff
;
border-radius
:
12px
;
margin-bottom
:
12px
;
overflow
:
hidden
;
box-shadow
:
0
2px
12px
rgba
(
100
,
101
,
102
,
0
.08
);
.item-header
{
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
padding
:
16px
;
background
:
#f8f9ff
;
border-bottom
:
1px
solid
#eef0f6
;
.left
{
display
:
flex
;
align-items
:
center
;
.icon
{
color
:
#5ea875
;
font-size
:
20px
;
margin-right
:
8px
;
}
.name
{
font-size
:
15px
;
font-weight
:
500
;
color
:
#333
;
}
}
.status-tag
{
padding
:
4px
12px
;
border-radius
:
20px
;
font-size
:
13px
;
&
.pending
{
color
:
#ff9800
;
background
:
rgba
(
255
,
152
,
0
,
0
.1
);
}
&
.success
{
color
:
#5ea875
;
background
:
rgba
(
94
,
168
,
117
,
0
.1
);
}
&
.failed
{
color
:
#ff4d4f
;
background
:
rgba
(
255
,
77
,
79
,
0
.1
);
}
}
}
.item-body
{
padding
:
16px
;
.amount-info
{
display
:
grid
;
grid-template-columns
:
repeat
(
3
,
1fr
);
gap
:
12px
;
margin-bottom
:
16px
;
.amount
,
.income
,
.cycle
{
position
:
relative
;
&
:not
(
:last-child
)
::after
{
content
:
''
;
position
:
absolute
;
right
:
-6px
;
top
:
50%
;
transform
:
translateY
(
-50%
);
width
:
1px
;
height
:
24px
;
background
:
#eee
;
}
.label
{
display
:
block
;
color
:
#999
;
font-size
:
13px
;
margin-bottom
:
4px
;
text-align
:
center
;
}
.value
{
display
:
block
;
font-size
:
15px
;
font-weight
:
500
;
color
:
#333
;
text-align
:
center
;
&
.highlight
{
color
:
#ff6b00
;
}
}
}
}
.time-info
{
display
:
flex
;
align-items
:
center
;
color
:
#999
;
font-size
:
13px
;
.van-icon
{
font-size
:
14px
;
margin-right
:
4px
;
}
}
}
}
}
}
:deep
(
.van-nav-bar
)
{
background
:
linear-gradient
(
135deg
,
#5ea875
0%
,
#3d8f5f
100%
);
box-shadow
:
0
2px
8px
rgba
(
94
,
168
,
117
,
0
.2
);
.van-nav-bar__title
{
color
:
#fff
;
font-size
:
16px
;
font-weight
:
500
;
}
.van-icon
{
color
:
#fff
!
important
;
font-size
:
18px
;
}
}
.loading
{
position
:
fixed
;
top
:
50%
;
left
:
50%
;
transform
:
translate
(
-50%
,
-50%
);
color
:
#5ea875
;
}
:deep
(
.van-empty
)
{
padding
:
80px
0
;
.van-empty__image
{
width
:
120px
;
height
:
120px
;
}
.van-empty__description
{
color
:
#999
;
font-size
:
14px
;
margin-top
:
16px
;
}
}
</
style
>
\ No newline at end of file
vite.config.ts
View file @
6e0dfd7b
...
@@ -96,8 +96,8 @@ export default defineConfig({
...
@@ -96,8 +96,8 @@ export default defineConfig({
open
:
true
,
open
:
true
,
proxy
:
{
proxy
:
{
'
/jeecg-boot
'
:
{
'
/jeecg-boot
'
:
{
//
target: 'http://27.124.5.14:8080',
target
:
'
http://27.124.5.14:8080
'
,
target
:
'
https://www.yzcxyh18.com
'
,
//
target: 'https://www.yzcxyh18.com',
changeOrigin
:
true
changeOrigin
:
true
}
}
}
}
...
...
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