课程名称:Spring Boot+Vue3前后端分离,实战wiki知识库系统
章节名称:8-12 文档页面功能开发-1
讲师姓名:甲蛙
课程内容:
首先增加电子书界面,在views文件夹里新建一个文档界面doc.vue,暂时内容先显示一行字
<template>
<a-layout>
<a-layout-content :style="{ background: '#fff', padding: '24px', margin: 0, minHeight: '280px' }">
<div class="doc">
<h1>欢迎来到文档页面</h1>
</div>
</a-layout-content>
</a-layout>
</template>然后在main.ts中加入doc的路由
{
path: '/doc',
name: 'Doc',
component: Doc
},在首页home.vue里将原左侧分类树的分类改为根据点击跳转到对应doc界面
原代码
<a :href="item.href">{{ item.name }}</a>
现代码
<router-link :to="'/doc?ebookId=' + item.id">
{{ item.name }}
</router-link>然后加上左侧文档树,需要将文档界面doc.vue的一行文字改了,还有加上像之前的树型结构一样的js代码
<a-row>
<a-col :span="6">
<a-tree
v-if="level1.length > 0"
:tree-data="level1"
@select="onSelect"
:replaceFields="{title: 'name', key: 'id', value: 'id'}"
:defaultExpandAll="true"
>
</a-tree>
</a-col>
<a-col :span="18">
</a-col>
</a-row><script>
import { defineComponent, onMounted, ref, createVNode } from 'vue';
import axios from 'axios';
import {message} from 'ant-design-vue';
import {Tool} from "@/util/tool";
import {useRoute} from "vue-router";
export default defineComponent({
name: 'AdminDoc',
setup() {
const route = useRoute();
const docs = ref();
/**
* 一级文档树,children属性就是二级文档
* [{
* id: "",
* name: "",
* children: [{
* id: "",
* name: "",
* }]
* }]
*/
const level1 = ref(); // 一级文档树,children属性就是二级文档
level1.value = [];
/**
* 数据查询
**/
const handleQuery = () => {
axios.get("/doc/all").then((response) => {
const data = response.data;
if (data.success) {
docs.value = data.content;
level1.value = [];
level1.value = Tool.array2Tree(docs.value, 0);
} else {
message.error(data.message);
}
});
};
onMounted(() => {
handleQuery();
});
return {
level1,
}
}
});
</script>但此时还有个bug,上面查文档时请求的是doc/all,查询的是所有书的文档,应该只查询当前的电子书的文档。
把原all请求接口加上电子书id,根据这个参数只查询这个电子书的文档
@GetMapping("/all/{ebookId}")
public CommonResp all(@PathVariable Long ebookId){
CommonResp<List<DocQueryResp>> resp = new CommonResp<>();
List<DocQueryResp> list=docService.all(ebookId);
resp.setContent(list);
return resp;
}再给DocService的all方法加上参数,增加一个根据id查询的条件docExample.createCriteria().andEbookIdEqualTo(ebookId);
public List<DocQueryResp> all(Long ebookId){
DocExample docExample = new DocExample();
docExample.createCriteria().andEbookIdEqualTo(ebookId);
docExample.setOrderByClause("sort asc");
List<Doc> docList = docMapper.selectByExample(docExample);
// 列表复制
List<DocQueryResp> list = CopyUtil.copyList(docList, DocQueryResp.class);
return list;
}然后在前端发送doc/all请求时加上ebookid作为参数
axios.get("/doc/all/" + route.query.ebookId)还有另一个bug,电子书管理进入编辑界面时,点击父文档没有选项
只有点新增才会有父文档选项出现。需要点击编辑时就初始化父文档选择框。
将原选择树的变量向上移
// 因为树选择组件的属性状态,会随当前编辑的节点而变化,所以单独声明一个响应式变量 const treeSelectData = ref(); treeSelectData.value = [];
在数据查询handleQuery里初始化选择树
// 父文档下拉框初始化,相当于点击新增
treeSelectData.value = Tool.copy(level1.value);
// 为选择树添加一个"无"
treeSelectData.value.unshift({id: 0, name: '无'});学习收获:这次因为很多地方和以前的差不多,所以很多都是自己尝试独立完成,加强了自主完成功能的能力,而不是一板一眼地完全照着课程视频做。
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦



