From 8ac9f591a0558b52fcc1a29439ceb69243854f12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E7=90=A6?= Date: Tue, 14 Jul 2026 09:37:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=A1=B5=E9=9D=A2=E3=80=81?= =?UTF-8?q?=E4=BF=AE=E5=A4=8DBUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/src/components/admin/AdminLayout.vue | 1 + client/src/components/ppt/PptSlideCanvas.vue | 15 +- client/src/components/ppt/PptSlideViewer.vue | 37 +- client/src/composables/usePptTemplate.ts | 130 ++++++ client/src/config/pptTemplateDefaults.ts | 72 ++++ client/src/pages/BlogPptPreview.vue | 55 ++- client/src/pages/admin/PptTemplateForm.vue | 395 ++++++++++++++++++ client/src/pages/admin/PptTemplates.vue | 202 +++++++++ client/src/router.ts | 6 +- client/src/services/api.ts | 63 +++ client/src/styles/pptPreview.css | 136 +++++- client/src/types/pptTemplate.ts | 69 +++ client/src/utils/applyPptTemplate.ts | 52 +++ server/handlers/ppt_template.go | 225 ++++++++++ server/main.go | 11 + server/models/ppt_template.go | 58 +++ server/repositories/migration.go | 55 +++ .../repositories/ppt_template_repository.go | 170 ++++++++ 18 files changed, 1699 insertions(+), 53 deletions(-) create mode 100644 client/src/composables/usePptTemplate.ts create mode 100644 client/src/config/pptTemplateDefaults.ts create mode 100644 client/src/pages/admin/PptTemplateForm.vue create mode 100644 client/src/pages/admin/PptTemplates.vue create mode 100644 client/src/types/pptTemplate.ts create mode 100644 client/src/utils/applyPptTemplate.ts create mode 100644 server/handlers/ppt_template.go create mode 100644 server/models/ppt_template.go create mode 100644 server/repositories/ppt_template_repository.go diff --git a/client/src/components/admin/AdminLayout.vue b/client/src/components/admin/AdminLayout.vue index 18f8941..b4fc788 100644 --- a/client/src/components/admin/AdminLayout.vue +++ b/client/src/components/admin/AdminLayout.vue @@ -250,6 +250,7 @@ const menuItems = ref([ isOpen: false, children: [ { title: '全局配置', path: '/admin/settings', icon: '🛠️' }, + { title: 'PPT 模板', path: '/admin/ppt-templates', icon: '📽️' }, { title: '操作日志', path: '/admin/logs', icon: '📋' }, { title: '访问日志', path: '/admin/access-logs', icon: '🌐' } ] diff --git a/client/src/components/ppt/PptSlideCanvas.vue b/client/src/components/ppt/PptSlideCanvas.vue index 47acca0..257415a 100644 --- a/client/src/components/ppt/PptSlideCanvas.vue +++ b/client/src/components/ppt/PptSlideCanvas.vue @@ -14,18 +14,20 @@ import '../../styles/pptPreview.css' interface Props { slide: PptSlide - theme?: 'light' | 'dark' compact?: boolean /** 分步揭示:0=仅标题居中;Infinity=显示全部(缩略图) */ visibleStep?: number slideDirection?: SlideDirection + templateVars?: Record + revealTransition?: string } const props = withDefaults(defineProps(), { - theme: 'dark', compact: false, visibleStep: Number.POSITIVE_INFINITY, slideDirection: 'none', + templateVars: () => ({}), + revealTransition: 'ppt-reveal', }) type ImageLoadState = 'initial' | 'noReferrer' | 'failed' @@ -33,7 +35,6 @@ type ImageLoadState = 'initial' | 'noReferrer' | 'failed' const imageLoadStates = ref>(new Map()) const videoRefs = ref>(new Map()) -const themeClass = computed(() => `ppt-theme-${props.theme}`) const showFull = computed(() => !Number.isFinite(props.visibleStep)) const titleMetaLines = computed(() => { @@ -127,7 +128,7 @@ const stopMediaEvent = (e: Event) => {