Commit 6ba6b3ed authored by zhengke's avatar zhengke

新增 typeId 酒店 景 餐id

parent 685435b3
......@@ -118,6 +118,7 @@ export default () => {
const slide: Slide = {
id: nanoid(10),
typeId: 0,
elements: [],
background,
pageType: 1
......
......@@ -30,6 +30,7 @@ export default () => {
const resetSlides = () => {
const emptySlide: Slide = {
id: nanoid(10),
typeId: 0,
elements: [],
background: {
type: 'solid',
......@@ -80,6 +81,7 @@ export default () => {
const createSlide = () => {
const emptySlide: Slide = {
id: nanoid(10),
typeId: 0,
elements: [],
background: {
type: 'solid',
......
......@@ -6,6 +6,7 @@ export const layouts: Slide[] = [
{
id: 'template',
pageType: 1,
typeId: 0,
elements: [
{
type: 'shape',
......@@ -82,6 +83,7 @@ export const layouts: Slide[] = [
{
id: 'template',
pageType: 2,
typeId: 0,
elements: [
{
type: 'text',
......@@ -142,6 +144,7 @@ export const layouts: Slide[] = [
{
id: 'template',
pageType: 3,
typeId: 0,
elements: [
{
type: 'shape',
......@@ -192,6 +195,7 @@ export const layouts: Slide[] = [
{
id: 'MZVO1kkj',
pageType: 4,
typeId: 0,
elements: [
{
type: 'shape',
......@@ -278,6 +282,7 @@ export const layouts: Slide[] = [
{
id: 'template',
pageType: 4,
typeId: 0,
elements: [
{
type: 'shape',
......@@ -463,6 +468,7 @@ export const layouts: Slide[] = [
{
id: 'template',
pageType: 4,
typeId: 0,
elements: [
{
type: 'shape',
......@@ -517,6 +523,7 @@ export const layouts: Slide[] = [
{
id: 'template',
pageType: 1,
typeId: 0,
elements: [
{
type: 'text',
......@@ -581,6 +588,7 @@ export const layouts: Slide[] = [
{
id: 'template',
pageType: 1,
typeId: 0,
elements: [
{
type: 'text',
......@@ -699,6 +707,7 @@ export const layouts: Slide[] = [
{
id: 'template',
pageType: 1,
typeId: 0,
elements: [
{
type: 'text',
......@@ -776,6 +785,7 @@ export const layouts: Slide[] = [
{
id: 'template',
pageType: 1,
typeId: 0,
elements: [
{
type: 'shape',
......
......@@ -5,6 +5,7 @@ export const slides: Slide[] = [
{
id: 'test-slide-1',
pageType: 1,
typeId: 0,
elements: [
{
type: 'shape',
......@@ -80,6 +81,7 @@ export const slides: Slide[] = [
{
id: 'test-slide-2',
pageType: 2,
typeId: 0,
elements: [
{
type: 'text',
......@@ -140,6 +142,7 @@ export const slides: Slide[] = [
{
id: 'test-slide-3',
pageType: 3,
typeId: 0,
elements: [
{
type: 'shape',
......
......@@ -59,7 +59,7 @@ export const useMainStore = defineStore('main', {
creatingElement: null, // 正在插入的元素信息,需要通过绘制插入的元素(文字、形状、线条)
creatingCustomShape: false, // 正在绘制任意多边形
availableFonts: SYS_FONTS, // 当前环境可用字体
toolbarState: ToolbarStates.SLIDE_DESIGN, // 右侧工具栏状态 设计 模版数据EL_TEMPLATEDATA
toolbarState: ToolbarStates.EDIT_DATAS, // 右侧工具栏状态 设计SLIDE_DESIGN 模版数据EL_TEMPLATEDATA 编辑数据EDIT_DATAS
clipingImageElementId: '', // 当前正在裁剪的图片ID
richTextAttrs: defaultRichTextAttrs, // 富文本状态
selectedTableCells: [], // 选中的表格单元格
......
......@@ -39,6 +39,7 @@ export const useSlidesStore = defineStore('slides', {
slides: [{
id: 'test-slide-1',
pageType: 1,
typeId: 0,
elements: [],
background: {
type: 'solid',
......
......@@ -684,6 +684,7 @@ export type TurningMode = 'no' | 'fade' | 'slideX' | 'slideY' | 'random' | 'slid
* animations?: 元素动画集合
*
* turningMode?: 翻页方式
* typeId: 类型id 酒店 景点 餐
*/
export interface Slide {
id: string
......@@ -693,6 +694,7 @@ export interface Slide {
animations?: PPTAnimation[]
turningMode?: TurningMode
pageType: number
typeId: number
}
/**
......
export const enum ToolbarStates {
SYMBOL = 'symbol',
EL_ANIMATION = 'elAnimation',
EDIT_DATAS = 'editDatas',
EL_TEMPLATEDATA = 'elTemplateData',
EL_STYLE = 'elStyle',
EL_POSITION = 'elPosition',
......
import { ref } from 'vue'
import { storeToRefs } from 'pinia'
import { useSlidesStore, useScreenStore } from '@/store'
import { getHtmlPlainText } from '@/utils/common'
export default () => {
const slidesStore = useSlidesStore()
......@@ -9,9 +10,11 @@ export default () => {
const { SourceLoading } = storeToRefs(useScreenStore())
// 数据源更新
const setNewDatasList = (DataSource:any) => {
const setNewDatasList = (DataSource:any,typeObj:any) => {
console.log(typeObj,'----1111')
sourceLoadingStore.setSourceLoading(false)
const slidesData = slides.value
const cursors = [] as Array<any>
// 更新Slides数据
let savelides = [] as any
let newSlides = [] as any
......@@ -24,19 +27,22 @@ export default () => {
return y.id == x.id
})
if(dataObj){
x = dataObj
x = dataObj
}
savelides.push(x)
})
obj.elements = JSON.parse(JSON.stringify(savelides))
slidesData.forEach((x:any,index)=>{
if(slideIndex.value == index){
x.typeId = DataSource.typeId
x.pgaeType = DataSource.pgaeType
x.elements = obj.elements
}
newSlides.push(x)
newSlides.push(JSON.parse(JSON.stringify(x)))
})
slidesStore.setSlides(newSlides)
}
}
......
......@@ -69,6 +69,7 @@ const CreateDefaultSlider = (id:string):Slide =>{
return {
id,
pageType:1,
typeId: 0,
elements:[],
background: {
type: 'solid',
......
......@@ -371,6 +371,7 @@ const setTemplate = async () =>{
if(model.value&&userInfo.value.IsEditTripTemplate==1){
arr.forEach(x=>{
x.elements.forEach(y=>{
delete y.FiledTypeStr
delete y.TemplateList
})
})
......@@ -397,21 +398,31 @@ const setTemplate = async () =>{
} else {
arr.forEach(x=>{
x.elements.forEach(y=>{
delete y.FiledTypeStr
delete y.TemplateList
delete y.TemplateDataSource
})
})
}
for(let i=0;i<slides.value.length;i++){
if(!slides.value[i].typeId&&slides.value[i].pageType!=1){
datas.loading = false
mainStore.setToolbarState(ToolbarStates.EL_STYLE)
return ElMessage({
showClose: true,
message: `请选择 第 ${i+1} 页 的绑定数据`,
type: 'warning',
})
}
if(slides.value[i].elements.length==0) {
datas.loading = false
mainStore.setToolbarState(ToolbarStates.EL_TEMPLATEDATA)
return ElMessage({
showClose: true,
message: `请设计 第 ${i+1} 页 的数据`,
type: 'warning',
})
}
datas.loading = false
mainStore.setToolbarState(ToolbarStates.EL_TEMPLATEDATA)
return ElMessage({
showClose: true,
message: `请设计 第 ${i+1} 页 的数据`,
type: 'warning',
})
}
}
// console.log(arr,'-------tttt')
......@@ -463,8 +474,10 @@ const setFeatureImgList = async () => {
return a.index-b.index
})
datas.FeatureImgList = list.map(x=>{return x.url})
SetTripTemplateConfig()
},400)
setTimeout(()=>{
SetTripTemplateConfig()
},600)
},300)
}
}
})
......
......@@ -198,6 +198,8 @@ const GetTripFiledData = async () =>{
let dataRes = await ConfigService.triptemplateGetTripFiledData(queryMsg);
if (dataRes.data.resultCode == 1) {
if(!dataRes.data.data) return
datas.DataSource.TravelAatas = dataRes.data.data
if(TempId.value&&!searchData.value.TempId) return
const travel = dataRes.data.data
const cursors = [] as Array<any>
for (let index = 0; index < slidesData.length; index++) {
......@@ -310,6 +312,7 @@ const GetTripTemplate = async () =>{
if(typeof SlidesData=='object'&&!SlidesData.length){
let obj = {
pageType: 1,
typeId: null,
...SlidesData
}
newSlides.push(obj)
......@@ -341,10 +344,7 @@ const GetTripTemplate = async () =>{
queryObj.value.TempType = dataRes.data.data.TempType
slidesStore.updateSlideIndex(0)
datas.DataSource.pageType = newSlides[0].pageType
if(TempId.value&&!searchData.value.TempId){
await GetTripConfig()
return
}
if(TempId.value&&!searchData.value.TempId) await GetTripConfig()
if(ConfigId.value==0) return
await GetTripFiledData()
}
......
<template>
<div class="q-mt-xs bg-white q-pa-xs rounded ElementTemplateData">
<div class="column text-mdall">
<p class="q-mt-md">当前类型:
<span class="q-ml-xs">{{getPageType()}}</span>
</p>
</div>
<template v-if="datas.DataSource.pageType!=1">
<p class="q-mt-md"><span class="Required q-mr-md">*</span>选择数据:</p>
<div class="row wrap q-mt-md">
<el-select v-model="datas.DataSource.typeId" class="m-2"
placeholder="请选择需要绑定的数据" @change="getPageDatas()">
<el-option
v-for="item in datas.bindDatas"
:key="item.Id"
:label="item.Name"
:value="item.Id"
/>
</el-select>
</div>
</template>
</div>
</template>
<script lang="ts" setup>
import { computed, ref, reactive, watch, inject, nextTick } from 'vue'
import { storeToRefs } from 'pinia'
import { ElInput } from 'element-plus'
import { useMainStore, useSlidesStore, useScreenStore } from '@/store'
import LineService from '@/services/LineService'
import ConfigService from '@/services/ConfigService'
import { injectKeyDataSource } from '@/types/injectKey'
import { getHtmlPlainText } from '@/utils/common'
import useExport from '@/hooks/useExport'
import ThumbnailSlide from '@/views/components/ThumbnailSlide/index.vue'
import AliyunUpload from '@/utils/upload/aliyun'
import useEditor from '@/utils/Editor/index'
const datas = reactive({
DataSource:{},
CountryValue: null,
bindDatas: null
})
const dispositionObj = ref({} as any)
const queryObj = ref({} as any)
datas.DataSource = inject(injectKeyDataSource)
queryObj.value = inject(injectKeyDataSource).queryObj
const lines = ref([] as Array < any > ) //线路
const Series = ref([] as Array < any > ) //系列
const cursors = [] as Array<any>
const slidesStore = useSlidesStore()
const sourceLoadingStore = useScreenStore()
const { slides, slideIndex, viewportRatio } = storeToRefs(slidesStore)
const { setNewDatasList } = useEditor()
const { model, ConfigId, TemplateDataSource, TemplateType, CoverImg, isCoverImg, TempId } = storeToRefs(useScreenStore())
watch(() => datas.DataSource.DataSourceList, (n,o) => {
getBindDatas()
})
const getPageDatas = () =>{
let typeObj = datas.bindDatas.find(x=>{
return x.Id == datas.DataSource.typeId
})
console.log(datas.bindDatas,'-------')
if(typeObj){
sourceLoadingStore.setSourceLoading(true)
setNewDatasList(datas.DataSource,typeObj)
}
}
const getPageType = () => {
let obj = TemplateType.value.find(x=>{ return x.FiledType==datas.DataSource.pageType})
if(obj&&obj.Name){
return obj.Name
}
}
const getBindDatas = () =>{
let obj = TemplateType.value.find(x=>{ return x.FiledType==datas.DataSource.pageType})
if(obj&&obj.Name){
let Path = obj.Content.split('.')
TemplateType.value.forEach(x=>{
let dataPath = x.Content.split('.')
let value=JSON.parse(JSON.stringify(datas.DataSource.TravelAatas));
for (let i = 0; i < dataPath.length; i++) {
const oo = dataPath[i];
if(oo==Path[0]&&value&&value[oo]){
datas.bindDatas = value[oo]
}
}
})
}
}
getBindDatas()
</script>
<style lang="scss" scoped>
.origin-image {
height: 100px;
background-size: contain;
background-repeat: no-repeat;
background-position: center;
background-color: $lightGray;
margin-bottom: 10px;
}
.ElementTemplateData{
/* min-height: 500px; */
}
.el-select{
width: 100%;
}
.Required{
color: red;
}
</style>
\ No newline at end of file
......@@ -23,6 +23,7 @@ import ElementStylePanel from './ElementStylePanel/index.vue'
import ElementPositionPanel from './ElementPositionPanel.vue'
import ElementAnimationPanel from './ElementAnimationPanel.vue'
import ElementTemplateData from './ElementTemplateData.vue'
import EditDatas from './EditDatas.vue'
import SlideDesignPanel from './SlideDesignPanel.vue'
import SlideAnimationPanel from './SlideAnimationPanel.vue'
import MultiPositionPanel from './MultiPositionPanel.vue'
......@@ -45,6 +46,8 @@ const elementTabs = computed<ElementTabs[]>(() => {
{ label: '符号', key: ToolbarStates.SYMBOL },
{ label: '位置', key: ToolbarStates.EL_POSITION },
{ label: '动画', key: ToolbarStates.EL_ANIMATION },
{ label: '编辑', key: ToolbarStates.EDIT_DATAS },
]
}
return [
......@@ -96,6 +99,7 @@ const currentPanelComponent = computed(() => {
[ToolbarStates.EL_STYLE]: ElementStylePanel,
[ToolbarStates.EL_POSITION]: ElementPositionPanel,
[ToolbarStates.EL_ANIMATION]: ElementAnimationPanel,
[ToolbarStates.EDIT_DATAS]: EditDatas,
[ToolbarStates.EL_TEMPLATEDATA]: ElementTemplateData,
[ToolbarStates.SLIDE_DESIGN]: SlideDesignPanel,
[ToolbarStates.SLIDE_ANIMATION]: SlideAnimationPanel,
......
......@@ -65,9 +65,11 @@ if(searchData.value.TempId) TempIds = searchData.value.TempId
else if(TempId.value) TempIds = TempId.value
const datas = reactive({
DataSource:{
TravelAatas:{},
FeatureImgList: [],
ConfigId: ConfigId.value?ConfigId.value:0,
pageType: 1,//1基础 2酒店 3景 4餐
typeId: null, //记录当前页面 酒店 景 餐的id
DataSourceOverlay: false,
DataSourceList:[],
queryObj:{
......@@ -104,7 +106,8 @@ const GetTripFiled = async () =>{
if(obj==-1){
let object = {
FiledType: x.FiledType,
Name: x.FiledTypeStr
Name: x.FiledTypeStr,
Content: x.Content
}
pageTypesList.value.push(object)
}
......
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