|
@@ -1,18 +1,145 @@
|
|
<template>
|
|
<template>
|
|
<div>
|
|
<div>
|
|
<a-button @click="importModalVisible = true">题型分布设置</a-button>
|
|
<a-button @click="importModalVisible = true">题型分布设置</a-button>
|
|
- <a-button @click="openModal">说明</a-button>
|
|
|
|
|
|
|
|
- <a-table
|
|
|
|
- style="width: 100%; overflow-x: scroll"
|
|
|
|
- row-key="id"
|
|
|
|
- :columns="columns"
|
|
|
|
- :data-source="props.questions"
|
|
|
|
- ></a-table>
|
|
|
|
|
|
+ <div v-if="props.questions.some((q) => q.type === 'TYPE1')">
|
|
|
|
+ <div class="tw-flex tw-justify-between tw-items-center tw-my-4">
|
|
|
|
+ <h3 class="section-title">题型题目难度等级构成分布(一)</h3>
|
|
|
|
+ <div class="tw-flex tw-gap-2">
|
|
|
|
+ <a-button @click="openModal07">说明</a-button>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <DistriTable
|
|
|
|
+ :questions="
|
|
|
|
+ props.questions.filter((q) => q.type === 'TYPE1' || !q.type)
|
|
|
|
+ "
|
|
|
|
+ />
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <div v-if="props.questions.some((q) => q.type === 'TYPE2')">
|
|
|
|
+ <div class="tw-flex tw-justify-between tw-items-center tw-my-4">
|
|
|
|
+ <h3 class="section-title">题型题目难度等级构成分布(二)</h3>
|
|
|
|
+ <div class="tw-flex tw-gap-2">
|
|
|
|
+ <a-button @click="openModal07">说明</a-button>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <DistriTable
|
|
|
|
+ :questions="
|
|
|
|
+ props.questions.filter((q) => q.type === 'TYPE2' || !q.type)
|
|
|
|
+ "
|
|
|
|
+ />
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <div v-if="props.questions.some((q) => q.type === 'TYPE3')">
|
|
|
|
+ <div class="tw-flex tw-justify-between tw-items-center tw-my-4">
|
|
|
|
+ <h3 class="section-title">题型题目难度等级构成分布(三)</h3>
|
|
|
|
+ <div class="tw-flex tw-gap-2">
|
|
|
|
+ <a-button @click="openModal07">说明</a-button>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <DistriTable
|
|
|
|
+ :questions="
|
|
|
|
+ props.questions.filter((q) => q.type === 'TYPE3' || !q.type)
|
|
|
|
+ "
|
|
|
|
+ />
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <div v-if="props.questions.some((q) => q.type === 'CONTENT1')">
|
|
|
|
+ <div class="tw-flex tw-justify-between tw-items-center tw-my-4">
|
|
|
|
+ <h3 class="section-title">内容题目难度等级构成分布(一)</h3>
|
|
|
|
+ <div class="tw-flex tw-gap-2">
|
|
|
|
+ <a-button @click="openModal07">说明</a-button>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <DistriTable
|
|
|
|
+ :questions="
|
|
|
|
+ props.questions.filter((q) => q.type === 'CONTENT1' || !q.type)
|
|
|
|
+ "
|
|
|
|
+ />
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <div v-if="props.questions.some((q) => q.type === 'CONTENT2')">
|
|
|
|
+ <div class="tw-flex tw-justify-between tw-items-center tw-my-4">
|
|
|
|
+ <h3 class="section-title">内容题目难度等级构成分布(二)</h3>
|
|
|
|
+ <div class="tw-flex tw-gap-2">
|
|
|
|
+ <a-button @click="openModal07">说明</a-button>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <DistriTable
|
|
|
|
+ :questions="
|
|
|
|
+ props.questions.filter((q) => q.type === 'CONTENT2' || !q.type)
|
|
|
|
+ "
|
|
|
|
+ />
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <div v-if="props.questions.some((q) => q.type === 'CONTENT3')">
|
|
|
|
+ <div class="tw-flex tw-justify-between tw-items-center tw-my-4">
|
|
|
|
+ <h3 class="section-title">内容题目难度等级构成分布(三)</h3>
|
|
|
|
+ <div class="tw-flex tw-gap-2">
|
|
|
|
+ <a-button @click="openModal07">说明</a-button>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <DistriTable
|
|
|
|
+ :questions="
|
|
|
|
+ props.questions.filter((q) => q.type === 'CONTENT3' || !q.type)
|
|
|
|
+ "
|
|
|
|
+ />
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <div v-if="props.questions.some((q) => q.type === 'ABILITY1')">
|
|
|
|
+ <div class="tw-flex tw-justify-between tw-items-center tw-my-4">
|
|
|
|
+ <h3 class="section-title">能力题目难度等级构成分布(一)</h3>
|
|
|
|
+ <div class="tw-flex tw-gap-2">
|
|
|
|
+ <a-button @click="openModal07">说明</a-button>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <DistriTable
|
|
|
|
+ :questions="
|
|
|
|
+ props.questions.filter((q) => q.type === 'ABILITY1' || !q.type)
|
|
|
|
+ "
|
|
|
|
+ />
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <div v-if="props.questions.some((q) => q.type === 'ABILITY2')">
|
|
|
|
+ <div class="tw-flex tw-justify-between tw-items-center tw-my-4">
|
|
|
|
+ <h3 class="section-title">能力题目难度等级构成分布(二)</h3>
|
|
|
|
+ <div class="tw-flex tw-gap-2">
|
|
|
|
+ <a-button @click="openModal07">说明</a-button>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <DistriTable
|
|
|
|
+ :questions="
|
|
|
|
+ props.questions.filter((q) => q.type === 'ABILITY2' || !q.type)
|
|
|
|
+ "
|
|
|
|
+ />
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <div v-if="props.questions.some((q) => q.type === 'ABILITY3')">
|
|
|
|
+ <div class="tw-flex tw-justify-between tw-items-center tw-my-4">
|
|
|
|
+ <h3 class="section-title">能力题目难度等级构成分布(三)</h3>
|
|
|
|
+ <div class="tw-flex tw-gap-2">
|
|
|
|
+ <a-button @click="openModal07">说明</a-button>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <DistriTable
|
|
|
|
+ :questions="
|
|
|
|
+ props.questions.filter((q) => q.type === 'ABILITY3' || !q.type)
|
|
|
|
+ "
|
|
|
|
+ />
|
|
|
|
+ </div>
|
|
|
|
|
|
<a-modal
|
|
<a-modal
|
|
v-model:visible="importModalVisible"
|
|
v-model:visible="importModalVisible"
|
|
- title="批量科目导入"
|
|
|
|
|
|
+ title="题型设置导入"
|
|
@ok="handleImport"
|
|
@ok="handleImport"
|
|
ok-text="确定"
|
|
ok-text="确定"
|
|
cancel-text="取消"
|
|
cancel-text="取消"
|
|
@@ -22,9 +149,9 @@
|
|
<input id="file-input" :multiple="false" type="file" />
|
|
<input id="file-input" :multiple="false" type="file" />
|
|
</a-form-item>
|
|
</a-form-item>
|
|
<a-form-item label="下载模板">
|
|
<a-form-item label="下载模板">
|
|
- <a-button class="download-tpl-btn" @click="downloadTpl"
|
|
|
|
- >下载模板</a-button
|
|
|
|
- >
|
|
|
|
|
|
+ <a-button class="download-tpl-btn" @click="downloadTpl">
|
|
|
|
+ 下载模板
|
|
|
|
+ </a-button>
|
|
</a-form-item>
|
|
</a-form-item>
|
|
</a-form>
|
|
</a-form>
|
|
</a-modal>
|
|
</a-modal>
|
|
@@ -34,82 +161,15 @@
|
|
<script setup lang="ts">
|
|
<script setup lang="ts">
|
|
import { importQuestionGroups } from "@/api/paperAnalysisPage";
|
|
import { importQuestionGroups } from "@/api/paperAnalysisPage";
|
|
import EventBus from "@/plugins/eventBus";
|
|
import EventBus from "@/plugins/eventBus";
|
|
-import { Question } from "@/types";
|
|
|
|
|
|
+import { QuestionGroup } from "@/types";
|
|
import { downloadFileURL } from "@/utils/utils";
|
|
import { downloadFileURL } from "@/utils/utils";
|
|
import { message } from "ant-design-vue";
|
|
import { message } from "ant-design-vue";
|
|
|
|
+import DistriTable from "./DistriTable.vue";
|
|
|
|
+
|
|
|
|
+const props = defineProps<{ questions: QuestionGroup[]; projectId: number }>();
|
|
|
|
|
|
-const props = defineProps<{ questions: Question[]; projectId: number }>();
|
|
|
|
-
|
|
|
|
-const columns = [
|
|
|
|
- {
|
|
|
|
- title: "大题号",
|
|
|
|
- dataIndex: "mainNumber",
|
|
|
|
- width: 80,
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- title: "小题号",
|
|
|
|
- dataIndex: "subNumber",
|
|
|
|
- width: 80,
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- title: "满分",
|
|
|
|
- dataIndex: "totalScore",
|
|
|
|
- width: 150,
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- title: "最高分",
|
|
|
|
- dataIndex: "maxScore",
|
|
|
|
- width: 150,
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- title: "最低分",
|
|
|
|
- dataIndex: "minScore",
|
|
|
|
- width: 150,
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- title: "平均分",
|
|
|
|
- dataIndex: "avgScore",
|
|
|
|
- width: 150,
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- title: "标准差",
|
|
|
|
- dataIndex: "stdev",
|
|
|
|
- width: 150,
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- title: "差异系数",
|
|
|
|
- dataIndex: "coefficient",
|
|
|
|
- width: 150,
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- title: "难度",
|
|
|
|
- dataIndex: "difficulty",
|
|
|
|
- width: 150,
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- title: "区分度",
|
|
|
|
- dataIndex: "discrimination",
|
|
|
|
- width: 150,
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- title: "零分人数",
|
|
|
|
- dataIndex: "zeroCount",
|
|
|
|
- width: 150,
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- title: "满分人数 ",
|
|
|
|
- dataIndex: "fullCount",
|
|
|
|
- width: 150,
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- title: "有效卷数",
|
|
|
|
- dataIndex: "effectiveCount",
|
|
|
|
- width: 150,
|
|
|
|
- },
|
|
|
|
-];
|
|
|
|
-
|
|
|
|
-function openModal() {
|
|
|
|
- EventBus.emit("SHOW_SETTING", "DESCRIBE06");
|
|
|
|
|
|
+function openModal07() {
|
|
|
|
+ EventBus.emit("SHOW_SETTING", "DESCRIBE07");
|
|
}
|
|
}
|
|
|
|
|
|
/** <handleImport> */
|
|
/** <handleImport> */
|
|
@@ -132,3 +192,11 @@ async function downloadTpl() {
|
|
downloadFileURL("/api/ess/sasQuestionGroup/template");
|
|
downloadFileURL("/api/ess/sasQuestionGroup/template");
|
|
}
|
|
}
|
|
</script>
|
|
</script>
|
|
|
|
+
|
|
|
|
+<style scoped>
|
|
|
|
+.section-title {
|
|
|
|
+ color: #212534;
|
|
|
|
+ font-size: 16px;
|
|
|
|
+ font-weight: 700;
|
|
|
|
+}
|
|
|
|
+</style>
|