|
@@ -63,7 +63,7 @@
|
|
|
</g>
|
|
</g>
|
|
|
</svg>
|
|
</svg>
|
|
|
另存为副本</div>
|
|
另存为副本</div>
|
|
|
- <div class="dropdown-item danger" @click="handleDelete"><svg width="24" height="24" viewBox="0 0 24 24"
|
|
|
|
|
|
|
+ <div class="dropdown-item danger" @click="handleDelete" v-show="ccourseid"><svg width="24" height="24" viewBox="0 0 24 24"
|
|
|
fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
|
<g>
|
|
<g>
|
|
|
<g id="Frame" clip-path="url(#clip0_446_5972)">
|
|
<g id="Frame" clip-path="url(#clip0_446_5972)">
|
|
@@ -88,7 +88,7 @@
|
|
|
<!-- 课程标题和保存状态 -->
|
|
<!-- 课程标题和保存状态 -->
|
|
|
<div class="header-center">
|
|
<div class="header-center">
|
|
|
<div class="course-title-container">
|
|
<div class="course-title-container">
|
|
|
- <input v-if="editingTitle" v-model="courseTitle" class="course-title-input" @blur="editingTitle = false"
|
|
|
|
|
|
|
+ <input v-if="editingTitle" @change="changeCourse" v-model="courseTitle" class="course-title-input" @blur="editingTitle = false"
|
|
|
@keyup.enter="editingTitle = false" @input="isSaved = false" ref="titleInput" />
|
|
@keyup.enter="editingTitle = false" @input="isSaved = false" ref="titleInput" />
|
|
|
<span v-else class="course-title" @click="startEditingTitle">{{ courseTitle || '未命名课程' }}</span>
|
|
<span v-else class="course-title" @click="startEditingTitle">{{ courseTitle || '未命名课程' }}</span>
|
|
|
</div>
|
|
</div>
|
|
@@ -101,7 +101,7 @@
|
|
|
|
|
|
|
|
<!-- 操作按钮 -->
|
|
<!-- 操作按钮 -->
|
|
|
<div class="header-right">
|
|
<div class="header-right">
|
|
|
- <button class="action-btn preview-btn" @click="handlePreview">
|
|
|
|
|
|
|
+ <!-- <button class="action-btn preview-btn" @click="handlePreview">
|
|
|
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
|
<g id="Component 1">
|
|
<g id="Component 1">
|
|
|
<path id="Vector"
|
|
<path id="Vector"
|
|
@@ -114,7 +114,7 @@
|
|
|
</svg>
|
|
</svg>
|
|
|
|
|
|
|
|
预览
|
|
预览
|
|
|
- </button>
|
|
|
|
|
|
|
+ </button> -->
|
|
|
<button class="action-btn preview-btn" @click="handleSave">
|
|
<button class="action-btn preview-btn" @click="handleSave">
|
|
|
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
|
<g id="Component 1">
|
|
<g id="Component 1">
|
|
@@ -146,7 +146,7 @@
|
|
|
<div class="layout-content-center">
|
|
<div class="layout-content-center">
|
|
|
<CanvasTool class="center-top" />
|
|
<CanvasTool class="center-top" />
|
|
|
<Canvas class="center-body" :style="{ height: `calc(100% - ${remarkHeight + 40}px - 120px)` }"
|
|
<Canvas class="center-body" :style="{ height: `calc(100% - ${remarkHeight + 40}px - 120px)` }"
|
|
|
- :courseid="props.courseid" @course-loaded="handleCourseLoaded" />
|
|
|
|
|
|
|
+ :courseid="props.courseid" @course-loaded="handleCourseLoaded" ref="canvas"/>
|
|
|
<!-- <Remark
|
|
<!-- <Remark
|
|
|
class="center-bottom"
|
|
class="center-bottom"
|
|
|
v-model:height="remarkHeight"
|
|
v-model:height="remarkHeight"
|
|
@@ -201,9 +201,16 @@ import AIPPTDialog from './AIPPTDialog.vue'
|
|
|
import Modal from '@/components/Modal.vue'
|
|
import Modal from '@/components/Modal.vue'
|
|
|
import CollapsibleToolbar from '@/components/CollapsibleToolbar/index.vue'
|
|
import CollapsibleToolbar from '@/components/CollapsibleToolbar/index.vue'
|
|
|
import CreateCourseDialog from '@/components/CreateCourseDialog.vue'
|
|
import CreateCourseDialog from '@/components/CreateCourseDialog.vue'
|
|
|
|
|
+import api from '@/api'
|
|
|
|
|
+import { last } from 'lodash'
|
|
|
|
|
|
|
|
interface ParentWindowWithToolList extends Window {
|
|
interface ParentWindowWithToolList extends Window {
|
|
|
- // goBack?: () => void;
|
|
|
|
|
|
|
+ lastSteps?: () => void;
|
|
|
|
|
+ setCouresTitle?: (title: string) => void;
|
|
|
|
|
+ save?: () => void;
|
|
|
|
|
+ copyCourse?: () => void;
|
|
|
|
|
+ deleteCourse?: () => void;
|
|
|
|
|
+ publishCourse?: () => void;
|
|
|
}
|
|
}
|
|
|
const parentWindow = window.parent as ParentWindowWithToolList
|
|
const parentWindow = window.parent as ParentWindowWithToolList
|
|
|
|
|
|
|
@@ -219,6 +226,7 @@ const mainStore = useMainStore()
|
|
|
const { dialogForExport, showSelectPanel, showSearchPanel, showNotesPanel, showMarkupPanel, showAIPPTDialog } = storeToRefs(mainStore)
|
|
const { dialogForExport, showSelectPanel, showSearchPanel, showNotesPanel, showMarkupPanel, showAIPPTDialog } = storeToRefs(mainStore)
|
|
|
const closeExportDialog = () => mainStore.setDialogForExport('')
|
|
const closeExportDialog = () => mainStore.setDialogForExport('')
|
|
|
const closeAIPPTDialog = () => mainStore.setAIPPTDialogState(false)
|
|
const closeAIPPTDialog = () => mainStore.setAIPPTDialogState(false)
|
|
|
|
|
+const ccourseid = ref('')
|
|
|
|
|
|
|
|
const remarkHeight = ref(0)
|
|
const remarkHeight = ref(0)
|
|
|
const sidebarCollapsed = ref(false)
|
|
const sidebarCollapsed = ref(false)
|
|
@@ -250,6 +258,7 @@ const handleBackToList = () => {
|
|
|
isDropdownOpen.value = false
|
|
isDropdownOpen.value = false
|
|
|
// 导航回课程列表
|
|
// 导航回课程列表
|
|
|
console.log('导航回课程列表')
|
|
console.log('导航回课程列表')
|
|
|
|
|
+ parentWindow.lastSteps?.()
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
const handleSettings = () => {
|
|
const handleSettings = () => {
|
|
@@ -262,12 +271,18 @@ const handleSaveAsCopy = () => {
|
|
|
isDropdownOpen.value = false
|
|
isDropdownOpen.value = false
|
|
|
// 另存为副本
|
|
// 另存为副本
|
|
|
console.log('另存为副本')
|
|
console.log('另存为副本')
|
|
|
|
|
+ parentWindow.copyCourse?.()
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
const handleDelete = () => {
|
|
const handleDelete = () => {
|
|
|
isDropdownOpen.value = false
|
|
isDropdownOpen.value = false
|
|
|
// 删除课程
|
|
// 删除课程
|
|
|
console.log('删除课程')
|
|
console.log('删除课程')
|
|
|
|
|
+ parentWindow.deleteCourse?.()
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+const changeCourse = () => {
|
|
|
|
|
+ parentWindow.setCouresTitle?.(courseTitle.value)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
const handleToolbarToggle = (collapsed: boolean) => {
|
|
const handleToolbarToggle = (collapsed: boolean) => {
|
|
@@ -277,6 +292,7 @@ const handleToolbarToggle = (collapsed: boolean) => {
|
|
|
const handleCourseLoaded = (data: any) => {
|
|
const handleCourseLoaded = (data: any) => {
|
|
|
console.log('课程数据已加载:', data)
|
|
console.log('课程数据已加载:', data)
|
|
|
courseTitle.value = data.title || '新建课程'
|
|
courseTitle.value = data.title || '新建课程'
|
|
|
|
|
+ lastSaveTime.value = data.utime || ''
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
const handlePreview = () => {
|
|
const handlePreview = () => {
|
|
@@ -285,11 +301,13 @@ const handlePreview = () => {
|
|
|
|
|
|
|
|
const handleSave = () => {
|
|
const handleSave = () => {
|
|
|
console.log('保存课程')
|
|
console.log('保存课程')
|
|
|
- lastSaveTime.value = new Date().toLocaleString()
|
|
|
|
|
|
|
+ // lastSaveTime.value = new Date().toLocaleString()
|
|
|
|
|
+ parentWindow.save?.()
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
const handlePublish = () => {
|
|
const handlePublish = () => {
|
|
|
console.log('发布课程')
|
|
console.log('发布课程')
|
|
|
|
|
+ parentWindow.publishCourse?.()
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
const closeCreateCourseDialog = () => {
|
|
const closeCreateCourseDialog = () => {
|
|
@@ -308,10 +326,21 @@ const handleCreateCourseSelect = (option: string) => {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+const getCourseDetail = async (courseid: string) => {
|
|
|
|
|
+ console.log('获取课程详情:', courseid)
|
|
|
|
|
+ ccourseid.value = courseid
|
|
|
|
|
+ const res = await api.getCourseDetail(courseid)
|
|
|
|
|
+ console.log(res)
|
|
|
|
|
+ handleCourseLoaded(res[0][0])
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+Object.assign(window, { getCourseDetail })
|
|
|
|
|
+
|
|
|
onMounted(() => {
|
|
onMounted(() => {
|
|
|
if (!props.courseid) {
|
|
if (!props.courseid) {
|
|
|
showCreateCourseDialog.value = true
|
|
showCreateCourseDialog.value = true
|
|
|
}
|
|
}
|
|
|
|
|
+ ccourseid.value = props.courseid || ''
|
|
|
// 添加点击外部关闭下拉菜单的事件监听
|
|
// 添加点击外部关闭下拉菜单的事件监听
|
|
|
document.addEventListener('click', handleClickOutside)
|
|
document.addEventListener('click', handleClickOutside)
|
|
|
})
|
|
})
|