|
|
@@ -1,16 +1,22 @@
|
|
|
<template>
|
|
|
<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>
|
|
|
- {{recommended}}
|
|
|
<slide-in-same-transition>
|
|
|
<keep-alive>
|
|
|
<choice-question-editor @input="handleInput" v-if="kind === QuestionKind.choice" :initValue="initValue"
|
|
|
@@ -34,10 +40,11 @@ import '@riophae/vue-treeselect/dist/vue-treeselect.css'
|
|
|
import { constructTree } from '@/utils/construct-tree'
|
|
|
import debounce from '@/utils/debounce'
|
|
|
import { recommendKnowledge } from '@/server/ml-recommend'
|
|
|
+import CButton from '@/components/Basic/CButton'
|
|
|
|
|
|
export default {
|
|
|
name: 'QuestionEditorFactory',
|
|
|
- components: { Treeselect, TrueFalseQuestionEditor, ChoiceQuestionEditor, SlideInSameTransition },
|
|
|
+ components: { CButton, Treeselect, TrueFalseQuestionEditor, ChoiceQuestionEditor, SlideInSameTransition },
|
|
|
props: {
|
|
|
initValue: {
|
|
|
type: Object,
|
|
|
@@ -57,6 +64,7 @@ export default {
|
|
|
selectedKnowledgeIdList: this.initValue.knowledgeId,
|
|
|
stem: null,
|
|
|
recommended: null,
|
|
|
+ knowledgeTreeNaming: {},
|
|
|
|
|
|
debounceRecommend: debounce(() => {
|
|
|
recommendKnowledge({ text: JSON.stringify(this.stem) })
|
|
|
@@ -74,6 +82,9 @@ export default {
|
|
|
getKnowledgeNodes () {
|
|
|
getKnowledgeNodes()
|
|
|
.then(res => {
|
|
|
+ res.forEach(item => {
|
|
|
+ this.knowledgeTreeNaming[item.abbreviation] = item.name
|
|
|
+ })
|
|
|
this.knowledgeTree = constructTree(res)
|
|
|
})
|
|
|
.catch(err => this.$setErrorMessage(err.response.data.msg))
|
|
|
@@ -84,6 +95,14 @@ export default {
|
|
|
handleInput (event) {
|
|
|
this.stem = event
|
|
|
this.debounceRecommend()
|
|
|
+ },
|
|
|
+ pushToSelectedKnowledgeIdList (item) {
|
|
|
+ const index = this.selectedKnowledgeIdList.indexOf(item)
|
|
|
+ if (index === -1) {
|
|
|
+ this.selectedKnowledgeIdList.push(item)
|
|
|
+ } else {
|
|
|
+ this.selectedKnowledgeIdList.splice(index, 1)
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|