Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
pptist
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
viitto
pptist
Commits
6b3f5fcd
Commit
6b3f5fcd
authored
Apr 17, 2024
by
罗超
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'router' of
http://gitlab.oytour.com/viitto/pptist
into router
parents
28b7defa
35174d87
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
382 additions
and
67 deletions
+382
-67
common.css
src/assets/styles/common.css
+10
-0
MarkAttributes.vue
src/components/Maps/MapAttributes/MarkAttributes.vue
+50
-1
index.vue
src/components/Maps/MapAttributes/index.vue
+2
-1
ElementTemplateData.vue
src/views/Editor/Toolbar/ElementTemplateData.vue
+222
-48
index.vue
src/views/Editor/index.vue
+1
-0
Index.vue
src/views/Market/Index.vue
+97
-17
No files found.
src/assets/styles/common.css
View file @
6b3f5fcd
...
@@ -416,6 +416,16 @@ page {
...
@@ -416,6 +416,16 @@ page {
.q-ma-lg
{
.q-ma-lg
{
margin
:
20px
margin
:
20px
}
}
.q-ma-xs
{
margin-right
:
5px
;
margin-left
:
5px
;
}
.q-mr-xs
{
margin-right
:
5px
;
}
.q-ml-xs
{
margin-left
:
5px
;
}
.q-pa-lg
{
.q-pa-lg
{
padding
:
20px
padding
:
20px
}
}
...
...
src/components/Maps/MapAttributes/MarkAttributes.vue
View file @
6b3f5fcd
...
@@ -53,7 +53,22 @@
...
@@ -53,7 +53,22 @@
<IconPlus
class=
"handler-item viewport-size q-ml-md pointer"
@
click=
"AddSubtract('+',2)"
/>
<IconPlus
class=
"handler-item viewport-size q-ml-md pointer"
@
click=
"AddSubtract('+',2)"
/>
</div>
</div>
</div>
</div>
<div
class=
"attr-items flex items-center grey-bg q-mt-lg"
>
<div
style=
"font-size: 11px;width:50px;"
>
加粗
</div>
<div
class=
"col flex"
>
<IconMinus
class=
"handler-item viewport-size q-mr-md pointer"
@
click=
"AddSubtract('-',3)"
/>
<Slider
class=
"filter-slider grow"
:max=
"800"
:min=
"400"
:step=
"200"
:value=
"attrs.fontWeight"
@
update:value=
"value =>
{updateLabFontSizeHandler(value as number),attrs.fontWeight=value}" />
<IconPlus
class=
"handler-item viewport-size q-ml-md pointer"
@
click=
"AddSubtract('+',3)"
/>
</div>
</div>
<div
class=
"attr-items flex items-center q-mt-md"
>
<div
style=
"font-size: 11px;width:50px;"
>
字体
</div>
<el-select
size=
"mini"
v-model=
"attrs.fontFamily"
filterable
@
change=
"val=>updateLabFontFamilyHandler(val as number)"
placeholder=
"请选择"
>
<el-option
v-for=
"item in formatFonts"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
/>
</el-select>
</div>
<div
class=
"attr-items flex items-center q-mt-md"
>
<div
class=
"attr-items flex items-center q-mt-md"
>
<div
style=
"font-size: 11px;width:50px;"
>
对齐
</div>
<div
style=
"font-size: 11px;width:50px;"
>
对齐
</div>
<el-select
size=
"mini"
v-model=
"attrs.fontAlign"
@
change=
"val=>setAlignChangeHandler(val as number)"
placeholder=
"请选择"
>
<el-select
size=
"mini"
v-model=
"attrs.fontAlign"
@
change=
"val=>setAlignChangeHandler(val as number)"
placeholder=
"请选择"
>
...
@@ -106,12 +121,16 @@ import tinycolor from 'tinycolor2';
...
@@ -106,12 +121,16 @@ import tinycolor from 'tinycolor2';
import
{
color
as
am4coreColor
,
Label
}
from
"@amcharts/amcharts4/core"
;
import
{
color
as
am4coreColor
,
Label
}
from
"@amcharts/amcharts4/core"
;
import
{
watch
}
from
'vue'
;
import
{
watch
}
from
'vue'
;
import
MapService
from
'@/services/MapService'
;
import
MapService
from
'@/services/MapService'
;
import
{
useFontStore
}
from
'@/store'
const
mapStore
=
useMapStore
()
const
mapStore
=
useMapStore
()
const
{
current
,
fillColor
}
=
storeToRefs
(
mapStore
)
const
{
current
,
fillColor
}
=
storeToRefs
(
mapStore
)
const
{
formatFonts
}
=
storeToRefs
(
useFontStore
())
const
attrs
=
reactive
({
const
attrs
=
reactive
({
arrow
:
-
1
,
arrow
:
-
1
,
textEnable
:
false
,
textEnable
:
false
,
fontSize
:
12
,
fontSize
:
12
,
fontWeight
:
400
,
fontFamily
:
''
,
fontAlign
:
0
,
fontAlign
:
0
,
fontText
:
''
,
fontText
:
''
,
fontColor
:
'#000'
,
fontColor
:
'#000'
,
...
@@ -151,6 +170,14 @@ const AddSubtract = (symbol: string,val: number) => {
...
@@ -151,6 +170,14 @@ const AddSubtract = (symbol: string,val: number) => {
}
}
value
=
attrs
.
fontSize
value
=
attrs
.
fontSize
updateLabFontSizeHandler
(
value
as
number
)
updateLabFontSizeHandler
(
value
as
number
)
}
if
(
val
==
3
){
if
(
symbol
==
'-'
&&
attrs
.
fontWeight
>
400
){
attrs
.
fontWeight
=
attrs
.
fontWeight
-
200
}
if
(
symbol
==
'+'
&&
attrs
.
fontWeight
<
800
){
attrs
.
fontWeight
=
attrs
.
fontWeight
+
200
}
value
=
attrs
.
fontWeight
updateLabFontWeightHandler
(
value
as
number
)
}
}
}
}
const
updateFilter
=
(
t
:
number
,
val
:
number
)
=>
{
const
updateFilter
=
(
t
:
number
,
val
:
number
)
=>
{
...
@@ -213,6 +240,8 @@ const createLabel = ()=>{
...
@@ -213,6 +240,8 @@ const createLabel = ()=>{
//label.fontWeight = 'bold'
//label.fontWeight = 'bold'
attrs
.
fontSize
=
13
attrs
.
fontSize
=
13
attrs
.
fontWeight
=
400
attrs
.
fontFamily
=
'Microsoft Yahei'
attrs
.
fill
=
fillColor
.
value
.
realColor
attrs
.
fill
=
fillColor
.
value
.
realColor
attrs
.
text
=
'文字内容'
attrs
.
text
=
'文字内容'
attrs
.
fontAlign
=
0
attrs
.
fontAlign
=
0
...
@@ -293,6 +322,24 @@ const updateLabFontSizeHandler = (val:number) =>{
...
@@ -293,6 +322,24 @@ const updateLabFontSizeHandler = (val:number) =>{
},
500
);
},
500
);
}
}
}
}
const
updateLabFontWeightHandler
=
(
val
:
number
)
=>
{
let
lab
=
getCurrentLabel
()
if
(
lab
){
lab
.
fontWeight
=
val
setTimeout
(()
=>
{
asyncAllMarkHandler
()
},
500
);
}
}
const
updateLabFontFamilyHandler
=
(
val
:
number
)
=>
{
let
lab
=
getCurrentLabel
()
if
(
lab
){
lab
.
fontFamily
=
val
setTimeout
(()
=>
{
asyncAllMarkHandler
()
},
500
);
}
}
const
setLabelTextHandler
=
(
val
:
string
)
=>
{
const
setLabelTextHandler
=
(
val
:
string
)
=>
{
let
lab
=
getCurrentLabel
()
let
lab
=
getCurrentLabel
()
if
(
lab
){
if
(
lab
){
...
@@ -335,6 +382,8 @@ const setAttribute = ()=>{
...
@@ -335,6 +382,8 @@ const setAttribute = ()=>{
attrs
.
textEnable
=
true
attrs
.
textEnable
=
true
attrs
.
fontText
=
lab
.
text
attrs
.
fontText
=
lab
.
text
attrs
.
fontSize
=
lab
.
fontSize
??
15
attrs
.
fontSize
=
lab
.
fontSize
??
15
attrs
.
fontWeight
=
lab
.
fontWeight
??
400
attrs
.
fontFamily
=
lab
.
fontFamily
??
'Microsoft Yahei'
attrs
.
fontAlign
=
lab
.
marginBottom
attrs
.
fontAlign
=
lab
.
marginBottom
attrs
.
fontColor
=
tinycolor
(
lab
.
fill
?.
hex
??
'#000000'
).
toHex8String
()
attrs
.
fontColor
=
tinycolor
(
lab
.
fill
?.
hex
??
'#000000'
).
toHex8String
()
//attrs.fontSize =
//attrs.fontSize =
...
...
src/components/Maps/MapAttributes/index.vue
View file @
6b3f5fcd
...
@@ -31,9 +31,10 @@ const { current } = storeToRefs(mapStore)
...
@@ -31,9 +31,10 @@ const { current } = storeToRefs(mapStore)
right
:
20px
;
right
:
20px
;
left
:
unset
;
left
:
unset
;
top
:
45px
;
top
:
45px
;
bottom
:
200px
;
position
:
absolute
;
position
:
absolute
;
z-index
:
9
;
z-index
:
9
;
overflow
:
auto
;
}
}
.attr-box
.attr-header
{
.attr-box
.attr-header
{
...
...
src/views/Editor/Toolbar/ElementTemplateData.vue
View file @
6b3f5fcd
This diff is collapsed.
Click to expand it.
src/views/Editor/index.vue
View file @
6b3f5fcd
...
@@ -124,6 +124,7 @@ const datas = reactive({
...
@@ -124,6 +124,7 @@ const datas = reactive({
TemplateType
:
TemplatesType
,
// 1行程模版 2广告模版
TemplateType
:
TemplatesType
,
// 1行程模版 2广告模版
Width
:
0
,
Width
:
0
,
Height
:
0
,
Height
:
0
,
ColorId
:
''
,
}
}
},
},
...
...
src/views/Market/Index.vue
View file @
6b3f5fcd
...
@@ -29,7 +29,7 @@
...
@@ -29,7 +29,7 @@
<div
class=
"column text-small"
>
<div
class=
"column text-small"
>
<div
class=
"row flex-between items-center marketTagTitleBox"
>
<div
class=
"row flex-between items-center marketTagTitleBox"
>
<span
class=
"marketTag-Title"
><span>
目的地
</span>
<span
class=
"q-ml-md text-BBC7C3"
>
可多选
</span>
</span>
<span
class=
"marketTag-Title"
><span>
目的地
</span>
<span
class=
"q-ml-md text-BBC7C3"
>
可多选
</span>
</span>
<el-button
color=
"#EFEFEF"
>
<el-button
color=
"#EFEFEF"
@
click=
"MenuCountryVisible=!MenuCountryVisible"
>
<span>
更多
</span>
<el-icon
class=
"el-icon--right"
><arrow-down
/></el-icon>
<span>
更多
</span>
<el-icon
class=
"el-icon--right"
><arrow-down
/></el-icon>
</el-button>
</el-button>
</div>
</div>
...
@@ -80,7 +80,9 @@
...
@@ -80,7 +80,9 @@
<div
class=
"column text-small"
>
<div
class=
"column text-small"
>
<div
class=
"row flex-between items-center marketTagTitleBox"
>
<div
class=
"row flex-between items-center marketTagTitleBox"
>
<span
class=
"marketTag-Title"
><span>
色系
</span>
<span
class=
"q-ml-md text-BBC7C3"
>
可多选
</span>
</span>
<span
class=
"marketTag-Title"
><span>
色系
</span>
<span
class=
"q-ml-md text-BBC7C3"
>
可多选
</span>
</span>
<el-button
color=
"#FFF"
><span></span></el-button>
<el-button
v-if=
"countriesOther.length>0"
color=
"#EFEFEF"
@
click=
"MenuCountryVisible=!MenuCountryVisible"
>
<span>
更多
</span>
<el-icon
class=
"el-icon--right"
><arrow-down
/></el-icon>
</el-button>
</div>
</div>
<div
class=
"row wrap q-pt-sm"
>
<div
class=
"row wrap q-pt-sm"
>
<div
class=
"row items-center wrap"
>
<div
class=
"row items-center wrap"
>
...
@@ -89,9 +91,10 @@
...
@@ -89,9 +91,10 @@
effect=
"dark"
effect=
"dark"
content=
"不限"
content=
"不限"
placement=
"bottom"
>
placement=
"bottom"
>
<div
class=
"marketTag-color text-small pointer"
@
c
hange
=
"onColorNameChangeHandler('')"
>
<div
class=
"marketTag-color text-small pointer"
@
c
lick
=
"onColorNameChangeHandler('')"
>
<span
class=
"colorMark"
<span
class=
"colorMark"
:style=
"{'background': 'conic-gradient(from 90deg at 51.03303% 50.931181%, #E43939, #F79A2C, #FFF60B, #39CAE4, #7A39E4)','border-color':queryObj.ColorName==''?'black':'#eee'}"
></span>
:style=
"{'background': 'conic-gradient(from 90deg at 51.03303% 50.931181%, #E43939, #F79A2C, #FFF60B, #39CAE4, #7A39E4)',
'border-color':queryObj.ColorName==''?'black':'#eee'}"
></span>
</div>
</div>
</el-tooltip>
</el-tooltip>
<
template
v-for=
"(x,i) in colorArr"
:key=
"i"
>
<
template
v-for=
"(x,i) in colorArr"
:key=
"i"
>
...
@@ -113,6 +116,26 @@
...
@@ -113,6 +116,26 @@
</div>
</div>
</div>
</div>
<div
style=
"margin-top: 20px;"
>
<div
style=
"margin-top: 20px;"
>
<div
class=
"MarketType row flex-between"
>
<div
class=
"row"
>
<div
class=
"MarketButton cursor-pointer"
:class=
"[queryObj.TemplateType == item.type?'active':'']"
v-for=
"(item,index) in typeArr"
:key=
"index"
@
click=
"onTypeChangeHandler(item.type)"
>
{{item.typeName}}
</div>
</div>
<div
class=
"row"
>
<div
class=
"MarketButton cursor-pointer"
:class=
"[queryObj.sort == item.type?'active':'']"
v-for=
"(item,index) in sortArr"
:key=
"index"
@
click=
"onTypeChangeHandler(item.type,1)"
>
{{item.typeName}}
</div>
<div
class=
"MarketButton active active2 cursor-pointer"
>
<span>
版面
</span>
<el-icon
class=
"el-icon--right reactive"
style=
"top: 2px;left: 5px;"
><arrow-down
/></el-icon>
</div>
</div>
</div>
<!-- q-mt-lg row wrap -->
<!-- q-mt-lg row wrap -->
<div
v-if=
"dataList.length>0"
class=
" rounded"
<div
v-if=
"dataList.length>0"
class=
" rounded"
style=
"column-count: 6;"
>
style=
"column-count: 6;"
>
...
@@ -136,11 +159,11 @@
...
@@ -136,11 +159,11 @@
<div
class=
"MarketIndexList-img"
>
<div
class=
"MarketIndexList-img"
>
<img
:src=
"item.CoverImg"
class=
"rounded"
/>
<img
:src=
"item.CoverImg"
class=
"rounded"
/>
</div>
</div>
<div
class=
"MarketIndexList-text row items-center"
>
<
!--
<
div
class=
"MarketIndexList-text row items-center"
>
<el-tag
class=
"mx-1 q-mr-md"
effect=
"dark"
v-if=
"item.TemplateType==2"
<el-tag
class=
"mx-1 q-mr-md"
effect=
"dark"
v-if=
"item.TemplateType==2"
size=
"small"
>
广告
</el-tag>
size=
"small"
>
广告
</el-tag>
<span>
{{
item
.
Title
}}
</span>
<span>
{{
item
.
Title
}}
</span>
</div>
</div>
-->
</div>
</div>
</
template
>
</
template
>
...
@@ -192,6 +215,7 @@ const colorArrOther = ref([] as Array < any > ); //颜色
...
@@ -192,6 +215,7 @@ const colorArrOther = ref([] as Array < any > ); //颜色
const
colorArr
=
ref
([]
as
Array
<
any
>
);
//颜色
const
colorArr
=
ref
([]
as
Array
<
any
>
);
//颜色
const
seasonArr
=
ref
([]
as
Array
<
any
>
);
//季节
const
seasonArr
=
ref
([]
as
Array
<
any
>
);
//季节
const
typeArr
=
ref
([]
as
Array
<
any
>
);
//类型
const
typeArr
=
ref
([]
as
Array
<
any
>
);
//类型
const
sortArr
=
ref
([]
as
Array
<
any
>
);
//排序
const
dataList
=
ref
([]
as
Array
<
any
>
);
//模板数据列表
const
dataList
=
ref
([]
as
Array
<
any
>
);
//模板数据列表
const
marketRef
=
ref
<
any
>
()
const
marketRef
=
ref
<
any
>
()
const
MenuColorVisible
=
ref
(
false
)
const
MenuColorVisible
=
ref
(
false
)
...
@@ -249,6 +273,7 @@ const queryObj = reactive({
...
@@ -249,6 +273,7 @@ const queryObj = reactive({
TempType
:
0
,
TempType
:
0
,
TemplateType
:
TemplateType
,
//0 不限 1模版 2广告
TemplateType
:
TemplateType
,
//0 不限 1模版 2广告
type
:
0
,
type
:
0
,
sort
:
0
})
})
const
addTemplate
=
(
type
:
number
)
=>
{
const
addTemplate
=
(
type
:
number
)
=>
{
// searchData.value.TemplateType = type
// searchData.value.TemplateType = type
...
@@ -379,9 +404,14 @@ const onSeasonNameChangeHandler = (SeasonName: string) => {
...
@@ -379,9 +404,14 @@ const onSeasonNameChangeHandler = (SeasonName: string) => {
}
}
//类型切换
//类型切换
const
onTypeChangeHandler
=
(
Type
:
string
)
=>
{
const
onTypeChangeHandler
=
(
Type
:
string
,
num
:
Number
)
=>
{
if
(
num
){
queryObj
.
sort
=
Type
;
}
else
{
searchData
.
value
.
MarketTemplateType
=
Type
searchData
.
value
.
MarketTemplateType
=
Type
queryObj
.
TemplateType
=
Type
;
queryObj
.
TemplateType
=
Type
;
}
queryObj
.
pageIndex
=
1
queryObj
.
pageIndex
=
1
queryTemplateBySearchHandler
();
queryTemplateBySearchHandler
();
}
}
...
@@ -433,11 +463,11 @@ const getTemplateQuery = async () => {
...
@@ -433,11 +463,11 @@ const getTemplateQuery = async () => {
if
(
tempData
&&
tempData
.
ColorList
)
{
if
(
tempData
&&
tempData
.
ColorList
)
{
colorArrOther
.
value
=
tempData
.
ColorList
.
filter
((
x
,
index
)
=>
{
colorArrOther
.
value
=
tempData
.
ColorList
.
filter
((
x
,
index
)
=>
{
if
(
model
.
value
==
1
){
return
index
>=
15
}
if
(
model
.
value
==
1
){
return
index
>=
15
}
else
return
index
>=
7
else
return
index
>=
14
})
})
colorArr
.
value
=
tempData
.
ColorList
.
filter
((
x
,
index
)
=>
{
colorArr
.
value
=
tempData
.
ColorList
.
filter
((
x
,
index
)
=>
{
if
(
model
.
value
==
1
){
return
index
<
1
5
}
if
(
model
.
value
==
1
){
return
index
<
1
4
}
else
return
index
<
1
5
else
return
index
<
1
4
})
})
}
}
//季节
//季节
...
@@ -445,10 +475,21 @@ const getTemplateQuery = async () => {
...
@@ -445,10 +475,21 @@ const getTemplateQuery = async () => {
seasonArr
.
value
=
tempData
.
SeasonList
;
seasonArr
.
value
=
tempData
.
SeasonList
;
}
}
//类型
//类型
for
(
let
i
=
1
;
i
<
3
;
i
++
){
for
(
let
i
=
0
;
i
<
3
;
i
++
){
let
text
=
'所有模版'
if
(
i
==
1
)
text
=
'行程'
if
(
i
==
2
)
text
=
'广告'
typeArr
.
value
.
push
({
typeArr
.
value
.
push
({
type
:
i
,
type
:
i
,
typeName
:
i
==
1
?
'模版'
:
'广告'
typeName
:
text
})
}
for
(
let
i
=
0
;
i
<
2
;
i
++
){
let
text
=
'综合排序'
if
(
i
==
1
)
text
=
'最新模板'
sortArr
.
value
.
push
({
type
:
i
,
typeName
:
text
})
})
}
}
}
}
...
@@ -485,6 +526,45 @@ onMounted(()=>{
...
@@ -485,6 +526,45 @@ onMounted(()=>{
url("//at.alicdn.com/wf/webfont/MQHUV6e56ce5/pz3etdXOpfWP.woff")
format
(
"woff"
);
url("//at.alicdn.com/wf/webfont/MQHUV6e56ce5/pz3etdXOpfWP.woff")
format
(
"woff"
);
font-display
:
swap
;
font-display
:
swap
;
}
}
.MarketButton.active.active2
{
margin-right
:
0
;
}
.
MarketButton
.
active
.
active2
:
:
after
{
background
:
none
;
}
.MarketButton
{
width
:
90px
;
height
:
36px
;
line-height
:
36px
;
font-size
:
14px
;
text-align
:
center
;
color
:
#9EA2B3
;
position
:
relative
;
margin-right
:
13px
;
}
.MarketButton.active
{
background
:
#F4F7FE
;
border-radius
:
6px
;
-webkit-border-radius
:
6px
;
-moz-border-radius
:
6px
;
-ms-border-radius
:
6px
;
-o-border-radius
:
6px
;
color
:
#1C1C1C
;
}
.
MarketButton
.
active
:
:
after
{
content
:
""
;
position
:
absolute
;
left
:
35
.5px
;
bottom
:
0
;
width
:
19px
;
height
:
4px
;
background
:
linear-gradient
(
134deg
,
#649DED
,
#570AD8
);
}
.MarketType
{
margin-top
:
29px
;
margin-bottom
:
33px
;
/* background: #fff; */
}
.marketTag-color
{
.marketTag-color
{
margin-top
:
5px
;
margin-top
:
5px
;
margin-bottom
:
13px
;
margin-bottom
:
13px
;
...
@@ -567,9 +647,9 @@ onMounted(()=>{
...
@@ -567,9 +647,9 @@ onMounted(()=>{
border-radius
:
8px
;
border-radius
:
8px
;
font-family
:
PingFang
SC
;
font-family
:
PingFang
SC
;
font-weight
:
400
;
font-weight
:
400
;
font-size
:
14px
;
font-size
:
14px
!
important
;
color
:
#FFFFFF
;
color
:
#FFFFFF
;
line-height
:
3
2
px
;
line-height
:
3
6
px
;
text-align
:
center
;
text-align
:
center
;
}
}
.Market-fromBj
{
.Market-fromBj
{
...
@@ -655,7 +735,7 @@ onMounted(()=>{
...
@@ -655,7 +735,7 @@ onMounted(()=>{
.MarketIndexListBox
{
.MarketIndexListBox
{
/* width:calc(20% - 10px); */
/* width:calc(20% - 10px); */
/* margin: 10px 10px 0 0; */
/* margin: 10px 10px 0 0; */
padding
:
5px
;
/* padding:5px; */
position
:
relative
;
position
:
relative
;
overflow
:
hidden
;
overflow
:
hidden
;
box-shadow
:
0px
0px
20px
0px
rgba
(
76
,
87
,
125
,
0
.2
)
!
important
;
box-shadow
:
0px
0px
20px
0px
rgba
(
76
,
87
,
125
,
0
.2
)
!
important
;
...
...
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