|
@@ -1,14 +1,21 @@
|
|
|
<template>
|
|
<template>
|
|
|
<div>
|
|
<div>
|
|
|
<div>知识点(选填)</div>
|
|
<div>知识点(选填)</div>
|
|
|
- <treeselect
|
|
|
|
|
- class="mt-16"
|
|
|
|
|
- v-if="knowledgeTree"
|
|
|
|
|
- v-model="selectedKnowledgeIdList"
|
|
|
|
|
- :multiple="true"
|
|
|
|
|
- :options="knowledgeTree ? knowledgeTree : null"
|
|
|
|
|
- placeholder="选择相关知识点"
|
|
|
|
|
- />
|
|
|
|
|
|
|
+ <template v-if="knowledgeTree">
|
|
|
|
|
+ <treeselect
|
|
|
|
|
+ class="mt-16 mb-12"
|
|
|
|
|
+ v-model="selectedKnowledgeIdList"
|
|
|
|
|
+ :multiple="true"
|
|
|
|
|
+ :options="knowledgeTree ? knowledgeTree : null"
|
|
|
|
|
+ placeholder="选择相关知识点"
|
|
|
|
|
+ />
|
|
|
|
|
+ 推荐知识点:
|
|
|
|
|
+ <c-button :right="6" :key="item" :theme="selectedKnowledgeIdList.indexOf(item) !== -1 ? 'green' : ''"
|
|
|
|
|
+ v-for="item of recommended" @click="pushToSelectedKnowledgeIdList(item)">
|
|
|
|
|
+ {{knowledgeTreeNaming[item]}}
|
|
|
|
|
+ </c-button>
|
|
|
|
|
+ </template>
|
|
|
|
|
+
|
|
|
<div v-else class="mt-24">知识点加载中...</div>
|
|
<div v-else class="mt-24">知识点加载中...</div>
|
|
|
<slide-in-same-transition>
|
|
<slide-in-same-transition>
|
|
|
<keep-alive>
|
|
<keep-alive>
|
|
@@ -32,11 +39,12 @@ import Treeselect from '@riophae/vue-treeselect'
|
|
|
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
|
|
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
|
|
|
import { constructTree } from '@/utils/construct-tree'
|
|
import { constructTree } from '@/utils/construct-tree'
|
|
|
import debounce from '@/utils/debounce'
|
|
import debounce from '@/utils/debounce'
|
|
|
-// import { recommendKnowledge } from '@/server/ml-recommend'
|
|
|
|
|
|
|
+import { recommendKnowledge } from '@/server/ml-recommend'
|
|
|
|
|
+import CButton from '@/components/Basic/CButton'
|
|
|
|
|
|
|
|
export default {
|
|
export default {
|
|
|
name: 'QuestionEditorFactory',
|
|
name: 'QuestionEditorFactory',
|
|
|
- components: { Treeselect, TrueFalseQuestionEditor, ChoiceQuestionEditor, SlideInSameTransition },
|
|
|
|
|
|
|
+ components: { CButton, Treeselect, TrueFalseQuestionEditor, ChoiceQuestionEditor, SlideInSameTransition },
|
|
|
props: {
|
|
props: {
|
|
|
initValue: {
|
|
initValue: {
|
|
|
type: Object,
|
|
type: Object,
|
|
@@ -55,9 +63,12 @@ export default {
|
|
|
knowledgeTree: null,
|
|
knowledgeTree: null,
|
|
|
selectedKnowledgeIdList: this.initValue.knowledgeId,
|
|
selectedKnowledgeIdList: this.initValue.knowledgeId,
|
|
|
stem: null,
|
|
stem: null,
|
|
|
|
|
+ recommended: null,
|
|
|
|
|
+ knowledgeTreeNaming: {},
|
|
|
|
|
|
|
|
debounceRecommend: debounce(() => {
|
|
debounceRecommend: debounce(() => {
|
|
|
- // recommendKnowledge({ text: JSON.stringify(this.stem) })
|
|
|
|
|
|
|
+ recommendKnowledge({ text: JSON.stringify(this.stem) })
|
|
|
|
|
+ .then(res => { this.recommended = res })
|
|
|
}, 500),
|
|
}, 500),
|
|
|
QuestionKind
|
|
QuestionKind
|
|
|
}
|
|
}
|
|
@@ -71,6 +82,9 @@ export default {
|
|
|
getKnowledgeNodes () {
|
|
getKnowledgeNodes () {
|
|
|
getKnowledgeNodes()
|
|
getKnowledgeNodes()
|
|
|
.then(res => {
|
|
.then(res => {
|
|
|
|
|
+ res.forEach(item => {
|
|
|
|
|
+ this.knowledgeTreeNaming[item.abbreviation] = item.name
|
|
|
|
|
+ })
|
|
|
this.knowledgeTree = constructTree(res)
|
|
this.knowledgeTree = constructTree(res)
|
|
|
})
|
|
})
|
|
|
.catch(err => this.$setErrorMessage(err.response.data.msg))
|
|
.catch(err => this.$setErrorMessage(err.response.data.msg))
|
|
@@ -81,6 +95,14 @@ export default {
|
|
|
handleInput (event) {
|
|
handleInput (event) {
|
|
|
this.stem = event
|
|
this.stem = event
|
|
|
this.debounceRecommend()
|
|
this.debounceRecommend()
|
|
|
|
|
+ },
|
|
|
|
|
+ pushToSelectedKnowledgeIdList (item) {
|
|
|
|
|
+ const index = this.selectedKnowledgeIdList.indexOf(item)
|
|
|
|
|
+ if (index === -1) {
|
|
|
|
|
+ this.selectedKnowledgeIdList.push(item)
|
|
|
|
|
+ } else {
|
|
|
|
|
+ this.selectedKnowledgeIdList.splice(index, 1)
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|