Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
self-support
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
李俊赕
self-support
Commits
9476107a
Commit
9476107a
authored
Apr 29, 2021
by
Morson
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
https://git.banshouhui.com/lijundan/self-support
parents
88bf579f
9e6ad67d
Changes
10
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
215 additions
and
111 deletions
+215
-111
.env.dev.js
.env.dev.js
+13
-13
order.js
src/common/api/order.js
+53
-24
appoint-time.vue
src/components/appoint/appoint-time.vue
+4
-0
index.vue
src/components/order/index.vue
+2
-3
noOrder.vue
src/components/order/noOrder.vue
+1
-1
index.vue
src/components/tabBarList/index.vue
+3
-2
index.vue
src/pages/index/index.vue
+57
-20
complete.vue
src/pages/order/complete.vue
+16
-1
detail.vue
src/pages/order/detail.vue
+54
-37
index.vue
src/pages/order/index.vue
+12
-10
No files found.
.env.dev.js
View file @
9476107a
...
...
@@ -9,6 +9,6 @@ const UNI_APP = {
// apiUrl: 'http://apidoc.banshouhui.com:3000/mock/31', // mock端域名请求头
},
qn_base_url
:
'https://qn-static.banshouhui.com/self-support/'
,
qn_asset_url
:
'http://deudn.c.pp.cc/'
qn_asset_url
:
'http://deudn.c.pp.cc/'
,
}
module
.
exports
=
UNI_APP
;
src/common/api/order.js
View file @
9476107a
...
...
@@ -95,6 +95,31 @@ let orderApiFun = function(vm){
*/
let
getSignDistance
=
async
(
params
=
{})
=>
await
vm
.
$u
.
get
(
'/wxh-worker-rest/rest/'
+
vm
.
vuex_token
+
`/wokerOrder/sign/distance`
,
params
)
/**
* 获取订单的完工项目(配置+数据)
*/
let
getCompleteConfigAndData
=
async
(
orderId
)
=>
await
vm
.
$u
.
get
(
prefix
+
vm
.
vuex_token
+
'/order/'
+
orderId
+
'/maintain/info'
);
/**
* 查询措施
*/
let
getMeasure
=
async
(
params
=
{})
=>
await
vm
.
$u
.
get
(
'wxh-worker-rest/rest/service/'
+
vm
.
vuex_token
+
'/measure/queryMeasureItems'
,
params
);
/**
* 保存售后记录
*/
let
saveCompleteData
=
async
(
params
=
{},
orderId
)
=>
await
vm
.
$u
.
post
(
prefix
+
vm
.
vuex_token
+
'/order/'
+
orderId
+
'/maintain/saveMaintainInfoV2'
,
params
);
/**
* 保内工单完工
*/
let
inOrderFinish
=
async
(
orderId
)
=>
await
vm
.
$u
.
post
(
prefix
+
vm
.
vuex_token
+
'/order/'
+
orderId
+
'/finishedAndConfirm'
,{},
{
'content-type'
:
'application/x-www-form-urlencoded'
});
/**
* 保外工单完工
*/
let
outOrderFinish
=
async
(
params
=
{},
orderId
)
=>
await
vm
.
$u
.
post
(
prefix
+
vm
.
vuex_token
+
'/order/'
+
orderId
+
'/v1/finishedAndConfirmOutGuaranteePeriod'
,
params
,
{
'content-type'
:
'application/x-www-form-urlencoded'
});
const
orderApi
=
{
listByRecommendOrder
,
listOrderCount
,
...
...
@@ -106,7 +131,6 @@ let orderApiFun = function(vm){
listOrderRecord
,
orderAccept
,
orderGan
,
maintainWorkerCheckin
,
feedbackConfig
,
traceAndAppointment
,
rejectOrder
,
...
...
@@ -116,7 +140,12 @@ let orderApiFun = function(vm){
openTimerange
,
contactTime
,
checkRejectable
,
getSignDistance
getSignDistance
,
getCompleteConfigAndData
,
getMeasure
,
saveCompleteData
,
inOrderFinish
,
outOrderFinish
}
return
orderApi
}
...
...
src/components/appoint/appoint-time.vue
View file @
9476107a
...
...
@@ -302,6 +302,10 @@
/
deep
/
button
[
plain
]
{
border
:
none
;
}
button
[
disabled
]
:not
([
type
])
{
background
:
#d1d4d4
;
color
:
#ffffff
;
}
}
}
</
style
>
src/components/order/index.vue
View file @
9476107a
...
...
@@ -125,8 +125,8 @@
}
},
showCountTime
()
{
return
[
1
,
2
,
3
].
indexOf
(
this
.
orderType
)
!=
-
1
||
(
this
.
orderType
==
0
&&
this
.
orderData
.
orderBusinessType
!=
'R'
)
return
(
[
1
,
2
,
3
].
indexOf
(
this
.
orderType
)
!=
-
1
||
(
this
.
orderType
==
0
&&
this
.
orderData
.
orderBusinessType
!=
'R'
)
)
&&
this
.
orderData
.
currentOverTime
},
showTime
()
{
return
[
4
,
5
,
6
].
indexOf
(
this
.
orderType
)
!=
-
1
...
...
@@ -248,7 +248,6 @@
this
.
$emit
(
'click'
)
},
handleChange
(
timestamp
)
{
console
.
log
(
timestamp
)
if
(
this
.
timeout
)
this
.
$refs
[
'order-count-down'
].
seconds
+=
2
if
(
timestamp
==
0
&&
!
this
.
timeout
)
{
setTimeout
(()
=>
{
...
...
src/components/order/noOrder.vue
View file @
9476107a
...
...
@@ -36,7 +36,7 @@
.no-order-image
{
width
:
374rpx
;
height
:
218rpx
;
margin-top
:
6
0rpx
;
margin-top
:
5
0rpx
;
margin-bottom
:
20rpx
;
}
}
...
...
src/components/tabBarList/index.vue
View file @
9476107a
...
...
@@ -32,11 +32,12 @@
<
style
lang=
"scss"
scoped
>
.content
{
height
:
100vh
;
// height: 100vh;
background-color
:
#f4f5f7
;
padding
:
0rpx
30rpx
0
30rpx
;
overflow-y
:
auto
;
//
overflow-y: auto;
&
.fixed
{
height
:
100vh
;
display
:
flex
;
flex-direction
:
column
;
}
...
...
src/pages/index/index.vue
View file @
9476107a
<
template
>
<scroll-view
scroll-y
style=
"margin-bottom: 20rpx;height: 100vh;"
@
scrolltolower=
"reachBottom"
scroll-anchoring
scroll-y=
"true"
refresher-enabled=
"true"
:refresher-triggered=
"triggered"
:refresher-threshold=
"100"
refresher-background=
"#F4F5F7"
@
refresherpulling=
"triggered = true"
@
refresherrefresh=
"onRefresh"
@
refresherrestore=
"onRestore"
@
refresherabort=
"onAbort"
>
<TabBarPage
title=
"充电桩自营平台"
>
<image
class=
"banner-image"
:src=
"bannerImage"
></image>
...
...
@@ -41,15 +45,15 @@
<NoOrder
/>
</view>
<view
v-else
class=
"order-item-view"
>
<
scroll-view
scroll-y
style=
"height: 100%;width: 100%
;"
@
scrolltolower=
"reachBottom"
scroll-anchoring
>
<
!--
<scroll-view
scroll-y
style=
"margin-bottom: 20rpx
;"
@
scrolltolower=
"reachBottom"
scroll-anchoring
>
-->
<view
v-for=
"(item, index) in orderList"
:key=
"index"
>
<OrderCell
:orderData=
"item"
type=
"waitAccept"
:location=
"location"
@
click=
"handleClick(item.orderId)"
@
action=
"handleAction(item.orderId)"
>
</OrderCell>
</view>
<u-loadmore
:status=
"currentLoadStatus"
bgColor=
"#F4F5F7"
></u-loadmore>
<
/scroll-view
>
<
!--
</scroll-view>
--
>
</view>
</
template
>
...
...
@@ -63,6 +67,7 @@
<view
class=
"bottom-line-view"
></view>
</view>
</TabBarPage>
</scroll-view>
</template>
<
script
>
...
...
@@ -96,6 +101,8 @@
pageNumber
:
0
,
pageSize
:
100
,
},
triggered
:
false
,
_freshing
:
false
,
};
},
watch
:
{
...
...
@@ -132,6 +139,7 @@
},
},
onLoad
()
{
this
.
_freshing
=
false
;
this
.
getOrderCount
()
},
onShow
()
{
...
...
@@ -140,12 +148,20 @@
this
.
initSettleInfo
();
}
},
onPullDownRefresh
()
{
console
.
log
(
'------下拉刷新------'
)
// 下拉刷洗
this
.
initSettleInfo
()
},
// onPullDownRefresh() {
// console.log('------下拉刷新------')
// // 下拉刷洗
// this.initSettleInfo()
// },
// onReachBottom() {
// console.log('----------底部-------------', this.currentLoadStatus)
// if (this.currentLoadStatus != 'loadmore') return
// this.currentLoadStatus == 'loading'
// this.loadOrderList()
// },
// onPageScroll(obj) {
// console.log('---------scroll---------', obj)
// },
methods
:
{
handleClick
(
orderId
)
{
// 点击了cell
console
.
log
(
'点击了cell'
)
...
...
@@ -174,10 +190,10 @@
};
await
app
.
getBaseInfo
(
self
,
callBack
);
this
.
orderList
=
[]
this
.
search
.
pageNumber
=
0
// 加载消息列表
self
.
loadMessageList
();
self
.
search
.
pageNumber
=
0
self
.
loadedOrder
=
false
self
.
loadOrderList
();
},
loadMessageList
()
{
...
...
@@ -204,6 +220,8 @@
self
.
$u
.
api
.
listByRecommendOrder
(
self
.
search
).
then
((
res
)
=>
{
uni
.
stopPullDownRefresh
()
// 结束下拉刷新
self
.
loadedOrder
=
true
self
.
triggered
=
false
;
self
.
_freshing
=
false
;
/*↓↓↓↓↓↓↓↓↓↓测试数据↓↓↓↓↓↓↓↓↓↓*/
// if (res.data.list) {
// if (res.data.list.length == 0 && res.data.total > 0) {
...
...
@@ -239,6 +257,9 @@
/*↑↑↑↑↑↑↑↑↑↑测试数据↑↑↑↑↑↑↑↑↑↑↑↑↑*/
if
(
res
.
code
==
200
)
{
if
(
res
.
data
&&
res
.
data
.
list
&&
res
.
data
.
list
.
length
>
0
)
{
if
(
self
.
search
.
pageNumber
==
1
)
{
self
.
orderList
=
[]
}
self
.
orderList
.
push
(...
res
.
data
.
list
);
self
.
currentLoadStatus
=
res
.
data
.
total
>
self
.
orderList
.
length
?
'loadmore'
:
'nomore'
...
...
@@ -252,10 +273,26 @@
this
.
triggered
=
"restore"
;
},
reachBottom
()
{
console
.
log
(
this
.
currentLoadStatus
)
if
(
this
.
currentLoadStatus
!=
'loadmore'
)
return
this
.
currentLoadStatus
==
'loading'
this
.
loadOrderList
()
},
onPulling
(
e
)
{
console
.
log
(
"onpulling"
,
e
);
},
onRefresh
()
{
if
(
this
.
_freshing
)
return
;
this
.
_freshing
=
true
;
this
.
initSettleInfo
()
},
onRestore
()
{
this
.
triggered
=
'restore'
;
// 需要重置
console
.
log
(
"onRestore"
);
},
onAbort
()
{
console
.
log
(
"onAbort"
);
},
// clickSwiper(index) {},
handleScroll
()
{
console
.
log
(
"-----scroll-------"
);
...
...
@@ -330,7 +367,7 @@
.banner-image
{
width
:
730rpx
;
height
:
280rpx
;
margin-left
:
-1
4
rpx
;
margin-left
:
-1
6
rpx
;
}
.msg-view
{
...
...
src/pages/order/complete.vue
View file @
9476107a
...
...
@@ -81,7 +81,7 @@
type=
"primary"
shape=
"circle"
:hover-class=
"submitStatus ? '' : 'none'"
>
暂存
</u-button>
<u-button
class=
"btn-submit"
@
click=
"
nextStep
"
v-if=
"tabIndex===list.length - 1"
<u-button
class=
"btn-submit"
@
click=
"
orderFinish
"
v-if=
"tabIndex===list.length - 1"
type=
"primary"
shape=
"circle"
:hover-class=
"submitStatus ? '' : 'none'"
>
交付
</u-button>
...
...
@@ -116,6 +116,7 @@
orderId
:
0
,
categoryId
:
0
,
orderServiceType
:
''
,
inGuaranteePeriod
:
''
,
list
:
[],
tabIndex
:
0
,
scrollTop
:
0
,
//tab标题的滚动条位置
...
...
@@ -186,10 +187,12 @@
this
.
orderId
=
option
.
orderId
this
.
categoryId
=
option
.
categoryId
this
.
orderServiceType
=
decodeURIComponent
(
option
.
orderServiceType
)
this
.
inGuaranteePeriod
=
option
.
inGuaranteePeriod
}
else
{
this
.
orderId
=
9708719
this
.
categoryId
=
88
this
.
orderServiceType
=
'安装'
this
.
inGuaranteePeriod
=
'Y'
}
this
.
getCompleteData
()
},
...
...
@@ -269,6 +272,18 @@
}
})
},
orderFinish
(){
let
self
=
this
if
(
self
.
inGuaranteePeriod
===
'Y'
){
self
.
$u
.
api
.
inOrderFinish
(
self
.
orderId
).
then
((
res
)
=>
{
console
.
log
(
res
)
})
}
else
{
self
.
$u
.
api
.
outOrderFinish
({
customerPayType
:
'CASH'
},
self
.
orderId
).
then
((
res
)
=>
{
console
.
log
(
res
)
})
}
},
getTakeStatus
(
event
)
{
this
.
takeStatus
=
event
.
status
this
.
fileIndex
=
event
.
index
.
toString
()
...
...
src/pages/order/detail.vue
View file @
9476107a
...
...
@@ -44,21 +44,23 @@
<view
v-else
class=
"order-item-more"
>
<view
class=
"line-view"
></view>
<view
class=
"order-cell between-cell"
>
<text>
品牌:
</text>
<text
class=
"cell-title"
>
品牌:
</text>
<text>
{{
order
.
brandName
}}
</text>
</view>
<view
class=
"order-cell between-cell"
>
<text>
数量:
</text>
<text
class=
"cell-title"
>
数量:
</text>
<text>
x
{{
order
.
orderProductCount
}}
</text>
</view>
<view
class=
"order-cell between-cell"
>
<text>
信息:
</text>
<text>
充电桩信息:
</text>
<text
class=
"cell-title"
>
充电桩信息:
</text>
<text>
{{
order
.
serviceContent
}}
</text>
</view>
<view
class=
"order-cell between-cell"
>
<!--
<view
class=
"order-cell between-cell"
>
<!--
<view
class=
"order-cell between-cell"
>
<text>
备注:
</text>
<text>
{{
order
.
serviceContent
}}
</text>
</view>
</view>
-->
<view
class=
"read-more-toggle"
>
<u-icon
name=
"arrow-up"
></u-icon>
<text
class=
"read-more-text"
@
click=
"readMore = true"
>
点击收起
</text>
...
...
@@ -130,8 +132,6 @@
</u-count-down>
</view>
</view>
</view>
<!-- 异常预约 ,现场拍照 这里是调用拍照的两个组件-->
<view
class=
"right"
>
...
...
@@ -212,7 +212,8 @@
isAllowDianhuaAndDaohang
:
false
,
appointmentDatetimeRange
:
''
,
appointmentDatetime
:
''
,
signDistance
:
3000
signDistance
:
3000
,
num
:
0
}
},
onLoad
(
option
)
{
...
...
@@ -220,8 +221,6 @@
console
.
log
(
"option"
,
option
)
if
(
option
&&
option
.
id
)
{
this
.
orderId
=
option
.
id
}
else
{
// 异常处理
}
this
.
loadOrderDetail
()
this
.
loadOrderRecord
()
...
...
@@ -236,7 +235,6 @@
}
else
{
return
process
.
uniEnv
.
qn_base_url
+
'dianhua-0.png'
}
},
navigationIcon
()
{
//self-support/icon/daohang-0@2x.png
...
...
@@ -245,7 +243,6 @@
}
else
{
return
process
.
uniEnv
.
qn_base_url
+
'daohang-0.png'
}
},
centerButtonClass
()
{
let
btnClass
=
"appoint-btn"
...
...
@@ -336,7 +333,6 @@
};
self
.
$u
.
api
.
orderDetail
(
data
,
self
.
orderId
).
then
((
res
)
=>
{
if
(
res
.
code
==
200
)
{
console
.
log
(
"==="
,
res
.
data
)
self
.
order
=
res
.
data
this
.
getCurrentBtn
()
if
(
self
.
order
.
isFirstOrder
){
...
...
@@ -362,7 +358,6 @@
};
self
.
$u
.
api
.
listOrderRecord
(
param
).
then
((
res
)
=>
{
if
(
res
.
code
==
200
)
{
self
.
orderRecords
=
res
.
data
}
else
{
console
.
log
(
res
.
message
,
"获取订单详情失败!"
);
...
...
@@ -371,39 +366,55 @@
},
weekChange
(
data
){
// 点击下一周
console
.
log
(
data
,
'week
Change
'
)
console
.
log
(
data
,
'week
-data
'
)
if
(
data
&&
data
.
time
)
{
let
num
=
data
.
num
let
time
=
data
.
time
this
.
num
=
num
if
(
num
==
0
)
{
this
.
dateList
=
[
{
day
:
time
,
timeRange
:
[]},
{
day
:
time
+
(
1
*
86400000
),
timeRange
:
[]},
{
day
:
time
+
(
2
*
86400000
),
timeRange
:
[]},
{
day
:
time
+
(
3
*
86400000
),
timeRange
:
[]},
{
day
:
time
+
(
4
*
86400000
),
timeRange
:
[]},
{
day
:
time
+
(
5
*
86400000
),
timeRange
:
[]},
{
day
:
time
+
(
6
*
86400000
),
timeRange
:
[]},
]
this
.
loadCalendar
()
}
else
{
this
.
dateList
=
[
{
day
:
time
,
timeRange
:
[]},
{
day
:
time
+
(
1
*
86400000
),
timeRange
:
[]},
{
day
:
time
+
(
2
*
86400000
),
timeRange
:
[]},
{
day
:
time
+
(
3
*
86400000
),
timeRange
:
[]},
{
day
:
time
+
(
4
*
86400000
),
timeRange
:
[]},
{
day
:
time
+
(
5
*
86400000
),
timeRange
:
[]},
]
this
.
loadCalendar
()
}
}
},
/* 加载日历数据 */
async
loadCalendar
()
{
let
self
=
this
let
params
=
{
num
:
this
.
num
}
let
res
=
await
this
.
$u
.
api
.
workerCalendar
(
params
)
if
(
res
&&
res
.
code
==
200
)
{
self
.
dateList
=
res
.
data
self
.
dateList
[
1
].
timeRange
[
0
]
=
'appointment_range_8'
}
},
/* 加载预约时间段 */
async
loadTimerange
()
{
let
self
=
this
let
res
=
await
this
.
$u
.
api
.
openTimerange
()
if
(
res
&&
res
.
code
==
200
)
{
let
list
=
res
.
data
list
.
map
((
item
,
index
)
=>
{
item
.
disabled
=
false
})
self
.
timeList
=
list
}
},
dateChange
(
data
){
// 点击日期选择
console
.
log
(
data
,
'dateChange'
)
this
.
loadCalendar
()
let
self
=
this
self
.
appointmentDatetime
=
data
.
item
.
day
self
.
timeList
.
map
((
item
,
index
)
=>
{
if
(
data
.
item
.
timeRange
.
indexOf
(
item
.
pkey
)
>
-
1
)
{
item
.
disabled
=
true
}
else
{
item
.
disabled
=
false
}
})
},
timeChange
(
data
){
// 时间段选择变化
...
...
@@ -538,6 +549,7 @@
url
:
'pages/order/complete?orderId='
+
this
.
order
.
orderId
+
"&categoryId="
+
this
.
order
.
categoryId
+
"&orderServiceType="
+
this
.
order
.
orderServiceType
+
"&inGuaranteePeriod="
+
this
.
order
.
inGuaranteePeriod
})
},
rejectOrder
()
{
// 拒单
...
...
@@ -624,7 +636,7 @@
};
</
script
>
<
style
lang=
"scss"
>
<
style
lang=
"scss"
scoped
>
.order-wrap
{
width
:
750rpx
;
height
:
100vh
;
...
...
@@ -756,6 +768,7 @@
.order-item-more
{
font-size
:
26rpx
;
color
:
#333333
;
text-align
:
right
;
.line-view
{
background-color
:
#F4F5F7
;
height
:
2rpx
;
...
...
@@ -945,7 +958,7 @@
color
:
#333333
;
line-height
:
48rpx
;
margin-bottom
:
10rpx
;
text-align
:
left
;
}
.between-cell
{
...
...
@@ -953,4 +966,8 @@
justify-content
:
space-between
;
align-items
:
flex-start
;
}
.cell-title
{
text-align
:
left
;
flex-shrink
:
0
;
}
</
style
>
src/pages/order/index.vue
View file @
9476107a
...
...
@@ -176,6 +176,7 @@
},
reachBottom
(
e
)
{
console
.
log
(
'-------底部-------'
,
this
.
loadStatus
)
if
(
this
.
loadStatus
!=
'loadmore'
)
return
this
.
loadStatus
==
'loading'
this
.
getOrderList
(
this
.
currentIndex
)
...
...
@@ -183,7 +184,7 @@
// 页面数据
getOrderList
(
index
)
{
// 状态处理
//
this.pageNumber += 1
this
.
pageNumber
+=
1
this
.
loaded
=
false
var
param
=
{
pageNumber
:
this
.
pageNumber
,
...
...
@@ -233,6 +234,7 @@
self
.
triggered
=
false
;
self
.
_freshing
=
false
;
if
(
res
.
data
.
list
)
{
res
.
data
.
list
[
0
].
currentOverTime
=
undefined
self
.
orderList
.
push
(...
res
.
data
.
list
)
if
(
self
.
list
[
self
.
types
[
res
.
data
.
type
]])
{
self
.
list
[
self
.
types
[
res
.
data
.
type
]].
total
=
res
.
data
.
total
...
...
@@ -249,23 +251,23 @@
// 获取订单数量
getOrderCount
()
{
var
self
=
this
;
// 加载订单列表
self
.
$u
.
api
.
listOrderCount
().
then
((
res
)
=>
{
// 加载订单列表
this
.
$u
.
api
.
listOrderCount
().
then
((
res
)
=>
{
if
(
res
.
code
==
200
)
{
console
.
log
(
"==="
,
res
.
data
)
if
(
res
.
data
)
{
var
count
=
0
self
.
list
.
forEach
(
item
=>
{
this
.
list
.
forEach
(
item
=>
{
if
(
item
.
name
===
'待预约'
)
{
item
.
count
=
res
.
data
.
toAppointmentCount
item
.
total
=
res
.
data
.
toAppointmentCount
}
else
if
(
item
.
name
===
'待签到'
)
{
item
.
count
=
res
.
data
.
toCheckinCount
item
.
total
=
res
.
data
.
toCheckinCount
}
else
if
(
item
.
name
===
'待完工'
)
{
item
.
count
=
res
.
data
.
toFinishCount
}
else
if
(
item
.
name
===
'
待审核
'
)
{
item
.
count
=
res
.
data
.
reviewingCount
item
.
total
=
res
.
data
.
toFinishCount
}
else
if
(
item
.
name
===
'
审核中
'
)
{
item
.
total
=
res
.
data
.
reviewingCount
}
else
if
(
item
.
name
===
'异常单'
)
{
item
.
count
=
res
.
data
.
exceptionCount
item
.
total
=
res
.
data
.
exceptionCount
}
})
var
count
=
0
...
...
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