Commit ef3d95ba authored by 罗超's avatar 罗超

Merge branch 'master' of http://gitlab.oytour.com/viitto/pptist

parents b0fe50ab 69568884
...@@ -62,7 +62,7 @@ ...@@ -62,7 +62,7 @@
<template v-for="(item,index) in dataList"> <template v-for="(item,index) in dataList">
<div class="CloudDisk-R-Box cursor-pointer" <div class="CloudDisk-R-Box cursor-pointer"
:class="[ImgId==item.DetailsId?'active':'']" @click="setImg(item)"> :class="[ImgId==item.DetailsId?'active':'active2']" @click="setImg(item)">
<div class="CloudDisk-R-Img"> <div class="CloudDisk-R-Img">
<el-image :src="item.FilePath" style="width: 80px; height: 80px;" <el-image :src="item.FilePath" style="width: 80px; height: 80px;"
fit="cover"/> fit="cover"/>
...@@ -183,6 +183,7 @@ watch(() => props.active, () => { ...@@ -183,6 +183,7 @@ watch(() => props.active, () => {
watch(() => props.show, () => { watch(() => props.show, () => {
if(!props.show) ImgId.value = '' if(!props.show) ImgId.value = ''
}) })
const setImg = (item:any) => { const setImg = (item:any) => {
ImgId.value = item.DetailsId ImgId.value = item.DetailsId
emit('getImg',item.FilePath) emit('getImg',item.FilePath)
...@@ -504,7 +505,7 @@ onMounted(()=>{ ...@@ -504,7 +505,7 @@ onMounted(()=>{
z-index: 3; z-index: 3;
opacity: 0; opacity: 0;
} }
.CloudDisk-R-Box:hover .close-btn{ .CloudDisk-R-Box.active2:hover .close-btn{
opacity: 1; opacity: 1;
} }
</style> </style>
\ No newline at end of file
...@@ -51,10 +51,9 @@ export default () => { ...@@ -51,10 +51,9 @@ export default () => {
* 创建图片元素 * 创建图片元素
* @param src 图片地址 * @param src 图片地址
*/ */
const createImageElement = (src: string) => { const createImageElement = (src: string,TemplateType?:Number) => {
getImageSize(src).then(({ width, height }) => { getImageSize(src).then(({ width, height }) => {
const scale = height / width const scale = height / width
if (scale < viewportRatio.value && width > VIEWPORT_SIZE.Value) { if (scale < viewportRatio.value && width > VIEWPORT_SIZE.Value) {
width = VIEWPORT_SIZE.Value width = VIEWPORT_SIZE.Value
height = width * scale height = width * scale
...@@ -63,15 +62,20 @@ export default () => { ...@@ -63,15 +62,20 @@ export default () => {
height = VIEWPORT_SIZE.Value * viewportRatio.value height = VIEWPORT_SIZE.Value * viewportRatio.value
width = height / scale width = height / scale
} }
let left = 0
let top = 0
if(!TemplateType){
left = (VIEWPORT_SIZE.Value - width) / 2
top = (VIEWPORT_SIZE.Value * viewportRatio.value - height) / 2
}
createElement({ createElement({
type: 'image', type: 'image',
id: nanoid(10), id: nanoid(10),
src, src,
width, width,
height, height,
left: (VIEWPORT_SIZE.Value - width) / 2, left: left,
top: (VIEWPORT_SIZE.Value * viewportRatio.value - height) / 2, top: top,
fixedRatio: true, fixedRatio: true,
rotate: 0, rotate: 0,
}) })
......
...@@ -103,14 +103,14 @@ const routes: RouteRecordRaw[] = [ ...@@ -103,14 +103,14 @@ const routes: RouteRecordRaw[] = [
} }
}, },
{ {
path: '/market/create/ad', path: '/market/create/ad/:current?',
component: () => import('@/views/Market/Index.vue'), component: () => import('@/views/Market/Index.vue'),
meta:{ meta:{
title:'选择广告模板' title:'选择广告模板'
} }
}, },
{ {
path: '/market/create/trip', path: '/market/create/trip/:current?',
component: () => import('@/views/Market/Index.vue'), component: () => import('@/views/Market/Index.vue'),
meta:{ meta:{
title:'选择行程模板' title:'选择行程模板'
......
...@@ -98,7 +98,7 @@ import useCreateElement from '@/hooks/useCreateElement' ...@@ -98,7 +98,7 @@ import useCreateElement from '@/hooks/useCreateElement'
import useHistorySnapshot from '@/hooks/useHistorySnapshot' import useHistorySnapshot from '@/hooks/useHistorySnapshot'
import { getImageDataURL } from '@/utils/image' import { getImageDataURL } from '@/utils/image'
import { useMainStore, useSlidesStore, useScreenStore, useUserStore } from '@/store' import { useMainStore, useSlidesStore, useScreenStore, useUserStore } from '@/store'
import { injectKeyDataSource } from '@/types/injectKey' import { injectKeyDataSource, injectKeyTemplate } from '@/types/injectKey'
import ConfigService from '@/services/ConfigService' import ConfigService from '@/services/ConfigService'
import { VIEWPORT_SIZE, VIEWPORT_VER_SIZE } from '@/configs/canvas' import { VIEWPORT_SIZE, VIEWPORT_VER_SIZE } from '@/configs/canvas'
import FileService from '@/services/FileService' import FileService from '@/services/FileService'
...@@ -160,6 +160,9 @@ const { handleElement, handleElementId } = storeToRefs(mainStore) ...@@ -160,6 +160,9 @@ const { handleElement, handleElementId } = storeToRefs(mainStore)
const handleImageElement = handleElement as Ref<PPTImageElement> const handleImageElement = handleElement as Ref<PPTImageElement>
const { imgPoolVisible } = storeToRefs(useScreenStore()) const { imgPoolVisible } = storeToRefs(useScreenStore())
const searchData = ref({} as any)
searchData.value = inject(injectKeyTemplate)
watch(() => imgPoolVisible.value, () => { watch(() => imgPoolVisible.value, () => {
if(imgPoolVisible.value) showVisible.value = true if(imgPoolVisible.value) showVisible.value = true
}) })
...@@ -231,7 +234,7 @@ const setImgs = async () => { ...@@ -231,7 +234,7 @@ const setImgs = async () => {
} }
if(imgType.value==1){ if(imgType.value==1){
createImageElement(url) createImageElement(url,searchData.value.TemplateType)
close() close()
} }
if(imgType.value==2){ if(imgType.value==2){
......
...@@ -176,6 +176,8 @@ import { ElLoading, ElMessage } from 'element-plus' ...@@ -176,6 +176,8 @@ import { ElLoading, ElMessage } from 'element-plus'
import ThumbnailSlide from '@/views/components/ThumbnailSlide/index.vue' import ThumbnailSlide from '@/views/components/ThumbnailSlide/index.vue'
import CopyFile from "@/views/SellTemplate/components/CopyFile.vue"; import CopyFile from "@/views/SellTemplate/components/CopyFile.vue";
import router from '@/router' import router from '@/router'
import { useRouter } from "vue-router";
import { managerTemplateLink, openNewBlank } from '@/utils/common'
const mainStore = useMainStore() const mainStore = useMainStore()
const slidesStore = useSlidesStore() const slidesStore = useSlidesStore()
...@@ -221,9 +223,10 @@ const journeyAdsDetails = ref<Object>() ...@@ -221,9 +223,10 @@ const journeyAdsDetails = ref<Object>()
const psdVisibleStatus = ref(false) const psdVisibleStatus = ref(false)
const { market, model, ConfigId, CoverImg, dataLoading, TempId, TempType, SourceLoading } = storeToRefs(useScreenStore()) const { market, model, ConfigId, CoverImg, dataLoading, TempId, TempType, SourceLoading } = storeToRefs(useScreenStore())
const routers = useRouter();
// 返回到首页 type 1 模版列表页 0 销售在线模版页 // 返回到首页 type 1 模版列表页 0 销售在线模版页
const goBack = (type:any) =>{ const goBack = (type:any) =>{
console.log(model.value,searchData.value.currentMenu)
mainBackVisible.value = false mainBackVisible.value = false
ElMessageBox.confirm( ElMessageBox.confirm(
'退出此页面将清空当前数据,请谨慎操作?', '退出此页面将清空当前数据,请谨慎操作?',
...@@ -242,7 +245,7 @@ const goBack = (type:any) =>{ ...@@ -242,7 +245,7 @@ const goBack = (type:any) =>{
path = `/market/op/${ConfigId.value}/${TempType.value}` path = `/market/op/${ConfigId.value}/${TempType.value}`
router.push({path}) router.push({path})
}else if(model.value==2&&searchData.value.currentMenu>=0){ }else if(model.value==2&&searchData.value.currentMenu>=0){
if(type) path = `/market/create` if(type==1) path = `/market/create`
else { else {
path = `/space/${searchData.value.currentMenu}` path = `/space/${searchData.value.currentMenu}`
searchData.value.currentMenu = null searchData.value.currentMenu = null
...@@ -321,10 +324,16 @@ const SetSellTemplate = async (type:Number,FolderId:Number) => { ...@@ -321,10 +324,16 @@ const SetSellTemplate = async (type:Number,FolderId:Number) => {
if(type==1) setTimeout(()=>{ if(type==1) setTimeout(()=>{
SalesEditorStore.setSalesEditor(0) SalesEditorStore.setSalesEditor(0)
},100) },100)
if(autoSave.value==1)autoSave.value=2
if(type == 0 && Id==0){ if(type == 0 && Id==0){
searchData.value.sellId=TemplateRes.data.data.Id let FileId = searchData.value.sellId=TemplateRes.data.data.Id
let FileType = TemplateRes.data.data.FileType?TemplateRes.data.data.FileType:0
//@TODO:返回字段中缺少CreateBy,
const url = createSaleEditorLink(FileId,TempId,queryObj.value.TempType,queryMsg.FolderId,1,1)
router.push({
path:url
})
} }
if(autoSave.value==1)autoSave.value=2
}else{ }else{
ElMessage({ ElMessage({
showClose: true, showClose: true,
...@@ -343,10 +352,6 @@ const SetTripTemplateSlide = async () => { ...@@ -343,10 +352,6 @@ const SetTripTemplateSlide = async () => {
try { try {
let TemplateRes = await ConfigService.SetTripTemplateSlide(queryObj.value); let TemplateRes = await ConfigService.SetTripTemplateSlide(queryObj.value);
if (TemplateRes.data.resultCode == 1) { if (TemplateRes.data.resultCode == 1) {
if(!queryObj.value.TempId){
queryObj.value.TempId = TemplateRes.data.data.TempId
searchData.value.TempId = TemplateRes.data.data.TempId
}
ElMessage({ ElMessage({
showClose: true, showClose: true,
message: '操作成功', message: '操作成功',
...@@ -355,6 +360,18 @@ const SetTripTemplateSlide = async () => { ...@@ -355,6 +360,18 @@ const SetTripTemplateSlide = async () => {
datas.DataSource.DataSourceOverlay = false datas.DataSource.DataSourceOverlay = false
dataLoadingStore.setDataLoading(1) dataLoadingStore.setDataLoading(1)
useSlidesStore().setThumbnails([]) useSlidesStore().setThumbnails([])
if(!queryObj.value.TempId){
queryObj.value.TempId = TemplateRes.data.data.TempId
searchData.value.TempId = TemplateRes.data.data.TempId
let url = ''
url = managerTemplateLink(queryObj.value.TempId,queryObj.value.TemplateType)
if(url!='') {
routers.push({
path:url
})
}
}
}else{ }else{
ElMessage({ ElMessage({
showClose: true, showClose: true,
......
...@@ -290,6 +290,7 @@ if(router.currentRoute.value.path.includes('create')) { ...@@ -290,6 +290,7 @@ if(router.currentRoute.value.path.includes('create')) {
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(searchData.value.TemplateType) TemplateType = searchData.value.TemplateType
if(router.currentRoute.value.params.current>=0) searchData.value.currentMenu = router.currentRoute.value.params.current
}else if(router.currentRoute.value.path.includes('op')) { }else if(router.currentRoute.value.path.includes('op')) {
model.value=0 model.value=0
} }
......
...@@ -66,7 +66,7 @@ const searchData = ref({} as any) ...@@ -66,7 +66,7 @@ const searchData = ref({} as any)
searchData.value = inject(injectKeyTemplate) searchData.value = inject(injectKeyTemplate)
const openMarketHandler = (type:string='') =>{ const openMarketHandler = (type:string='') =>{
openNewBlank(`/market/create${type}`) openNewBlank(`/market/create${type}/${currentMenu.value}`)
} }
const setCurrentMenuHandler=(i:number)=>{ const setCurrentMenuHandler=(i:number)=>{
......
...@@ -57,12 +57,15 @@ ...@@ -57,12 +57,15 @@
<div class="col text-dark" style="font-size: 16px">上传文件</div> <div class="col text-dark" style="font-size: 16px">上传文件</div>
</div> </div>
<div class="q-mt-lg"> <div class="q-mt-lg">
<el-upload class="full-height full-width text-primary" drag accept=".xls,.xlsx" <el-upload class=" text-primary" drag accept=".xls,.xlsx"
:action="getUploadActionUrl()" :action="getUploadActionUrl()"
:on-success="handleAvatarSuccess" :on-success="handleAvatarSuccess"
:before-upload="beforeAvatarUpload" :before-upload="beforeAvatarUpload"
:file-list="fileList" :limit="1"
ref="upload"
:on-exceed="handleExceed"
> >
<template #trigger>
<IconUpload size="54" class=""></IconUpload> <IconUpload size="54" class=""></IconUpload>
<div class="el-upload__text"> <div class="el-upload__text">
<div style="font-size: 16px;" class="q-my-lg">成员名单仅支持 .xls .xlsx</div> <div style="font-size: 16px;" class="q-my-lg">成员名单仅支持 .xls .xlsx</div>
...@@ -70,11 +73,14 @@ ...@@ -70,11 +73,14 @@
<el-button class="ppt-button" type="primary" size="target">导入成员名单</el-button> <el-button class="ppt-button" type="primary" size="target">导入成员名单</el-button>
</div> </div>
</div> </div>
<template #tip></template> </template>
<template #tip>
<div></div>
</template>
</el-upload> </el-upload>
</div> </div>
<template v-if="dialogVisible"> <template v-if="dialogVisible">
<div class="q-mt-lg text-primary" style="font-weight: bold;">提示</div> <div class="text-primary" style="font-weight: bold;">提示</div>
<div class="q-mt-xs row flex-between items-center" style="position: relative;"> <div class="q-mt-xs row flex-between items-center" style="position: relative;">
<div> <div>
<el-alert show-icon title="人员总数" type="info" :closable="false"> <el-alert show-icon title="人员总数" type="info" :closable="false">
...@@ -162,7 +168,7 @@ import { ElMessage } from "element-plus" ...@@ -162,7 +168,7 @@ import { ElMessage } from "element-plus"
import { storeToRefs } from "pinia" import { storeToRefs } from "pinia"
import { ref, unref } from "vue" import { ref, unref } from "vue"
import { domainManager } from '@/utils/domainManager' import { domainManager } from '@/utils/domainManager'
import { ElAlert,UploadUserFile } from 'element-plus'; import type { ElAlert,UploadUserFile,UploadInstance, UploadProps, UploadRawFile } from 'element-plus';
const props = defineProps({ const props = defineProps({
showType: { showType: {
...@@ -195,6 +201,14 @@ const closeUploadRes = () => { ...@@ -195,6 +201,14 @@ const closeUploadRes = () => {
const closed = () => { const closed = () => {
emit('close') emit('close')
} }
const upload = ref<UploadInstance>()
const handleExceed: UploadProps['onExceed'] = (files) => {
upload.value!.clearFiles()
const file = files[0] as UploadRawFile
upload.value!.handleStart(file)
upload.value.submit()
}
const goDownload = (type:any) =>{ const goDownload = (type:any) =>{
if(type==1) window.location.href = UploadResults.value.DownloadUrl if(type==1) window.location.href = UploadResults.value.DownloadUrl
...@@ -209,22 +223,23 @@ const getUploadActionUrl=()=>{ ...@@ -209,22 +223,23 @@ const getUploadActionUrl=()=>{
} }
const handleAvatarSuccess= (res:any)=>{ const handleAvatarSuccess= (res:any)=>{
console.log("handleAvatarSuccess_res",res);
if(res.data){ if(res.data){
UploadResults.value = res.data UploadResults.value = res.data
if(res.data.successNum>0) emit('imported') if(res.data.successNum>0) emit('imported')
if(res.data.failUrl) UploadResults.value.DownloadUrl = domainManager().DownloadUrl.replace("common","file")+`${res.data.failUrl}` if(res.data.failUrl) UploadResults.value.DownloadUrl = domainManager().DownloadUrl.replace("common","file")+`${res.data.failUrl}`
} }
console.log("handleAvatarSuccess_res",res);
} }
const beforeAvatarUpload=async (res:any)=>{ const beforeAvatarUpload= (res:any)=>{
console.log("beforeAvatarUpload_res",res);
closeUploadRes() closeUploadRes()
fileList.value.push({
name: res.name,
url: ''
})
dialogVisible.value = true dialogVisible.value = true
console.log("beforeAvatarUpload_res",res);
// fileList.value.unshift({
// name: res.name+new Date().getTime(),
// url: ''
// })
} }
const copyInviteUrlHandler = async (e: MouseEvent) => { const copyInviteUrlHandler = async (e: MouseEvent) => {
...@@ -255,6 +270,9 @@ const setIsAdminHandler = (isa: number) => { ...@@ -255,6 +270,9 @@ const setIsAdminHandler = (isa: number) => {
</script> </script>
<style scoped> <style scoped>
.InviteMember::v-deep(.el-upload-dragger) {
padding: 15px 0;
}
.InviteMember .content-item{ .InviteMember .content-item{
display: flex; display: flex;
flex-direction: row; flex-direction: row;
......
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