电商网站收费吗,wordpress导入lofter,软件外包产业是什么,苏宁易购网站建设规划前言#xff1a;这篇文章来探索一下如何应用其他的PPT模版#xff0c;给一个下拉菜单#xff0c;列出几个项目中内置的模版 PPT模版数据
#xff08;一#xff09;增加菜单项
首先在下面这个菜单中增加一个“切换模版”的菜单项#xff0c;点击之后在弹出框中显示所有的…前言这篇文章来探索一下如何应用其他的PPT模版给一个下拉菜单列出几个项目中内置的模版 PPT模版数据
一增加菜单项
首先在下面这个菜单中增加一个“切换模版”的菜单项点击之后在弹出框中显示所有的模版
在 src/views/Editor/EditorHeader/index.vue 文件中增加一个菜单项 “切换模版”增加 src/views/Editor/EditorHeader/TemplateSelect.vue 组件用于模版切换的弹出框
PopoverMenuItem clicktemplateSelectVisible true; mainMenuVisible false切换模版
/PopoverMenuItem
!-- 放在模版的最后 --
TemplateSelect v-model:visibletemplateSelectVisible /
script langts setup
import TemplateSelect from ./TemplateSelect.vue
/scriptsrc/views/Editor/EditorHeader/TemplateSelect.vue
templateModal:visiblevisible:width800title选择模版close$emit(update:visible, false)div classtemplate-listdiv classtemplate-itemv-fortemplate in templates :keytemplate.idclickhandleSelectTemplate(template)div classtemplate-coverimg :srctemplate.cover :alttemplate.name/divdiv classtemplate-name{{ template.name }}/div/div/div/Modal
/templatescript langts setup
import { ref } from vue
import Modal from /components/Modal.vueinterface Template {id: stringname: stringcover: stringslides: any[] // 这里根据实际的幻灯片数据结构定义类型
}// 这里模拟一些模版数据实际使用时可以从配置文件或API获取
const templates refTemplate[]([{id: 1,name: 商务简约,cover: /path/to/cover1.jpg,slides: []},{id: 2, name: 创意设计,cover: /path/to/cover2.jpg,slides: []},// 可以添加更多模版...
])const emit defineEmits([update:visible])
defineProps{visible: boolean
}()const handleSelectTemplate (template: Template) {// 这里处理模版选择逻辑console.log(选择模版:, template)emit(update:visible, false)
}
/scriptstyle langscss scoped
.template-list {display: grid;grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));gap: 20px;padding: 20px;
}.template-item {cursor: pointer;border-radius: 4px;overflow: hidden;transition: all 0.2s;:hover {transform: translateY(-2px);box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1);}
}.template-cover {width: 100%;aspect-ratio: 16 / 9;overflow: hidden;img {width: 100%;height: 100%;object-fit: cover;}
}.template-name {padding: 8px;text-align: center;font-size: 14px;color: #666;
}
/style 弹出框效果
二下载资源展示图片
将资源放在下面目录中assets 目录一般用来保存静态资源文件 把预览图放在一个文件夹中便于批量导入 然后在 src/views/Editor/EditorHeader/TemplateSelect.vue 中导入批量导入并处理对应关系
// 批量导入模版数据
const templateModules import.meta.glob(/assets/templates/*.json, { eager: true })
// 批量导入预览图
const coverModules import.meta.glob(/assets/templates/covers/*.jpg, { eager: true })
const templates refTemplate[]([])
onMounted(() {// 处理模版数据const templateList: Template[] []Object.entries(templateModules).forEach(([path, module]) {const fileName path.split(/).pop()?.replace(.json, ) || const coverPath Object.keys(coverModules).find(path path.includes(fileName))if (coverPath) {templateList.push({id: fileName,name: fileName.replace(PPT模板, ).replace(PPT模版, ),cover: (coverModules[coverPath] as { default: string }).default,slides: (module as { default: any[] }).default})}})templates.value templateList
}) 三应用ppt模版
幻灯片相关的操作都在 src/store/slides.ts 文件中其中的 setSlides 方法就是设置幻灯片的所以在点击某一个封面的时候调用这个方法即可
const handleSelectTemplate (template: Template) {slidesStore.setSlides(template.slides)emit(update:visible, false)
}效果
四同步更新页面模版
可以看到虽然模版已经成功的应用上了但是页面模板下拉框中的数据没有同步变化 这个下拉框组件是 src/views/Editor/Thumbnails/LayoutPool.vue 其中的数据的定义是这个文件 src/mocks/layout.ts定义死的数据。这里我们可以修改一下使用 store 中的 slides 数据即可
// 将 layouts 改为 slides
let { slides } storeToRefs(slidesStore)