提交 c0bc635c authored 作者: lhh's avatar lhh

对接知识图谱的接口

上级 e5513e29
......@@ -254,3 +254,14 @@ export function getBookDetail(data: { id: string; }) {
export function getChapter(data: { book_id: string; }) {
return httpRequest.post('/api/ebook/open/teacher/chapter/getAllList', data)
}
// 获取知识图谱
export function getTagList(params: { type: string; parent_id: string; chapter_id?: string }) {
return httpRequest.get('/api/resource/v1/course/course/tag-list', { params })
}
// 关联知识图谱
export function addTagCourse(data: { tag_id: string; course_id: string; chapter_id: string; }) {
return httpRequest.post('/api/resource/v1/course/course/tag-add-course', data)
}
// /v1/course/course/tag-add-course
<script setup lang="ts">
import { getChapter, createCharacter } from '../../api'
import { getTagList, addTagCourse } from '../../api'
import { Plus } from '@element-plus/icons-vue'
import { ElMessage } from 'element-plus'
......@@ -35,7 +35,7 @@ const handleCancel = () => {
const chapterList = ref([])
onMounted(() => {
getChapter({ book_id: route.query?.bid as string }).then(res => {
getTagList({ type: '1', parent_id: route.query.id as string }).then(res => {
chapterList.value = res.data.reduce((a: any, b: any) => {
b.index = '0'
if (b.children) {
......@@ -57,13 +57,11 @@ const handleView = function (id: any) {
const handleGl = function (val: any) {
const params: any = {
name: val.name,
tag_id: val.id,
course_id: props.course_id,
resource_type: '13',
parent_id: props.chapterID,
resource_id: val.id
chapter_id: props.chapterID
}
createCharacter(params).then(() => {
addTagCourse(params).then(() => {
emit('update:isShowTextbookDialog2', false)
emit('create', val)
ElMessage.success('添加成功')
......
......@@ -13,7 +13,7 @@ import AddExamDialog from '../components/stepTwoComponents/AddExamDialog.vue'
import VideoPlayDialog from '../components/stepTwoComponents/VideoPlayDialog.vue'
import AddChapterDialog from '../components/stepTwoComponents/AddChapterDialog.vue'
import AddTextbookDialog from '../components/stepTwoComponents/AddTextbookDialog.vue'
import AddTextbookDialog2 from '../components/stepTwoComponents/AddTextbookDialog2.vue'
import AddGraphbookDialog from '../components/stepTwoComponents/AddGraphbookDialog.vue'
import OpenRules from '../components/stepTwoComponents/OpenRules.vue'
const route = useRoute()
......@@ -600,7 +600,7 @@ const handleChangeStatus = (node: any, data: any) => {
:chapterID="chapterID"
:course_id="id"
/>
<AddTextbookDialog2
<AddGraphbookDialog
v-if="isShowTextbookDialog2 === true"
v-model:isShowTextbookDialog2="isShowTextbookDialog2"
@create="handleFresh"
......
......@@ -92,3 +92,34 @@ export function courseCopy(data: { id: string }) {
export function setDownload(data: { course_id: string; information_id: string; can_download: string }) {
return httpRequest.post('/api/resource/v1/course/course/set-course-information-can-download ', data)
}
// 获取知识图谱
export function getTagList(params: { type: string; parent_id: string; chapter_id?: string }) {
return httpRequest.get('/api/resource/v1/course/course/tag-list', { params })
}
// 新增知识图谱
export function addTag(data: { name: string; course_id: string; status: string; parent_id?: string }) {
return httpRequest.post('/api/resource/v1/course/course/tag-add', data)
}
// 更新知识图谱
export function updateTag(data: { id: string; name: string; course_id: string; status: string; }) {
return httpRequest.post('/api/resource/v1/course/course/tag-update', data)
}
// 删除知识图谱
export function deleteTag(data: { id: string; course_id: string }) {
return httpRequest.post('/api/resource/v1/course/course/tag-delete', data)
}
// 查看关联的课程章节
export function viewTagCourse(params: { tag_id: string; course_id: string }) {
return httpRequest.get('/api/resource/v1/course/course/tag-course', { params })
}
// 查看关联的书籍章节
export function viewTagBook(params: { tag_id: string; course_id: string }) {
return httpRequest.get('/api/resource/v1/course/course/tag-book', { params })
}
......@@ -126,7 +126,7 @@ const handleMembers = () => {
// 点击知识图谱
const handleChart = () => {
router.push({ path: '/course/my/graph', query: { n: props.data?.name, bid: 19 } })
router.push({ path: '/course/my/graph', query: { n: props.data?.name, bid: 19, cid: route.query.id } })
}
// 更改负责人确定
......
<script setup lang="ts">
import { viewTagBook } from '../api'
const route = useRoute()
const emit = defineEmits<Emits>()
const props = defineProps({
isShowGraphBookDialog: {
type: Boolean,
required: true
},
id: {
type: String,
required: false
}
})
interface Emits {
(e: 'update:isShowGraphBookDialog', isShowVideoDialog: boolean): void
(e: 'create', val: any): void
}
// 取消
const handleCancel = () => {
emit('update:isShowGraphBookDialog', false)
}
const chapterList = ref([])
onMounted(() => {
viewTagBook({ tag_id: props.id as string, course_id: route.query.cid as string }).then(res => {
chapterList.value = res.data.reduce((a: any, b: any) => {
b.index = '0'
if (b.children) {
b.children.map((m: any) => {
m.index = '1'
})
}
a.push(b)
return a
}, [])
console.log(chapterList.value, 'chapterList.value')
})
})
</script>
<template>
<el-drawer
:model-value="isShowGraphBookDialog"
draggable
:before-close="handleCancel"
size="60%"
title="关联数字教材章节"
>
<el-tree :data="chapterList" node-key="id" :accordion="true" :expand-on-click-node="false" style="min-width: 100%">
<template #default="{ data }">
<span class="custom-tree-node">
<span class="node_title">{{ data.name }}</span>
</span>
</template>
</el-tree>
</el-drawer>
</template>
<style lang="scss" scoped>
.custom-tree-node {
flex: 1;
display: flex;
align-items: center;
justify-content: space-between;
font-size: 14px;
padding-right: 8px;
}
.btn_operate {
background-color: rgba(248, 241, 229, 0.39);
font-weight: 400;
color: #b2833d;
border: none;
border-radius: 16px;
margin: 3px;
}
.card-list {
display: flex;
flex-direction: column;
}
.card-list-con {
background: #fafafa;
padding: 20px;
display: flex;
flex-wrap: wrap;
}
.video-head {
position: relative;
.video-head-icon {
position: absolute;
top: 0;
right: 0;
font-size: 30px;
color: #666;
cursor: pointer;
}
}
.video-tool-btn {
padding: 10px 0 30px 0;
}
.video-head-icon {
position: absolute;
top: 0;
right: 0;
font-size: 30px;
color: #666;
cursor: pointer;
}
</style>
<script setup lang="ts">
import { viewTagCourse } from '../api'
const route = useRoute()
const emit = defineEmits<Emits>()
const props = defineProps({
isShowGraphCourseDialog: {
type: Boolean,
required: true
},
id: {
type: String,
required: false
}
})
interface Emits {
(e: 'update:isShowGraphCourseDialog', isShowVideoDialog: boolean): void
(e: 'create', val: any): void
}
// 取消
const handleCancel = () => {
emit('update:isShowGraphCourseDialog', false)
}
const chapterList = ref([])
onMounted(() => {
viewTagCourse({ tag_id: props.id as string, course_id: route.query.cid as string }).then(res => {
chapterList.value = res.data.reduce((a: any, b: any) => {
b.index = '0'
if (b.children) {
b.children.map((m: any) => {
m.index = '1'
})
}
a.push(b)
return a
}, [])
console.log(chapterList.value, 'chapterList.value')
})
})
</script>
<template>
<el-drawer
:model-value="isShowGraphCourseDialog"
draggable
:before-close="handleCancel"
size="60%"
title="关联课程章节"
>
<el-tree :data="chapterList" node-key="id" :accordion="true" :expand-on-click-node="false" style="min-width: 100%">
<template #default="{ data }">
<span class="custom-tree-node">
<span class="node_title">{{ data.name }}</span>
</span>
</template>
</el-tree>
</el-drawer>
</template>
<style lang="scss" scoped>
.custom-tree-node {
flex: 1;
display: flex;
align-items: center;
justify-content: space-between;
font-size: 14px;
padding-right: 8px;
}
.btn_operate {
background-color: rgba(248, 241, 229, 0.39);
font-weight: 400;
color: #b2833d;
border: none;
border-radius: 16px;
margin: 3px;
}
.card-list {
display: flex;
flex-direction: column;
}
.card-list-con {
background: #fafafa;
padding: 20px;
display: flex;
flex-wrap: wrap;
}
.video-head {
position: relative;
.video-head-icon {
position: absolute;
top: 0;
right: 0;
font-size: 30px;
color: #666;
cursor: pointer;
}
}
.video-tool-btn {
padding: 10px 0 30px 0;
}
.video-head-icon {
position: absolute;
top: 0;
right: 0;
font-size: 30px;
color: #666;
cursor: pointer;
}
</style>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论