|
@@ -8,7 +8,7 @@
|
|
|
<span class="name">{{ item.name }}</span>
|
|
|
</div>
|
|
|
<div v-for="li in item.nodes" :key="li.id">
|
|
|
- <div :class="['catalogue-item', 'children']">
|
|
|
+ <div :class="['catalogue-item', 'children', curChapterId === li.id ? 'active' : '']">
|
|
|
<span class="name">{{ li?.name }}</span>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -17,7 +17,7 @@
|
|
|
</div>
|
|
|
<div class="content-area">
|
|
|
<div class="content-top">
|
|
|
- <el-button><SvgIcon icon-class="quit" /> 退出预览</el-button>
|
|
|
+ <el-button @click="goBack"><SvgIcon icon-class="quit" size="14" /> 退出预览</el-button>
|
|
|
</div>
|
|
|
<div
|
|
|
class="content"
|
|
@@ -33,14 +33,21 @@
|
|
|
},
|
|
|
]"
|
|
|
>
|
|
|
- <div></div>
|
|
|
+ <div class="navigation">
|
|
|
+ <span class="navigation-label"> <SvgIcon icon-class="navigation" size="14" />{{ getCatalogueName() }} </span>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
-import { GetCoursewareContent, GetBookChapterStruct, GetCoursewareList_Chapter } from '@/api/book';
|
|
|
+import {
|
|
|
+ GetCoursewareContent,
|
|
|
+ GetBookChapterStruct,
|
|
|
+ GetCoursewareList_Chapter,
|
|
|
+ GetCoursewareComponentContent_View,
|
|
|
+} from '@/api/book';
|
|
|
|
|
|
export default {
|
|
|
name: 'PreviewPage',
|
|
@@ -49,7 +56,7 @@ export default {
|
|
|
return {
|
|
|
book_id: this.$route.params.book_id,
|
|
|
chapter_id,
|
|
|
- curChaterId: chapter_id,
|
|
|
+ curChapterId: chapter_id,
|
|
|
data: {
|
|
|
background_image_url: '',
|
|
|
background_position: {
|
|
@@ -72,8 +79,18 @@ export default {
|
|
|
this.setCurPosition(this.chapter_id);
|
|
|
});
|
|
|
this.getCoursewareList_Chapter(this.chapter_id);
|
|
|
+ this.GetCoursewareComponentContent_View();
|
|
|
},
|
|
|
methods: {
|
|
|
+ // 获取课件数据
|
|
|
+ getCoursewareComponentContent_View() {
|
|
|
+ GetCoursewareComponentContent_View({ courseware_id: this.coursewareId, component_id: this.componentId }).then(
|
|
|
+ ({ content }) => {
|
|
|
+ // if (content) this.file_list = JSON.parse(content).file_list;
|
|
|
+ },
|
|
|
+ );
|
|
|
+ },
|
|
|
+
|
|
|
goBack() {
|
|
|
this.$router.push(`/chapter?chapter_id=${this.chapter_id}&book_id=${this.book_id}`);
|
|
|
},
|
|
@@ -112,6 +129,16 @@ export default {
|
|
|
if (content) this.data = JSON.parse(content);
|
|
|
});
|
|
|
},
|
|
|
+ getNodeName(index) {
|
|
|
+ let node = this.nodes;
|
|
|
+ for (let i = 0; i <= index; i++) {
|
|
|
+ node = i === 0 ? node[this.curPosition[i]] : node.nodes[this.curPosition[i]];
|
|
|
+ }
|
|
|
+ return node?.name;
|
|
|
+ },
|
|
|
+ getCatalogueName() {
|
|
|
+ return this.curPosition.map((item, index) => this.getNodeName(index)).join(' / ');
|
|
|
+ },
|
|
|
},
|
|
|
};
|
|
|
</script>
|
|
@@ -125,7 +152,6 @@ export default {
|
|
|
.catalogue {
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
- row-gap: 8px;
|
|
|
height: 100%;
|
|
|
padding: 24px;
|
|
|
background-color: #fff;
|
|
@@ -139,7 +165,7 @@ export default {
|
|
|
&-item {
|
|
|
display: flex;
|
|
|
column-gap: 8px;
|
|
|
- padding: 8px 52px 8px 16px;
|
|
|
+ padding: 8px 32px 8px 16px;
|
|
|
font-size: 14px;
|
|
|
border-bottom: 1px solid #ebebeb;
|
|
|
|
|
@@ -147,6 +173,10 @@ export default {
|
|
|
background-color: #f3f3f3;
|
|
|
}
|
|
|
|
|
|
+ &.active {
|
|
|
+ background-color: #f3f3f3;
|
|
|
+ }
|
|
|
+
|
|
|
&.subdirectory {
|
|
|
.name {
|
|
|
font-weight: bold;
|
|
@@ -183,18 +213,20 @@ export default {
|
|
|
justify-content: end;
|
|
|
width: 100%;
|
|
|
margin-bottom: 18px;
|
|
|
+ font-size: 16px;
|
|
|
}
|
|
|
|
|
|
.content {
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
row-gap: 6px;
|
|
|
- width: 100%;
|
|
|
+ width: 94%;
|
|
|
min-height: calc(100% - 56px);
|
|
|
padding: 24px;
|
|
|
background-color: #fff;
|
|
|
background-repeat: no-repeat;
|
|
|
- border-radius: 4px;
|
|
|
+ border: 3px solid #f44444;
|
|
|
+ border-radius: 16px;
|
|
|
|
|
|
.row {
|
|
|
display: grid;
|
|
@@ -205,6 +237,21 @@ export default {
|
|
|
display: grid;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ .navigation {
|
|
|
+ margin: -10px 0 0 -24px;
|
|
|
+
|
|
|
+ &-label {
|
|
|
+ padding: 18px 24px;
|
|
|
+ color: #fff;
|
|
|
+ background-color: #f44444;
|
|
|
+ border-radius: 16px 0;
|
|
|
+
|
|
|
+ .svg-icon {
|
|
|
+ margin: 0 22px 0 1px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|