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
01edb64e
Commit
01edb64e
authored
Jul 30, 2024
by
jingnan
👀
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ERP相关_CAS配套申请界面开发及接口联调
parent
0bcce179
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
210 additions
and
136 deletions
+210
-136
index.vue
...s/assemblyPlanManagement/stationPlanMaintenance/index.vue
+36
-29
stationPlanList.vue
...PlanManagement/stationPlanMaintenance/stationPlanList.vue
+174
-107
No files found.
applications/dee-mes/src/views/assemblyPlanManagement/stationPlanMaintenance/index.vue
View file @
01edb64e
...
@@ -19,52 +19,55 @@
...
@@ -19,52 +19,55 @@
</div>
</div>
</
template
>
</
template
>
</dee-fold-pane>
</dee-fold-pane>
<dee-tab
v-else
:tabs=
"tabItems"
:show-swipe=
"false"
:is-detail=
"false"
>
<!-- <dee-tab v-else :tabs="tabItems" :show-swipe="false" :is-detail="false">
<div
slot=
"0"
style=
"height:100%;box-sizing:border-box"
>
<div slot="0" style="height:100%;box-sizing:border-box"> -->
<dee-fold-pane
<dee-fold-pane
:min-percent=
"18"
v-else
:default-percent=
"18"
:min-percent=
"18"
split=
"vertical"
:default-percent=
"defaultPercent"
class=
"detail-pane"
split=
"vertical"
fold-direction=
"false"
class=
"detail-pane"
>
fold-direction=
"false"
<
template
slot=
"paneL"
>
>
<div
class=
"three-member-wrap"
>
<
template
slot=
"paneL"
>
<!--
<dee-as-com
<div
class=
"three-member-wrap"
>
<!--
<dee-as-com
ref=
"detailCom"
ref=
"detailCom"
:key=
"layConfig.typeName"
:key=
"layConfig.typeName"
:lay-config=
"layConfig"
:lay-config=
"layConfig"
@
row-click=
"rowClick"
@
row-click=
"rowClick"
/>
-->
/>
-->
<stationPlanList
:state-options=
"stateOptions"
@
getMissData=
"getMissData
"
/>
<stationPlanList
:state-options=
"stateOptions"
@
getMissData=
"getMissData"
@
switchMissPartsShow=
"switchMissPartsShow
"
/>
</div>
</div>
</
template
>
</
template
>
<
template
slot=
"paneR"
>
<
template
slot=
"paneR"
>
<div
class=
"resourceTable-wrap"
>
<div
class=
"resourceTable-wrap"
>
<missingParts
:info=
"missInfo"
/>
<missingParts
:info=
"missInfo"
/>
</div>
</div>
</
template
>
</
template
>
</dee-fold-pane>
</dee-fold-pane>
</div
>
<!-- </div> --
>
<div
slot=
"1"
style=
"height:100%;box-sizing:border-box"
>
<!--
<div slot="1" style="height:100%;box-sizing:border-box">
<searchBar :state-options="stateOptions" @showStation="showStation" @search="search" />
<searchBar :state-options="stateOptions" @showStation="showStation" @search="search" />
<station v-show="headerShow" :state-options="stateOptions" :sorties-id="sortiesId" :form="form" @change="change" />
<station v-show="headerShow" :state-options="stateOptions" :sorties-id="sortiesId" :form="form" @change="change" />
<gantt :form="form" :state-options="stateOptions" :class="[headerShow?'gantt-bar':'gantt-bar no-header']" />
<gantt :form="form" :state-options="stateOptions" :class="[headerShow?'gantt-bar':'gantt-bar no-header']" />
</div>
</div>
</dee-tab>
</dee-tab>
-->
</div>
</div>
</template>
</template>
<
script
>
<
script
>
import
{
post
}
from
'@/utils/http'
import
{
post
}
from
'@/utils/http'
import
searchBar
from
'./searchBar.vue'
//
import searchBar from './searchBar.vue'
import
station
from
'./station.vue'
//
import station from './station.vue'
import
gantt
from
'./gantt.vue'
//
import gantt from './gantt.vue'
import
missingParts
from
'./missingParts'
import
missingParts
from
'./missingParts'
import
stationPlanList
from
'./stationPlanList'
import
stationPlanList
from
'./stationPlanList'
import
materialSupporting
from
'./materialSupporting'
import
materialSupporting
from
'./materialSupporting'
export
default
{
export
default
{
name
:
'DeeMesStationPlanMaintenance'
,
name
:
'DeeMesStationPlanMaintenance'
,
components
:
{
searchBar
,
station
,
gantt
,
missingParts
,
stationPlanList
,
materialSupporting
},
components
:
{
// searchBar, station, gantt,
missingParts
,
stationPlanList
,
materialSupporting
},
data
()
{
data
()
{
return
{
return
{
sortiesId
:
''
,
sortiesId
:
''
,
...
@@ -74,7 +77,8 @@ export default {
...
@@ -74,7 +77,8 @@ export default {
headerShow
:
true
,
headerShow
:
true
,
basicData
:
{},
basicData
:
{},
missInfo
:
{},
missInfo
:
{},
rowData
:
{}
rowData
:
{},
defaultPercent
:
18
}
}
},
},
computed
:
{
computed
:
{
...
@@ -263,6 +267,9 @@ export default {
...
@@ -263,6 +267,9 @@ export default {
},
},
showStation
(
flag
)
{
showStation
(
flag
)
{
this
.
headerShow
=
flag
this
.
headerShow
=
flag
},
switchMissPartsShow
(
data
)
{
this
.
defaultPercent
=
data
}
}
}
}
}
}
...
...
applications/dee-mes/src/views/assemblyPlanManagement/stationPlanMaintenance/stationPlanList.vue
View file @
01edb64e
...
@@ -70,46 +70,68 @@
...
@@ -70,46 +70,68 @@
</
template
>
</
template
>
<
template
slot=
"paneR"
>
<
template
slot=
"paneR"
>
<div
class=
"right-container"
>
<div
class=
"right-container"
>
<dee-tab
:is-lazy=
"false"
:tabs=
"tabItems"
:show-swipe=
"false"
:is-detail=
"false"
@
tabClick=
"tabClick"
>
<div
class=
"detail-tabs"
>
<div
slot=
"0"
style=
"height: 100%; box-sizing: border-box"
>
<div
class=
"menu-tab-wrap"
>
<dee-as-com
<div
v-for=
"(item) in editableTabs"
:key=
"item.configName"
class=
"menu-tab-item"
@
click=
"changeTab(item)"
>
ref=
"detailCom"
<span
:class=
"currTab && item.configName === currTab.configName ? 'link' : ''"
>
{{
item
.
name
}}
</span>
:key=
"layConfig.typeName"
</div>
:basic-data=
"
{activeNodeData,requestParams}"
:lay-config="layConfig"
table-height="calc(100vh - 200px)"
@row-click="rowClick"
/>
</div>
</div>
<div
slot=
"1"
style=
"height: 100%; box-sizing: border-box"
>
</div>
<dee-as-com
<div
class=
"detail-content"
>
ref=
"detailCom2"
<div
v-show=
"currTab && currTab.configName==='JoExecutePlanSend'"
style=
"height:calc(100% - 10px) "
>
:key=
"layConfig.typeName"
<dee-tab
:is-lazy=
"false"
:tabs=
"tabItems"
:show-swipe=
"false"
:is-detail=
"false"
@
tabClick=
"tabClick"
>
:basic-data=
"
{activeNodeData,requestParams}"
<div
slot=
"0"
style=
"height:100%; box-sizing: border-box"
>
:lay-config="layConfig1"
<dee-as-com
table-height="calc(100vh - 200px)"
ref=
"detailCom"
@row-click="rowClick"
:key=
"layConfig.typeName"
/>
:basic-data=
"
{activeNodeData,requestParams}"
:lay-config="layConfig"
table-height="calc(100vh - 160px)"
@row-click="rowClick"
/>
</div>
<div
slot=
"1"
style=
"height:100%; box-sizing: border-box"
>
<dee-as-com
ref=
"detailCom2"
:key=
"layConfig.typeName"
:basic-data=
"
{activeNodeData,requestParams}"
:lay-config="layConfig1"
table-height="calc(100vh - 160px)"
@row-click="rowClick"
/>
</div>
<div
slot=
"2"
style=
"height:100%; box-sizing: border-box"
>
<dee-as-com
ref=
"detailComSI2"
:key=
"layConfig2.typeName"
:basic-data=
"
{stateOptions}"
:lay-config="layConfig2"
table-height="calc(100vh - 160px)"
@row-click="rowClickSpec"
/>
</div>
</dee-tab>
<span
v-if=
"areaUpdatingLists[form.sorties]==='Y'"
class=
"areaUpdateTip"
>
<i
class=
"el-icon-warning"
/>
<span>
温馨提示:
</span>
<span
class=
"tipInfo"
>
当前架次下区域正在更新中......
</span>
</span>
</div>
</div>
<div
slot=
"2"
style=
"height: 100%; box-sizing: border-box
"
>
<div
v-show=
"currTab && currTab.configName==='CasAssemble'"
class=
"background"
style=
"height:calc(100% - 40px);
"
>
<dee-as-com
<dee-as-com
ref=
"detailCom
SI2
"
ref=
"detailCom
ExtCas
"
:
key=
"layConfig2.typeName
"
:
basic-data=
"
{activeNodeData,requestParams}
"
:
basic-data=
"
{stateOptions}"
:
lay-config="{
:lay-config="layConfig2"
typeName: 'ExtCas',
table-height="calc(100vh - 200px)"
layKey: 'casAssembleLists'
@row-click="rowClickSpec
"
}
"
/>
/>
</div>
</div>
</dee-tab>
</div>
<span
v-if=
"areaUpdatingLists[form.sorties]==='Y'"
class=
"areaUpdateTip"
>
<i
class=
"el-icon-warning"
/>
<span>
温馨提示:
</span>
<span
class=
"tipInfo"
>
当前架次下区域正在更新中......
</span>
</span>
</div>
</div>
</
template
>
</
template
>
</dee-fold-pane>
</dee-fold-pane>
</div>
</div>
...
@@ -200,7 +222,22 @@ export default {
...
@@ -200,7 +222,22 @@ export default {
currentNodekey
:
''
,
currentNodekey
:
''
,
areaUpdatingLists
:
{},
areaUpdatingLists
:
{},
requestParams
:
[],
requestParams
:
[],
showSearchConditions
:
true
// 控制搜索条件是否显示
showSearchConditions
:
true
,
// 控制搜索条件是否显示
editableTabs
:
[{
id
:
1
,
name
:
'计划下达'
,
configName
:
'JoExecutePlanSend'
},
{
id
:
2
,
name
:
'CAS配套'
,
configName
:
'CasAssemble'
}],
currTab
:
{
id
:
1
,
name
:
'计划下达'
,
configName
:
'JoExecutePlanSend'
}
}
}
},
},
watch
:
{
watch
:
{
...
@@ -534,44 +571,13 @@ export default {
...
@@ -534,44 +571,13 @@ export default {
this
.
treeData
[
0
].
children
[
0
].
children
[
0
].
level
=
3
this
.
treeData
[
0
].
children
[
0
].
children
[
0
].
level
=
3
this
.
activeNodeData
=
this
.
treeData
[
0
].
children
[
0
].
children
[
0
]
this
.
activeNodeData
=
this
.
treeData
[
0
].
children
[
0
].
children
[
0
]
this
.
treeData
[
0
].
children
[
0
].
children
[
0
].
activeTab
=
this
.
activeTab
this
.
treeData
[
0
].
children
[
0
].
children
[
0
].
activeTab
=
this
.
activeTab
if
(
this
.
activeTab
===
'0'
)
{
this
.
treeData
[
0
].
children
[
0
].
children
[
0
].
searchStories
=
this
.
form
.
sortiesName
if
(
this
.
$refs
.
detailCom
.
$refs
.
asCom
&&
this
.
$refs
.
detailCom
.
$refs
.
asCom
.
getData
)
{
this
.
getRightTableData
(
this
.
treeData
[
0
].
children
[
0
].
children
[
0
])
this
.
$refs
.
detailCom
.
$refs
.
asCom
.
getData
(
this
.
treeData
[
0
].
children
[
0
].
children
[
0
])
this
.
$emit
(
'getMissData'
,
null
)
}
}
else
if
(
this
.
activeTab
===
'1'
)
{
if
(
this
.
$refs
.
detailCom2
.
$refs
.
asCom
&&
this
.
$refs
.
detailCom2
.
$refs
.
asCom
.
getData
)
{
this
.
$refs
.
detailCom2
.
$refs
.
asCom
.
getData
(
this
.
treeData
[
0
].
children
[
0
].
children
[
0
])
this
.
$emit
(
'getMissData'
,
null
)
}
}
else
if
(
this
.
activeTab
===
'2'
)
{
if
(
this
.
$refs
.
detailComSI2
.
$refs
.
asCom
&&
this
.
$refs
.
detailComSI2
.
$refs
.
asCom
.
getData
)
{
this
.
$refs
.
detailComSI2
.
$refs
.
asCom
.
getData
(
this
.
treeData
[
0
].
children
[
0
].
children
[
0
])
this
.
$emit
(
'getMissData'
,
null
)
}
}
})
})
}
else
{
}
else
{
this
.
activeNodeData
=
{}
this
.
activeNodeData
=
{}
this
.
activeNodeData
.
searchStories
=
this
.
form
.
sortiesName
this
.
activeNodeData
.
searchStories
=
this
.
form
.
sortiesName
this
.
$nextTick
(()
=>
{
this
.
getRightTableData
(
this
.
activeNodeData
)
if
(
this
.
activeTab
===
'0'
)
{
if
(
this
.
$refs
.
detailCom
.
$refs
.
asCom
&&
this
.
$refs
.
detailCom
.
$refs
.
asCom
.
getData
)
{
this
.
$refs
.
detailCom
.
$refs
.
asCom
.
getData
(
this
.
activeNodeData
)
this
.
$emit
(
'getMissData'
,
null
)
}
}
else
if
(
this
.
activeTab
===
'1'
)
{
if
(
this
.
$refs
.
detailCom2
.
$refs
.
asCom
&&
this
.
$refs
.
detailCom2
.
$refs
.
asCom
.
getData
)
{
this
.
$refs
.
detailCom2
.
$refs
.
asCom
.
getData
(
this
.
activeNodeData
)
this
.
$emit
(
'getMissData'
,
null
)
}
}
else
if
(
this
.
activeTab
===
'2'
)
{
if
(
this
.
$refs
.
detailComSI2
.
$refs
.
asCom
&&
this
.
$refs
.
detailComSI2
.
$refs
.
asCom
.
getData
)
{
this
.
$refs
.
detailComSI2
.
$refs
.
asCom
.
getData
(
this
.
activeNodeData
)
this
.
$emit
(
'getMissData'
,
null
)
}
}
})
}
}
})
})
.
catch
((
err
)
=>
console
.
log
(
err
))
.
catch
((
err
)
=>
console
.
log
(
err
))
...
@@ -584,22 +590,7 @@ export default {
...
@@ -584,22 +590,7 @@ export default {
this
.
activeNodeData
.
activeTab
=
this
.
activeTab
this
.
activeNodeData
.
activeTab
=
this
.
activeTab
this
.
activeNodeData
.
searchStories
=
this
.
form
.
sortiesName
this
.
activeNodeData
.
searchStories
=
this
.
form
.
sortiesName
this
.
$nextTick
(()
=>
{
this
.
$nextTick
(()
=>
{
if
(
this
.
activeTab
===
'0'
)
{
this
.
getRightTableData
(
this
.
activeNodeData
.
level
!==
4
?
this
.
activeNodeData
:
null
)
if
(
this
.
$refs
.
detailCom
.
$refs
.
asCom
&&
this
.
$refs
.
detailCom
.
$refs
.
asCom
.
getData
)
{
this
.
$refs
.
detailCom
.
$refs
.
asCom
.
getData
(
this
.
activeNodeData
.
level
!==
4
?
this
.
activeNodeData
:
null
)
this
.
$emit
(
'getMissData'
,
null
)
}
}
else
if
(
this
.
activeTab
===
'1'
)
{
if
(
this
.
$refs
.
detailCom2
.
$refs
.
asCom
&&
this
.
$refs
.
detailCom2
.
$refs
.
asCom
.
getData
)
{
this
.
$refs
.
detailCom2
.
$refs
.
asCom
.
getData
(
this
.
activeNodeData
.
level
!==
4
?
this
.
activeNodeData
:
null
)
this
.
$emit
(
'getMissData'
,
null
)
}
}
else
if
(
this
.
activeTab
===
'2'
)
{
if
(
this
.
$refs
.
detailComSI2
.
$refs
.
asCom
&&
this
.
$refs
.
detailComSI2
.
$refs
.
asCom
.
getData
)
{
this
.
$refs
.
detailComSI2
.
$refs
.
asCom
.
getData
(
this
.
activeNodeData
)
this
.
$emit
(
'getMissData'
,
null
)
}
}
})
})
},
},
handleNodeClick
(
data
,
node
)
{
handleNodeClick
(
data
,
node
)
{
...
@@ -612,24 +603,7 @@ export default {
...
@@ -612,24 +603,7 @@ export default {
data
.
searchStories
=
this
.
form
.
sortiesName
data
.
searchStories
=
this
.
form
.
sortiesName
this
.
activeNodeData
=
data
this
.
activeNodeData
=
data
if
(
node
.
level
===
2
||
node
.
level
===
3
)
{
if
(
node
.
level
===
2
||
node
.
level
===
3
)
{
this
.
$nextTick
(()
=>
{
this
.
getRightTableData
(
data
)
if
(
this
.
activeTab
===
'0'
)
{
if
(
this
.
$refs
.
detailCom
.
$refs
.
asCom
&&
this
.
$refs
.
detailCom
.
$refs
.
asCom
.
getData
)
{
this
.
$refs
.
detailCom
.
$refs
.
asCom
.
getData
(
data
)
this
.
$emit
(
'getMissData'
,
null
)
}
}
else
if
(
this
.
activeTab
===
'1'
)
{
if
(
this
.
$refs
.
detailCom2
.
$refs
.
asCom
&&
this
.
$refs
.
detailCom2
.
$refs
.
asCom
.
getData
)
{
this
.
$refs
.
detailCom2
.
$refs
.
asCom
.
getData
(
data
)
this
.
$emit
(
'getMissData'
,
null
)
}
}
else
if
(
this
.
activeTab
===
'2'
)
{
if
(
this
.
$refs
.
detailComSI2
.
$refs
.
asCom
&&
this
.
$refs
.
detailComSI2
.
$refs
.
asCom
.
getData
)
{
this
.
$refs
.
detailComSI2
.
$refs
.
asCom
.
getData
(
data
)
this
.
$emit
(
'getMissData'
,
null
)
}
}
})
}
}
if
(
node
.
level
===
4
)
{
if
(
node
.
level
===
4
)
{
this
.
requestParams
=
[
this
.
requestParams
=
[
...
@@ -716,7 +690,16 @@ export default {
...
@@ -716,7 +690,16 @@ export default {
},
},
getCurrentData
(
data
)
{
getCurrentData
(
data
)
{
if
(
data
.
level
===
2
||
data
.
level
===
3
)
{
if
(
data
.
level
===
2
||
data
.
level
===
3
)
{
this
.
$nextTick
(()
=>
{
this
.
getRightTableData
(
data
)
}
},
getRightTableData
(
data
)
{
this
.
$nextTick
(()
=>
{
if
(
this
.
currTab
&&
this
.
currTab
.
configName
===
'CasAssemble'
)
{
if
(
this
.
$refs
.
detailComExtCas
.
$refs
.
asCom
&&
this
.
$refs
.
detailComExtCas
.
$refs
.
asCom
.
getData
)
{
this
.
$refs
.
detailComExtCas
.
$refs
.
asCom
.
getData
(
data
)
}
}
else
{
if
(
this
.
activeTab
===
'0'
)
{
if
(
this
.
activeTab
===
'0'
)
{
if
(
this
.
$refs
.
detailCom
.
$refs
.
asCom
&&
this
.
$refs
.
detailCom
.
$refs
.
asCom
.
getData
)
{
if
(
this
.
$refs
.
detailCom
.
$refs
.
asCom
&&
this
.
$refs
.
detailCom
.
$refs
.
asCom
.
getData
)
{
this
.
$refs
.
detailCom
.
$refs
.
asCom
.
getData
(
data
)
this
.
$refs
.
detailCom
.
$refs
.
asCom
.
getData
(
data
)
...
@@ -733,8 +716,8 @@ export default {
...
@@ -733,8 +716,8 @@ export default {
this
.
$emit
(
'getMissData'
,
null
)
this
.
$emit
(
'getMissData'
,
null
)
}
}
}
}
}
)
}
}
}
)
},
},
rowClick
(
data
)
{
rowClick
(
data
)
{
this
.
$emit
(
'getMissData'
,
data
)
this
.
$emit
(
'getMissData'
,
data
)
...
@@ -746,6 +729,12 @@ export default {
...
@@ -746,6 +729,12 @@ export default {
},
},
toggleSearchConditions
()
{
toggleSearchConditions
()
{
this
.
showSearchConditions
=
!
this
.
showSearchConditions
this
.
showSearchConditions
=
!
this
.
showSearchConditions
},
changeTab
(
val
)
{
this
.
currTab
=
val
this
.
getRightTableData
(
this
.
activeNodeData
)
const
percent
=
this
.
currTab
&&
this
.
currTab
.
configName
===
'CasAssemble'
?
0
:
18
this
.
$emit
(
'switchMissPartsShow'
,
percent
)
}
}
}
}
}
}
...
@@ -908,7 +897,85 @@ export default {
...
@@ -908,7 +897,85 @@ export default {
.right-container
{
.right-container
{
position
:
relative
;
position
:
relative
;
// width: 82%;
// width: 82%;
margin-left
:
20px
;
// margin-left: 20px;
height
:
100%
;
margin
:
8px
;
box-sizing
:
border-box
;
display
:
flex
;
justify-content
:
flex-start
;
background
:
#f1f4f5
;
.detail-tabs
{
height
:
100%
;
// overflow-y: scroll;
.menu-tab-wrap
{
width
:
38px
;
display
:
flex
;
justify-content
:
flex-start
;
flex-wrap
:
wrap
;
text-align
:
center
;
margin
:
6px
;
.menu-tab-item
{
background
:
#fff
;
padding
:
8px
10px
;
margin-bottom
:
10px
;
border
:
1px
solid
#dedede
;
border-radius
:
4px
;
cursor
:
pointer
;
writing-mode
:
tb
;
font-size
:
14px
;
.el-icon-close
{
margin-top
:
4px
;
}
}
}
}
.detail-content
{
width
:
100%
;
height
:
100%
;
background
:
#fff
;
overflow-y
:
auto
;
.task-name
{
font-weight
:
bold
;
}
.el-scrollbar__wrap
{
height
:
100%
;
}
.el-scrollbar__view
{
height
:
100%
;
}
.background
{
background
:
rgba
(
255
,
255
,
255
,
1
);
padding
:
12px
16px
;
}
.detaile-page
{
background
:
rgba
(
255
,
255
,
255
,
1
);
}
.el-dialog__body
{
padding
:
20px
20px
0
20px
;
}
.el-tabs__content
{
padding
:
0
8px
;
background
:
#fff
;
}
.dee-tools
{
margin-right
:
20px
!
important
;
margin-top
:
0
!
important
;
// background-color: #ebebeb;
// border: 1px solid #dedede;
height
:
30px
;
.icon
{
padding-left
:
10px
;
}
.icon-font
{
padding-right
:
10px
;
}
}
.flex-s
{
display
:
flex
;
justify-content
:
space-between
;
}
}
.areaUpdateTip
{
.areaUpdateTip
{
position
:
absolute
;
position
:
absolute
;
top
:
20px
;
top
:
20px
;
...
...
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