Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
J
jd-vx-app
Project
Project
Details
Activity
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
Administrator
jd-vx-app
Commits
f8049575
Commit
f8049575
authored
Apr 27, 2022
by
程新智
👽
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
油画
parent
d2352ab7
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
252 additions
and
178 deletions
+252
-178
App.vue
App.vue
+4
-3
index.vue
pages/binding/index.vue
+6
-2
home.vue
pages/home.vue
+8
-2
main.vue
pages/main.vue
+59
-50
moveCar.vue
pages/moveCar.vue
+8
-2
personal.vue
pages/personal.vue
+5
-1
shop.vue
pages/shop.vue
+63
-41
getCarCode.vue
pagesA/pages/index/getCarCode.vue
+47
-38
ask.vue
pagesD/pages/personal/ask.vue
+52
-39
No files found.
App.vue
View file @
f8049575
...
...
@@ -2,9 +2,10 @@
export
default
{
onLaunch
:
function
()
{
uni
.
hideTabBar
()
}
},
onShow
:
function
()
{
uni
.
hideHomeButton
()
},
}
</
script
>
...
...
pages/binding/index.vue
View file @
f8049575
...
...
@@ -48,7 +48,7 @@
export
default
{
data
()
{
return
{
checked
:
fals
e
,
checked
:
tru
e
,
code
:
""
,
isCanUse
:
false
,
//默认为true
isCanUse2
:
false
,
//默认为true
...
...
@@ -312,7 +312,11 @@ button::after {
font-weight
:
500
;
color
:
#666666
;
line-height
:
36rpx
;
position
:
fixed
;
bottom
:
100rpx
;
left
:
0
;
right
:
0
;
margin
:
0
auto
;
span
{
color
:
rgb
(
0
,
81
,
255
);
}
...
...
pages/home.vue
View file @
f8049575
<
template
>
<view
class=
"appCotent"
>
<view
class=
"appCotent"
v-if=
"show"
>
<view
class=
"index-content"
>
<u-swiper
:radius=
"0"
:height=
"210"
:list=
"list5"
circular
:autoplay=
"false"
>
<u-swiper
:radius=
"0"
:height=
"210"
:list=
"list5"
circular
@
change=
"e => current = e.current"
:autoplay=
"false"
>
<view
slot=
"indicator"
class=
"indicator"
>
<view
class=
"indicator__dot"
v-for=
"(item, index) in list5"
:key=
"index"
:class=
"[index === current && 'indicator__dot--active']"
>
</view>
...
...
@@ -58,6 +58,7 @@
export
default
{
data
()
{
return
{
show
:
false
,
current
:
0
,
balance
:
"0.00"
,
list5
:
[],
...
...
@@ -111,6 +112,11 @@ export default {
this
.
getMoveCode
()
this
.
getRotationList
()
},
mounted
()
{
setTimeout
(()
=>
{
this
.
show
=
true
},
100
);
},
onReady
:
function
()
{
uni
.
setNavigationBarTitle
({
title
:
'首页'
...
...
pages/main.vue
View file @
f8049575
<
template
>
<view
class=
"main_content"
>
<index
v-if=
"tab=='index'"
></index>
<moveCar
v-if=
"tab=='moveCar'"
></moveCar>
<shop
v-if=
"tab=='shop'"
></shop>
<personal
v-if=
"tab=='personal'"
></personal>
<view
class=
"main_content"
>
<index
v-if=
"tab=='index'"
></index>
<moveCar
v-if=
"tab=='moveCar'"
></moveCar>
<shop
v-if=
"tab=='shop'"
></shop>
<personal
v-if=
"tab=='personal'"
></personal>
<u-gap
bgColor=
"transparent"
height=
"055"
></u-gap>
<view
class=
"tabbar"
>
<v-tabbar
:list=
"tabbar"
style=
"position:fixed;bottom:0;width:100%;left:0;right:0;"
@
tabChange=
"tabChange"
></v-tabbar>
<view
class=
"tabbar"
>
<v-tabbar
:list=
"tabbar"
style=
"position:fixed;bottom:0;width:100%;left:0;right:0;"
@
tabChange=
"tabChange"
></v-tabbar>
</view>
</view>
</view>
</
template
>
<
script
>
...
...
@@ -31,6 +31,7 @@ export default {
},
data
()
{
return
{
tab
:
"index"
,
}
},
...
...
@@ -41,8 +42,11 @@ export default {
tabbar
:
"tabbar"
})
},
onShow
:
function
()
{},
onShow
:
function
()
{
uni
.
hideHomeButton
()
},
methods
:
{
tabChange
(
index
)
{
let
that
=
this
switch
(
index
)
{
...
...
@@ -54,38 +58,43 @@ export default {
break
;
case
2
:
uni
.
scanCode
({
success
:
function
(
res
)
{
let
path
=
res
.
path
if
(
path
)
{
let
xcxIndexPath
=
uni
.
getStorageSync
(
'xcxIndexPath'
)
console
.
info
(
xcxIndexPath
);
if
(
xcxIndexPath
)
{
xcxIndexPath
=
path
.
replace
(
xcxIndexPath
,
''
).
replace
(
"?"
,
''
)
if
(
xcxIndexPath
.
indexOf
(
'scene'
)
>=
0
)
{
let
scene
=
xcxIndexPath
.
replace
(
'scene='
,
''
)
let
param
=
{
code
:
scene
}
let
opts
=
{
url
:
'/app/index/check/move/code'
,
method
:
'post'
}
console
.
log
(
param
);
that
.
http
.
httpTokenRequest
(
opts
,
param
).
then
(
res
=>
{
console
.
info
(
res
)
if
(
res
.
data
.
code
==
200
)
{
if
(
res
.
data
.
data
.
bindFlag
)
{
that
.
gotoMoveCar
(
scene
)
}
else
{
that
.
gotoBindMoveCar
(
scene
)
}
}
})
success
:
function
(
res
)
{
let
path
=
res
.
path
if
(
path
)
{
let
xcxIndexPath
=
uni
.
getStorageSync
(
'xcxIndexPath'
)
console
.
info
(
xcxIndexPath
);
if
(
xcxIndexPath
)
{
xcxIndexPath
=
path
.
replace
(
xcxIndexPath
,
''
).
replace
(
"?"
,
''
)
if
(
xcxIndexPath
.
indexOf
(
'scene'
)
>=
0
)
{
let
scene
=
xcxIndexPath
.
replace
(
'scene='
,
''
)
let
param
=
{
code
:
scene
}
let
opts
=
{
url
:
'/app/index/check/move/code'
,
method
:
'post'
}
console
.
log
(
param
);
that
.
http
.
httpTokenRequest
(
opts
,
param
).
then
(
res
=>
{
console
.
info
(
res
)
if
(
res
.
data
.
code
==
200
)
{
if
(
res
.
data
.
data
.
bindFlag
)
{
that
.
gotoMoveCar
(
scene
)
}
else
{
that
.
gotoBindMoveCar
(
scene
)
}
}
})
}
}
}
else
{
uni
.
showToast
({
title
:
'扫码失败'
,
icon
:
'none'
,
})
}
}
else
{
uni
.
showToast
({
title
:
'扫码失败'
,
icon
:
'none'
,
})
}
}
});
});
break
;
case
3
:
this
.
tab
=
'shop'
...
...
@@ -94,22 +103,22 @@ export default {
this
.
tab
=
'personal'
break
;
}
th
is
.
$forceUpdate
();
th
at
.
$forceUpdate
();
},
//跳转到挪车页面
gotoMoveCar
(
s
)
{
let
that
=
this
;
uni
.
navigateTo
({
gotoMoveCar
(
s
)
{
let
that
=
this
;
uni
.
navigateTo
({
url
:
'/pagesB/pages/move-car/oneMoveCar?scene='
+
s
});
},
//跳转到绑定页面
gotoBindMoveCar
(
s
)
{
let
that
=
this
;
uni
.
navigateTo
({
});
},
//跳转到绑定页面
gotoBindMoveCar
(
s
)
{
let
that
=
this
;
uni
.
navigateTo
({
url
:
'/pagesB/pages/move-car/scan?moveCode='
+
s
});
},
});
},
},
onLoad
()
{}
}
...
...
pages/moveCar.vue
View file @
f8049575
<
template
>
<view
class=
"appCotent"
>
<view
class=
"appCotent"
v-if=
"show"
>
<view
class=
"moveCar"
>
<div
class=
"move_car__content"
>
<div
class=
"menu__top"
@
click=
"goUrl(
{
...
...
@@ -34,6 +34,7 @@ url: '/pagesB/pages/move-car/loveCar',
export
default
{
data
()
{
return
{
show
:
false
,
items
:
[{
icon
:
require
(
"@/static/move-car/move-car6.png"
),
url
:
"/pagesB/pages/move-car/oneMoveCar"
,
...
...
@@ -126,7 +127,12 @@ export default {
uni
.
setNavigationBarTitle
({
title
:
'我要挪车'
});
}
},
mounted
()
{
setTimeout
(()
=>
{
this
.
show
=
true
},
100
);
},
};
</
script
>
...
...
pages/personal.vue
View file @
f8049575
...
...
@@ -3,7 +3,7 @@
* @Description: 个人中心
-->
<
template
>
<view
class=
"appCotent"
>
<view
class=
"appCotent"
v-if=
"show"
>
<view
class=
"content"
>
<view
class=
"personal"
>
<div
class=
"ps__bg"
>
...
...
@@ -64,6 +64,7 @@
export
default
{
data
()
{
return
{
show
:
false
,
menu
:
[{
icon
:
require
(
"@/static/my/my12.png"
),
title
:
"我的地址"
,
...
...
@@ -252,6 +253,9 @@ export default {
},
mounted
()
{
setTimeout
(()
=>
{
this
.
show
=
true
},
100
);
this
.
getUserInfo
()
},
onReady
:
function
()
{
...
...
pages/shop.vue
View file @
f8049575
<
template
>
<view
class=
"appCotent"
>
<view>
<view
class=
"shop"
>
<div
class=
"my__search"
@
click=
'goSearch'
>
<u-search
placeholder=
"搜搜你最想知道的"
:showAction=
'false'
bgColor=
'#ffffff'
v-model=
"keyword"
></u-search>
</div>
<div
class=
"shop__swiper"
>
<view
class=
"u-demo-block"
>
<u-swiper
:list=
"list3"
previousMargin=
"30"
nextMargin=
"30"
circular
:autoplay=
"false"
height=
'150'
radius=
"5"
bgColor=
"#ffffff"
></u-swiper>
</view>
</div>
<div
class=
"view__content"
>
<div
class=
"view__title"
>
超低价养车好物
</div>
<div
class=
"shop__list2"
>
<div
class=
"shop__item2"
v-for=
"(vo,inx) in mallList"
:key=
"inx"
@
click=
"goDetail(vo.id)"
>
<div
class=
"item2__img"
>
<image
:src=
"getImage(vo.mainImgUrl)"
/>
</div>
<div
class=
"item2__title"
>
{{
vo
.
title
}}
</div>
<div
class=
"item2__price"
>
¥
{{
vo
.
currentPrice
/
100
}}
</div>
</div>
<scroll-view
scroll-y=
"true"
:scroll-top=
"scrollTop"
@
scroll=
"scroll"
>
<view
class=
"appCotent"
v-if=
"isShow"
>
<view>
<view
class=
"shop"
>
<div
class=
"my__search"
@
click=
'goSearch'
>
<u-search
placeholder=
"搜搜你最想知道的"
:showAction=
'false'
bgColor=
'#ffffff'
v-model=
"keyword"
></u-search>
</div>
</div>
<div
class=
"shop__list__one"
>
<div
class=
"view__title"
>
车主精选 养车必备
</div>
<scroll-list
ref=
"list"
:option=
"option"
@
load=
"load"
>
<div
class=
"list__one__items"
>
<div
class=
"one__item"
v-for=
"(vo,inx) in boutiqueMallList"
:key=
"inx"
@
click=
"goDetail(vo.id)"
>
<div
class=
"one__item__img"
>
<div
class=
"shop__swiper"
>
<view
class=
"u-demo-block"
>
<u-swiper
:list=
"list3"
previousMargin=
"30"
nextMargin=
"30"
circular
:autoplay=
"false"
height=
'150'
radius=
"5"
bgColor=
"#ffffff"
></u-swiper>
</view>
</div>
<div
class=
"view__content"
>
<div
class=
"view__title"
>
超低价养车好物
</div>
<div
class=
"shop__list2"
>
<div
class=
"shop__item2"
v-for=
"(vo,inx) in mallList"
:key=
"inx"
@
click=
"goDetail(vo.id)"
>
<div
class=
"item2__img"
>
<image
:src=
"getImage(vo.mainImgUrl)"
/>
</div>
<div
class=
"one__item__title"
>
{{
vo
.
title
}}
</div>
<div
class=
"one__item__price"
>
¥
{{
vo
.
currentPrice
/
100
}}
<span
class=
"num__two"
>
¥
{{
vo
.
originalPrice
/
100
}}
</span>
</div>
<div
class=
"item2__title"
>
{{
vo
.
title
}}
</div>
<div
class=
"item2__price"
>
¥
{{
vo
.
currentPrice
/
100
}}
</div>
</div>
</div>
</scroll-list>
</div>
</div>
<div
class=
"shop__list__one"
>
<div
class=
"view__title"
>
车主精选 养车必备
</div>
<scroll-list
ref=
"list"
:option=
"option"
@
load=
"load"
>
<div
class=
"list__one__items"
v-if=
"boutiqueMallList.length>0"
>
<div
class=
"one__item"
v-for=
"(vo,inx) in boutiqueMallList"
:key=
"inx"
@
click=
"goDetail(vo.id)"
>
<div
class=
"one__item__img"
>
<image
:src=
"getImage(vo.mainImgUrl)"
/>
</div>
<div
class=
"one__item__title"
>
{{
vo
.
title
}}
</div>
<div
class=
"one__item__price"
>
¥
{{
vo
.
currentPrice
/
100
}}
<span
class=
"num__two"
>
¥
{{
vo
.
originalPrice
/
100
}}
</span>
</div>
</div>
</div>
</scroll-list>
</div>
</view>
<u-gap
bgColor=
"transparent"
height=
"60"
></u-gap>
</view>
<u-gap
bgColor=
"transparent"
height=
"60"
></u-gap>
</view>
</view>
</
scroll-
view>
</
template
>
<
script
>
export
default
{
data
()
{
return
{
isShow
:
false
,
scrollTop
:
0
,
old
:
{
scrollTop
:
0
},
option
:
{
size
:
10
,
auto
:
true
...
...
@@ -70,6 +74,16 @@ export default {
}
},
methods
:
{
scroll
:
function
(
e
)
{
this
.
old
.
scrollTop
=
e
.
detail
.
scrollTop
console
.
log
(
this
.
old
.
scrollTop
);
},
goTop
()
{
this
.
scrollTop
=
this
.
old
.
scrollTop
this
.
$nextTick
(
function
()
{
this
.
scrollTop
=
0
});
},
// 加载数据
load
(
paging
)
{
setTimeout
(()
=>
{
...
...
@@ -158,7 +172,13 @@ export default {
title
:
'精选商城'
});
},
created
()
{
this
.
goTop
()
},
mounted
()
{
setTimeout
(()
=>
{
this
.
isShow
=
true
},
100
);
this
.
getMallList
()
this
.
getRotationList
()
//this.getBoutiqueMallList()
...
...
@@ -274,9 +294,11 @@ export default {
justify-content
:
space-between
;
overflow
:
hidden
;
overflow-x
:
scroll
;
.shop__item2
{
width
:
24%
;
margin-right
:
1%
;
.item2__img
{
margin-bottom
:
20rpx
;
text-align
:
center
;
...
...
pagesA/pages/index/getCarCode.vue
View file @
f8049575
...
...
@@ -6,26 +6,7 @@
<view
class=
"appCotent"
>
<div
class=
"getCarCode"
>
<div
class=
"get__content"
>
<div
class=
"address"
v-if=
"addressShow"
@
click=
"goAddress"
>
<div
class=
"address__left"
>
<div
class=
"right__title"
>
{{
addressInfo
.
address
}}
 
{{
addressInfo
.
detailInfo
}}
</div>
<div
class=
"right__phone"
>
<span>
{{
addressInfo
.
userName
}}
</span>
<span>
{{
addressInfo
.
telNumber
}}
</span>
<span
v-if=
"addressInfo.defaultFlag"
>
默认
</span>
</div>
</div>
<div
class=
"address__right"
>
<image
src=
"@/static/index/right.png"
/>
</div>
<u-gap
bgColor=
"transparent"
height=
"15"
></u-gap>
</div>
<div
v-else
class=
"add__address"
@
click=
"addAddress"
>
<image
src=
"@/static/index/get-car-code5.png"
>
添加收货地址
</div>
<u-gap
bgColor=
"transparent"
height=
"15"
></u-gap>
<div
class=
"content__code"
>
<div
class=
"code__img"
>
<image
:src=
"freeCode.mainImgUrl"
class=
"code__img"
></image>
...
...
@@ -88,6 +69,26 @@
</div>
-->
</div>
</div>
<u-gap
bgColor=
"transparent"
height=
"100"
></u-gap>
<div
class=
"address"
v-if=
"addressShow"
@
click=
"goAddress"
>
<div
class=
"address__left"
>
<div
class=
"right__title"
>
{{
addressInfo
.
address
}}
 
{{
addressInfo
.
detailInfo
}}
</div>
<div
class=
"right__phone"
>
<span
v-if=
"addressInfo.defaultFlag"
>
默认
</span>
<span>
{{
addressInfo
.
userName
}}
</span>
<span>
{{
addressInfo
.
telNumber
}}
</span>
</div>
</div>
<div
class=
"address__right"
>
<image
src=
"@/static/index/right.png"
/>
</div>
<u-gap
bgColor=
"transparent"
height=
"15"
></u-gap>
</div>
<div
v-else
class=
"add__address"
@
click=
"addAddress"
>
<image
src=
"@/static/index/get-car-code5.png"
>
添加收货地址
</div>
</div>
</div>
<u-modal
:show=
"show"
:content=
'content'
@
confirm=
'show = false'
></u-modal>
...
...
@@ -440,6 +441,11 @@ export default {
display
:
flex
;
align-items
:
center
;
padding
:
30rpx
40rpx
;
position
:
fixed
;
bottom
:
200rpx
;
left
:
0
;
right
:
0
;
margin
:
0
auto
;
.address__left
{
width
:
600rpx
;
...
...
@@ -456,13 +462,17 @@ export default {
.right__phone
{
display
:
flex
;
align-items
:
center
;
span
{
padding-left
:
20rpx
;
}
span
:nth-of-type
(
1
)
{
font-size
:
28rpx
;
font-size
:
24rpx
;
font-family
:
PingFang
SC
;
font-weight
:
500
;
color
:
#666666
;
padding
:
0
14rpx
;
font-weight
:
bold
;
color
:
#F88D28
;
padding
:
2rpx
4rpx
;
border
:
1rpx
solid
#F88D28
;
}
span
:nth-of-type
(
2
)
{
...
...
@@ -473,13 +483,10 @@ export default {
}
span
:nth-of-type
(
3
)
{
font-size
:
2
4
rpx
;
font-size
:
2
8
rpx
;
font-family
:
PingFang
SC
;
font-weight
:
bold
;
color
:
#F88D28
;
margin-left
:
20rpx
;
padding
:
2rpx
4rpx
;
border
:
1rpx
solid
#F88D28
;
font-weight
:
500
;
color
:
#666666
;
}
}
}
...
...
@@ -493,6 +500,11 @@ export default {
}
.add__address
{
position
:
fixed
;
left
:
0
;
right
:
0
;
margin
:
0
auto
;
bottom
:
200rpx
;
width
:
670rpx
;
height
:
90rpx
;
background
:
#ffffff
;
...
...
@@ -683,13 +695,10 @@ export default {
.minus
{
width
:
22px
;
height
:
22px
;
border-width
:
1px
;
border-color
:
#E6E6E6
;
border-top-left-radius
:
100px
;
border-top-right-radius
:
100px
;
border-bottom-left-radius
:
100px
;
border-bottom-right-radius
:
100px
;
@include
flex
;
background
:
#e6e6e6
;
border-radius
:
50%
;
display
:
flex
;
color
:
#fff
;
justify-content
:
center
;
align-items
:
center
;
}
...
...
pagesD/pages/personal/ask.vue
View file @
f8049575
...
...
@@ -4,27 +4,27 @@
-->
<
template
>
<view
class=
"appCotent"
>
<div
class=
"pull"
>
<div
class=
"view__content"
>
<div
class=
"view__title"
>
问题/意见描述
<div
class=
"pull"
>
<div
class=
"view__content"
>
<div
class=
"view__title"
>
问题/意见描述
</div>
<div
class=
"why"
>
<u--textarea
maxlength=
'500'
count
v-model=
"feedback.fbContent"
placeholder=
"请填写10字以上的问题描述,以便我们更好地帮 您解决问题"
></u--textarea>
</div>
</div>
<div
class=
"why"
>
<u--textarea
maxlength=
'500'
count
v-model=
"feedback.fbContent"
placeholder=
"请填写10字以上的问题描述,以便我们更好地帮 您解决问题"
></u--textarea>
<div
class=
"view__content"
>
<div
class=
"view__title"
>
联系方式
</div>
<div
class=
"why"
>
<u--textarea
height=
'20'
v-model=
"feedback.contact"
placeholder=
"请填写您的手机号或邮箱,便于我们联系 您解决问题"
></u--textarea>
</div>
</div>
</div>
<div
class=
"view__content"
>
<div
class=
"view__title"
>
联系方式
</div>
<div
class=
"why"
>
<u--textarea
height=
'20'
v-model=
"feedback.contact"
placeholder=
"请填写您的手机号或邮箱,便于我们联系 您解决问题"
></u--textarea>
<div
class=
"view__btn view__no__bind"
@
click=
"addFeedback()"
>
提交
</div>
</div>
<div
class=
"view__btn view__no__bind"
@
click=
"addFeedback()"
>
提交
</div>
</div>
</view>
</
template
>
...
...
@@ -32,31 +32,43 @@
export
default
{
data
()
{
return
{
feedback
:
{
//反馈内容
fbContent
:
''
,
//联系方式
contact
:
''
,
},
feedback
:
{
//反馈内容
fbContent
:
''
,
//联系方式
contact
:
''
,
},
};
},
methods
:
{
addFeedback
(){
let
opts
=
{
url
:
'/app/user/feedback'
,
method
:
'post'
};
this
.
http
.
httpTokenRequest
(
opts
,
this
.
feedback
).
then
(
res
=>
{
if
(
res
.
data
.
code
==
200
)
{
uni
.
showToast
({
title
:
'提交成功'
,
icon
:
'success'
,
})
}
else
{
uni
.
showToast
({
title
:
'提交失败'
,
icon
:
'error'
,
})
}
})
}
addFeedback
()
{
let
regChinese
=
/^
[^\u
4e00-
\u
9fa5
]{0,}
$/
;
let
checkChinese
=
regChinese
.
test
(
this
.
feedback
.
contact
);
if
(
!
checkChinese
){
uni
.
showToast
({
title
:
'请填写正确的联系方式'
,
icon
:
'none'
,
})
return
;
}
let
opts
=
{
url
:
'/app/user/feedback'
,
method
:
'post'
};
this
.
http
.
httpTokenRequest
(
opts
,
this
.
feedback
).
then
(
res
=>
{
if
(
res
.
data
.
code
==
200
)
{
uni
.
showToast
({
title
:
'提交成功'
,
icon
:
'success'
,
})
}
else
{
uni
.
showToast
({
title
:
'提交失败'
,
icon
:
'error'
,
})
}
})
}
},
}
</
script
>
...
...
@@ -80,6 +92,7 @@ export default {
border-radius
:
20rpx
;
padding
:
30rpx
;
margin-bottom
:
30rpx
;
.view__title
{
font-size
:
32rpx
;
font-family
:
PingFang
SC
;
...
...
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