Ver código fonte

报告完成

zhangjie 2 anos atrás
pai
commit
23c8e729d3

+ 243 - 35
src/features/report/ReportCompare.vue

@@ -9,14 +9,12 @@
       <div class="compare-summary report-part">
         <div class="summary-tabs">
           <div
-            v-for="item in summaryList"
+            v-for="item in props.comparePapers"
             :key="item.id"
             class="summary-tabs-item"
           >
             {{ item.projectName }}
           </div>
-          <div class="summary-tabs-item">12121</div>
-          <div class="summary-tabs-item">12121</div>
         </div>
         <table class="table summary-table">
           <colgroup>
@@ -45,7 +43,7 @@
             <th>信度</th>
             <th>难度<br />系数</th>
           </tr>
-          <tr v-for="item in summaryList" :key="item.id">
+          <tr v-for="item in props.comparePapers" :key="item.id">
             <td>{{ item.courseName }}</td>
             <td>{{ item.courseCode }}</td>
             <td>{{ item.totalScore }}</td>
@@ -61,20 +59,27 @@
         </table>
       </div>
 
-      <div class="compare-count report-part">
+      <div class="compare-count report-part chart-part">
         <h3 class="report-part-title">
-          {{ props.paper.courseName }}试卷特征数量对比分析
+          {{ props.comparePapers[0].courseName }}试卷特征数量对比分析
         </h3>
-        <!-- TODO: chart -->
+        <v-chart
+          :initOptions="{ renderer: 'svg' }"
+          :option="countChartOption()"
+          :autoresize="true"
+        />
       </div>
-      <div class="compare-rate report-part">
+      <div class="compare-rate report-part chart-part">
         <h3 class="report-part-title">
-          {{
-            props.paper.courseName
-          }}科目成绩(总分)等距(10分)分组频数分布对比分析
+          {{ props.comparePapers[0].courseName }}科目成绩(总分)等距({{
+            scoreGap
+          }}分)分组频数分布对比分析
         </h3>
-        <p class="count-info">分数间隔:{{ scoreGap }}</p>
-        <!-- TODO: chart -->
+        <v-chart
+          :initOptions="{ renderer: 'svg' }"
+          :option="scoreChartOption()"
+          :autoresize="true"
+        />
       </div>
       <div class="count-intro report-part result-part">
         <p>
@@ -93,16 +98,16 @@
 </template>
 
 <script setup lang="ts">
-import type { SASPaper } from "@/types";
-import { onMounted } from "vue";
+import type { SASPaper, SasCourse } from "@/types";
+import { onMounted, reactive } from "vue";
+import { EChartsOption } from "echarts";
 
 const props = defineProps<{
-  paper: SASPaper;
+  comparePapers: SASPaper[];
+  compareCourses: SasCourse[];
+  scoreGap: number;
 }>();
 
-let summaryList = $shallowRef<SASPaper[]>([]);
-let scoreGap = $ref(10);
-
 // 本科目较上个分析项目相比,最高分变高,有效样本数增多,平均分变高,标准差值增大,差异系数变大,信度值增加,试卷整体难度变小。
 const compareEvaluateModel = {
   maxScore: ["变低", "持平", "变高"],
@@ -114,7 +119,7 @@ const compareEvaluateModel = {
   difficulty: ["变小", "持平", "变大"],
 };
 
-let evaluates = $shallowRef({
+let evaluates = reactive({
   maxScore: "",
   totalCount: "",
   avgScore: "",
@@ -132,40 +137,45 @@ onMounted(() => {
 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
+  //     compareEvaluateModel[k],
+  //     props.comparePapers[0][k],
+  //     props.comparePapers[1][k]
   //   );
   // });
   evaluates.maxScore = getEvaluate(
     compareEvaluateModel.maxScore,
-    summaryList[0].maxScore,
-    summaryList[1].maxScore
+    props.comparePapers[0].maxScore,
+    props.comparePapers[1].maxScore
   );
   evaluates.totalCount = getEvaluate(
     compareEvaluateModel.totalCount,
-    summaryList[0].totalCount,
-    summaryList[1].totalCount
+    props.comparePapers[0].totalCount,
+    props.comparePapers[1].totalCount
   );
   evaluates.avgScore = getEvaluate(
     compareEvaluateModel.avgScore,
-    summaryList[0].avgScore,
-    summaryList[1].avgScore
+    props.comparePapers[0].avgScore,
+    props.comparePapers[1].avgScore
   );
   evaluates.stdev = getEvaluate(
     compareEvaluateModel.stdev,
-    summaryList[0].stdev,
-    summaryList[1].stdev
+    props.comparePapers[0].stdev,
+    props.comparePapers[1].stdev
   );
   evaluates.coefficient = getEvaluate(
     compareEvaluateModel.coefficient,
-    summaryList[0].coefficient,
-    summaryList[1].coefficient
+    props.comparePapers[0].coefficient,
+    props.comparePapers[1].coefficient
+  );
+  evaluates.reliability1 = getEvaluate(
+    compareEvaluateModel.reliability1,
+    props.comparePapers[0].reliability1,
+    props.comparePapers[1].reliability1
   );
   evaluates.difficulty = getEvaluate(
     compareEvaluateModel.difficulty,
-    summaryList[0].difficulty,
-    summaryList[1].difficulty
+    props.comparePapers[0].difficulty,
+    props.comparePapers[1].difficulty
   );
 }
 
@@ -173,4 +183,202 @@ function getEvaluate(model: string[], val1: number, val2: number) {
   const ind = val1 === val2 ? 0 : val1 > val2 ? 1 : -1;
   return model[ind + 1];
 }
+
+function countChartOption() {
+  const countFields = [
+    {
+      name: "满分",
+      field: "totalScore",
+    },
+    {
+      name: "最高分",
+      field: "maxScore",
+    },
+    {
+      name: "最低分",
+      field: "minScore",
+    },
+    {
+      name: "全距",
+      field: "allRange",
+    },
+    {
+      name: "平均分",
+      field: "avgScore",
+    },
+    {
+      name: "标准差",
+      field: "stdev",
+    },
+    {
+      name: "差异系数",
+      field: "coefficient",
+    },
+    {
+      name: "信度",
+      field: "reliability1",
+    },
+    {
+      name: "难度",
+      field: "difficulty",
+    },
+  ];
+  return {
+    legend: {
+      show: true,
+      right: 0,
+      top: 25,
+      itemWidth: 8,
+      itemHeight: 8,
+      textStyle: {
+        color: "#8F9DB3",
+        fontSize: 14,
+      },
+    },
+    grid: {
+      show: true,
+      left: 35,
+      bottom: 25,
+      right: 5,
+      top: 60,
+      borderColor: "#A3B4CC",
+    },
+    xAxis: {
+      type: "category",
+      data: countFields.map((v) => v.name),
+      axisLine: {
+        show: false,
+      },
+      axisTick: {
+        show: false,
+      },
+      axisLabel: {
+        fontSize: 13,
+        fontWeight: 400,
+        color: "#172C4D",
+      },
+    },
+    yAxis: {
+      type: "value",
+      axisLine: {
+        show: false,
+      },
+      splitLine: {
+        show: true,
+        lineStyle: {
+          color: "#E1E5EB",
+        },
+      },
+      axisLabel: {
+        fontSize: 12,
+        color: "#6B7D99",
+      },
+    },
+    series: [
+      {
+        // eslint-disable-next-line @typescript-eslint/no-unsafe-return
+        data: countFields.map((v) => props.comparePapers[0][v.field]),
+        type: "bar",
+        itemStyle: {
+          color: "#0091FF",
+        },
+        barWidth: 20,
+        name: props.comparePapers[0].projectName,
+      },
+      {
+        // eslint-disable-next-line @typescript-eslint/no-unsafe-return
+        data: countFields.map((v) => props.comparePapers[1][v.field]),
+        type: "bar",
+        itemStyle: {
+          color: "#44D7B6",
+        },
+        barWidth: 20,
+        name: props.comparePapers[1].projectName,
+      },
+    ],
+  } as EChartsOption;
+}
+
+function scoreChartOption() {
+  return {
+    legend: {
+      show: true,
+      right: 0,
+      top: 25,
+      itemWidth: 12,
+      itemHeight: 8,
+      textStyle: {
+        color: "#8F9DB3",
+        fontSize: 14,
+      },
+    },
+    grid: {
+      show: true,
+      left: 35,
+      bottom: 20,
+      right: 5,
+      top: 60,
+      borderColor: "#A3B4CC",
+    },
+    xAxis: {
+      type: "category",
+      data: props.compareCourses[0].segements.map((v) => v[0]),
+      axisLine: {
+        show: false,
+      },
+      axisTick: {
+        show: false,
+      },
+      axisLabel: {
+        fontSize: 13,
+        fontWeight: 400,
+        color: "#172C4D",
+      },
+    },
+    yAxis: {
+      type: "value",
+      axisLine: {
+        show: false,
+      },
+      splitLine: {
+        show: true,
+        lineStyle: {
+          color: "#E1E5EB",
+        },
+      },
+      axisLabel: {
+        fontSize: 12,
+        color: "#6B7D99",
+      },
+    },
+    series: [
+      {
+        data: props.compareCourses[0].segements.map((v) => v[1]),
+        type: "line",
+        symbolSize: 6,
+        lineStyle: {
+          color: "rgba(0, 145, 255, 1)",
+          width: 3,
+        },
+        areaStyle: {
+          color: "rgba(0, 145, 255, 0.1)",
+        },
+        name: props.compareCourses[0].projectName,
+      },
+      {
+        data: props.compareCourses[1].segements.map((v) => v[1]),
+        type: "line",
+        symbolSize: 6,
+        lineStyle: {
+          color: "rgba(68, 215, 182, 1)",
+          width: 3,
+        },
+        areaStyle: {
+          color: "rgba(68, 215, 182, 0.1)",
+        },
+        name: props.compareCourses[1].projectName,
+      },
+    ],
+  } as EChartsOption;
+}
 </script>

+ 1 - 1
src/features/report/ReportDifficulty.vue

@@ -40,7 +40,7 @@ function chartOption() {
     grid: {
       show: true,
       left: 35,
-      bottom: 20,
+      bottom: 25,
       right: 5,
       top: 45,
       borderColor: "#A3B4CC",

+ 1 - 1
src/features/report/ReportDiscrimination.vue

@@ -40,7 +40,7 @@ function chartOption() {
     grid: {
       show: true,
       left: 35,
-      bottom: 20,
+      bottom: 25,
       right: 5,
       top: 45,
       borderColor: "#A3B4CC",

+ 142 - 64
src/features/report/ReportMain.vue

@@ -1,18 +1,25 @@
 <template>
   <div :class="['report', { 'is-print': viewType === 'print' }]">
     <ReportCover :paper="sasPaper" :hasCompareProject="hasCompareProject" />
-    <ReportCompare v-if="hasCompareProject" :paper="sasPaper" />
+    <ReportCompare
+      v-if="hasCompareProject && comparePapers.length && compareCourses.length"
+      :scoreGap="scoreGap"
+      :comparePapers="comparePapers"
+      :compareCourses="compareCourses"
+    />
     <ReportSummary
-      v-if="sasPaper"
+      v-if="sasPaper.id"
       :paper="sasPaper"
       :partNo="partNos.summary"
     />
     <ReportScore
+      v-if="sasCourse.id"
       :course="sasCourse"
       :scoreGap="scoreGap"
       :partNo="partNos.score"
     />
     <ReportScoreGroup
+      v-if="sasCourse.id"
       :course="sasCourse"
       :scoreGap="scoreGap"
       :partNo="partNos.scoreGroup"
@@ -33,7 +40,7 @@
       :partNo="partNos.discrimination"
     />
     <ReportQuestionGroup
-      v-if="sasPaper && paperQuestions.length"
+      v-if="sasPaper.id && paperQuestions.length"
       :questions="paperQuestions"
       :paper="sasPaper"
       :partNo="partNos.questionGroup"
@@ -47,6 +54,10 @@ import {
   getPaperQuestions,
   getSasPaper,
 } from "@/api/paperAnalysisPage";
+import {
+  getPaperCompareList,
+  getPaperCompareScoreList,
+} from "@/api/projectCompareDetailPage";
 import { getSasCourseList } from "@/api/allAnalysisPage";
 import ReportCover from "./ReportCover.vue";
 import ReportCompare from "./ReportCompare.vue";
@@ -61,7 +72,7 @@ import { RANGE_POINT_TYPE } from "@/constants/constants";
 
 import { SASPaper, SASQuestion, SasCourse, RangeConfig } from "@/types";
 import { useRoute } from "vue-router";
-import { computed, onMounted } from "vue";
+import { computed, onMounted, nextTick, reactive } from "vue";
 
 let courseId = $ref(undefined as unknown as number);
 let sasPaper = $ref<SASPaper>({} as SASPaper);
@@ -74,8 +85,11 @@ const paperId = +route.params.paperId;
 const compareProjectId = +route.params.compareProjectId;
 const viewType = route.params.viewType;
 
+let comparePapers = $ref<SASPaper[]>([]);
+let compareCourses = $ref<SasCourse[]>([]);
+
 let paperQuestions = $ref<SASQuestion[]>([]);
-let partNos = $shallowRef({
+let partNos = reactive({
   summary: "二",
   score: "三",
   scoreGroup: "四",
@@ -90,19 +104,38 @@ const hasCompareProject = computed(() => !!compareProjectId);
 onMounted(async () => {
   await fetchData();
 
-  if (!hasCompareProject.value) {
-    partNos = {
-      summary: "一",
-      score: "二",
-      scoreGroup: "三",
-      question: "四",
-      difficulty: "五",
-      discrimination: "六",
-      questionGroup: "七",
-    };
-  }
+  await nextTick();
+
+  commonInfoUpdate();
+  publishReady();
 });
 
+function commonInfoUpdate() {
+  document.querySelectorAll(".report-page").forEach((dom, index) => {
+    if (!index) return;
+    let page = index + 1;
+    let pageStr = index < 9 ? "0" + page : page + "";
+    const footDom = dom.querySelector(".report-pfoot");
+    if (footDom) {
+      footDom.innerHTML = `PAGE ${pageStr}`;
+    }
+    const nameDom = dom.querySelector(".report-name");
+    if (nameDom) {
+      nameDom.innerHTML = `${sasPaper.projectName}成绩分析报告`;
+    }
+  });
+}
+
+function publishReady() {
+  const eventEmitInterval = setInterval(function () {
+    document.body.dispatchEvent(new Event("view-ready"));
+  }, 25);
+
+  document.body.addEventListener("view-ready-acknowledged", function () {
+    clearInterval(eventEmitInterval);
+  });
+}
+
 function numberPrecision(num: number) {
   return Math.round(num * 100) / 100;
 }
@@ -112,6 +145,21 @@ async function fetchData() {
   await fetchSasPaper();
   await fetchPaperQuestions();
   await fetchSasCourse();
+
+  if (hasCompareProject.value) {
+    await fetchComparePaperData();
+    await fetchCompareCourseData();
+  } else {
+    partNos = {
+      summary: "一",
+      score: "二",
+      scoreGroup: "三",
+      question: "四",
+      difficulty: "五",
+      discrimination: "六",
+      questionGroup: "七",
+    };
+  }
 }
 
 async function fetchPaper() {
@@ -161,14 +209,52 @@ async function fetchSasCourse() {
     courseId,
   });
 
-  sasCourse = res.data[0];
+  sasCourse = parseSasCourse(res.data[0]);
+}
+
+function scoreTitle(rangeConfig: RangeConfig) {
+  if (!rangeConfig) return false;
+  if (rangeConfig.type === "ZERO") return "0-";
 
-  sasCourse.scoreRange = Object.values(
+  return `${rangeConfig.baseScore + rangeConfig.adjustScore}(${
+    RANGE_POINT_TYPE[rangeConfig.type]
+  }${rangeConfig.adjustScore > 0 ? "+" : ""}${rangeConfig.adjustScore})-`;
+}
+
+async function fetchComparePaperData() {
+  const res = await getPaperCompareList({
+    projectIds: [compareProjectId],
+    contrastProjectId: projectId,
+    courseCode: sasPaper.courseCode,
+  });
+  comparePapers = res.data.map((v) => {
+    v.avgScore = numberPrecision(v.avgScore);
+    v.stdev = numberPrecision(v.stdev);
+    v.coefficient = numberPrecision(v.coefficient);
+    v.difficulty = numberPrecision(v.difficulty);
+    v.reliability1 = numberPrecision(v.reliability1);
+    return v;
+  });
+}
+
+async function fetchCompareCourseData() {
+  const res = await getPaperCompareScoreList({
+    projectIds: [compareProjectId],
+    contrastProjectId: projectId,
+    courseCode: sasPaper.courseCode,
+  });
+  compareCourses = res.data.map((v) => {
+    return parseSasCourse(v);
+  });
+}
+
+function parseSasCourse(course: SasCourse) {
+  course.scoreRange = Object.values(
     // eslint-disable-next-line
-    JSON.parse(<string>(<unknown>sasCourse.scoreRange) || "{}")
+    JSON.parse(<string>(<unknown>course.scoreRange) || "{}")
   );
-  sasCourse.rangeConfig = JSON.parse(
-    <string>(<unknown>sasCourse.rangeConfig) || "0"
+  course.rangeConfig = JSON.parse(
+    <string>(<unknown>course.rangeConfig) || "0"
   ) || [
     {
       type: "ZERO",
@@ -177,86 +263,78 @@ async function fetchSasCourse() {
     },
   ];
   let acc = 0;
-  if (Array.isArray(sasCourse.scoreRange))
-    sasCourse.scoreRangeAcc = sasCourse.scoreRange.map((_v, i, a) => {
+  if (Array.isArray(course.scoreRange))
+    course.scoreRangeAcc = course.scoreRange.map((_v, i, a) => {
       acc += a[i];
       return acc;
     });
-  sasCourse.scoreRangeTotal = acc;
+  course.scoreRangeTotal = acc;
 
-  sasCourse.segements = [];
-  const validSeg = Math.round(sasCourse.totalScore / scoreGap);
+  course.segements = [];
+  const validSeg = Math.round(course.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
+    let nextScore = score + 1 > validSeg ? course.totalScore : score + 1;
+    row[1] = course.scoreRange
       .slice(row[0], nextScore * scoreGap)
       .reduce((p, c) => p + c, 0);
     row[2] = numberPrecision(
-      (100 * row[1]) / sasCourse.scoreRangeAcc[sasCourse.totalScore]
+      (100 * row[1]) / course.scoreRangeAcc[course.totalScore]
     );
     const endGap =
-      nextScore * scoreGap - 1 >= sasCourse.totalScore
-        ? sasCourse.totalScore
+      nextScore * scoreGap - 1 >= course.totalScore
+        ? course.totalScore
         : nextScore * scoreGap - 1;
-    row[3] = sasCourse.scoreRangeAcc[endGap];
+    row[3] = course.scoreRangeAcc[endGap];
     row[4] = numberPrecision(
-      (100 * row[3]) / sasCourse.scoreRangeAcc[sasCourse.totalScore]
+      (100 * row[3]) / course.scoreRangeAcc[course.totalScore]
     );
-    sasCourse.segements.push(row);
+    course.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],
+  if (validSeg * scoreGap === course.totalScore) {
+    course.segements.push([
+      course.totalScore,
+      course.scoreRange[course.totalScore],
+      course.scoreRange[course.totalScore] /
+        course.scoreRangeAcc[course.totalScore],
+      course.scoreRangeAcc[course.totalScore],
       100,
     ]);
   }
 
-  sasCourse.rangeSegements = [];
-  for (let i = 0; i < sasCourse.rangeConfig.length; i++) {
-    const range = sasCourse.rangeConfig[i]!;
+  course.rangeSegements = [];
+  for (let i = 0; i < course.rangeConfig.length; i++) {
+    const range = course.rangeConfig[i]!;
     const nextRange =
-      i === sasCourse.rangeConfig.length - 1
-        ? { baseScore: sasCourse.totalScore, adjustScore: 0 }
-        : sasCourse.rangeConfig[i + 1];
+      i === course.rangeConfig.length - 1
+        ? { baseScore: course.totalScore, adjustScore: 0 }
+        : course.rangeConfig[i + 1];
     const row = [];
     row[0] = scoreTitle(range);
     row[1] =
-      sasCourse.scoreRange
+      course.scoreRange
         .slice(
           range.baseScore + range.adjustScore,
           nextRange.baseScore + nextRange.adjustScore
         )
         .reduce((p, c) => p + c, 0) || 0;
-    row[2] = numberPrecision((100 * row[1]) / sasCourse.scoreRangeTotal);
+    row[2] = numberPrecision((100 * row[1]) / course.scoreRangeTotal);
     row[3] =
-      sasCourse.scoreRangeAcc[
-        nextRange.baseScore + nextRange.adjustScore - 1
-      ] || 0;
+      course.scoreRangeAcc[nextRange.baseScore + nextRange.adjustScore - 1] ||
+      0;
     if (
       nextRange.baseScore + nextRange.adjustScore >=
-      sasCourse.scoreRangeAcc.length
+      course.scoreRangeAcc.length
     ) {
-      row[3] = sasCourse.scoreRangeAcc[sasCourse.scoreRangeAcc.length - 1];
+      row[3] = course.scoreRangeAcc[course.scoreRangeAcc.length - 1];
     }
-    row[4] = numberPrecision((100 * row[3]) / sasCourse.scoreRangeTotal);
+    row[4] = numberPrecision((100 * row[3]) / course.scoreRangeTotal);
 
-    sasCourse.rangeSegements.push(row);
+    course.rangeSegements.push(row);
   }
 
-  function scoreTitle(rangeConfig: RangeConfig) {
-    if (!rangeConfig) return false;
-    if (rangeConfig.type === "ZERO") return "0-";
-
-    return `${rangeConfig.baseScore + rangeConfig.adjustScore}(${
-      RANGE_POINT_TYPE[rangeConfig.type]
-    }${rangeConfig.adjustScore > 0 ? "+" : ""}${rangeConfig.adjustScore})-`;
-  }
+  return course;
 }
 
 function getScoreGap(totalScore: number) {

+ 1 - 1
src/features/report/ReportScore.vue

@@ -75,7 +75,7 @@ function chartOption() {
     grid: {
       show: true,
       left: 35,
-      bottom: 20,
+      bottom: 25,
       right: 5,
       top: 45,
       borderColor: "#A3B4CC",

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

@@ -70,7 +70,7 @@ function chartOption() {
     grid: {
       show: true,
       left: 35,
-      bottom: 20,
+      bottom: 25,
       right: 5,
       top: 45,
       borderColor: "#A3B4CC",

+ 4 - 4
src/features/report/ReportSummary.vue

@@ -72,7 +72,7 @@
           </div>
           <div class="summary-intro-item">
             <span>难度系数</span
-            >为科目平均分与科目满分的比值,滩度值在0.5-0.6之间较为适宜,高于0.6则可能试卷试题总体上较易或评分过“松”,低于0.5则可能试卷试题总体上较难或评分过“紧”。
+            >为科目平均分与科目满分的比值,滩度值在0.5-0.6之间则试题难度较为适宜或评分松紧适宜,高于0.6则可能试题总体上较易或评分过“松”,低于0.5则可能试题总体上较难或评分过“紧”。
           </div>
         </div>
       </div>
@@ -112,15 +112,15 @@ const reliabilityEvaluateModel = [
 const difficultyEvaluateModel = [
   {
     range: [0.6, 1],
-    value: "试题较简单或评分较松",
+    value: "试卷试题总体上较易或评分过“松”",
   },
   {
     range: [0.5, 0.6],
-    value: "试题难度适中或评分松紧适宜",
+    value: "试题难度较为适宜或评分松紧适宜",
   },
   {
     range: [0, 0.5],
-    value: "试题较难或评分较紧",
+    value: "试卷试题总体上较难或评分过“紧”",
   },
 ];
 

+ 2 - 1
src/features/report/assets/report.css

@@ -30,7 +30,7 @@
   background-repeat: no-repeat;
   background-size: 100% auto;
 }
-.report-page.is-print {
+.report.is-print .report-page {
   margin: 0 auto;
 }
 .report-body-head {
@@ -93,6 +93,7 @@
   font-weight: 400;
   color: #405980;
   line-height: 1;
+  text-align: right;
 }
 .report-pfoot::after {
   content: "";

+ 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");