刘洋 2 лет назад
Родитель
Сommit
d058c99d35
38 измененных файлов с 309 добавлено и 272 удалено
  1. 1 0
      src/assets/icons/oldpreview.svg
  2. 1 1
      src/assets/icons/preview.svg
  3. 2 2
      src/assets/styles/app.scss
  4. 1 1
      src/assets/styles/common-var.scss
  5. 13 19
      src/assets/styles/element/custom.scss
  6. 6 2
      src/components/shared/CurrentTime.vue
  7. 47 27
      src/components/shared/MarkHeader.vue
  8. 2 2
      src/components/shared/RemarkListModal.vue
  9. 12 2
      src/components/shared/ScoringPanel.vue
  10. 8 8
      src/components/shared/ScoringPanelItem.vue
  11. 18 3
      src/components/shared/ScoringPanelWithConfirm.vue
  12. 3 2
      src/components/shared/message/Message.vue
  13. 0 61
      src/directives/dialogChange.ts
  14. 67 67
      src/directives/dialogResize.ts
  15. 0 2
      src/directives/index.ts
  16. 1 0
      src/layout/main/LeftMenu.vue
  17. 1 1
      src/modules/admin-data/export/index.vue
  18. 2 2
      src/modules/admin-data/imformation-report/index.vue
  19. 1 1
      src/modules/admin-data/marking/index.vue
  20. 2 2
      src/modules/admin-data/nav/index.vue
  21. 2 2
      src/modules/admin-data/paper/components/rf.vue
  22. 2 2
      src/modules/admin-data/paper/components/sample.vue
  23. 2 2
      src/modules/admin-data/paper/components/standard.vue
  24. 1 1
      src/modules/admin-data/task-setting/index.vue
  25. 1 1
      src/modules/admin-exam/edit-exam/index.vue
  26. 3 3
      src/modules/admin-exam/manage/index.vue
  27. 2 2
      src/modules/admin-exam/nav/index.vue
  28. 1 1
      src/modules/admin-subject/edit-main-question/index.vue
  29. 19 3
      src/modules/admin-subject/manage/index.vue
  30. 40 15
      src/modules/bootstrap/login/index.vue
  31. 2 2
      src/modules/expert/nav/index.vue
  32. 17 12
      src/modules/marking/mark/index.vue
  33. 2 2
      src/modules/marking/nav/index.vue
  34. 2 2
      src/modules/marking/standard-nav/index.vue
  35. 14 10
      src/modules/monitor/training-monitoring/hooks/useFormFilter.ts
  36. 2 2
      src/modules/monitor/training-monitoring/index.vue
  37. 7 3
      src/modules/quality/ending-check/components/EndCheck.vue
  38. 2 2
      src/modules/quality/nav/index.vue

+ 1 - 0
src/assets/icons/oldpreview.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1667813603032" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2161" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><path d="M945.92 192A14.08 14.08 0 0 1 960 206.08v611.84A14.08 14.08 0 0 1 945.92 832H78.08A14.08 14.08 0 0 1 64 817.92V206.08A14.08 14.08 0 0 1 78.08 192h867.84m0-64H78.08A78.08 78.08 0 0 0 0 206.08v611.84A78.08 78.08 0 0 0 78.08 896h867.84a78.08 78.08 0 0 0 78.08-78.08V206.08A78.08 78.08 0 0 0 945.92 128z" fill="#515151" p-id="2162"></path><path d="M64 832h611.84L320 512 64 707.2V832z m896-268.8L832 448 547.2 664.96 732.8 832H960V563.2zM192 352a96 96 0 1 0 192 0 96 96 0 1 0-192 0z" fill="#515151" p-id="2163"></path></svg>

+ 1 - 1
src/assets/icons/preview.svg

@@ -1 +1 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1667813603032" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2161" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><path d="M945.92 192A14.08 14.08 0 0 1 960 206.08v611.84A14.08 14.08 0 0 1 945.92 832H78.08A14.08 14.08 0 0 1 64 817.92V206.08A14.08 14.08 0 0 1 78.08 192h867.84m0-64H78.08A78.08 78.08 0 0 0 0 206.08v611.84A78.08 78.08 0 0 0 78.08 896h867.84a78.08 78.08 0 0 0 78.08-78.08V206.08A78.08 78.08 0 0 0 945.92 128z" fill="#515151" p-id="2162"></path><path d="M64 832h611.84L320 512 64 707.2V832z m896-268.8L832 448 547.2 664.96 732.8 832H960V563.2zM192 352a96 96 0 1 0 192 0 96 96 0 1 0-192 0z" fill="#515151" p-id="2163"></path></svg>
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M512 512m-512 0a512 512 0 1 0 1024 0 512 512 0 1 0-1024 0Z" fill="#1890FF" /><path d="M691.2 473.6V691.2h-215.04v30.72H691.2c7.68 0 15.36-2.56 20.48-7.68 5.12-5.12 10.24-10.24 10.24-17.92v-220.16H691.2zM332.8 332.8h215.04v-30.72H332.8c-7.68 0-15.36 2.56-20.48 7.68-5.12 5.12-7.68 12.8-7.68 20.48v194.56H332.8V332.8zM591.36 455.68h76.8v-30.72h-46.08l89.6-92.16c5.12-5.12 5.12-15.36 0-20.48-2.56-2.56-7.68-5.12-10.24-5.12-5.12 0-7.68 2.56-10.24 5.12L645.12 358.4l-12.8 12.8-5.12 5.12-28.16 28.16v-48.64h-30.72v76.8c2.56 12.8 12.8 23.04 23.04 23.04zM432.64 568.32h-76.8v30.72h46.08L312.32 691.2c-5.12 5.12-5.12 15.36 0 20.48 2.56 2.56 7.68 5.12 10.24 5.12 5.12 0 7.68-2.56 10.24-5.12l46.08-46.08 12.8-12.8 5.12-5.12 28.16-28.16v48.64h30.72v-76.8c-2.56-12.8-12.8-23.04-23.04-23.04z" fill="#FFFFFF" /></svg>

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

@@ -32,7 +32,7 @@ body {
   height: 100%;
   background-color: $BaseBgColor;
   font-size: $BaseFont;
-  font-weight: bold;
+  // font-weight: bold;
 }
 
 input {
@@ -108,7 +108,7 @@ a {
 
 #app {
   height: 100%;
-  min-width: 1300px;
+  min-width: 1240px;
 }
 
 

+ 1 - 1
src/assets/styles/common-var.scss

@@ -12,7 +12,7 @@ $cst-gap-space: (
   'small': 12px,
   'extra-base': 16px,
   'medium-base': 18px,
-  'base': 20px,
+  'base': 10px,
   'large': 30px,
   'super-large': 60px
 );

+ 13 - 19
src/assets/styles/element/custom.scss

@@ -216,22 +216,16 @@ button.el-button {
 
 
 
-// .el-table--border, .el-table--group {
-//   border: 1px solid red!important;
-// }
-// /**
-// 改变表格内竖线颜色
-// */
-// .el-table--border  td, .el-table--border th, .el-table__body-wrapper .el-table--border.is-scrolling-left~.el-table__fixed {
-//   border-right: 1px solid #ddd!important;
-// }
-// /**
-// 改变表格内行线颜色
-// */
-// .el-table  td, .el-table th.is-leaf  {
-//   border-bottom: 1px solid #ddd!important;
-// }
-
-// .el-table thead tr th{
-//   border-color: #8c939d;
-// }
+.keybord-dialog {
+  .el-dialog__header {
+    padding: 0 10px !important;
+  }
+  .el-dialog__body{
+    padding:10px !important;
+    height:calc(100% - 104px);
+  }
+  .el-dialog__footer{
+    padding:10px !important;
+
+  }
+}

+ 6 - 2
src/components/shared/CurrentTime.vue

@@ -1,5 +1,5 @@
 <template>
-  <div>
+  <div class="current-time-box">
     <div>停留: {{ time.joinTimeFormat }}</div>
     <div>{{ time.serverTimeFormat }}</div>
   </div>
@@ -11,4 +11,8 @@ import useTime from '@/hooks/useTime'
 const time = useTime()
 </script>
 
-<style scoped lang="scss"></style>
+<style scoped lang="scss">
+.current-time-box {
+  width: 125px;
+}
+</style>

+ 47 - 27
src/components/shared/MarkHeader.vue

@@ -1,17 +1,21 @@
 <template>
-  <div class="flex items-center p-l-base p-r-base common-mark-header">
-    <ul class="flex items-center">
-      <li
-        v-for="button in usedOperations"
-        :key="button.type"
-        :ref="(el) => bindRef(button.type, el)"
-        class="grid pointer radius-circle fill-light operation-button"
-        :title="button.title"
-        @click="onOperationClick(button)"
-      >
-        <svg-icon :name="attrs['icon-' + button.type] as string || 'mark-' + button.type"></svg-icon>
-      </li>
-    </ul>
+  <div class="flex items-center p-l-small p-r-base common-mark-header">
+    <div class="flex items-center" style="margin-top: 3px">
+      <div v-for="button in usedOperations" :key="button.type" class="btn-item">
+        <div
+          :ref="(el) => bindRef(button.type, el)"
+          class="grid pointer radius-circle fill-light operation-button"
+          :title="button.title"
+          @click="onOperationClick(button)"
+        >
+          <svg-icon
+            :name="attrs['icon-' + button.type] as string || 'mark-' + button.type"
+            style="font-size: 15px"
+          ></svg-icon>
+        </div>
+        <p class="icon-title">{{ button.title }}</p>
+      </div>
+    </div>
     <color-picker v-model="frontColor" :virtual-ref="refs['front-color']" virtual-triggering></color-picker>
     <color-picker v-model="backgroundColor" :virtual-ref="refs['background-color']" virtual-triggering></color-picker>
 
@@ -277,12 +281,21 @@ const willLogout = async () => {
 .common-mark-header {
   height: $MainLayoutHeaderHeight;
   background-color: $MainLayoutHeaderBg;
+  .btn-item {
+    width: 52px;
+    text-align: center;
+  }
+  .icon-title {
+    font-size: 8px;
+    transform: scale(0.9);
+  }
   .operation-button {
-    width: 32px;
-    height: 32px;
+    width: 30px;
+    height: 30px;
     place-items: center;
     color: $RegularFontColor;
-    margin-right: 10px;
+    margin-left: auto;
+    margin-right: auto;
     &:hover {
       background: $color--primary;
       color: $color--white;
@@ -294,28 +307,35 @@ const willLogout = async () => {
     font-size: $SmallFont;
     ::v-deep(.data-item) {
       padding-left: 20px;
-      display: flex;
-      align-items: center;
+      // display: flex;
+      // align-items: center;
       &:first-child {
         margin-left: auto;
       }
-      &:not(:last-child):after {
-        content: '';
-        margin-left: 20px;
-        display: inline-block;
-        width: 1px;
-        height: 16px;
-        vertical-align: middle;
-        background-color: #eeeeee;
-      }
+      // &:not(:last-child):after {
+      //   content: '';
+      //   margin-left: 20px;
+      //   display: inline-block;
+      //   width: 1px;
+      //   height: 16px;
+      //   vertical-align: middle;
+      //   background-color: #eeeeee;
+      // }
       &.is-last:after {
         width: 0;
       }
+      .main-ques-info {
+        text-align: center;
+        font-weight: bold;
+        color: $color--primary;
+        margin-bottom: 5px;
+      }
     }
 
     .close-icon {
       width: 32px;
       height: 32px;
+      margin-left: 10px;
       font-size: 1.4em;
       border-radius: 50%;
       place-items: center;

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

@@ -1,5 +1,5 @@
 <template>
-  <base-dialog v-model="visible" title="评卷记录" class="remark-list" :width="useVW(800)">
+  <base-dialog v-model="visible" title="评卷记录" class="remark-list" :width="800">
     <base-table
       v-if="viewType === 'list'"
       border
@@ -8,7 +8,7 @@
       :columns="tableColumns"
       :data="markHistoryList"
       highlight-current-row
-      :max-height="useVW(620)"
+      max-height="620"
       @current-change="onCurrentChange"
     ></base-table>
     <div v-else class="flex flex-wrap preview-list">

+ 12 - 2
src/components/shared/ScoringPanel.vue

@@ -3,13 +3,18 @@
     v-model="modalVisible"
     title="键盘给分"
     modal-class="no-mask"
-    :width="useVW(560)"
+    :width="'560px'"
     :modal="false"
     :can-resize="true"
+    class="keybord-dialog"
     @close="onToggleClick"
   >
     <div class="scoring-panel-box" :class="getClass('modal-box')">
       <template v-for="(question, index) in questionList" :key="question.mainNumber + question.subNumber">
+        <div class="flex dialog-name items-center">
+          <p>{{ question.mainNumber }} - {{ question.subNumber }}</p>
+          <p class="main-title">{{ question.mainTitle }}</p>
+        </div>
         <scoring-panel-item
           v-model:score="scoreValues[index]"
           v-model:scoreValidFail="scoreValidFail[index]"
@@ -25,7 +30,7 @@
       </template>
     </div>
     <template #footer>
-      <el-button type="primary" class="full-w m-t-base" :disabled="!allowSubmit" @click="onEnter(0)">确定</el-button>
+      <el-button type="primary" class="full-w" :disabled="!allowSubmit" @click="onEnter(0)">确定</el-button>
     </template>
   </scoring-panel-container>
 </template>
@@ -184,5 +189,10 @@ const onToggleClick = () => {
 .modal-box {
   max-height: 50vh;
   min-height: 8vw;
+  .dialog-name {
+    color: $color--primary;
+    font-weight: bold;
+    padding-left: 10px;
+  }
 }
 </style>

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

@@ -3,14 +3,14 @@
     <toggle-dialog-render>
       <svg-icon name="question"></svg-icon>
       <span class="m-l-mini">{{ 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>
+      </template> -->
     </toggle-dialog-render>
     <div class="flex flex-1 flex-wrap score-list">
       <div
@@ -274,16 +274,16 @@ const onToggleClick = () => {
     padding: 12px 20px;
   }
 
-  .dialog-name {
-    width: 98px;
-    place-items: center;
-    background: #f5f5f5;
-  }
+  // .dialog-name {
+  //   width: 98px;
+  //   place-items: center;
+  //   background: #f5f5f5;
+  // }
 
   .score-list {
     font-size: $BaseFont;
     margin-bottom: -8px;
-    margin-left: 8px;
+    // margin-left: 8px;
     .score-span {
       width: 46px;
       height: 32px;

+ 18 - 3
src/components/shared/ScoringPanelWithConfirm.vue

@@ -11,7 +11,7 @@
     <div class="fill-lighter p-t-base text-center">
       <div class="total-score-title">— 总分 —</div>
       <div class="m-t-extra-small">
-        <span class="score-value">{{ totalScore }}</span>
+        <span class="score-value" style="color: red">{{ totalScore }}</span>
         <span class="score-unit">分</span>
       </div>
     </div>
@@ -27,14 +27,14 @@
         >
           是(Y)
         </el-button>
-        <el-button class="confirm-button" plain @click="onCancelSubmit">否(N)</el-button>
+        <el-button ref="cancelButtonRef" class="confirm-button" plain @click="onCancelSubmit">否(N)</el-button>
       </div>
     </template>
   </base-dialog>
 </template>
 
 <script setup lang="ts" name="ScoringPanelWithConfirm">
-import { computed, ref, useAttrs, watch, nextTick } from 'vue'
+import { computed, ref, useAttrs, watch, nextTick, onMounted, onBeforeUnmount } from 'vue'
 import { add } from '@/utils/common'
 import { ElButton } from 'element-plus'
 import ScoringPanel from '@/components/shared/ScoringPanel.vue'
@@ -72,6 +72,7 @@ const submitModalVisible = ref<boolean>(false)
 
 /** 确认给分按钮 */
 const confirmButtonRef = ref<typeof ElButton>()
+const cancelButtonRef = ref<typeof ElButton>()
 
 watch(submitModalVisible, () => {
   if (submitModalVisible.value) {
@@ -80,6 +81,20 @@ watch(submitModalVisible, () => {
     })
   }
 })
+const yesOrNo = (e: any) => {
+  if (e.key === 'ArrowLeft') {
+    ;(confirmButtonRef.value?.ref as unknown as HTMLButtonElement).focus()
+  }
+  if (e.key === 'ArrowRight') {
+    ;(cancelButtonRef.value?.ref as unknown as HTMLButtonElement).focus()
+  }
+}
+onMounted(() => {
+  document.addEventListener('keyup', yesOrNo)
+})
+onBeforeUnmount(() => {
+  document.removeEventListener('keyup', yesOrNo)
+})
 
 /** 总分 */
 const totalScore = computed(() => {

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

@@ -8,7 +8,7 @@
     </div>
     <el-popover
       placement="bottom-start"
-      :width="useVW(400)"
+      :width="'400px'"
       :show-arrow="false"
       :virtual-ref="messageIcon"
       trigger="click"
@@ -79,7 +79,8 @@ const props = withDefaults(
   { type: 'view', replyUserId: null, paperPath: null, messageVisible: false }
 )
 const transContent = (content: any) => {
-  return content.replaceAll('<div>', ' ').replaceAll('<br>', ' ').replaceAll('<\/div>', '').replaceAll('<\/br>', '')
+  return content.replaceAll(/<[^>]+>/gim, ' ')
+  // return content.replaceAll('<div>', ' ').replaceAll('<br>', ' ').replaceAll('<\/div>', '').replaceAll('<\/br>', '')
 }
 const MessageComponent = defineComponent({
   setup() {

+ 0 - 61
src/directives/dialogChange.ts

@@ -1,61 +0,0 @@
-export const dialogChange = {
-  mounted(el: any, binding: any, vnode: any) {
-    setTimeout(() => {
-      // 自定义属性,判断是否可拉伸
-      if (!binding.value) return
-      const dragDom: any = document.querySelector('.can-resize')
-      console.log('dragDom:', dragDom)
-
-      const dragDomBody: any = dragDom.querySelector('.el-dialog__body')
-      dragDomBody.style.overflow = 'auto'
-      const minHeight = 300
-      const minWidth = 400
-      // 右下角设置一个图标点击拖拽缩放大小(注意:此处mouse需要与代码中的类名一致,否则会报错)
-      const dragMouse: any = document.querySelector('.mouse')
-      // 鼠标拖拽
-      dragMouse.onmousedown = (e: any) => {
-        // content区域
-        const content = dragDom.parentNode.parentNode
-        const disX = e.clientX - dragDom.offsetWidth
-        const disY = e.clientY - dragDom.offsetHeight
-
-        document.onmousemove = function (e) {
-          e.preventDefault() // 移动时禁用默认事件
-          // 通过事件委托,计算移动的距离e
-          let width = e.clientX - disX
-          let height = e.clientY - disY
-
-          if (width > content.offsetWidth && height < content.offsetHeight) {
-            if (height < minHeight) {
-              height = minHeight
-            }
-            dragDom.style.height = `${height}px`
-            // 减去头部高度
-            dragDomBody.style.maxHeight = `${height - 60}px`
-          } else if (width < content.offsetWidth && height > content.offsetHeight) {
-            if (width < minWidth) {
-              width = minWidth
-            }
-            dragDom.style.width = `${width}px`
-          } else if (width < content.offsetWidth && height < content.offsetHeight) {
-            if (height < minHeight) {
-              height = minHeight
-            }
-            if (width < minWidth) {
-              width = minWidth
-            }
-            dragDom.style.width = `${width}px`
-            dragDom.style.height = `${height}px`
-            // 减去头部高度
-            dragDomBody.style.maxHeight = `${height - 60}px`
-          }
-        }
-        document.onmouseup = function (e) {
-          document.onmousemove = null
-          document.onmouseup = null
-        }
-        return false
-      }
-    }, 50)
-  },
-}

+ 67 - 67
src/directives/dialogResize.ts

@@ -7,16 +7,16 @@ export const dialogResize = {
     // 初始化不最大化
     el.fullscreen = false
     // 弹框可拉伸最小宽高
-    const minWidth = 1100
-    const minHeight = 570
+    const minWidth = 410
+    const minHeight = 285
     // 当前宽高
-    let nowWidth = minWidth
+    const nowWidth = minWidth
     // eslint-disable-next-line no-unused-vars
-    let nowHight = minHeight
+    const nowHight = minHeight
     // 当前顶部高度
-    let nowMarginTop = 0
+    const nowMarginTop = 0
     // 获取弹框头部(这部分可双击全屏)
-    let hasSetBodyHight = false
+    const hasSetBodyHight = false
     // 弹窗
     const dragDom: any = document.querySelector('.can-resize')
     const dialogHeaderEl = dragDom.querySelector('.el-dialog__header')
@@ -25,7 +25,7 @@ export const dialogResize = {
     dragDom.className += ' el-drag-dialog'
     console.log(el)
     // 给弹窗加上overflow auto;不然缩小时框内的标签可能超出dialog;
-    dragDom.style.overflow = 'auto'
+    // dragDom.style.overflow = 'auto'
 
     const keyboardPositions = localStorage.getItem('cet-keyboard-positions')
     const keyboardResize = localStorage.getItem('cet-keyboard-resize')
@@ -102,58 +102,58 @@ export const dialogResize = {
       }
     }
     dialogHeaderEl.onmousedown = moveDown
-    let bodyHeight = 'auto'
+    // const bodyHeight = 'auto'
 
-    function setMaxMin() {
-      if (el.fullscreen) {
-        const i: any = maxMin.querySelector('.el-icon-crop')
-        i.classList.remove('el-icon-crop')
-        i.classList.add('el-icon-full-screen')
-        maxMin.innerHTML = '<i class="el-icon-full-screen"></i>'
-        maxMin.title = '最大化'
-        dragDom.style.height = nowHight + 'px'
-        dragDom.style.width = nowWidth + 'px'
-        dragDom.style.marginTop = window.innerHeight * 0.07 + 'px'
-        el.fullscreen = false
-        dialogHeaderEl.style.cursor = 'move'
-        dialogHeaderEl.onmousedown = moveDown
-        dragDom.querySelector('.el-dialog__body').style.height = bodyHeight
-        hasSetBodyHight = false
-      } else {
-        const i: any = maxMin.querySelector('.el-icon-full-screen')
-        i.classList.remove('el-icon-full-screen')
-        i.classList.add('el-icon-crop')
-        maxMin.title = '还原'
-        bodyHeight = dragDom.querySelector('.el-dialog__body').offsetHeight + 'px'
-        nowHight = dragDom.clientHeight
-        nowWidth = dragDom.clientWidth
-        nowMarginTop = dragDom.style.marginTop
-        dragDom.style.left = 0
-        dragDom.style.top = 0
-        dragDom.style.height = window.innerHeight + 'px'
-        dragDom.style.width = '100VW'
-        dragDom.style.marginTop = 0
-        el.fullscreen = true
-        dialogHeaderEl.style.cursor = 'initial'
-        dialogHeaderEl.onmousedown = null
-        if (!hasSetBodyHight) {
-          const footerHeight =
-            dragDom.querySelector('.el-dialog__footer') && dragDom.querySelector('.el-dialog__footer').offsetHeight
-          dragDom.querySelector('.el-dialog__body').style.height =
-            'calc(100% - ' + (dialogHeaderEl.offsetHeight + footerHeight) + 'px)'
-          /*          dragDom.querySelector('.el-dialog__body').style.height =
-              window.innerHeight*0.9
-               - (dialogHeaderEl.offsetHeight + footerHeight) + 'px'*/
-          hasSetBodyHight = true
-        }
-      }
-      el.dispatchEvent(resizeEvent)
-    }
+    // function setMaxMin() {
+    //   if (el.fullscreen) {
+    //     const i: any = maxMin.querySelector('.el-icon-crop')
+    //     i.classList.remove('el-icon-crop')
+    //     i.classList.add('el-icon-full-screen')
+    //     maxMin.innerHTML = '<i class="el-icon-full-screen"></i>'
+    //     maxMin.title = '最大化'
+    //     dragDom.style.height = nowHight + 'px'
+    //     dragDom.style.width = nowWidth + 'px'
+    //     dragDom.style.marginTop = window.innerHeight * 0.07 + 'px'
+    //     el.fullscreen = false
+    //     dialogHeaderEl.style.cursor = 'move'
+    //     dialogHeaderEl.onmousedown = moveDown
+    //     dragDom.querySelector('.el-dialog__body').style.height = bodyHeight
+    //     hasSetBodyHight = false
+    //   } else {
+    //     const i: any = maxMin.querySelector('.el-icon-full-screen')
+    //     i.classList.remove('el-icon-full-screen')
+    //     i.classList.add('el-icon-crop')
+    //     maxMin.title = '还原'
+    //     bodyHeight = dragDom.querySelector('.el-dialog__body').offsetHeight + 'px'
+    //     nowHight = dragDom.clientHeight
+    //     nowWidth = dragDom.clientWidth
+    //     nowMarginTop = dragDom.style.marginTop
+    //     dragDom.style.left = 0
+    //     dragDom.style.top = 0
+    //     dragDom.style.height = window.innerHeight + 'px'
+    //     dragDom.style.width = '100VW'
+    //     dragDom.style.marginTop = 0
+    //     el.fullscreen = true
+    //     dialogHeaderEl.style.cursor = 'initial'
+    //     dialogHeaderEl.onmousedown = null
+    //     if (!hasSetBodyHight) {
+    //       const footerHeight =
+    //         dragDom.querySelector('.el-dialog__footer') && dragDom.querySelector('.el-dialog__footer').offsetHeight
+    //       dragDom.querySelector('.el-dialog__body').style.height =
+    //         'calc(100% - ' + (dialogHeaderEl.offsetHeight + footerHeight) + 'px)'
+    //       /*          dragDom.querySelector('.el-dialog__body').style.height =
+    //           window.innerHeight*0.9
+    //            - (dialogHeaderEl.offsetHeight + footerHeight) + 'px'*/
+    //       hasSetBodyHight = true
+    //     }
+    //   }
+    //   el.dispatchEvent(resizeEvent)
+    // }
 
     // 点击放大缩小效果
-    maxMin.onclick = setMaxMin
+    // maxMin.onclick = setMaxMin
     // 双击头部效果
-    dialogHeaderEl.ondblclick = setMaxMin
+    // dialogHeaderEl.ondblclick = setMaxMin
     // 拉伸
     const resizeEl = document.createElement('div')
     dragDom.appendChild(resizeEl)
@@ -178,17 +178,17 @@ export const dialogResize = {
         const x = e.clientX - disX + (e.clientX - clientX) // 这里 由于elementUI的dialog控制居中的,所以水平拉伸效果是双倍
         const y = e.clientY - disY
         // 比较是否小于最小宽高
-        // dragDom.style.width = x > minWidth ? `${x}px` : minWidth + 'px'
-        // dragDom.style.height = y > minHeight ? `${y}px` : minHeight + 'px'
-        dragDom.style.width = `${x}px`
-        dragDom.style.height = `${y}px`
-        if (!hasSetBodyHight) {
-          const footerHeight =
-            dragDom.querySelector('.el-dialog__footer') && dragDom.querySelector('.el-dialog__footer').offsetHeight
-          dragDom.querySelector('.el-dialog__body').style.height =
-            'calc(100% - ' + (dialogHeaderEl.offsetHeight + footerHeight) + 'px)'
-          hasSetBodyHight = true
-        }
+        dragDom.style.width = x > minWidth ? `${x}px` : minWidth + 'px'
+        dragDom.style.height = y > minHeight ? `${y}px` : minHeight + 'px'
+        // dragDom.style.width = `${x}px`
+        // dragDom.style.height = `${y}px`
+        // if (!hasSetBodyHight) {
+        //   const footerHeight =
+        //     dragDom.querySelector('.el-dialog__footer') && dragDom.querySelector('.el-dialog__footer').offsetHeight
+        //   dragDom.querySelector('.el-dialog__body').style.height =
+        //     'calc(100% - ' + (dialogHeaderEl.offsetHeight + footerHeight) + 'px)'
+        //   hasSetBodyHight = true
+        // }
       }
       // 拉伸结束
       document.onmouseup = function (e) {
@@ -198,7 +198,7 @@ export const dialogResize = {
           'cet-keyboard-resize',
           JSON.stringify({
             width: dragDom.style.width || 'auto',
-            height: dragDom.style.top || 'auto',
+            height: dragDom.style.height || 'auto',
           })
         )
         el.dispatchEvent(resizeEvent)

+ 0 - 2
src/directives/index.ts

@@ -1,7 +1,5 @@
-// import { dialogChange } from './dialogChange'
 import { dialogResize } from './dialogResize'
 
 export function setupDirectives(app: any) {
-  // app.directive('dialogChange', dialogChange)
   app.directive('dialogResize', dialogResize)
 }

+ 1 - 0
src/layout/main/LeftMenu.vue

@@ -66,6 +66,7 @@ const onHandle = () => {
 .main-layout-left-menu {
   padding: $BaseGapSpace 0;
   border-right: none;
+  font-weight: bold;
 }
 .main-layout-left-menu {
   :deep(.el-sub-menu .el-menu-item) {

+ 1 - 1
src/modules/admin-data/export/index.vue

@@ -64,7 +64,7 @@ const items = computed<EpFormItem[]>(() => {
       slotType: 'select',
       slot: { options: subjectList.value, onChange: changeModelValue('subject') },
     }),
-    OneRowSpan5({ slotName: 'operation', labelWidth: useVW(20) }),
+    OneRowSpan5({ slotName: 'operation', labelWidth: '20px' }),
   ]
 })
 

+ 2 - 2
src/modules/admin-data/imformation-report/index.vue

@@ -15,7 +15,7 @@
             <el-link v-if="!!row.filePath" download target="_blank" type="primary" :href="row.filePath">下载</el-link>
             <el-popconfirm
               v-if="row.status !== 'PROCESSING'"
-              :width="useVW(220)"
+              :width="'220px'"
               hide-icon
               title="是否该条记录?"
               @confirm="handleDeleteRecord(row)"
@@ -69,7 +69,7 @@ const items = computed<EpFormItem[]>(() => {
         onChange: changeModelValue,
       },
     }),
-    OneRowSpan5({ slotName: 'operation', labelWidth: useVW(20) }),
+    OneRowSpan5({ slotName: 'operation', labelWidth: '20px' }),
   ]
 })
 

+ 1 - 1
src/modules/admin-data/marking/index.vue

@@ -3,7 +3,7 @@
     <el-card shadow="never" class="form-card">
       <base-form
         ref="formRef"
-        :label-width="useVW(120)"
+        :label-width="'120px'"
         :disabled="loading"
         :groups="groups"
         :model="model"

+ 2 - 2
src/modules/admin-data/nav/index.vue

@@ -39,9 +39,9 @@ const { hasPermissions } = useNavPermissions()
 
 <style scoped lang="scss">
 .nav-page {
-  padding: 100px 100px 0 100px;
+  padding: 80px 80px 0 80px;
   .nav-card {
-    width: 420px;
+    width: 410px;
     height: 180px;
     background: url(@img/nav-page-card.png) no-repeat center center / cover;
     padding: 32px;

+ 2 - 2
src/modules/admin-data/paper/components/rf.vue

@@ -1,7 +1,7 @@
 <template>
   <base-form
     ref="formRef"
-    :label-width="useVW(120)"
+    :label-width="'120px'"
     :rules="rules"
     :groups="groups"
     :items="items"
@@ -131,7 +131,7 @@ const items = computed<EpFormItem[]>(() => {
     span8({
       rowKey: 'row-1',
       label: '大题',
-      labelWidth: useVW(100),
+      labelWidth: '100px',
       prop: 'mainNumber',
       slotType: 'select',
       slot: { placeholder: '选择大题', options: mainQuestionList.value, onChange: changeModelValue('question') },

+ 2 - 2
src/modules/admin-data/paper/components/sample.vue

@@ -1,7 +1,7 @@
 <template>
   <base-form
     ref="formRef"
-    :label-width="useVW(120)"
+    :label-width="'120px'"
     :groups="groups"
     :rules="rules"
     :items="items"
@@ -134,7 +134,7 @@ const items = computed<EpFormItem[]>(() => {
     span8({
       rowKey: 'row-1',
       label: '大题',
-      labelWidth: useVW(100),
+      labelWidth: '100px',
       prop: 'mainNumber',
       slotType: 'select',
       slot: { placeholder: '选择大题', options: mainQuestionList.value, onChange: changeModelValue('question') },

+ 2 - 2
src/modules/admin-data/paper/components/standard.vue

@@ -1,5 +1,5 @@
 <template>
-  <base-form :label-width="useVW(88)" :groups="groups" :rules="rules" :items="items" :model="model">
+  <base-form :label-width="'88px'" :groups="groups" :rules="rules" :items="items" :model="model">
     <template #form-item-address>
       <span class="flex items-center">
         {{ filePath }}
@@ -70,7 +70,7 @@ const items = computed<EpFormItem[]>(() => {
     span6({
       rowKey: 'row-1',
       label: '大题',
-      labelWidth: useVW(100),
+      labelWidth: '100p',
       prop: 'mainNumber',
       slotType: 'select',
       slot: { placeholder: '选择大题', options: mainQuestionList.value, onChange: changeModelValue('question') },

+ 1 - 1
src/modules/admin-data/task-setting/index.vue

@@ -7,7 +7,7 @@
         :model="taskSettingModel"
         :items="items"
         :rules="rules"
-        :label-width="useVW(120)"
+        :label-width="'120px'"
       >
         <template #form-item-un-mark>
           <span class="un-mark-count">{{ unMarkTasks?.unmarkCount ?? 0 }}</span>

+ 1 - 1
src/modules/admin-exam/edit-exam/index.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="p-base">
     <el-card shadow="never">
-      <base-form ref="formRef" :label-width="useVW(160)" :items="items" :rules="rules" :model="model">
+      <base-form ref="formRef" :label-width="'160px'" :items="items" :rules="rules" :model="model">
         <el-form-item>
           <confirm-button :loading="loading" @confirm="onSubmit" @cancel="back()"></confirm-button>
         </el-form-item>

+ 3 - 3
src/modules/admin-exam/manage/index.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="full flex direction-column exam-manage-view">
     <div class="p-t-base p-l-base fill-blank">
-      <base-form :items="items" :model="model" :label-width="useVW(88)" size="small">
+      <base-form :items="items" :model="model" :label-width="'88px'" size="small">
         <template #form-item-button>
           <el-button :loading="loading" type="primary" @click="onSearch">查询</el-button>
           <el-button special @click="onCreateExam">创建考试</el-button>
@@ -14,7 +14,7 @@
           <template #column-operation="{ row }">
             <el-button type="primary" link @click="onEdit(row)">编辑</el-button>
             <el-popconfirm
-              :width="useVW(220)"
+              :width="'220px'"
               hide-icon
               :title="`确认${row.enable ? '禁用' : '启用'}考试?`"
               @confirm="toggleEnable(row)"
@@ -25,7 +25,7 @@
                 </el-button>
               </template>
             </el-popconfirm>
-            <el-popconfirm :width="useVW(220)" hide-icon :title="`确认删除考试?`" @confirm="onDelete(row)">
+            <el-popconfirm :width="'220px'" hide-icon :title="`确认删除考试?`" @confirm="onDelete(row)">
               <template #reference>
                 <el-button type="primary" link>删除</el-button>
               </template>

+ 2 - 2
src/modules/admin-exam/nav/index.vue

@@ -31,9 +31,9 @@ const { hasPermissions } = useNavPermissions()
 
 <style scoped lang="scss">
 .nav-page {
-  padding: 100px 100px 0 100px;
+  padding: 80px 80px 0 80px;
   .nav-card {
-    width: 420px;
+    width: 410px;
     height: 180px;
     background: url(@img/nav-page-card.png) no-repeat center center / cover;
     padding: 32px;

+ 1 - 1
src/modules/admin-subject/edit-main-question/index.vue

@@ -3,7 +3,7 @@
     <el-card shadow="never">
       <base-form
         ref="formRef"
-        :label-width="useVW(150)"
+        :label-width="'150px'"
         size="small"
         :groups="groups"
         :model="model"

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

@@ -8,7 +8,7 @@
     </div>
     <div class="flex-1 p-base">
       <el-card shadow="never">
-        <base-table border stripe size="small" :columns="columns" :data="data">
+        <base-table border stripe size="small" :columns="columns" :data="data" @row-dblclick="onViewSubjectStruct">
           <template #column-operation="{ row }">
             <el-button type="primary" link @click="onEdit(row)">编辑</el-button>
             <el-popconfirm
@@ -46,7 +46,7 @@
 /** 科目管理 */
 import { reactive, ref, computed } from 'vue'
 import { useRouter } from 'vue-router'
-import { ElButton, ElCard, ElPopconfirm, ElFormItem, ElMessage } from 'element-plus'
+import { ElButton, ElCard, ElPopconfirm, ElFormItem, ElMessage, ElIcon } from 'element-plus'
 import ConfirmButton from '@/components/common/ConfirmButton.vue'
 import BaseSelect from '@/components/element/BaseSelect.vue'
 import BaseForm from '@/components/element/BaseForm.vue'
@@ -58,6 +58,7 @@ 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 type { EpFormItem, EpFormRules, EpTableColumn } from 'global-type'
 import type { ExtractApiParams, ExtractMultipleApiResponse } from '@/api/api'
@@ -71,7 +72,22 @@ const model = reactive({ code: '' })
 const { data, fetchTable, loading } = useTable('getSubjectList', model)
 
 const columns: EpTableColumn<ExtractMultipleApiResponse<'getSubjectList'>>[] = [
-  { label: '科目代码', prop: 'code' },
+  {
+    label: '科目代码',
+    prop: 'code',
+    formatter(row: any) {
+      return row.subjectiveScore == 0 ? (
+        row.code
+      ) : (
+        <p style="display:flex;align-items:center">
+          <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>
+      )
+    },
+  },
   {
     label: '科目名称',
     prop: 'name',

+ 40 - 15
src/modules/bootstrap/login/index.vue

@@ -11,6 +11,17 @@
           :rules="loginRules"
           size="large"
         >
+          <template #form-item-password>
+            <el-input
+              ref="pwdRef"
+              v-model="loginModel.password"
+              type="password"
+              clearable
+              placeholder="请输入登录密码"
+              show-password
+              @keydown="pwdKeyDown"
+            ></el-input>
+          </template>
           <el-button type="primary" class="full-w m-t-base" :loading="loading" @click="onSubmit"> 立即登录 </el-button>
         </base-form>
       </div>
@@ -21,7 +32,7 @@
 <script setup lang="ts" name="Login">
 import { reactive, shallowRef, ref } from 'vue'
 import { useRouter } from 'vue-router'
-import { ElButton } from 'element-plus'
+import { ElButton, ElInput } from 'element-plus'
 import BaseForm from '@/components/element/BaseForm.vue'
 import useMainStore from '@/store/main'
 import useMainLayoutStore from '@/store/layout'
@@ -31,7 +42,7 @@ import { sessionStorage } from '@/plugins/storage'
 
 import type { EpFormItem, EpFormRules } from 'global-type'
 import type { ExtractApiParams, ExtractApiResponse } from '@/api/api'
-
+const pwdRef = ref(null)
 const { replace } = useRouter()
 
 const mainStore = useMainStore()
@@ -54,25 +65,39 @@ const formItems = shallowRef<EpFormItem[]>([
     prop: 'loginName',
     slot: {
       placeholder: '请输入登录账号',
+      onKeydown(event: any) {
+        if (event.keyCode == 13) {
+          if (loginModel.password.length > 0) {
+            onSubmit()
+          } else {
+            ;(pwdRef.value as any).ref.focus()
+          }
+        }
+      },
     },
   },
   {
-    slotType: 'input',
+    // slotType: 'input',
     prop: 'password',
-    slot: {
-      type: 'password',
-      placeholder: '请输入登录密码',
-      clearable: true,
-      showPassword: true,
-      onKeydown(event) {
-        if ((event as KeyboardEvent).key === 'Enter') {
-          onSubmit()
-        }
-      },
-    },
+    slotName: 'password',
+    // slot: {
+    //   type: 'password',
+    //   placeholder: '请输入登录密码',
+    //   clearable: true,
+    //   showPassword: true,
+    //   onKeydown(event) {
+    //     if ((event as KeyboardEvent).key === 'Enter') {
+    //       onSubmit()
+    //     }
+    //   },
+    // },
   },
 ])
-
+const pwdKeyDown = (e: any) => {
+  if (e.key === 'Enter') {
+    onSubmit()
+  }
+}
 async function onSubmit() {
   if (!elFormRef?.value) {
     return

+ 2 - 2
src/modules/expert/nav/index.vue

@@ -55,9 +55,9 @@ const { hasPermissions } = useNavPermissions()
 
 <style scoped lang="scss">
 .nav-page {
-  padding: 100px 100px 0 100px;
+  padding: 80px 80px 0 80px;
   .nav-card {
-    width: 420px;
+    width: 410px;
     height: 180px;
     background: url(@img/nav-page-card.png) no-repeat center center / cover;
     padding: 32px;

+ 17 - 12
src/modules/marking/mark/index.vue

@@ -1,15 +1,18 @@
 <template>
   <div class="flex direction-column full">
     <mark-header :exclude-operations="excludeOperations" :paper-path="currentTask?.url" @click="onOperationClick">
-      <span class="data-item">
+      <div class="data-item">
         已评: {{ markStatus?.personCount || 0 }} /
         {{ minus(markStatus?.totalCount || 0, markStatus?.markedCount || 0) }}
-      </span>
-      <span v-show="currentTask" class="data-item">密号: {{ currentTask?.secretNumber }}</span>
-      <span v-show="currentTask" class="data-item">{{ currentTask?.mainNumber }}-{{ currentTask?.mainTitle }}</span>
-      <span class="data-item">
+      </div>
+      <!-- <span v-show="currentTask" class="data-item">密号: {{ currentTask?.secretNumber }}</span> -->
+      <div v-show="currentTask" class="data-item">
+        <p class="main-ques-info">{{ currentTask?.mainNumber }}-{{ currentTask?.mainTitle }}</p>
+        <p>密号: {{ currentTask?.secretNumber }}</p>
+      </div>
+      <div class="data-item">
         <current-time></current-time>
-      </span>
+      </div>
     </mark-header>
     <div class="flex-1 overflow-hidden p-base mark-container">
       <div
@@ -447,19 +450,21 @@ fetchStandard()
     .mark-status {
       display: inline-block;
       width: 24px;
-      position: sticky;
+      position: absolute;
       cursor: pointer;
-      top: 0;
-      left: 0;
+      top: 20px;
+      left: 20px;
+      z-index: 100;
       img {
         max-width: 100%;
       }
     }
     .preview {
-      position: sticky;
+      position: absolute;
       cursor: pointer;
-      top: 0;
-      left: 888px;
+      z-index: 100;
+      top: 20px;
+      left: 60px;
       font-size: 24px;
     }
   }

+ 2 - 2
src/modules/marking/nav/index.vue

@@ -95,9 +95,9 @@ const { hasPermissions } = useNavPermissions()
 
 <style scoped lang="scss">
 .nav-page {
-  padding: 100px 100px 0 100px;
+  padding: 80px 80px 0 80px;
   .nav-card {
-    width: 420px;
+    width: 410px;
     height: 180px;
     background: url(@img/nav-page-card.png) no-repeat center center / cover;
     padding: 32px;

+ 2 - 2
src/modules/marking/standard-nav/index.vue

@@ -28,9 +28,9 @@
 
 <style scoped lang="scss">
 .nav-page {
-  padding: 100px 100px 0 100px;
+  padding: 80px 80px 0 80px;
   .nav-card {
-    width: 420px;
+    width: 410px;
     height: 180px;
     background: url(@img/nav-page-card.png) no-repeat center center / cover;
     padding: 32px;

+ 14 - 10
src/modules/monitor/training-monitoring/hooks/useFormFilter.ts

@@ -80,8 +80,9 @@ const useFormFilter = () => {
     }
   })
 
-  const OneRowSpan5 = defineColumn(_, 'row-1', { span: 5 })
-  const TwoRowSpan5 = defineColumn(_, 'row-2', { span: 5 })
+  const OneRowSpan2 = defineColumn(_, 'row-1', { span: 2 })
+  const OneRowSpan5 = defineColumn(_, 'row-1', { span: 3 })
+  // const TwoRowSpan5 = defineColumn(_, 'row-2', { span: 5 })
 
   const items = computed<EpFormItem[]>(() => {
     return [
@@ -89,7 +90,7 @@ const useFormFilter = () => {
         label: '科目',
         prop: 'subjectCode',
         slotType: 'select',
-        labelWidth: '72px',
+        labelWidth: '50px',
         slot: {
           options: subjectList.value,
           onChange: changeModelValue('subject'),
@@ -100,6 +101,7 @@ const useFormFilter = () => {
         prop: 'mainNumber',
         label: '大题',
         slotType: 'select',
+        labelWidth: '50px',
         slot: {
           options: mainQuestionList.value,
           onChange: changeModelValue('question'),
@@ -110,20 +112,18 @@ const useFormFilter = () => {
         prop: 'markingGroupNumber',
         label: '小组',
         slotType: 'select',
+        labelWidth: '50px',
         slot: {
           options: groupListWithAll.value,
           onChange: changeModelValue('group'),
         },
       }),
+
       OneRowSpan5({
-        labelWidth: 20,
-        slotName: 'operation',
-      }),
-      TwoRowSpan5({
         label: '试卷类型',
         slotType: 'select',
         prop: 'markStage',
-        labelWidth: '60px',
+        labelWidth: '74px',
         slot: {
           placeholder: '试卷类型',
           options: [
@@ -134,7 +134,7 @@ const useFormFilter = () => {
         },
       }),
       model.markStage === 'FORCE'
-        ? TwoRowSpan5({
+        ? OneRowSpan5({
             label: '强制考核组',
             slotType: 'select',
             prop: 'forceGroupNumber',
@@ -144,12 +144,16 @@ const useFormFilter = () => {
             },
           })
         : null,
-      TwoRowSpan5({
+      OneRowSpan5({
         label: '差值展示',
         slotType: 'checkbox',
         prop: 'diffShow',
         slot: { options: [{ label: '是' }] },
       }),
+      OneRowSpan2({
+        labelWidth: 20,
+        slotName: 'operation',
+      }),
     ].filter(Boolean) as EpFormItem[]
   })
 

+ 2 - 2
src/modules/monitor/training-monitoring/index.vue

@@ -72,9 +72,9 @@ import type { ExtractApiResponse } from '@/api/api'
 import type { EpTableColumn } from 'global-type'
 
 type TableDataType = ExtractArrayValue<ExtractApiResponse<'getTrainingMonitor'>['data']>
-const tableMaxHeight = ref(300)
+const tableMaxHeight = ref(400)
 onBeforeMount(() => {
-  tableMaxHeight.value = window.innerHeight - 300
+  tableMaxHeight.value = window.innerHeight - 210
 })
 const { push } = useRouter()
 

+ 7 - 3
src/modules/quality/ending-check/components/EndCheck.vue

@@ -12,7 +12,7 @@
         <div class="flex items-center m-b-base table-title">
           <span class="label">在评卷员手中</span>
           <span class="data-count">{{ unMarkPaperList?.result?.length }}</span>
-          <el-button type="primary" size="small" @click="onTaskChangeMarker">任务指定评卷员</el-button>
+          <el-button type="primary" size="small" @click="onTaskChangeMarker">任务指定</el-button>
         </div>
         <base-table
           v-loading="loading1"
@@ -29,7 +29,7 @@
         <div class="flex items-center m-b-base table-title">
           <span class="label">打回中的试卷</span>
           <span class="data-count">{{ unMarkBackPaperList?.result?.length }}</span>
-          <el-button type="primary" size="small" @click="onTaskChangeMarker2">任务指定评卷员</el-button>
+          <el-button type="primary" size="small" @click="onTaskChangeMarker2">任务指定</el-button>
         </div>
         <base-table
           v-loading="loading4"
@@ -178,12 +178,14 @@ watch(dataModel, () => {
 const { defineColumn, _ } = useForm()
 
 const OneRow = defineColumn(_, 'row-1', { span: 6 })
+const btnRow = defineColumn(_, 'row-1', { span: 2 })
 
 const items = computed<EpFormItem[]>(() => [
   OneRow({
     label: '大题',
     prop: 'questionMainNumber',
     slotType: 'select',
+    labelWidth: '60px',
     slot: {
       options: mainQuestionList.value,
       onChange: changeModelValue('question'),
@@ -194,13 +196,15 @@ const items = computed<EpFormItem[]>(() => [
     label: '小组',
     prop: 'markingGroupNumber',
     slotType: 'select',
+    labelWidth: '60px',
     slot: {
       options: groupListWithAll.value,
       onChange: changeModelValue('group'),
     },
   }),
-  OneRow({
+  btnRow({
     slotName: 'button',
+    labelWidth: '20px',
   }),
 ])
 

+ 2 - 2
src/modules/quality/nav/index.vue

@@ -47,9 +47,9 @@ const { hasPermissions } = useNavPermissions()
 
 <style scoped lang="scss">
 .nav-page {
-  padding: 100px 100px 0 100px;
+  padding: 80px 80px 0 80px;
   .nav-card {
-    width: 420px;
+    width: 410px;
     height: 180px;
     background: url(@img/nav-page-card.png) no-repeat center center / cover;
     padding: 32px;