浏览代码

bug fix and release

刘洋 2 年之前
父节点
当前提交
6221da8e2c
共有 44 个文件被更改,包括 291 次插入67 次删除
  1. 2 2
      server.config.ts
  2. 1 1
      src/api/api-types/marking.d.ts
  3. 17 0
      src/assets/icons/rounduser.svg
  4. 13 0
      src/assets/icons/suo.svg
  5. 13 0
      src/assets/icons/suo2.svg
  6. 12 0
      src/assets/icons/user.svg
  7. 二进制
      src/assets/images/jia.png
  8. 4 0
      src/assets/styles/element/custom.scss
  9. 9 5
      src/components/common/LockEntry.vue
  10. 3 2
      src/components/element/BaseTable.vue
  11. 11 1
      src/components/shared/ImagePreview.vue
  12. 2 2
      src/components/shared/MarkHeader.vue
  13. 10 5
      src/components/shared/RemarkListModal.vue
  14. 0 1
      src/components/shared/RightButton.vue
  15. 33 6
      src/components/shared/UserInfo.vue
  16. 5 2
      src/components/shared/message/Message.vue
  17. 1 1
      src/components/shared/message/MessageHistory.vue
  18. 1 1
      src/components/shared/message/MessageList.vue
  19. 36 2
      src/components/shared/message/MessageSend.vue
  20. 18 3
      src/hooks/useMessageLoop.ts
  21. 1 1
      src/layout/main/MainHeader.vue
  22. 3 4
      src/modules/admin-subject/manage/index.vue
  23. 14 8
      src/modules/analysis/group-monitoring-detail/index.vue
  24. 1 0
      src/modules/analysis/view-marked-detail/index.vue
  25. 1 0
      src/modules/expert/assess/index.vue
  26. 1 0
      src/modules/expert/expert/index.vue
  27. 1 0
      src/modules/expert/sample/index.vue
  28. 1 0
      src/modules/expert/standard/index.vue
  29. 1 0
      src/modules/expert/training/index.vue
  30. 1 0
      src/modules/marking/arbitration/index.vue
  31. 6 1
      src/modules/marking/assess/index.vue
  32. 1 0
      src/modules/marking/inquiry-result/index.vue
  33. 37 9
      src/modules/marking/mark/index.vue
  34. 1 0
      src/modules/marking/problem/index.vue
  35. 1 0
      src/modules/marking/repeat/index.vue
  36. 1 0
      src/modules/marking/similar/index.vue
  37. 7 5
      src/modules/marking/submit-similar/index.vue
  38. 1 0
      src/modules/marking/training-record/index.vue
  39. 15 3
      src/modules/marking/view-sample/index.vue
  40. 1 0
      src/modules/monitor/system-check/index.vue
  41. 1 0
      src/modules/monitor/training-monitoring-detail/index.vue
  42. 1 0
      src/modules/quality/self-check-detail/index.vue
  43. 1 0
      src/modules/quality/subjective-check/index.vue
  44. 1 2
      src/utils/shared.ts

+ 2 - 2
server.config.ts

@@ -3,10 +3,10 @@ import type { ServerOptions } from 'vite'
 const server: ServerOptions = {
   proxy: {
     '^/?(api|file)/': {
-      // target: 'http://192.168.10.41:8200',
+      target: 'http://192.168.10.41:8200',
       // target: 'http://192.168.10.107:8200',
       // target: 'http://cet-test.markingtool.cn',
-      target: 'http://192.168.10.136:80',
+      // target: 'http://192.168.10.136:80',
       // target: 'http://cet-dev.markingtool.cn:8200',
     },
   },

+ 1 - 1
src/api/api-types/marking.d.ts

@@ -133,7 +133,7 @@ export namespace Marking {
     url: string
   }
 
-  type GetMarkHistory = BaseDefine<null, HistoryTask[]>
+  type GetMarkHistory = BaseDefine<null, { enableRemark: boolean; markHistoryList: HistoryTask[] }>
 
   interface ProblemListParams {
     mainNumber?: number

+ 17 - 0
src/assets/icons/rounduser.svg

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>用户-大</title>
+    <g id="大组长" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="修改样式2" transform="translate(-1468.000000, -66.000000)">
+            <g id="编组-29" transform="translate(1448.000000, 46.000000)">
+                <g id="编组-3" transform="translate(20.000000, 20.000000)">
+                    <rect id="矩形" fill="#0091FF" x="0" y="0" width="32" height="32" rx="16"></rect>
+                    <g id="编组-9" transform="translate(8.000000, 8.000000)" stroke="#FFFFFF" stroke-width="2">
+                        <rect id="矩形" x="4" y="1" width="8" height="8" rx="4"></rect>
+                        <path d="M8,9 C9.98037517,9 11.7795455,9.55414141 13.079504,10.4733508 C14.2317056,11.2880804 15,12.3968116 15,13.6568542 C14.531942,14.0262367 14.0751932,14.2089107 13.5279676,14.3691893 C12.0743011,14.7949584 10.0363317,15 8,15 C5.96366829,15 3.92569892,14.7949584 2.47203241,14.3691893 C1.92480684,14.2089107 1.46805801,14.0262367 1.16215145,13.7927846 C1,12.3968116 1.76829441,11.2880804 2.92049602,10.4733508 C4.22045445,9.55414141 6.01962483,9 8,9 Z" id="椭圆形"></path>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 13 - 0
src/assets/icons/suo.svg

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>锁</title>
+    <g id="大组长" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="修改样式1" transform="translate(-1522.000000, -20.000000)">
+            <g id="编组-10" transform="translate(1522.000000, 20.000000)">
+                <path d="M13,5 L11,5 L11,3 C11,2.44771525 10.5522847,2 10,2 L6,2 C5.44771525,2 5,2.44771525 5,3 L5,5 L5,5 L3,5 L3,3 C3,1.34314575 4.34314575,3.04359188e-16 6,0 L10,0 C11.6568542,-3.04359188e-16 13,1.34314575 13,3 L13,5 L13,5 Z" id="路径" fill="#888888"></path>
+                <rect id="矩形" stroke="#888888" stroke-width="2" x="1" y="5" width="14" height="10" rx="4"></rect>
+                <rect id="矩形" fill="#888888" x="7" y="8" width="2" height="4" rx="1"></rect>
+            </g>
+        </g>
+    </g>
+</svg>

+ 13 - 0
src/assets/icons/suo2.svg

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>锁</title>
+    <g id="大组长" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="修改样式2" transform="translate(-1522.000000, -20.000000)">
+            <g id="编组-10" transform="translate(1522.000000, 20.000000)">
+                <path d="M13,5 L11,5 L11,3 C11,2.44771525 10.5522847,2 10,2 L6,2 C5.44771525,2 5,2.44771525 5,3 L5,5 L5,5 L3,5 L3,3 C3,1.34314575 4.34314575,3.04359188e-16 6,0 L10,0 C11.6568542,-3.04359188e-16 13,1.34314575 13,3 L13,5 L13,5 Z" id="路径" fill="#888888"></path>
+                <rect id="矩形" stroke="#888888" stroke-width="2" x="1" y="5" width="14" height="10" rx="4"></rect>
+                <rect id="矩形" fill="#888888" x="7" y="8" width="2" height="4" rx="1"></rect>
+            </g>
+        </g>
+    </g>
+</svg>

+ 12 - 0
src/assets/icons/user.svg

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>用户</title>
+    <g id="大组长" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="修改样式2" transform="translate(-1592.000000, -20.000000)" stroke="#888888" stroke-width="2">
+            <g id="编组-9" transform="translate(1592.000000, 20.000000)">
+                <rect id="矩形" x="4" y="1" width="8" height="8" rx="4"></rect>
+                <path d="M8,9 C9.98037517,9 11.7795455,9.55414141 13.079504,10.4733508 C14.2317056,11.2880804 15,12.3968116 15,13.6568542 C14.531942,14.0262367 14.0751932,14.2089107 13.5279676,14.3691893 C12.0743011,14.7949584 10.0363317,15 8,15 C5.96366829,15 3.92569892,14.7949584 2.47203241,14.3691893 C1.92480684,14.2089107 1.46805801,14.0262367 1.16215145,13.7927846 C1,12.3968116 1.76829441,11.2880804 2.92049602,10.4733508 C4.22045445,9.55414141 6.01962483,9 8,9 Z" id="椭圆形"></path>
+            </g>
+        </g>
+    </g>
+</svg>

二进制
src/assets/images/jia.png


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

@@ -224,6 +224,10 @@ button.el-button {
 body{
   .el-message{
     z-index:10001 !important;
+    padding:30px 35px;
+    *{
+      font-size:22px !important;
+    }
   }
   .el-loading-mask{
     z-index:3001 !important;

+ 9 - 5
src/components/common/LockEntry.vue

@@ -1,12 +1,14 @@
 <template>
-  <!-- <el-tooltip class="lock-entry" effect="dark" content="锁屏" placement="bottom"> -->
-  <div class="lock-box" title="锁屏" @click="lockOpen">
-    <img src="../../assets/images/lock_screen.png" class="lock" title="锁屏" />
-  </div>
-  <!-- </el-tooltip> -->
+  <el-tooltip class="lock-entry" effect="light" content="锁屏" placement="bottom">
+    <div class="lock-box flex direction-column" @click="lockOpen">
+      <!-- <img src="../../assets/images/lock_screen.png" class="lock" title="锁屏" /> -->
+      <svg-icon name="suo"></svg-icon>
+    </div>
+  </el-tooltip>
 </template>
 <script lang="ts" setup name="LockEntry">
 // import { ElTooltip } from 'element-plus'
+import SvgIcon from '../common/SvgIcon.vue'
 import useMainStore from '@/store/main'
 const mainStore = useMainStore()
 const lockOpen = () => {
@@ -16,6 +18,8 @@ const lockOpen = () => {
 <style lang="scss" scoped>
 .lock-box {
   cursor: pointer;
+  justify-content: flex-end;
+  font-size: 18px;
   .lock {
     height: 22px;
   }

+ 3 - 2
src/components/element/BaseTable.vue

@@ -31,12 +31,13 @@
 import { shallowRef, computed, useSlots, useAttrs } from 'vue'
 import { ElTable, ElTableColumn, ElButton, ElIcon } from 'element-plus'
 import { Refresh } from '@element-plus/icons-vue'
-import CommonEmpty from '@/components/common/Empty.vue'
+// import CommonEmpty from '@/components/common/Empty.vue'
 import type { SetupContext, VNode, Slot } from 'vue'
 import type { EpTableProps, EpTableColumn } from 'global-type'
 
 interface BaseEpTableProps<T = any> extends EpTableProps<T> {
-  columns?: EpTableProps<T>['columns']
+  // columns?: EpTableProps<T>['columns']
+  columns?: any
 }
 
 const props = defineProps<BaseEpTableProps>()

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

@@ -1,6 +1,6 @@
 <template>
   <base-dialog v-model="visible" less title="试卷预览" :footer="false" :modal="false" draggable class="preview-dialog">
-    <div class="preview-content">
+    <div class="preview-content" :class="{ 'is-big': isBig }">
       <img v-show="!!url" :src="url" alt="" />
     </div>
   </base-dialog>
@@ -13,6 +13,7 @@ import useVModel from '@/hooks/useVModel'
 const props = defineProps<{
   modelValue: boolean
   url?: string
+  isBig?: boolean
 }>()
 const visible = useVModel(props)
 </script>
@@ -28,6 +29,15 @@ const visible = useVModel(props)
     min-height: 40vh;
     // max-height: 600px;
     // max-height: calc(50vh - 50px);
+    overflow: auto;
+    &.is-big {
+      max-width: 50vw;
+      height: calc(100vh - 50px);
+      img {
+        width: auto;
+        height: 99%;
+      }
+    }
     img {
       // width: 100%;
       // height: 100%;

+ 2 - 2
src/components/shared/MarkHeader.vue

@@ -27,7 +27,7 @@
       <span class="data-item">
         <message :reply-user-id="props.replyUserId" :paper-path="props.paperPath"></message>
       </span>
-      <span class="data-item is-last"><user-info></user-info></span>
+      <span class="data-item m-r-base"><user-info></user-info></span>
 
       <div class="grid pointer close-icon" @click="willLogout">
         <el-icon><close /></el-icon>
@@ -223,7 +223,7 @@ const onOperationClick = (button: HeaderButton) => {
       break
     default:
       emitEvent(button.type)
-      saveMarkSet()
+      // saveMarkSet()
       break
   }
 }

+ 10 - 5
src/components/shared/RemarkListModal.vue

@@ -49,18 +49,23 @@ import type { ExtractApiResponse } from '@/api/api'
 
 type HistoryTask = ExtractArrayValue<ExtractApiResponse<'getMarkHistory'>>
 
-const { fetch: getMarkHistory, result: markHistoryList } = useFetch('getMarkHistory')
+// const { fetch: getMarkHistory, result: markHistoryList } = useFetch('getMarkHistory')
+const markHistoryList = ref<any>([])
+const getMarkHistory = async () => {
+  let res = await useFetch('getMarkHistory').fetch()
+  markHistoryList.value = res.enableRemark ? res.markHistoryList : []
+}
 
 const props = defineProps<{ modelValue: boolean }>()
 
 const emits = defineEmits<{
-  (e: 'task-change', data: HistoryTask): void
+  (e: 'task-change', data: any): void
   (e: 'update:modeValue', visible: boolean): void
 }>()
 
 const visible = useVModel(props)
 
-const tableColumns: EpTableColumn<HistoryTask>[] = [
+const tableColumns: EpTableColumn<any>[] = [
   { label: '密号', prop: 'secretNumber' },
   { label: '分数', prop: 'markScore' },
   { label: '时间', prop: 'markTime' },
@@ -75,9 +80,9 @@ watch(visible, () => {
   }
 })
 
-const task = ref<HistoryTask>()
+const task = ref<any>()
 
-const onCurrentChange = (row: HistoryTask) => {
+const onCurrentChange = (row: any) => {
   task.value = row
 }
 

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

@@ -20,7 +20,6 @@ onMounted(() => {
   erd.listenTo(document.querySelector('.table-view') as HTMLElement, function (element: any) {
     var width = element.offsetWidth
     var height = element.offsetHeight
-    console.log('Size: ' + width + 'x' + height)
     showRight.value = width > 0
   })
 })

+ 33 - 6
src/components/shared/UserInfo.vue

@@ -1,8 +1,23 @@
 <template>
-  <div class="user-info" @click="visibleUpdatePwd = true">
-    <span>{{ info.userName }}</span>
-    <span class="m-l-base">{{ info.roleName }}</span>
-  </div>
+  <el-tooltip effect="light" placement="bottom">
+    <template #content>
+      <div class="user-info flex items-center">
+        <p style="color: #fff; font-size: 30px">
+          <svg-icon name="rounduser"></svg-icon>
+        </p>
+        <div class="flex-1 user-right p-l-base">
+          <p class="u-name">{{ info.userName }}</p>
+          <p class="u-role">{{ info.roleName }}</p>
+        </div>
+      </div>
+    </template>
+    <svg-icon
+      name="user"
+      style="font-size: 17px; position: relative; bottom: -1px; cursor: pointer"
+      @click="visibleUpdatePwd = true"
+    ></svg-icon>
+  </el-tooltip>
+
   <update-user-pwd v-model="visibleUpdatePwd" :user-name="info.name || ''"></update-user-pwd>
 </template>
 
@@ -10,6 +25,7 @@
 import { ref, computed } from 'vue'
 import useMainStore from '@/store/main'
 import UpdateUserPwd from '@/components/shared/UpdateUserPwd.vue'
+import SvgIcon from '../common/SvgIcon.vue'
 
 const mainStore = useMainStore()
 
@@ -28,7 +44,18 @@ const visibleUpdatePwd = ref<boolean>(false)
 <style scoped lang="scss">
 .user-info {
   // color: $RegularFontColor;
-  color: #999;
-  font-size: $SmallFont;
+  // color: #999;
+  // font-size: $SmallFont;
+  padding: 8px;
+  .user-right {
+    .u-name {
+      font-size: 14px;
+      color: #333;
+    }
+    .u-role {
+      font-size: 12px;
+      color: #999;
+    }
+  }
 }
 </style>

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

@@ -4,8 +4,11 @@
       <span v-show="unReadMessages?.newCount" class="un-read-num">
         {{ (unReadMessages?.newCount || 0) > 99 ? '99+' : unReadMessages?.newCount }}
       </span>
-      <svg-icon v-if="inLayout" name="message" class="bell"></svg-icon>
-      <svg-icon v-else name="message2" class="bell"></svg-icon>
+      <!-- <svg-icon v-if="inLayout" name="message" class="bell"></svg-icon> -->
+      <!-- <svg-icon v-else name="message2" class="bell"></svg-icon> -->
+      <el-tooltip effect="light" content="消息" placement="bottom">
+        <svg-icon name="message" class="bell"></svg-icon>
+      </el-tooltip>
     </div>
     <el-popover
       placement="bottom-start"

+ 1 - 1
src/components/shared/message/MessageHistory.vue

@@ -13,7 +13,7 @@
       </div>
     </template>
   </div>
-  <image-preview v-model="previewModalVisible" :url="paperPath"></image-preview>
+  <image-preview v-model="previewModalVisible" :url="paperPath" :is-big="true"></image-preview>
 </template>
 
 <script setup lang="ts" name="MessageHistory">

+ 1 - 1
src/components/shared/message/MessageList.vue

@@ -50,7 +50,7 @@
       <message-history v-if="showHistory" :send-user-id="currentMessage?.sendUserId"></message-history>
     </div>
   </div>
-  <image-preview v-model="previewModalVisible" :url="paperPath"></image-preview>
+  <image-preview v-model="previewModalVisible" :url="paperPath" :is-big="true"></image-preview>
 </template>
 
 <script setup lang="ts" name="MessageList">

+ 36 - 2
src/components/shared/message/MessageSend.vue

@@ -54,7 +54,7 @@
       ></message-history>
     </div>
   </div>
-  <image-preview v-model="previewModalVisible" :url="props.paperPath || ''"></image-preview>
+  <image-preview v-model="previewModalVisible" :url="props.paperPath || ''" :is-big="true"></image-preview>
 </template>
 
 <script setup lang="tsx" name="MessageSend">
@@ -75,7 +75,14 @@ const props = defineProps<{
   replyUserId?: number | null
   paperPath?: string | null
 }>()
-
+const customNodeClass = (data: any, node: any) => {
+  if (data.online === true) {
+    return 'is-online'
+  } else if (data.online === false) {
+    return 'is-offline'
+  }
+  return null
+}
 /** cleat warning */
 const emit = defineEmits(['close', 'change-type', 'reply'])
 const showHistory = ref<boolean>(false)
@@ -135,6 +142,7 @@ const treeProp = {
     }
     return treeNode.label
   },
+  class: customNodeClass,
 } as unknown as InstanceType<typeof ElTree>['props']
 
 const filterTree = ((value: string, data: MarkerItem) => {
@@ -237,6 +245,32 @@ const toggleHistory = () => {
     height: 446px;
     ::v-deep(.el-tree) {
       min-height: 100%;
+      .is-online,
+      .is-offline {
+        .el-tree-node__label {
+          padding-left: 14px;
+          position: relative;
+          &:before {
+            content: '';
+            display: block;
+            position: absolute;
+            left: 0;
+            top: 5px;
+            width: 8px;
+            height: 8px;
+            border-radius: 4px;
+            background-color: #67c23a;
+            z-index: 10;
+          }
+        }
+      }
+      .is-offline {
+        .el-tree-node__label {
+          &:before {
+            background-color: #ccc !important;
+          }
+        }
+      }
     }
   }
   .message-list {

+ 18 - 3
src/hooks/useMessageLoop.ts

@@ -1,6 +1,8 @@
 import { effectScope, onScopeDispose, watch } from 'vue'
 import uesFetch from '@/hooks/useFetch'
 import useMainStore from '@/store/main'
+import { useRouter } from 'vue-router'
+import { sessionStorage } from '@/plugins/storage'
 
 import type { EffectScope, ShallowRef } from 'vue'
 import type { ExtractApiResponse } from '@/api/api'
@@ -21,6 +23,7 @@ export const setLastMsgs = (res: Msg) => {
 
 const useMessageLoop = () => {
   const mainStore = useMainStore()
+  const router = useRouter()
 
   const { fetch: getUnReadMessage, result: unReadMessage, cancel } = uesFetch('getUnReadMessage')
 
@@ -33,10 +36,22 @@ const useMessageLoop = () => {
     }
   }
 
-  const getUnReadMessageFn = () => {
-    getUnReadMessage()
+  const getUnReadMessageFn = async () => {
+    let seconds = 10
+    try {
+      await getUnReadMessage()
+    } catch (err: any) {
+      if (err.response.status == 401) {
+        cleanTimer()
+        sessionStorage.remove('LOGIN_RESULT')
+        router.replace({ name: 'Login' })
+        return
+      } else {
+        seconds = 30
+      }
+    }
     cleanTimer()
-    timer = window.setTimeout(getUnReadMessageFn, 6 * 1000)
+    timer = window.setTimeout(getUnReadMessageFn, seconds * 1000)
   }
   watch(
     () => unReadMessage.value,

+ 1 - 1
src/layout/main/MainHeader.vue

@@ -23,7 +23,7 @@
       <div class="m-r-base m-l-base">
         <user-info></user-info>
       </div>
-      <div class="grid fill-light-gray pointer close-icon" @click="logout()">
+      <div class="grid fill-light-gray pointer close-icon m-l-base" @click="logout()">
         <el-icon><close /></el-icon>
       </div>
     </div>

+ 3 - 4
src/modules/admin-subject/manage/index.vue

@@ -58,7 +58,8 @@ import useTable from '@/hooks/useTable'
 import useFetch from '@/hooks/useFetch'
 import useVW from '@/hooks/useVW'
 import { StatusMap } from '@/constants/dicts'
-import { Plus } from '@element-plus/icons-vue'
+// import { Plus } from '@element-plus/icons-vue'
+import jiaImg from '@/assets/images/jia.png'
 
 import type { EpFormItem, EpFormRules, EpTableColumn } from 'global-type'
 import type { ExtractApiParams, ExtractMultipleApiResponse } from '@/api/api'
@@ -80,10 +81,8 @@ const columns: EpTableColumn<ExtractMultipleApiResponse<'getSubjectList'>>[] = [
         row.code
       ) : (
         <p style="display:flex;align-items:center">
+          <img style="height:10px;margin-right:3px;" src={jiaImg} />
           <span>{row.code}</span>
-          <el-icon style="display:flex;align-items:center;margin-left:5px;">
-            <Plus style="width:12px;height:12px;font-weight:bold;color:#777" />
-          </el-icon>
         </p>
       )
     },

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

@@ -186,12 +186,15 @@ const getXAxisData = <K extends keyof ExtractArrayValue<StatisticObjectiveByMark
 
 const markerSubjectiveChartsOption = computed<EChartsOption>(() => {
   return {
+    title: { text: '主观分布' },
     grid: {
       bottom: 30,
     },
     legend: {
       itemWidth: 14,
-      data: ['评卷员主观分布', '小组主观分布', '题组主观分布'],
+      data: ['评卷员', '小组', '题组'],
+      right: 10,
+      top: 2,
     },
     xAxis: {
       axisLine: { show: false },
@@ -216,7 +219,7 @@ const markerSubjectiveChartsOption = computed<EChartsOption>(() => {
     ],
     series: [
       {
-        name: '评卷员主观分布',
+        name: '评卷员',
         type: 'line',
         itemStyle: {
           color: '#3AD500',
@@ -224,7 +227,7 @@ const markerSubjectiveChartsOption = computed<EChartsOption>(() => {
         data: getXAxisData('rate', subjectiveByMarker?.value?.segmentsByUser),
       },
       {
-        name: '小组主观分布',
+        name: '小组',
         type: 'line',
         itemStyle: {
           color: '#0064FF',
@@ -232,7 +235,7 @@ const markerSubjectiveChartsOption = computed<EChartsOption>(() => {
         data: getXAxisData('rate', subjectiveByMarker?.value?.segmentsByGroup),
       },
       {
-        name: '题组主观分布',
+        name: '题组',
         type: 'line',
         itemStyle: {
           color: '#008000',
@@ -245,12 +248,15 @@ const markerSubjectiveChartsOption = computed<EChartsOption>(() => {
 
 const markerObjectiveChartsOption = computed<EChartsOption>(() => {
   return {
+    title: { text: '客观分布' },
     grid: {
       bottom: 30,
     },
     legend: {
       itemWidth: 14,
-      data: ['评卷员客观分布', '小组客观分布', '题组客观分布'],
+      data: ['评卷员', '小组', '题组'],
+      right: 10,
+      top: 2,
     },
     xAxis: {
       axisLine: { show: false },
@@ -275,7 +281,7 @@ const markerObjectiveChartsOption = computed<EChartsOption>(() => {
     ],
     series: [
       {
-        name: '评卷员客观分布',
+        name: '评卷员',
         type: 'line',
         itemStyle: {
           color: '#3AD500',
@@ -283,7 +289,7 @@ const markerObjectiveChartsOption = computed<EChartsOption>(() => {
         data: getXAxisData('rate', objectiveByMarker?.value?.segmentsByUser),
       },
       {
-        name: '小组客观分布',
+        name: '小组',
         type: 'line',
         itemStyle: {
           color: '#0064FF',
@@ -291,7 +297,7 @@ const markerObjectiveChartsOption = computed<EChartsOption>(() => {
         data: getXAxisData('rate', objectiveByMarker?.value?.segmentsByGroup),
       },
       {
-        name: '题组客观分布',
+        name: '题组',
         type: 'line',
         itemStyle: {
           color: '#008000',

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

@@ -62,6 +62,7 @@
             :data="tableData"
             :columns="columns"
             highlight-current-row
+            :cell-style="{ padding: '6px 0' }"
             @current-change="onCurrentChange"
             @row-dblclick="onDbClick"
           ></base-table>

+ 1 - 0
src/modules/expert/assess/index.vue

@@ -52,6 +52,7 @@
             :data="tableData"
             :columns="columns"
             highlight-current-row
+            :cell-style="{ padding: '6px 0' }"
             @current-change="onCurrentChange"
           ></base-table>
         </div>

+ 1 - 0
src/modules/expert/expert/index.vue

@@ -52,6 +52,7 @@
             :data="tableData"
             :columns="columns"
             highlight-current-row
+            :cell-style="{ padding: '6px 0' }"
             @current-change="onCurrentChange"
           ></base-table>
         </div>

+ 1 - 0
src/modules/expert/sample/index.vue

@@ -52,6 +52,7 @@
             :data="tableData"
             :columns="columns"
             highlight-current-row
+            :cell-style="{ padding: '6px 0' }"
             @current-change="onCurrentChange"
             @row-dblclick="onDbClick"
           ></base-table>

+ 1 - 0
src/modules/expert/standard/index.vue

@@ -35,6 +35,7 @@
             :data="tableData"
             :columns="columns"
             highlight-current-row
+            :cell-style="{ padding: '6px 0' }"
             @current-change="onCurrentChange"
           ></base-table>
         </div>

+ 1 - 0
src/modules/expert/training/index.vue

@@ -41,6 +41,7 @@
             :data="tableData"
             :columns="columns"
             highlight-current-row
+            :cell-style="{ padding: '6px 0' }"
             @current-change="onCurrentChange"
           ></base-table>
         </div>

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

@@ -48,6 +48,7 @@
             :data="tableData"
             :columns="columns"
             highlight-current-row
+            :cell-style="{ padding: '6px 0' }"
             @current-change="onCurrentChange"
             @row-dblclick="onDbClick"
           ></base-table>

+ 6 - 1
src/modules/marking/assess/index.vue

@@ -17,7 +17,8 @@
           <span>选择评卷员</span>
           <el-button :loading="loading" size="small" type="primary" @click="sendHandler">分发考核卷</el-button>
         </div>
-        <div class="flex direction-column m-t-extra-base p-base radius-base fill-lighter tree-box">
+        <!-- <div class="flex direction-column m-t-extra-base p-base radius-base fill-lighter tree-box"> -->
+        <div class="flex direction-column tree-box">
           <el-input v-model="filterText" placeholder="输入评卷员账号或名称筛选" clearable></el-input>
           <div class="flex-1 m-t-base scroll-y-auto">
             <el-tree
@@ -339,10 +340,14 @@ const sendHandler = () => {
 }
 .top-box {
   height: 395px;
+  .form-card {
+    padding: 16px 20px 20px 20px;
+  }
   .tree-card {
     padding: 10px 20px 20px 20px;
     .tree-box {
       height: 320px;
+      margin-top: 10px;
     }
   }
 }

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

@@ -59,6 +59,7 @@
             highlight-current-row
             :data="tableData"
             :columns="columns"
+            :cell-style="{ padding: '6px 0' }"
             @current-change="onCurrentChange"
             @row-dblclick="onDbClick"
           ></base-table>

+ 37 - 9
src/modules/marking/mark/index.vue

@@ -15,17 +15,19 @@
       </div>
     </mark-header>
     <div class="flex-1 overflow-hidden p-base mark-container">
+      <div v-if="!enableRemark && !currentTask" class="waiting flex justify-center items-center">等待组长审核</div>
       <div
+        v-else
         class="p-base radius-base full fill-blank scroll-auto mark-content"
         :style="{ 'background-color': backgroundColor }"
       >
-        <span v-if="currentTask" class="mark-status">
+        <span class="mark-status">
           <img :src="statusIcon" alt="" />
         </span>
-        <span v-if="currentTask" class="preview" @click="onPreview">
+        <span class="preview" @click="onPreview">
           <svg-icon name="preview"></svg-icon>
         </span>
-        <div v-if="currentTask" :class="{ 'text-center': center }" class="img-wrap">
+        <div :class="{ 'text-center': center }" class="img-wrap">
           <img :src="dataUrl" alt="" class="paper-img" :style="{ 'background-color': frontColor }" />
         </div>
       </div>
@@ -116,7 +118,7 @@ const currentTaskType = ref<TaskType>('FORMAL')
 const statusIcon = computed(() => {
   return markStatusIcon[currentTaskType.value] || markStatusIcon.default
 })
-
+const enableRemark = ref(true)
 const {
   rotate,
   scale,
@@ -157,7 +159,7 @@ const { fetch: getMarkingTask, loading } = useFetch('getMarkingTask')
 const { fetch: submitMarkTask, loading: submitting } = useFetch('submitMarkTask')
 const { fetch: getMarkStatus, result: markStatus } = useFetch('getMarkStatus')
 
-const historyTaskChange = (task: HistoryTaskType) => {
+const historyTaskChange = (task: any) => {
   let saveTargetTask = unref(currentTask)
   console.log('saveTargetTask:', saveTargetTask)
   if (currentTaskType.value != 'remarking') {
@@ -274,7 +276,7 @@ const onSubmitSimilar = async () => {
     return
   }
   const markHistory = await useFetch('getMarkHistory').fetch()
-  if (!markHistory.length) {
+  if (!markHistory.markHistoryList.length) {
     return ElMessage.warning('暂无评卷记录')
   }
   return push({
@@ -378,7 +380,16 @@ const onRefresh = async (refreshToNext?: boolean) => {
 
 /** 回评 */
 const onRemark = () => {
-  remarkModalVisible.value = true
+  // remarkModalVisible.value = true
+  useFetch('getMarkHistory')
+    .fetch()
+    .then((markHistoryRes: any) => {
+      if (!markHistoryRes.enableRemark) {
+        ElMessage.warning('审核中,暂时无法回评')
+      } else {
+        remarkModalVisible.value = true
+      }
+    })
 }
 
 /** 设置问题卷 */
@@ -423,13 +434,24 @@ const imgOption = computed<SetImgBgOption>(() => {
 
 const { drawing, dataUrl } = useSetImgBg(imgOption, frontColor, setFrontColor)
 
+const getEnableRemark = () => {
+  useFetch('getMarkHistory')
+    .fetch()
+    .then((markHistoryRes: any) => {
+      enableRemark.value = markHistoryRes.enableRemark
+    })
+}
+
 watch(currentTask, () => {
-  getMarkStatus()
+  // getMarkStatus()
   resume()
+  if (!currentTask.value) {
+    getEnableRemark()
+  }
 })
 
 onRefresh()
-
+getEnableRemark()
 // bus.on('showStandard', () => {
 //   standardVisible.value = true
 // })
@@ -437,6 +459,12 @@ onRefresh()
 
 <style scoped lang="scss">
 .mark-container {
+  .waiting {
+    background-color: #fff;
+    font-size: 80px;
+    color: #ccc;
+    height: 100%;
+  }
   .mark-content {
     position: relative;
 

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

@@ -61,6 +61,7 @@
             :data="tableData"
             :columns="columns"
             highlight-current-row
+            :cell-style="{ padding: '6px 0' }"
             @current-change="onCurrentChange"
             @row-dblclick="onDbClick"
           ></base-table>

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

@@ -58,6 +58,7 @@
             :data="tableData"
             :columns="columns"
             highlight-current-row
+            :cell-style="{ padding: '6px 0' }"
             @current-change="onCurrentChange"
             @row-dblclick="onDbClick"
           ></base-table>

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

@@ -37,6 +37,7 @@
             :data="tableData"
             :columns="columns"
             highlight-current-row
+            :cell-style="{ padding: '6px 0' }"
             @current-change="onCurrentChange"
             @row-dblclick="onDbClick"
           ></base-table>

+ 7 - 5
src/modules/marking/submit-similar/index.vue

@@ -51,22 +51,24 @@ const props = defineProps<{
 const { query } = useRoute()
 const { back } = useRouter()
 
-const { fetch: getMarkHistory, result: markHistoryList } = useFetch('getMarkHistory')
+const { fetch: getMarkHistory, result: markHistoryRes } = useFetch('getMarkHistory')
 
 /** 过滤自己 */
 const filterSelfData = computed(() => {
   return (
-    markHistoryList?.value?.filter((d) => `${d.taskId}` !== `${props.taskId}`).map((d, index) => ({ ...d, index })) ||
-    []
+    markHistoryRes?.value?.markHistoryList
+      .filter((d) => `${d.taskId}` !== `${props.taskId}`)
+      .map((d, index) => ({ ...d, index })) || []
   )
 })
 
 const { tableRef, tableData, current, onCurrentChange } = useTableCheck(filterSelfData)
 
-const columns = computed<EpTableColumn<ExtractArrayValue<ExtractApiResponse<'getMarkHistory'>>>[]>(() => [
+// const columns = computed<EpTableColumn<ExtractArrayValue<ExtractApiResponse<'getMarkHistory'>>>[]>(() => [
+const columns = computed(() => [
   {
     label: '选中雷同',
-    formatter(row) {
+    formatter(row: any) {
       return (
         <ElRadio modelValue={current.value?.secretNumber} label={row.secretNumber}>
           {' '}

+ 1 - 0
src/modules/marking/training-record/index.vue

@@ -26,6 +26,7 @@
           :data="tableData"
           :columns="columns"
           highlight-current-row
+          :cell-style="{ padding: '6px 0' }"
           @current-change="onCurrentChange"
           @row-dblclick="onDbClick"
         ></base-table>

+ 15 - 3
src/modules/marking/view-sample/index.vue

@@ -1,10 +1,18 @@
 <template>
   <div class="flex direction-column full">
-    <mark-header
+    <!-- <mark-header
       :exclude-operations="['remark', 'problem', 'example', 'delete', 'bookmark']"
       :paper-path="current?.url"
       @click="onOperationClick"
-    ></mark-header>
+    ></mark-header> -->
+    <mark-header :exclude-operations="['delete', 'bookmark']" :paper-path="current?.url" @click="onOperationClick">
+      <div v-show="current" class="data-item">
+        <p class="main-ques-info truncate">{{ current?.mainNumber }}-{{ current?.mainTitle }}</p>
+      </div>
+      <div class="data-item">
+        <current-time></current-time>
+      </div>
+    </mark-header>
     <div class="flex flex-1 overflow-hidden p-base mark-container">
       <div
         class="flex flex-1 direction-column radius-base fill-blank mark-content"
@@ -25,6 +33,7 @@
           :data="tableData"
           :columns="columns"
           highlight-current-row
+          :cell-style="{ padding: '6px 0' }"
           @current-change="onCurrentChange"
         ></base-table>
       </div>
@@ -38,6 +47,8 @@ import { computed } from 'vue'
 import { useSetImgBg } from '@/hooks/useSetImgBg'
 import useFetch from '@/hooks/useFetch'
 import useMarkHeader from '@/hooks/useMarkHeader'
+import CurrentTime from '@/components/shared/CurrentTime.vue'
+
 import useTableCheck from '@/hooks/useTableCheck'
 import MarkHeader from '@/components/shared/MarkHeader.vue'
 import BaseTable from '@/components/element/BaseTable.vue'
@@ -67,7 +78,8 @@ const {
 
 /** 刷新 */
 const onRefresh = () => {
-  viewSamplePaper()
+  // viewSamplePaper()
+  location.reload()
 }
 
 type OperationClick = MarkHeaderInstance['onClick']

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

@@ -46,6 +46,7 @@
             :data="tableData"
             :columns="columns"
             highlight-current-row
+            :cell-style="{ padding: '6px 0' }"
             @current-change="onCurrentChange"
             @row-dblclick="onDbClick"
           ></base-table>

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

@@ -37,6 +37,7 @@
             :data="tableData"
             :columns="columns"
             highlight-current-row
+            :cell-style="{ padding: '6px 0' }"
             @current-change="onCurrentChange"
             @row-dblclick="onDbClick"
           ></base-table>

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

@@ -39,6 +39,7 @@
             :data="tableData"
             :columns="columns"
             highlight-current-row
+            :cell-style="{ padding: '6px 0' }"
             @current-change="onCurrentChange"
             @row-dblclick="onDbClick"
           ></base-table>

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

@@ -73,6 +73,7 @@
               height="150px"
               :data="[currentSubjectiveCheck]"
               :columns="subColumns"
+              :cell-style="{ padding: '6px 0' }"
               @row-dblclick="onDbClick"
             >
               <template #empty> 暂无数据 </template>

+ 1 - 2
src/utils/shared.ts

@@ -27,8 +27,7 @@ export const logout = async (clear = true) => {
   Promise.resolve().then(() => {
     console.log('Promise.resolve and will replace to login')
     sessionStorage.remove('LOGIN_RESULT')
-    // router.replace({ name: 'Login' })
-    router.push({ name: 'Login' })
+    router.replace({ name: 'Login' })
   })
 }