Commit aba7228d authored by zhengke's avatar zhengke

优化 模版编辑 及销售行程返回调整

parent bfd93671
...@@ -72,7 +72,7 @@ import { reactive, ref, inject, onMounted, watch} from "vue"; ...@@ -72,7 +72,7 @@ import { reactive, ref, inject, onMounted, watch} from "vue";
import LineService from '@/services/LineService' import LineService from '@/services/LineService'
import ConfigService from '@/services/ConfigService' import ConfigService from '@/services/ConfigService'
import { useUserStore } from "@/store/user"; import { useUserStore } from "@/store/user";
import { useSellTemplateStore } from '@/store' import { useSellTemplateStore,useSlidesStore } from '@/store'
import { useScreenStore } from "@/store/screen"; import { useScreenStore } from "@/store/screen";
import { storeToRefs } from "pinia"; import { storeToRefs } from "pinia";
import { injectKeyTemplate } from '@/types/injectKey' import { injectKeyTemplate } from '@/types/injectKey'
...@@ -86,6 +86,8 @@ import foote from '@/components/footer/index.vue'; ...@@ -86,6 +86,8 @@ import foote from '@/components/footer/index.vue';
import { noDataImg } from "@/utils/common"; import { noDataImg } from "@/utils/common";
const slidesStore = useSlidesStore()
const { const {
userInfo userInfo
} = storeToRefs(useUserStore()) } = storeToRefs(useUserStore())
...@@ -204,10 +206,14 @@ const getTemplate = async (item:any) => { ...@@ -204,10 +206,14 @@ const getTemplate = async (item:any) => {
* 页面跳转 * 页面跳转
*/ */
const goToTemplate = (item: any) => { const goToTemplate = (item: any) => {
if((searchData.value.TempId2&&searchData.value.TempId2!=item.TempId)||!searchData.value.TempId2) slidesStore.ClearSlides()
let url = '' let url = ''
if(model.value==2) url = createSaleCreateLink(item.TempId,item.TemplateType) if(model.value==2) url = createSaleCreateLink(item.TempId,item.TemplateType)
else if(model.value==0 && router.currentRoute.value.params.configId) url = createOpEditorLink(parseInt(router.currentRoute.value.params.configId.toString()),item.TempId) else if(model.value==0 && router.currentRoute.value.params.configId) url = createOpEditorLink(parseInt(router.currentRoute.value.params.configId.toString()),item.TempId)
else if(model.value==1) url = managerTemplateLink(item.TempId,item.TemplateType) else if(model.value==1) {
searchData.value.currentMenu = null
url = managerTemplateLink(item.TempId,item.TemplateType)
}
if(url!='') { if(url!='') {
router.push({ router.push({
path:url path:url
......
...@@ -241,5 +241,20 @@ export const useSlidesStore = defineStore('slides', { ...@@ -241,5 +241,20 @@ export const useSlidesStore = defineStore('slides', {
}) })
this.slides[slideIndex].elements = (elements as PPTElement[]) this.slides[slideIndex].elements = (elements as PPTElement[])
}, },
ClearSlides(){
this.slides = [
{
id: 'test-slide-1',
pageType: 1,
elements: [],
background: {
type: 'solid',
color: '#ffffff',
},
}
]
this.thumbnails = []
this.layoutSlides= []
}
}, },
}) })
\ No newline at end of file
...@@ -224,12 +224,6 @@ const { market, model, ConfigId, CoverImg, dataLoading, TempId, SourceLoading } ...@@ -224,12 +224,6 @@ const { market, model, ConfigId, CoverImg, dataLoading, TempId, SourceLoading }
// 返回到首页 type 1 模版列表页 0 销售在线模版页 // 返回到首页 type 1 模版列表页 0 销售在线模版页
const goBack = (type:any) =>{ const goBack = (type:any) =>{
mainBackVisible.value = false mainBackVisible.value = false
// if(model.value&&model.value!=2) {
// setTimeout(()=>{
// setNewDatas(type,1)
// },200)
// return
// }
ElMessageBox.confirm( ElMessageBox.confirm(
'退出此页面将清空当前数据,请谨慎操作?', '退出此页面将清空当前数据,请谨慎操作?',
'提示', '提示',
...@@ -242,17 +236,16 @@ const goBack = (type:any) =>{ ...@@ -242,17 +236,16 @@ const goBack = (type:any) =>{
setNewDatas(type,0) setNewDatas(type,0)
let path ='/' let path ='/'
const t = useSlidesStore().viewportRatio<0?1:2 const t = useSlidesStore().viewportRatio<0?1:2
// if(type!=0){
// if(model.value==2) path = `/market/create/${searchData.value.TemplateType==1?'trip':'ad'}`
// else if(model.value==0) path = `/market/op/${ConfigId.value}/$-{t}`
// else if(model.value==1) path = `/market`
// }
// console.log(path)
// router.push({path})
//console.log(model.value,)
if(model.value==0) { if(model.value==0) {
path = `/market/op/${ConfigId.value}/${t}` path = `/market/op/${ConfigId.value}/${t}`
router.push({path}) router.push({path})
}else if(model.value&&searchData.value.currentMenu){
if(type) path = `/market/create`
else {
path = `/space/${searchData.value.currentMenu}`
searchData.value.currentMenu = null
}
router.push({path})
} }
else window.history.back() else window.history.back()
...@@ -260,17 +253,6 @@ const goBack = (type:any) =>{ ...@@ -260,17 +253,6 @@ const goBack = (type:any) =>{
} }
// 返回是否清空数据 // 返回是否清空数据
const setNewDatas = (type,i) => { const setNewDatas = (type,i) => {
let list = [
{
id: 'test-slide-1',
pageType: 1,
elements: [],
background: {
type: 'solid',
color: '#ffffff',
},
}
]
if(type) { if(type) {
marketStore.setMarket(true) marketStore.setMarket(true)
if(model.value==2) { if(model.value==2) {
...@@ -281,17 +263,13 @@ const setNewDatas = (type,i) => { ...@@ -281,17 +263,13 @@ const setNewDatas = (type,i) => {
searchData.value.TempId2 = 0 searchData.value.TempId2 = 0
searchData.value.sellId = 0 searchData.value.sellId = 0
searchData.value.sellTempId = 0 searchData.value.sellTempId = 0
searchData.value.TemplateType = 0
SalesBackStore.setSalesBack(0) SalesBackStore.setSalesBack(0)
SalesEditorStore.setSalesEditor(0) SalesEditorStore.setSalesEditor(0)
} }
searchData.value.TempId = 0 searchData.value.TempId = 0
// i 1模版权限 0无模版权限 // i 1模版权限 0无模版权限
if(SalesBack.value==0&&model.value!=2){ CoverImgStore.setCoverImg(null)
slidesStore.setSlides(list)
if(!i)slidesStore.setThumbnails([])
layoutsStore.setLayouts([])
CoverImgStore.setCoverImg(null)
}
} }
// 导入PSD // 导入PSD
const UploadPsdHandler = () => { const UploadPsdHandler = () => {
......
...@@ -396,6 +396,10 @@ const copySlidHandler = (slideIndex:number)=>{ ...@@ -396,6 +396,10 @@ const copySlidHandler = (slideIndex:number)=>{
// 获取行程模版数据 // 获取行程模版数据
const GetTripTemplate = async () =>{ const GetTripTemplate = async () =>{
const loadingObj = ElLoading.service({
text:'正在渲染模版数据',
lock:true
})
// console.log(searchData.value.TempId,searchData.value.TempId2,TempId.value,searchData.value.sellTempId) // console.log(searchData.value.TempId,searchData.value.TempId2,TempId.value,searchData.value.sellTempId)
if(!searchData.value.TempId&&!searchData.value.TempId2&&!TempId.value&&!searchData.value.sellTempId&&searchData.value.ViewSlideshow) { if(!searchData.value.TempId&&!searchData.value.TempId2&&!TempId.value&&!searchData.value.sellTempId&&searchData.value.ViewSlideshow) {
let list = [ let list = [
...@@ -481,9 +485,7 @@ const GetTripTemplate = async () =>{ ...@@ -481,9 +485,7 @@ const GetTripTemplate = async () =>{
newSlides = newSlides.filter((x:Slide)=>!x.isTripItems) newSlides = newSlides.filter((x:Slide)=>!x.isTripItems)
} }
setTimeout(()=>{ getColorShade(newSlides)
getColorShade(newSlides)
},500)
} }
queryObj.value.TempId = dataRes.data.data.TempId queryObj.value.TempId = dataRes.data.data.TempId
...@@ -508,6 +510,7 @@ const GetTripTemplate = async () =>{ ...@@ -508,6 +510,7 @@ const GetTripTemplate = async () =>{
VIEWPORT_SIZE.Value = 1754 VIEWPORT_SIZE.Value = 1754
VIEWPORT_VER_SIZE.Value = 1240 VIEWPORT_VER_SIZE.Value = 1240
} }
loadingObj.close()
if(ConfigId.value==0) return if(ConfigId.value==0) return
if(TempId.value&&!searchData.value.TempId) await GetTripConfig() if(TempId.value&&!searchData.value.TempId) await GetTripConfig()
if(model.value!=3) await GetTripFiledData() if(model.value!=3) await GetTripFiledData()
...@@ -527,16 +530,20 @@ const generateUniqueId = () => { ...@@ -527,16 +530,20 @@ const generateUniqueId = () => {
// 获取是否深色 // 获取是否深色
const getColorShade = async (newSlides:any) => { const getColorShade = async (newSlides:any) => {
let dark = false let dark = false
let day = 0
// 根据集团渲染logo // 根据集团渲染logo
if(tempDatas.value.GId!=userInfo.value.gid&&!searchData.value.isTeamManage){ if(tempDatas.value.GId!=userInfo.value.gid&&!searchData.value.isTeamManage){
for(let j=0;j<colorList.value.length;j++){ for(let j=0;j<colorList.value.length;j++){
if (getRgbLevel(colorList.value[j].Color) > 50) dark = true if (getRgbLevel(colorList.value[j].Color) > 50) dark = true
} }
for(let i=0;i<newSlides.length;i++){ for(let i=0;i<newSlides.length;i++){
if(i>colorList.value.length-2) dark = false if(i>colorList.value.length-2) {
dark = false
day = 1
}
let x = newSlides[i] let x = newSlides[i]
let eles = x.elements.filter(y=>y.layerName && y.layerName.indexOf('logo')!=-1) let eles = x.elements.filter(y=>y.layerName && y.layerName.indexOf('logo')!=-1)
let newElementsImg = await ResolveTripLogoHandler(eles,i,dark) let newElementsImg = await ResolveTripLogoHandler(eles,i,dark,day)
let newElements = [] let newElements = []
x.elements.forEach(y=>{ x.elements.forEach(y=>{
if(newElementsImg?.elements){ if(newElementsImg?.elements){
...@@ -560,7 +567,7 @@ const getColorShade = async (newSlides:any) => { ...@@ -560,7 +567,7 @@ const getColorShade = async (newSlides:any) => {
} }
// 替换logo // 替换logo
const ResolveTripLogoHandler = async (items:any, slideIndex:number,dark:false) =>{ const ResolveTripLogoHandler = async (items:any, slideIndex:number,dark:false,day:Number) =>{
let elements = [] let elements = []
let tempNewSlide:any = null let tempNewSlide:any = null
let templateObj = JSON.parse(JSON.stringify(items)) let templateObj = JSON.parse(JSON.stringify(items))
...@@ -575,7 +582,8 @@ const ResolveTripLogoHandler = async (items:any, slideIndex:number,dark:false) = ...@@ -575,7 +582,8 @@ const ResolveTripLogoHandler = async (items:any, slideIndex:number,dark:false) =
if(scale==1) url = dark==true?acquiesceLogo.value[0]:acquiesceLogo.value[3] if(scale==1) url = dark==true?acquiesceLogo.value[0]:acquiesceLogo.value[3]
if(scale<1) url = dark==true?acquiesceLogo.value[1]:acquiesceLogo.value[4] if(scale<1) url = dark==true?acquiesceLogo.value[1]:acquiesceLogo.value[4]
if(scale==6) url = dark==true?acquiesceLogo.value[2]:acquiesceLogo.value[5] if(scale==6) url = dark==true?acquiesceLogo.value[2]:acquiesceLogo.value[5]
if(scale==3) url = dark==true?acquiesceLogo.value[2]:acquiesceLogo.value[5] if(scale==3&&!day) url = dark==true?acquiesceLogo.value[2]:acquiesceLogo.value[5]
if(scale==3&&day) url = acquiesceLogo.value[2]
let newTempSize = await FileService.getImageSizeWithoutDownloading(url) let newTempSize = await FileService.getImageSizeWithoutDownloading(url)
let width = 0 let width = 0
let height = 0 let height = 0
......
...@@ -215,7 +215,7 @@ import { reactive, ref, inject, onMounted, watch} from "vue"; ...@@ -215,7 +215,7 @@ import { reactive, ref, inject, onMounted, watch} from "vue";
import LineService from '@/services/LineService' import LineService from '@/services/LineService'
import ConfigService from '@/services/ConfigService' import ConfigService from '@/services/ConfigService'
import { useUserStore } from "@/store/user"; import { useUserStore } from "@/store/user";
import { useSellTemplateStore } from '@/store' import { useSellTemplateStore, useSlidesStore } from '@/store'
import { useScreenStore } from "@/store/screen"; import { useScreenStore } from "@/store/screen";
import { storeToRefs } from "pinia"; import { storeToRefs } from "pinia";
import { injectKeyTemplate } from '@/types/injectKey' import { injectKeyTemplate } from '@/types/injectKey'
...@@ -231,6 +231,8 @@ import vipFooter from "@/components/home/vipFooter.vue"; ...@@ -231,6 +231,8 @@ import vipFooter from "@/components/home/vipFooter.vue";
import { noDataImg } from "@/utils/common"; import { noDataImg } from "@/utils/common";
const slidesStore = useSlidesStore()
const { const {
userInfo userInfo
} = storeToRefs(useUserStore()) } = storeToRefs(useUserStore())
...@@ -275,6 +277,7 @@ if(router.currentRoute.value.path.includes('create')) { ...@@ -275,6 +277,7 @@ if(router.currentRoute.value.path.includes('create')) {
model.value=2 model.value=2
if(router.currentRoute.value.fullPath.indexOf('/ad')!=-1) TemplateType = 2 if(router.currentRoute.value.fullPath.indexOf('/ad')!=-1) TemplateType = 2
else if(router.currentRoute.value.fullPath.indexOf('/trip')!=-1) TemplateType = 1 else if(router.currentRoute.value.fullPath.indexOf('/trip')!=-1) TemplateType = 1
else if(searchData.value.TemplateType) TemplateType = searchData.value.TemplateType
}else if(router.currentRoute.value.path.includes('op')) { }else if(router.currentRoute.value.path.includes('op')) {
model.value=0 model.value=0
} }
...@@ -375,6 +378,7 @@ const getTemplate = (item:any) => { ...@@ -375,6 +378,7 @@ const getTemplate = (item:any) => {
* 页面跳转 * 页面跳转
*/ */
const goToTemplate = (item: any) => { const goToTemplate = (item: any) => {
if((searchData.value.TempId2&&searchData.value.TempId2!=item.TempId)||!searchData.value.TempId2) slidesStore.ClearSlides()
let url = '' let url = ''
if(model.value==2) url = createSaleCreateLink(item.TempId,item.TemplateType) if(model.value==2) url = createSaleCreateLink(item.TempId,item.TemplateType)
else if(model.value==0 && router.currentRoute.value.params.configId) url = createOpEditorLink(parseInt(router.currentRoute.value.params.configId.toString()),item.TempId) else if(model.value==0 && router.currentRoute.value.params.configId) url = createOpEditorLink(parseInt(router.currentRoute.value.params.configId.toString()),item.TempId)
......
...@@ -127,16 +127,20 @@ const loadSliders = async ()=>{ ...@@ -127,16 +127,20 @@ const loadSliders = async ()=>{
// 获取是否深色 // 获取是否深色
const getColorShade = async (newSlides:any) => { const getColorShade = async (newSlides:any) => {
let dark = false let dark = false
let day = 0
// 根据集团渲染logo // 根据集团渲染logo
if(tempDatas.value.AuthType<=1){ if(tempDatas.value.AuthType<=1){
for(let j=0;j<colorList.value.length;j++){ for(let j=0;j<colorList.value.length;j++){
if (getRgbLevel(colorList.value[j].Color) > 50) dark = true if (getRgbLevel(colorList.value[j].Color) > 50) dark = true
} }
for(let i=0;i<newSlides.length;i++){ for(let i=0;i<newSlides.length;i++){
if(i>colorList.value.length-2) dark = false if(i>colorList.value.length-2) {
dark = false
day = 1
}
let x = newSlides[i] let x = newSlides[i]
let eles = x.elements.filter(y=>y.layerName && y.layerName.indexOf('logo')!=-1) let eles = x.elements.filter(y=>y.layerName && y.layerName.indexOf('logo')!=-1)
let newElementsImg = await ResolveTripLogoHandler(eles,i,dark) let newElementsImg = await ResolveTripLogoHandler(eles,i,dark,day)
let newElements = [] let newElements = []
x.elements.forEach(y=>{ x.elements.forEach(y=>{
if(newElementsImg?.elements){ if(newElementsImg?.elements){
...@@ -154,7 +158,7 @@ const getColorShade = async (newSlides:any) => { ...@@ -154,7 +158,7 @@ const getColorShade = async (newSlides:any) => {
} }
const ResolveTripLogoHandler = async (items:any, slideIndex:number,dark:false) =>{ const ResolveTripLogoHandler = async (items:any, slideIndex:number,dark:false,day:Number) =>{
let elements = [] let elements = []
let tempNewSlide:any = null let tempNewSlide:any = null
let templateObj = JSON.parse(JSON.stringify(items)) let templateObj = JSON.parse(JSON.stringify(items))
...@@ -169,7 +173,8 @@ const ResolveTripLogoHandler = async (items:any, slideIndex:number,dark:false) = ...@@ -169,7 +173,8 @@ const ResolveTripLogoHandler = async (items:any, slideIndex:number,dark:false) =
if(scale==1) url = dark==true?acquiesceLogo.value[0]:acquiesceLogo.value[3] if(scale==1) url = dark==true?acquiesceLogo.value[0]:acquiesceLogo.value[3]
if(scale<1) url = dark==true?acquiesceLogo.value[1]:acquiesceLogo.value[4] if(scale<1) url = dark==true?acquiesceLogo.value[1]:acquiesceLogo.value[4]
if(scale==6) url = dark==true?acquiesceLogo.value[2]:acquiesceLogo.value[5] if(scale==6) url = dark==true?acquiesceLogo.value[2]:acquiesceLogo.value[5]
if(scale==3) url = dark==true?acquiesceLogo.value[2]:acquiesceLogo.value[5] if(scale==3&&!day) url = dark==true?acquiesceLogo.value[2]:acquiesceLogo.value[5]
if(scale==3&&day) url = acquiesceLogo.value[2]
let newTempSize = await FileService.getImageSizeWithoutDownloading(url) let newTempSize = await FileService.getImageSizeWithoutDownloading(url)
let width = 0 let width = 0
let height = 0 let height = 0
......
...@@ -42,7 +42,7 @@ ...@@ -42,7 +42,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { useUserStore } from '@/store/user'; import { useUserStore } from '@/store/user';
import { storeToRefs } from 'pinia'; import { storeToRefs } from 'pinia';
import { ref, watch } from 'vue'; import { ref, watch, inject } from 'vue';
import BrowsingHistory from './BrowsingHistory.vue' import BrowsingHistory from './BrowsingHistory.vue'
import StarTarget from './StarTarget.vue' import StarTarget from './StarTarget.vue'
import ShareList from './Share.vue'; import ShareList from './Share.vue';
...@@ -52,6 +52,7 @@ import { Plus,ArrowDown,Clock,Star,Share,Picture,Management,Delete,Setting } fro ...@@ -52,6 +52,7 @@ import { Plus,ArrowDown,Clock,Star,Share,Picture,Management,Delete,Setting } fro
import { useRouter } from 'vue-router'; import { useRouter } from 'vue-router';
import { openNewBlank } from '@/utils/common'; import { openNewBlank } from '@/utils/common';
import { useSellTemplateStore } from '@/store'; import { useSellTemplateStore } from '@/store';
import { injectKeyTemplate } from '@/types/injectKey'
const router = useRouter(); const router = useRouter();
const sellStore = useSellTemplateStore() const sellStore = useSellTemplateStore()
...@@ -61,7 +62,8 @@ const {SaleSearchPosition} = storeToRefs(sellStore) ...@@ -61,7 +62,8 @@ const {SaleSearchPosition} = storeToRefs(sellStore)
const currentMenu = ref<number>(0) const currentMenu = ref<number>(0)
const position = ref<{FileId:number,FileType:1|2,Position:{FileId:number,FileName:string}[]}|null>(null) const position = ref<{FileId:number,FileType:1|2,Position:{FileId:number,FileName:string}[]}|null>(null)
const searchData = ref({} as any)
searchData.value = inject(injectKeyTemplate)
const openMarketHandler = (type:string='') =>{ const openMarketHandler = (type:string='') =>{
openNewBlank(`/market/create${type}`) openNewBlank(`/market/create${type}`)
...@@ -69,6 +71,7 @@ const openMarketHandler = (type:string='') =>{ ...@@ -69,6 +71,7 @@ const openMarketHandler = (type:string='') =>{
const setCurrentMenuHandler=(i:number)=>{ const setCurrentMenuHandler=(i:number)=>{
currentMenu.value=i currentMenu.value=i
searchData.value.currentMenu = i
} }
const initPageHandler = ()=>{ const initPageHandler = ()=>{
...@@ -82,6 +85,7 @@ const initPageHandler = ()=>{ ...@@ -82,6 +85,7 @@ const initPageHandler = ()=>{
currentMenu.value = parseInt(router.currentRoute.value.params.current.toString()) currentMenu.value = parseInt(router.currentRoute.value.params.current.toString())
} }
currentMenu.value = currentMenu.value>4||currentMenu.value<-1?0:currentMenu.value currentMenu.value = currentMenu.value>4||currentMenu.value<-1?0:currentMenu.value
searchData.value.currentMenu = currentMenu.value
} }
watch(() => router.currentRoute.value.path, (toPath) => { watch(() => router.currentRoute.value.path, (toPath) => {
......
...@@ -177,7 +177,7 @@ import { reactive, ref, inject, onMounted, watch} from "vue"; ...@@ -177,7 +177,7 @@ import { reactive, ref, inject, onMounted, watch} from "vue";
import LineService from '@/services/LineService' import LineService from '@/services/LineService'
import ConfigService from '@/services/ConfigService' import ConfigService from '@/services/ConfigService'
import { useUserStore } from "@/store/user"; import { useUserStore } from "@/store/user";
import { useSellTemplateStore } from '@/store' import { useSellTemplateStore,useSlidesStore } from '@/store'
import { useScreenStore } from "@/store/screen"; import { useScreenStore } from "@/store/screen";
import { storeToRefs } from "pinia"; import { storeToRefs } from "pinia";
import { injectKeyTemplate } from '@/types/injectKey' import { injectKeyTemplate } from '@/types/injectKey'
...@@ -191,6 +191,8 @@ import { VIEWPORT_SIZE, VIEWPORT_VER_SIZE } from '@/configs/canvas' ...@@ -191,6 +191,8 @@ import { VIEWPORT_SIZE, VIEWPORT_VER_SIZE } from '@/configs/canvas'
import { noDataImg } from "@/utils/common"; import { noDataImg } from "@/utils/common";
const slidesStore = useSlidesStore()
const { const {
userInfo userInfo
} = storeToRefs(useUserStore()) } = storeToRefs(useUserStore())
...@@ -454,16 +456,15 @@ const getTemplate = async (item:any) => { ...@@ -454,16 +456,15 @@ const getTemplate = async (item:any) => {
* 页面跳转 * 页面跳转
*/ */
const goToTemplate = (item: any) => { const goToTemplate = (item: any) => {
let url = '' searchData.value.currentMenu = null
// if(model.value==2) url = createSaleCreateLink(item.TempId,item.TemplateType) if((searchData.value.TempId2&&searchData.value.TempId2!=item.TempId)||!searchData.value.TempId2) slidesStore.ClearSlides()
// else if(model.value==0 && router.currentRoute.value.params.configId) url = createOpEditorLink(parseInt(router.currentRoute.value.params.configId.toString()),item.TempId) let url = ''
// else if(model.value==1) url = managerTemplateLink(item.TempId,item.TemplateType) url = managerTemplateLink(item.TempId,item.TemplateType)
url = managerTemplateLink(item.TempId,item.TemplateType) if(url!='') {
if(url!='') { router.push({
router.push({ path:url
path:url })
}) }
}
} }
const search = () => { const search = () => {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment