|
@@ -83,6 +83,23 @@
|
|
|
得分:{{ tag.score }},满分:{{ tag.totalScore }}
|
|
|
</div>
|
|
|
</template>
|
|
|
+ <!-- 模式4的summary -->
|
|
|
+ <template v-if="item.summarys">
|
|
|
+ <div class="summary-detail">
|
|
|
+ <table>
|
|
|
+ <tr>
|
|
|
+ <th>主观题号</th>
|
|
|
+ <th>分数</th>
|
|
|
+ <th>评卷员</th>
|
|
|
+ </tr>
|
|
|
+ <tr v-for="(sinfo, sindex) in item.summarys" :key="sindex">
|
|
|
+ <td>{{ sinfo.mainNumber }}-{{ sinfo.subNumber }}</td>
|
|
|
+ <td>{{ sinfo.score }}</td>
|
|
|
+ <td>{{ sinfo.markerName }}</td>
|
|
|
+ </tr>
|
|
|
+ </table>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
|
|
|
<!-- 总分 -->
|
|
|
<div class="mark-total">
|
|
@@ -133,6 +150,7 @@ interface SliceImage {
|
|
|
answerTags?: AnswerTagItem[];
|
|
|
markDetail?: MarkDetailItem[];
|
|
|
objectiveAnswerTags?: ObjectiveAnswerTagItem[];
|
|
|
+ summarys?: SummaryItem[];
|
|
|
}
|
|
|
|
|
|
const { origImageUrls = "sliceUrls" } = defineProps<{
|
|
@@ -240,6 +258,26 @@ async function processImage() {
|
|
|
.flat();
|
|
|
store.setting.doubleTrack = trackLists.some((item) => item.isByMultMark);
|
|
|
|
|
|
+ // 无答题卡,模式4
|
|
|
+ if (!store.currentTask.cardData.length) {
|
|
|
+ // 只有单评才展示summary
|
|
|
+ const summarys = store.setting.doubleTrack ? [] : parseMode4Data();
|
|
|
+ for (const url of urls) {
|
|
|
+ const indexInSliceUrls = urls.indexOf(url) + 1;
|
|
|
+ const image = images[indexInSliceUrls - 1];
|
|
|
+ sliceImagesWithTrackList.push({
|
|
|
+ url,
|
|
|
+ trackList: [],
|
|
|
+ tagList: [],
|
|
|
+ originalImageWidth: image.naturalWidth,
|
|
|
+ originalImageHeight: image.naturalHeight,
|
|
|
+ width: (image.naturalWidth / maxImageWidth) * 100 + "%",
|
|
|
+ summarys: indexInSliceUrls === 1 ? summarys : [],
|
|
|
+ });
|
|
|
+ }
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
// 解析各试题答题区域以及评分
|
|
|
const markDetailList = parseMarkDetailList();
|
|
|
// 解析客观题的得分情况,按大题统计
|
|
@@ -745,6 +783,24 @@ function parseObjectiveAnswerTags() {
|
|
|
return objectiveAnswerTags;
|
|
|
}
|
|
|
|
|
|
+// 模式4的解析
|
|
|
+interface SummaryItem {
|
|
|
+ mainNumber: number;
|
|
|
+ subNumber: string;
|
|
|
+ score: number;
|
|
|
+ markerName: string;
|
|
|
+}
|
|
|
+function parseMode4Data(): SummaryItem[] {
|
|
|
+ return (store.currentTask.questionList || []).map((q) => {
|
|
|
+ return {
|
|
|
+ mainNumber: q.mainNumber,
|
|
|
+ subNumber: q.subNumber,
|
|
|
+ score: q.score,
|
|
|
+ markerName: q.trackList[0].userName,
|
|
|
+ };
|
|
|
+ });
|
|
|
+}
|
|
|
+
|
|
|
// should not render twice at the same time
|
|
|
let renderLock = false;
|
|
|
const renderPaperAndMark = async () => {
|
|
@@ -878,4 +934,24 @@ const answerPaperScale = $computed(() => {
|
|
|
z-index: 9;
|
|
|
color: #f53f3f;
|
|
|
}
|
|
|
+.summary-detail {
|
|
|
+ position: absolute;
|
|
|
+ width: 45%;
|
|
|
+ left: 5%;
|
|
|
+ top: 11%;
|
|
|
+ height: 84%;
|
|
|
+ z-index: 9;
|
|
|
+ color: #f53f3f;
|
|
|
+ font-weight: 600;
|
|
|
+}
|
|
|
+.summary-detail table {
|
|
|
+ border-spacing: 0;
|
|
|
+ border-collapse: collapse;
|
|
|
+ text-align: left;
|
|
|
+}
|
|
|
+.summary-detail table td,
|
|
|
+.summary-detail table th {
|
|
|
+ padding: 0 10px;
|
|
|
+ line-height: 24px;
|
|
|
+}
|
|
|
</style>
|