Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
J
jiedao-app-operator-master
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
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
lanbaoming
jiedao-app-operator-master
Commits
6185d54e
Commit
6185d54e
authored
Nov 20, 2024
by
honghy
Committed by
wux
Jan 02, 2025
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
短信模块实作
parent
fbe9d15a
Changes
13
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
690 additions
and
79 deletions
+690
-79
smsNode.js
src/api/system/sms/smsNode.js
+54
-0
smsTemplate.js
src/api/system/sms/smsTemplate.js
+8
-0
dict.js
src/utils/dict.js
+3
-0
CancelCargo.vue
src/views/ecw/order/components/CancelCargo.vue
+12
-3
CargoControlEdit.vue
src/views/ecw/order/components/CargoControlEdit.vue
+11
-2
Fallback.vue
src/views/ecw/order/components/Fallback.vue
+14
-5
Release.vue
src/views/ecw/order/components/Release.vue
+47
-40
SendSmsCode.vue
src/views/ecw/order/components/SendSmsCode.vue
+13
-8
Transfer.vue
src/views/ecw/order/components/Transfer.vue
+12
-4
TransferCargo.vue
src/views/ecw/order/components/TransferCargo.vue
+10
-1
smsLog.vue
src/views/system/sms/smsLog.vue
+5
-0
smsNode.vue
src/views/system/sms/smsNode.vue
+425
-0
smsTemplate.vue
src/views/system/sms/smsTemplate.vue
+76
-16
No files found.
src/api/system/sms/smsNode.js
0 → 100644
View file @
6185d54e
import
request
from
'
@/utils/request
'
// 创建短信节点
export
function
createSmsNode
(
data
)
{
return
request
({
url
:
'
/system/sms-node/create
'
,
method
:
'
post
'
,
data
:
data
})
}
// 更新短信节点
export
function
updateSmsNode
(
data
)
{
return
request
({
url
:
'
/system/sms-node/update
'
,
method
:
'
put
'
,
data
:
data
})
}
// 删除短信节点
export
function
deleteSmsNode
(
id
)
{
return
request
({
url
:
'
/system/sms-node/delete?id=
'
+
id
,
method
:
'
delete
'
})
}
// 获得短信节点
export
function
getSmsNode
(
id
)
{
return
request
({
url
:
'
/system/sms-node/get?id=
'
+
id
,
method
:
'
get
'
})
}
// 获得短信节点分页
export
function
getSmsNodePage
(
query
)
{
return
request
({
url
:
'
/system/sms-node/page
'
,
method
:
'
get
'
,
params
:
query
})
}
// 导出短信节点 Excel
export
function
exportSmsNodeExcel
(
query
)
{
return
request
({
url
:
'
/system/sms-node/export-excel
'
,
method
:
'
get
'
,
params
:
query
,
responseType
:
'
blob
'
})
}
src/api/system/sms/smsTemplate.js
View file @
6185d54e
...
@@ -62,3 +62,11 @@ export function exportSmsTemplateExcel(query) {
...
@@ -62,3 +62,11 @@ export function exportSmsTemplateExcel(query) {
})
})
}
}
// 获得短信模板列表
export
function
getSmsTemplateList
(
query
)
{
return
request
({
url
:
'
/system/sms-template/list
'
,
method
:
'
get
'
,
params
:
query
})
}
src/utils/dict.js
View file @
6185d54e
...
@@ -27,6 +27,9 @@ export const DICT_TYPE = {
...
@@ -27,6 +27,9 @@ export const DICT_TYPE = {
SYSTEM_SMS_TEMPLATE_TYPE
:
"
system_sms_template_type
"
,
SYSTEM_SMS_TEMPLATE_TYPE
:
"
system_sms_template_type
"
,
SYSTEM_SMS_SEND_STATUS
:
"
system_sms_send_status
"
,
SYSTEM_SMS_SEND_STATUS
:
"
system_sms_send_status
"
,
SYSTEM_SMS_RECEIVE_STATUS
:
"
system_sms_receive_status
"
,
SYSTEM_SMS_RECEIVE_STATUS
:
"
system_sms_receive_status
"
,
SYSTEM_SMS_NODE_NODE
:
'
system_sms_node_node
'
,
//节点
SYSTEM_SMS_TEMPLATE_MESSAGE_TYPE
:
'
system_sms_template_message_type
'
,
//发送类型
SYSTEM_SMS_TEMPLATE_LANGUAGE
:
'
system_sms_template_language
'
,
//节点
SYSTEM_MAIL_SEND_STATUS
:
"
mail_send_status
"
,
SYSTEM_MAIL_SEND_STATUS
:
"
mail_send_status
"
,
SYSTEM_ERROR_CODE_TYPE
:
"
system_error_code_type
"
,
SYSTEM_ERROR_CODE_TYPE
:
"
system_error_code_type
"
,
INTERNAL_MESSAGE_TYPE
:
"
internal_message_type
"
,
INTERNAL_MESSAGE_TYPE
:
"
internal_message_type
"
,
...
...
src/views/ecw/order/components/CancelCargo.vue
View file @
6185d54e
...
@@ -28,13 +28,22 @@
...
@@ -28,13 +28,22 @@
<el-form-item
:label=
"$t('上传凭证')"
>
<el-form-item
:label=
"$t('上传凭证')"
>
<image-upload
v-model=
"formData.voucher"
/>
<image-upload
v-model=
"formData.voucher"
/>
</el-form-item>
</el-form-item>
<el-form-item
:label=
"$t('控货手机号')"
>
<el-form-item
:label=
"$t('控货手机号')"
>
+
{{
detail
.
dialCode
}}
{{
detail
.
phone
}}
+
{{
detail
.
dialCode
}}
{{
detail
.
phone
}}
</el-form-item>
</el-form-item>
<el-form-item
:label=
"$t('手机验证码')"
>
<el-form-item
:label=
"$t('手机验证码')"
>
<el-input
v-model=
"formData.code"
placeholder=
""
style=
"width: 100px; margin-right:10px"
></el-input>
<el-input
v-model=
"formData.code"
placeholder=
""
style=
"width: 100px; margin-right:10px"
></el-input>
<send-sms-code
:order-id=
"order.orderId"
:scene=
"5"
/>
<send-sms-code
:form=
"
{
orderId: order.orderId,
nodeValue: 'delivery-verification-sms',
isTransport: 0,
transportId: 0,
isOrders: 0,
messageType: ''
}"
/>
</el-form-item>
</el-form-item>
<div
class=
"title"
>
{{
$t
(
'
审批流程
'
)
}}
</div>
<div
class=
"title"
>
{{
$t
(
'
审批流程
'
)
}}
</div>
...
@@ -125,4 +134,4 @@ export default {
...
@@ -125,4 +134,4 @@ export default {
margin-right
:
10px
;
margin-right
:
10px
;
}
}
}
}
</
style
>
</
style
>
\ No newline at end of file
src/views/ecw/order/components/CargoControlEdit.vue
View file @
6185d54e
...
@@ -38,7 +38,16 @@
...
@@ -38,7 +38,16 @@
</el-form-item>
</el-form-item>
<el-form-item
:label=
"$t('手机验证码')"
prop=
"field106"
>
<el-form-item
:label=
"$t('手机验证码')"
prop=
"field106"
>
<el-input
v-model=
"formData.code"
placeholder=
""
style=
"width: 100px; margin-right:10px"
></el-input>
<el-input
v-model=
"formData.code"
placeholder=
""
style=
"width: 100px; margin-right:10px"
></el-input>
<send-sms-code
:order-id=
"order.orderId"
:scene=
"5"
/>
<send-sms-code
:form=
"
{
orderId: order.orderId,
nodeValue: 'delivery-verification-sms',
isTransport: 0,
transportId: 0,
isOrders: 0,
messageType: ''
}"
/>
</el-form-item>
</el-form-item>
<div
class=
"title"
>
{{
$t
(
'
审批流程
'
)
}}
</div>
<div
class=
"title"
>
{{
$t
(
'
审批流程
'
)
}}
</div>
<work-flow
xmlkey=
"release_goods"
v-model=
"ccIdArr"
/>
<work-flow
xmlkey=
"release_goods"
v-model=
"ccIdArr"
/>
...
@@ -109,7 +118,7 @@ export default {
...
@@ -109,7 +118,7 @@ export default {
submit
(){
submit
(){
let
data
=
Object
.
assign
({},
this
.
formData
,
{
let
data
=
Object
.
assign
({},
this
.
formData
,
{
cargoControlPickId
:
this
.
info
.
id
,
cargoControlPickId
:
this
.
info
.
id
,
orderId
:
this
.
order
.
orderId
,
orderId
:
this
.
order
.
orderId
,
orderNo
:
this
.
order
.
orderNo
orderNo
:
this
.
order
.
orderNo
})
})
...
...
src/views/ecw/order/components/Fallback.vue
View file @
6185d54e
...
@@ -29,8 +29,8 @@
...
@@ -29,8 +29,8 @@
</el-form-item>
</el-form-item>
</el-col>
</el-col>
</el-row>
</el-row>
<el-form-item
:label=
"$t('反复核原因')"
prop=
"recurrentNuclearType"
>
<el-form-item
:label=
"$t('反复核原因')"
prop=
"recurrentNuclearType"
>
<dict-selector
:type=
"DICT_TYPE.ECW_PICK_RECURRENT_NUCLEAR_TYPE"
v-model=
"formData.recurrentNuclearType"
form-type=
"radio"
/>
<dict-selector
:type=
"DICT_TYPE.ECW_PICK_RECURRENT_NUCLEAR_TYPE"
v-model=
"formData.recurrentNuclearType"
form-type=
"radio"
/>
...
@@ -43,11 +43,20 @@
...
@@ -43,11 +43,20 @@
<
template
v-else
>
<
template
v-else
>
+
{{
order
.
cargoControlCountryCode
}}
{{
order
.
cargoControlPhone
}}
+
{{
order
.
cargoControlCountryCode
}}
{{
order
.
cargoControlPhone
}}
</
template
>
</
template
>
</el-form-item>
</el-form-item>
<el-form-item
:label=
"$t('手机验证码')"
prop=
"code"
>
<el-form-item
:label=
"$t('手机验证码')"
prop=
"code"
>
<el-input
v-model=
"formData.code"
placeholder=
""
style=
"width: 100px; margin-right:10px"
></el-input>
<el-input
v-model=
"formData.code"
placeholder=
""
style=
"width: 100px; margin-right:10px"
></el-input>
<send-sms-code
:order-id=
"order.orderId"
:scene=
"5"
/>
<send-sms-code
:form=
"{
orderId: order.orderId,
nodeValue: 'delivery-verification-sms',
isTransport: 0,
transportId: 0,
isOrders: 0,
messageType: ''
}"
/>
</el-form-item>
</el-form-item>
<div
class=
"title"
>
{{$t('审批流程')}}
</div>
<div
class=
"title"
>
{{$t('审批流程')}}
</div>
<work-flow
xmlkey=
"release_goods"
v-model=
"ccIdArr"
/>
<work-flow
xmlkey=
"release_goods"
v-model=
"ccIdArr"
/>
...
@@ -114,7 +123,7 @@ export default {
...
@@ -114,7 +123,7 @@ export default {
this
.
$refs
.
form
.
validate
().
then
(
res
=>
{
this
.
$refs
.
form
.
validate
().
then
(
res
=>
{
let
data
=
Object
.
assign
({},
this
.
formData
,
{
let
data
=
Object
.
assign
({},
this
.
formData
,
{
cargoControlPickId
:
this
.
info
.
id
,
cargoControlPickId
:
this
.
info
.
id
,
orderId
:
this
.
order
.
orderId
,
orderId
:
this
.
order
.
orderId
,
orderNo
:
this
.
order
.
orderNo
orderNo
:
this
.
order
.
orderNo
})
})
...
...
src/views/ecw/order/components/Release.vue
View file @
6185d54e
<
template
>
<
template
>
<el-dialog
:title=
"title"
visible
:before-close=
"closeDialog"
:close-on-click-modal=
"false"
width=
"1000px"
>
<el-dialog
:title=
"title"
visible
:before-close=
"closeDialog"
:close-on-click-modal=
"false"
width=
"1000px"
>
<el-form
v-if=
"agreement"
ref=
"form"
:model=
"formData"
:rules=
"rules"
size=
"small"
label-width=
"140px"
>
<el-form
v-if=
"agreement"
ref=
"form"
:model=
"formData"
:rules=
"rules"
size=
"small"
label-width=
"140px"
>
<el-row>
<el-row>
<el-col
:span=
"8"
>
<el-col
:span=
"8"
>
<el-form-item
:label=
"$t('订单号')"
>
<el-form-item
:label=
"$t('订单号')"
>
{{
detail
.
orderNo
}}
{{
detail
.
orderNo
}}
</el-form-item>
</el-form-item>
</el-col>
</el-col>
<el-col
:span=
"8"
>
<el-col
:span=
"8"
>
<el-form-item
:label=
"$t('体积')"
>
<el-form-item
:label=
"$t('体积')"
>
{{
detail
.
sumVolume
}}
m³
{{
detail
.
sumVolume
}}
m³
</el-form-item>
</el-form-item>
</el-col>
</el-col>
<el-col
:span=
"8"
>
<el-col
:span=
"8"
>
<el-form-item
:label=
"$t('重量')"
>
<el-form-item
:label=
"$t('重量')"
>
{{
detail
.
sumWeight
}}
kg
{{
detail
.
sumWeight
}}
kg
</el-form-item>
</el-form-item>
</el-col>
</el-col>
<el-col
:span=
"8"
>
<el-col
:span=
"8"
>
<el-form-item
:label=
"$t('总箱数')"
>
<el-form-item
:label=
"$t('总箱数')"
>
{{
detail
.
sumNum
}}
{{
detail
.
sumNum
}}
</el-form-item>
</el-form-item>
</el-col>
</el-col>
<el-col
:span=
"8"
>
<el-col
:span=
"8"
>
<el-form-item
:label=
"$t('总控货箱数')"
>
<el-form-item
:label=
"$t('总控货箱数')"
>
{{
detail
.
sumNum
}}
{{
detail
.
sumNum
}}
</el-form-item>
</el-form-item>
</el-col>
</el-col>
<el-col
:span=
"8"
>
<el-col
:span=
"8"
>
<el-form-item
:label=
"$t('剩余放货箱数')"
>
<el-form-item
:label=
"$t('剩余放货箱数')"
>
{{
detail
.
sumNum
-
detail
.
releaseNum
}}
{{
detail
.
sumNum
-
detail
.
releaseNum
}}
</el-form-item>
</el-form-item>
</el-col>
</el-col>
<el-col
:span=
"8"
>
<el-col
:span=
"8"
>
<el-form-item
:label=
"$t('到仓日期/卸柜日期')"
>
<el-form-item
:label=
"$t('到仓日期/卸柜日期')"
>
{{
detail
.
unloadTime
||
'
-
'
}}
{{
detail
.
unloadTime
||
'
-
'
}}
</el-form-item>
</el-form-item>
</el-col>
</el-col>
<el-col
:span=
"8"
>
<el-col
:span=
"8"
>
<el-form-item
:label=
"$t('放货锁定收货人到期')"
>
<el-form-item
:label=
"$t('放货锁定收货人到期')"
>
{{
detail
.
lockConsigneeTime
||
'
-
'
}}
{{
detail
.
lockConsigneeTime
||
'
-
'
}}
</el-form-item>
</el-form-item>
...
@@ -131,13 +131,20 @@
...
@@ -131,13 +131,20 @@
<el-input
v-model=
"formData.code"
:placeholder=
"$t('请输入手机验证码')"
clearable
<el-input
v-model=
"formData.code"
:placeholder=
"$t('请输入手机验证码')"
clearable
class=
"w-150 mr-10"
></el-input>
class=
"w-150 mr-10"
></el-input>
<!-- <el-button type="success">{{ $t('获取验证码') }}</el-button> -->
<!-- <el-button type="success">{{ $t('获取验证码') }}</el-button> -->
<send-sms-code
:order-id=
"detail.orderId"
scene=
"5"
/>
<send-sms-code
:form=
"{
</el-form-item>
orderId: detail.orderId,
<el-form-item
label=
""
style=
"margin-top:20px"
>
nodeValue: 'delivery-verification-sms',
<el-button
type=
"success"
@
click=
"submit"
>
{{ $t('确认提货') }}
</el-button>
isTransport: 0,
<el-button
type=
"default"
@
click=
"closeDialog"
>
{{ $t('关闭') }}
</el-button>
transportId: 0,
</el-form-item>
isOrders: 0,
</el-form>
}"
/>
</el-form-item>
<el-form-item
label=
""
style=
"margin-top:20px"
>
<el-button
type=
"success"
@
click=
"submit"
>
{{$t('确认提货')}}
</el-button>
<el-button
type=
"default"
@
click=
"closeDialog"
>
{{$t('关闭')}}
</el-button>
</el-form-item>
</el-form>
<div
v-else
>
<div
v-else
>
<!-- <release-agreement /> -->
<!-- <release-agreement /> -->
...
...
src/views/ecw/order/components/SendSmsCode.vue
View file @
6185d54e
<
template
>
<
template
>
<el-button
@
click=
"send"
:disabled=
"leftTime > 0 && leftTime
<
60
"
>
{{
text
}}
</el-button>
<el-dropdown
@
command=
"send"
:disabled=
"leftTime > 0 && leftTime
<
60
"
>
<el-button
type=
"primary"
>
{{
text
}}
<i
class=
"el-icon-arrow-down el-icon--right"
></i>
</el-button>
<el-dropdown-menu
slot=
"dropdown"
>
<el-dropdown-item
command=
"1"
>
SMS
</el-dropdown-item>
<el-dropdown-item
command=
"2"
>
WhatsApp
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</
template
>
</
template
>
<
script
>
<
script
>
import
{
sendSmsCode
}
from
'
@/api/ecw/orderCargoControl
'
import
{
sendSmsCode
}
from
'
@/api/ecw/orderCargoControl
'
let
timeout
=
null
let
timeout
=
null
export
default
{
export
default
{
props
:{
props
:{
orderId
:
[
String
,
Number
],
form
:
Object
scene
:
[
String
,
Number
]
},
},
data
(){
data
(){
return
{
return
{
...
@@ -30,13 +37,11 @@ export default {
...
@@ -30,13 +37,11 @@ export default {
if
(
timeout
)
clearTimeout
(
timeout
)
if
(
timeout
)
clearTimeout
(
timeout
)
},
},
methods
:{
methods
:{
send
(){
send
(
messageType
){
if
(
this
.
loading
||
(
this
.
leftTime
>
0
&&
this
.
leftTime
<
60
))
return
false
if
(
this
.
loading
||
(
this
.
leftTime
>
0
&&
this
.
leftTime
<
60
))
return
false
this
.
loading
=
true
this
.
loading
=
true
sendSmsCode
({
this
.
form
[
'
messageType
'
]
=
messageType
orderId
:
this
.
orderId
,
sendSmsCode
(
this
.
form
).
then
(
res
=>
{
scene
:
this
.
scene
}).
then
(
res
=>
{
this
.
$message
.
success
(
this
.
$t
(
'
发送成功
'
))
this
.
$message
.
success
(
this
.
$t
(
'
发送成功
'
))
this
.
countDown
()
this
.
countDown
()
}).
finally
(
res
=>
{
}).
finally
(
res
=>
{
...
...
src/views/ecw/order/components/Transfer.vue
View file @
6185d54e
...
@@ -8,7 +8,7 @@
...
@@ -8,7 +8,7 @@
<el-form-item
:label=
"$t('原控货手机号')"
>
<el-form-item
:label=
"$t('原控货手机号')"
>
<el-input
:value=
"'+' + cargoControlCountryCode + ' ' + cargoControlPhone"
disabled
></el-input>
<el-input
:value=
"'+' + cargoControlCountryCode + ' ' + cargoControlPhone"
disabled
></el-input>
</el-form-item>
</el-form-item>
<el-form-item
:label=
"$t('新控货人')"
prop=
"name"
>
<el-form-item
:label=
"$t('新控货人')"
prop=
"name"
>
<el-input
v-model=
"form.name"
></el-input>
<el-input
v-model=
"form.name"
></el-input>
</el-form-item>
</el-form-item>
...
@@ -21,7 +21,15 @@
...
@@ -21,7 +21,15 @@
</el-form-item>
</el-form-item>
<el-form-item
:label=
"$t('手机验证码')"
prop=
"code"
>
<el-form-item
:label=
"$t('手机验证码')"
prop=
"code"
>
<el-input
v-model.number=
"form.code"
type=
"number"
class=
"w-200 mr-10"
></el-input>
<el-input
v-model.number=
"form.code"
type=
"number"
class=
"w-200 mr-10"
></el-input>
<send-sms-code
:order-id=
"orderId"
scene=
"4"
/>
<send-sms-code
:form=
"
{
orderId: orderId,
nodeValue: 'transfer-control-goods',
isTransport: 0,
transportId: 0,
isOrders: 0,
}"
/>
</el-form-item>
</el-form-item>
<el-form-item
label=
""
>
<el-form-item
label=
""
>
<el-button
type=
"primary"
@
click=
"submit"
>
{{
$t
(
'
确定转移
'
)
}}
</el-button>
<el-button
type=
"primary"
@
click=
"submit"
>
{{
$t
(
'
确定转移
'
)
}}
</el-button>
...
@@ -111,8 +119,8 @@ export default {
...
@@ -111,8 +119,8 @@ export default {
this
.
closeDialog
()
this
.
closeDialog
()
})
})
})
})
}
}
}
}
}
}
</
script
>
</
script
>
\ No newline at end of file
src/views/ecw/order/components/TransferCargo.vue
View file @
6185d54e
...
@@ -63,7 +63,16 @@
...
@@ -63,7 +63,16 @@
</el-form-item>
</el-form-item>
<el-form-item
:label=
"$t('手机验证码')"
prop=
"code"
>
<el-form-item
:label=
"$t('手机验证码')"
prop=
"code"
>
<el-input
v-model=
"formData.code"
:placeholder=
"$t('请输入手机验证码')"
clearable
class=
"w-150 mr-10"
></el-input>
<el-input
v-model=
"formData.code"
:placeholder=
"$t('请输入手机验证码')"
clearable
class=
"w-150 mr-10"
></el-input>
<send-sms-code
:order-id=
"detail.orderId"
scene=
"5"
/>
<send-sms-code
:form=
"{
orderId: detail.orderId,
nodeValue: 'delivery-verification-sms',
isTransport: 0,
transportId: 0,
isOrders: 0,
messageType: ''
}"
/>
</el-form-item>
</el-form-item>
<div
class=
"page-title"
>
{{$t('审批流程')}}
</div>
<div
class=
"page-title"
>
{{$t('审批流程')}}
</div>
<work-flow
v-model=
"ccIdArr"
xmlkey=
"transfer_goods"
/>
<work-flow
v-model=
"ccIdArr"
xmlkey=
"transfer_goods"
/>
...
...
src/views/system/sms/smsLog.vue
View file @
6185d54e
...
@@ -178,6 +178,11 @@
...
@@ -178,6 +178,11 @@
<el-form-item
label=
"API 接收结果:"
>
{{ form.apiReceiveCode }} | {{ form.apiReceiveMsg }}
<el-form-item
label=
"API 接收结果:"
>
{{ form.apiReceiveCode }} | {{ form.apiReceiveMsg }}
</el-form-item>
</el-form-item>
</el-col>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
label=
"节点模板序列号:"
>
{{ form.nodeTemplateSn }}
</el-form-item>
</el-col>
</el-row>
</el-row>
</el-form>
</el-form>
<div
slot=
"footer"
class=
"dialog-footer"
>
<div
slot=
"footer"
class=
"dialog-footer"
>
...
...
src/views/system/sms/smsNode.vue
0 → 100644
View file @
6185d54e
This diff is collapsed.
Click to expand it.
src/views/system/sms/smsTemplate.vue
View file @
6185d54e
This diff is collapsed.
Click to expand it.
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