Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
5
51business
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
方斌
51business
Commits
3b706e0c
Commit
3b706e0c
authored
Apr 15, 2019
by
李尚科
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
https://t-git.51gjj.com/fangbin/51business
parents
b5311abb
e13f3b99
Pipeline
#5974
passed with stage
in 2 seconds
Changes
4
Pipelines
1
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
72 additions
and
93 deletions
+72
-93
new_house.js
app/controller/house/new_house.js
+12
-19
house.js
app/router/house.js
+0
-1
mine.js
app/service/house/mine.js
+5
-3
new_house.js
app/service/house/new_house.js
+55
-70
No files found.
app/controller/house/new_house.js
View file @
3b706e0c
...
@@ -3,22 +3,6 @@
...
@@ -3,22 +3,6 @@
const
Controller
=
require
(
'egg'
).
Controller
;
const
Controller
=
require
(
'egg'
).
Controller
;
class
NewHouseController
extends
Controller
{
class
NewHouseController
extends
Controller
{
/**
* 新房列表
* 全部all 在售sale 最近开盘open 优惠favourtable 首页home
*/
async
getNewHouseListByType
()
{
const
{
ctx
}
=
this
;
let
inputParams
=
ctx
.
params
;
const
rule
=
{
type
:
{
type
:
'string'
,
required
:
true
},
};
ctx
.
validate
(
rule
,
inputParams
);
const
ret
=
await
ctx
.
service
.
house
.
newHouse
.
getNewHouseListByType
(
inputParams
.
type
);
ctx
.
success
(
ret
);
}
/**
/**
* 根据筛选条件获得新房列表
* 根据筛选条件获得新房列表
*/
*/
...
@@ -26,16 +10,25 @@ class NewHouseController extends Controller {
...
@@ -26,16 +10,25 @@ class NewHouseController extends Controller {
const
{
ctx
}
=
this
;
const
{
ctx
}
=
this
;
let
inputParams
=
ctx
.
request
.
body
;
let
inputParams
=
ctx
.
request
.
body
;
const
rule
=
{
const
rule
=
{
page
:
{
type
:
'string'
,
required
:
false
},
//页面
page_size
:
{
type
:
'string'
,
required
:
false
},
//条数
area_code
:
{
type
:
'string'
,
required
:
false
},
//区域
area_code
:
{
type
:
'string'
,
required
:
false
},
//区域
unit_price
:
{
type
:
'object'
,
required
:
false
},
//价格
unit_price
:
{
type
:
'object'
,
required
:
false
},
//价格
total_price
:
{
type
:
'object'
,
required
:
false
},
//总价
total_price
:
{
type
:
'object'
,
required
:
false
},
//总价
area
:
{
type
:
'object'
,
required
:
false
},
//面积
area
:
{
type
:
'object'
,
required
:
false
},
//面积
house_type
:
{
type
:
'string'
,
required
:
false
},
//房型
house_type
:
{
type
:
'string'
,
required
:
false
},
//房型
page
:
{
type
:
'string'
,
required
:
false
},
//页面
page_size
:
{
type
:
'string'
,
required
:
false
},
//条数
//通过type选择指定内容 全部all 在售sale 最近开盘open 优惠favourtable 首页home,和上面的筛选项互斥
type
:
{
type
:
'string'
,
required
:
false
},
//
};
};
ctx
.
validate
(
rule
,
inputParams
);
ctx
.
validate
(
rule
,
inputParams
);
const
ret
=
await
ctx
.
service
.
house
.
newHouse
.
getNewHouseList
(
inputParams
);
let
ret
=
{};
if
(
inputParams
.
hasOwnProperty
(
'type'
)
&&
inputParams
.
type
!==
''
)
{
ret
=
await
ctx
.
service
.
house
.
newHouse
.
getNewHouseListByType
(
inputParams
);
}
else
{
ret
=
await
ctx
.
service
.
house
.
newHouse
.
getNewHouseList
(
inputParams
);
}
ctx
.
success
(
ret
);
ctx
.
success
(
ret
);
}
}
...
...
app/router/house.js
View file @
3b706e0c
...
@@ -17,7 +17,6 @@ module.exports = app => {
...
@@ -17,7 +17,6 @@ module.exports = app => {
//新房
//新房
router
.
get
(
'/new_house/list/:type'
,
'house.newHouse.getNewHouseListByType'
);
//某个指定列表
router
.
post
(
'/new_house/list'
,
'house.newHouse.getNewHouseList'
);
//根据条件筛选列表
router
.
post
(
'/new_house/list'
,
'house.newHouse.getNewHouseList'
);
//根据条件筛选列表
router
.
get
(
'/new_house/:id'
,
'house.newHouse.getNewHouse'
);
//新房具体信息
router
.
get
(
'/new_house/:id'
,
'house.newHouse.getNewHouse'
);
//新房具体信息
router
.
get
(
'/new_house_type/:id'
,
'house.newHouse.getNewHouseType'
);
//新房户型
router
.
get
(
'/new_house_type/:id'
,
'house.newHouse.getNewHouseType'
);
//新房户型
...
...
app/service/house/mine.js
View file @
3b706e0c
...
@@ -10,6 +10,7 @@ class MineService extends Service {
...
@@ -10,6 +10,7 @@ class MineService extends Service {
async
getMineInfo
()
{
async
getMineInfo
()
{
const
{
ctx
,
service
}
=
this
;
const
{
ctx
,
service
}
=
this
;
let
ret
=
{
let
ret
=
{
login
:
false
,
user
:
{
user
:
{
nickname
:
''
,
nickname
:
''
,
avatar
:
''
,
avatar
:
''
,
...
@@ -18,15 +19,15 @@ class MineService extends Service {
...
@@ -18,15 +19,15 @@ class MineService extends Service {
classification
:
{
classification
:
{
foot_print
:
{
foot_print
:
{
count
:
0
,
count
:
0
,
n
e
me
:
'浏览足迹'
n
a
me
:
'浏览足迹'
},
},
collection
:
{
collection
:
{
count
:
0
,
count
:
0
,
n
e
me
:
'关注的房产'
n
a
me
:
'关注的房产'
},
},
order
:
{
order
:
{
count
:
0
,
count
:
0
,
n
e
me
:
'预约记录'
n
a
me
:
'预约记录'
},
},
}
}
}
}
...
@@ -42,6 +43,7 @@ class MineService extends Service {
...
@@ -42,6 +43,7 @@ class MineService extends Service {
if
(
phone
.
length
>
0
)
{
if
(
phone
.
length
>
0
)
{
phone
=
phone
.
substing
(
0
,
2
)
+
phone
.
substing
(
7
,
10
);
phone
=
phone
.
substing
(
0
,
2
)
+
phone
.
substing
(
7
,
10
);
}
}
ret
.
login
=
true
;
ret
.
user
.
nickname
=
appUserInfo
.
nickname
||
''
;
ret
.
user
.
nickname
=
appUserInfo
.
nickname
||
''
;
ret
.
user
.
avatar
=
appUserInfo
.
avatar
||
''
;
ret
.
user
.
avatar
=
appUserInfo
.
avatar
||
''
;
ret
.
user
.
avatar
=
phone
;
ret
.
user
.
avatar
=
phone
;
...
...
app/service/house/new_house.js
View file @
3b706e0c
...
@@ -57,7 +57,7 @@ class NewHouseService extends Service {
...
@@ -57,7 +57,7 @@ class NewHouseService extends Service {
}
}
}
}
//户型信息
//户型信息
let
newHouseType
=
await
this
.
formatNewHouseTypeList
(
newHouseInfo
.
newHouseType
);
let
newHouseType
=
await
this
.
formatNewHouseTypeList
(
newHouseInfo
);
//是否关注
//是否关注
let
collectionFilter
=
{
type
:
1
,
id
:
id
}
let
collectionFilter
=
{
type
:
1
,
id
:
id
}
let
collection
=
await
service
.
house
.
collection
.
getCollection
(
collectionFilter
);
let
collection
=
await
service
.
house
.
collection
.
getCollection
(
collectionFilter
);
...
@@ -103,13 +103,18 @@ class NewHouseService extends Service {
...
@@ -103,13 +103,18 @@ class NewHouseService extends Service {
*/
*/
async
formatNewHouse
(
data
)
{
async
formatNewHouse
(
data
)
{
const
{
ctx
,
service
}
=
this
;
const
{
ctx
,
service
}
=
this
;
ctx
.
logger
.
info
(
data
);
const
saleType
=
{
0
:
'未开售'
,
1
:
'售罄'
,
2
:
'预售'
,
3
:
'在售'
};
const
saleType
=
{
0
:
'未开售'
,
1
:
'售罄'
,
2
:
'预售'
,
3
:
'在售'
};
const
decorationType
=
{
1
:
'毛坯'
,
2
:
'简装'
,
3
:
'精装'
}
const
decorationType
=
{
1
:
'毛坯'
,
2
:
'简装'
,
3
:
'精装'
}
const
archType
=
{
1
:
'板楼'
,
2
:
'塔楼'
};
const
archType
=
{
1
:
'板楼'
,
2
:
'塔楼'
};
const
houseType
=
{
1
:
'住宅'
,
2
:
'公寓'
};
const
houseType
=
{
1
:
'住宅'
,
2
:
'公寓'
};
let
ret
=
{};
let
ret
=
{};
if
(
Object
.
keys
(
data
).
length
>
0
)
{
if
(
Object
.
keys
(
data
).
length
>
0
)
{
//开发商整理
let
developer
=
[];
let
developerinfo
=
data
.
residential
.
residentialDeveloper
for
(
let
i
in
developerinfo
)
{
developer
.
push
(
developerinfo
[
i
].
developer
.
name
);
}
ret
.
basic
=
{
ret
.
basic
=
{
id
:
data
.
id
,
id
:
data
.
id
,
name
:
data
.
name
,
//标题
name
:
data
.
name
,
//标题
...
@@ -118,14 +123,14 @@ class NewHouseService extends Service {
...
@@ -118,14 +123,14 @@ class NewHouseService extends Service {
favourable_info
:
data
.
favourableInfo
,
//优惠
favourable_info
:
data
.
favourableInfo
,
//优惠
reference_avg_price
:
data
.
referenceAvgPrice
,
//均价
reference_avg_price
:
data
.
referenceAvgPrice
,
//均价
reference_total_price
:
data
.
referenceTotalPrice
,
//总价
reference_total_price
:
data
.
referenceTotalPrice
,
//总价
property_type
:
houseType
[
data
.
houseType
],
//物业类型
property_type
:
houseType
[
data
.
houseType
]
||
''
,
//物业类型
}
}
ret
.
info
=
{
ret
.
info
=
{
open_date
:
data
.
openDate
,
//开盘时间
open_date
:
data
.
openDate
,
//开盘时间
due_date
:
data
.
dueDate
,
//交房时间
due_date
:
data
.
dueDate
,
//交房时间
house_area
:
data
.
houseArea
,
//建筑面积
house_area
:
data
.
houseArea
,
//建筑面积
decoration
:
decorationType
[
data
.
decorationType
],
//装修情况,1 毛坯,2简装,3精装
decoration
:
decorationType
[
data
.
decorationType
]
||
''
,
//装修情况,1 毛坯,2简装,3精装
green_ratio
:
data
.
greenRatio
,
//绿化
green_ratio
:
data
.
greenRatio
,
//绿化
area_ratio
:
data
.
areaRatio
,
//容积
area_ratio
:
data
.
areaRatio
,
//容积
address
:
data
.
address
,
//地址
address
:
data
.
address
,
//地址
...
@@ -134,16 +139,16 @@ class NewHouseService extends Service {
...
@@ -134,16 +139,16 @@ class NewHouseService extends Service {
basic
:
{
basic
:
{
reference_avg_price
:
data
.
referenceAvgPrice
,
//均价
reference_avg_price
:
data
.
referenceAvgPrice
,
//均价
tags
:
data
.
tags
.
split
(
','
),
//项目特色
tags
:
data
.
tags
.
split
(
','
),
//项目特色
property_type
:
houseType
[
data
.
houseType
],
//物业类型
property_type
:
houseType
[
data
.
houseType
]
||
''
,
//物业类型
property_right_years
:
data
.
residential
.
propertyRightYears
,
//产权年限
property_right_years
:
data
.
residential
.
propertyRightYears
,
//产权年限
build_type
:
archType
[
data
.
residential
.
ArchType
]
,
//建筑类型 1 板楼 2塔楼'
build_type
:
archType
[
data
.
residential
.
archType
]
||
''
,
//建筑类型 1 板楼 2塔楼'
decoration
:
decorationType
[
data
.
decorationType
],
//装修情况,1 毛坯,2简装,3精装
decoration
:
decorationType
[
data
.
decorationType
]
||
''
,
//装修情况,1 毛坯,2简装,3精装
},
},
sale
:
{
sale
:
{
sale_type
:
saleType
[
data
.
saleType
],
//销售状态 0未开售,1售罄,2预售,3在售
sale_type
:
saleType
[
data
.
saleType
]
||
''
,
//销售状态 0未开售,1售罄,2预售,3在售
address
:
data
.
address
,
//地址
address
:
data
.
address
,
//地址
sale_address
:
data
.
saleAddress
,
//售楼地址
sale_address
:
data
.
saleAddress
,
//售楼地址
developer
:
''
,
//开发商
developer
:
developer
,
//开发商
open_date
:
data
.
openDate
,
//开盘时间
open_date
:
data
.
openDate
,
//开盘时间
due_date
:
data
.
dueDate
,
//交房时间
due_date
:
data
.
dueDate
,
//交房时间
},
},
...
@@ -175,13 +180,15 @@ class NewHouseService extends Service {
...
@@ -175,13 +180,15 @@ class NewHouseService extends Service {
* 对newHouseTypeList格式化
* 对newHouseTypeList格式化
* @param {object} newHouseTypeList
* @param {object} newHouseTypeList
*/
*/
async
formatNewHouseTypeList
(
newHouse
TypeList
)
{
async
formatNewHouseTypeList
(
newHouse
Info
)
{
const
{
ctx
,
service
}
=
this
;
const
{
ctx
,
service
}
=
this
;
let
newHouseTypeList
=
newHouseInfo
.
newHouseType
;
//数据格式化
//数据格式化
let
retList
=
[];
let
retList
=
[];
if
(
newHouseTypeList
.
length
>
0
)
{
if
(
newHouseTypeList
.
length
>
0
)
{
let
taskList
=
[];
let
taskList
=
[];
for
(
let
i
in
newHouseTypeList
)
{
for
(
let
i
in
newHouseTypeList
)
{
newHouseTypeList
[
i
].
houseType
=
newHouseInfo
.
houseType
;
taskList
[
i
]
=
this
.
formatNewHouseType
(
newHouseTypeList
[
i
]);
taskList
[
i
]
=
this
.
formatNewHouseType
(
newHouseTypeList
[
i
]);
}
}
...
@@ -228,15 +235,17 @@ class NewHouseService extends Service {
...
@@ -228,15 +235,17 @@ class NewHouseService extends Service {
async
formatNewHouseType
(
data
)
{
async
formatNewHouseType
(
data
)
{
const
{
ctx
}
=
this
;
const
{
ctx
}
=
this
;
const
saleType
=
{
0
:
'未开售'
,
1
:
'售罄'
,
2
:
'预售'
,
3
:
'在售'
};
const
saleType
=
{
0
:
'未开售'
,
1
:
'售罄'
,
2
:
'预售'
,
3
:
'在售'
};
const
houseType
=
{
1
:
'住宅'
,
2
:
'公寓'
};
let
ret
=
{};
let
ret
=
{};
if
(
Object
.
keys
(
data
).
length
>
0
)
{
if
(
Object
.
keys
(
data
).
length
>
0
)
{
ret
=
{
ret
=
{
id
:
data
.
id
,
id
:
data
.
id
,
newHouseId
:
data
.
newHouseId
,
newHouseId
:
data
.
newHouseId
,
type
:
data
.
type
,
//类型,如三居、四居
type
:
data
.
type
,
//类型,如三居、四居
house_type
:
houseType
[
data
.
houseType
]
||
''
,
image
:
data
.
image
,
image
:
data
.
image
,
apartment
:
data
.
apartment
,
//户型,如4室2厅3卫
apartment
:
data
.
apartment
,
//户型,如4室2厅3卫
sale_type
:
saleType
[
data
.
saleType
],
sale_type
:
saleType
[
data
.
saleType
]
||
''
,
area
:
data
.
area
,
//面积
area
:
data
.
area
,
//面积
orientation
:
data
.
orientation
,
//朝向
orientation
:
data
.
orientation
,
//朝向
num
:
data
.
num
,
//房源数量
num
:
data
.
num
,
//房源数量
...
@@ -303,13 +312,13 @@ class NewHouseService extends Service {
...
@@ -303,13 +312,13 @@ class NewHouseService extends Service {
if
(
condition
.
area
)
{
//面积
if
(
condition
.
area
)
{
//面积
filter
.
queryConditions
.
push
(
filter
.
queryConditions
.
push
(
{
{
key
:
'
a
rea'
,
key
:
'
houseA
rea'
,
value
:
condition
.
area
.
min
,
value
:
condition
.
area
.
min
,
operator
:
'greaterEqual'
,
operator
:
'greaterEqual'
,
},
},
{
{
key
:
'
a
rea'
,
key
:
'
houseA
rea'
,
value
:
condition
.
area
.
m
in
,
value
:
condition
.
area
.
m
ax
,
operator
:
'lessEqual'
,
operator
:
'lessEqual'
,
})
})
;
;
...
@@ -347,94 +356,70 @@ class NewHouseService extends Service {
...
@@ -347,94 +356,70 @@ class NewHouseService extends Service {
* 根据不同筛选获取列表
* 根据不同筛选获取列表
* @param {*} type 四种默认的按钮筛选 全部all 在售sale 最近开盘open 优惠favourable 首页home
* @param {*} type 四种默认的按钮筛选 全部all 在售sale 最近开盘open 优惠favourable 首页home
*/
*/
async
getNewHouseListByType
(
type
)
{
async
getNewHouseListByType
(
condition
)
{
const
{
ctx
}
=
this
;
const
{
ctx
,
service
}
=
this
;
let
types
=
[
'all'
,
'sale'
,
'open'
,
'favourable'
,
'home'
];
let
types
=
[
'all'
,
'sale'
,
'open'
,
'favourable'
,
'home'
];
if
(
!
types
.
includes
(
type
))
{
if
(
!
condition
.
hasOwnProperty
(
'type'
)
||
!
types
.
includes
(
condition
.
type
))
{
ctx
.
failed
(
'error list type'
);
ctx
.
failed
(
'error or empty list type'
);
}
let
type
=
condition
.
type
;
let
page
=
Number
(
condition
.
page
)
||
1
;
let
pageSize
=
Number
(
condition
.
page_size
)
||
30
;
let
filter
=
{
pageIndex
:
page
,
pageSize
:
pageSize
,
queryConditions
:
[{
key
:
"state"
,
value
:
1
,
operator
:
"equal"
},],
orderConditions
:
[],
}
}
let
newHouseList
=
[];
let
condition
=
{};
if
(
type
===
'home'
)
{
if
(
type
===
'home'
)
{
//为您推荐只展示50条在售楼盘的数据,根据排序序号取数,数字小的排在前面,数字一样的情况下根据时间逆序排列,时间也一样的情况下随机排列;
//为您推荐只展示50条在售楼盘的数据,根据排序序号取数,数字小的排在前面,数字一样的情况下根据时间逆序排列,时间也一样的情况下随机排列;
condition
=
{
filter
.
pageSize
=
Number
(
condition
.
page_size
)
||
50
;
pageSize
:
50
,
filter
.
orderConditions
.
push
({
orderConditions
:
[{
key
:
'orderNum'
,
key
:
'orderNum'
,
orderSequence
:
'asc'
,
orderSequence
:
'asc'
,
},
{
},
{
key
:
'createdAt'
,
key
:
'createdAt'
,
orderSequence
:
'desc'
,
orderSequence
:
'desc'
,
},]
});
};
}
else
if
(
type
===
'all'
)
{
}
else
if
(
type
===
'all'
)
{
condition
=
{
filter
.
orderConditions
.
push
({
orderConditions
:
[{
key
:
'saleType'
,
key
:
'saleType'
,
orderSequence
:
'desc'
,
orderSequence
:
'desc'
,
},]
});
};
}
else
if
(
type
===
'sale'
)
{
}
else
if
(
type
===
'sale'
)
{
//点击在售楼盘进入列表页面且只展示当前销售状态为在售的楼盘
//点击在售楼盘进入列表页面且只展示当前销售状态为在售的楼盘
condition
=
{
filter
.
queryConditions
.
push
({
queryConditions
:
[{
key
:
"saleType"
,
key
:
"saleType"
,
value
:
'3'
,
value
:
'3'
,
operator
:
"equal"
operator
:
"equal"
}],
});
};
}
else
if
(
type
===
'open'
)
{
}
else
if
(
type
===
'open'
)
{
//只展示最近三个月内开盘的楼盘,往前追溯三个月,列表单次加载30条楼盘数据,滑到底部再次加载30条
//只展示最近三个月内开盘的楼盘,往前追溯三个月,列表单次加载30条楼盘数据,滑到底部再次加载30条
let
endDate
=
moment
().
subtract
(
30
,
'days'
).
format
(
'YYYY-MM-DD HH:mm:ss'
);
let
endDate
=
moment
().
subtract
(
30
,
'days'
).
format
(
'YYYY-MM-DD HH:mm:ss'
);
condition
=
{
filter
.
queryConditions
.
push
({
queryConditions
:
[{
key
:
"openDate"
,
key
:
"openDate"
,
value
:
endDate
,
value
:
endDate
,
operator
:
"greater"
operator
:
"greater"
}],
});
orderConditions
:
[
{
filter
.
orderConditions
.
push
(
{
key
:
'saleType'
,
key
:
'saleType'
,
orderSequence
:
'desc'
,
orderSequence
:
'desc'
,
},]
})
};
}
else
if
(
type
===
'favourable'
)
{
}
else
if
(
type
===
'favourable'
)
{
//点击优惠好盘只展示有优惠的楼盘,列表单次加载30条楼盘数据,滑到底部再次加载30条
//点击优惠好盘只展示有优惠的楼盘,列表单次加载30条楼盘数据,滑到底部再次加载30条
condition
=
{
filter
.
queryConditions
.
push
({
queryConditions
:
[{
key
:
"favourableInfo"
,
key
:
"favourableInfo"
,
value
:
false
,
value
:
false
,
operator
:
"isnull"
operator
:
"isnull"
}],
});
orderConditions
:
[
{
filter
.
orderConditions
.
push
(
{
key
:
'saleType'
,
key
:
'saleType'
,
orderSequence
:
'desc'
,
orderSequence
:
'desc'
,
},]
});
};
}
newHouseList
=
await
this
.
getNewHouseByFilter
(
condition
);
return
newHouseList
;
}
async
getNewHouseByFilter
(
condition
)
{
const
{
ctx
,
service
}
=
this
;
let
page
=
Number
(
condition
.
page
)
||
1
;
let
pageSize
=
Number
(
condition
.
pageSize
)
||
30
;
let
filter
=
{
pageIndex
:
page
,
pageSize
:
pageSize
,
queryConditions
:
[{
key
:
"state"
,
value
:
1
,
operator
:
"equal"
},],
orderConditions
:
[],
}
if
(
condition
.
hasOwnProperty
(
'queryConditions'
))
{
filter
.
queryConditions
=
filter
.
queryConditions
.
concat
(
condition
.
queryConditions
);
}
if
(
condition
.
hasOwnProperty
(
'orderConditions'
))
{
filter
.
orderConditions
=
filter
.
orderConditions
.
concat
(
condition
.
orderConditions
);
}
}
let
newHouseList
=
await
service
.
houseCommon
.
newHouse
.
all
(
filter
);
let
newHouseList
=
await
service
.
houseCommon
.
newHouse
.
all
(
filter
);
let
list
=
[];
let
list
=
[];
...
...
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