Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
activities
/
web-lottery
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
1
Pipelines
Wiki
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
aa9d9777
authored
Apr 20, 2022
by
赖慧粮
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat(records): 完善抽奖记录列表及详情 & 改变留言抽奖转跳抽奖记录的方式:由直播间转跳变更为当前页转跳
parent
602ea5e5
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
579 additions
and
65 deletions
+579
-65
components/Lottery/Instant/Main.vue
+17
-3
components/Lottery/Instant/MiniMain.vue
+16
-2
components/Lottery/Instant/RecordsPupup.vue
+98
-25
components/Lottery/Instant/WinPopup.vue
+23
-5
mixins/connection.js
+66
-0
pages/message/index.vue
+7
-1
pages/recordDetail/index.vue
+308
-0
pages/records/index.vue
+44
-29
No files found.
components/Lottery/Instant/Main.vue
View file @
aa9d9777
...
@@ -151,7 +151,7 @@
...
@@ -151,7 +151,7 @@
</div>
</div>
<Records></Records>
<Records></Records>
<Introduction
class=
"lottery-instant__intro"
:title-style=
"wheelIntroductionTitleStyle"
></Introduction>
<Introduction
class=
"lottery-instant__intro"
:title-style=
"wheelIntroductionTitleStyle"
></Introduction>
<WinPopup
v-model=
"isShowWin"
:info=
"winInfo"
@
winCallback=
"winCallback"
></WinPopup>
<WinPopup
v-model=
"isShowWin"
:info=
"winInfo"
></WinPopup>
<BindPhoneDialog
v-model=
"isShowBindPhone"
></BindPhoneDialog>
<BindPhoneDialog
v-model=
"isShowBindPhone"
></BindPhoneDialog>
</section>
</section>
</div>
</div>
...
@@ -274,13 +274,27 @@ export default {
...
@@ -274,13 +274,27 @@ export default {
},
},
methods
:
{
methods
:
{
...
mapActions
({
jumpToLogin
:
'users/jumpToLogin'
,
updateInfo
:
'lottery/updateInfo'
}),
...
mapActions
({
jumpToLogin
:
'users/jumpToLogin'
,
updateInfo
:
'lottery/updateInfo'
}),
// 中奖后,
"我知道了"
回调
// 中奖后,
关闭窗口
回调
winC
allback
()
{
winC
loseCallback
()
{
this
.
isShowWin
=
false
this
.
isShowWin
=
false
if
(
this
.
winInfo
.
id
!==
0
&&
!
this
.
isBindPhone
)
{
if
(
this
.
winInfo
.
id
!==
0
&&
!
this
.
isBindPhone
)
{
this
.
isShowBindPhone
=
true
this
.
isShowBindPhone
=
true
}
}
},
},
// 中奖后, "查看奖品详情"回调
winCallback
()
{
this
.
isShowWin
=
false
if
(
this
.
winInfo
.
id
!==
0
)
{
this
.
$router
.
push
({
path
:
'/recordDetail'
,
query
:
{
detailId
:
this
.
winInfo
.
id
,
tempId
:
this
.
winInfo
.
tempId
,
uin
:
this
.
uin
}
})
}
},
// 开始抽奖
// 开始抽奖
startLottery
()
{
startLottery
()
{
// 抽奖不在活动日期内
// 抽奖不在活动日期内
...
...
components/Lottery/Instant/MiniMain.vue
View file @
aa9d9777
...
@@ -271,13 +271,27 @@ export default {
...
@@ -271,13 +271,27 @@ export default {
},
},
methods
:
{
methods
:
{
...
mapActions
({
jumpToLogin
:
'users/jumpToLogin'
,
updateInfo
:
'lottery/updateInfo'
}),
...
mapActions
({
jumpToLogin
:
'users/jumpToLogin'
,
updateInfo
:
'lottery/updateInfo'
}),
// 中奖后,
"我知道了"
回调
// 中奖后,
关闭窗口
回调
winC
allback
()
{
winC
loseCallback
()
{
this
.
isShowWin
=
false
this
.
isShowWin
=
false
if
(
this
.
winInfo
.
id
!==
0
&&
!
this
.
isBindPhone
)
{
if
(
this
.
winInfo
.
id
!==
0
&&
!
this
.
isBindPhone
)
{
this
.
isShowBindPhone
=
true
this
.
isShowBindPhone
=
true
}
}
},
},
// 中奖后, "查看奖品详情"回调
winCallback
()
{
this
.
isShowWin
=
false
if
(
this
.
winInfo
.
id
!==
0
)
{
this
.
$router
.
push
({
path
:
'/recordDetail'
,
query
:
{
detailId
:
this
.
winInfo
.
id
,
tempId
:
this
.
winInfo
.
tempId
,
uin
:
this
.
uin
}
})
}
},
// 开始抽奖
// 开始抽奖
startLottery
()
{
startLottery
()
{
// 抽奖不在活动日期内
// 抽奖不在活动日期内
...
...
components/Lottery/Instant/RecordsPupup.vue
View file @
aa9d9777
<
template
>
<
template
>
<van-popup
v-model=
"visible"
class=
"records-popup"
closeable
swipeable
close-icon=
"close"
>
<van-popup
v-model=
"visible"
class=
"records-popup"
:class=
"`records-popup--$
{theme}`"
closeable
swipeable
close-icon="close"
>
<van-tabs
v-model=
"active"
class=
"records-popup__tabs"
:line-width=
"16"
@
change=
"onChange"
>
<van-tabs
v-model=
"active"
class=
"records-popup__tabs"
:line-width=
"16"
@
change=
"onChange"
>
<van-tab
title=
"抽奖记录"
name=
"personal"
>
<van-tab
title=
"抽奖记录"
name=
"personal"
>
<div
class=
"records-popup__personal-record"
>
<div
class=
"records-popup__content"
>
<div
class=
"records-popup__record-content"
>
<div
class=
"records-popup__list-wrapper"
>
<div
class=
"records-popup__phone"
>
<div
class=
"records-popup__personal-record"
>
领奖手机号:
<div
class=
"records-popup__record-content"
>
<span
v-if=
"isBindPhone"
>
{{
userInfo
.
phone
}}
</span>
<div
class=
"records-popup__phone"
>
<span
v-else
class=
"records-popup__bind-phone"
@
click=
"bindMobile"
>
绑定手机号
</span>
领奖手机号:
</div>
<span
v-if=
"isBindPhone"
>
{{
userInfo
.
phone
}}
</span>
<ul
v-if=
"Object.keys(recordList).length !== 0"
class=
"records-popup__record-list"
>
<span
v-else
class=
"records-popup__bind-phone"
@
click=
"bindMobile"
>
绑定手机号
</span>
<li
v-for=
"(session, key, index) in recordList"
:key=
"index"
>
<div
v-for=
"(item, itemIndex) in session"
:key=
"itemIndex"
class=
"records-popup__session-info"
>
<div
class=
"records-popup__info-wrap"
>
<div
v-if=
"session.length > 1"
class=
"records-popup__session"
>
第
{{
NUMBER_LIST
[
index
+
1
]
}}
场次
</div>
<div
class=
"records-popup__time"
>
<span>
{{
(
item
.
drawTime
*
1000
)
|
formatDate
(
'MM-DD HH:mm:ss'
)
}}
</span>
</div>
</div>
<div
class=
"records-popup__prize-name"
>
{{
item
.
prizeName
}}
</div>
</div>
</div>
</li>
<ul
v-if=
"Object.keys(recordList).length !== 0"
class=
"records-popup__record-list"
>
</ul>
<li
v-for=
"(session, key, index) in recordList"
:key=
"index"
>
<div
v-if=
"Object.keys(recordList).length === 0"
class=
"records-popup__no-data"
>
暂无记录
</div>
<div
v-for=
"(item, itemIndex) in session"
:key=
"itemIndex"
class=
"records-popup__session-info"
>
<div
class=
"records-popup__info-wrap"
>
<div
v-if=
"session.length > 1"
class=
"records-popup__session"
>
第
{{
NUMBER_LIST
[
index
+
1
]
}}
场次
</div>
<div
class=
"records-popup__time"
>
<span>
{{
(
item
.
drawTime
*
1000
)
|
formatDate
(
'MM-DD HH:mm:ss'
)
}}
</span>
</div>
</div>
<div
class=
"records-popup__prize-name"
>
{{
item
.
prizeName
}}
</div>
</div>
</li>
</ul>
<div
v-if=
"Object.keys(recordList).length === 0"
class=
"records-popup__no-data"
>
暂无记录
</div>
</div>
</div>
</div>
<div
class=
"records-popup__jump-detail"
>
<span
@
click=
"jumpDetail"
>
查看奖品详情
</span>
</div>
</div>
</div>
</div>
</van-tab>
</van-tab>
...
@@ -50,7 +64,7 @@ import { getLotteryRecordList, getWinnersList } from '@/api/modules/lottery'
...
@@ -50,7 +64,7 @@ import { getLotteryRecordList, getWinnersList } from '@/api/modules/lottery'
import
{
NUMBER_LIST
}
from
'@/utils/constant'
import
{
NUMBER_LIST
}
from
'@/utils/constant'
export
default
{
export
default
{
name
:
'RecordsP
u
pup'
,
name
:
'RecordsP
o
pup'
,
props
:
{
props
:
{
value
:
{
value
:
{
type
:
Boolean
,
type
:
Boolean
,
...
@@ -63,6 +77,10 @@ export default {
...
@@ -63,6 +77,10 @@ export default {
activeTab
:
{
activeTab
:
{
type
:
String
,
type
:
String
,
default
:
'personal'
default
:
'personal'
},
theme
:
{
type
:
String
,
default
:
'normal'
}
}
},
},
data
()
{
data
()
{
...
@@ -144,6 +162,14 @@ export default {
...
@@ -144,6 +162,14 @@ export default {
this
.
jumpToBinding
()
this
.
jumpToBinding
()
}
}
})
})
},
jumpDetail
()
{
this
.
$router
.
push
({
path
:
'/records'
,
query
:
{
uin
:
this
.
uin
}
})
}
}
}
}
}
}
...
@@ -157,12 +183,39 @@ export default {
...
@@ -157,12 +183,39 @@ export default {
border-radius
:
15px
;
border-radius
:
15px
;
overflow
:
visible
;
overflow
:
visible
;
font-size
:
12px
;
font-size
:
12px
;
/deep/
.van-popup__close-icon
{
::v-deep
.van-popup__close-icon
{
right
:
-22px
;
right
:
-22px
;
top
:
-20px
;
top
:
-20px
;
font-size
:
22px
;
font-size
:
22px
;
color
:
#fff
;
color
:
#fff
;
}
}
//
&
--blue
{
//
background
:
transparent
;
//
::v-deep
.van-tabs__content
{
//
background-image
:
url('~@/assets/images/lottery/records-new/bg-blue.png')
;
//
background-size
:
100%
100%
;
//
background-repeat
:
no-repeat
;
//
}
//
::v-deep
.van-tab
{
//
border-radius
:
16px
16px
0
0
;
//
background-image
:
radial-gradient
(
at
center
bottom
,
#9ed5fc
30%
,
#fefeff
);
//
&:first-child{
//
margin-right
:
6px
;
//
}
//
&
__text
{
//
color
:
#93b6df
;
//
}
//
&
--active
{
//
background
:
#fff
;
//
.van-tab__text
{
//
color
:
#4787d2
!important
;
//
}
//
}
//
}
//
::v-deep
.van-tabs__line
{
//
display
:
none
;
//
}
//
}
&
__tabs
{
&
__tabs
{
padding
:
8px
0
0
;
padding
:
8px
0
0
;
height
:
100%
;
height
:
100%
;
...
@@ -200,12 +253,32 @@ export default {
...
@@ -200,12 +253,32 @@ export default {
}
}
}
}
}
}
&
__content
{
width
:
100%
;
height
:
100%
;
display
:
flex
;
flex-direction
:
column
;
align-content
:
center
;
}
&
__list-wrapper
{
flex
:
1
;
overflow
:
hidden
;
}
&
__personal-record
{
&
__personal-record
{
width
:
100%
;
width
:
100%
;
height
:
100%
;
height
:
100%
;
overflow
:
hidden
auto
;
overflow
:
hidden
auto
;
padding
:
0
15px
;
padding
:
0
15px
;
}
}
&
__jump-detail
{
width
:
100%
;
height
:
18px
;
line-height
:
18px
;
text-align
:
center
;
color
:
#ff0024
;
font-size
:
12px
;
margin-top
:
10px
;
}
&
__phone
{
&
__phone
{
color
:
#666
;
color
:
#666
;
margin-bottom
:
12px
;
margin-bottom
:
12px
;
...
...
components/Lottery/Instant/WinPopup.vue
View file @
aa9d9777
<
template
>
<
template
>
<van-popup
v-model=
"visible"
class=
"win-popup"
closeable
close-icon=
"close"
:style=
"
{ background: 'transparent' }">
<van-popup
v-model=
"visible"
class=
"win-popup"
closeable
close-icon=
"close"
:style=
"
{ background: 'transparent' }"
@click-close-icon="onClose"
>
<div
class=
"win-popup__container"
>
<div
class=
"win-popup__container"
>
<div
class=
"win-popup__wrap"
>
<div
class=
"win-popup__wrap"
>
<div
class=
"win-popup__content"
>
<div
class=
"win-popup__content"
>
...
@@ -15,12 +22,20 @@
...
@@ -15,12 +22,20 @@
<div
v-else
class=
"win-popup__thanks"
>
谢谢参与,再接再厉
</div>
<div
v-else
class=
"win-popup__thanks"
>
谢谢参与,再接再厉
</div>
</div>
</div>
<div
class=
"win-popup__footer"
>
<div
class=
"win-popup__footer"
>
<van-button
class=
"win-popup__sure"
color=
"linear-gradient(to right, #ffde9d, #ffdbb3)"
round
@
click=
"know"
>
我知道了
</van-button
>
<template
v-if=
"isWin"
>
<template
v-if=
"isWin"
>
<van-button
class=
"win-popup__sure"
color=
"linear-gradient(to right, #ffde9d, #ffdbb3)"
round
@
click=
"know"
>
查看奖品详情
</van-button
>
<p
class=
"win-popup__win-msg"
>
根据活动说明进行领取
</p>
<p
class=
"win-popup__win-msg"
>
根据活动说明进行领取
</p>
</
template
>
</
template
>
<van-button
v-else
class=
"win-popup__sure"
color=
"linear-gradient(to right, #ffde9d, #ffdbb3)"
round
@
click=
"visible = false"
>
我知道了
</van-button
>
</div>
</div>
</div>
</div>
</div>
</div>
...
@@ -59,6 +74,9 @@ export default {
...
@@ -59,6 +74,9 @@ export default {
methods
:
{
methods
:
{
know
()
{
know
()
{
Bus
.
$emit
(
'updateMain'
,
{
func
:
'winCallback'
})
Bus
.
$emit
(
'updateMain'
,
{
func
:
'winCallback'
})
},
onClose
()
{
Bus
.
$emit
(
'updateMain'
,
{
func
:
'winCloseCallback'
})
}
}
}
}
}
}
...
@@ -101,7 +119,7 @@ export default {
...
@@ -101,7 +119,7 @@ export default {
font-size
:
16px
;
font-size
:
16px
;
flex
:
1
;
flex
:
1
;
width
:
100%
;
width
:
100%
;
overflow
:
hidden
overflow
:
hidden
;
}
}
&
__win-info
{
&
__win-info
{
display
:
flex
;
display
:
flex
;
...
...
mixins/connection.js
0 → 100644
View file @
aa9d9777
import
{
setLotteryAddress
}
from
'@/api/modules/records'
export
default
{
data
()
{
return
{
connection
:
null
,
timer
:
null
}
},
computed
:
{
isInIframe
()
{
return
process
.
client
?
window
.
self
!==
window
.
top
:
false
}
},
mounted
()
{
this
.
connectionInit
()
},
methods
:
{
connectionInit
()
{
if
(
process
.
client
&&
this
.
isInIframe
&&
!
this
.
connection
)
{
const
{
ClientConnection
}
=
require
(
'@easy-messenger/client-connection/dist/clientConnection.cjs.js'
)
this
.
connection
=
new
ClientConnection
()
let
counter
=
0
this
.
timer
=
setInterval
(()
=>
{
this
.
connection
.
init
()
counter
++
if
(
this
.
connection
.
connected
||
counter
>
60
)
{
clearInterval
(
this
.
timer
)
this
.
connectionListener
()
}
},
1000
)
}
},
connectionListener
()
{
this
.
connection
.
on
(
'onSaveLotteryAddress'
,
addressInfo
=>
{
const
params
=
{
id
:
this
.
winInfo
.
id
,
tempId
:
this
.
winInfo
?.
tempId
||
''
,
uin
:
this
.
$route
?.
query
?.
uin
||
''
,
address
:
`
${
addressInfo
?.
province
||
''
}
-
$
{
addressInfo
?.
city
||
''
}
-
$
{
addressInfo
?.
area
||
''
}
-
$
{
addressInfo
?.
detail
}
`,
contactPhone: addressInfo?.mobile || '',
name: addressInfo?.name || ''
}
setLotteryAddress(params).then(res => {
const { code, errorCode, errorMessage } = res
if (code === 200 && errorCode === 0) {
this.$toast({
message: '保存成功,具体详情请前往个人中心查看',
duration: 3000,
onClose: () => {
this.connection.emit('onClose', { type: 'lottery' })
}
})
} else {
this.$toast(errorMessage)
}
})
})
},
connectionEmit(type, data){
this.connection.emit(type, data)
}
}
}
pages/message/index.vue
View file @
aa9d9777
...
@@ -205,7 +205,13 @@ export default {
...
@@ -205,7 +205,13 @@ export default {
},
},
openRecordHandler() {
openRecordHandler() {
// 触发打开抽奖记录
// 触发打开抽奖记录
this.connection.emit('openRecordHandler', this.lotteryInfo)
// this.connection.emit('openRecordHandler', this.lotteryInfo)
this.$router.push({
path: '/records',
query: {
uin: this.$route?.query?.uin || ''
}
})
},
},
openAddressHandler() {
openAddressHandler() {
// 触发打开编辑地址
// 触发打开编辑地址
...
...
pages/recordDetail/index.vue
0 → 100644
View file @
aa9d9777
<
template
>
<div
class=
"record-detail"
>
<van-nav-bar
fixed
title=
"奖品详情"
left-arrow
@
click-left=
"onClickLeft"
/>
<div
class=
"record-detail__content"
>
<div
class=
"record-detail__info"
>
<ul
class=
"record-detail__info-wrapper"
>
<li>
<label>
活动名称:
</label>
<span>
{{
detailInfo
.
title
}}
</span>
</li>
<li>
<label>
中奖场次:
</label>
<span
v-if=
"detailInfo.drawPlay"
>
{{
`第 ${detailInfo.drawPlay
}
场`
}}
<
/span
>
<
/li
>
<
li
>
<
label
>
参与时间:
<
/label
>
<
span
v
-
if
=
"detailInfo.drawTime"
>
{{
(
detailInfo
.
drawTime
*
1000
)
|
formatDate
(
'YYYY-MM-DD HH:mm'
)
}}
<
/span
>
<
/li
>
<
li
>
<
label
>
获得奖品:
<
/label
>
<
div
>
<
p
>
{{
detailInfo
.
prizeName
}}
<
/p
>
<
img
v
-
lazy
=
"detailInfo.prizeIcon"
class
=
"record-detail__info-img"
alt
=
""
/>
<
/div
>
<
/li
>
<
li
>
<
label
>
领奖方式:
<
/label
>
<
span
>
{{
LOTTERY_EXCHANGE_TYPE_TXT
[
detailInfo
.
exchangeType
]
}}
<
/span
>
<
/li
>
<
/ul
>
<
/div
>
<
div
v
-
if
=
"+detailInfo.exchangeType === +LOTTERY_EXCHANGE_TYPE.offline"
class
=
"record-detail__code-info"
>
<
QRCode
:
url
=
"detailInfo.code"
:
width
=
"70"
:
height
=
"70"
><
/QRCode
>
<
p
class
=
"record-detail__code-text"
>
<
label
>
兑换码:
<
/label
>
<
template
v
-
if
=
"detailInfo.code"
>
{{
detailInfo
.
code
}}
<
span
class
=
"record-detail__copy-btn"
@
click
=
"onCopy(detailInfo.code)"
><
i
class
=
"iconfont icon-fuzhi"
><
/i>复
制
<
/span
>
<
/template
>
<
/p
>
<
p
class
=
"record-detail__notice"
>*
兑换信息请勿泄露给他人,以防冒充代领
<
/p
>
<
/div
>
<
div
v
-
if
=
"+detailInfo.exchangeType === +LOTTERY_EXCHANGE_TYPE.mailing"
class
=
"record-detail__addressee-info"
>
<
span
v
-
if
=
"!detailInfo.name"
class
=
"record-detail__edit-btn"
@
click
=
"isShowAddressPopup = true"
>
填写收货地址
<
/spa
n
>
<
template
v
-
else
>
<
span
class
=
"record-detail__addressee-title"
>
收货信息
<
/span
>
<
ul
class
=
"record-detail__info-wrapper"
>
<
li
>
<
label
>
收货人:
<
/label
>
<
span
>
{{
detailInfo
.
name
}}
<
/span
>
<
/li
>
<
li
>
<
label
>
手机号码:
<
/label
>
<
span
>
{{
detailInfo
.
contactPhone
}}
<
/span
>
<
/li
>
<
li
>
<
label
>
收货地址:
<
/label
>
<
span
v
-
if
=
"detailInfo.address"
>
{{
detailInfo
.
address
}}
<
/span
>
<
/li
>
<
li
>
<
label
>
运单号:
<
/label
>
<
span
v
-
if
=
"detailInfo.trackingNo"
>
{{
detailInfo
.
trackingNo
}}
<
span
class
=
"record-detail__copy-btn"
@
click
=
"onCopy(detailInfo.trackingNo)"
><
i
class
=
"iconfont icon-fuzhi"
><
/i>复
制
<
/span
>
<
/span
>
<
span
v
-
else
class
=
"record-detail__tracking-msg"
>
您的收货信息已提交,稍后可查看运单号
<
/span
>
<
/li
>
<
/ul
>
<
/template
>
<
/div
>
<
/div
>
<
AddressListPopup
v
-
model
=
"isShowAddressPopup"
left
-
text
=
"保存"
:
uin
=
"uin"
:
create
-
api
=
"addAddress"
:
update
-
api
=
"setAddress"
:
retrieve
-
api
=
"getAddressList"
:
delete
-
api
=
"removeAddress"
@
onBackHandler
=
"onSaveAddress"
><
/AddressListPopup
>
<
/div
>
<
/template
>
<
script
>
import
{
getRecordDetail
,
setLotteryAddress
}
from
'@/api/modules/records'
import
{
LOTTERY_EXCHANGE_TYPE
,
LOTTERY_EXCHANGE_TYPE_TXT
}
from
'@/utils/constant'
import
{
AddressListPopup
}
from
'@gdyfe/gdy-component-lib'
import
'@gdyfe/gdy-component-lib/lib/index.css'
import
{
getAddressList
,
removeAddress
,
setAddress
,
addAddress
}
from
'@/api/modules/address'
export
default
{
name
:
'Index'
,
components
:
{
QRCode
:
()
=>
import
(
'@/components/Common/QRCode'
),
AddressListPopup
}
,
data
()
{
return
{
uin
:
+
this
.
$route
?.
query
?.
uin
||
''
,
id
:
this
.
$route
?.
query
?.
detailId
||
''
,
tempId
:
this
.
$route
?.
query
?.
tempId
||
''
,
getAddressList
,
removeAddress
,
setAddress
,
addAddress
,
LOTTERY_EXCHANGE_TYPE
,
LOTTERY_EXCHANGE_TYPE_TXT
,
detailInfo
:
this
.
detailInfoTranslator
(),
isShowAddressPopup
:
false
}
}
,
computed
:
{
isInIframe
()
{
return
process
.
client
?
window
.
self
!==
window
.
top
:
false
}
}
,
watch
:
{
$route
:
{
handler
()
{
this
.
loadData
()
}
,
immediate
:
true
}
}
,
methods
:
{
loadData
()
{
getRecordDetail
({
uin
:
this
.
$route
?.
query
?.
uin
||
''
,
id
:
this
.
id
,
tempId
:
this
.
tempId
}
).
then
(
res
=>
{
const
{
code
,
errorCode
,
errorMessage
,
data
}
=
res
if
(
code
===
200
&&
errorCode
===
0
)
{
this
.
detailInfo
=
this
.
detailInfoTranslator
(
data
)
}
else
{
this
.
$toast
(
errorMessage
)
}
}
)
}
,
onSaveAddress
(
val
)
{
if
(
!
val
)
{
this
.
$toast
(
'未选择地址'
)
return
}
const
params
=
{
id
:
this
.
id
,
tempId
:
this
.
tempId
,
uin
:
this
.
$route
?.
query
?.
uin
||
''
,
address
:
`${val?.province || ''
}
-${val?.city || ''
}
-${val?.area || ''
}
-${val?.detail
}
`
,
contactPhone
:
val
?.
mobile
||
''
,
name
:
val
?.
name
||
''
}
setLotteryAddress
(
params
).
then
(
res
=>
{
const
{
code
,
errorCode
,
errorMessage
}
=
res
if
(
code
===
200
&&
errorCode
===
0
)
{
this
.
$toast
(
'保存成功'
)
this
.
isShowAddressPopup
=
false
this
.
loadData
()
}
else
{
this
.
$toast
(
errorMessage
)
}
}
)
}
,
onCopy
(
content
)
{
this
.
$copyText
(
content
).
then
(
()
=>
{
this
.
$toast
(
'复制成功'
)
}
,
()
=>
{
this
.
$toast
(
'您的浏览器不支持一键复制,请手动从地址栏复制'
)
}
)
}
,
onClickLeft
()
{
window
.
history
.
back
()
}
,
detailInfoTranslator
(
data
)
{
return
{
...
data
,
title
:
data
?.
title
||
''
,
drawPlay
:
data
?.
drawPlay
||
''
,
drawTime
:
data
?.
drawTime
||
''
,
prizeName
:
data
?.
prizeName
||
''
,
prizeIcon
:
data
?.
prizeIcon
||
''
,
exchangeType
:
+
data
?.
exchangeType
||
1
,
address
:
data
?.
address
||
''
,
contactPhone
:
data
?.
contactPhone
||
''
,
code
:
data
?.
code
||
''
}
}
}
}
<
/script
>
<
style
lang
=
"less"
scoped
>
.
record
-
detail
{
height
:
100
%
;
width
:
100
%
;
padding
:
16
px
28
px
;
background
-
color
:
#
fff
;
label
{
font
-
size
:
13
px
;
font
-
weight
:
500
;
color
:
#
666
;
white
-
space
:
nowrap
;
line
-
height
:
19
px
;
min
-
width
:
65
px
;
}
&
__content
{
display
:
flex
;
flex
-
direction
:
column
;
margin
-
top
:
46
px
;
}
&
__info
{
padding
:
20
px
;
box
-
shadow
:
0
px
1
px
8
px
1
px
rgba
(
200
,
200
,
200
,
0.3
);
border
-
radius
:
8
px
;
}
&
__info
-
wrapper
{
li
{
display
:
flex
;
margin
-
bottom
:
15
px
;
&
:
last
-
child
{
margin
-
bottom
:
0
;
}
span
,
p
{
color
:
#
333
;
font
-
size
:
14
px
;
font
-
weight
:
500
;
line
-
height
:
19
px
;
}
}
}
&
__info
-
img
{
width
:
84
px
;
height
:
84
px
;
display
:
block
;
border
:
1
px
solid
#
dddddd
;
margin
-
top
:
15
px
;
border
-
radius
:
6
px
;
}
&
__code
-
info
{
margin
-
top
:
10
px
;
padding
:
20
px
;
box
-
shadow
:
0
px
1
px
8
px
1
px
rgba
(
200
,
200
,
200
,
0.3
);
border
-
radius
:
8
px
;
display
:
flex
;
flex
-
direction
:
column
;
align
-
items
:
center
;
}
&
__addressee
-
info
{
margin
-
top
:
10
px
;
padding
:
20
px
;
box
-
shadow
:
0
px
1
px
8
px
1
px
rgba
(
200
,
200
,
200
,
0.3
);
border
-
radius
:
8
px
;
display
:
flex
;
flex
-
direction
:
column
;
}
&
__code
-
text
{
height
:
18
px
;
font
-
size
:
12
px
;
font
-
weight
:
500
;
line
-
height
:
18
px
;
display
:
flex
;
align
-
items
:
center
;
margin
:
10
px
0
;
}
&
__notice
{
color
:
#
ff1111
;
font
-
size
:
12
px
;
}
&
__edit
-
btn
{
color
:
#
2
e7ff9
;
font
-
size
:
14
px
;
}
&
__copy
-
btn
{
background
-
color
:
#
f2f2f2
;
border
-
radius
:
12
px
;
color
:
#
999
!
important
;
font
-
size
:
13
px
!
important
;
width
:
52
px
;
height
:
24
px
;
line
-
height
:
1
;
padding
:
5
px
;
margin
-
left
:
12
px
;
cursor
:
pointer
;
i
{
font
-
size
:
13
px
;
margin
-
right
:
2
px
;
}
}
&
__addressee
-
title
{
color
:
#
333
;
font
-
size
:
14
px
;
font
-
weight
:
500
;
line
-
height
:
19
px
;
margin
-
bottom
:
15
px
;
}
&
__tracking
-
msg
{
color
:
#
999
!
important
;
font
-
size
:
13
px
!
important
;
}
}
<
/style
>
pages/records/index.vue
View file @
aa9d9777
<
template
>
<
template
>
<div
class=
"records"
:class=
"
{ 'records--scale': isShowDetail }">
<div
class=
"records"
>
<van-nav-bar
fixed
title=
"抽奖记录"
left-arrow
@
click-left=
"onClickLeft"
/>
<van-pull-refresh
v-model=
"isRefreshing"
class=
"records__refresh"
@
refresh=
"onRefresh"
>
<van-pull-refresh
v-model=
"isRefreshing"
class=
"records__refresh"
@
refresh=
"onRefresh"
>
<van-list
<van-list
v-model=
"isLoading"
v-model=
"isLoading"
...
@@ -38,7 +39,6 @@
...
@@ -38,7 +39,6 @@
/>
/>
您还没有抽奖记录
您还没有抽奖记录
</div>
</div>
<DetailPopup
:id=
"detailId"
v-model=
"isShowDetail"
></DetailPopup>
</div>
</div>
</
template
>
</
template
>
...
@@ -48,9 +48,7 @@ import { WRITEOFF_STATUS_TXT } from '@/utils/constant'
...
@@ -48,9 +48,7 @@ import { WRITEOFF_STATUS_TXT } from '@/utils/constant'
export
default
{
export
default
{
name
:
'Records'
,
name
:
'Records'
,
components
:
{
components
:
{},
DetailPopup
:
()
=>
import
(
'@/components/Records/DetailPopup'
)
},
data
()
{
data
()
{
return
{
return
{
WRITEOFF_STATUS_TXT
,
WRITEOFF_STATUS_TXT
,
...
@@ -60,10 +58,7 @@ export default {
...
@@ -60,10 +58,7 @@ export default {
isError
:
false
,
isError
:
false
,
hasMore
:
true
,
hasMore
:
true
,
page
:
1
,
page
:
1
,
pageSize
:
10
,
pageSize
:
10
isShowDetail
:
false
,
detailId
:
null
,
scrollTop
:
null
}
}
},
},
computed
:
{
computed
:
{
...
@@ -72,19 +67,19 @@ export default {
...
@@ -72,19 +67,19 @@ export default {
}
}
},
},
watch
:
{
watch
:
{
isShowDetail
(
val
)
{
//
isShowDetail(val) {
if
(
val
)
{
//
if (val) {
const
scrollTop
=
document
.
documentElement
.
scrollTop
||
document
.
body
.
scrollTop
//
const scrollTop = document.documentElement.scrollTop || document.body.scrollTop
this
.
scrollTop
=
scrollTop
//
this.scrollTop = scrollTop
return
//
return
}
//
}
if
(
!
val
&&
this
.
scrollTop
)
{
//
if (!val && this.scrollTop) {
this
.
$nextTick
(()
=>
{
//
this.$nextTick(() => {
document
.
documentElement
.
scrollTop
=
document
.
body
.
scrollTop
=
this
.
scrollTop
//
document.documentElement.scrollTop = document.body.scrollTop = this.scrollTop
this
.
scrollTop
=
null
//
this.scrollTop = null
})
//
})
}
//
}
}
//
}
},
},
methods
:
{
methods
:
{
loadData
()
{
loadData
()
{
...
@@ -124,8 +119,16 @@ export default {
...
@@ -124,8 +119,16 @@ export default {
this
.
loadData
()
this
.
loadData
()
},
},
openPopup
(
item
)
{
openPopup
(
item
)
{
this
.
isShowDetail
=
true
this
.
$router
.
push
({
this
.
detailId
=
item
.
id
path
:
'/recordDetail'
,
query
:
{
uin
:
this
.
$route
?.
query
?.
uin
||
''
,
detailId
:
item
.
id
}
})
},
onClickLeft
()
{
window
.
history
.
back
()
}
}
}
}
}
}
...
@@ -137,11 +140,23 @@ export default {
...
@@ -137,11 +140,23 @@ export default {
height
:
100%
;
height
:
100%
;
transition
:
all
0.5s
;
transition
:
all
0.5s
;
background-color
:
#fff
;
background-color
:
#fff
;
//
&--scale
{
&--scale
{
//
border-radius
:
10px
;
border-radius
:
10px
;
//
overflow
:
hidden
;
overflow
:
hidden
;
//
transform
:
scale
(
0.96
);
transform
:
scale
(
0.96
);
//
}
.van-nav-bar
{
background
:
url('https://static-production.guangdianyun.tv/my/2.2.0/img/top-bg.bc50fdc.png')
;
background-size
:
100%
auto
;
}
::v-deep
.van-nav-bar__title
{
color
:
#fff
;
}
::v-deep
.van-icon-arrow-left
{
color
:
#fff
;
}
&
__refresh
{
padding-top
:
46px
;
}
}
&
__list
{
&
__list
{
padding
:
0
16px
;
padding
:
0
16px
;
...
...
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