ObjectiveQuestionAnalysis.vue 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <template>
  2. <div class="part-box is-filter">
  3. <el-form inline>
  4. <el-form-item label="科目">
  5. <select-subject v-model="searchModel.subject"></select-subject>
  6. </el-form-item>
  7. <el-form-item label="试卷类型">
  8. <el-select
  9. v-model="searchModel.paperType"
  10. placeholder="请选择"
  11. clearable
  12. style="width: 150px"
  13. >
  14. <el-option label="A卷" value="A" />
  15. <el-option label="B卷" value="B" />
  16. <el-option label="C卷" value="C" />
  17. </el-select>
  18. </el-form-item>
  19. <el-form-item>
  20. <el-space wrap>
  21. <el-button type="primary" @click="toPage(1)">查询</el-button>
  22. <el-button @click="exportData">导出</el-button>
  23. </el-space>
  24. </el-form-item>
  25. </el-form>
  26. </div>
  27. <div class="part-box">
  28. <el-table class="page-table" :data="dataList" :loading="loading">
  29. <el-table-column type="index" label="序号" width="60" />
  30. <el-table-column
  31. property="questionName"
  32. label="题目名称"
  33. min-width="150"
  34. />
  35. <el-table-column property="bigQuestionNo" label="大题号" min-width="80" />
  36. <el-table-column
  37. property="smallQuestionNo"
  38. label="小题号"
  39. min-width="80"
  40. />
  41. <el-table-column
  42. property="singleQuestionScore"
  43. label="单题分数"
  44. min-width="100"
  45. />
  46. <el-table-column
  47. property="singleQuestionAverageScore"
  48. label="单题平均分"
  49. min-width="120"
  50. >
  51. <template #default="scope">
  52. {{ scope.row.singleQuestionAverageScore?.toFixed(2) }}
  53. </template>
  54. </el-table-column>
  55. <el-table-column
  56. property="singleQuestionStandardDeviation"
  57. label="单题标准差"
  58. min-width="120"
  59. >
  60. <template #default="scope">
  61. {{ scope.row.singleQuestionStandardDeviation?.toFixed(2) }}
  62. </template>
  63. </el-table-column>
  64. <el-table-column label="得分率" min-width="100">
  65. <template #default="scope">
  66. {{ (scope.row.scoreRate * 100).toFixed(2) }}%
  67. </template>
  68. </el-table-column>
  69. <el-table-column label="满分率" min-width="100">
  70. <template #default="scope">
  71. {{ (scope.row.fullScoreRate * 100).toFixed(2) }}%
  72. </template>
  73. </el-table-column>
  74. <el-table-column property="paperType" label="试卷类型" min-width="100" />
  75. </el-table>
  76. <el-pagination
  77. v-model:current-page="pagination.pageNumber"
  78. v-model:page-size="pagination.pageSize"
  79. :layout="pagination.layout"
  80. :total="pagination.total"
  81. @size-change="pageSizeChange"
  82. @current-change="toPage"
  83. />
  84. </div>
  85. </template>
  86. <script setup lang="ts">
  87. import { reactive } from 'vue';
  88. import { getObjectiveQuestionAnalysisList } from '@/api/analysis';
  89. import {
  90. QuestionAnalysisItem,
  91. QuestionAnalysisFilter,
  92. } from '@/api/types/analysis';
  93. import useTable from '@/hooks/table';
  94. defineOptions({
  95. name: 'ObjectiveQuestionAnalysis',
  96. });
  97. const searchModel = reactive<QuestionAnalysisFilter>({
  98. subject: null,
  99. paperType: '',
  100. });
  101. const { dataList, pagination, loading, toPage, pageSizeChange } =
  102. useTable<QuestionAnalysisItem>(
  103. getObjectiveQuestionAnalysisList,
  104. searchModel,
  105. false
  106. );
  107. function exportData() {
  108. // TODO: 实现导出功能
  109. console.log('导出客观题分析数据');
  110. }
  111. </script>