Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
U
uni-pdtravel
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
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
panyongping
uni-pdtravel
Commits
70668ca0
Commit
70668ca0
authored
Sep 10, 2024
by
潘永坪
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
联票电子门票增加取号功能
parent
96e086e4
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
223 additions
and
204 deletions
+223
-204
jointElectronicTicket.vue
.../my/order/jointElectronicTicket/jointElectronicTicket.vue
+223
-204
No files found.
pages/my/order/jointElectronicTicket/jointElectronicTicket.vue
View file @
70668ca0
...
...
@@ -3,10 +3,10 @@
<!-- 联票电子门票 -->
<view
class=
"top"
>
<text>
{{
orderInfo
.
productName
}}
X
{{
orderInfo
.
orderNum
}}
份
{{
orderInfo
.
productName
||
''
}}
X
{{
orderInfo
.
orderNum
||
''
}}
份
</text>
<text>
¥
{{
orderInfo
.
totalMoney
}}
¥
{{
orderInfo
.
totalMoney
||
''
}}
</text>
</view>
...
...
@@ -47,158 +47,168 @@
</view>
<template
v-else
>
<!-- 等于1为需要排号的景区 -->
<view
class=
"product-number"
v-if=
"item.showSortInfo==true"
v-for=
"(item2,a) in item.sorts"
:key=
'a'
>
<!-- 1可进入等候区 -->
<view
v-if=
"item2.sortFair==1"
style=
"background: #31AA6B;color: #ffffff;border: none;"
>
<view
class=
"my-number"
>
<view>
<view>
我的排队号
</view>
<view>
{{
item2
.
sortNo
}}
<text
class=
"my-number-name"
>
(
{{
item2
.
projectName
}}
)
</text>
<!-- 未排号显示排号按钮 -->
<template
v-if=
"item.showNumberBtn"
>
<view
style=
"text-align: center;padding-top: 30rpx;"
>
<text
class=
"btn"
@
click=
"sortAgain(item)"
>
取号
</text>
</view>
</
template
>
<!-- 已排号显示排号信息 -->
<
template
v-else
>
<view
class=
"product-number"
v-if=
"item.showSortInfo==true"
v-for=
"(item2,a) in item.sorts"
:key=
'a'
>
<!-- 1可进入等候区 -->
<view
v-if=
"item2.sortFair==1"
style=
"background: #31AA6B;color: #ffffff;border: none;"
>
<view
class=
"my-number"
>
<view>
<view>
我的排队号
</view>
<view>
{{
item2
.
sortNo
}}
<text
class=
"my-number-name"
>
(
{{
item2
.
projectName
}}
)
</text>
</view>
</view>
<view>
<view>
预计进入时间
</view>
<view>
{{
item2
.
sortNoTime
}}
</view>
</view>
</view>
<view
class=
"current-number"
>
当前排队区间
<text>
{{
item2
.
showStart
}}
-
{{
item2
.
showEnd
}}
</text>
<text>
(
{{
item2
.
projectName
}}
)
</text>
</view>
<view
class=
"number-notice"
style=
"color: #9ed9ba;"
>
<view>
温馨提示:
{{
item2
.
config
.
paRowNumHint
}}
</view>
<!-- 可以进入排队区提示 -->
<view>
{{
item2
.
config
.
paArrivalNumHint
}}
</view>
</view>
</view>
<view>
<view>
预计进入时间
</view>
<view>
{{
item2
.
sortNoTime
}}
</view>
</view>
</view>
<view
class=
"current-number"
>
当前排队区间
<text>
{{
item2
.
showStart
}}
-
{{
item2
.
showEnd
}}
</text>
<text>
(
{{
item2
.
projectName
}}
)
</text>
</view>
<view
class=
"number-notice"
style=
"color: #9ed9ba;"
>
<view>
温馨提示:
{{
item2
.
config
.
paRowNumHint
}}
</view>
<!-- 可以进入排队区提示 -->
<view>
{{
item2
.
config
.
paArrivalNumHint
}}
</view>
</view>
</view>
<!-- 2已过号不可重排,3已过号可重排 -->
<view
v-else-if=
"item2.sortFair==2||item2.sortFair==3"
style=
"background: #F53F3F;color: #ffffff;"
>
<!-- 等于1为过号允许再次排号 -->
<view
class=
"my-number"
v-if=
"item2.config.paPassedNumEnable==1"
>
<view
>
<view>
我的排队号
</view>
<view>
{{
item2
.
sortNo
}}
<text
class=
"my-number-name"
>
(
{{
item2
.
projectName
}}
)
</text>
<!-- 2已过号不可重排,3已过号可重排 -->
<view
v-else-if=
"item2.sortFair==2||item2.sortFair==3"
style=
"background: #F53F3F;color: #ffffff;"
>
<!-- 等于1为过号允许再次排号 -->
<view
class=
"my-number"
v-if=
"item2.config.paPassedNumEnable==1"
>
<view
>
<view>
我的排队号
</view>
<view>
{{
item2
.
sortNo
}}
<text
class=
"my-number-name"
>
(
{{
item2
.
projectName
}}
)
</text>
</view>
</view>
<view>
<view>
您排队号已过
</view>
<view
v-show=
"item2.sortFair==3"
>
<!-- 1为过号提示确定后重新排号 -->
<text
class=
"number-btn"
v-if=
"item2.config.paPassedNumTakeType==1"
@
click=
"clickSortAgain(item)"
>
重新取号
</text>
<!-- 0为过号直接重新排号 -->
<text
class=
"number-btn"
v-else
@
click=
"sortAgain(item)"
>
重新取号
</text>
</view>
</view>
</view>
<!-- 等于0过号不允许再次排号,只进行提示 -->
<view
v-if=
"item2.config.paPassedNumEnable==0"
>
<view>
{{
item2
.
config
.
paPassedNumHint
}}
</view>
</view>
<view
class=
"current-number"
>
当前排队区间
<text>
{{
item2
.
showStart
}}
-
{{
item2
.
showEnd
}}
</text>
<text>
(
{{
item2
.
projectName
}}
)
</text>
</view>
</view>
<view>
<view>
您排队号已过
</view>
<view
v-show=
"item2.sortFair==3"
>
<!-- 1为过号提示确定后重新排号 -->
<text
class=
"number-btn"
v-if=
"item2.config.paPassedNumTakeType==1"
@
click=
"clickSortAgain(item)"
>
重新取号
<!-- 4-可返程取号(仅胖丁显示),5-第一次取号(仅胖丁显示)-->
<view
v-else-if=
"item2.sortFair==4||item2.sortFair==5"
style=
"padding-top: 16rpx;"
>
<view
class=
"current-number"
>
当前排队区间
<text
style=
"color: #FE6600;"
>
{{
item2
.
showStart
}}
-
{{
item2
.
showEnd
}}
</text>
<text
style=
"color: #FE6600;"
>
(
{{
item2
.
projectName
}}
)
</text>
</view>
<!-- 1购票返程允许取号 -->
<view
v-if=
"item2.config.paReturnTripNumEnable==1"
style=
"margin-top: 30rpx;"
>
<text
v-if=
"canTakeNumber"
@
click=
"sortAgain(item)"
class=
"number-btn2"
>
取号
</text>
<text
v-else
>
<text
style=
"color: #FE6600;font-weight: bold;"
>
{{
minute
}}
</text>
分
<text
style=
"color: #FE6600;font-weight: bold;"
>
{{
second
}}
</text>
秒后可取号
</text>
<!-- 0为过号直接重新排号 -->
<text
class=
"number-btn"
v-else
@
click=
"sortAgain(item)"
>
重新取号
</text>
</view>
</view>
</view>
<!-- 等于0过号不允许再次排号,只进行提示 -->
<view
v-if=
"item2.config.paPassedNumEnable==0"
>
<view>
{{
item2
.
config
.
paPassedNumHint
}}
</view>
</view>
<view
class=
"current-number"
>
当前排队区间
<text>
{{
item2
.
showStart
}}
-
{{
item2
.
showEnd
}}
</text>
<text>
(
{{
item2
.
projectName
}}
)
</text>
</view>
</view>
<!-- 4-可返程取号(仅胖丁显示),5-第一次取号(仅胖丁显示)-->
<view
v-else-if=
"item2.sortFair==4||item2.sortFair==5"
style=
"padding-top: 16rpx;"
>
<view
class=
"current-number"
>
当前排队区间
<text
style=
"color: #FE6600;"
>
{{
item2
.
showStart
}}
-
{{
item2
.
showEnd
}}
</text>
<text
style=
"color: #FE6600;"
>
(
{{
item2
.
projectName
}}
)
</text>
</view>
<!-- 1购票返程允许取号 -->
<view
v-if=
"item2.config.paReturnTripNumEnable==1"
style=
"margin-top: 30rpx;"
>
<text
v-if=
"canTakeNumber"
@
click=
"sortAgain(item)"
class=
"number-btn2"
>
取号
</text>
<text
v-else
>
<text
style=
"color: #FE6600;font-weight: bold;"
>
{{
minute
}}
</text>
分
<text
style=
"color: #FE6600;font-weight: bold;"
>
{{
second
}}
</text>
秒后可取号
</text>
</view>
<!-- 1购票返程不允许取号,仅提示 -->
<view
v-if=
"item2.config.paReturnTripNumEnable==0"
style=
"margin-top: 30rpx;"
>
{{
item
.
config
.
paReturnTripHint
}}
</view>
</view>
<!-- 6已过闸 -->
<view
v-else-if=
"item2.sortFair==6"
style=
"color: #FE6600;"
>
温馨提示:您已过闸
</view>
<!-- 7提前通知-->
<view
v-else-if=
"item2.sortFair==7"
>
<view
class=
"my-number"
>
<!-- 0显示排队号,1隐藏排队号 -->
<view
v-if=
"item2.config.paHideNum!=1"
>
<view>
我的排队号
</view>
<view
style=
"color: #FE6600;"
>
{{
item2
.
sortNo
}}
<text
class=
"my-number-name"
>
(
{{
item2
.
projectName
}}
)
</text>
<!-- 1购票返程不允许取号,仅提示 -->
<view
v-if=
"item2.config.paReturnTripNumEnable==0"
style=
"margin-top: 30rpx;"
>
{{
item
.
config
.
paReturnTripHint
}}
</view>
</view>
<!-- 0显示预计时间,1隐藏预计时间 -->
<view
v-if=
"item2.config.paHideEstimatedTime!=1"
>
<view
>
预计进入时间
</view>
<view
style=
"color: #FE6600;"
>
{{
item2
.
sortNoTime
}}
</view>
<!-- 6已过闸 -->
<view
v-else-if=
"item2.sortFair==6"
style=
"color: #FE6600;"
>
温馨提示:您已过闸
</view>
</view>
<view
class=
"current-number"
>
当前排队区间
<text
style=
"color: #FE6600;"
>
{{
item2
.
showStart
}}
-
{{
item2
.
showEnd
}}
</text>
<text
style=
"color: #FE6600;"
>
(
{{
item2
.
projectName
}}
)
</text>
</view>
<view
class=
"number-notice"
>
<view
style=
"color: #666666;"
>
温馨提示:
{{
item2
.
config
.
paRowNumHint
}}
</view>
<view
style=
"color: #FE6600;"
>
<text
v-if=
"item2.config.paAdvanceNoticeDisplay"
>
{{
item2
.
config
.
paAdvanceNoticeDisplay
}}
</text>
<text
v-else
>
请尽快赶到现场等候,避免错过游玩时间。
</text>
</view>
</view>
</view>
<!-- 未到号 -->
<view
v-else
>
<view
class=
"my-number"
>
<view>
<view>
我的排队号
</view>
<view
style=
"color: #FE6600;"
>
{{
item2
.
sortNo
}}
<text
class=
"my-number-name"
>
(
{{
item2
.
projectName
}}
)
</text>
<!-- 7提前通知-->
<view
v-else-if=
"item2.sortFair==7"
>
<view
class=
"my-number"
>
<!-- 0显示排队号,1隐藏排队号 -->
<view
v-if=
"item2.config.paHideNum!=1"
>
<view>
我的排队号
</view>
<view
style=
"color: #FE6600;"
>
{{
item2
.
sortNo
}}
<text
class=
"my-number-name"
>
(
{{
item2
.
projectName
}}
)
</text>
</view>
</view>
<!-- 0显示预计时间,1隐藏预计时间 -->
<view
v-if=
"item2.config.paHideEstimatedTime!=1"
>
<view
>
预计进入时间
</view>
<view
style=
"color: #FE6600;"
>
{{
item2
.
sortNoTime
}}
</view>
</view>
</view>
<view
class=
"current-number"
>
当前排队区间
<text
style=
"color: #FE6600;"
>
{{
item2
.
showStart
}}
-
{{
item2
.
showEnd
}}
</text>
<text
style=
"color: #FE6600;"
>
(
{{
item2
.
projectName
}}
)
</text>
</view>
<view
class=
"number-notice"
>
<view
style=
"color: #666666;"
>
温馨提示:
{{
item2
.
config
.
paRowNumHint
}}
</view>
<view
style=
"color: #FE6600;"
>
<text
v-if=
"item2.config.paAdvanceNoticeDisplay"
>
{{
item2
.
config
.
paAdvanceNoticeDisplay
}}
</text>
<text
v-else
>
请尽快赶到现场等候,避免错过游玩时间。
</text>
</view>
</view>
</view>
<view>
<view>
预计进入时间
</view>
<view
style=
"color: #FE6600;"
>
{{
item2
.
sortNoTime
}}
</view>
<!-- 未到号 -->
<view
v-else
>
<view
class=
"my-number"
>
<view>
<view>
我的排队号
</view>
<view
style=
"color: #FE6600;"
>
{{
item2
.
sortNo
}}
<text
class=
"my-number-name"
>
(
{{
item2
.
projectName
}}
)
</text>
</view>
</view>
<view>
<view>
预计进入时间
</view>
<view
style=
"color: #FE6600;"
>
{{
item2
.
sortNoTime
}}
</view>
</view>
</view>
<view
class=
"current-number"
>
当前排队区间
<text
style=
"color: #FE6600;"
>
{{
item2
.
showStart
}}
-
{{
item2
.
showEnd
}}
</text>
<text
style=
"color: #FE6600;"
>
(
{{
item2
.
projectName
}}
)
</text>
</view>
<view
class=
"number-notice"
style=
"color: #666666;"
>
温馨提示:
{{
item2
.
config
.
paRowNumHint
}}
</view>
</view>
</view>
<view
class=
"current-number"
>
当前排队区间
<text
style=
"color: #FE6600;"
>
{{
item2
.
showStart
}}
-
{{
item2
.
showEnd
}}
</text>
<text
style=
"color: #FE6600;"
>
(
{{
item2
.
projectName
}}
)
</text>
</view>
<view
class=
"number-notice"
style=
"color: #666666;"
>
温馨提示:
{{
item2
.
config
.
paRowNumHint
}}
</view>
</view>
</
view
>
<!-- 后端返回了二维码
才显示下面内容
-->
<view
class=
"product-code"
v-if=
"item.orderTicketDetailList.length>0&&item.orderTicketDetailList[0].ticketCode"
>
</
template
>
<!-- 后端返回了二维码
并且不显示取号按钮时才显示二维码
-->
<view
class=
"product-code"
v-if=
"item.orderTicketDetailList.length>0&&item.orderTicketDetailList[0].ticketCode
&&!item.showNumberBtn
"
>
<view
class=
"code-title"
>
凭「入园码」直接入园
</view>
...
...
@@ -489,7 +499,7 @@ export default {
}
//清除排号信息函数2
if
(
this
.
numberFlag
)
{
clear
Interval
(
this
.
numberFlag
)
clear
Timeout
(
this
.
numberFlag
)
this
.
numberFlag
=
null
}
//清除倒计时函数
...
...
@@ -526,7 +536,7 @@ export default {
}
//清除排号信息函数2
if
(
this
.
numberFlag
)
{
clear
Interval
(
this
.
numberFlag
)
clear
Timeout
(
this
.
numberFlag
)
this
.
numberFlag
=
null
}
//清除倒计时函数
...
...
@@ -563,15 +573,16 @@ export default {
item
.
showRefundDetail
=
false
if
(
item
.
orderStatus
==
2
||
item
.
orderStatus
==
4
||
item
.
orderStatus
==
5
||
item
.
orderStatus
==
7
){
//订单状态为2、4、5、7时才获取排号信息
if
(
item
.
isFetch
==
'1'
){
if
(
item
.
isFetch
==
1
){
//为了提高性能,游玩时间等于今天才获取排号信息
if
(
item
.
playDate
.
substr
(
0
,
10
)
==
this
.
$commonjs
.
today
()){
//获取排号信息
this
.
getSortInfo
(
item
)
//每两分钟刷新一次
this
.
numberFlag
=
setInterval
(()
=>
{
this
.
getSortInfo
(
item
)
},
120
*
1000
)
if
(
item
.
fetchNumberVoList
&&
item
.
fetchNumberVoList
.
length
>
0
){
//购买的当天票已经取号
this
.
getSortInfo
(
item
)
}
else
{
//还未取号的,显示取号按钮
item
.
showNumberBtn
=
true
}
}
}
}
...
...
@@ -579,10 +590,10 @@ export default {
//subOrderType 子订单类型(0-胖丁分销,1-扫码购,2-自助机,3-组合,4-扫码牌,5-预订,6-反扫,7-收银机,8-码同步,9-押金,94-公众号,96-胖丁分销,99-酒店自营)
//exchangeMode 验证方式:1胖丁二维码,2第三方二维码,3短信,4身份证
if
(
item
.
subOrderType
!=
4
&&
item
.
subOrderType
!=
5
){
//为了提高性能,游玩时间等于今天才获取排号信息
if
(
item
.
playDate
.
substr
(
0
,
10
)
==
this
.
$commonjs
.
today
()){
if
(
item
.
exchangeMode
==
4
||
item
.
exchangeMode
==
5
){
if
(
item
.
exchangeMode
==
4
||
item
.
exchangeMode
==
5
){
//多个二维码
//为了提高性能,游玩时间等于今天才获取排号信息
if
(
item
.
playDate
.
substr
(
0
,
10
)
==
this
.
$commonjs
.
today
()){
if
(
item
.
orderStatus
==
2
||
item
.
orderStatus
==
4
||
item
.
orderStatus
==
5
||
item
.
orderStatus
==
7
){
//订单状态为2、4、5、7时才获取动态二维码
this
.
getCodeList
(
item
)
...
...
@@ -881,68 +892,73 @@ export default {
againNumber
:
0
//首次排号
}
this
.
$request
(
'distribution/distribution/getNewFetchInfo'
,
data
).
then
((
res
)
=>
{
if
(
res
.
code
==
'00'
){
if
(
res
.
data
.
length
>
0
)
{
//防止代码bug进入catch里面,一直请求接口影响性能
try
{
//防止代码bug进入catch里面,一直请求接口影响性能
try
{
if
(
res
.
code
==
'00'
){
if
(
res
.
data
.
length
>
0
)
{
let
dataObj
=
res
.
data
[
0
]
//由于页面不显示历史排号,所以只取第一个最新的排号信息
item
.
sorts
=
dataObj
.
sorts
.
slice
(
0
,
1
)
||
[]
item
.
sorts
.
forEach
(
item2
=>
{
//sceneSortStatus,1上架
if
(
item2
.
config
.
sceneSortStatus
==
1
){
//显示排号信息
item
.
showSortInfo
=
true
//显示排号信息
item
.
showSortInfo
=
true
}
if
(
item2
.
sortFair
==
4
||
item2
.
sortFair
==
5
){
//时间判断,用于返程或第一次取号时,是否可以显示取号按钮
let
presentTime
=
new
Date
().
getTime
()
let
time1
=
new
Date
((
item2
.
createDate
).
replace
(
/-/g
,
'/'
)).
getTime
()
let
time2
=
parseInt
((
item2
.
config
.
paReturnTripTime
)
*
60
*
1000
)
let
takeNumberTime
=
time1
+
time2
if
(
presentTime
>
takeNumberTime
){
this
.
canTakeNumber
=
true
}
else
{
//倒计时
//1.先计算时间差多少秒
let
number
=
parseInt
((
takeNumberTime
-
presentTime
)
/
1000
)
this
.
countFlag
=
setInterval
(()
=>
{
number
-=
1
if
(
number
<
0
){
this
.
canTakeNumber
=
true
clearInterval
(
this
.
countFlag
)
return
}
this
.
minute
=
parseInt
(
number
/
60
)
this
.
second
=
parseInt
(
number
-
this
.
minute
*
60
)
},
1000
)
}
//时间判断,用于返程或第一次取号时,是否可以显示取号按钮
let
presentTime
=
new
Date
().
getTime
()
let
time1
=
new
Date
((
item2
.
createDate
).
replace
(
/-/g
,
'/'
)).
getTime
()
let
time2
=
parseInt
((
item2
.
config
.
paReturnTripTime
)
*
60
*
1000
)
let
takeNumberTime
=
time1
+
time2
if
(
presentTime
>
takeNumberTime
){
this
.
canTakeNumber
=
true
}
else
{
//倒计时
//1.先计算时间差多少秒
let
number
=
parseInt
((
takeNumberTime
-
presentTime
)
/
1000
)
this
.
countFlag
=
setInterval
(()
=>
{
number
-=
1
if
(
number
<
0
){
this
.
canTakeNumber
=
true
clearInterval
(
this
.
countFlag
)
return
}
this
.
minute
=
parseInt
(
number
/
60
)
this
.
second
=
parseInt
(
number
-
this
.
minute
*
60
)
},
1000
)
}
}
})
//子产品获取公司Id,用于重排号传参
if
(
dataObj
.
pays
.
length
>
0
){
item
.
merchantCodeCopy
=
dataObj
.
pays
[
0
].
companyId
}
//
//
子产品获取公司Id,用于重排号传参
//
if(dataObj.pays.length>0){
//
item.merchantCodeCopy = dataObj.pays[0].companyId
//
}
//子产品获取三方Id,用于重排号传参
item
.
thirdIdCopy
=
dataObj
.
order
.
orderId
//子产品获取站点编码,用于重排号传参
if
(
item
.
sorts
.
length
>
0
){
item
.
areaCodeCopy
=
item
.
sorts
[
0
].
projectId
}
this
.
$forceUpdate
()
}
catch
(
e
){
uni
.
showToast
({
title
:
e
,
icon
:
'none'
})
}
}
}
else
{
uni
.
showToast
({
title
:
res
.
message
,
icon
:
'none'
})
}
// if(item.sorts.length>0){
// item.areaCodeCopy=item.sorts[0].projectId
// }
this
.
$forceUpdate
()
//每两分钟刷新一次
this
.
numberFlag
=
setTimeout
(()
=>
{
this
.
getSortInfo
(
item
)
},
120
*
1000
)
}
}
else
{
uni
.
showToast
({
title
:
res
.
message
,
icon
:
'none'
})
}
}
catch
(
e
){
uni
.
showToast
({
title
:
e
,
icon
:
'none'
})
}
}).
catch
((
err
)
=>
{
this
.
numberTimer
=
setTimeout
(()
=>
{
this
.
getSortInfo
(
item
)
...
...
@@ -959,13 +975,16 @@ export default {
let
data
=
{
againNumber
:
1
,
thirdId
:
item
.
thirdIdCopy
,
//三方订单id
areaCode
:
item
.
areaCode
Copy
,
//站点
areaCode
:
item
.
areaCode
,
//站点
userId
:
this
.
openid
,
merchantCode
:
item
.
merchantCode
Copy
,
merchantCode
:
item
.
merchantCode
,
}
this
.
$request
(
'distribution/distribution/newFetchNumber'
,
data
).
then
((
res
)
=>
{
if
(
res
.
code
==
'00'
){
//隐藏弹窗
this
.
showModal
=
false
//隐藏取号按钮
item
.
showNumberBtn
=
false
this
.
getSortInfo
(
item
)
}
else
{
uni
.
showToast
({
...
...
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