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
32172fb1
authored
2023-10-31 10:24:46 +0800
by
杨炀
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
no message
1 parent
5bd03939
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
14 additions
and
1840 deletions
config.js
manifest.json
pages/form/index.vue
pages/usercenter/bills.vue
pages/usercenter/billsDetail.vue
pages/usercenter/myInfo.vue
pages/usercenter/teamList.vue
pages/usercenter/usercenter.vue
config.js
View file @
32172fb
...
...
@@ -4,7 +4,7 @@
// staging
// const baseUrl_api = "http://22yidpjzjifv.ngrok.xiaomiqiu123.top/stage-api/";
const
baseUrl_api
=
"http://1
92.168.1.11:8787
"
;
const
baseUrl_api
=
"http://1
82.92.233.247/stage-api/
"
;
export
default
{
baseUrl_api
...
...
manifest.json
View file @
32172fb
...
...
@@ -38,7 +38,8 @@
"quickapp"
:
{},
/*
小程序特有相关
*/
"mp-weixin"
:
{
"appid"
:
"wx5d51e8ed31bbdbb7"
,
//J系统
"appid"
:
"wx5d51e8ed31bbdbb7"
,
//J系统
//
"appid"
:
"wx70f16625f10de4fe"
,
//新跆联
//
"appid"
:
"wx5e2471ed6210c3a6"
,
"setting"
:
{
...
...
@@ -48,7 +49,9 @@
},
"usingComponents"
:
true
,
"permission"
:
{},
"optimization"
:{
"subPackages"
:
true
}
"optimization"
:
{
"subPackages"
:
true
}
},
"mp-alipay"
:
{
"usingComponents"
:
true
...
...
pages/form/index.vue
View file @
32172fb
<
template
>
<view
class=
"graybg"
>
<view
v-if=
"formData.type=='0'"
>
<view
v-html=
"formData.content"
class=
"richContent"
></view>
</view>
<view
v-if=
"formData.type=='1'"
class=
"formBox"
>
<view
@
click=
"clickImg"
>
<image
style=
"width: 100%;height: 50vw;"
mode=
"aspectFit"
v-for=
"p in formData.picArr"
:src=
"p"
/>
</view>
<view
v-if=
"formData.content2"
v-html=
"formData.content2"
class=
"richContent2"
></view>
<uni-forms
ref=
"baseForm"
:modelValue=
"baseFormData"
>
<uni-forms-item
label=
"姓名"
required
v-if=
"formData.fields.indexOf('0')>-1"
>
<uni-easyinput
v-model=
"baseFormData.name"
placeholder=
"请输入姓名"
/>
</uni-forms-item>
<uni-forms-item
label=
"手机号"
required
v-if=
"formData.fields.indexOf('1')>-1"
>
<uni-easyinput
v-model=
"baseFormData.telno"
placeholder=
"请输入手机号"
/>
</uni-forms-item>
<uni-forms-item
label=
"需求描述"
required
v-if=
"formData.fields.indexOf('2')>-1"
>
<uni-easyinput
type=
"textarea"
v-model=
"baseFormData.requirement"
placeholder=
"请输入需求描述"
/>
</uni-forms-item>
</uni-forms>
<button
type=
"primary"
@
click=
"submit"
>
提交
</button>
</view>
</view>
<uni-popup
ref=
"alertPayOk"
type=
"dialog"
>
<uni-popup-dialog
type=
"success"
confirmText=
"返回主页"
content=
"提交成功"
@
confirm=
"goIndex"
>
</uni-popup-dialog>
</uni-popup>
</
template
>
<
script
setup
>
...
...
@@ -42,85 +13,7 @@
import
*
as
api
from
'@/common/api.js'
;
const
{
proxy
}
=
getCurrentInstance
()
const
app
=
getApp
();
const
telNo
=
ref
(
''
);
const
alertPayOk
=
ref
(
null
);
const
isActive
=
ref
(
null
);
const
formData
=
ref
({})
const
baseFormData
=
ref
({})
const
rules
=
ref
({
name
:
{
rules
:
[{
required
:
true
,
errorMessage
:
'请输入姓名'
}]},
telno
:
{
rules
:
[{
required
:
true
,
errorMessage
:
'请输入手机号'
}]},
requirement
:
{
rules
:
[{
required
:
true
,
errorMessage
:
'请输入需求描述'
}]},
})
onReady
(()
=>
{
// 修改页头标题
uni
.
setNavigationBarTitle
({
title
:
formData
.
value
.
name
});
})
onShow
(()
=>
{
formData
.
value
=
JSON
.
parse
(
app
.
globalData
.
venue
.
miniappCustConfig
)
formData
.
value
.
picArr
=
formData
.
value
.
pics
.
split
(
','
)
});
function
goIndex
()
{
uni
.
redirectTo
({
url
:
`/pages/index/index`
})
}
function
submit
(){
// 姓名
if
((
formData
.
value
.
fields
.
indexOf
(
'0'
)
>-
1
)
&&
baseFormData
.
value
.
name
==
undefined
){
uni
.
showToast
({
title
:
'请输入姓名'
,
icon
:
'none'
,
duration
:
2000
});
return
}
// 手机号
if
(
formData
.
value
.
fields
.
indexOf
(
'1'
)
>-
1
&&
baseFormData
.
value
.
telno
==
undefined
){
uni
.
showToast
({
title
:
'请输入手机号'
,
icon
:
'none'
,
duration
:
2000
});
return
}
// 需求描述
if
(
formData
.
value
.
fields
.
indexOf
(
'2'
)
>-
1
&&
baseFormData
.
value
.
requirement
==
undefined
){
uni
.
showToast
({
title
:
'请输入需求描述'
,
icon
:
'none'
,
duration
:
2000
});
return
}
api
.
miniappData
(
baseFormData
.
value
).
then
((
res
)
=>
{
baseFormData
.
value
=
[]
alertPayOk
.
value
.
open
()
})
}
function
clickImg
()
{
uni
.
previewImage
({
urls
:
formData
.
value
.
picArr
,
// current: 0,
success
:
function
(
res
)
{
console
.
log
(
'success'
,
res
)
},
fail
:
function
(
res
)
{
console
.
log
(
'fail'
,
res
)
},
complete
:
function
(
res
)
{
console
.
log
(
'complete'
,
res
)
}
})
}
</
script
>
<
style
scoped
>
...
...
pages/usercenter/bills.vue
View file @
32172fb
<
template
>
<view
class=
"graybg"
>
<view
class=
"pads"
>
<view
class=
"box"
>
<view
class=
"billItem"
@
click=
"showDetail(b)"
v-for=
"b in billsList"
:key=
"b.id"
>
<!-- parentType -->
<view>
订单编号:
<text>
{{
b
.
orderCode
}}
</text>
</view>
<view
v-if=
"b.verificationCode"
>
验证码:
<text>
【
{{
b
.
verificationCode
}}
】
</text>
</view>
<view
v-if=
"b.siteName"
>
预订项目:
<text>
{{
b
.
projectName
||
b
.
sonList
[
0
].
projectName
}}
{{
b
.
siteName
}}
</text>
</view>
<view
v-if=
"b.orderDate"
>
预订时间:
<text>
{{
b
.
orderDate
}}
{{
b
.
orderTimePeriod
.
replace
(
/,/
,
'-'
)
}}
</text>
</view>
<view
class=
"billFoot"
>
<view
class=
"status"
v-if=
"b.payStatus == 1"
>
{{
b
.
payStatusStr
}}
</view>
<view
class=
"status warning"
v-else
>
{{
b
.
payStatusStr
}}
</view>
<view
class=
"price"
>
<text
class=
"tip"
v-if=
"b.payStatus == 0 && b.parentType == 2"
>
*子订单不支持独立支付
</text>
<!--payStatus 0 未支付 1 已支付 2 部分退款 3 已退款-->
<!--orderType 预定类型 0 普通预定 1 长租预定 2 预留 3 锁场 -->
<text
v-if=
"b.payStatus==0"
>
原价¥
{{
b
.
orderAmount
}}
</text>
<text
v-if=
"b.payStatus>0"
>
¥
{{
b
.
finalOrderAmount
}}
</text>
<text
class=
"danger"
v-if=
"b.payStatus==2||b.payStatus==3"
>
(已退款¥
{{
b
.
refundAmount
}}
)
</text>
<button
class=
"billbtn"
v-if=
"b.payStatusStr == '未支付' && b.parentType != 2"
@
click
.
stop=
"goBooking(b)"
>
去支付
</button>
</view>
</view>
</view>
<view
v-show=
"isLoadMore"
@
click=
"clickLoadMore"
>
<uni-load-more
:status=
"loadStatus"
:content-text=
"contentText"
></uni-load-more>
</view>
<view
class=
"nodata"
v-if=
"billsList.length==0"
>
<image
mode=
"aspectFit"
src=
"/static/nodata.png"
></image>
</view>
</view>
</view>
<view>
</view>
</
template
>
<
script
setup
>
import
{
ref
}
from
'vue'
;
import
{
onShow
,
onPullDownRefresh
,
onReachBottom
}
from
'@dcloudio/uni-app'
;
import
*
as
api
from
'@/common/api.js'
;
import
_
from
'lodash'
;
const
billsList
=
ref
([]);
const
alertDialog
=
ref
(
null
);
const
isLoadMore
=
ref
(
false
);
const
loadStatus
=
ref
(
'loading'
);
const
contentText
=
ref
({
contentdown
:
'点击查看更多'
,
contentrefresh
:
'正在加载...'
,
contentnomore
:
'没有更多数据了'
})
const
queryparam
=
ref
({
pageNum
:
1
,
pageSize
:
10
})
onShow
(()
=>
{
billsList
.
value
=
[]
getBills
()
});
function
clickLoadMore
()
{
if
(
loadStatus
.
value
==
'nomore'
){
return
}
queryparam
.
value
.
pageNum
+=
1
getBills
()
}
function
getBills
()
{
isLoadMore
.
value
=
false
api
.
getMalist
(
queryparam
.
value
).
then
(
res
=>
{
_
.
each
(
res
.
rows
,(
r
)
=>
{
billsList
.
value
.
push
(
r
)
})
// billsList.value = res.rows;
if
(
res
.
total
<
(
queryparam
.
value
.
pageSize
*
queryparam
.
value
.
pageNum
)){
isLoadMore
.
value
=
true
loadStatus
.
value
=
'nomore'
}
else
{
isLoadMore
.
value
=
true
loadStatus
.
value
=
'more'
}
});
}
function
goBooking
(
b
)
{
let
path
=
`/pages/index/booking?id=
${
b
.
id
}
`
;
uni
.
navigateTo
({
url
:
path
});
}
function
showDetail
(
b
)
{
let
path
=
`/pages/usercenter/billsDetail?id=
${
b
.
id
}
`
;
uni
.
navigateTo
({
url
:
path
});
}
function
pay
()
{
alertDialog
.
value
.
open
();
}
function
dialogConfirm
()
{
// 微信支付
}
function
dialogClose
()
{
alertDialog
.
value
.
close
();
}
</
script
>
<
style
lang=
"scss"
scoped
>
.pads
{
padding
:
0
25
rpx
70
rpx
;}
.billItem
{
width
:
auto
;
padding-bottom
:
1px
;
.uni-input
{
padding
:
15
rpx
0
;
color
:
#000
;
}
.billFoot
{
margin-bottom
:
20
rpx
;}
}
.rrcard
.box
{
padding
:
0
0
1px
;
margin
:
20
rpx
0
0
;
}
.graybg
{
background
:
#f7f8fa
;
height
:
100vh
;
width
:
100vw
;
overflow
:
auto
;
}
.whitebg
{
background
:
#fff
;
margin-top
:
15
rpx
;
border-radius
:
20
rpx
;
margin-bottom
:
180
rpx
;
}
.payBtn
{
width
:
750
rpx
;
line-height
:
90
rpx
;
height
:
120
rpx
;
text-align
:
center
;
background
:
#ff8124
;
color
:
#ffffff
;
font-size
:
36
rpx
;
border-radius
:
20
rpx
20
rpx
0px
0px
;
position
:
fixed
;
bottom
:
0
;
}
.uni-list-cell
::after
{
display
:
none
;
}
.littleimgBox
{
display
:
flex
;
align-items
:
center
;
}
.littleimg
{
width
:
50
rpx
;
height
:
50
rpx
;
margin-right
:
15
rpx
;
}
.padh20
{
padding
:
0
25
rpx
;
}
.billFoot
.tip
{
font-size
:
24
rpx
;
font-size
:
24
rpx
;
color
:
#999
;
font-weight
:
500
;
margin
:
0
20
rpx
;
}
.billFoot
text
{
white-space
:
nowrap
;}
.billFoot
text
.danger
{
color
:
#da2a2a
;}
</
style
>
...
...
pages/usercenter/billsDetail.vue
View file @
32172fb
<
template
>
<view
class=
"graybg"
>
<view
class=
"padh20"
>
<view
class=
"box"
>
<view
class=
"billItem"
>
<view>
订单编号:
<text>
{{
bill
.
orderCode
||
bill
.
id
}}
</text></view>
<view
v-if=
"bill.verificationCode"
>
验证码:
<text>
【
{{
bill
.
verificationCode
}}
】
</text></view>
<view
v-if=
"bill.siteName"
>
预订项目:
<text>
{{
bill
.
projectName
}}
{{
bill
.
siteName
}}
</text></view>
<view
v-if=
"bill.orderDate"
>
预订时间:
<text>
{{
bill
.
orderDate
}}
{{
bill
.
orderTimePeriod
.
replace
(
/,/
,
'-'
)
}}
</text></view>
<view
class=
"billCode"
v-if=
"bill.qrCodeBase&&bill.payStatus==1"
>
<!-- -->
<image
class=
"codeChecked"
src=
"@/static/done.png"
v-if=
"bill.status=='2'"
/>
<image
:src=
"bill.qrCodeBase"
></image>
</view>
<view
v-if=
"bill.payStatus==0"
>
下单时间:
<text>
{{
bill
.
payTime
}}
</text>
</view>
<view
v-if=
"bill.payStatus!=0"
>
支付时间:
<text>
{{
bill
.
payTime
}}
</text>
</view>
<view>
订单状态:
<text>
{{
bill
.
payStatusStr
}}
</text>
</view>
<view
v-if=
"bill.remark"
>
备注:
<text>
{{
bill
.
remark
}}
</text>
</view>
<view
v-if=
"bill.payStatus==0"
>
原价:
<text
class=
"price"
>
¥
{{
bill
.
unuseBalancePrice
}}
</text>
</view>
<view
v-if=
"bill.payStatus==0"
>
会员价:
<text
class=
"price"
>
¥
{{
bill
.
useBalancePrice
}}
</text>
</view>
<view
v-if=
"bill.payStatus>0"
>
支付金额:
<text
class=
"price"
>
¥
{{
bill
.
finalOrderAmount
}}
</text>
</view>
<view
v-if=
"bill.payStatus==3"
>
退款金额:
<text
class=
"price"
>
¥
{{
bill
.
refundAmount
}}
</text>
</view>
<view
class=
"billFoot"
v-if=
"bill.sonList==null"
>
<!-- 2 用了 1 没用-->
<view
class=
"status textherf"
@
click=
"payCancel(bill)"
v-if=
"!(bill.payStatus==0&&bill.parentType==2)&&bill.status==1"
>
取消订单
</view>
<!-- 0 未支付 1 已支付 2 部分退款 3 已退款-->
<view
class=
"status"
v-else-if=
"bill.payStatus==1"
>
支付完成
</view>
<view
class=
"status warning"
v-else
>
{{
bill
.
payStatusStr
}}
</view>
<view
class=
"price"
>
<text
v-if=
"bill.payStatus==3||bill.payStatus==2"
>
已退款¥
{{
bill
.
refundAmount
}}
</text>
<text
v-else-if=
"bill.payStatus==1"
>
¥
{{
bill
.
finalOrderAmount
}}
</text>
<button
class=
"billbtn"
v-if=
"bill.payStatusStr == '未支付'&&bill.parentType!=2"
@
click=
"goBooking(bill)"
>
去支付
</button>
</view>
</view>
</view>
<view
class=
"collapseBox"
v-if=
"bill.sonList&&bill.sonList.length>0"
>
<uni-collapse
@
change=
"changeCollapse"
>
<uni-collapse-item
:show-animation=
"true"
v-for=
"z in bill.sonList"
:key=
"z.id"
>
<template
v-slot:title
>
<text
class=
"bold"
>
{{
z
.
projectName
}}
</text>
<text
class=
"ddd"
>
(
{{
z
.
siteName
}}
)
</text>
<text
class=
"ccc"
>
{{
z
.
orderDate
.
substring
(
5
,
10
)
}}
{{
z
.
orderTimePeriod
.
replace
(
/,/
,
'-'
)
}}
</text>
</
template
>
<view
class=
"collapseBody"
>
<view
class=
"pp"
>
子订单编号:
<text>
{{z.orderCode}}
</text>
</view>
<view
class=
"pp"
>
子订单金额:
<text>
¥{{z.orderAmount}}
</text>
</view>
<view
class=
"pp"
>
场地:
<text>
{{z.siteName}}
</text>
</view>
<view
class=
"pp"
>
预订时间:
<text>
{{z.orderDate}} {{z.orderTimePeriod.replace(/,/,'-')}}
</text>
</view>
<view
class=
"pp"
v-if=
"z.verificationCode"
>
验证码:
<text>
【{{z.verificationCode}}】
</text>
</view>
<view
class=
"billCode"
v-if=
"z.qrCodeBase&&z.payStatus==1"
>
<image
:src=
"z.qrCodeBase"
></image>
</view>
<view
class=
"pp"
v-if=
"z.payStatus>0"
>
支付金额:
<text>
¥{{z.finalOrderAmount}}
</text>
</view>
<view
class=
"pp"
v-if=
"z.payStatus==3&&z.refundAmount"
>
退款金额:
<text>
¥{{z.refundAmount}}
</text>
</view>
<view
class=
"pp"
v-if=
"z.payStatus==0"
>
原价:
<text
class=
"price"
>
¥{{z.unuseBalancePrice}}
</text>
</view>
<view
class=
"pp"
v-if=
"z.payStatus==0"
>
会员价:
<text
class=
"price"
>
¥{{z.useBalancePrice}}
</text>
</view>
<view
class=
"billFoot"
>
<!-- 2 用了 1 没用-->
<view
class=
"status textherf"
@
click=
"payCancel(z)"
v-if=
"!(z.payStatus==0&&z.parentType==2)&&z.status==1"
>
取消订单
</view>
<!-- 0 未支付 1 已支付 2 部分退款 3 已退款-->
<view
class=
"status"
v-else-if=
"z.payStatus==1"
>
支付完成
</view>
<view
class=
"status warning"
v-else
>
{{z.payStatusStr}}
</view>
<!-- <view class="price" v-if="z.payStatus!=3">¥{{z.finalOrderAmount}}</view> -->
<!-- 退款金额 -->
<!-- <view class="price" v-else>¥{{z.refundAmount}}</view> -->
</view>
</view>
</uni-collapse-item>
</uni-collapse>
</view>
<view
v-if=
"bill.sonList&&bill.sonList.length>0"
class=
"fixedBBB"
>
<view
class=
"billFoot"
>
<!-- 2 用了 1 没用-->
<view
class=
"status textherf"
@
click=
"payCancel(bill)"
v-if=
"bill.status==1"
>
<text
v-if=
"bill.payStatus==0"
>
批量取消
</text>
<text
v-else
>
批量退订
</text>
</view>
<!-- 0 未支付 1 已支付 2 部分退款 3 已退款-->
<view
class=
"status"
v-else-if=
"bill.payStatus==1"
>
支付完成
</view>
<view
class=
"status warning"
v-else
>
{{bill.payStatusStr}}
</view>
<view
class=
"price"
>
<text
v-if=
"bill.payStatus==0"
>
原价¥{{bill.orderAmount}}
</text>
<text
v-if=
"bill.payStatus>0"
>
¥{{bill.finalOrderAmount}}
</text>
<text
class=
"danger"
v-if=
"bill.payStatus==2||bill.payStatus==3"
>
(已退款¥{{bill.refundAmount}})
</text>
<button
class=
"billbtn"
v-if=
"bill.payStatusStr == '未支付'&&bill.parentType!=2"
@
click=
"goBooking(bill)"
>
去支付
</button>
</view>
</view>
</view>
</view>
</view>
</view>
</
template
>
<
script
setup
>
...
...
@@ -150,258 +9,17 @@
getCurrentInstance
}
from
'vue'
;
import
{
onLoad
,
onBackPress
,
onPullDownRefresh
onLoad
}
from
'@dcloudio/uni-app'
const
{
proxy
}
=
getCurrentInstance
()
const
bill
=
ref
({})
const
billId
=
ref
()
const
accordionVal
=
ref
(
1
)
onLoad
((
options
)
=>
{
// 获取订单详情
console
.
log
(
options
.
id
)
billId
.
value
=
options
.
id
getBill
()
})
onPullDownRefresh
(()
=>
{
getBill
()
})
function
payCancel
(
item
)
{
if
(
item
.
payStatus
==
1
)
{
// 已付款
api
.
getCancelHint
(
item
.
orderCode
).
then
(
res
=>
{
if
(
res
.
data
.
canCancel
==
1
&&
res
.
data
.
refundPercent
!=
100
)
{
let
hour
=
Math
.
floor
(
res
.
data
.
timeMinutes
/
60
)
let
minute
=
res
.
data
.
timeMinutes
%
60
let
msg
if
(
hour
>
0
)
{
msg
=
`距离开场还有
${
hour
}
小时
${
minute
}
分钟,将扣款
${
100
-
res
.
data
.
refundPercent
}
%,你确定要退订吗?`
}
else
{
msg
=
`距离开场还有
${
minute
}
分钟,将扣款
${
100
-
res
.
data
.
refundPercent
}
%,你确定要退订吗?`
}
uni
.
showModal
({
title
:
'温馨提示'
,
content
:
msg
,
success
:
function
(
res
)
{
if
(
res
.
confirm
)
{
cancelThisOrder
(
item
.
orderCode
)
}
else
if
(
res
.
cancel
)
{
console
.
log
(
'取消'
);
}
}
});
}
else
if
(
res
.
data
.
canCancel
==
0
)
{
uni
.
showModal
({
title
:
'温馨提示'
,
content
:
`此订单不可退订,如需退订请联系商家`
,
showCancel
:
false
,
success
:
function
(
res
)
{
if
(
res
.
confirm
)
{
console
.
log
(
'确定'
);
}
else
if
(
res
.
cancel
)
{
console
.
log
(
'取消'
);
}
}
});
}
else
{
uni
.
showModal
({
title
:
'提示'
,
content
:
'确定取消订单吗?'
,
success
:
function
(
res
)
{
if
(
res
.
confirm
)
{
cancelThisOrder
(
item
.
orderCode
)
}
else
if
(
res
.
cancel
)
{
console
.
log
(
'取消'
);
}
}
});
}
})
}
else
{
uni
.
showModal
({
title
:
'提示'
,
content
:
'确定取消订单吗?'
,
success
:
function
(
res
)
{
if
(
res
.
confirm
)
{
cancelThisOrder
(
item
.
orderCode
)
}
else
if
(
res
.
cancel
)
{
console
.
log
(
'取消'
);
}
}
});
}
}
function
cancelThisOrder
(
id
)
{
api
.
cancelOrder
(
id
).
then
((
res
)
=>
{
uni
.
showToast
({
title
:
res
.
msg
,
icon
:
'none'
});
getBill
()
})
}
function
getBill
()
{
api
.
getMaItemById
(
billId
.
value
).
then
(
res
=>
{
bill
.
value
=
res
.
data
})
}
function
goBooking
(
b
)
{
let
path
=
`/pages/index/booking?id=
${
b
.
id
}
`
;
uni
.
redirectTo
({
url
:
path
});
}
function
changeCollapse
(
e
)
{
console
.
log
(
e
);
}
</
script
>
<
style
lang=
"scss"
scoped
>
.collapseBox
{
margin-top
:
30
rpx
;
}
.billItem
{
width
:
auto
;
padding-bottom
:
1px
;
.uni-input
{
padding
:
15
rpx
0
;
color
:
#000
;
}
}
.rrcard
.box
{
padding
:
0
0
1px
;
margin
:
20
rpx
0
0
;
}
.graybg
{
background
:
#f7f8fa
;
padding
:
0
0
140
rpx
;
height
:
100vh
;
width
:
100vw
;
overflow
:
auto
;
}
.whitebg
{
background
:
#fff
;
margin-top
:
15
rpx
;
border-radius
:
20
rpx
;
margin-bottom
:
180
rpx
;
}
.uni-list-cell
::after
{
display
:
none
;
}
.padh20
{
padding
:
0
25
rpx
;
}
.billItem
.billCode
{
position
:
relative
;
border-top
:
1
rpx
dashed
#E5E5E5
;
}
.collapseBody
{
margin
:
20
rpx
0
0
;
}
.collapseBody
.billCode
{
position
:
relative
;
border-top
:
1
rpx
dashed
#E5E5E5
;
}
.billItem
.billCode
image
{
width
:
340
rpx
;
height
:
340
rpx
;
margin
:
30
rpx
auto
;
display
:
block
;
}
.collapseBody
.billCode
image
{
width
:
340
rpx
;
height
:
340
rpx
;
margin
:
30
rpx
auto
;
display
:
block
;
}
.billFoot
.status.textherf
{
color
:
#888
;
font-size
:
28
rpx
;
text-decoration
:
underline
;
}
.collapseBody
.billFoot
{
margin
:
20
rpx
0
0
;
padding
:
22
rpx
0
;
}
.billSon
{
padding
:
0
35
rpx
;
border-top
:
1px
dashed
#e1e1e1
;
border-bottom
:
1px
dashed
#e1e1e1
;
}
.billItem
.billSonItem
{}
.billSonItem
.pp
{
padding
:
15
rpx
0
;
overflow
:
hidden
;
}
.collapseBody
.pp
{
padding
:
15
rpx
0
;
overflow
:
hidden
;
}
.billSonItem
.pp
text
{
float
:
right
;
}
.collapseBody
.pp
text
{
float
:
right
;
}
.billItem
.ttt
{
font-size
:
28
rpx
;
padding
:
0
35
rpx
;
color
:
#000
;
}
.fixedBBB
{
background
:
#fff
;
width
:
100%
;
position
:
fixed
;
height
:
120
rpx
;
bottom
:
0
;
left
:
0
;
}
.codeChecked
{
position
:
absolute
;
width
:
200
rpx
;
height
:
130
rpx
;
right
:
15%
;
top
:
30%
;
}
.billItem
view
text
.price
{
color
:
#ff8124
;
font-weight
:
bold
;}
.bold
{
font-weight
:
500
;
font-size
:
28
rpx
;}
.ccc
{
color
:
#666
;
font-size
:
28
rpx
;}
.ddd
{
color
:
#666
;
font-size
:
28
rpx
;
margin
:
0
10
rpx
;}
.billFoot
text
.danger
{
color
:
#da2a2a
;}
.billItem
view
text
{
white-space
:
nowrap
;}
</
style
>
...
...
pages/usercenter/myInfo.vue
View file @
32172fb
<
template
>
<view
class=
"fixedbody"
>
<uni-forms
ref=
"baseForm"
:modelValue=
"baseFormData"
:rules=
"rules"
label-width=
"80"
>
<uni-group
mode=
"card"
title=
"个人信息"
top=
"20"
>
<view
class=
"wBox"
>
<uni-forms-item
label=
"照片"
required
name=
"picUrl"
>
<view
class=
"avatarUrl"
>
<button
type=
"balanced"
open-type=
"chooseAvatar"
@
chooseavatar=
"onChooseavatar"
>
<image
mode=
"aspectFill"
:src=
"baseFormData.picUrl"
class=
"refreshIcon"
></image>
</button>
</view>
</uni-forms-item>
<uni-forms-item
label=
"姓名"
required
name=
"realName"
>
<uni-easyinput
v-model=
"baseFormData.realName"
placeholder=
"请输入姓名"
/>
</uni-forms-item>
<!--
<uni-forms-item
label=
"身份标签"
required
>
<uni-data-checkbox
v-model=
"baseFormData.label"
multiple
:localdata=
"tagList"
/>
</uni-forms-item>
-->
<uni-forms-item
label=
"证件类型"
required
name=
"idcType"
>
<uni-data-select
v-model=
"baseFormData.idcType"
:localdata=
"idcTypeList"
@
change=
"changeidcType"
></uni-data-select>
</uni-forms-item>
<uni-forms-item
label=
"证件号码"
required
name=
"idcCode"
>
<uni-easyinput
v-model=
"baseFormData.idcCode"
@
blur=
"giveBirthDay"
/>
</uni-forms-item>
<uni-forms-item
label=
"性别"
required
name=
"sex"
>
<uni-data-checkbox
v-model=
"baseFormData.sex"
@
change=
"changeSex"
:localdata=
"sexs"
/>
</uni-forms-item>
<uni-forms-item
label=
"出生日期"
required
name=
"birth"
>
<uni-datetime-picker
type=
"date"
:clear-icon=
"false"
v-model=
"baseFormData.birth"
@
maskClick=
"maskClick"
/>
</uni-forms-item>
<uni-forms-item
label=
"联系方式"
name=
"phone"
>
<uni-easyinput
v-model=
"baseFormData.phone"
placeholder=
"请输入联系方式"
/>
</uni-forms-item>
<uni-forms-item
label=
"国籍"
required
name=
"countryId"
>
<uni-data-select
v-model=
"baseFormData.countryId"
:localdata=
"countryList"
@
change=
"changeCountry"
></uni-data-select>
</uni-forms-item>
<uni-forms-item
label=
"民族"
required
name=
"nation"
>
<uni-data-select
v-model=
"baseFormData.nation"
:localdata=
"nationList"
></uni-data-select>
</uni-forms-item>
<uni-forms-item
label=
"所在地区"
>
<uni-data-picker
class=
"fixUniFormItemStyle"
v-model=
"baseFormData.regionId"
:localdata=
"regionsList"
popup-title=
"请选择所在地区"
></uni-data-picker>
</uni-forms-item>
<uni-forms-item
label=
"详细地址"
><uni-easyinput
v-model=
"baseFormData.address"
placeholder=
"请输入详细地址"
/></uni-forms-item>
<uni-forms-item
label=
"紧急联系人"
><uni-easyinput
v-model=
"baseFormData.ecName"
placeholder=
"请输入联系人"
/></uni-forms-item>
<uni-forms-item
label=
"紧急联系方式"
><uni-easyinput
v-model=
"baseFormData.ecPhone"
type=
"number"
placeholder=
"请输入联系方式"
/></uni-forms-item>
<uni-forms-item
label=
"与本人关系"
><uni-easyinput
v-model=
"baseFormData.ecRelationship"
placeholder=
"请输入与本人关系"
/></uni-forms-item>
<view
class=
"gapTitle"
style=
"padding: 0; margin: 0 0 10rpx;"
>
实名认证
<text>
正面为国徽面 反面为头像面
</text>
</view>
<view
class=
"ttt"
>
头像面
<text>
请拍摄完整身份证
</text>
</view>
<view
class=
"idImgUrl"
>
<uni-file-picker
v-model=
"baseFormData.idcFrontImgObj"
@
delete=
"delimgFont"
return-type=
"object"
limit=
"1"
@
select=
"upIdCardImgFront"
:image-styles=
"imageStyles"
></uni-file-picker>
</view>
<view
class=
"ttt"
>
国徽面
<text>
请拍摄完整身份证
</text>
</view>
<view
class=
"idImgUrl"
>
<uni-file-picker
limit=
"1"
v-model=
"baseFormData.idcBackImgObj"
@
delete=
"delimgBack"
return-type=
"object"
@
select=
"upIdCardImgBack"
:image-styles=
"imageStyles"
></uni-file-picker>
</view>
</view>
</uni-group>
<uni-group
mode=
"card"
title=
"所属团体信息"
top=
"20"
>
<view
class=
"wBox"
>
<!--
<button
class=
"poKxBtn"
type=
"primary"
plain=
"true"
>
+加入机构
</button>
-->
<view
class=
"matchItem"
v-for=
"(g,index) in groupList"
:key=
"index"
>
<view
class=
"leftImg"
>
<image
class=
"roundImg"
:src=
"g.imgUrl"
mode=
"aspectFill"
></image>
</view>
<view
class=
"rightWen"
>
<view
class=
"name"
>
{{
g
.
name
}}
</view>
<view
class=
"pp"
>
地区:
<uni-data-picker
readonly
v-if=
"g.regionId"
:clear-icon=
'false'
v-model=
"g.regionId"
:localdata=
"regionsList"
></uni-data-picker>
<text
v-else
>
暂无
</text>
</view>
<view
class=
"pp"
>
类型:
<text
v-if=
"g.type==0"
>
学校
</text>
<text
v-if=
"g.type==1"
>
场馆
</text>
<text
v-if=
"g.type==2"
>
俱乐部
</text>
<text
v-if=
"g.type==3"
>
机构
</text>
</view>
</view>
<view
class=
"bottomFunc"
>
<view
class=
"textButtom"
@
click=
"exitGroup(g)"
>
退出参赛队
</view>
</view>
</view>
<view
class=
"nodata"
v-if=
"groupList.length==0"
>
<image
mode=
"aspectFit"
src=
"/static/nodata.png"
></image>
</view>
</view>
</uni-group>
<uni-group
mode=
"card"
title=
"人员管理"
top=
"20"
style=
"display: none;"
>
<view
class=
"wBox"
>
<button
class=
"poKxBtn"
type=
"primary"
plain=
"true"
@
click=
"goEditCoach(0,0)"
>
+添加人员
</button>
<uni-segmented-control
:current=
"current"
:values=
"kindList"
@
clickItem=
"onClickItem"
styleType=
"button"
activeColor=
"#39DBA7"
></uni-segmented-control>
<view
class=
"matchItem"
v-for=
"p in memberList"
:key=
"p.id"
>
<view
class=
"leftImg"
>
<image
class=
"roundImg"
:src=
"p.picUrl"
mode=
"aspectFill"
></image>
</view>
<view
class=
"rightWen"
>
<view
class=
"name"
>
{{
p
.
realName
}}
<view
class=
"tag-view"
v-for=
"(l,index) in p.labelArr"
:key=
"index"
>
<uni-tag
v-if=
"l == '2'"
:inverted=
"true"
text=
"领队"
type=
"warning"
/>
<uni-tag
:inverted=
"true"
v-if=
"l == '1'"
text=
"教练"
type=
"primary"
/>
<uni-tag
:inverted=
"true"
v-if=
"l == '0'"
text=
"运动员"
type=
"success"
/>
<uni-tag
:inverted=
"true"
v-if=
"l == '3'"
text=
"其他"
type=
"error"
/>
</view>
</view>
<view
class=
"pp"
>
证件类型:
<text
v-if=
"p.idcType == 0"
>
身份证
</text>
<text
v-else-if=
"p.idcType == 1"
>
护照
</text>
<text
v-else
>
其他
</text>
</view>
<view
class=
"pp"
>
证件号:
{{
p
.
idcCode
}}
</view>
<view
class=
"pp"
>
联系方式:
{{
p
.
phone
}}
</view>
</view>
<view
class=
"bottomFunc"
>
<view
class=
"textButtom"
@
click=
"goEditCoach(p.id, groupId)"
>
编辑
</view>
<text
class=
"greenline"
>
|
</text>
<view
class=
"textButtom"
@
click=
"del(p)"
>
删除
</view>
</view>
</view>
<view
class=
"nodata"
v-if=
"memberList.length==0"
>
<image
mode=
"aspectFit"
src=
"/static/nodata.png"
></image>
</view>
</view>
</uni-group>
</uni-forms>
<view
class=
"fixedBottom"
><button
class=
"btn btn1"
@
click=
"goNext"
type=
"default"
>
保存
</button></view>
</view>
</
template
>
<
script
setup
>
import
{
ref
}
from
'vue'
;
import
{
onLoad
,
onShow
,
onPullDownRefresh
}
from
'@dcloudio/uni-app'
import
*
as
match
from
'@/common/match.js'
import
{
tagList
,
sexs
,
idcTypeList
,
nationList
}
from
'@/static/js/data'
const
baseFormData
=
ref
({
countryId
:
240
});
const
rules
=
ref
({
realName
:{
rules
:[{
required
:
true
,
errorMessage
:
'请填写真实姓名'
}]
}
});
const
imageStyles
=
ref
({
width
:
'500rpx'
,
height
:
'300rpx'
,
border
:{
radius
:
'2px'
}
});
const
countryList
=
ref
([]);
const
regionsList
=
ref
([]);
const
groupList
=
ref
([]);
const
memberList
=
ref
([]);
const
current
=
ref
(
0
);
const
kindList
=
ref
([
'教练'
,
'领队'
,
'其他'
]);
onLoad
(()
=>
{
getCountryList
()
getRegionsList
()
})
onShow
(()
=>
{
getData
()
})
onPullDownRefresh
(()
=>
{
getData
()
})
function
getCountryList
(){
match
.
countryList
().
then
(
res
=>
{
countryList
.
value
=
res
.
data
for
(
const
c
of
countryList
.
value
){
c
.
value
=
c
.
id
c
.
text
=
c
.
name
}
})
}
function
getRegionsList
()
{
match
.
regionsList
().
then
(
res
=>
{
regionsList
.
value
=
res
.
data
});
}
function
getData
(){
match
.
getMyPersonInfo
().
then
(
res
=>
{
baseFormData
.
value
=
res
.
data
groupList
.
value
=
baseFormData
.
value
.
groups
||
[]
current
.
value
=
0
memberList
.
value
=
baseFormData
.
value
.
coaches
||
[]
if
(
baseFormData
.
value
.
idcFrontImg
){
baseFormData
.
value
.
idcFrontImgObj
=
{
name
:
"正面"
,
extname
:
"jpg"
,
url
:
baseFormData
.
value
.
idcFrontImg
,
}
}
if
(
baseFormData
.
value
.
idcBackImg
){
baseFormData
.
value
.
idcBackImgObj
=
{
name
:
"反面"
,
extname
:
"jpg"
,
url
:
baseFormData
.
value
.
idcBackImg
,
}
}
getLabel
(
memberList
.
value
);
})
}
function
giveBirthDay
(){
// 判断身份证正确性/赋值生日
if
(
baseFormData
.
value
.
idcType
==
0
){
if
(
!
(
/
(
^
\d{15}
$
)
|
(
^
\d{17}([
0-9
]
|X
)
$
)
/
.
test
(
baseFormData
.
value
.
idcCode
))){
uni
.
showToast
({
title
:
'请输入正确的身份证号码'
,
duration
:
2000
,
icon
:
'none'
})
}
else
{
let
tmpStr
=
""
;
if
(
baseFormData
.
value
.
idcCode
.
length
==
15
)
{
tmpStr
=
baseFormData
.
value
.
idcCode
.
substring
(
6
,
12
);
tmpStr
=
"19"
+
tmpStr
;
tmpStr
=
tmpStr
.
substring
(
0
,
4
)
+
"-"
+
tmpStr
.
substring
(
4
,
6
)
+
"-"
+
tmpStr
.
substring
(
6
)
}
else
{
tmpStr
=
baseFormData
.
value
.
idcCode
.
substring
(
6
,
14
);
tmpStr
=
tmpStr
.
substring
(
0
,
4
)
+
"-"
+
tmpStr
.
substring
(
4
,
6
)
+
"-"
+
tmpStr
.
substring
(
6
)
}
baseFormData
.
value
.
birth
=
tmpStr
const
res
=
/^
(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([
0-9
]
|X
)
$/
if
(
baseFormData
.
value
.
idcCode
&&
res
.
test
(
baseFormData
.
value
.
idcCode
))
{
const
genderCode
=
baseFormData
.
value
.
idcCode
.
charAt
(
16
)
if
(
parseInt
(
genderCode
)
%
2
==
0
)
{
baseFormData
.
value
.
sex
=
'0'
}
else
{
baseFormData
.
value
.
sex
=
'1'
}
}
}
}
}
function
goNext
()
{
// 验证手机号
// var pattern = /^1[345789]\d{9}$/;
// if (!pattern.test(baseFormData.value.phone)) {
// uni.showToast({
// title: '请输入正确的手机号',
// duration: 2000,
// icon: 'none'
// })
// return
// }
// 验证身份证号
if
(
baseFormData
.
value
.
idcType
==
0
&&!
(
/
(
^
\d{15}
$
)
|
(
^
\d{17}([
0-9
]
|X
)
$
)
/
.
test
(
baseFormData
.
value
.
idcCode
))){
uni
.
showToast
({
title
:
'请输入正确的身份证号码'
,
duration
:
2000
,
icon
:
'none'
})
return
}
if
(
baseFormData
.
value
.
nation
==
null
)
{
uni
.
showToast
({
title
:
'请填写民族'
,
duration
:
2000
,
icon
:
'none'
})
return
}
match
.
saveMyBaseInfo
(
baseFormData
.
value
).
then
(
res
=>
{
uni
.
showToast
({
title
:
'保存成功'
,
duration
:
2000
});
})
}
function
onChooseavatar
(
e
)
{
match
.
uploadFile
(
e
).
then
(
data
=>
{
baseFormData
.
value
.
picUrl
=
data
.
data
})
}
function
upIdCardImgFront
(
e
)
{
match
.
uploadImg
(
e
).
then
(
data
=>
{
baseFormData
.
value
.
idcFrontImg
=
data
.
data
;
});
}
function
upIdCardImgBack
(
e
)
{
match
.
uploadImg
(
e
).
then
(
data
=>
{
baseFormData
.
value
.
idcFrontImg
=
data
.
data
;
});
}
function
delimgFont
(
n
){
baseFormData
.
value
.
idcFrontImg
=
''
;
}
function
delimgBack
(
n
){
baseFormData
.
value
.
idcBackImg
=
''
;
}
function
getLabel
(
list
)
{
if
(
list
.
length
>
0
)
{
for
(
const
m
of
list
)
{
m
.
labelArr
=
m
.
label
.
split
(
','
);
}
}
}
function
onClickItem
(
e
)
{
console
.
log
(
current
.
value
);
if
(
current
.
value
!=
e
.
currentIndex
)
{
current
.
value
=
e
.
currentIndex
;
switch
(
current
.
value
)
{
case
0
:
{
memberList
.
value
=
baseFormData
.
value
.
coaches
;
getLabel
(
memberList
.
value
);
break
;
}
case
1
:
{
memberList
.
value
=
baseFormData
.
value
.
leaders
;
getLabel
(
memberList
.
value
);
break
;
}
case
2
:
{
memberList
.
value
=
baseFormData
.
value
.
others
;
getLabel
(
memberList
.
value
);
break
;
}
}
}
}
function
maskClick
(
e
){
console
.
log
(
'maskClick事件:'
,
e
);
}
function
changeSex
(
e
){
console
.
log
(
"性别:"
,
e
.
detail
.
value
)
}
function
changeCountry
(
e
){
console
.
log
(
e
);
if
(
e
!=
240
)
{
baseFormData
.
value
.
nation
=
'其他'
}
}
function
changeidcType
(
e
){
console
.
log
(
"证件:"
,
e
)
if
(
e
){
baseFormData
.
value
.
idcTypeStr
=
idcTypeList
[
e
].
text
}
}
function
exitGroup
(
g
){
uni
.
showModal
({
title
:
'提示'
,
content
:
`确定退出
${
g
.
name
}
吗?`
,
success
:
function
(
res
)
{
if
(
res
.
confirm
)
{
match
.
leaveGroup
(
g
.
id
).
then
(
response
=>
{
uni
.
showToast
({
title
:
'已退出'
,
duration
:
2000
});
})
}
else
if
(
res
.
cancel
)
{
console
.
log
(
'用户点击取消'
);
}
}
});
}
function
goEditCoach
(
id
,
groupId
)
{
uni
.
navigateTo
({
url
:
`/pages_match/match/add_coach?id=
${
id
||
0
}
&groupId=
${
groupId
||
0
}
`
});
}
function
del
(
p
){
uni
.
showModal
({
title
:
'提示'
,
content
:
`确定删除
${
p
.
realName
}
吗?`
,
success
:
function
(
res
)
{
if
(
res
.
confirm
)
{
match
.
delPerson
(
p
.
id
).
then
(
response
=>
{
uni
.
showToast
({
title
:
'已删除'
,
duration
:
2000
});
getData
()
})
}
else
if
(
res
.
cancel
)
{
console
.
log
(
'用户点击取消'
);
}
}
});
}
</
script
>
<
style
scope
lang=
"scss"
>
.wBox
{
position
:
relative
;
...
...
pages/usercenter/teamList.vue
View file @
32172fb
<
template
>
<view
class=
"fixedbody"
>
<uni-group
mode=
"card"
title=
"我的参赛队"
top=
"20"
>
<view
class=
"wBox"
>
<button
class=
"poKxBtn"
type=
"primary"
plain=
"true"
@
click=
"newGroup"
>
+新建参赛队
</button>
<view
class=
"matchItem"
v-for=
"(g,index) in dataList"
:key=
"index"
>
<view
class=
"leftImg"
>
<image
:src=
"g.imgUrl"
mode=
"aspectFill"
></image>
</view>
<view
class=
"rightWen"
>
<view
class=
"name"
>
{{
g
.
name
}}
</view>
<view
class=
"pp"
>
地区:
{{
g
.
regionStr
}}
</view>
<view
class=
"pp"
>
类型:
{{
g
.
typeStr
}}
</view>
</view>
<view
class=
"bottomFunc"
>
<view
class=
"textButtom"
@
click=
"view(g)"
>
查看
</view>
<text
class=
"greenline"
>
|
</text>
<view
class=
"textButtom"
@
click=
"del(g)"
>
删除
</view>
</view>
</view>
<view
class=
"nodata"
v-if=
"dataList.length==0"
>
<image
mode=
"aspectFit"
src=
"/static/nodata.png"
></image>
<text>
还没有参赛队,点击新建参赛队立即创建吧~
</text>
</view>
</view>
</uni-group>
</view>
</
template
>
<
script
setup
>
import
{
ref
}
from
'vue'
;
import
*
as
match
from
'@/common/match.js'
import
{
onShow
}
from
'@dcloudio/uni-app'
const
baseFormData
=
ref
({});
const
dataList
=
ref
([]);
const
memberList
=
ref
([{
id
:
1
},{
id
:
2
}]);
const
avatarUrl
=
ref
(
''
);
const
kindList
=
ref
([
'全部'
,
'运动员'
,
'教练'
,
'领队'
,
'其他'
]);
const
tagList
=
ref
([{
text
:
'运动员'
,
value
:
0
},{
text
:
'教练'
,
value
:
1
},{
text
:
'领队'
,
value
:
2
},{
text
:
'其他'
,
value
:
3
},]);
const
typeList
=
ref
([{
text
:
'学校'
,
value
:
0
},
{
text
:
'场馆'
,
value
:
1
},
{
text
:
'俱乐部'
,
value
:
2
},
{
text
:
'机构'
,
value
:
3
}]);
const
regionsList
=
ref
([]);
const
current
=
ref
(
0
);
const
editIng
=
ref
(
false
);
const
showEditForm
=
ref
(
false
);
const
query
=
ref
({
type
:
0
})
onShow
(()
=>
{
getRegionsList
()
getList
()
})
function
getList
(){
match
.
getMyGroupList
(
query
).
then
(
res
=>
{
dataList
.
value
=
res
.
data
})
}
function
newGroup
()
{
uni
.
navigateTo
({
url
:
`/pages/usercenter/teamInfo`
});
}
function
getRegionsList
(){
match
.
regionsList
().
then
(
res
=>
{
regionsList
.
value
=
res
.
data
})
}
function
onchange
(){
}
function
onnodeclick
(){
}
function
onClickItem
(
e
){
console
.
log
(
current
.
value
)
if
(
current
.
value
!=
e
.
currentIndex
)
{
current
.
value
=
e
.
currentIndex
;
}
}
function
goNext
()
{
baseFormData
.
value
.
src
=
avatarUrl
.
value
}
function
onChooseavatar
(
e
)
{
if
(
editIng
.
value
){
match
.
uploadFile
(
e
).
then
(
data
=>
{
avatarUrl
.
value
=
data
.
data
})
}
else
{
return
}
}
function
editTeamInfo
(){
editIng
.
value
=
true
}
function
goChooseCoach
(
n
){
uni
.
navigateTo
({
url
:
`/pages_match/match/choose_coach?id=
${
n
||
0
}
`
});
}
function
goEditCoach
(
n
){
uni
.
navigateTo
({
url
:
`/pages_match/match/add_coach?id=
${
n
||
0
}
`
});
}
function
view
(
g
){
uni
.
navigateTo
({
url
:
`/pages/usercenter/teamInfo?groupId=
${
g
.
id
}
`
});
}
function
del
(
g
){
// 删除团
uni
.
showModal
({
title
:
'提示'
,
content
:
'确定删除吗'
,
success
:
function
(
res
)
{
if
(
res
.
confirm
)
{
match
.
deleteMyGroup
(
g
.
id
).
then
(
res
=>
{
uni
.
showToast
({
icon
:
'none'
,
title
:
res
.
msg
})
getList
()
})
}
else
if
(
res
.
cancel
)
{
console
.
log
(
'用户点击取消'
);
}
}
});
}
function
saveMyteam
()
{
match
.
saveMyGroup
(
baseFormData
.
value
).
then
(
res
=>
{
uni
.
showToast
({
title
:
'保存成功'
,
duration
:
2000
});
editIng
.
value
=
false
})
}
</
script
>
<
style
scope
lang=
"scss"
>
.wBox
{
position
:
relative
;
background
:
#ffffff
;
border-radius
:
15px
;
box-sizing
:
border-box
;}
.avatarUrl
{
width
:
200
rpx
;
height
:
200
rpx
;}
...
...
pages/usercenter/usercenter.vue
View file @
32172fb
<
template
>
<view
class=
"box"
>
<view
class=
"topBg"
>
<image
src=
"/static/bg.png"
class=
"topbgimg"
></image>
<!-- @click="auth" -->
<view
class=
"userInfoBox"
>
<view
class=
"headImg"
>
<button
type=
"balanced"
open-type=
"chooseAvatar"
@
chooseavatar=
"onChooseavatar"
>
<image
mode=
"aspectFill"
:src=
"avatarUrl"
></image>
</button>
</view>
<view
class=
"nameBox"
>
<!--
<input
v-model=
"user.nickName"
type=
"nickname"
/>
-->
{{
user
.
nickName
}}
<view
@
click=
"changePhoneNumber"
>
{{
user
.
phonenumber
}}
</view>
</view>
</view>
<!-- 会员卡 -->
<view
class=
"vipBox"
v-if=
"!isMaster && card.isVip"
>
<image
class=
"fm"
:src=
"vTypeImg"
></image>
<image
class=
"vv"
src=
"/static/vip.png"
></image>
<view
class=
"poInfo"
@
click=
"goCard"
>
<view
class=
"flexline"
>
<view
class=
"typeStr"
>
{{
card
.
info
.
cardTypeStr
}}
</view>
<view
class=
"cardCode"
>
{{
card
.
info
.
cardCode
}}
</view>
</view>
<view
class=
"flexline mt40"
>
<view
class=
"ye"
>
余额(元)
<text>
{{
card
.
info
.
balance
}}
</text>
</view>
<view
class=
"zk"
>
折扣
<view>
<text>
{{
(
100
-
card
.
info
.
discountPercent
)
/
10
}}
</text>
折
</view>
</view>
</view>
</view>
<view
class=
"cardBottom"
>
<text>
有效期至
{{
card
.
info
?.
expirationTime
}}
</text>
<text
class=
"renewBtn"
@
click=
"goRenew"
>
立即续费
</text>
</view>
</view>
</view>
<view
class=
"rMainBox"
v-if=
"!isMaster"
>
<uni-list
:border=
"false"
class=
"myList"
>
<uni-list-item
:border=
"false"
title=
"个人信息"
showArrow
:to=
"`./myInfo`"
>
<template
v-slot:header
>
<view
class=
"slot-box"
>
<image
class=
"slot-image"
src=
"/static/user_icon03.png"
mode=
"widthFix"
></image>
</view>
</
template
>
</uni-list-item>
<uni-list-item
:border=
"false"
title=
"参赛队信息"
showArrow
:to=
"`./teamList`"
>
<
template
v-slot:header
>
<view
class=
"slot-box"
>
<image
class=
"slot-image"
src=
"/static/user_icon06.png"
mode=
"widthFix"
></image>
</view>
</
template
>
</uni-list-item>
<uni-list-item
:border=
"false"
title=
"会员充值"
showArrow
:to=
"`./mycard/renew`"
>
<
template
v-slot:header
>
<view
class=
"slot-box"
>
<image
class=
"slot-image"
src=
"/static/user_icon01.png"
mode=
"widthFix"
></image>
</view>
</
template
>
</uni-list-item>
<uni-list-item
:border=
"false"
title=
"场地订单"
showArrow
:to=
"`./bills`"
>
<
template
v-slot:header
>
<view
class=
"slot-box"
>
<image
class=
"slot-image"
src=
"/static/user_icon02.png"
mode=
"widthFix"
></image>
</view>
</
template
>
</uni-list-item>
<uni-list-item
:border=
"false"
title=
"我的培训"
showArrow
clickable
@
click=
"myTrain"
>
<
template
v-slot:header
>
<view
class=
"slot-box"
>
<image
class=
"slot-image"
src=
"/static/user_icon07.png"
mode=
"widthFix"
></image>
</view>
</
template
>
</uni-list-item>
<uni-list-item
:border=
"false"
title=
"我的赛事"
showArrow
:to=
"`./match`"
>
<
template
v-slot:header
>
<view
class=
"slot-box"
>
<image
class=
"slot-image"
src=
"/static/user_icon04.png"
mode=
"widthFix"
></image>
</view>
</
template
>
</uni-list-item>
</uni-list>
</view>
<!-- 场馆人员 -->
<view
class=
"forAdmin"
v-if=
"isMaster"
>
<!-- <view class="forAdmin"> -->
<view
class=
"onlyCardBottom"
>
<image
src=
"/static/xf_bg.png"
class=
"bbg"
></image>
<view
class=
"cardBottom"
>
<text>
有效期至{{ card.info?.expirationTime }}
</text>
<text
class=
"renewBtn"
@
click=
"goRenew"
>
立即续费
</text>
</view>
</view>
<view
class=
"funcBar"
>
<!-- <view @click="goOrder"> -->
<view
@
click=
"goBills"
>
<image
mode=
"aspectFit"
src=
"/static/icon01.png"
></image>
预订
</view>
<view
@
click=
"goVip"
>
<image
mode=
"aspectFit"
src=
"/static/icon02.png"
></image>
会员
</view>
<view
@
click=
"goQcode"
>
<image
mode=
"aspectFit"
src=
"/static/icon03.png"
></image>
核验
</view>
</view>
<view
class=
"mt40"
>
<uni-list
:border=
"false"
class=
"myList"
>
<uni-list-item
:border=
"false"
title=
"个人信息"
showArrow
:to=
"`./myInfo`"
>
<
template
v-slot:header
>
<view
class=
"slot-box"
>
<image
class=
"slot-image"
src=
"/static/user_icon03.png"
mode=
"widthFix"
></image>
</view>
</
template
>
</uni-list-item>
<uni-list-item
:border=
"false"
title=
"团体信息"
showArrow
:to=
"`./teamList`"
>
<
template
v-slot:header
>
<view
class=
"slot-box"
>
<image
class=
"slot-image"
src=
"/static/user_icon06.png"
mode=
"widthFix"
></image>
</view>
</
template
>
</uni-list-item>
<uni-list-item
:border=
"false"
title=
"培训报名"
showArrow
clickable
@
click=
"myTrain"
>
<
template
v-slot:header
>
<view
class=
"slot-box"
>
<image
class=
"slot-image"
src=
"/static/user_icon07.png"
mode=
"widthFix"
></image>
</view>
</
template
>
</uni-list-item>
<uni-list-item
:border=
"false"
title=
"我的赛事"
showArrow
:to=
"`./match`"
>
<
template
v-slot:header
>
<view
class=
"slot-box"
>
<image
class=
"slot-image"
src=
"/static/user_icon04.png"
mode=
"widthFix"
></image>
</view>
</
template
>
</uni-list-item>
</uni-list>
</view>
<view
class=
"reportItembox"
>
<view
class=
"reportItem"
>
<view
class=
"t"
>
今日预订
</view>
<view
class=
"rbody"
>
<view>
<text>
{{ reportData.bookCount }}
</text>
订场
</view>
<view>
<text>
{{ reportData.bookAmount }}
</text>
金额
</view>
</view>
</view>
<view
class=
"reportItem"
>
<view
class=
"t"
>
商品销售
</view>
<view
class=
"rbody"
>
<view>
<text>
--
</text>
单
</view>
<view>
<text>
--
</text>
金额
</view>
</view>
</view>
<view
class=
"reportItem"
>
<view
class=
"t"
>
今日会员
</view>
<view
class=
"rbody"
>
<view>
<text>
{{ reportData.memberCount }}
</text>
新增
</view>
<view>
<text>
{{ reportData.memberAmout }}
</text>
金额
</view>
</view>
</view>
<view
class=
"reportItem"
>
<view
class=
"t"
>
今日签到
</view>
<view
class=
"rbody"
>
<view>
<text>
--
</text>
人数
</view>
<view>
<text>
--
</text>
金额
</view>
</view>
</view>
</view>
</view>
<uni-popup
ref=
"inputDialog"
type=
"dialog"
>
<uni-popup-dialog
ref=
"inputClose"
mode=
"input"
title=
"修改会员卡绑定手机号"
@
confirm=
"dialogInputConfirm"
>
<view
class=
"changephonepop"
>
<view><input
placeholder=
"请输入手机号"
type=
"number"
v-model=
"captchaPhonenumber"
/></view>
<view
class=
"ffff"
>
<input
placeholder=
"输入验证码"
type=
"number"
v-model=
"captcha"
/>
<button
v-if=
"canSend"
@
click=
"sendsms"
>
发送验证码
</button>
<button
v-else
disabled
style=
"back"
>
<uni-countdown
style=
"display: inline-block;"
:start=
"start"
:font-size=
"14"
:show-day=
"false"
:show-hour=
"false"
:show-min=
"false"
color=
"#FFFFFF"
splitorColor=
"#fff"
:minute=
"1"
:second=
"0"
@
timeup=
"timeup"
/>
</button>
</view>
</view>
</uni-popup-dialog>
</uni-popup>
</view>
</
template
>
<
script
setup
>
import
*
as
api
from
'@/common/api.js'
;
import
{
ref
}
from
'vue'
;
import
{
onLoad
,
onShow
,
onPullDownRefresh
}
from
'@dcloudio/uni-app'
;
const
vTypeImg
=
ref
(
'/static/v1.png'
);
const
card
=
ref
({});
const
reportData
=
ref
({});
const
user
=
ref
({});
const
userImg
=
ref
(
''
);
const
avatarUrl
=
ref
(
''
);
const
captchaPhonenumber
=
ref
(
''
);
const
captcha
=
ref
(
''
);
const
inputDialog
=
ref
(
null
);
const
start
=
ref
(
false
);
const
canSend
=
ref
(
true
);
const
app
=
getApp
();
const
isMaster
=
ref
(
false
);
onPullDownRefresh
(()
=>
{
getVip
();
});
onShow
(()
=>
{
if
(
app
.
globalData
.
isLogin
)
{
init
();
getVip
();
}
else
{
app
.
firstLoadCallback
=
()
=>
{
init
();
getVip
();
};
}
});
function
init
()
{
const
currUser
=
uni
.
getStorageSync
(
'currUser'
);
user
.
value
=
currUser
;
if
(
user
.
value
.
manageFlag
==
'1'
&&
app
.
globalData
.
venue
.
id
==
user
.
value
.
venueId
)
{
isMaster
.
value
=
true
;
}
avatarUrl
.
value
=
user
.
value
.
avatar
;
}
function
getVip
()
{
getMemberInfo
();
if
(
isMaster
.
value
)
{
api
.
getMaInfo
().
then
(
res
=>
{
reportData
.
value
=
res
.
data
;
});
}
}
function
goBack
()
{
uni
.
navigateBack
({});
}
function
onChooseavatar
(
e
)
{
// 上传头像
match
.
uploadFile
(
e
).
then
(
data
=>
{
avatarUrl
.
value
=
data
.
data
;
match
.
updateAvatar
({
avatarUrl
:
avatarUrl
.
value
}).
then
(
res
=>
{
uni
.
showToast
({
title
:
'头像保存成功'
,
icon
:
'none'
,
duration
:
2000
});
uni
.
setStorageSync
(
'currUser'
,
res
.
data
);
});
});
}
function
changePhoneNumber
()
{
inputDialog
.
value
.
open
();
}
function
dialogInputConfirm
()
{
// 修改手机号
const
currUser
=
uni
.
getStorageSync
(
'currUser'
);
api
.
maRebindMemberCard
(
captchaPhonenumber
.
value
,
captcha
.
value
).
then
(
res
=>
{
uni
.
showToast
({
title
:
res
.
msg
,
icon
:
'none'
,
duration
:
2000
});
captcha
.
value
=
''
;
getMemberInfo
();
});
}
function
goRenew
()
{
let
path
=
'/pages/usercenter/mycard/renew'
;
uni
.
navigateTo
({
url
:
path
});
}
function
goCard
()
{
let
path
=
'/pages/usercenter/mycard/mycard'
;
uni
.
navigateTo
({
url
:
path
});
}
function
goOrder
()
{
let
path
=
'/pages/index/order'
;
uni
.
navigateTo
({
url
:
path
});
}
function
goBills
()
{
let
path
=
'/pages/usercenter/bills'
;
uni
.
navigateTo
({
url
:
path
});
}
function
goVip
()
{
let
path
=
'/pages/usercenter/mycard/mycard'
;
uni
.
navigateTo
({
url
:
path
});
}
function
goQcode
()
{
uni
.
scanCode
({
onlyFromCamera
:
true
,
success
:
function
(
res
)
{
console
.
log
(
'条码类型:'
+
res
.
scanType
);
console
.
log
(
'条码内容:'
+
res
.
result
);
api
.
scanQrCode
(
res
.
result
).
then
(
res
=>
{
uni
.
showModal
({
title
:
'提示'
,
content
:
res
.
msg
,
success
:
function
(
res
)
{
if
(
res
.
confirm
)
{
console
.
log
(
'确定'
);
}
else
if
(
res
.
cancel
)
{
console
.
log
(
'取消'
);
}
}
});
});
}
});
}
function
building
()
{
uni
.
showToast
({
title
:
'暂未开放,敬请期待。'
,
icon
:
'none'
,
duration
:
2000
});
}
function
myTrain
()
{
let
path
=
'/pages/usercenter/myTrain/index/index'
;
uni
.
navigateTo
({
url
:
path
});
}
function
timeup
()
{
canSend
.
value
=
true
;
}
function
sendsms
()
{
//发送验证码
if
(
captchaPhonenumber
.
value
)
{
let
strTemp
=
/^1
[
3|4|5|6|7|8|9
][
0-9
]{9}
$/
;
if
(
strTemp
.
test
(
captchaPhonenumber
.
value
))
{
api
.
getCaptchaSms
({
phonenumber
:
captchaPhonenumber
.
value
}).
then
(
res
=>
{
uni
.
showToast
({
title
:
res
.
msg
,
icon
:
'none'
,
duration
:
2000
});
start
.
value
=
true
;
canSend
.
value
=
false
;
});
}
else
{
uni
.
showToast
({
title
:
'请输入正确的手机号'
,
icon
:
'none'
,
duration
:
2000
});
}
}
else
{
uni
.
showToast
({
title
:
'请输入手机号'
,
icon
:
'none'
,
duration
:
2000
});
}
}
</
script
>
<
style
scoped
lang=
"scss"
>
.box
{
width
:
100vw
;
overflow
:
hidden
;
}
.rMainBox
{
box-sizing
:
border-box
;
padding
:
20
rpx
25
rpx
0
;
margin
:
25
rpx
;
}
.userInfoBox
{
height
:
200
rpx
;
}
.nameBox
{
position
:
absolute
;
left
:
180
rpx
;
top
:
70
rpx
;
font-size
:
30
rpx
;
}
.nameBox
view
{
color
:
#7b7f83
;
font-size
:
26
rpx
;
margin-top
:
10
rpx
;
}
.goback
{
position
:
absolute
;
color
:
#fff
;
top
:
100
rpx
;
left
:
35
rpx
;
}
.forAdmin
{
padding
:
25
rpx
;
box-sizing
:
border-box
;
}
.topBg
{
}
.onlyCardBottom
{
position
:
relative
;
width
:
660
rpx
;
margin
:
auto
;
height
:
90
rpx
;
.bbg
{
height
:
90
rpx
;
width
:
660
rpx
;
}
.cardBottom
{
width
:
660
rpx
;
background
:
transparent
;
height
:
90
rpx
;
text
{
font-size
:
28
rpx
;
color
:
#925921
;
}
.renewBtn
{
background
:
#874f02
;
color
:
#fff
;
}
}
}
.headImg
{
border-radius
:
50%
;
position
:
relative
;
top
:
50
rpx
;
overflow
:
hidden
;
width
:
100
rpx
;
height
:
100
rpx
;
border
:
4px
solid
#ffffff
;
background
:
#c4f9cb
;
left
:
40
rpx
;
button
{
display
:
block
;
padding
:
0
;
}
image
{
width
:
100
rpx
;
height
:
100
rpx
;
display
:
block
;
}
}
.slot-image
{
width
:
50
rpx
;
position
:
relative
;
top
:
-8
rpx
;
height
:
50
rpx
;
margin-right
:
30
rpx
;
}
.myList
{
}
.funcBar
{
display
:
flex
;
background
:
#fff
;
width
:
700
rpx
;
height
:
140
rpx
;
justify-content
:
space-around
;
}
.funcBar
view
{
display
:
flex
;
align-items
:
center
;
font-size
:
36
rpx
;
}
.funcBar
image
{
width
:
80
rpx
;
height
:
80
rpx
;
}
.topbgimg
{
width
:
100vw
;
position
:
absolute
;
z-index
:
-1
;
}
.reportItembox
{
overflow
:
hidden
;
display
:
flex
;
flex-wrap
:
wrap
;
justify-content
:
space-between
;
}
.reportItem
{
background
:
#fff
;
border-radius
:
15
rpx
;
width
:
340
rpx
;
margin-top
:
25
rpx
;
.t
{
border-bottom
:
1px
solid
#e5e5e5
;
height
:
70
rpx
;
line-height
:
70
rpx
;
color
:
#2b3133
;
font-size
:
30
rpx
;
padding-left
:
36
rpx
;
}
.rbody
{
display
:
flex
;
padding
:
36
rpx
;
box-sizing
:
border-box
;
view
{
font-size
:
26
rpx
;
color
:
#888
;
width
:
40%
;
}
text
{
color
:
#00c176
;
font-weight
:
bold
;
font-size
:
36
rpx
;
display
:
block
;
margin-bottom
:
20
rpx
;
}
}
}
.changephonepop
{
width
:
100%
;
}
.changephonepop
view
{
width
:
100%
;
margin
:
0
0
30
rpx
;
}
.changephonepop
view
input
{
width
:
100%
;
background
:
#f4f4f4
;
font-size
:
30
rpx
;
height
:
80
rpx
;
padding
:
0
15
rpx
;
box-sizing
:
border-box
;
line-height
:
80
rpx
;
}
.changephonepop
view
.ffff
{
display
:
flex
;
}
.changephonepop
view
button
{
font-size
:
24
rpx
;
margin-left
:
10
rpx
;
white-space
:
nowrap
;
width
:
260
rpx
;
line-height
:
80
rpx
;
background
:
linear-gradient
(
90deg
,
#00c176
,
#3ed89b
);
color
:
#fff
;
padding
:
0
;
border
:
none
;
}
</
style
>
...
...
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