Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
T
TF-MOM-WEB
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
TFMOM
TF-MOM-WEB
Commits
803cfc7c
Commit
803cfc7c
authored
Aug 06, 2024
by
jingnan
👀
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ERP相关_材料领用开发
parent
3585b4e6
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
432 additions
and
29 deletions
+432
-29
index.vue
...rivateComponents/components/AddOutStorageUseCom/index.vue
+17
-12
AddOutStorageUseDetailDialog.vue
...ageUseDetails/components/AddOutStorageUseDetailDialog.vue
+4
-9
index.vue
...teComponents/components/AddOutStorageUseDetails/index.vue
+3
-3
left.vue
...s/components/ERP_OutStorageOutConfirm/components/left.vue
+195
-0
right.vue
.../components/ERP_OutStorageOutConfirm/components/right.vue
+102
-0
index.vue
...eComponents/components/ERP_OutStorageOutConfirm/index.vue
+79
-0
index.vue
.../src/privateComponents/components/EditReqAmount/index.vue
+2
-1
my-task.vue
...ns/dee-task-center/src/views/home/compontents/my-task.vue
+30
-4
No files found.
applications/dee-mes/src/privateComponents/components/AddOutStorageUseCom/index.vue
View file @
803cfc7c
...
...
@@ -61,13 +61,17 @@ export default {
data
()
{
const
that
=
this
return
{
typeName
:
that
.
basicData
.
typeName
||
'
useAO
'
,
typeName
:
that
.
basicData
.
typeName
||
'
OutStorageMaterialUse
'
,
options
:
[
{
label
:
'材料领用'
,
value
:
'OutStorageMaterialUse'
}
],
showCmp
:
true
,
cmpOptions
:
{
typeName
:
'OutStorageUse'
,
layKey
:
'outStorageUseApplyAdd_
useAO
'
layKey
:
'outStorageUseApplyAdd_
OutStorageMaterialUse
'
},
bindForm
:
{},
outStorageUseId
:
''
//
...
...
@@ -102,22 +106,23 @@ export default {
})
},
mounted
()
{
this
.
getUseRequestTypes
()
//
this.getUseRequestTypes()
},
// 组件方法
methods
:
{
async
getUseRequestTypes
()
{
const
user
=
localStorage
.
getItem
(
'user'
)
const
userId
=
localStorage
.
getItem
(
'userId'
)
//
const user = localStorage.getItem('user')
//
const userId = localStorage.getItem('userId')
const
dicData
=
await
this
.
$utils
.
getDicListByCode
(
'UseRequestType'
)
// 当前登陆人为孙瑶雪 和dexadmin的时候下拉可以看到试验领用,其他人看不到
if
(
user
===
'孙瑶雪'
||
user
===
'dexadmin'
)
{
this
.
options
=
dicData
.
filter
(
item
=>
item
.
label
!==
'无指令领用'
)
}
else
if
(
user
===
'李晓倩'
||
user
===
'刘瑞'
&&
Number
(
userId
)
===
1626782725550
)
{
this
.
options
=
dicData
.
filter
(
item
=>
item
.
label
!==
'无指令领用'
&&
item
.
label
!==
'试验领用'
)
}
else
{
this
.
options
=
dicData
.
filter
(
item
=>
item
.
label
!==
'试验领用'
&&
item
.
label
!==
'无指令领用'
&&
item
.
label
!==
'紧急领用'
)
}
// if (user === '孙瑶雪' || user === 'dexadmin') {
// this.options = dicData.filter(item => item.label !== '无指令领用')
// } else if (user === '李晓倩' || user === '刘瑞' && Number(userId) === 1626782725550) {
// this.options = dicData.filter(item => item.label !== '无指令领用' && item.label !== '试验领用')
// } else {
// this.options = dicData.filter(item => item.label !== '试验领用' && item.label !== '无指令领用' && item.label !== '紧急领用')
// }
this
.
options
=
dicData
.
filter
(
item
=>
item
.
label
===
'材料领用'
)
},
dataChangeHandler
(
val
)
{
if
(
val
)
{
...
...
applications/dee-mes/src/privateComponents/components/AddOutStorageUseDetails/components/AddOutStorageUseDetailDialog.vue
View file @
803cfc7c
...
...
@@ -71,7 +71,7 @@ export default {
handler
(
val
)
{
switch
(
val
)
{
case
'useAO'
:
case
'
m
aterialUse'
:
case
'
OutStorageM
aterialUse'
:
case
'NoMachineMaterialUse'
:
case
'UrgentUse'
:
this
.
amountItemLabel
=
'申领数量'
...
...
@@ -107,19 +107,14 @@ export default {
this
.
$refs
[
'applyForm'
].
validate
((
valid
)
=>
{
if
(
valid
&&
this
.
selection
)
{
const
typeName
=
this
.
basicData
.
useRequestType
// const maxAmount = typeName === 'scrapUse' ? this.selection.reqAmountOri : typeName === 'materialUse' ? Math.min(this.selection.unableAmount, this.selection.applyAmount) : this.selection.unableAmount
// const maxWarning = typeName === 'scrapUse' ? '出库数量' : typeName === 'materialUse' ? '可用数量及可申领数量' : '可用数量'
// if (this.applyForm.reqAmount > maxAmount) return this.$utils.showMessageWarning(`申领数量不能大于当前选中物料的${maxWarning}!`)
const
data
=
[{
'subTypeName'
:
'OutStorageUseItem'
,
'subTypeName'
:
`
${
typeName
}
Item`
,
'extMaterial'
:
this
.
selection
.
extMaterial
,
'extMaterialId'
:
this
.
selection
.
extMaterialId
,
// 'extSupportingItemId': this.selection.id,
// 'extSupportingItemIdType': this.selection.subTypeName,
'erpInventoryId'
:
this
.
selection
.
id
,
'takeAmount'
:
this
.
selection
.
takeAmount
,
'unableAmount'
:
this
.
selection
.
unableAmount
,
'reqAmount'
:
this
.
applyForm
.
reqAmount
,
'parExtWorkCenterName'
:
this
.
basicData
.
extWorkCenter
?
this
.
basicData
.
extWorkCenter
.
extname
:
''
// 用于编辑时删除数据后重新添加占用,调整占用时拿不到库房
'reqAmount'
:
this
.
applyForm
.
reqAmount
}]
if
(
typeName
===
'swapUse'
)
{
data
[
0
].
extSupportingItemVO
=
this
.
selectDatas
[
0
].
extSupportingItemVO
...
...
applications/dee-mes/src/privateComponents/components/AddOutStorageUseDetails/index.vue
View file @
803cfc7c
...
...
@@ -119,8 +119,8 @@ export default {
if
(
val
&&
val
.
useRequestType
)
{
if
(
val
.
useRequestType
===
'noAO'
||
val
.
useRequestType
===
'testUse'
||
val
.
useRequestType
===
'FOUse'
)
{
this
.
$set
(
this
.
cmpOptions
,
'layKey'
,
`add_outStorageUseItem_noAO`
)
}
else
if
(
val
.
useRequestType
===
'
m
aterialUse'
||
val
.
useRequestType
===
'NoMachineMaterialUse'
)
{
this
.
$set
(
this
.
cmpOptions
,
'layKey'
,
`add_outStorageUseItem_
m
aterialUse`
)
}
else
if
(
val
.
useRequestType
===
'
OutStorageM
aterialUse'
||
val
.
useRequestType
===
'NoMachineMaterialUse'
)
{
this
.
$set
(
this
.
cmpOptions
,
'layKey'
,
`add_outStorageUseItem_
OutStorageM
aterialUse`
)
}
else
{
this
.
$set
(
this
.
cmpOptions
,
'layKey'
,
`add_outStorageUseItem_
${
val
.
useRequestType
}
`
)
}
...
...
@@ -335,7 +335,7 @@ export default {
cancelButtonText
:
'取消'
,
type
:
'warning'
}).
then
(()
=>
{
post
(
`InStorageRequestItem/outStorageOutItem/delete?requestItemIds=
${
this
.
selectionRows
.
map
(
item
=>
item
.
id
).
join
(
','
)}
`
).
then
(
res
=>
{
post
(
`
/
InStorageRequestItem/outStorageOutItem/delete?requestItemIds=
${
this
.
selectionRows
.
map
(
item
=>
item
.
id
).
join
(
','
)}
`
).
then
(
res
=>
{
this
.
$message
({
type
:
'success'
,
message
:
'删除成功!'
...
...
applications/dee-mes/src/privateComponents/components/ERP_OutStorageOutConfirm/components/left.vue
0 → 100644
View file @
803cfc7c
<
template
>
<div
class=
"proPreConfirmLeft"
style=
"padding-right: 15px; height: 100%; overflow: scroll;"
>
<!-- 搜索 -->
<dee-as-com
:lay-config=
"
{
typeName: 'OutStorageMaterialUse',
layKey: 'defaultQuery'
}"
@searchEvent="searchEvent"
/>
<!-- 分类展示 -->
<el-collapse
v-model=
"collapse.active"
v-loading=
"loading"
accordion
>
<el-collapse-item
v-for=
"(request, index) in requests"
:key=
"index"
:name=
"(index + 1).toString()"
>
<template
slot=
"title"
>
<section
class=
"collapse-title"
>
|
{{
request
.
name
}}
(
{{
request
.
lists
.
length
}}
)
</section>
</
template
>
<ul
v-if=
"request.lists.length"
>
<
template
>
<el-checkbox
v-model=
"checkedAll"
:indeterminate=
"isIndeterminate"
@
change=
"v => handleCheckAllChange(v)"
>
全选
</el-checkbox>
<el-checkbox-group
v-model=
"checkedLists"
@
change=
"handleCheckedCitiesChange"
>
<el-checkbox
v-for=
"(item) in request.lists"
:key=
"item.id"
:label=
"item"
>
<i
class=
"el-icon-document"
/>
{{
item
.
reqNo
}}
,
{{
item
.
creator
.
userName
||
''
}}
,
{{
item
.
createTime
}}
,
{{
item
.
startTime
}}
</el-checkbox>
</el-checkbox-group>
</
template
>
</ul>
<span
v-else
class=
"empty"
>
暂无数据
</span>
</el-collapse-item>
</el-collapse>
</div>
</template>
<
script
>
import
{
post
}
from
'@/utils/http'
export
default
{
name
:
'MatchConfirmLeft'
,
components
:
{
},
props
:
{
selectData
:
{
type
:
Object
,
default
:
()
=>
{}
}
},
data
()
{
return
{
loading
:
false
,
// 搜索表单
form
:
{
reqNo
:
''
,
reqBill
:
''
,
ao
:
''
,
resCode
:
''
,
modelNo
:
''
},
// 手风琴默认高亮
active
:
0
,
// 手风琴组件
collapse
:
{
active
:
[
'1'
]
},
// 申请列表
requests
:
[
{
name
:
'领用出库'
,
lists
:
[]
}
],
searchItems
:
[],
checkedAll
:
false
,
isIndeterminate
:
false
,
checkedLists
:
[]
}
},
computed
:
{},
watch
:
{
checkedLists
:
{
deep
:
true
,
handler
(
val
)
{
this
.
$emit
(
'currentLeftData:click'
,
val
)
}
}
},
mounted
()
{
this
.
init
()
this
.
$bus
.
$on
(
'refreshMaterialUseConfirm'
,
(
hasFlag
)
=>
{
this
.
$nextTick
(()
=>
{
this
.
init
()
})
})
},
methods
:
{
searchEvent
(
data
)
{
this
.
searchItems
=
data
&&
data
.
items
||
[]
this
.
init
()
},
// 加载左侧申请表
init
()
{
const
params
=
{
'pageFrom'
:
1
,
'pageSize'
:
9999
,
'searchItems'
:
{
'children'
:
[],
'items'
:
[{
'fieldName'
:
'subTypeName'
,
'operator'
:
'EQ'
,
'value'
:
'OutStorageMaterialUse'
},
{
'fieldName'
:
'state'
,
'operator'
:
'EQ'
,
'value'
:
'Pending_Verify'
},
...
this
.
searchItems
],
'operator'
:
'AND'
},
'openProps'
:
[
],
'sortItem'
:
[
{
'fieldName'
:
'modifyTime'
,
'sortOrder'
:
'desc'
}
]
}
this
.
loading
=
true
this
.
checkedAll
=
false
this
.
isIndeterminate
=
false
this
.
checkedLists
=
[]
post
(
`/OutStorageRequest/materialUse/findTask`
,
params
).
then
(
res
=>
{
const
data
=
res
.
items
this
.
requests
[
0
].
lists
=
data
||
[]
}).
catch
(
err
=>
console
.
log
(
err
)).
finally
(()
=>
{
this
.
loading
=
false
})
},
handleCheckAllChange
(
val
)
{
this
.
checkedLists
=
val
?
this
.
requests
[
0
].
lists
:
[]
this
.
isIndeterminate
=
false
},
handleCheckedCitiesChange
(
value
)
{
const
checkedCount
=
value
.
length
this
.
checkedAll
=
checkedCount
===
this
.
requests
[
0
].
lists
.
length
this
.
isIndeterminate
=
checkedCount
>
0
&&
checkedCount
<
this
.
requests
[
0
].
lists
.
length
}
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
ul
{
margin
:
-10px
0
;
padding
:
5px
0
0
0
;
li
{
margin-top
:
5px
;
padding
:
0
5px
0
8px
;
height
:
25px
;
line-height
:
25px
;
list-style
:
none
;
cursor
:
pointer
;
font-size
:
14px
;
color
:
#606266
;
opacity
:
.85
;
white-space
:
nowrap
;
&
.black
{
color
:
black
;
}
&
.active-background
{
background-color
:
#67C23A
;}
&
.blue
{
color
:
blue
;
}
&
.red
{
color
:
red
;
}
i
{
font-size
:
14px
;
}
&
:hover
,
&
.active
{
opacity
:
1
;
font-weight
:
500
;
background-color
:
#edf0f5
;
}
}
}
.empty
{
margin-left
:
10px
;
color
:
#666
;
}
.el-date-editor
{
width
:
100%
;
}
.collapse-title
{
font-size
:
14px
;
color
:
#666
;
}
.is-active
.collapse-title
{
font-size
:
15px
;
font-weight
:
600
;
color
:
#222
;
}
</
style
>
applications/dee-mes/src/privateComponents/components/ERP_OutStorageOutConfirm/components/right.vue
0 → 100644
View file @
803cfc7c
<
template
>
<div
class=
"materialUseConfirmRight"
>
<dee-as-com
ref=
"requestCom"
table-height=
"auto"
:basic-data=
"
{ selectData,selectionRows }"
:lay-config="{ typeName: 'OutStorageMaterialUse', layKey: 'defaultResult'}"
@selectionChange="selectionChange"
/>
<dee-as-com
ref=
"itemCom"
:lay-config=
"
{ typeName: 'OutStorageMaterialUseItem', layKey: 'defaultResult'}"
table-height="auto"
/>
</div>
</
template
>
<
script
>
export
default
{
name
:
'MaterialUseConfirmRight'
,
components
:
{},
props
:
{
selectData
:
{
type
:
Object
,
default
:
()
=>
{}
},
currentLeftData
:
{
type
:
Array
,
default
:
()
=>
[]
}
},
data
()
{
return
{
selectionRows
:
[],
selectionItemRows
:
[],
selectionJobResRows
:
[]
}
},
computed
:
{},
watch
:
{},
created
()
{},
mounted
()
{
},
// 组件方法
methods
:
{
selectionChange
(
val
)
{
this
.
selectionRows
=
val
const
requestIds
=
val
&&
val
.
map
(
item
=>
item
.
id
)
this
.
$refs
.
itemCom
&&
this
.
$refs
.
itemCom
.
$refs
.
asCom
.
getData
(
requestIds
)
},
selectionChange_jobRes
(
val
)
{
this
.
selectionJobResRows
=
val
},
init
(
checkList
)
{
const
aoIds
=
checkList
&&
checkList
.
map
(
item
=>
item
.
id
)
if
(
aoIds
&&
aoIds
.
length
)
{
debugger
this
.
$refs
.
requestCom
&&
this
.
$refs
.
requestCom
.
$refs
.
asCom
.
getData
({
'fieldName'
:
'id'
,
'operator'
:
'IN'
,
'value'
:
aoIds
})
}
else
{
setTimeout
(()
=>
{
const
requestComRef
=
this
.
$refs
.
requestCom
&&
(
this
.
$refs
.
requestCom
.
$refs
.
asCom
)
||
null
const
itemComRef
=
this
.
$refs
.
itemCom
&&
(
this
.
$refs
.
itemCom
.
$refs
.
asCom
)
||
{}
requestComRef
&&
(
requestComRef
.
pagination
.
total
=
0
)
itemComRef
&&
(
itemComRef
.
pagination
.
total
=
0
)
requestComRef
&&
(
requestComRef
.
showData
=
[])
itemComRef
&&
(
itemComRef
.
showData
=
[])
},
800
)
}
}
}
}
</
script
>
<
style
lang=
'scss'
>
.materialUseConfirmRight
{
overflow
:
auto
;
width
:
100%
;
height
:
100%
;
box-sizing
:
border-box
;
padding-left
:
8px
;
.sub-title
{
padding-top
:
0px
!
important
;
}
.dee-table
{
.dee-tools
{
margin
:
2px
0
!
important
;
}
.dee-table-config-bar
{
margin
:
2px
0
!
important
;
}
.dee-table-pagination
{
margin-top
:
12px
!
important
;
}
}
}
</
style
>
applications/dee-mes/src/privateComponents/components/ERP_OutStorageOutConfirm/index.vue
0 → 100644
View file @
803cfc7c
<!--
* @LastEditTime: 2024-08-06 09:54:07
* @Description:ERP_领用出库确认
-->
<
template
>
<div
class=
"ERPOutStorageOutConfirm"
>
<dee-fold-pane
:min-percent=
"18"
:default-percent=
"18"
split=
"vertical"
class=
"detail-pane"
>
<template
slot=
"paneL"
>
<Left
ref=
"left"
:select-data=
"selectData"
@
currentLeftData:click=
"currentLeftDataClick"
/>
</
template
>
<
template
slot=
"paneR"
>
<Right
v-show=
"subTypeName === '1'"
ref=
"right"
:select-data=
"selectData"
:current-left-data=
"currentLeftData"
@
left:init=
"() => this.$refs.left.init()"
/>
<!-- empty -->
<section
v-if=
"!subTypeName"
style=
"padding-left: 15px;"
>
请先选择左侧请求单
</section>
</
template
>
</dee-fold-pane>
</div>
</template>
<
script
>
import
Left
from
'./components/left.vue'
import
Right
from
'./components/right.vue'
export
default
{
componentName
:
'ERP_领用出库确认'
,
name
:
'ERPOutStorageOutConfirm'
,
components
:
{
Left
,
Right
},
props
:
{
selectData
:
{
type
:
Object
,
default
:
()
=>
{}
}
},
data
()
{
return
{
subTypeName
:
''
,
currentLeftData
:
null
}
},
computed
:
{},
watch
:
{},
created
()
{},
mounted
()
{},
// 组件方法
methods
:
{
currentLeftDataClick
(
data
)
{
this
.
subTypeName
=
'1'
this
.
currentLeftData
=
data
this
.
$refs
.
right
&&
this
.
$refs
.
right
.
init
(
data
)
}
}
}
</
script
>
<
style
lang=
'scss'
>
.ERPOutStorageOutConfirm
{
width
:
100%
;
height
:
103%
;
box-sizing
:
border-box
;
padding
:
0
4px
;
}
</
style
>
applications/dee-mes/src/privateComponents/components/EditReqAmount/index.vue
View file @
803cfc7c
...
...
@@ -69,7 +69,8 @@ export default {
// this.maxNum = maxAmount
// }
this
.
$emit
(
'input'
,
this
.
reqAmount
)
if
(
this
.
form
.
id
&&
this
.
parentType_Inject
!==
'退库入库'
&&
!
this
.
form
.
subTypeName
.
includes
(
'BackItem'
))
{
if
(
this
.
form
.
id
&&
this
.
parentType_Inject
!==
'退库入库'
&&
!
this
.
form
.
subTypeName
.
includes
(
'BackItem'
)
&&
this
.
parentType_Inject
!==
'OutStorageMaterialUse'
)
{
debugger
this
.
changeAmount
()
}
},
...
...
applications/dee-task-center/src/views/home/compontents/my-task.vue
View file @
803cfc7c
...
...
@@ -120,6 +120,11 @@ export default {
type
:
'ERP_SortAdjust'
,
appId
:
1626782774851
},
{
taskType
:
'领用出库确认'
,
type
:
'ERP_materialUseConfirm'
,
appId
:
1626782774851
},
{
taskType
:
'配套自动退库确认'
,
type
:
'ERP_MatchAutoReturnConfirm'
,
...
...
@@ -220,15 +225,32 @@ export default {
get
(
`/indexTask/task/ProdTask`
,
{}).
then
(
res
=>
{
this
.
$set
(
this
.
quickAccessList
[
index
],
'taskCount'
,
res
.
items
.
count
)
})
}
else
if
(
item
.
t
ype
===
'ERP_SortAdjust'
||
item
.
type
===
'ERP_operatorConfirm'
||
item
.
type
===
'ERP_MatchAutoReturnConfirm
'
)
{
}
else
if
(
item
.
t
askType
===
'准备工出库调整'
||
item
.
taskType
===
'操作工确认'
||
item
.
taskType
===
'配套自动退库确认
'
)
{
post
(
`/ErpSorting/currentUserSortingTaskCount`
,
{}).
then
(
res
=>
{
const
resKey
=
item
.
type
===
'ERP_SortAdjust'
?
'准备工任务数量'
:
item
.
type
===
'ERP_operatorConfirm'
?
'操作工任务数量'
:
'自动配套退库任务'
let
resKey
=
''
switch
(
item
.
taskType
)
{
case
'准备工出库调整'
:
resKey
=
'准备工任务数量'
break
case
'操作工确认'
:
resKey
=
'操作工任务数量'
break
case
'配套自动退库确认'
:
resKey
=
'自动配套退库任务'
break
default
:
break
}
this
.
$set
(
this
.
quickAccessList
[
index
],
'taskCount'
,
res
.
items
[
resKey
])
})
}
else
if
(
item
.
t
ype
===
'ERP_StockBackConfirm
'
)
{
}
else
if
(
item
.
t
askType
===
'库内退库确认
'
)
{
post
(
`/ErpRetirementRequest/searchBackTaskCount`
,
{}).
then
(
res
=>
{
this
.
$set
(
this
.
quickAccessList
[
index
],
'taskCount'
,
res
.
items
)
})
}
else
if
(
item
.
taskType
===
'领用出库确认'
)
{
post
(
`/OutStorageRequest/materialUse/countTask`
,
{}).
then
(
res
=>
{
this
.
$set
(
this
.
quickAccessList
[
index
],
'taskCount'
,
res
.
items
)
})
}
else
{
const
params
=
{
type
:
this
.
quickAccessList
[
index
].
type
...
...
@@ -266,7 +288,7 @@ export default {
}
})
this
.
$store
.
dispatch
(
'app/closeSideBar'
,
false
)
}
else
if
(
item
.
taskType
===
'准备工出库调整'
||
item
.
taskType
===
'操作工确认'
||
item
.
taskType
===
'配套自动退库确认'
||
item
.
taskType
===
'库内退库确认'
)
{
}
else
if
(
item
.
taskType
===
'准备工出库调整'
||
item
.
taskType
===
'操作工确认'
||
item
.
taskType
===
'配套自动退库确认'
||
item
.
taskType
===
'库内退库确认'
||
item
.
taskType
===
'领用出库确认'
)
{
let
pageNo
=
''
switch
(
item
.
taskType
)
{
case
'准备工出库调整'
:
...
...
@@ -281,6 +303,10 @@ export default {
case
'库内退库确认'
:
pageNo
=
'219cf48e-020a-4048-85d7-d5c2b83537f4'
break
case
'领用出库确认'
:
pageNo
=
'1d4c589d-16cd-45e5-900f-78c1fabf86f6'
break
default
:
break
}
...
...
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