zhangjie vor 2 Jahren
Ursprung
Commit
9c90f68e25

+ 12 - 0
src/features/allAnalysis/AllAnalysis2.vue

@@ -44,6 +44,7 @@
             <span>
               <!-- <a-button @click="openModal">说明</a-button> -->
               <a-button @click="goPaperAnalysis(record)">详情</a-button>
+              <a-button @click="toReport(record)">报告</a-button>
             </span>
           </template>
         </a-table>
@@ -281,4 +282,15 @@ async function tableChange(
 // function openModal() {
 //   EventBus.emit("SHOW_SETTING", "DESCRIBE010");
 // }
+
+async function toReport(record: SASPaper) {
+  await router.push({
+    name: "PaperReport",
+    params: {
+      viewType: "view",
+      projectId: projectId,
+      paperId: record.paperId,
+    },
+  });
+}
 </script>

+ 91 - 30
src/features/report/ReportCompare.vue

@@ -45,32 +45,6 @@
             <th>信度</th>
             <th>难度<br />系数</th>
           </tr>
-          <tr>
-            <td>1</td>
-            <td>1</td>
-            <td>1</td>
-            <td>1</td>
-            <td>1</td>
-            <td>1</td>
-            <td>1</td>
-            <td>1</td>
-            <td>1</td>
-            <td>1</td>
-            <td>1</td>
-          </tr>
-          <tr>
-            <td>1</td>
-            <td>1</td>
-            <td>1</td>
-            <td>1</td>
-            <td>1</td>
-            <td>1</td>
-            <td>1</td>
-            <td>1</td>
-            <td>1</td>
-            <td>1</td>
-            <td>1</td>
-          </tr>
           <tr v-for="item in summaryList" :key="item.id">
             <td>{{ item.courseName }}</td>
             <td>{{ item.courseCode }}</td>
@@ -88,18 +62,30 @@
       </div>
 
       <div class="compare-count report-part">
-        <h3 class="report-part-title">翻译硕士英语试卷特征数量对比分析</h3>
+        <h3 class="report-part-title">
+          {{ props.paper.courseName }}试卷特征数量对比分析
+        </h3>
         <!-- TODO: chart -->
       </div>
       <div class="compare-rate report-part">
         <h3 class="report-part-title">
-          翻译硕士英语科目成绩(总分)等距(10分)分组频数分布对比分析
+          {{
+            props.paper.courseName
+          }}科目成绩(总分)等距(10分)分组频数分布对比分析
         </h3>
         <p class="count-info">分数间隔:{{ scoreGap }}</p>
         <!-- TODO: chart -->
       </div>
       <div class="count-intro report-part result-part">
-        <p>{{ resultCont }}</p>
+        <p>
+          本科目较上个分析项目相比,最高分{{ evaluates.maxScore }},有效样本数{{
+            evaluates.totalCount
+          }},平均分{{ evaluates.avgScore }},标准差值{{
+            evaluates.stdev
+          }},差异系数{{ evaluates.coefficient }},信度值{{
+            evaluates.reliability1
+          }},试卷整体难度{{ evaluates.difficulty }}。
+        </p>
       </div>
     </div>
     <div class="report-pfoot"></div>
@@ -108,8 +94,83 @@
 
 <script setup lang="ts">
 import type { SASPaper } from "@/types";
+import { onMounted } from "vue";
+
+const props = defineProps<{
+  paper: SASPaper;
+}>();
 
 let summaryList = $shallowRef<SASPaper[]>([]);
 let scoreGap = $ref(10);
-let resultCont = $ref("");
+
+// 本科目较上个分析项目相比,最高分变高,有效样本数增多,平均分变高,标准差值增大,差异系数变大,信度值增加,试卷整体难度变小。
+const compareEvaluateModel = {
+  maxScore: ["变低", "持平", "变高"],
+  totalCount: ["降低", "没变", "增多"],
+  avgScore: ["变低", "持平", "变高"],
+  stdev: ["减小", "不变", "增大"],
+  coefficient: ["变小", "持平", "变大"],
+  reliability1: ["减小", "不变", "增大"],
+  difficulty: ["变小", "持平", "变大"],
+};
+
+let evaluates = $shallowRef({
+  maxScore: "",
+  totalCount: "",
+  avgScore: "",
+  stdev: "",
+  coefficient: "",
+  reliability1: "",
+  difficulty: "",
+});
+// type EvaluateType = keyof typeof evaluates;
+
+onMounted(() => {
+  updateEvaluate();
+});
+
+function updateEvaluate() {
+  // Object.keys(evaluates).forEach((k) => {
+  //   evaluates[k] = getEvaluate(
+  //     getPropertyValue(compareEvaluateModel, k),
+  //     getPropertyValue(summaryList[0], k) as number,
+  //     getPropertyValue(summaryList[1], k) as number
+  //   );
+  // });
+  evaluates.maxScore = getEvaluate(
+    compareEvaluateModel.maxScore,
+    summaryList[0].maxScore,
+    summaryList[1].maxScore
+  );
+  evaluates.totalCount = getEvaluate(
+    compareEvaluateModel.totalCount,
+    summaryList[0].totalCount,
+    summaryList[1].totalCount
+  );
+  evaluates.avgScore = getEvaluate(
+    compareEvaluateModel.avgScore,
+    summaryList[0].avgScore,
+    summaryList[1].avgScore
+  );
+  evaluates.stdev = getEvaluate(
+    compareEvaluateModel.stdev,
+    summaryList[0].stdev,
+    summaryList[1].stdev
+  );
+  evaluates.coefficient = getEvaluate(
+    compareEvaluateModel.coefficient,
+    summaryList[0].coefficient,
+    summaryList[1].coefficient
+  );
+  evaluates.difficulty = getEvaluate(
+    compareEvaluateModel.difficulty,
+    summaryList[0].difficulty,
+    summaryList[1].difficulty
+  );
+}
+
+function getEvaluate(model: string[], val1: number, val2: number) {
+  const ind = val1 === val2 ? 0 : val1 > val2 ? 1 : -1;
+  return model[ind + 1];
+}
 </script>

+ 7 - 11
src/features/report/ReportCover.vue

@@ -4,14 +4,14 @@
       <h1 class="cover-title">成绩分析研究报告</h1>
 
       <div class="cover-info">
-        <p>考试名称:{{ props.coverInfo.examName }}</p>
-        <p>学校:{{ props.coverInfo.schoolName }}</p>
-        <p>科目:{{ props.coverInfo.courseName }}</p>
+        <p>考试名称:{{ props.paper.projectName }}</p>
+        <p>学校:{{ props.paper.rootOrgName }}</p>
+        <p>科目:{{ props.paper.courseName }}</p>
       </div>
     </div>
   </div>
   <div class="report-page report-intro">
-    <div class="report-phead">{{ props.coverInfo.schoolName }}成绩分析报告</div>
+    <div class="report-phead">{{ props.paper.projectName }}成绩分析报告</div>
     <div class="report-body">
       <h2 class="intro-title">报告说明</h2>
       <p>
@@ -98,7 +98,7 @@
     <div class="report-pfoot"></div>
   </div>
   <div class="report-page report-noun">
-    <div class="report-phead">{{ props.coverInfo.schoolName }}成绩分析报告</div>
+    <div class="report-phead">{{ props.paper.projectName }}成绩分析报告</div>
     <div class="report-body">
       <h2 class="noun-title">相关名词解释</h2>
       <div class="noun-list">
@@ -151,13 +151,9 @@
 </template>
 
 <script setup lang="ts">
-interface ConverInfoType {
-  examName: string;
-  schoolName: string;
-  courseName: string;
-}
+import { SASPaper } from "@/types";
 
 const props = defineProps<{
-  coverInfo: ConverInfoType;
+  paper: SASPaper;
 }>();
 </script>

+ 178 - 19
src/features/report/ReportMain.vue

@@ -1,22 +1,28 @@
 <template>
   <div :class="['report', { 'is-print': viewType === 'print' }]">
-    <ReportCover :coverInfo="courseInfo" />
-    <ReportCompare />
-    <ReportSummary />
-    <ReportScore />
-    <ReportScoreGroup />
-    <ReportQuestion />
+    <ReportCover :paper="sasPaper" />
+    <ReportCompare :paper="sasPaper" />
+    <ReportSummary :paper="sasPaper" />
+    <ReportScore :course="sasCourse" :scoreGap="scoreGap" />
+    <ReportScoreGroup :course="sasCourse" :scoreGap="scoreGap" />
+    <ReportQuestion :questions="paperQuestions" />
     <ReportDifficulty />
     <ReportDiscrimination />
     <ReportQuestionGroup
-      :questions="questions"
-      :startScore="courseInfo.startScore"
-      :totalScore="courseInfo.totalScore"
+      :questions="paperQuestions"
+      :startScore="sasPaper.startScore"
+      :totalScore="sasPaper.totalScore"
     />
   </div>
 </template>
 
 <script setup lang="ts">
+import {
+  getPaperQuestionGroups,
+  getPaperQuestions,
+  getSasPaper,
+} from "@/api/paperAnalysisPage";
+import { getSasCourseList } from "@/api/allAnalysisPage";
 import ReportCover from "./ReportCover.vue";
 import ReportCompare from "./ReportCompare.vue";
 import ReportSummary from "./ReportSummary.vue";
@@ -26,19 +32,172 @@ import ReportQuestion from "./ReportQuestion.vue";
 import ReportQuestionGroup from "./ReportQuestionGroup.vue";
 import ReportDifficulty from "./ReportDifficulty.vue";
 import ReportDiscrimination from "./ReportDiscrimination.vue";
-import { SASQuestion } from "@/types";
+import { RANGE_POINT_TYPE } from "@/constants/constants";
+
+import {
+  // Paper,
+  SASPaper,
+  SASQuestion,
+  SasCourse,
+  RangeConfig,
+} from "@/types";
 import { useRoute } from "vue-router";
+import { computed, onMounted } from "vue";
+
+let courseId = $ref(undefined as unknown as number);
+let sasPaper = $ref<SASPaper>({} as SASPaper);
+let sasCourse = $ref<SasCourse>({} as SasCourse);
+let scoreGap = $ref(0);
 
 const route = useRoute();
-let viewType = route.params.viewType;
+const projectId = +route.params.projectId;
+const paperId = +route.params.paperId;
+const compareProjectId = +route.params.compareProjectId;
+const viewType = route.params.viewType;
+
+let paperQuestions = $ref<SASQuestion[]>([]);
+
+const hasCompareProject = computed(() => !!compareProjectId);
+console.log(hasCompareProject);
+
+onMounted(async () => {
+  await fetchData();
+});
+
+async function fetchData() {
+  // await fetchPaper();
+  await fetchPaperQuestions();
+  await fetchSasPaper();
+  await fetchSasCourse();
+}
+
+async function fetchPaperQuestions() {
+  const res = await getPaperQuestions(paperId);
+  paperQuestions = res.data.map((q) => {
+    q.difficulityLevel = JSON.parse(
+      <string>(<unknown>q.difficulityLevel) || "[]"
+    );
+    q.difficulityGroupLevel = JSON.parse(
+      <string>(<unknown>q.difficulityGroupLevel) || "[]"
+    );
+    q.avgScore = Math.round(q.avgScore * 100) / 100;
+    q.stdev = Math.round(q.stdev * 100) / 100;
+    q.coefficient = Math.round(q.coefficient * 100) / 100;
+    q.difficulty = Math.round(q.difficulty * 100) / 100;
+    q.discrimination = Math.round(q.discrimination * 100) / 100;
+    return q;
+  });
+}
+
+async function fetchSasPaper() {
+  const res = await getSasPaper(paperId);
+  res.data.difficulityLevel = JSON.parse(
+    <string>(<unknown>res.data.difficulityLevel) || "[]"
+  );
+  res.data.discriminationLevel = JSON.parse(
+    <string>(<unknown>res.data.discriminationLevel) || "[]"
+  );
+  sasPaper = res.data;
+}
+
+async function fetchSasCourse() {
+  const res = await getSasCourseList({
+    projectId,
+    courseId,
+  });
+
+  sasCourse = res.data[0];
+
+  sasCourse.scoreRange = Object.values(
+    // eslint-disable-next-line
+    JSON.parse(<string>(<unknown>sasCourse.scoreRange) || "{}")
+  );
+  sasCourse.rangeConfig = JSON.parse(
+    <string>(<unknown>sasCourse.rangeConfig) || "0"
+  ) || [
+    {
+      type: "ZERO",
+      baseScore: 0,
+      adjustScore: 0,
+    },
+  ];
+  let acc = 0;
+  if (Array.isArray(sasCourse.scoreRange))
+    sasCourse.scoreRangeAcc = sasCourse.scoreRange.map((_v, i, a) => {
+      acc += a[i];
+      return acc;
+    });
+  sasCourse.scoreRangeTotal = acc;
+  let scoreGap = 10;
+
+  sasCourse.segements = [];
+  const validSeg = Math.round(sasCourse.totalScore / scoreGap);
+  for (let score = 0; score < validSeg; score++) {
+    const row = [];
+    row[0] = score * scoreGap;
+    let nextScore = score + 1 > validSeg ? sasCourse.totalScore : score + 1;
+    row[1] = sasCourse.scoreRange
+      .slice(row[0], nextScore * scoreGap)
+      .reduce((p, c) => p + c, 0);
+    row[2] = row[1] / sasCourse.scoreRangeAcc[sasCourse.totalScore];
+    const endGap =
+      nextScore * scoreGap - 1 >= sasCourse.totalScore
+        ? sasCourse.totalScore
+        : nextScore * scoreGap - 1;
+    row[3] = sasCourse.scoreRangeAcc[endGap];
+    row[4] = row[3] / sasCourse.scoreRangeAcc[sasCourse.totalScore];
+    sasCourse.segements.push(row);
+  }
+  if (validSeg * scoreGap === sasCourse.totalScore) {
+    sasCourse.segements.push([
+      sasCourse.totalScore,
+      sasCourse.scoreRange[sasCourse.totalScore],
+      sasCourse.scoreRange[sasCourse.totalScore] /
+        sasCourse.scoreRangeAcc[sasCourse.totalScore],
+      sasCourse.scoreRangeAcc[sasCourse.totalScore],
+      1,
+    ]);
+  }
+
+  sasCourse.rangeSegements = [];
+  for (let i = 0; i < sasCourse.rangeConfig.length; i++) {
+    const range = sasCourse.rangeConfig[i]!;
+    const nextRange =
+      i === sasCourse.rangeConfig.length - 1
+        ? { baseScore: sasCourse.totalScore, adjustScore: 0 }
+        : sasCourse.rangeConfig[i + 1];
+    const row = [];
+    row[0] = scoreTitle(range);
+    row[1] =
+      sasCourse.scoreRange
+        .slice(
+          range.baseScore + range.adjustScore,
+          nextRange.baseScore + nextRange.adjustScore
+        )
+        .reduce((p, c) => p + c, 0) || 0;
+    row[2] = row[1] / sasCourse.scoreRangeTotal;
+    row[3] =
+      sasCourse.scoreRangeAcc[
+        nextRange.baseScore + nextRange.adjustScore - 1
+      ] || 0;
+    if (
+      nextRange.baseScore + nextRange.adjustScore >=
+      sasCourse.scoreRangeAcc.length
+    ) {
+      row[3] = sasCourse.scoreRangeAcc[sasCourse.scoreRangeAcc.length - 1];
+    }
+    row[4] = row[3] / sasCourse.scoreRangeTotal;
+
+    sasCourse.rangeSegements.push(row);
+  }
 
-let courseInfo = {
-  examName: "",
-  schoolName: "",
-  courseName: "",
-  startScore: 0,
-  totalScore: 150,
-};
+  function scoreTitle(rangeConfig: RangeConfig) {
+    if (!rangeConfig) return false;
+    if (rangeConfig.type === "ZERO") return "0-";
 
-let questions: SASQuestion[] = $ref([]);
+    return `${rangeConfig.baseScore + rangeConfig.adjustScore}(${
+      RANGE_POINT_TYPE[rangeConfig.type]
+    }${rangeConfig.adjustScore > 0 ? "+" : ""}${rangeConfig.adjustScore})-`;
+  }
+}
 </script>

+ 20 - 40
src/features/report/ReportQuestion.vue

@@ -1,5 +1,9 @@
 <template>
-  <div class="report-page report-question">
+  <div
+    v-for="(questionList, qindex) in questionGroup"
+    :key="qindex"
+    class="report-page report-question"
+  >
     <div class="report-body">
       <div class="report-body-head">
         <h2>五、试卷题目特征分析</h2>
@@ -38,7 +42,7 @@
             <th>零分<br />人数</th>
             <th>满分<br />人数</th>
           </tr>
-          <tr v-for="item in questions" :key="item.id">
+          <tr v-for="item in questionList" :key="item.id">
             <td>{{ item.mainNumber }}</td>
             <td>{{ item.subNumber }}</td>
             <td>{{ item.difficulty }}</td>
@@ -61,45 +65,21 @@
 </template>
 
 <script setup lang="ts">
-// import { SASQuestion } from "@/types";
+import { SASQuestion } from "@/types";
+import { onMounted } from "vue";
 
-// let questions = $shallowRef<SASQuestion[]>([]);
+const props = defineProps<{ questions: SASQuestion[] }>();
 
-interface QuestionType {
-  id: number;
-  mainNumber: number;
-  subNumber: number;
-  difficulty: number;
-  totalScore: number;
-  maxScore: number;
-  minScore: number;
-  avgScore: number;
-  stdev: number;
-  effectiveCount: number;
-  coefficient: number;
-  discrimination: number;
-  zeroCount: number;
-  fullCount: number;
-}
+let questionGroup = $shallowRef<SASQuestion[][]>([]);
 
-let questions = $shallowRef<QuestionType[]>([]);
-
-for (let i = 0; i < 37; i++) {
-  questions.push({
-    id: i,
-    mainNumber: 1,
-    subNumber: 2,
-    difficulty: 1,
-    totalScore: 1,
-    maxScore: 1,
-    minScore: 1,
-    avgScore: 1,
-    stdev: 1,
-    effectiveCount: 1,
-    coefficient: 1,
-    discrimination: 1,
-    zeroCount: 1,
-    fullCount: 1,
-  });
-}
+onMounted(() => {
+  const maxRowCount = 37;
+  const groupCount = Math.ceil(props.questions.length / maxRowCount);
+  questionGroup = [];
+  for (let i = 0; i < groupCount; i++) {
+    questionGroup.push(
+      props.questions.slice(i * maxRowCount, (i + 1) * maxRowCount)
+    );
+  }
+});
 </script>

+ 19 - 26
src/features/report/ReportScore.vue

@@ -22,12 +22,20 @@
             <th>累计频数</th>
             <th>累计频率(%)</th>
           </tr>
-          <tr v-for="item in scoreList" :key="item.scoreRange">
-            <td>{{ item.scoreRange }}</td>
-            <td>{{ item.frequency }}</td>
-            <td>{{ item.rate }}%</td>
-            <td>{{ item.accumulativeFrequency }}</td>
-            <td>{{ item.accumulativeRate }}%</td>
+          <tr
+            v-for="(seg, index2) in props.course.segements"
+            :key="index2 + scoreGap * 100000"
+          >
+            <td>
+              <span v-if="index2 < course.segements.length - 1"
+                >{{ scoreGap * index2 }}-{{ scoreGap * (index2 + 1) }}</span
+              >
+              <span v-else>{{ seg[0] }}</span>
+            </td>
+            <td>{{ seg[1] }}</td>
+            <td>{{ seg[2] }}%</td>
+            <td>{{ seg[3] }}</td>
+            <td>{{ seg[4] }}%</td>
           </tr>
         </table>
       </div>
@@ -49,25 +57,10 @@
 </template>
 
 <script setup lang="ts">
-interface ScoreItemType {
-  scoreRange: string;
-  frequency: number;
-  rate: number;
-  accumulativeFrequency: number;
-  accumulativeRate: number;
-}
+import { SasCourse } from "@/types";
 
-let scoreList = $shallowRef<ScoreItemType[]>([]);
-
-for (let i = 0; i < 15; i++) {
-  scoreList.push({
-    scoreRange: i * 10 + "-" + (i + 1) * 10,
-    frequency: 15,
-    rate: 45,
-    accumulativeFrequency: 45,
-    accumulativeRate: 45,
-  });
-}
-
-let scoreGap = $ref(10);
+const props = defineProps<{
+  course: SasCourse;
+  scoreGap: number;
+}>();
 </script>

+ 14 - 14
src/features/report/ReportScoreGroup.vue

@@ -22,12 +22,15 @@
             <th>累计频数</th>
             <th>累计频率(%)</th>
           </tr>
-          <tr v-for="item in scoreList" :key="item.scoreRange">
-            <td>{{ item.scoreRange }}</td>
-            <td>{{ item.frequency }}</td>
-            <td>{{ item.rate }}%</td>
-            <td>{{ item.accumulativeFrequency }}</td>
-            <td>{{ item.accumulativeRate }}%</td>
+          <tr
+            v-for="(seg, index3) in props.course.rangeSegements"
+            :key="index3"
+          >
+            <td>{{ seg[0] }}</td>
+            <td>{{ seg[1] }}</td>
+            <td>{{ seg[2] }}%</td>
+            <td>{{ seg[3] }}</td>
+            <td>{{ seg[4] }}%</td>
           </tr>
         </table>
       </div>
@@ -49,13 +52,10 @@
 </template>
 
 <script setup lang="ts">
-interface ScoreItemType {
-  scoreRange: string;
-  frequency: number;
-  rate: number;
-  accumulativeFrequency: number;
-  accumulativeRate: number;
-}
+import { SasCourse } from "@/types";
 
-let scoreList = $shallowRef<ScoreItemType[]>([]);
+const props = defineProps<{
+  course: SasCourse;
+  scoreGap: number;
+}>();
 </script>

+ 82 - 27
src/features/report/ReportSummary.vue

@@ -6,37 +6,47 @@
         <p class="report-name"></p>
       </div>
 
-      <div v-if="paperInfo" class="report-part summary-part">
+      <div class="report-part summary-part">
         <div class="summary-title">
-          <div>{{ paperInfo.projectName }}自命题成绩分析</div>
-          <div>({{ paperInfo.courseName }}-{{ paperInfo.courseCode }})</div>
+          <div>{{ props.paper.projectName }}自命题成绩分析</div>
+          <div>({{ props.paper.courseName }}-{{ props.paper.courseCode }})</div>
         </div>
         <div class="summary-body">
           <div class="summary-item">
             <div class="summary-item-body">
-              <p>满分:{{ paperInfo.totalScore }}</p>
-              <p>最高分:{{ paperInfo.maxScore }}</p>
-              <p>有效样本数:{{ paperInfo.totalCount }}</p>
+              <p>满分:{{ props.paper.totalScore }}</p>
+              <p>最高分:{{ props.paper.maxScore }}</p>
+              <p>有效样本数:{{ props.paper.totalCount }}</p>
             </div>
           </div>
           <div class="summary-item">
             <div class="summary-item-body">
-              <p>平均分:{{ paperInfo.avgScore }}</p>
-              <p>标准差:{{ paperInfo.stdev }}</p>
-              <p>差异系数:{{ paperInfo.coefficient }}</p>
+              <p>平均分:{{ props.paper.avgScore }}</p>
+              <p>标准差:{{ props.paper.stdev }}</p>
+              <p>差异系数:{{ props.paper.coefficient }}</p>
             </div>
           </div>
           <div class="summary-item">
             <div class="summary-item-body">
-              <p>信度:{{ paperInfo.reliability1 }}</p>
-              <p>难度系数:{{ paperInfo.difficulty }}</p>
+              <p>信度:{{ props.paper.reliability1 }}</p>
+              <p>难度系数:{{ props.paper.difficulty }}</p>
             </div>
           </div>
         </div>
       </div>
 
       <div class="report-part result-part">
-        <p>{{ resultCont }}</p>
+        <p>
+          本科目最高分{{ props.paper.maxScore }},有效样本数{{
+            props.paper.totalCount
+          }},平均分{{ props.paper.avgScore }},标准差值{{
+            props.paper.stdev
+          }},差异系数{{ props.paper.coefficient }},信度{{
+            props.paper.reliability1
+          }},{{ reliabilityEvaluate }},难度系数{{
+            props.paper.difficulty
+          }},{{ difficultyEvaluate }}。
+        </p>
       </div>
 
       <div class="report-part summary-intro">
@@ -72,22 +82,67 @@
 </template>
 
 <script setup lang="ts">
-// import type { SASPaper } from "@/types";
+import { SASPaper } from "@/types";
+import { onMounted } from "vue";
 
-// let paperInfo = $shallowRef<SASPaper | null>(null);
-let paperInfo = $ref({
-  projectName: "2021年武汉xx大学",
-  courseCode: 111,
-  courseName: "数学",
-  totalCount: 150,
-  totalScore: 150,
-  maxScore: 145,
-  avgScore: 100,
-  stdev: 1,
-  coefficient: 45,
-  reliability1: 0.54,
-  difficulty: 2,
+const props = defineProps<{
+  paper: SASPaper;
+}>();
+
+interface EvaluateItemType {
+  range: number[];
+  value: string;
+}
+
+const reliabilityEvaluateModel = [
+  {
+    range: [0.7, 1],
+    value: "适宜",
+  },
+  {
+    range: [0.6, 0.7],
+    value: "可以接受",
+  },
+  {
+    range: [0, 0.6],
+    value: "过低",
+  },
+];
+const difficultyEvaluateModel = [
+  {
+    range: [0.6, 1],
+    value: "试题较简单或评分较松",
+  },
+  {
+    range: [0.5, 0.6],
+    value: "试题难度适中或评分松紧适宜",
+  },
+  {
+    range: [0, 0.5],
+    value: "试题较难或评分较紧",
+  },
+];
+
+let reliabilityEvaluate = $ref("");
+let difficultyEvaluate = $ref("");
+
+onMounted(() => {
+  reliabilityEvaluate = getEvaluate(
+    reliabilityEvaluateModel,
+    props.paper.reliability1
+  );
+  difficultyEvaluate = getEvaluate(
+    difficultyEvaluateModel,
+    props.paper.difficulty
+  );
 });
 
-let resultCont = $ref("");
+function getEvaluate(model: EvaluateItemType[], val: number): string {
+  const m = model.find((item, index) => {
+    if (index) return item.range[0] <= val && item.range[1] > val;
+    return item.range[0] <= val && item.range[1] >= val;
+  });
+
+  return m ? m.value : "";
+}
 </script>

+ 2 - 1
src/router/index.ts

@@ -107,7 +107,8 @@ const routes = [
     component: Layout,
   },
   {
-    path:'/report/:viewType',
+    path:'/report/:viewType/:projectId/:paperId/:compareProjectId?',
+    name:'PaperReport',
     component:ReportMain
   },
   {

+ 1 - 0
src/types/index.ts

@@ -140,6 +140,7 @@ export interface SASPaper {
   paperId: number;
   paperName: string;
   paperType: string;
+  rootOrgName?: string;
   projectName?: string;
   projectId: number;
   questionCount: number;

+ 2 - 2
vite.config.ts

@@ -4,8 +4,8 @@ import ViteComponents from "unplugin-vue-components/vite";
 import { AntDesignVueResolver } from "unplugin-vue-components/resolvers";
 
 // const SERVER_URL = "http://192.168.10.108:7180";
-// const SERVER_URL = "http://192.168.10.138:13800";
-const SERVER_URL = "http://192.168.10.39:7180";
+const SERVER_URL = "http://192.168.10.138:13800";
+// const SERVER_URL = "http://192.168.10.39:7180";
 // const SERVER_URL = "http://192.168.10.54:8001";
 const path = require("path");