Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
X
xxx_phase2_web
Project overview
Project overview
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
夏敏伟
xxx_phase2_web
Commits
6f457b84
Commit
6f457b84
authored
Oct 30, 2023
by
夏敏伟
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
增加演习暂停开启等功能
parent
2376738d
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
165 additions
and
64 deletions
+165
-64
src/api/chat/chatRoom.js
src/api/chat/chatRoom.js
+15
-1
src/view/ddkz/ddkzzs.vue
src/view/ddkz/ddkzzs.vue
+12
-4
src/view/sjgl/ddkzConfig.vue
src/view/sjgl/ddkzConfig.vue
+18
-12
src/view/sjgl/ddkzConfig/ddkzConfigAdd.vue
src/view/sjgl/ddkzConfig/ddkzConfigAdd.vue
+4
-4
src/view/sjgl/ddkzConfig/ddkzConfigApprove.vue
src/view/sjgl/ddkzConfig/ddkzConfigApprove.vue
+5
-0
src/view/sjgl/ddkzConfig/ddkzConfigList.vue
src/view/sjgl/ddkzConfig/ddkzConfigList.vue
+84
-16
src/view/sjgl/dfzygl.vue
src/view/sjgl/dfzygl.vue
+6
-6
src/view/sjgl/flfggl.vue
src/view/sjgl/flfggl.vue
+5
-5
src/view/sjgl/fzjcgl.vue
src/view/sjgl/fzjcgl.vue
+6
-6
src/view/sjgl/xxxlgl.vue
src/view/sjgl/xxxlgl.vue
+5
-5
src/view/sjgl/yqjcgl.vue
src/view/sjgl/yqjcgl.vue
+5
-5
No files found.
src/api/chat/chatRoom.js
View file @
6f457b84
...
...
@@ -29,7 +29,7 @@ export const leaveChatRoom = (userId) => {
//查询某个用户所有聊天室(群组)
export
const
getChatRoomList
=
(
data
)
=>
{
return
post
(
`
${
PREFIX_CHATROOM
}
/list`
,
data
);
return
post
(
`
${
PREFIX_CHATROOM
}
/list`
,
data
);
}
//阅读(群组)信息
...
...
@@ -52,6 +52,20 @@ export const upLoadFiles = (bucket, data) => {
return
fileUpload
(
`api/rest/file/upload?bucket=
${
bucket
}
`
,
data
)
}
//启动聊天室(群组)
export
const
startExercise
=
(
chatRoomId
)
=>
{
return
post
(
`
${
PREFIX_CHATROOM
}
/start?chatRoomId=
${
chatRoomId
}
`
);
}
//删除聊天室(群组)
export
const
removeExercise
=
(
chatRoomId
)
=>
{
return
get
(
`
${
PREFIX_CHATROOM
}
/remove?chatRoomId=
${
chatRoomId
}
`
);
}
//停止聊天室(群组)
export
const
stopExercise
=
(
data
)
=>
{
return
post
(
`
${
PREFIX_CHATROOM
}
/end`
,
data
);
}
...
...
src/view/ddkz/ddkzzs.vue
View file @
6f457b84
...
...
@@ -20,8 +20,8 @@
<el-form-item>
<div
class=
"searchButton"
:style=
"
{ background: stompClient.connected ? 'Green' : 'gray', color: 'white' }">
<span
:class=
"[!stompClient.connected?'el-icon-loading':
'']"
></span>
{{
stompClient
.
connected
?
'
已连接
'
:
'
重连中
'
}}
<span
:class=
"[!stompClient.connected ? 'el-icon-loading' :
'']"
></span>
{{
stompClient
.
connected
?
'
已连接
'
:
'
重连中
'
}}
</div>
</el-form-item>
</el-form>
...
...
@@ -29,7 +29,10 @@
<div
class=
"ddkz-content"
>
<div
v-for=
"item in analogData"
class=
"content-card bk-ddkz-animation animate__animated animate__ZoomIn"
@
click=
"showInfo(item)"
>
<div
class=
"card-title"
v-text=
"item.nickname"
:title=
"item.nickname"
></div>
<div
class=
"card-title"
:title=
"item.nickname"
>
{{
item
.
nickname
}}
<span
:style=
"
{ fontSize: '14px', color: item.status.name == '待开始' ? '#85ce61' : (item.status.name == '进行中' ? '#409eff' : (item.status.name == '已结束' ? '#f78989' : '')) }">
{{
'
(
'
+
item
.
status
.
name
+
'
)
'
}}
</span></div>
<div
class=
"card-date"
v-text=
"item.createTime"
></div>
<div
class=
"card-text"
v-text=
"item.conRemark"
:title=
"item.conRemark"
></div>
<div
class=
"card-tags"
>
...
...
@@ -71,7 +74,12 @@ export default {
},
methods
:
{
showInfo
(
item
)
{
this
.
$router
.
push
({
name
:
'
聊天室详情
'
+
this
.
$route
.
meta
.
type_name
,
params
:
{
data
:
item
,
client
:
this
.
stompClient
}
});
if
(
item
.
status
.
name
!==
'
待开始
'
)
{
this
.
$router
.
push
({
name
:
'
聊天室详情
'
+
this
.
$route
.
meta
.
type_name
,
params
:
{
data
:
item
,
client
:
this
.
stompClient
}
});
}
else
{
this
.
$message
.
warning
(
'
此演习暂未开启,不能进入!
'
);
}
},
queryChatRoomListFn
(
params
)
{
getChatRoomList
(
params
).
then
(
res
=>
{
...
...
src/view/sjgl/ddkzConfig.vue
View file @
6f457b84
...
...
@@ -2,29 +2,35 @@
<div
class=
"ddkzConfig"
>
<el-tabs
type=
"border-card"
@
tab-click=
"handleTabClick"
v-model=
"activeTabs"
>
<el-tab-pane>
<span
slot=
"label"
><i
class=
"el-icon-d
ate"
></i>
新增会议
</span>
<span
slot=
"label"
><i
class=
"el-icon-d
ocument-add"
></i>
新增演习
</span>
<DdkzConfigAdd></DdkzConfigAdd>
</el-tab-pane>
<el-tab-pane>
<span
slot=
"label"
><i
class=
"el-icon-d
ate"
></i>
会议
列表
</span>
<span
slot=
"label"
><i
class=
"el-icon-d
ocument-copy"
></i>
演习
列表
</span>
<DdkzConfigList></DdkzConfigList>
</el-tab-pane>
<el-tab-pane>
<span
slot=
"label"
><i
class=
"el-icon-document-checked"
></i>
演习审批
</span>
<DdkzConfigApprove></DdkzConfigApprove>
</el-tab-pane>
</el-tabs>
</div>
</
template
>
<
script
>
import
ddkzConfigAdd
from
'
../sjgl/ddkzConfig/ddkzConfigAdd.vue
'
;
import
ddkzConfigList
from
'
../sjgl/ddkzConfig/ddkzConfigList.vue
'
;
import
ddkzConfigAdd
from
'
@/view/sjgl/ddkzConfig/ddkzConfigAdd.vue
'
;
import
ddkzConfigList
from
'
@/view/sjgl/ddkzConfig/ddkzConfigList.vue
'
;
import
ddkzConfigApprove
from
'
@/view/sjgl/ddkzConfig/ddkzConfigApprove.vue
'
;
export
default
{
data
()
{
return
{
activeTabs
:
''
}
},
components
:{
DdkzConfigAdd
:
ddkzConfigAdd
,
DdkzConfigList
:
ddkzConfigList
components
:
{
DdkzConfigAdd
:
ddkzConfigAdd
,
DdkzConfigList
:
ddkzConfigList
,
DdkzConfigApprove
:
ddkzConfigApprove
},
methods
:
{
handleTabClick
()
{
...
...
@@ -45,7 +51,7 @@ export default {
>
.el-tabs--border-card
{
width
:
calc
(
100%
-
4px
);
height
:
calc
(
100%
-
4px
);
border
:
2px
solid
#
125473
;
border
:
2px
solid
#
3a5f94
c9
;
border-radius
:
5px
;
box-sizing
:
border-box
;
background
:
#ffffff
00
;
...
...
@@ -58,7 +64,7 @@ export default {
>
.el-tabs__header
{
background-color
:
unset
;
border-bottom
:
2px
solid
#
125473
;
border-bottom
:
2px
solid
#
3a5f94
c9
;
.el-tabs__item
{
color
:
#dedede
;
...
...
@@ -66,9 +72,9 @@ export default {
.el-tabs__item.is-active
{
color
:
#ffe000
;
background-color
:
#
116791
;
border-right-color
:
#
116791
;
border-left-color
:
#
116791
;
background-color
:
#
3a5f94
c9
;
border-right-color
:
#
3a5f94
c9
;
border-left-color
:
#
3a5f94
c9
;
}
.el-tabs__item
:not
(
.is-disabled
)
:hover
{
...
...
src/view/sjgl/ddkzConfig/ddkzConfigAdd.vue
View file @
6f457b84
<
template
>
<div
class=
"addDdkzConfig"
>
<el-form
class=
"myForm"
label-position=
"right"
label-width=
"200px"
:model=
"formData"
>
<el-form-item
label=
"
议
题"
>
<el-form-item
label=
"
演习标
题"
>
<el-input
v-model=
"formData.nickname"
></el-input>
</el-form-item>
<el-form-item
label=
"
聊天室
主持人"
>
<el-form-item
label=
"
演习
主持人"
>
<!--
<el-input
v-model=
"formData.chatroomOwner"
></el-input>
-->
<el-select
v-model=
"formData.chatroomOwner"
placeholder=
"请选择"
>
<el-option
v-for=
"item in allData"
:key=
"item.account"
:label=
"item.account"
:value=
"item.account"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"
备注
"
>
<el-form-item
label=
"
演习内容
"
>
<el-input
v-model=
"formData.conRemark"
></el-input>
</el-form-item>
<el-form-item
label=
"与会方"
>
...
...
@@ -96,7 +96,7 @@
</el-form>
</el-form-item>
<el-form-item>
<el-button
type=
"success"
@
click=
"createMeeting"
>
创建
会议
</el-button>
<el-button
type=
"success"
@
click=
"createMeeting"
>
创建
演习
</el-button>
</el-form-item>
</el-form>
</div>
...
...
src/view/sjgl/ddkzConfig/ddkzConfigApprove.vue
0 → 100644
View file @
6f457b84
<
template
>
<div
class=
"yxsp"
>
</div>
</
template
>
\ No newline at end of file
src/view/sjgl/ddkzConfig/ddkzConfigList.vue
View file @
6f457b84
<
template
>
<div
class=
"ddkzConfigList"
>
<div
class=
"ddkzCondition"
>
<el-date-picker
value-format=
"yyyy-MM-dd HH:mm:ss"
v-model=
"dateRange"
type=
"daterange"
range-separator=
"至"
<el-date-picker
value-format=
"yyyy-MM-dd HH:mm:ss"
v-model=
"
form.
dateRange"
type=
"daterange"
range-separator=
"至"
start-placeholder=
"开始时间"
end-placeholder=
"结束时间"
:default-time=
"['00:00:00', '23:59:59']"
>
</el-date-picker>
<el-select
style=
"margin-left: 10px;"
v-model=
"form.status"
placeholder=
"请选择演习状态"
clearable
>
<el-option
v-for=
"item in exerciseList"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
>
</el-option>
</el-select>
<el-input
class=
"myInput"
v-model=
"form.keyword"
></el-input>
<div
class=
"searchButton"
@
click=
"searchChatList"
>
搜索
</div>
</div>
<div
class=
"ddkzContent"
>
...
...
@@ -11,41 +16,92 @@
@
selection-change=
"handleSelectionChange"
>
<!--
<el-table-column
type=
"selection"
width=
"55"
>
</el-table-column>
-->
<el-table-column
type=
"index"
width=
"60"
label=
"序号"
align=
"center"
></el-table-column>
<el-table-column
prop=
"nickname"
label=
"主题"
align=
"center"
></el-table-column>
<el-table-column
prop=
"chatroomOwner"
label=
"支持人"
align=
"center"
></el-table-column>
<el-table-column
prop=
"createTime"
label=
"日期"
align=
"center"
></el-table-column>
<!--
<el-table-column
label=
"操作"
align=
"center"
width=
"500"
>
<el-table-column
prop=
"conRemark"
label=
"演习内容"
align=
"center"
></el-table-column>
<el-table-column
prop=
"createTime"
label=
"演习结果"
align=
"center"
></el-table-column>
<el-table-column
prop=
"status.name"
label=
"演习状态"
align=
"center"
></el-table-column>
<el-table-column
prop=
"createTime"
label=
"开始时间"
align=
"center"
></el-table-column>
<el-table-column
label=
"操作"
align=
"center"
width=
"500"
>
<template
slot-scope=
"scope"
>
<el-button
size=
"mini"
type=
"danger"
@
click=
"deleteMeeting(scope.row)"
>
删除
</el-button>
<el-button
v-if=
"scope.row.status.name !== '进行中'"
size=
"mini"
type=
"danger"
@
click=
"deleteExercise(scope.row)"
>
删除
</el-button>
<el-button
v-if=
"scope.row.status.name == '待开始'"
size=
"mini"
type=
"success"
@
click=
"startExercise(scope.row)"
>
启动
</el-button>
<el-button
v-if=
"scope.row.status.name == '进行中'"
size=
"mini"
type=
"warning"
@
click=
"stopExercise(scope.row)"
>
结束
</el-button>
</
template
>
</el-table-column>
-->
</el-table-column>
</el-table>
</div>
</div>
</template>
<
script
>
import
{
getChatRoomList
}
from
"
@/api/chat/chatRoom
"
;
import
{
getChatRoomList
,
startExercise
,
stopExercise
,
removeExercise
}
from
"
@/api/chat/chatRoom
"
;
export
default
{
data
()
{
return
{
dateRange
:
[],
meetingList
:
[]
form
:
{
dateRange
:
[],
status
:
null
,
keyword
:
null
},
meetingList
:
[],
exerciseList
:
[{
label
:
'
待开始
'
,
value
:
'
CREATED
'
},
{
label
:
'
进行中
'
,
value
:
'
ONGOING
'
},
{
label
:
'
已结束
'
,
value
:
'
CLOSED
'
}]
}
},
methods
:
{
handleSelectionChange
()
{
},
deleteMeeting
(
item
)
{
},
//删除演习
deleteExercise
(
item
)
{
removeExercise
(
item
.
id
).
then
(
res
=>
{
if
(
res
==
1
)
{
this
.
$message
.
success
(
'
删除演习成功!
'
);
this
.
searchChatList
();
}
}).
catch
(
error
=>
{
this
.
$message
.
error
(
error
.
message
);
});
},
//启动演习
startExercise
(
item
)
{
startExercise
(
item
.
id
).
then
(
res
=>
{
if
(
res
==
1
)
{
this
.
$message
.
success
(
'
启动成功!
'
);
this
.
searchChatList
();
}
}).
catch
(
error
=>
{
this
.
$message
.
error
(
error
.
message
);
});
},
//结束演习
stopExercise
(
item
)
{
let
params
=
{
chatRoomId
:
item
.
id
,
result
:
'
暂无
'
};
stopExercise
(
params
).
then
(
res
=>
{
if
(
res
==
1
)
{
this
.
$message
.
success
(
'
此演习结束!
'
);
this
.
searchChatList
();
}
}).
catch
(
error
=>
{
this
.
$message
.
error
(
error
.
message
);
});
},
queryChatRoomListFn
(
param
)
{
getChatRoomList
(
param
).
then
(
res
=>
{
this
.
meetingList
=
res
;
console
.
log
(
res
);
});
},
searchChatList
(){
if
(
this
.
dateRange
.
length
==
2
)
{
this
.
queryChatRoomListFn
({
startTime
:
this
.
dateRange
[
0
],
endTime
:
this
.
dateRange
[
1
],
userId
:
this
.
userInfo
.
account
})
}
else
{
this
.
queryChatRoomListFn
({
userId
:
this
.
userInfo
.
account
})
searchChatList
()
{
if
(
this
.
form
.
dateRange
.
length
==
2
)
{
this
.
queryChatRoomListFn
({
startTime
:
this
.
form
.
dateRange
[
0
],
endTime
:
this
.
form
.
dateRange
[
1
],
userId
:
this
.
userInfo
.
account
,
status
:
this
.
form
.
status
==
''
?
null
:
this
.
form
.
status
,
keyword
:
this
.
form
.
keyword
==
''
?
null
:
this
.
form
.
keyword
})
}
else
{
this
.
queryChatRoomListFn
({
userId
:
this
.
userInfo
.
account
,
status
:
this
.
form
.
status
==
''
?
null
:
this
.
form
.
status
,
keyword
:
this
.
form
.
keyword
==
''
?
null
:
this
.
form
.
keyword
})
}
}
},
...
...
@@ -59,7 +115,7 @@ export default {
}
},
mounted
()
{
this
.
queryChatRoomListFn
({
userId
:
this
.
userInfo
.
account
});
this
.
queryChatRoomListFn
({
userId
:
this
.
userInfo
.
account
});
}
}
</
script
>
...
...
@@ -87,6 +143,18 @@ export default {
}
}
.el-input
{
float
:
left
;
width
:
200px
;
margin-left
:
10px
;
.el-input__inner
{
background
:
none
;
color
:
#ffff
;
border
:
1px
solid
#3a5f94
c9
!
important
;
}
}
.el-input__inner
{
border
:
1px
solid
#3a5f94
c9
!
important
;
}
...
...
src/view/sjgl/dfzygl.vue
View file @
6f457b84
...
...
@@ -344,7 +344,7 @@ export default {
>
.el-tabs--border-card
{
width
:
calc
(
100%
-
4px
);
height
:
calc
(
100%
-
4px
);
border
:
2px
solid
#
125473
;
border
:
2px
solid
#
3a5f94
c9
;
border-radius
:
5px
;
box-sizing
:
border-box
;
background
:
#ffffff
00
;
...
...
@@ -355,15 +355,15 @@ export default {
}
>
.el-tabs__header
{
background-color
:
unset
;
border-bottom
:
2px
solid
#
125473
;
border-bottom
:
2px
solid
#
3a5f94
c9
;
.el-tabs__item
{
color
:
#dedede
;
}
.el-tabs__item.is-active
{
color
:
#ffe000
;
background-color
:
#
116791
;
border-right-color
:
#
116791
;
border-left-color
:
#
116791
;
background-color
:
#
3a5f94
c9
;
border-right-color
:
#
3a5f94
c9
;
border-left-color
:
#
3a5f94
c9
;
}
.el-tabs__item
:not
(
.is-disabled
)
:hover
{
color
:
#ffe000
;
...
...
@@ -495,7 +495,7 @@ export default {
float
:
left
;
margin-left
:
20px
;
overflow-y
:
auto
;
border
:
1px
solid
#
125473
;
border
:
1px
solid
#
3a5f94
c9
;
border-radius
:
5px
;
box-sizing
:
border-box
;
}
...
...
src/view/sjgl/flfggl.vue
View file @
6f457b84
...
...
@@ -65,7 +65,7 @@ export default {
>
.el-tabs--border-card
{
width
:
calc
(
100%
-
4px
);
height
:
calc
(
100%
-
4px
);
border
:
2px
solid
#
125473
;
border
:
2px
solid
#
3a5f94
c9
;
border-radius
:
5px
;
box-sizing
:
border-box
;
background
:
#ffffff
00
;
...
...
@@ -76,15 +76,15 @@ export default {
}
>
.el-tabs__header
{
background-color
:
unset
;
border-bottom
:
2px
solid
#
125473
;
border-bottom
:
2px
solid
#
3a5f94
c9
;
.el-tabs__item
{
color
:
#dedede
;
}
.el-tabs__item.is-active
{
color
:
#ffe000
;
background-color
:
#
116791
;
border-right-color
:
#
116791
;
border-left-color
:
#
116791
;
background-color
:
#
3a5f94
c9
;
border-right-color
:
#
3a5f94
c9
;
border-left-color
:
#
3a5f94
c9
;
}
.el-tabs__item
:not
(
.is-disabled
)
:hover
{
color
:
#ffe000
;
...
...
src/view/sjgl/fzjcgl.vue
View file @
6f457b84
...
...
@@ -62,7 +62,7 @@ export default {
>
.el-tabs--border-card
{
width
:
calc
(
100%
-
4px
);
height
:
calc
(
100%
-
4px
);
border
:
2px
solid
#
125473
;
border
:
2px
solid
#
3a5f94
c9
;
border-radius
:
5px
;
box-sizing
:
border-box
;
background
:
#ffffff
00
;
...
...
@@ -73,15 +73,15 @@ export default {
}
>
.el-tabs__header
{
background-color
:
unset
;
border-bottom
:
2px
solid
#
125473
;
border-bottom
:
2px
solid
#
3a5f94
c9
;
.el-tabs__item
{
color
:
#dedede
;
}
.el-tabs__item.is-active
{
color
:
#ffe000
;
background-color
:
#
116791
;
border-right-color
:
#
116791
;
border-left-color
:
#
116791
;
background-color
:
#
3a5f94
c9
;
border-right-color
:
#
3a5f94
c9
;
border-left-color
:
#
3a5f94
c9
;
}
.el-tabs__item
:not
(
.is-disabled
)
:hover
{
color
:
#ffe000
;
...
...
@@ -216,7 +216,7 @@ export default {
float
:
left
;
margin-left
:
20px
;
overflow-y
:
auto
;
border
:
1px
solid
#
125473
;
border
:
1px
solid
#
3a5f94
c9
;
border-radius
:
5px
;
box-sizing
:
border-box
;
}
...
...
src/view/sjgl/xxxlgl.vue
View file @
6f457b84
...
...
@@ -2831,14 +2831,14 @@ export default {
.el-tabs--border-card
{
width
:
calc
(
100%
-
4px
);
height
:
calc
(
100%
-
4px
);
border
:
2px
solid
#
125473
;
border
:
2px
solid
#
3a5f94
c9
;
border-radius
:
5px
;
box-sizing
:
border-box
;
background
:
#ffffff
00
;
.el-tabs__header
{
background-color
:
unset
;
border-bottom
:
2px
solid
#
125473
;
border-bottom
:
2px
solid
#
3a5f94
c9
;
.el-tabs__item
{
color
:
#dedede
;
...
...
@@ -2846,9 +2846,9 @@ export default {
.el-tabs__item.is-active
{
color
:
#ffe000
;
background-color
:
#
116791
;
border-right-color
:
#
116791
;
border-left-color
:
#
116791
;
background-color
:
#
3a5f94
c9
;
border-right-color
:
#
3a5f94
c9
;
border-left-color
:
#
3a5f94
c9
;
}
.el-tabs__item
:not
(
.is-disabled
)
:hover
{
...
...
src/view/sjgl/yqjcgl.vue
View file @
6f457b84
...
...
@@ -1501,14 +1501,14 @@ export default {
.el-tabs--border-card
{
width
:
calc
(
100%
-
4px
);
height
:
calc
(
100%
-
4px
);
border
:
2px
solid
#
125473
;
border
:
2px
solid
#
3a5f94
c9
;
border-radius
:
5px
;
box-sizing
:
border-box
;
background
:
#ffffff
00
;
.el-tabs__header
{
background-color
:
unset
;
border-bottom
:
2px
solid
#
125473
;
border-bottom
:
2px
solid
#
3a5f94
c9
;
.el-tabs__item
{
color
:
#dedede
;
...
...
@@ -1516,9 +1516,9 @@ export default {
.el-tabs__item.is-active
{
color
:
#ffe000
;
background-color
:
#
116791
;
border-right-color
:
#
116791
;
border-left-color
:
#
116791
;
background-color
:
#
3a5f94
c9
;
border-right-color
:
#
3a5f94
c9
;
border-left-color
:
#
3a5f94
c9
;
}
.el-tabs__item
:not
(
.is-disabled
)
:hover
{
...
...
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