浏览代码

bug fix and release

刘洋 2 年之前
父节点
当前提交
1e9cddb5a8

+ 2 - 2
src/assets/styles/app.scss

@@ -28,7 +28,7 @@ hr {
 }
 }
 
 
 body {
 body {
-  font-family: HanSan, system-ui, —apple-system, Segoe UI, Rototo, Emoji, Helvetica, Arial, sans-serif;
+  font-family:'microsoft yahei', HanSan, system-ui, —apple-system, Segoe UI, Rototo, Emoji, Helvetica, Arial, sans-serif;
   height: 100%;
   height: 100%;
   background-color: $BaseBgColor;
   background-color: $BaseBgColor;
   font-size: $BaseFont;
   font-size: $BaseFont;
@@ -36,7 +36,7 @@ body {
 }
 }
 
 
 input {
 input {
-  font-family: HanSan, system-ui, —apple-system, Segoe UI, Rototo, Emoji, Helvetica, Arial, sans-serif;
+  font-family:'microsoft yahei', HanSan, system-ui, —apple-system, Segoe UI, Rototo, Emoji, Helvetica, Arial, sans-serif;
 }
 }
 
 
 * {
 * {

+ 1 - 1
src/components/common/LockEntry.vue

@@ -27,7 +27,7 @@ const lockOpen = () => {
   }
   }
   .tip {
   .tip {
     font-size: 12px;
     font-size: 12px;
-    margin-top: 3px;
+    margin-top: 4px;
   }
   }
   .lock {
   .lock {
     height: 22px;
     height: 22px;

+ 1 - 1
src/components/shared/CurrentTime.vue

@@ -13,7 +13,7 @@ const time = useTime()
 
 
 <style scoped lang="scss">
 <style scoped lang="scss">
 .current-time-box {
 .current-time-box {
-  width: 130px;
+  width: 122px;
   text-align: center;
   text-align: center;
 }
 }
 </style>
 </style>

+ 20 - 7
src/components/shared/MarkHeader.vue

@@ -1,6 +1,6 @@
 <template>
 <template>
   <div class="flex items-center p-l-small p-r-base common-mark-header">
   <div class="flex items-center p-l-small p-r-base common-mark-header">
-    <div class="flex items-center" style="margin-top: 3px">
+    <div class="flex items-center" :class="{ 'left-icons-wrap': path !== '/marking/mark' }" style="margin-top: 3px">
       <div v-for="button in usedOperations" :key="button.type" class="btn-item">
       <div v-for="button in usedOperations" :key="button.type" class="btn-item">
         <div
         <div
           :ref="(el) => bindRef(button.type, el)"
           :ref="(el) => bindRef(button.type, el)"
@@ -169,7 +169,7 @@ const attrs = useAttrs()
 
 
 const mainStore = useMainStore()
 const mainStore = useMainStore()
 
 
-const { fullPath } = useRoute()
+const { path, fullPath } = useRoute()
 
 
 const userMarkConfig = computed(() => {
 const userMarkConfig = computed(() => {
   return mainStore.userMarkConfig?.[fullPath]
   return mainStore.userMarkConfig?.[fullPath]
@@ -344,8 +344,21 @@ const willLogout = async () => {
 .common-mark-header {
 .common-mark-header {
   height: $MainLayoutHeaderHeight;
   height: $MainLayoutHeaderHeight;
   background-color: $MainLayoutHeaderBg;
   background-color: $MainLayoutHeaderBg;
+  .left-icons-wrap {
+    position: relative;
+    padding-right: 15px;
+    margin-right: 10px;
+    &:after {
+      content: '';
+      position: absolute;
+      right: 0;
+      height: 100%;
+      width: 1px;
+      background: #464646;
+    }
+  }
   .btn-item {
   .btn-item {
-    width: 60px;
+    width: 62px;
     text-align: center;
     text-align: center;
   }
   }
   .icon-title {
   .icon-title {
@@ -374,18 +387,18 @@ const willLogout = async () => {
     height: 100%;
     height: 100%;
     color: #999;
     color: #999;
     font-size: $SmallFont;
     font-size: $SmallFont;
-    font-weight: bold;
+    // font-weight: bold;
     padding: 12px 0;
     padding: 12px 0;
     ::v-deep(.data-item) {
     ::v-deep(.data-item) {
       // padding-left: 20px;
       // padding-left: 20px;
-      padding-left: 20px;
-      padding-right: 20px;
+      padding-left: 15px;
+      padding-right: 15px;
       position: relative;
       position: relative;
       height: 100%;
       height: 100%;
       display: flex;
       display: flex;
       align-items: center;
       align-items: center;
       .icon-item {
       .icon-item {
-        padding: 0 10px;
+        width: 45px;
       }
       }
       &:first-child {
       &:first-child {
         margin-left: auto;
         margin-left: auto;

+ 5 - 1
src/components/shared/ScoringPanel.vue

@@ -20,7 +20,7 @@
           v-model:scoreValidFail="scoreValidFail[index]"
           v-model:scoreValidFail="scoreValidFail[index]"
           :active="activeIndex === index"
           :active="activeIndex === index"
           :modal="dialogMode"
           :modal="dialogMode"
-          :toggle-modal="props.toggleModal && index === 0"
+          :toggle-modal="props.toggleModal && index === questionList.length - 1"
           :question="question"
           :question="question"
           :large="props.large"
           :large="props.large"
           @blur="() => onBlur(index)"
           @blur="() => onBlur(index)"
@@ -205,6 +205,10 @@ bus.on('mark-method-toggle', () => {
 </script>
 </script>
 
 
 <style scoped lang="scss">
 <style scoped lang="scss">
+.scoring-panel-box {
+  padding-bottom: 4px;
+  background-color: #fff;
+}
 .modal-box {
 .modal-box {
   max-height: 50vh;
   max-height: 50vh;
   min-height: 8vw;
   min-height: 8vw;

+ 4 - 4
src/components/shared/ScoringPanelItem.vue

@@ -297,7 +297,7 @@ const onToggleClick = () => {
   font-size: $MediumFont;
   font-size: $MediumFont;
   // margin-bottom: 6px;
   // margin-bottom: 6px;
   &.mini {
   &.mini {
-    padding: 6px 5px !important;
+    padding: 2px 5px !important;
   }
   }
   &.modal-panel {
   &.modal-panel {
     padding: 10px 0;
     padding: 10px 0;
@@ -305,8 +305,8 @@ const onToggleClick = () => {
   &.sticky {
   &.sticky {
     align-items: center;
     align-items: center;
     // padding: 12px 20px;
     // padding: 12px 20px;
-    padding: 5px 20px;
-    height: 56px;
+    padding: 2px 20px;
+    height: 50px;
   }
   }
 
 
   // .dialog-name {
   // .dialog-name {
@@ -436,7 +436,7 @@ const onToggleClick = () => {
     }
     }
     img {
     img {
       height: 20px;
       height: 20px;
-      margin-top: 4px;
+      margin-top: 3px;
     }
     }
     p {
     p {
       font-size: 12px;
       font-size: 12px;

+ 5 - 5
src/components/shared/message/Message.vue

@@ -228,14 +228,14 @@ bus.on('fast-send-msg', () => {
   .un-read-num {
   .un-read-num {
     position: absolute;
     position: absolute;
     width: 24px;
     width: 24px;
-    height: 24px;
-    line-height: 24px;
-    right: -15px;
-    top: -15px;
+    height: 18px;
+    line-height: 18px;
+    right: -2px;
+    top: -10px;
     text-align: center;
     text-align: center;
     color: $color--white;
     color: $color--white;
     font-size: 10px;
     font-size: 10px;
-    border-radius: 50%;
+    border-radius: 4px;
     background-color: $DangerColor;
     background-color: $DangerColor;
   }
   }
 }
 }

+ 6 - 0
src/hooks/useSetImgBg.ts

@@ -203,6 +203,12 @@ export const useSetImgBg = (option: Ref<SetImgBgOption>, frontColor?: Ref<string
   )
   )
 
 
   watch(dataUrl, (current, prev) => {
   watch(dataUrl, (current, prev) => {
+    const imgWrapDom = document.querySelector('.img-wrap')
+    if (imgWrapDom) {
+      setTimeout(() => {
+        imgWrapDom.scrollTop = 0
+      }, 10)
+    }
     if (prev) {
     if (prev) {
       try {
       try {
         URL.revokeObjectURL(prev)
         URL.revokeObjectURL(prev)

+ 11 - 6
src/layout/main/MainHeader.vue

@@ -12,20 +12,20 @@
         <current-time class="m-r-base"></current-time>
         <current-time class="m-r-base"></current-time>
       </div>
       </div>
       <div class="data-item flex">
       <div class="data-item flex">
-        <div class="m-r-small m-l-small">
+        <div class="icon-item">
           <lock-entry></lock-entry>
           <lock-entry></lock-entry>
         </div>
         </div>
-        <div v-if="mainStore?.myUserInfo?.role !== 'ADMIN'" class="m-r-small m-l-small">
+        <div v-if="mainStore?.myUserInfo?.role !== 'ADMIN'" class="icon-item">
           <message
           <message
             :reply-user-id="props.replyUserId"
             :reply-user-id="props.replyUserId"
             :message-visible="props.messageVisible"
             :message-visible="props.messageVisible"
             :in-layout="inLayout"
             :in-layout="inLayout"
           ></message>
           ></message>
         </div>
         </div>
-        <div class="m-r-small m-l-small">
+        <div class="icon-item">
           <user-info></user-info>
           <user-info></user-info>
         </div>
         </div>
-        <div class="grid pointer close-icon m-l-small" @click="logout()">
+        <div class="grid pointer close-icon" @click="logout()">
           <!-- <el-icon><close /></el-icon> -->
           <!-- <el-icon><close /></el-icon> -->
           <el-tooltip effect="light" placement="bottom" content="退出登录">
           <el-tooltip effect="light" placement="bottom" content="退出登录">
             <div class="close-box">
             <div class="close-box">
@@ -92,8 +92,8 @@ const mainStore = useMainStore()
       display: flex;
       display: flex;
       align-items: center;
       align-items: center;
       position: relative;
       position: relative;
-      padding-left: 20px;
-      padding-right: 20px;
+      padding-left: 15px;
+      padding-right: 15px;
       &:not(:last-child) {
       &:not(:last-child) {
         &:after {
         &:after {
           content: '';
           content: '';
@@ -109,8 +109,13 @@ const mainStore = useMainStore()
         padding-right: 10px;
         padding-right: 10px;
         padding-left: 10px;
         padding-left: 10px;
       }
       }
+      .icon-item {
+        width: 45px;
+      }
     }
     }
     .close-icon {
     .close-icon {
+      width: 45px;
+
       &:hover {
       &:hover {
         opacity: 0.7;
         opacity: 0.7;
       }
       }

+ 3 - 0
src/modules/marking/inquiry-result/index.vue

@@ -24,6 +24,9 @@
         <right-button class="next-button" @click="checkNext" />
         <right-button class="next-button" @click="checkNext" />
         <div class="flex-1 p-base scroll-auto mark-content-paper img-wrap">
         <div class="flex-1 p-base scroll-auto mark-content-paper img-wrap">
           <img :src="dataUrl" alt="" class="paper-img" :style="{ 'background-color': frontColor }" />
           <img :src="dataUrl" alt="" class="paper-img" :style="{ 'background-color': frontColor }" />
+          <p v-if="current" class="absolute mark-score">
+            {{ current.headerScore ?? current.markerScore }}
+          </p>
         </div>
         </div>
         <!-- <scoring-panel-with-confirm
         <!-- <scoring-panel-with-confirm
           v-model:visible="editScoreVisible"
           v-model:visible="editScoreVisible"

+ 6 - 6
src/modules/marking/mark/index.vue

@@ -482,11 +482,11 @@ const getEnableRemark = () => {
       enableRemark.value = markHistoryRes.enableRemark
       enableRemark.value = markHistoryRes.enableRemark
     })
     })
 }
 }
-const clearScrollTop = () => {
-  if (imgWrap.value) {
-    imgWrap.value.scrollTop = 0
-  }
-}
+// const clearScrollTop = () => {
+//   if (imgWrap.value) {
+//     imgWrap.value.scrollTop = 0
+//   }
+// }
 let timer: any = null
 let timer: any = null
 watch(currentTask, (newVal, oldVal) => {
 watch(currentTask, (newVal, oldVal) => {
   // getMarkStatus()
   // getMarkStatus()
@@ -497,7 +497,7 @@ watch(currentTask, (newVal, oldVal) => {
   if (!currentTask.value) {
   if (!currentTask.value) {
     getEnableRemark()
     getEnableRemark()
   }
   }
-  clearScrollTop()
+  // clearScrollTop()
 })
 })
 
 
 onRefresh()
 onRefresh()

+ 1 - 0
src/modules/marking/problem/index.vue

@@ -264,6 +264,7 @@ watch(currentProblem, () => {
     useFetch('viewProblemPaper').fetch({ id: currentProblem.value.id })
     useFetch('viewProblemPaper').fetch({ id: currentProblem.value.id })
     if (currentProblem.value.problemSolveType !== 'MARK' && currentProblem.value.problemSolveType !== 'REJECT') {
     if (currentProblem.value.problemSolveType !== 'MARK' && currentProblem.value.problemSolveType !== 'REJECT') {
       showScoreBoard.value = true
       showScoreBoard.value = true
+      modelScore.value = JSON.parse(JSON.stringify(currentProblem.value.markScores || []))
     } else {
     } else {
       showScoreBoard.value = false
       showScoreBoard.value = false
     }
     }

+ 5 - 1
src/modules/marking/repeat/index.vue

@@ -219,7 +219,11 @@ const {
   onDbClick,
   onDbClick,
   onCurrentChange,
   onCurrentChange,
 } = useTableCheck(reMarkPaperList)
 } = useTableCheck(reMarkPaperList)
-
+watch(currentReMarkPaper, () => {
+  if (currentReMarkPaper.value) {
+    modelScore.value = JSON.parse(JSON.stringify(currentReMarkPaper.value.markScores || []))
+  }
+})
 const onSearch = async () => {
 const onSearch = async () => {
   getReMarkPaperList(formModel)
   getReMarkPaperList(formModel)
 }
 }

+ 13 - 5
src/modules/marking/similar/index.vue

@@ -8,10 +8,10 @@
     <div class="flex flex-1 overflow-hidden p-base mark-container">
     <div class="flex flex-1 overflow-hidden p-base mark-container">
       <div class="flex flex-1 direction-column mark-content">
       <div class="flex flex-1 direction-column mark-content">
         <right-button class="next-button" @click="checkNext" />
         <right-button class="next-button" @click="checkNext" />
-        <div class="flex-1 p-base scroll-auto radius-base fill-blank mark-content-paper">
+        <div ref="imgWrap1" class="flex-1 p-base scroll-auto radius-base fill-blank mark-content-paper">
           <img :src="dataUrl" alt="" class="paper-img" />
           <img :src="dataUrl" alt="" class="paper-img" />
         </div>
         </div>
-        <div class="flex-1 p-base m-t-base scroll-auto radius-base fill-blank mark-content-paper">
+        <div ref="imgWrap2" class="flex-1 p-base m-t-base scroll-auto radius-base fill-blank mark-content-paper">
           <img :src="dataUrlSame" alt="" class="paper-img" />
           <img :src="dataUrlSame" alt="" class="paper-img" />
         </div>
         </div>
       </div>
       </div>
@@ -54,7 +54,7 @@
 
 
 <script setup lang="ts" name="MarkingSimilar">
 <script setup lang="ts" name="MarkingSimilar">
 /** 雷同卷查看 */
 /** 雷同卷查看 */
-import { reactive, computed, watch } from 'vue'
+import { reactive, computed, watch, ref } from 'vue'
 import { ElButton, ElMessage } from 'element-plus'
 import { ElButton, ElMessage } from 'element-plus'
 import { useSetImgBg } from '@/hooks/useSetImgBg'
 import { useSetImgBg } from '@/hooks/useSetImgBg'
 import useFetch from '@/hooks/useFetch'
 import useFetch from '@/hooks/useFetch'
@@ -72,7 +72,8 @@ import MarkHeader from '@/components/shared/MarkHeader.vue'
 import type { SetImgBgOption } from '@/hooks/useSetImgBg'
 import type { SetImgBgOption } from '@/hooks/useSetImgBg'
 import type { ExtractMultipleApiResponse, ExtractApiParams } from '@/api/api'
 import type { ExtractMultipleApiResponse, ExtractApiParams } from '@/api/api'
 import type { MarkHeaderInstance, EpFormItem, EpTableColumn } from 'global-type'
 import type { MarkHeaderInstance, EpFormItem, EpTableColumn } from 'global-type'
-
+const imgWrap1 = ref()
+const imgWrap2 = ref()
 type RowType = ExtractMultipleApiResponse<'getSimilarPaperList'> & { index: number }
 type RowType = ExtractMultipleApiResponse<'getSimilarPaperList'> & { index: number }
 
 
 const { onBack, frontColor, setFrontColor } = useMarkHeader()
 const { onBack, frontColor, setFrontColor } = useMarkHeader()
@@ -160,7 +161,14 @@ const {
   onDbClick,
   onDbClick,
   onCurrentChange,
   onCurrentChange,
 } = useTableCheck(similarPaperList)
 } = useTableCheck(similarPaperList)
-
+watch(currentSamePaper, () => {
+  if (imgWrap1.value) {
+    imgWrap1.value.scrollTop = 0
+  }
+  if (imgWrap2.value) {
+    imgWrap2.value.scrollTop = 0
+  }
+})
 const onSearch = async () => {
 const onSearch = async () => {
   formModel.status === '' && (formModel.status = null)
   formModel.status === '' && (formModel.status = null)
   getSimilarPaperList(formModel)
   getSimilarPaperList(formModel)

+ 50 - 38
src/modules/quality/ending-check/components/EndCheck.vue

@@ -27,16 +27,18 @@
           highlight-current-row
           highlight-current-row
           @current-change="onCheckTask"
           @current-change="onCheckTask"
         ></base-table> -->
         ></base-table> -->
-        <base-table
-          ref="table1"
-          v-loading="loading1"
-          border
-          stripe
-          size="small"
-          :columns="columns1"
-          :data="unMarkPaperList?.result"
-          @selection-change="handleSelectionChange1"
-        ></base-table>
+        <div class="table-wrap">
+          <base-table
+            ref="table1"
+            v-loading="loading1"
+            border
+            stripe
+            size="small"
+            :columns="columns1"
+            :data="unMarkPaperList?.result"
+            @selection-change="handleSelectionChange1"
+          ></base-table>
+        </div>
       </div>
       </div>
       <div class="radius-base fill-blank p-base overflow-hidden m-l-base flex-1">
       <div class="radius-base fill-blank p-base overflow-hidden m-l-base flex-1">
         <div class="flex items-center m-b-base table-title">
         <div class="flex items-center m-b-base table-title">
@@ -57,44 +59,50 @@
           highlight-current-row
           highlight-current-row
           @current-change="onCheckTask2"
           @current-change="onCheckTask2"
         ></base-table> -->
         ></base-table> -->
-        <base-table
-          ref="table2"
-          v-loading="loading4"
-          border
-          stripe
-          size="small"
-          :columns="columns1"
-          :data="unMarkBackPaperList?.result"
-          @selection-change="handleSelectionChange2"
-        ></base-table>
+        <div class="table-wrap">
+          <base-table
+            ref="table2"
+            v-loading="loading4"
+            border
+            stripe
+            size="small"
+            :columns="columns1"
+            :data="unMarkBackPaperList?.result"
+            @selection-change="handleSelectionChange2"
+          ></base-table>
+        </div>
       </div>
       </div>
       <div class="radius-base fill-blank p-base overflow-hidden m-l-base flex-1">
       <div class="radius-base fill-blank p-base overflow-hidden m-l-base flex-1">
         <div class="flex items-center m-b-base table-title">
         <div class="flex items-center m-b-base table-title">
           <span class="label">未处理问题卷</span>
           <span class="label">未处理问题卷</span>
           <span class="data-count">{{ unProcessProblemList?.length }}</span>
           <span class="data-count">{{ unProcessProblemList?.length }}</span>
         </div>
         </div>
-        <base-table
-          v-loading="loading2"
-          border
-          stripe
-          size="small"
-          :columns="columns2"
-          :data="unProcessProblemList"
-        ></base-table>
+        <div class="table-wrap">
+          <base-table
+            v-loading="loading2"
+            border
+            stripe
+            size="small"
+            :columns="columns2"
+            :data="unProcessProblemList"
+          ></base-table>
+        </div>
       </div>
       </div>
       <div class="radius-base fill-blank p-base overflow-hidden m-l-base flex-1">
       <div class="radius-base fill-blank p-base overflow-hidden m-l-base flex-1">
         <div class="flex items-center m-b-base table-title">
         <div class="flex items-center m-b-base table-title">
           <span class="label">未处理雷同卷</span>
           <span class="label">未处理雷同卷</span>
           <span class="data-count">{{ unProcessSimilarList?.length }}</span>
           <span class="data-count">{{ unProcessSimilarList?.length }}</span>
         </div>
         </div>
-        <base-table
-          v-loading="loading3"
-          border
-          stripe
-          size="small"
-          :columns="columns3"
-          :data="unProcessSimilarList"
-        ></base-table>
+        <div class="table-wrap">
+          <base-table
+            v-loading="loading3"
+            border
+            stripe
+            size="small"
+            :columns="columns3"
+            :data="unProcessSimilarList"
+          ></base-table>
+        </div>
       </div>
       </div>
     </div>
     </div>
   </div>
   </div>
@@ -304,7 +312,7 @@ const onSubmitChangeMarker = async () => {
     // }
     // }
     const valid = await elFormRef?.value?.validate()
     const valid = await elFormRef?.value?.validate()
     if (valid) {
     if (valid) {
-      if (unMarkPaperList.value?.result.find((item: any) => item.loginName == changeMarkerModel.loginName)) {
+      if (multipleSelection1.value?.find((item: any) => item.loginName == changeMarkerModel.loginName)) {
         return ElMessage.error('任务指定不可指定给原评卷人')
         return ElMessage.error('任务指定不可指定给原评卷人')
       }
       }
 
 
@@ -327,7 +335,7 @@ const onSubmitChangeMarker2 = async () => {
     // }
     // }
     const valid = await elFormRef?.value?.validate()
     const valid = await elFormRef?.value?.validate()
     if (valid) {
     if (valid) {
-      if (unMarkBackPaperList.value?.result.find((item: any) => item.loginName == changeMarkerModel2.loginName)) {
+      if (multipleSelection2.value?.find((item: any) => item.loginName == changeMarkerModel2.loginName)) {
         return ElMessage.error('任务指定不可指定给原评卷人')
         return ElMessage.error('任务指定不可指定给原评卷人')
       }
       }
       await useFetch('changeBackTaskMarker').fetch({
       await useFetch('changeBackTaskMarker').fetch({
@@ -347,6 +355,10 @@ onOptionInit(onStartCheck)
 </script>
 </script>
 
 
 <style scoped lang="scss">
 <style scoped lang="scss">
+.table-wrap {
+  height: calc(100vh - 280px);
+  overflow: auto;
+}
 .table-title {
 .table-title {
   .label {
   .label {
     font-size: $SmallFont;
     font-size: $SmallFont;