Browse Source

3-8需求开发

刘洋 2 years ago
parent
commit
986d0997dc

+ 4 - 0
src/assets/styles/element/custom.scss

@@ -210,6 +210,10 @@ button.el-button {
   box-shadow: 0 0 0 1px #ddd inset !important;
 }
 
+.el-table.el-table--small .el-table__body{
+  font-size:13px;
+}
+
 
 #app {
   .el-table__body{

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

@@ -13,6 +13,6 @@ const time = useTime()
 
 <style scoped lang="scss">
 .current-time-box {
-  width: 136px;
+  width: 110px;
 }
 </style>

+ 1 - 0
src/components/shared/ImagePreview.vue

@@ -6,6 +6,7 @@
     :can-resize="resizeKey ? resizeKey : 'can-resize2'"
     :modal="false"
     class="preview-dialog"
+    modal-class="no-mask"
   >
     <div class="preview-content" :class="{ 'is-big': isBig }">
       <img v-show="!!url" class="small-img" :src="url" alt="" />

+ 3 - 1
src/components/shared/MarkHistoryList.vue

@@ -4,7 +4,7 @@
     :modal="false"
     draggable
     class="mark-history-list"
-    title="给分记录"
+    :title="`给分记录( ${task.secretNumber} )`"
     width="600px"
   >
     <template #default>
@@ -32,11 +32,13 @@ const props = withDefaults(
     id: number | string | undefined
     modal?: boolean
     showLevel?: boolean
+    task: any
   }>(),
   {
     modelValue: true,
     modal: true,
     showLevel: false,
+    task: {},
   }
 )
 

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

@@ -22,6 +22,7 @@
           :modal="dialogMode"
           :toggle-modal="props.toggleModal && index === 0"
           :question="question"
+          :large="props.large"
           @blur="() => onBlur(index)"
           @enter="() => onEnter(index)"
           @focused="() => onFocused(index)"
@@ -58,8 +59,9 @@ const props = withDefaults(
     mainNumber?: number | null
     id?: number | null
     autoVisible?: boolean | undefined
+    large?: boolean
   }>(),
-  { modal: false, toggleModal: true, score: () => [], mainNumber: null, id: null, autoVisible: true }
+  { modal: false, toggleModal: true, score: () => [], mainNumber: null, id: null, autoVisible: true, large: true }
 )
 
 const emits = defineEmits(['submit', 'update:score', 'update:visible', 'update:modal'])

+ 18 - 9
src/components/shared/ScoringPanelItem.vue

@@ -1,25 +1,28 @@
 <template>
-  <div class="flex scoring-panel" :class="getClass('modal-panel', 'sticky')">
-    <toggle-dialog-render>
+  <div class="flex scoring-panel" :class="[getClass('modal-panel', 'sticky'), { mini: !props.large && !props.modal }]">
+    <!-- <toggle-dialog-render>
       <svg-icon name="question"></svg-icon>
       <span class="m-l-mini" style="max-width: 200px"
         >{{ question.mainNumber }} - {{ question.subNumber }}{{ question.mainTitle }}</span
       >
-      <!-- <template #callback>
+      <template #callback>
         <div class="grid radius-base dialog-name">
           <div class="text-center">
             <p>{{ question.mainNumber }} - {{ question.subNumber }}</p>
             <p>{{ question.mainTitle }}</p>
           </div>
         </div>
-      </template> -->
-    </toggle-dialog-render>
+      </template> 
+    </toggle-dialog-render>-->
     <div class="flex flex-1 flex-wrap score-list">
       <div
         v-for="scoreItem in scoreList"
         :key="scoreItem"
         class="score-span"
-        :class="[getClass('m-b-mini'), { active: parseFloat(`${currentScore}`) === parseFloat(`${scoreItem}`) }]"
+        :class="[
+          getClass('m-b-mini'),
+          { active: parseFloat(`${currentScore}`) === parseFloat(`${scoreItem}`), mini: !props.large && !props.modal },
+        ]"
         @click="onSetScore(scoreItem)"
       >
         {{ scoreItem }}
@@ -90,8 +93,9 @@ const props = withDefaults(
     active: boolean
     scoreValidFail: boolean | undefined
     question: QuestionInfo
+    large?: boolean
   }>(),
-  { modal: false, toggleModal: true, score: void 0, scoreValidFail: false }
+  { modal: false, toggleModal: true, score: void 0, scoreValidFail: false, large: true }
 )
 
 const emit = defineEmits(['focused', 'blur', 'toggle-click', 'enter', 'update:score'])
@@ -274,7 +278,9 @@ const onToggleClick = () => {
   background-color: #fff;
   font-size: $MediumFont;
   margin-bottom: 6px;
-
+  &.mini {
+    padding: 12px 5px !important;
+  }
   &.modal-panel {
     padding: 10px 0;
   }
@@ -304,7 +310,10 @@ const onToggleClick = () => {
       margin-left: 8px;
       margin-bottom: 8px;
       cursor: pointer;
-
+      &.mini {
+        width: 32px;
+        font-size: 12px;
+      }
       &.active,
       &:hover {
         background-color: $color--primary;

+ 2 - 0
src/components/shared/ScoringPanelWithConfirm.vue

@@ -4,6 +4,7 @@
     v-model:score="modelScore"
     v-model:visible="modalVisible"
     :main-number="props.mainNumber"
+    :large="props.large ?? false"
     @submit="onSubmit"
   ></scoring-panel>
   <base-dialog v-model="submitModalVisible" unless :width="260" center>
@@ -52,6 +53,7 @@ const props = defineProps<{
   score: number[]
   /** 大题号 */
   mainNumber?: number
+  large?: boolean
 }>()
 
 const attrs = useAttrs()

+ 1 - 1
src/directives/dialogResizeImg.ts

@@ -36,7 +36,7 @@ export const dialogResizeImg = {
     img.onload = function () {
       // dragDom.style.width = img.clientWidth + 'px'
       if (!keyboardResize) {
-        const compareHeight = bValue === 'can-resize22' ? parseInt(maxHeight * 0.7 + '') : parseInt(maxHeight / 2 + '')
+        const compareHeight = bValue === 'can-resize22' ? parseInt(maxHeight * 0.97 + '') : parseInt(maxHeight / 2 + '')
         console.log('compareHeight:', compareHeight)
         console.log('img.clientHeight:', img.clientHeight)
         const ratio = (img.clientWidth + 4) / (img.clientHeight + 48)

+ 2 - 1
src/hooks/useTime.ts

@@ -9,7 +9,8 @@ const useTime = () => {
   const timestamp = useTimestamp()
   return computed(() => {
     return {
-      serverTimeFormat: dayjs(timestamp.value - mainStore.diffTime).format('YYYY-MM-DD HH:mm:ss'),
+      // serverTimeFormat: dayjs(timestamp.value - mainStore.diffTime).format('YYYY-MM-DD HH:mm:ss'),
+      serverTimeFormat: dayjs(timestamp.value - mainStore.diffTime).format('MM-DD HH:mm:ss'),
       joinTimeFormat: timeFormat(timestamp.value - mainStore.loginSuccessTime),
     }
   })

+ 1 - 1
src/modules/analysis/group-monitoring-detail/index.vue

@@ -72,7 +72,7 @@
         ></scoring-panel-with-confirm>
       </div>
       <div class="radius-base p-extra-small fill-blank m-l-base overflow-auto paper-mark-record">
-        <mark-history-list :id="current?.taskId" :model-value="true" :modal="false"></mark-history-list>
+        <mark-history-list :id="current?.taskId" :model-value="true" :modal="false" :task="current"></mark-history-list>
       </div>
     </div>
   </div>

+ 4 - 2
src/modules/analysis/marking-progress/components/TotalProgress.vue

@@ -137,11 +137,13 @@ const totalColumns: EpTableColumn<TotalProgress>[] = [
     sortable: true,
   },
   {
-    label: '预计耗时(分)',
+    // label: '预计耗时(分)',
+    label: '小时',
     align: 'center',
     minWidth: 120,
     formatter(row) {
-      return `${parseFloat((row.takeTime / 60).toFixed(2))}`
+      // return `${parseFloat((row.takeTime / 60 / 60).toFixed(2))}`
+      return `${parseFloat((row.takeTime / 60 / 60).toFixed(5))}`
     },
     sortable: true,
   },

+ 95 - 9
src/modules/analysis/personnel-statistics/components/StatisticsGroup.vue

@@ -1,15 +1,17 @@
 <template>
-  <div class="p-small radius-base fill-blank">
+  <div class="p-small radius-base fill-blank statistics-group">
     <base-table
       ref="tableRef"
       border
       stripe
       size="small"
       :columns="columns"
-      :data="tableData"
+      :data="sortTableData"
       :height="tableHeight"
+      :row-class-name="rowClassName"
       highlight-current-row
       @current-change="onCurrentChange"
+      @sort-change="sortChange"
     >
     </base-table>
   </div>
@@ -26,7 +28,7 @@
 
 <script setup lang="ts" name="StatisticsGroup">
 /** 人员数据统计-按小组 */
-import { watch, computed } from 'vue'
+import { watch, computed, ref } from 'vue'
 import BaseTable from '@/components/element/BaseTable.vue'
 import VueECharts from 'vue-echarts'
 import useVW, { usePX } from '@/hooks/useVW'
@@ -41,6 +43,11 @@ const props = defineProps<{
   data: ExtractApiResponse<'getStatisticsByGroup'>
   params: ExtractApiParams<'getStatisticsByGroup'> & { expand: boolean }
 }>()
+const rowClassName = (obj: any) => {
+  if (obj.row.markingGroupNumber === 0) {
+    return 'fixed-row'
+  }
+}
 
 const columns: EpTableColumn<ExtractArrayValue<ExtractApiResponse<'getStatisticsByGroup'>>>[] = [
   {
@@ -58,10 +65,16 @@ const columns: EpTableColumn<ExtractArrayValue<ExtractApiResponse<'getStatistics
     minWidth: 84,
     slotName: 'marker',
     formatter(row: any) {
-      return row.markingGroupNumber === 0 ? '题组' : `第${row.markingGroupNumber}组`
+      return row.markingGroupNumber === 0 ? '全体' : `第${row.markingGroupNumber}组`
     },
   },
   { align: 'center', label: '评卷份数', prop: 'markingPaperCount', width: 92 },
+  { align: 'center', label: '平均分', prop: 'avg', width: 80 },
+  { align: 'center', label: '相关系数', prop: 'xyRelate', width: 90 },
+  { align: 'center', label: '标准差', prop: 'std', width: 80 },
+  { align: 'center', label: '综合系数', prop: 'integration', width: 90 },
+
+  // { align: 'center', label: '评卷份数', prop: 'markingPaperCount', width: 92 },
   { align: 'center', label: '当日可阅', prop: 'markDayCount', width: 92 },
   { align: 'center', label: '剩余可阅', prop: 'todoMarkDayCount', width: 92 },
   { align: 'center', label: '客观题0分量', prop: 'objectiveZero', width: 120 },
@@ -78,9 +91,9 @@ const columns: EpTableColumn<ExtractArrayValue<ExtractApiResponse<'getStatistics
   },
   { align: 'center', label: '抽查量', prop: 'checkCount', width: 90 },
   { align: 'center', label: '抽查改正量', prop: 'checkCorrectCount', width: 110 },
-  { align: 'center', label: '相关系数', prop: 'xyRelate', width: 90 },
-  { align: 'center', label: '平均分', prop: 'avg', width: 80 },
-  { align: 'center', label: '标准差', prop: 'std', width: 80 },
+  // { align: 'center', label: '相关系数', prop: 'xyRelate', width: 90 },
+  // { align: 'center', label: '平均分', prop: 'avg', width: 80 },
+  // { align: 'center', label: '标准差', prop: 'std', width: 80 },
   { align: 'center', label: '近5分钟最高分', prop: 'scoreTop', width: 124 },
   { align: 'center', label: '近5分钟最低分', prop: 'scoreLow', width: 124 },
   { align: 'center', label: '近5分钟客主比', prop: 'objSubRate', width: 124 },
@@ -88,9 +101,9 @@ const columns: EpTableColumn<ExtractArrayValue<ExtractApiResponse<'getStatistics
   { align: 'center', label: '在线', prop: 'online', width: 72 },
   { align: 'center', label: '状态', prop: 'markingStatus', width: 100 },
   { align: 'center', label: '速度', prop: 'markingRate', width: 66 },
-  { align: 'center', label: '综合系数', prop: 'integration', width: 90 },
+  // { align: 'center', label: '综合系数', prop: 'integration', width: 90 },
 ].map((col: any) => {
-  if (!['小组'].includes(col.label)) col.sortable = true
+  if (!['小组', '重评/待确认'].includes(col.label)) col.sortable = 'custom'
   return col
 })
 
@@ -105,6 +118,67 @@ const data = computed(() => {
 })
 
 const { tableRef, tableData, current, onCurrentChange, elTableRef } = useTableCheck(data, false)
+const sortTableData = ref<any[]>([])
+const originalTableData = ref<any[]>([])
+watch(tableData, () => {
+  if (tableData.value) {
+    let data: any[] = tableData.value || []
+    if (data.length && data[data.length - 1].markingGroupNumber === 0) {
+      let last = data.splice(data.length - 1, 1)[0]
+      data.unshift(last)
+    }
+    sortTableData.value = JSON.parse(JSON.stringify(data))
+    originalTableData.value = JSON.parse(JSON.stringify(data))
+  }
+})
+const sortChange = (params: any) => {
+  const { column, prop, order } = params
+  console.log('order:', order)
+  console.log('prop:', prop)
+  if (order === 'ascending') {
+    sortTableData.value.sort((a: any, b: any) => {
+      if (a.markingGroupNumber == 0) {
+        return -1
+      } else if (b.markingGroupNumber == 0) {
+        return 1
+      } else {
+        if (typeof a[prop] === 'string') {
+          let aa = a[prop] || '',
+            bb = b[prop] || ''
+          return aa.localeCompare(bb)
+        } else {
+          return a[prop] - b[prop]
+        }
+      }
+    })
+  } else if (order === 'descending') {
+    sortTableData.value.sort((a: any, b: any) => {
+      if (a.markingGroupNumber == 0) {
+        return -1
+      } else if (b.markingGroupNumber == 0) {
+        return 1
+      } else {
+        if (typeof a[prop] === 'string') {
+          let aa = a[prop] || '',
+            bb = b[prop] || ''
+          return bb.localeCompare(aa)
+        } else {
+          return b[prop] - a[prop]
+        }
+      }
+    })
+  } else if (order == null) {
+    sortTableData.value = JSON.parse(JSON.stringify(originalTableData.value))
+  }
+}
+// const sortTableData = computed(() => {
+//   let data: any[] = tableData.value || []
+//   if (data.length && data[data.length - 1].markingGroupNumber === 0) {
+//     let last = data.splice(data.length - 1, 1)[0]
+//     data.unshift(last)
+//   }
+//   return data
+// })
 
 const {
   fetch: getStatisticObjectiveByGroup,
@@ -267,6 +341,18 @@ const groupObjectiveChartsOption = computed<EChartsOption>(() => {
 </script>
 
 <style scoped lang="scss">
+.statistics-group {
+  :deep(.el-table) {
+    .fixed-row {
+      display: table-row;
+      position: sticky;
+      position: '-webkit-sticky';
+      top: 0;
+      width: 100%;
+      z-index: 3;
+    }
+  }
+}
 .chart-box {
   height: 293px;
 }

+ 88 - 10
src/modules/analysis/personnel-statistics/components/StatisticsPersonnel.vue

@@ -1,17 +1,19 @@
 <template>
-  <div class="p-small radius-base fill-blank">
+  <div class="p-small radius-base fill-blank statistics-personnel">
     <base-table
       ref="tableRef"
       border
       stripe
       size="small"
-      :data="tableData"
+      :data="sortTableData"
       :columns="columns"
       :height="tableHeight"
+      :row-class-name="rowClassName"
       highlight-current-row
       @current-change="onCurrentChange"
       @row-dblclick="onDbClick"
       @row-contextmenu="rowContextmenu"
+      @sort-change="sortChange"
     >
       <template #column-marker="{ row }">
         <!-- <el-popover
@@ -36,7 +38,7 @@
           </el-menu>
         </el-popover> -->
         <span v-if="row.markerId">{{ row.markerName }}</span>
-        <span v-else>题组</span>
+        <span v-else>全体</span>
       </template>
     </base-table>
   </div>
@@ -87,7 +89,11 @@ const props = defineProps<{
   data: ExtractApiResponse<'getStatisticsByGroup'>
   params: ExtractApiParams<'getStatisticsByGroup'> & { expand: boolean }
 }>()
-
+const rowClassName = (obj: any) => {
+  if (obj.row.markingGroupNumber === 0) {
+    return 'fixed-row'
+  }
+}
 const setMessageVisible = inject<(visible: boolean) => void>('setMessageVisible')
 const setReplyUserId = inject<(id: number) => void>('setReplyUserId')
 
@@ -104,7 +110,14 @@ const columns: EpTableColumn<ExtractArrayValue<ExtractApiResponse<'getStatistics
     },
   },
   { label: '评卷员', prop: 'markerName', minWidth: 84, slotName: 'marker' },
+
   { align: 'center', label: '评卷份数', prop: 'markingPaperCount', width: 92 },
+  { align: 'center', label: '平均分', prop: 'avg', width: 80 },
+  { align: 'center', label: '相关系数', prop: 'xyRelate', width: 90 },
+  { align: 'center', label: '标准差', prop: 'std', width: 80 },
+  { align: 'center', label: '综合系数', prop: 'integration', width: 90 },
+
+  // { align: 'center', label: '评卷份数', prop: 'markingPaperCount', width: 92 },
   { align: 'center', label: '当日可阅', prop: 'markDayCount', width: 92 },
   { align: 'center', label: '剩余可阅', prop: 'todoMarkDayCount', width: 92 },
   { align: 'center', label: '客观题0分量', prop: 'objectiveZero', width: 120 },
@@ -121,9 +134,9 @@ const columns: EpTableColumn<ExtractArrayValue<ExtractApiResponse<'getStatistics
   },
   { align: 'center', label: '抽查量', prop: 'checkCount', width: 90 },
   { align: 'center', label: '抽查改正量', prop: 'checkCorrectCount', width: 110 },
-  { align: 'center', label: '相关系数', prop: 'xyRelate', width: 90 },
-  { align: 'center', label: '平均分', prop: 'avg', width: 80 },
-  { align: 'center', label: '标准差', prop: 'std', width: 80 },
+  // { align: 'center', label: '相关系数', prop: 'xyRelate', width: 90 },
+  // { align: 'center', label: '平均分', prop: 'avg', width: 80 },
+  // { align: 'center', label: '标准差', prop: 'std', width: 80 },
   { align: 'center', label: '近5分钟最高分', prop: 'scoreTop', width: 124 },
   { align: 'center', label: '近5分钟最低分', prop: 'scoreLow', width: 124 },
   { align: 'center', label: '近5分钟客主比', prop: 'objSubRate', width: 124 },
@@ -139,9 +152,9 @@ const columns: EpTableColumn<ExtractArrayValue<ExtractApiResponse<'getStatistics
   },
   { align: 'center', label: '状态', prop: 'markingStatus', width: 100 },
   { align: 'center', label: '速度', prop: 'markingRate', width: 66 },
-  { align: 'center', label: '综合系数', prop: 'integration', width: 90 },
+  // { align: 'center', label: '综合系数', prop: 'integration', width: 90 },
 ].map((col: any) => {
-  if (!['小组'].includes(col.label)) col.sortable = true
+  if (!['小组', '重评/待确认'].includes(col.label)) col.sortable = 'custom'
   return col
 })
 const visable = ref(false)
@@ -199,7 +212,60 @@ const data = computed(() => {
 })
 
 const { tableRef, tableData, current, onCurrentChange, onDbClick, currentView, elTableRef } = useTableCheck(data, false)
-
+const sortTableData = ref<any[]>([])
+const originalTableData = ref<any[]>([])
+const sortChange = (params: any) => {
+  const { column, prop, order } = params
+  console.log('order:', order)
+  console.log('prop:', prop)
+  if (order === 'ascending') {
+    sortTableData.value.sort((a: any, b: any) => {
+      if (a.markingGroupNumber == 0) {
+        return -1
+      } else if (b.markingGroupNumber == 0) {
+        return 1
+      } else {
+        if (typeof a[prop] === 'string') {
+          let aa = a[prop] || '',
+            bb = b[prop] || ''
+          return aa.localeCompare(bb)
+        } else {
+          return a[prop] - b[prop]
+        }
+      }
+    })
+  } else if (order === 'descending') {
+    sortTableData.value.sort((a: any, b: any) => {
+      if (a.markingGroupNumber == 0) {
+        return -1
+      } else if (b.markingGroupNumber == 0) {
+        return 1
+      } else {
+        if (typeof a[prop] === 'string') {
+          let aa = a[prop] || '',
+            bb = b[prop] || ''
+          return bb.localeCompare(aa)
+        } else {
+          return b[prop] - a[prop]
+        }
+      }
+    })
+  } else if (order == null) {
+    sortTableData.value = JSON.parse(JSON.stringify(originalTableData.value))
+  }
+}
+function initSortTableData() {
+  if (tableData.value) {
+    let data: any[] = tableData.value || []
+    if (data.length && data[data.length - 1].markingGroupNumber === 0) {
+      let last = data.splice(data.length - 1, 1)[0]
+      data.unshift(last)
+    }
+    sortTableData.value = JSON.parse(JSON.stringify(data))
+    originalTableData.value = JSON.parse(JSON.stringify(data))
+  }
+}
+initSortTableData()
 watch(tableData, () => {
   popovers.value = {}
 })
@@ -383,6 +449,18 @@ const clearCheck = () => {
 </script>
 
 <style scoped lang="scss">
+.statistics-personnel {
+  :deep(.el-table) {
+    .fixed-row {
+      display: table-row;
+      position: sticky;
+      position: '-webkit-sticky';
+      top: 0;
+      width: 100%;
+      z-index: 3;
+    }
+  }
+}
 .chart-box {
   height: 293px;
 }

+ 5 - 1
src/modules/analysis/view-marked-detail/index.vue

@@ -72,7 +72,11 @@
   </div>
   <image-preview v-model="previewModalVisible" :url="current?.filePath"></image-preview>
 
-  <mark-history-list :id="currentViewHistory?.taskId" v-model="visibleHistory"></mark-history-list>
+  <mark-history-list
+    :id="currentViewHistory?.taskId"
+    v-model="visibleHistory"
+    :taks="currentViewHistory"
+  ></mark-history-list>
 </template>
 
 <script setup lang="ts" name="AnalysisViewMarked">

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

@@ -57,7 +57,11 @@
     </div>
   </div>
   <image-preview v-model="previewModalVisible" :url="currentArbitration?.filePath"></image-preview>
-  <mark-history-list :id="currentViewHistory?.taskId" v-model="visibleHistory"></mark-history-list>
+  <mark-history-list
+    :id="currentViewHistory?.taskId"
+    v-model="visibleHistory"
+    :task="currentViewHistory"
+  ></mark-history-list>
 </template>
 
 <script setup lang="tsx" name="MarkingArbitration">

+ 5 - 1
src/modules/marking/inquiry-result/index.vue

@@ -73,7 +73,11 @@
     </div>
   </div>
   <image-preview v-model="previewModalVisible" :url="current?.filePath"></image-preview>
-  <mark-history-list :id="currentViewHistory?.taskId" v-model="visibleHistory"></mark-history-list>
+  <mark-history-list
+    :id="currentViewHistory?.taskId"
+    v-model="visibleHistory"
+    :task="currentViewHistory"
+  ></mark-history-list>
   <send-back-mark
     :id="current?.taskId"
     v-model="sendBackVisible"

+ 10 - 5
src/modules/marking/mark/index.vue

@@ -38,6 +38,7 @@
       v-model:visible="scoringPanelVisible"
       v-model:score="modelScore"
       :main-number="currentTask?.mainNumber"
+      :large="true"
       @submit="onSubmit"
     ></scoring-panel-with-confirm>
   </div>
@@ -352,12 +353,12 @@ const checkMarkStatus = async (): Promise<boolean> => {
   let myUserInfo: any = await useFetch('getMyUserInfo').fetch()
   const { markDayCount, markTotalCount } = myUserInfo
   let res: any = await getMarkStatus()
-  if (!!markDayCount && res.personDayCount === markDayCount) {
-    ElMessage.success(`您当天的任务量${res.personDayCount}已完成`)
+  if (!!markTotalCount && res.personCount >= markTotalCount) {
+    ElMessage.success(`任务量${res.personCount}已完成`)
     clearTaskView()
     return false
-  } else if (!!markTotalCount && res.personCount === markTotalCount) {
-    ElMessage.success(`任务量${res.personCount}已完成`)
+  } else if (!!markDayCount && res.personDayCount >= markDayCount) {
+    ElMessage.success(`您当天的任务量${res.personDayCount}已完成`)
     clearTaskView()
     return false
   } else {
@@ -485,7 +486,11 @@ watch(enableRemark, (val) => {
   }
   .mark-content {
     position: relative;
-
+    .img-wrap {
+      width: 100%;
+      height: 100%;
+      overflow: auto;
+    }
     .mark-status {
       display: inline-block;
       width: 24px;

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

@@ -70,7 +70,11 @@
     </div>
   </div>
   <image-preview v-model="previewModalVisible" :url="currentProblem?.filePath"></image-preview>
-  <mark-history-list :id="currentViewHistory?.taskId" v-model="visibleHistory"></mark-history-list>
+  <mark-history-list
+    :id="currentViewHistory?.taskId"
+    v-model="visibleHistory"
+    :task="currentViewHistory"
+  ></mark-history-list>
   <send-back-mark :id="currentProblem?.id" v-model="sendBackVisible" @rejected="onRejected"></send-back-mark>
 </template>
 

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

@@ -67,7 +67,11 @@
     </div>
   </div>
   <image-preview v-model="previewModalVisible" :url="currentReMarkPaper?.filePath"></image-preview>
-  <mark-history-list :id="currentViewHistory?.taskId" v-model="visibleHistory"></mark-history-list>
+  <mark-history-list
+    :id="currentViewHistory?.taskId"
+    v-model="visibleHistory"
+    :task="currentViewHistory"
+  ></mark-history-list>
 </template>
 
 <script setup lang="ts" name="MarkingRepeat">

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

@@ -45,7 +45,11 @@
       </div>
     </div>
   </div>
-  <mark-history-list :id="currentViewHistory?.taskId" v-model="visibleHistory"></mark-history-list>
+  <mark-history-list
+    :id="currentViewHistory?.taskId"
+    v-model="visibleHistory"
+    :task="currentViewHistory"
+  ></mark-history-list>
 </template>
 
 <script setup lang="ts" name="MarkingSimilar">

+ 7 - 2
src/modules/marking/training-record/index.vue

@@ -34,7 +34,11 @@
       </div>
     </div>
   </div>
-  <mark-history-list :id="currentViewHistory?.taskId" v-model="visibleHistory"></mark-history-list>
+  <mark-history-list
+    :id="currentViewHistory?.taskId"
+    v-model="visibleHistory"
+    :task="currentViewHistory"
+  ></mark-history-list>
 </template>
 
 <script setup lang="ts" name="MarkingTrainingRecord">
@@ -102,7 +106,8 @@ const taskTypeMap: Record<string, string> = {
 }
 
 const columns: EpTableColumn<RowType>[] = [
-  { label: '密号', prop: 'secretNumber' },
+  // { label: '密号', prop: 'secretNumber' },
+  { label: '序号', type: 'index', minWidth: 40 },
   { label: '分数', prop: 'markScore' },
   { label: '标准分', prop: 'score' },
   {

+ 5 - 1
src/modules/monitor/system-check/index.vue

@@ -80,7 +80,11 @@
   </div>
   <image-preview v-model="previewModalVisible" :url="currentSystemCheckPaper?.filePath"></image-preview>
 
-  <mark-history-list :id="currentViewHistory?.taskId" v-model="visibleHistory"></mark-history-list>
+  <mark-history-list
+    :id="currentViewHistory?.taskId"
+    v-model="visibleHistory"
+    :task="currentViewHistory"
+  ></mark-history-list>
   <send-back-mark
     :id="currentSystemCheckPaper?.id"
     v-model="sendBackVisible"

+ 5 - 1
src/modules/monitor/training-monitoring-detail/index.vue

@@ -46,7 +46,11 @@
     </div>
   </div>
   <image-preview v-model="previewModalVisible" :url="current?.filePath"></image-preview>
-  <mark-history-list :id="currentViewHistory?.taskId" v-model="visibleHistory"></mark-history-list>
+  <mark-history-list
+    :id="currentViewHistory?.taskId"
+    v-model="visibleHistory"
+    :task="currentViewHistory"
+  ></mark-history-list>
 </template>
 
 <script setup lang="ts" name="TrainingDetail">

+ 19 - 14
src/modules/monitor/training-monitoring/index.vue

@@ -102,18 +102,23 @@ const rowClassName = (obj: any) => {
 const columns = computed<EpTableColumn<TableDataType>[]>(() => {
   const standardScores = trainingMonitor?.value?.data?.[0]?.scoreList
   const cols: EpTableColumn<TableDataType>[] =
-    trainingMonitor?.value?.header?.map((h, i) => ({
-      label: `${h}`,
-      formatter(row) {
-        if (!row.markerId) {
-          return `${row.scoreList[i]}`
-        }
-        const score = row.scoreList[i]
-        const standardScore = standardScores[i]
-        const diff = isDefine(score) ? minus(score, standardScore) : ''
-        return <span style={{ color: diff ? '#f00' : 'inherit' }}>{diffShow.value ? diff : score}</span>
-      },
-    })) || []
+    trainingMonitor?.value?.header?.map((h, i) => {
+      // console.log('hhhh', h, typeof h)
+      return {
+        label: `${h}`,
+        // width: 12 * (h + '' || '').length + 25,
+        minWidth: 50,
+        formatter(row) {
+          if (!row.markerId) {
+            return `${row.scoreList[i]}`
+          }
+          const score = row.scoreList[i]
+          const standardScore = standardScores[i]
+          const diff = isDefine(score) ? minus(score, standardScore) : ''
+          return <span style={{ color: diff ? '#f00' : 'inherit' }}>{diffShow.value ? diff : score}</span>
+        },
+      }
+    }) || []
   return [
     {
       type: 'selection',
@@ -122,11 +127,11 @@ const columns = computed<EpTableColumn<TableDataType>[]>(() => {
       },
       fixed: 'left',
     },
-    { label: '评卷员', prop: 'markerName', width: 100, fixed: 'left' },
+    { label: '评卷员', prop: 'markerName', width: 110, fixed: 'left' },
     {
       label: '状态',
       prop: 'status',
-      width: 104,
+      width: 110,
       fixed: 'left',
       formatter(row: any) {
         let cls =

+ 5 - 1
src/modules/quality/self-check-detail/index.vue

@@ -59,7 +59,11 @@
   </div>
 
   <image-preview v-model="previewModalVisible" :url="current?.filePath"></image-preview>
-  <mark-history-list :id="currentViewHistory?.taskId" v-model="visibleHistory"></mark-history-list>
+  <mark-history-list
+    :id="currentViewHistory?.taskId"
+    v-model="visibleHistory"
+    :task="currentViewHistory"
+  ></mark-history-list>
   <send-back-mark
     :id="current?.taskId"
     v-model="sendBackVisible"

+ 5 - 1
src/modules/quality/subjective-check/index.vue

@@ -85,7 +85,11 @@
   </div>
 
   <image-preview v-model="previewModalVisible" :url="currentSubjectiveCheck?.filePath"></image-preview>
-  <mark-history-list :id="currentViewHistory?.taskId" v-model="visibleHistory"></mark-history-list>
+  <mark-history-list
+    :id="currentViewHistory?.taskId"
+    v-model="visibleHistory"
+    :task="currentViewHistory"
+  ></mark-history-list>
 </template>
 
 <script setup lang="ts" name="QualitySubjectiveCheck">