built-paper-list.vue 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. <template>
  2. <div v-if="hasPaper">
  3. <div class="flex justify-center items-center gap-5">
  4. <el-button type="primary" size="large" @click="handleSend">发送试卷</el-button>
  5. <el-button type="warning" size="large" plain @click="handleSendNew">重新生成</el-button>
  6. <el-button type="danger" size="large" plain @click="handleSendForce">全部重新生成</el-button>
  7. </div>
  8. <el-collapse class="mt-5">
  9. <built-paper v-for="p in papers" :paper="p" />
  10. </el-collapse>
  11. </div>
  12. </template>
  13. <script setup name="BuiltPaperList">
  14. import {ElMessage} from "element-plus";
  15. import {useInjectGlobalLoading} from "@/views/hooks/useGlobalLoading.js";
  16. import {getBuiltPaper} from "@/api/dz/papers.js";
  17. import BuiltPaper from "@/views/dz/papers/components/plugs/built-paper.vue";
  18. const emits = defineEmits(['send', 'send-new', 'send-force'])
  19. const {loading} = useInjectGlobalLoading()
  20. const papers = ref([])
  21. const hasPaper = computed(() => !!papers.value?.length)
  22. const loadBuiltPaper = async function (payload) {
  23. // 临时禁用全局 loading,避免显示遮罩
  24. const originalLoading = loading.value
  25. loading.value = false
  26. try {
  27. const res = await getBuiltPaper(payload)
  28. papers.value = [].concat(res.data)
  29. } finally {
  30. // 恢复全局 loading 状态
  31. loading.value = originalLoading
  32. }
  33. }
  34. const reset = function () {
  35. papers.value = []
  36. }
  37. const handleSend = function () {
  38. emits('send')
  39. }
  40. const handleSendNew = function () {
  41. return ElMessage.info('开发中,敬请期待...')
  42. }
  43. const handleSendForce = function () {
  44. return ElMessage.info('开发中,敬请期待...')
  45. }
  46. defineExpose({hasPaper, loadBuiltPaper, reset})
  47. </script>
  48. <style scoped>
  49. </style>