Commit 4a302fb1 authored by 罗超's avatar 罗超

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

parents 4fb2d184 0052a0a9
...@@ -40,6 +40,7 @@ const ConfigIdStore = useScreenStore() ...@@ -40,6 +40,7 @@ const ConfigIdStore = useScreenStore()
const marketStore = useScreenStore() const marketStore = useScreenStore()
const isModelStore = useScreenStore() const isModelStore = useScreenStore()
const TempIdStore = useScreenStore() const TempIdStore = useScreenStore()
const pageIndexStore = useScreenStore()
const { databaseId } = storeToRefs(mainStore) const { databaseId } = storeToRefs(mainStore)
const { screening, market, model, ConfigId } = storeToRefs(useScreenStore()) const { screening, market, model, ConfigId } = storeToRefs(useScreenStore())
const { userInfo } = storeToRefs(userStore()) const { userInfo } = storeToRefs(userStore())
...@@ -52,9 +53,18 @@ const userLoginHandler = async ()=>{ ...@@ -52,9 +53,18 @@ const userLoginHandler = async ()=>{
let userId = 1 let userId = 1
let ConfigId = 0 // 9117 let ConfigId = 0 // 9117
let model = 0 let model = 0
let TempId = 1
let pageIndex = 0
if(param.uid) userId=parseInt(param.uid) if(param.uid) userId=parseInt(param.uid)
if(param.ConfigId) ConfigId=parseInt(param.ConfigId) if(param.ConfigId) ConfigId=parseInt(param.ConfigId)
if(param.model) model=parseInt(param.model) if(param.model) model=parseInt(param.model)
if(param.TempId) {
TempId=parseInt(param.TempId)
pageIndex=parseInt(param.pageIndex)
TempIdStore.setTempId(TempId)
pageIndexStore.setPageIndex(pageIndex)
marketStore.setMarket(!market)
}
ConfigIdStore.setConfigId(ConfigId) ConfigIdStore.setConfigId(ConfigId)
modelStore.setModel(model) modelStore.setModel(model)
if(!userInfo.value.EmployeeId){ if(!userInfo.value.EmployeeId){
......
...@@ -60,5 +60,12 @@ class ConfigService{ ...@@ -60,5 +60,12 @@ class ConfigService{
static async GetTemplagePageAsync(params : any):Promise<HttpResponse>{ static async GetTemplagePageAsync(params : any):Promise<HttpResponse>{
return Api.Post("triptemplate_GetTripTemplatePage",params) return Api.Post("triptemplate_GetTripTemplatePage",params)
} }
/**
* 图片素材分页列表
*/
static async GetPicList(params : any):Promise<HttpResponse>{
return Api.Post("hotel_post_GetPicList",params)
}
} }
export default ConfigService; export default ConfigService;
\ No newline at end of file
...@@ -15,7 +15,9 @@ export interface ScreenState { ...@@ -15,7 +15,9 @@ export interface ScreenState {
dataLoading: number, dataLoading: number,
FeatureImg: any, FeatureImg: any,
SourceLoading: boolean, SourceLoading: boolean,
pageIndex: number,
imgPoolVisible: boolean,
imgReplaceVisible: boolean,
} }
export const useScreenStore = defineStore('screen', { export const useScreenStore = defineStore('screen', {
...@@ -33,6 +35,9 @@ export const useScreenStore = defineStore('screen', { ...@@ -33,6 +35,9 @@ export const useScreenStore = defineStore('screen', {
dataLoading: 0, // 记录保存是否成功 dataLoading: 0, // 记录保存是否成功
FeatureImg: [], // 行程特色图 FeatureImg: [], // 行程特色图
SourceLoading: false, // 记录数据源是否更改 SourceLoading: false, // 记录数据源是否更改
pageIndex: 0,//需要生成图的行程特色
imgPoolVisible: false,//新增上传图片弹窗
imgReplaceVisible: false,//替换图片弹窗
}), }),
actions: { actions: {
...@@ -77,6 +82,15 @@ export const useScreenStore = defineStore('screen', { ...@@ -77,6 +82,15 @@ export const useScreenStore = defineStore('screen', {
}, },
setSourceLoading(SourceLoading: boolean) { setSourceLoading(SourceLoading: boolean) {
this.SourceLoading = SourceLoading this.SourceLoading = SourceLoading
},
setPageIndex(pageIndex: number){
this.pageIndex = pageIndex
},
setImgPoolVisible(imgPoolVisible: boolean) {
this.imgPoolVisible = imgPoolVisible
},
setImgReplaceVisible(imgReplaceVisible: boolean) {
this.imgReplaceVisible = imgReplaceVisible
} }
}, },
}) })
\ No newline at end of file
<template>
<el-dialog v-model="showVisible" :show-close="false" :close-on-press-escape="false"
:close-on-click-modal="false" style="width: 680px;">
<template #header>
<div class="text-title">选择、上传图片</div>
</template>
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
<el-tab-pane label="选择图" name="1">
<div class="q-mb-md">
<el-input v-model="datas.queryMsg.Name"
placeholder="输入关键字快速查找" clearable
class="input-with-select">
<template #append>
<el-button type="primary" @click="SearchHandler">搜索</el-button>
</template>
</el-input>
</div>
<div class="row UploadPicture-box" v-loading="datas.loading">
<div v-for="(item,index) in datas.imgList" class="UploadPicture-list">
<div class="UploadPicture-listBox">
<img :src="item.Path" class="rounded" @click="getImgs(item,index)"/>
<div class="UploadPicture-Hover" v-if="item.show">
<div>
<el-icon :size="20"><CircleCheckFilled/></el-icon>
</div>
</div>
</div>
</div>
</div>
<div class="q-mt-md" style="display: flex;justify-content: center;">
<el-pagination
v-model:current-page="currentPage"
:page-size="datas.queryMsg.pageSize"
:small="small"
:disabled="disabled"
:background="background"
layout="prev, pager, next"
:total="datas.queryMsg.total"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
/>
</div>
</el-tab-pane>
<el-tab-pane label="上传图" name="2">
<FileInput @change="files => insertImageElement(files)">
<div class="upload-box">
<img v-if="imgPath" :src="imgPath" style="height: 200px;"/>
<div v-else>
<el-icon size="80" color="#a8abb2" class="el-icon--upload">
<upload-filled/>
</el-icon>
<p><em>点击上传图片</em></p>
</div>
</div>
</FileInput>
<!--
<div>
<el-upload
v-loading="isUpload"
ref="upload"
class="upload-drop-box"
:on-change="handleChange"
action=""
drag
:limit="1"
:on-exceed="handleExceed"
:auto-upload="false"
accept=".png,.jpg"
:show-file-list="false"
>
<el-icon v-if="!imgPath" class="el-icon--upload">
<upload-filled />
</el-icon>
<div v-if="!imgPath" class="el-upload__text">
<template>
拖动文件到这里释放或<em>点击上传</em>
</template>
</div>
<template #tip>
</template>
</el-upload>
</div> -->
</el-tab-pane>
<el-tab-pane label="输入url" name="3">
<div class="row wrap q-mt-md">
<el-input v-model="imgUrl" placeholder="输入图片的url地址" class="input-with-select"></el-input>
</div>
</el-tab-pane>
</el-tabs>
<div class="q-mt-lg row items-center">
<div class="col">
</div>
<div>
<el-button class="q-ml-lg" @click="close()">取消</el-button>
<el-button type="primary" class="q-ml-lg" @click="setImgs()">确定</el-button>
</div>
</div>
</el-dialog>
</template>
<script lang="ts" setup>
import { ref, reactive, inject } from 'vue'
import { storeToRefs } from 'pinia'
import type { UploadProps, UploadUserFile,UploadInstance } from 'element-plus'
import useCreateElement from '@/hooks/useCreateElement'
import useHistorySnapshot from '@/hooks/useHistorySnapshot'
import { getImageDataURL } from '@/utils/image'
import { useMainStore, useSlidesStore, useScreenStore } from '@/store'
import { injectKeyDataSource } from '@/types/injectKey'
import ConfigService from '@/services/ConfigService'
import FileInput from '@/components/FileInput.vue'
const showVisible = ref(true)
const activeName = ref("1")
const imgPoolVisibleStore = useScreenStore()
const imgReplaceVisibleStore = useScreenStore()
const imageFile = ref({})
const isUpload = ref(false)
const imgOnline = ref('')
const imgPath = ref('')
const imgUrl = ref('')
const currentPage = ref(1)
const upload = ref<UploadInstance>()
const imgType = ref(0) // 1 插入图片 2替换图片
imgType.value = inject('imgType')
const propsDatas = ref({src: ''})
const datas = reactive({
DataSource:{},
loading: false,
imgList: [],
queryMsg:{
pageSize: 16,
pageIndex: 1,
currentPage: 1,
total: 0,
Type: 0, //1-酒店,2-餐厅,3-景点,4-票务,5-车辆,6-领队,7-购物店
Name: "", //资源图片名称
SourceId: 0 //资源编号
}
})
datas.DataSource = inject(injectKeyDataSource)
if(datas.DataSource.pageType==2) datas.queryMsg.Type = 1
else if(datas.DataSource.pageType==3) datas.queryMsg.Type = 3
else if(datas.DataSource.pageType==4) datas.queryMsg.Type = 2
const mainStore = useMainStore()
const { createImageElement } = useCreateElement()
const { addHistorySnapshot } = useHistorySnapshot()
const slidesStore = useSlidesStore()
const { handleElement, handleElementId } = storeToRefs(mainStore)
const handleSizeChange = (val: number) => {
console.log(`${val} items per page`)
}
const handleCurrentChange = (val: number) => {
datas.queryMsg.pageIndex = val
getImgList()
}
const insertImageElement = (files: FileList) => {
const imageFile = files[0]
if (!imageFile) return
getImageDataURL(imageFile).then(dataURL =>
imgPath.value = dataURL,
propsDatas.value = { src: dataURL }
// createImageElement(dataURL)
)
}
const setImgs = () => {
let text = '请选择图片'
let url = imgOnline.value
const props = { url: url}
if(activeName.value=='1') propsDatas.value = { src: imgOnline.value }
else if(activeName.value=='2') {
text = '请上传图片'
url = imgPath.value
}
else if(activeName.value=='3') {
text = '请输入图片url地址'
url = imgUrl.value
propsDatas.value = { src: imgUrl.value }
}
if(!url){
return ElMessage({
showClose: true,
message: text,
type: 'warning',
})
}
if(imgType.value==1){
createImageElement(url)
close()
}
if(imgType.value==2){
slidesStore.updateElement({ id: handleElementId.value, props:propsDatas.value })
addHistorySnapshot()
close()
}
}
const getImgs = (item:any,index:number) => {
datas.imgList.forEach(x=>{x.show=false})
item.show = true
imgOnline.value = item.Path
}
const handleClick = (tab: TabsPaneContext, event: Event) => {
if(activeName.value!='1'){
imgOnline.value = ''
datas.imgList.forEach(x=>{x.show=false})
}else if(activeName.value!='2'){
imgPath.value = ''
imageFile.value = {}
}else if(activeName.value!='3'){
imgUrl.value = ''
}
}
const close = () =>{
// imgOnline.value = ''
// datas.imgList.forEach(x=>{x.show=false})
// imgPath.value = ''
// imageFile.value = {}
// imgUrl.value = ''
showVisible.value = false
imgPoolVisibleStore.setImgPoolVisible(false)
imgReplaceVisibleStore.setImgReplaceVisible(false)
}
const SearchHandler = async () => {
datas.queryMsg.pageIndex = 1
await getImgList()
}
const getImgList = async () =>{
datas.loading = true
try {
let datasRes = await ConfigService.GetPicList(datas.queryMsg);
if (datasRes.data.resultCode == 1) {
let data = datasRes.data.data.pageData
let arrData = function(list){
list.forEach(item => {
item.show = false
});
}
arrData(data)
datas.imgList = data
datas.queryMsg.total = datasRes.data.data.count;
}
datas.loading = false
} catch (error) {
datas.loading = false
}
}
const handleChange: UploadProps['onChange'] = (uploadFile, uploadFiles) => {
isUpload.value=true
console.log(uploadFile,'---------')
if(uploadFile){
imageFile.value = uploadFile
imgPath.value = URL.createObjectURL(uploadFile?.raw)
isUpload.value=false
}
}
const handleExceed: UploadProps['onExceed'] = (files) => {
console.log('执行clear')
upload.value!.clearFiles()
const file = files[0] as UploadRawFile
upload.value!.handleStart(file)
}
getImgList()
</script>
<style lang="scss" scoped>
.upload-box{
display: flex;
justify-content: center;
align-items: center;
text-align: center;
border: 1px dashed #dcdfe6;
border-radius: 6px;
padding: 40px 10px;
cursor: pointer;
}
.UploadPicture-box{
flex-wrap: wrap;
}
.UploadPicture-list{
width: 150px;
/* height: 150px; */
margin: 5px;
}
.UploadPicture-listBox{
width: 150px;
height: 0;
position: relative;
padding-bottom: 56.25%;
}
.UploadPicture-list img{
width: 100%;
height: 100%;
position: absolute;
object-fit: cover;
cursor: pointer;
}
.UploadPicture-Hover{
z-index: 1;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(23,23,23,0.5);
/* opacity: 0; */
display: none;
transition: opacity 0.5s ease;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
color: $themeHoverColor;
}
</style>
\ No newline at end of file
...@@ -20,9 +20,10 @@ ...@@ -20,9 +20,10 @@
<IconDown class="arrow" /> <IconDown class="arrow" />
</Popover> </Popover>
</div> </div>
<FileInput @change="files => insertImageElement(files)"> <!-- <FileInput @change="files => insertImageElement(files)">
<IconPicture class="handler-item" v-tooltip="'插入图片'" /> <IconPicture class="handler-item" v-tooltip="'插入图片'" />
</FileInput> </FileInput> imgPoolVisible-->
<IconPicture class="handler-item" v-tooltip="'插入图片'" @click="getImgVis()"/>
<Popover trigger="click" v-model:value="shapePoolVisible"> <Popover trigger="click" v-model:value="shapePoolVisible">
<template #content> <template #content>
<ShapePool @select="shape => drawShape(shape)" /> <ShapePool @select="shape => drawShape(shape)" />
...@@ -89,13 +90,16 @@ ...@@ -89,13 +90,16 @@
@update="data => { createLatexElement(data); latexEditorVisible = false }" @update="data => { createLatexElement(data); latexEditorVisible = false }"
/> />
</Modal> </Modal>
<!-- 上传图片 -->
<UploadPicture v-if="imgPoolVisible"></UploadPicture>
</div> </div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { ref } from 'vue' import { ref, provide } from 'vue'
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import { useMainStore, useSnapshotStore } from '@/store' import { useMainStore, useSnapshotStore, useScreenStore } from '@/store'
import { getImageDataURL } from '@/utils/image' import { getImageDataURL } from '@/utils/image'
import type { ShapePoolItem } from '@/configs/shapes' import type { ShapePoolItem } from '@/configs/shapes'
import type { LinePoolItem } from '@/configs/lines' import type { LinePoolItem } from '@/configs/lines'
...@@ -114,6 +118,7 @@ import Modal from '@/components/Modal.vue' ...@@ -114,6 +118,7 @@ import Modal from '@/components/Modal.vue'
import Divider from '@/components/Divider.vue' import Divider from '@/components/Divider.vue'
import Popover from '@/components/Popover.vue' import Popover from '@/components/Popover.vue'
import PopoverMenuItem from '@/components/PopoverMenuItem.vue' import PopoverMenuItem from '@/components/PopoverMenuItem.vue'
import UploadPicture from './UploadPicture.vue'
const mainStore = useMainStore() const mainStore = useMainStore()
const { creatingElement, creatingCustomShape, showSelectPanel, showSearchPanel } = storeToRefs(mainStore) const { creatingElement, creatingCustomShape, showSelectPanel, showSearchPanel } = storeToRefs(mainStore)
...@@ -121,6 +126,8 @@ const { canUndo, canRedo } = storeToRefs(useSnapshotStore()) ...@@ -121,6 +126,8 @@ const { canUndo, canRedo } = storeToRefs(useSnapshotStore())
const { redo, undo } = useHistorySnapshot() const { redo, undo } = useHistorySnapshot()
const { imgPoolVisible } = storeToRefs(useScreenStore())
const { const {
scaleCanvas, scaleCanvas,
setCanvasScalePercentage, setCanvasScalePercentage,
...@@ -145,6 +152,8 @@ const { ...@@ -145,6 +152,8 @@ const {
createAudioElement, createAudioElement,
} = useCreateElement() } = useCreateElement()
provide('imgType',1)
const insertImageElement = (files: FileList) => { const insertImageElement = (files: FileList) => {
const imageFile = files[0] const imageFile = files[0]
if (!imageFile) return if (!imageFile) return
...@@ -159,6 +168,10 @@ const mediaInputVisible = ref(false) ...@@ -159,6 +168,10 @@ const mediaInputVisible = ref(false)
const latexEditorVisible = ref(false) const latexEditorVisible = ref(false)
const textTypeSelectVisible = ref(false) const textTypeSelectVisible = ref(false)
const getImgVis = () =>{
imgPoolVisible.value = true
}
// 绘制文字范围 // 绘制文字范围
const drawText = (vertical = false) => { const drawText = (vertical = false) => {
mainStore.setCreatingElement({ mainStore.setCreatingElement({
......
...@@ -93,8 +93,8 @@ ...@@ -93,8 +93,8 @@
datas.loading= false datas.loading= false
sourceLoadingStore.setSourceLoading(false) sourceLoadingStore.setSourceLoading(false)
} }
if(!n&&datas.loading){ if(!n){
setNewDatasList(datas.DataSource)
} }
}) })
const setType = (x) =>{ const setType = (x) =>{
...@@ -132,6 +132,7 @@ ...@@ -132,6 +132,7 @@
const OffDataSource = () =>{ const OffDataSource = () =>{
datas.DataSource.DataSourceOverlay = !datas.DataSource.DataSourceOverlay datas.DataSource.DataSourceOverlay = !datas.DataSource.DataSourceOverlay
setNewDatasList(datas.DataSource)
} }
......
...@@ -104,7 +104,8 @@ ...@@ -104,7 +104,8 @@
<FullscreenSpin :loading="exporting" tip="正在导入..." /> <FullscreenSpin :loading="exporting" tip="正在导入..." />
<Psd-Upload :visible="psdVisibleStatus" @closed="psdVisibleStatus=false"></Psd-Upload> <Psd-Upload :visible="psdVisibleStatus" @closed="psdVisibleStatus=false"></Psd-Upload>
</div> </div>
<div v-if="ConfigId" style="opacity: 0;position: absolute;left: 100px;top: 0;bottom: 0;overflow: auto;z-index: -1;"> <!--
<div v-if="!model&&ConfigId" style="opacity: 0;position: absolute;left: 100px;top: 0;bottom: 0;overflow: auto;z-index: -1;">
<div class="export-img-dialog"> <div class="export-img-dialog">
<div class="thumbnails-view"> <div class="thumbnails-view">
<div class="thumbnails" v-for="slide in slides" ref="FeatureImgRef"> <div class="thumbnails" v-for="slide in slides" ref="FeatureImgRef">
...@@ -117,7 +118,7 @@ ...@@ -117,7 +118,7 @@
</div> </div>
</div> </div>
</div> </div>
</div> </div> -->
</template> </template>
...@@ -331,7 +332,7 @@ const SetTripTemplateConfig = async () => { ...@@ -331,7 +332,7 @@ const SetTripTemplateConfig = async () => {
ConfigId: ConfigId.value, ConfigId: ConfigId.value,
TempId: queryObj.value.TempId, TempId: queryObj.value.TempId,
TempData: queryObj.value.TempData, TempData: queryObj.value.TempData,
FeatureImg: datas.FeatureImgList // FeatureImg: datas.FeatureImgList
} }
let TemplateRes = await ConfigService.SetSetTripConfig(queryMsg); let TemplateRes = await ConfigService.SetSetTripConfig(queryMsg);
if (TemplateRes.data.resultCode == 1) { if (TemplateRes.data.resultCode == 1) {
...@@ -432,7 +433,7 @@ const setTemplate = async () =>{ ...@@ -432,7 +433,7 @@ const setTemplate = async () =>{
await SetTripTemplateSlide() await SetTripTemplateSlide()
} }
if(ConfigId.value){ if(ConfigId.value){
await testHandler() await SetTripTemplateConfig()
} }
} }
......
<template> <template>
<div <div
class="thumbnails" class="thumbnails"
@mousedown="() => setThumbnailsFocus(true)" @mousedown="() => setThumbnailsFocus(true)"
...@@ -44,6 +45,7 @@ ...@@ -44,6 +45,7 @@
<div class="page-number">幻灯片 {{slideIndex + 1}} / {{slides.length}}</div> <div class="page-number">幻灯片 {{slideIndex + 1}} / {{slides.length}}</div>
</div> </div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
...@@ -81,7 +83,7 @@ const { slidesLoadLimit } = useLoadSlides() ...@@ -81,7 +83,7 @@ const { slidesLoadLimit } = useLoadSlides()
const TemplateTypeStore = useScreenStore() const TemplateTypeStore = useScreenStore()
const CoverImgStore = useScreenStore() const CoverImgStore = useScreenStore()
const dataLoadingStore = useScreenStore() const dataLoadingStore = useScreenStore()
const { ConfigId, TemplateDataSource, TemplateType, dataLoading, TempId, SourceLoading } = storeToRefs(TemplateTypeStore) const { model, ConfigId, TemplateDataSource, TemplateType, dataLoading, TempId, SourceLoading } = storeToRefs(TemplateTypeStore)
const selectedSlidesIndex = computed(() => [..._selectedSlidesIndex.value, slideIndex.value]) const selectedSlidesIndex = computed(() => [..._selectedSlidesIndex.value, slideIndex.value])
const { setNewDatasList } = useEditor() const { setNewDatasList } = useEditor()
......
...@@ -52,19 +52,22 @@ ...@@ -52,19 +52,22 @@
<Divider /> <Divider />
<ElementShadow /> <ElementShadow />
<Divider /> <Divider />
<!--
<FileInput @change="files => replaceImage(files)"> <FileInput @change="files => replaceImage(files)">
<Button class="full-width-btn"><IconTransform class="btn-icon" /> 替换图片</Button> <Button class="full-width-btn"><IconTransform class="btn-icon" /> 替换图片</Button>
</FileInput> </FileInput> -->
<Button class="full-width-btn" @click="getImgVis()"><IconTransform class="btn-icon"/> 替换图片</Button>
<Button class="full-width-btn" @click="resetImage()"><IconUndo class="btn-icon" /> 重置样式</Button> <Button class="full-width-btn" @click="resetImage()"><IconUndo class="btn-icon" /> 重置样式</Button>
<Button class="full-width-btn" @click="setBackgroundImage()"><IconTheme class="btn-icon" /> 设为背景</Button> <Button class="full-width-btn" @click="setBackgroundImage()"><IconTheme class="btn-icon" /> 设为背景</Button>
<!-- 上传图片 -->
<UploadPicture v-if="imgReplaceVisible"></UploadPicture>
</div> </div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { type Ref, ref } from 'vue' import { type Ref, ref, provide } from 'vue'
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import { useMainStore, useSlidesStore } from '@/store' import { useMainStore, useSlidesStore, useScreenStore } from '@/store'
import type { PPTImageElement, SlideBackground } from '@/types/slides' import type { PPTImageElement, SlideBackground } from '@/types/slides'
import { CLIPPATHS } from '@/configs/imageClip' import { CLIPPATHS } from '@/configs/imageClip'
import { getImageDataURL } from '@/utils/image' import { getImageDataURL } from '@/utils/image'
...@@ -81,6 +84,7 @@ import Divider from '@/components/Divider.vue' ...@@ -81,6 +84,7 @@ import Divider from '@/components/Divider.vue'
import Button from '@/components/Button.vue' import Button from '@/components/Button.vue'
import ButtonGroup from '@/components/ButtonGroup.vue' import ButtonGroup from '@/components/ButtonGroup.vue'
import Popover from '@/components/Popover.vue' import Popover from '@/components/Popover.vue'
import UploadPicture from '../../CanvasTool/UploadPicture.vue'
const shapeClipPathOptions = CLIPPATHS const shapeClipPathOptions = CLIPPATHS
const ratioClipOptions = [ const ratioClipOptions = [
...@@ -127,6 +131,14 @@ const clipPanelVisible = ref(false) ...@@ -127,6 +131,14 @@ const clipPanelVisible = ref(false)
const { addHistorySnapshot } = useHistorySnapshot() const { addHistorySnapshot } = useHistorySnapshot()
const { imgReplaceVisible } = storeToRefs(useScreenStore())
provide('imgType',2)
const getImgVis = () =>{
imgReplaceVisible.value = true
}
// 打开自由裁剪 // 打开自由裁剪
const clipImage = () => { const clipImage = () => {
mainStore.setClipingImageElementId(handleElementId.value) mainStore.setClipingImageElementId(handleElementId.value)
......
...@@ -129,7 +129,7 @@ ...@@ -129,7 +129,7 @@
<!-- 生成封面图 --> <!-- 生成封面图 -->
<div style="opacity: 0;position: absolute;left: 100px;top: 0;bottom: 0;z-index: -1;" <div style="opacity: 0;position: absolute;left: 100px;top: 0;bottom: 0;z-index: -1;"
v-if="model&&slides.length>0&&slideIndex>=0"> v-if="model&&model==1&&slides.length>0&&slideIndex>=0">
<div class="export-img-dialog"> <div class="export-img-dialog">
<div class="thumbnails-view"> <div class="thumbnails-view">
<div class="thumbnails" ref="FeatureImgRef"> <div class="thumbnails" ref="FeatureImgRef">
...@@ -158,6 +158,7 @@ ...@@ -158,6 +158,7 @@
import useExport from '@/hooks/useExport' import useExport from '@/hooks/useExport'
import ThumbnailSlide from '@/views/components/ThumbnailSlide/index.vue' import ThumbnailSlide from '@/views/components/ThumbnailSlide/index.vue'
import AliyunUpload from '@/utils/upload/aliyun' import AliyunUpload from '@/utils/upload/aliyun'
import useEditor from '@/utils/Editor/index'
const datas = reactive({ const datas = reactive({
DataSource:{}, DataSource:{},
...@@ -192,6 +193,7 @@ ...@@ -192,6 +193,7 @@
const FeatureImgRef = ref(null) const FeatureImgRef = ref(null)
const { exportFeatureImg } = useExport() const { exportFeatureImg } = useExport()
const { setNewDatasList } = useEditor()
watch(() => datas.DataSource.pageType, (n,o) => { watch(() => datas.DataSource.pageType, (n,o) => {
...@@ -211,9 +213,9 @@ ...@@ -211,9 +213,9 @@
if(item.type=="text"||item.type=="image") { if(item.type=="text"||item.type=="image") {
item.TemplateList = JSON.parse(JSON.stringify(TemplateList)) item.TemplateList = JSON.parse(JSON.stringify(TemplateList))
item.TemplateDataSource = { item.TemplateDataSource = {
Content: '', Content: item.TemplateDataSource.Content,
Name: '', Name: item.TemplateDataSource.Name,
Id: null, Id: item.TemplateDataSource.Id,
} }
if(datas.DataSource.pageType!=1){ if(datas.DataSource.pageType!=1){
let index = item.TemplateDataSource&&item.TemplateDataSource.index>=0?item.TemplateDataSource.index:null as Number let index = item.TemplateDataSource&&item.TemplateDataSource.index>=0?item.TemplateDataSource.index:null as Number
...@@ -309,6 +311,7 @@ ...@@ -309,6 +311,7 @@
// 所有数据源 // 所有数据源
const AllDataSource = () => { const AllDataSource = () => {
setNewDatasList(datas.DataSource)
getPageType() getPageType()
datas.DataSource.DataSourceOverlay = !datas.DataSource.DataSourceOverlay datas.DataSource.DataSourceOverlay = !datas.DataSource.DataSourceOverlay
return return
......
<template> <template>
<div class="pptist-editor"> <div class="pptist-editor">
<EditorHeader class="layout-header" /> <EditorHeader class="layout-header" />
<div class="layout-content"> <div class="layout-content">
...@@ -28,6 +29,23 @@ ...@@ -28,6 +29,23 @@
> >
<ExportDialog /> <ExportDialog />
</Modal> </Modal>
<div v-if="model&&model==3"
style="opacity: 1;position: fixed;left: 0;right: 0; top: 0;bottom: 0;overflow: auto;z-index: 99999999;">
<div class="export-img-dialog">
<div class="thumbnails-view">
<div class="thumbnails" v-for="slide in slides">
<ThumbnailSlide
class="thumbnail"
:key="slide.id"
:slide="slide"
:size="viewportRatio==0.7069?1754:1240"
/>
</div>
</div>
</div>
</div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
...@@ -51,11 +69,13 @@ import Modal from '@/components/Modal.vue' ...@@ -51,11 +69,13 @@ import Modal from '@/components/Modal.vue'
import DataaSource from './DataaSource/index.vue' import DataaSource from './DataaSource/index.vue'
import ConfigService from '@/services/ConfigService' import ConfigService from '@/services/ConfigService'
import ThumbnailSlide from '@/views/components/ThumbnailSlide/index.vue'
const slidesStore = useSlidesStore() const slidesStore = useSlidesStore()
const TemplateTypeStore = useScreenStore() const TemplateTypeStore = useScreenStore()
const TempDataSourceStore = useScreenStore() const TempDataSourceStore = useScreenStore()
const { slides, slideIndex } = storeToRefs(slidesStore) const { slides, slideIndex, viewportRatio } = storeToRefs(slidesStore)
const { TemplateType, ConfigId, TempId} = storeToRefs(TemplateTypeStore) const { model, TemplateType, ConfigId, TempId} = storeToRefs(TemplateTypeStore)
const pageTypesList = ref([] as any) const pageTypesList = ref([] as any)
const searchData = ref({} as any) const searchData = ref({} as any)
searchData.value = inject(injectKeyTemplate) searchData.value = inject(injectKeyTemplate)
......
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