paper-question-intelligent.vue 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <template>
  2. <div class="text-main mb-3 flex items-center">
  3. <div :class="seqClass">1</div>选择知识点(从左侧勾选)
  4. </div>
  5. <div class="flex flex-row flex-wrap gap-3">
  6. <el-tag v-for="k in knowledgeCheckNodes" type="primary" round closable @close="removeKnowledge(k)">{{k.name}}</el-tag>
  7. </div>
  8. <div class="text-main mt-10 mb-3 flex items-center">
  9. <div :class="seqClass">2</div>试题设置
  10. </div>
  11. <div class="flex flex-row flex-warp gap-10">
  12. <div v-for="t in qTypes" class="flex items-center gap-3">
  13. <el-text class="font-bold break-keep">{{t.dictLabel}}</el-text>
  14. <el-input-number v-model="t.count" :min="0"/>
  15. </div>
  16. </div>
  17. <div class="mt-10 text-right">
  18. <el-button type="primary" size="large" @click="buildPaper">生成试卷</el-button>
  19. </div>
  20. </template>
  21. <script setup name="PaperQuestionIntelligent">
  22. import {useInjectPaperExactCondition} from "@/views/dz/papers/hooks/usePaperExactCondition.js";
  23. import {useInjectPaperFullCondition} from "@/views/dz/papers/hooks/usePaperFullCondition.js";
  24. import {useProvidePaperQuestionCondition} from "@/views/dz/papers/hooks/usePaperQuestionCondition.js";
  25. import {useInjectLoading} from "@/views/hooks/useLoading.js";
  26. import {ElMessage} from "element-plus";
  27. import {buildPaperAuto} from "@/api/dz/papers.js";
  28. import {sleep} from "@/utils/index.js";
  29. import router from "@/router/index.js";
  30. const props = defineProps({
  31. allowMultiple: Boolean,
  32. exactMode: Boolean
  33. })
  34. const seqClass = 'inline-block rounded-full bg-blue-100 w-5 h-5 text-center mr-2'
  35. const {knowledgeCheckNodes, removeKnowledge, paperArgs} = props.exactMode ? useInjectPaperExactCondition() : useInjectPaperFullCondition()
  36. const {qTypes} = useProvidePaperQuestionCondition(props.exactMode, props.allowMultiple, true)
  37. const {loading} = useInjectLoading()
  38. const buildPaper = async function () {
  39. // validation
  40. const {batchId} = paperArgs.value
  41. if (!batchId) return ElMessage.error('请选择批次')
  42. if (!knowledgeCheckNodes.value.length) return ElMessage.error('请选择知识点')
  43. if (!qTypes.value.length || qTypes.value.every(t => !t.count)) return ElMessage.error('请填写题量')
  44. // build
  45. const commit = {
  46. ...paperArgs.value,
  47. paperDef: {
  48. knowIds: knowledgeCheckNodes.value.map(k => k.id),
  49. types: qTypes.value.map(t => ({
  50. type: t.dictValue,
  51. title: t.dictLabel,
  52. count: t.count
  53. }))
  54. }
  55. }
  56. await buildPaperAuto(commit)
  57. ElMessage.success('生成成功,即将打开组卷记录')
  58. sleep(2000)
  59. router.push('/paper/list')
  60. }
  61. </script>
  62. <style scoped>
  63. </style>