刘洋 2 жил өмнө
parent
commit
e33b690246

+ 3 - 1
package.json

@@ -28,6 +28,7 @@
     "element-plus": "2.2.17",
     "lodash-es": "4.17.21",
     "pinia": "2.0.23",
+    "splitpanes": "^3.1.5",
     "vue": "3.2.40",
     "vue-echarts": "6.2.3",
     "vue-router": "4.1.5"
@@ -37,6 +38,7 @@
     "@types/crypto-js": "^4.1.1",
     "@types/lodash-es": "^4.17.6",
     "@types/offscreencanvas": "^2019.7.0",
+    "@types/splitpanes": "^2.2.1",
     "@typescript-eslint/eslint-plugin": "^5.38.0",
     "@typescript-eslint/parser": "^5.38.0",
     "@vitejs/plugin-vue": "^3.1.0",
@@ -70,4 +72,4 @@
       "eslint --fix"
     ]
   }
-}
+}

+ 3 - 0
src/assets/styles/app.scss

@@ -114,4 +114,7 @@ a {
 
 img {
   pointer-events: none
+}
+.splitpanes.default-theme .splitpanes__pane {
+  background-color: #fff !important;
 }

+ 58 - 0
src/directives/dialogChange.ts

@@ -0,0 +1,58 @@
+import Vue from 'vue'
+export const dialogChange = {
+  mounted(el: any, binding: any, vnode: any, oldVnode: any) {
+    // 自定义属性,判断是否可拉伸
+    if (!binding.value) return
+    const dragDom = el.querySelector('.el-dialog')
+    const dragDomBody = el.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.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
+    }
+  },
+}

+ 5 - 0
src/directives/index.ts

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

+ 5 - 3
src/main.ts

@@ -4,14 +4,16 @@ import router from '@/router'
 import App from '@/App.vue'
 import useECharts from '@/plugins/echarts'
 import bootstrap from '@/bootstrap'
+import { setupDirectives } from '@/directives'
 import 'virtual:svg-icons-register'
-
+import { ElLoading } from 'element-plus'
+import 'element-plus/theme-chalk/el-loading.css'
 import '@style/app.scss'
 
 import 'element-plus/theme-chalk/src/message.scss'
 
-const app = createApp(App).use(createPinia()).use(router)
-
+const app = createApp(App).use(createPinia()).use(router).use(ElLoading)
+setupDirectives(app)
 useECharts()
 
 app.mount('#app')

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

@@ -29,7 +29,7 @@
   <base-dialog v-model="setLevelRangeVisible" title="档次设置" destroy-on-close>
     <div class="level-list">
       <div v-for="([start, end], index) in levelRanges" :key="index" class="flex items-center level-row">
-        <div class="m-r-base level-label">档次({{ start }}~{{ end }})</div>
+        <div class="m-r-base level-label">档次 - ({{ start }}~{{ end }})</div>
         <div class="flex items-center level-input">
           <el-input-number
             v-model="levelRangValues[index]"
@@ -73,17 +73,25 @@ const props = defineProps<{ subjectCode: string; mainNumber?: number | string }>
 
 const isEdit = !!props.mainNumber
 
+// const levelRanges = [
+//   [0, 2],
+//   [3, 5],
+//   [6, 8],
+//   [9, 11],
+//   [12, 14],
+// ]
 const levelRanges = [
-  [0, 2],
-  [3, 5],
-  [6, 8],
-  [9, 11],
-  [12, 14],
+  [0, 0],
+  [1, 3],
+  [4, 6],
+  [7, 9],
+  [10, 12],
+  [13, 15],
 ]
 
 const setLevelRangeVisible = ref<boolean>(false)
 
-const levelRangValues = ref<number[]>(Array.from<number>({ length: 5 }).fill(0))
+const levelRangValues = ref<number[]>(Array.from<number>({ length: 6 }).fill(0))
 
 const { fetch: getMainQuestionInfo } = useFetch('getMainQuestionInfo')
 
@@ -102,7 +110,7 @@ const model = reactive<ExtractApiParams<'addMainQuestion'>>({
   questionScore: void 0,
   remarkNumber: void 0,
   remarkType: 'QUANTITY',
-  levelRange: Array.from<number>({ length: 5 }).fill(0),
+  levelRange: Array.from<number>({ length: 6 }).fill(0),
   standardRate: void 0,
   selfRate: void 0,
   systemRate: void 0,

+ 2 - 1
src/modules/analysis/monitoring/index.vue

@@ -248,6 +248,7 @@ const getColumns = (
   return [
     {
       label: '老师ID',
+      align: 'center',
       formatter(row) {
         return row.markerId === 0 ? (
           '全体'
@@ -258,7 +259,7 @@ const getColumns = (
         )
       },
     },
-    { label: valueLabel, prop: 'value', align: 'right' },
+    { label: valueLabel, prop: 'value', align: 'center' },
   ]
 }
 

+ 74 - 0
src/modules/analysis/personnel-statistics/components/RightKeyMenu.vue

@@ -0,0 +1,74 @@
+// right-key-menu.vue
+<template>
+  <div ref="rkm" class="right-key-menu">
+    <div class="rightKeyMenuItem" @click="emits('onSetWorkload', unref(curRow))">设置工作量</div>
+    <div class="rightKeyMenuItem" @click="emits('onSendMessage', unref(curRow))">发送消息</div>
+  </div>
+</template>
+<script setup lang="ts" name="RightKeyMenu">
+import { ref, onUnmounted, unref } from 'vue'
+let rkm = ref()
+const emits = defineEmits(['rightClick', 'onSetWorkload', 'onSendMessage'])
+const fun = () => {
+  emits('rightClick')
+}
+const curRow = ref({})
+const onload = (row: any, column: any, event: any) => {
+  curRow.value = row
+  let betweenHeight = document.body.clientHeight - event.clientY
+  if (betweenHeight < 150) {
+    rkm.value.style.top = event.clientY - 80 + 'px'
+  } else {
+    rkm.value.style.top = event.clientY - 30 + 'px'
+  }
+  rkm.value.style.left = event.clientX + 20 + 'px'
+  document.addEventListener('click', fun)
+}
+onUnmounted(() => {
+  document.removeEventListener('click', fun)
+})
+defineExpose({
+  onload,
+})
+</script>
+<style scoped>
+.right-key-menu {
+  display: block;
+  line-height: 30px;
+  text-align: center;
+}
+.right-key-menu:not(:last-child) {
+  border-bottom: 1px solid rgba(0, 0, 0, 0.1);
+}
+.right-key-menu {
+  position: fixed;
+  left: 0;
+  top: 0;
+  background-color: #fff;
+  width: 90px;
+  font-size: 14px;
+  color: #666;
+  border-radius: 4px;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  border-radius: 3px;
+  white-space: nowrap;
+  z-index: 1000;
+
+  border: 1px solid #e4e7ed;
+  box-shadow: 0px 0px 0.71429vw rgba(0, 0, 0, 0.12);
+  min-width: 8.92857vw;
+  text-align: justify;
+  word-break: break-all;
+  padding: 10px 0;
+}
+.rightKeyMenuItem {
+  padding: 5px 20px;
+}
+.rightKeyMenuItem:hover {
+  cursor: pointer;
+  background: #0091ff;
+  /* border-color: #66b1ff; */
+  color: #fff;
+}
+</style>

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

@@ -74,8 +74,8 @@ const columns: EpTableColumn<ExtractArrayValue<ExtractApiResponse<'getStatistics
   { align: 'center', label: '近5分钟最低分', prop: 'scoreLow', width: 100 },
   { align: 'center', label: '近5分钟客主比', prop: 'objSubRate', width: 100 },
   { align: 'center', label: '平均客主比', prop: 'objSubAvgRate', width: 90 },
-  { align: 'center', label: '在线', prop: 'online', width: 46 },
-  { align: 'center', label: '状态', prop: 'markingStatus', width: 46 },
+  { align: 'center', label: '在线', prop: 'online', width: 52 },
+  { align: 'center', label: '状态', prop: 'markingStatus', width: 80 },
   { align: 'center', label: '速度', prop: 'markingRate', width: 46 },
   { align: 'center', label: '综合系数', prop: 'integration', width: 70 },
 ]

+ 52 - 26
src/modules/analysis/personnel-statistics/components/StatisticsPersonnel.vue

@@ -11,9 +11,10 @@
       highlight-current-row
       @current-change="onCurrentChange"
       @row-dblclick="onDbClick"
+      @row-contextmenu="rowContextmenu"
     >
       <template #column-marker="{ row }">
-        <el-popover
+        <!-- <el-popover
           v-if="row.markerId"
           :ref="(popover: any) => setPopoverRefs(row.markerId,popover)"
           trigger="contextmenu"
@@ -33,7 +34,8 @@
               <el-button link>发送消息</el-button>
             </el-menu-item>
           </el-menu>
-        </el-popover>
+        </el-popover> -->
+        <span v-if="row.markerId">{{ row.markerName }}</span>
         <span v-else>题组</span>
       </template>
     </base-table>
@@ -47,11 +49,18 @@
     </div>
   </div>
   <set-workload v-model="setWorkloadVisible" :data="setWorkloadData" />
+  <right-key-menu
+    v-show="visable"
+    ref="rightKeyMenu"
+    @right-click="rightClick"
+    @on-set-workload="onSetWorkload"
+    @on-send-message="onSendMessage"
+  ></right-key-menu>
 </template>
 
 <script setup lang="tsx" name="StatisticsPersonnel">
 /** 人员数据统计-按人员展开 */
-import { ref, inject, computed, watch } from 'vue'
+import { ref, inject, computed, watch, nextTick } from 'vue'
 import { useRouter } from 'vue-router'
 import { ElButton, ElPopover, ElMenu, ElMenuItem } from 'element-plus'
 import VueECharts from 'vue-echarts'
@@ -60,12 +69,17 @@ import SetWorkload from './SetWorkload.vue'
 import useVW, { usePX } from '@/hooks/useVW'
 import useFetch from '@/hooks/useFetch'
 import useTableCheck from '@/hooks/useTableCheck'
+import RightKeyMenu from './RightKeyMenu.vue'
 
 import type { EChartsOption } from 'echarts'
 import type { ExtractApiResponse, ExtractApiParams } from '@/api/api'
 import type { EpTableColumn } from 'global-type'
 import type { PopoverInstance } from 'element-plus'
 
+const rightKeyMenu = ref(null)
+const rightClick = () => {
+  visable.value = false
+}
 const props = defineProps<{
   data: ExtractApiResponse<'getStatisticsByGroup'>
   params: ExtractApiParams<'getStatisticsByGroup'> & { expand: boolean }
@@ -80,43 +94,55 @@ const columns: EpTableColumn<ExtractArrayValue<ExtractApiResponse<'getStatistics
   {
     label: '小组',
     prop: 'markingGroupNumber',
-    width: usePX(52),
+    width: 52,
     fixed: 'left',
     formatter(row) {
       return row.markingGroupNumber === 0 ? '全部' : `第${row.markingGroupNumber}组`
     },
   },
-  { label: '评卷员', prop: 'markerName', minWidth: usePX(84), slotName: 'marker' },
-  { align: 'center', label: '评卷份数', prop: 'markingPaperCount', width: usePX(72) },
-  { align: 'center', label: '当日可阅', prop: 'markDayCount', width: usePX(72) },
-  { align: 'center', label: '剩余可阅', prop: 'todoMarkDayCount', width: usePX(72) },
-  { align: 'center', label: '客观题0分量', prop: 'objectiveZero', width: usePX(100) },
-  { align: 'center', label: '客观平均分', prop: 'objectiveAvg', width: usePX(76) },
-  { align: 'center', label: '客观标准差', prop: 'objectiveStd', width: usePX(76) },
-  { align: 'center', label: '重评/待确认', prop: 'reMarkUnConfirmCount', width: usePX(106) },
-  { align: 'center', label: '抽查量', prop: 'checkCount', width: usePX(52) },
-  { align: 'center', label: '抽查改正量', prop: 'checkCorrectCount', width: usePX(76) },
-  { align: 'center', label: '相关系数', prop: 'xyRelate', width: usePX(64) },
-  { align: 'center', label: '平均分', prop: 'avg', width: usePX(52) },
-  { align: 'center', label: '标准差', prop: 'std', width: usePX(52) },
-  { align: 'center', label: '近5分钟最高分', prop: 'scoreTop', width: usePX(96) },
-  { align: 'center', label: '近5分钟最低分', prop: 'scoreLow', width: usePX(96) },
-  { align: 'center', label: '近5分钟客主比', prop: 'objSubRate', width: usePX(96) },
-  { align: 'center', label: '平均客主比', prop: 'objSubAvgRate', width: usePX(76) },
+  { label: '评卷员', prop: 'markerName', minWidth: 84, slotName: 'marker' },
+  { align: 'center', label: '评卷份数', prop: 'markingPaperCount', width: 72 },
+  { align: 'center', label: '当日可阅', prop: 'markDayCount', width: 72 },
+  { align: 'center', label: '剩余可阅', prop: 'todoMarkDayCount', width: 72 },
+  { align: 'center', label: '客观题0分量', prop: 'objectiveZero', width: 100 },
+  { align: 'center', label: '客观平均分', prop: 'objectiveAvg', width: 90 },
+  { align: 'center', label: '客观标准差', prop: 'objectiveStd', width: 80 },
+  { align: 'center', label: '重评/待确认', prop: 'reMarkUnConfirmCount', width: 100 },
+  { align: 'center', label: '抽查量', prop: 'checkCount', width: 70 },
+  { align: 'center', label: '抽查改正量', prop: 'checkCorrectCount', width: 90 },
+  { align: 'center', label: '相关系数', prop: 'xyRelate', width: 70 },
+  { align: 'center', label: '平均分', prop: 'avg', width: 60 },
+  { align: 'center', label: '标准差', prop: 'std', width: 60 },
+  { align: 'center', label: '近5分钟最高分', prop: 'scoreTop', width: 100 },
+  { align: 'center', label: '近5分钟最低分', prop: 'scoreLow', width: 100 },
+  { align: 'center', label: '近5分钟客主比', prop: 'objSubRate', width: 100 },
+  { align: 'center', label: '平均客主比', prop: 'objSubAvgRate', width: 90 },
   {
     align: 'center',
     label: '在线',
     prop: 'online',
-    width: usePX(40),
+    width: 52,
     formatter(row) {
       return row.online ? '在线' : '离线'
     },
   },
-  { align: 'center', label: '状态', prop: 'markingStatus', width: usePX(40) },
-  { align: 'center', label: '速度', prop: 'markingRate', width: usePX(40) },
-  { align: 'center', label: '综合系数', prop: 'integration', width: usePX(64) },
+  { align: 'center', label: '状态', prop: 'markingStatus', width: 80 },
+  { align: 'center', label: '速度', prop: 'markingRate', width: 46 },
+  { align: 'center', label: '综合系数', prop: 'integration', width: 70 },
 ]
-
+const visable = ref(false)
+const rowContextmenu = (row: any, column: any, event: any) => {
+  console.log(row, column, event)
+  visable.value = false
+  setTimeout(() => {
+    visable.value = true
+  }, 50)
+  event.preventDefault()
+  nextTick(() => {
+    // alert(1)
+    ;(rightKeyMenu.value as any).onload(row, column, event)
+  })
+}
 const popovers = ref<Record<string, PopoverInstance>>({})
 
 const setWorkloadVisible = ref<boolean>(false)

+ 4 - 1
src/modules/analysis/statistics/index.vue

@@ -17,6 +17,8 @@
           <div class="p-base card-title">{{ card.title }}</div>
           <div class="p-l-extra-base p-r-mini p-b-extra-small flex-1 overflow-hidden">
             <base-table
+              border
+              stripe
               size="small"
               height="100%"
               :columns="getColumns(card.valueLabel)"
@@ -216,6 +218,7 @@ const getColumns = (
   return [
     {
       label: '老师ID',
+      align: 'center',
       formatter(row) {
         return row.markerId === 0 ? (
           '全体'
@@ -226,7 +229,7 @@ const getColumns = (
         )
       },
     },
-    { label: valueLabel, prop: 'value', align: 'right' },
+    { label: valueLabel, prop: 'value', align: 'center' },
   ]
 }
 

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

@@ -205,7 +205,8 @@ const formItems = computed<EpFormItem[]>(() => [
     prop: 'level',
     slotType: 'select',
     slot: {
-      options: [{ label: '全部', value: '' }, ...[1, 2, 3, 4, 5].map((n) => ({ label: n, value: `LEVEL_${n}` }))],
+      // options: [{ label: '全部', value: '' }, ...[1, 2, 3, 4, 5].map((n) => ({ label: n, value: `LEVEL_${n}` }))],
+      options: [{ label: '全部', value: '' }, ...[0, 2, 5, 8, 11, 14].map((n) => ({ label: n, value: `LEVEL_${n}` }))],
     },
   }),
   { rowKey: 'row-1', slotName: 'search', labelWidth: '10px', colProp: { span: 4 } },

+ 28 - 5
src/modules/quality/ending-check/components/EndCheck.vue

@@ -15,6 +15,7 @@
           <el-button type="primary" size="small" @click="onTaskChangeMarker">任务指定评卷员</el-button>
         </div>
         <base-table
+          v-loading="loading1"
           border
           stripe
           size="small"
@@ -29,14 +30,28 @@
           <span class="label">未处理问题卷</span>
           <span class="data-count">{{ unProcessProblemList?.length }}</span>
         </div>
-        <base-table border stripe size="small" :columns="columns2" :data="unProcessProblemList"></base-table>
+        <base-table
+          v-loading="loading2"
+          border
+          stripe
+          size="small"
+          :columns="columns2"
+          :data="unProcessProblemList"
+        ></base-table>
       </div>
       <div class="radius-base fill-blank p-base overflow-hidden m-l-base flex-1">
         <div class="flex items-center m-b-base table-title">
           <span class="label">未处理雷同卷</span>
           <span class="data-count">{{ unProcessSimilarList?.length }}</span>
         </div>
-        <base-table border stripe size="small" :columns="columns3" :data="unProcessSimilarList"></base-table>
+        <base-table
+          v-loading="loading3"
+          border
+          stripe
+          size="small"
+          :columns="columns3"
+          :data="unProcessSimilarList"
+        ></base-table>
       </div>
     </div>
   </div>
@@ -95,9 +110,17 @@ const model = reactive<ExtractApiParams<'unProcessProblemList'>>({
   subjectCode: dataModel.subject || '',
 })
 
-const { fetch: getUnMarkPaperList, result: unMarkPaperList } = useFetch('unMarkPaperList')
-const { fetch: getUnProcessProblemList, result: unProcessProblemList } = useFetch('unProcessProblemList')
-const { fetch: getUnProcessSimilarList, result: unProcessSimilarList } = useFetch('unProcessSimilarList')
+const { fetch: getUnMarkPaperList, result: unMarkPaperList, loading: loading1 } = useFetch('unMarkPaperList')
+const {
+  fetch: getUnProcessProblemList,
+  result: unProcessProblemList,
+  loading: loading2,
+} = useFetch('unProcessProblemList')
+const {
+  fetch: getUnProcessSimilarList,
+  result: unProcessSimilarList,
+  loading: loading3,
+} = useFetch('unProcessSimilarList')
 
 watch(dataModel, () => {
   model.subjectCode = dataModel.subject || ''

+ 3 - 2
src/modules/quality/ending-check/components/SubjectProgress.vue

@@ -1,10 +1,11 @@
 <template>
   <div class="p-base">
     <div class="fill-blank radius-base p-base chart-info">
-      <vue-e-charts class="full" :option="totalChartsOption" autoresize></vue-e-charts>
+      <vue-e-charts v-loading="loading" class="full" :option="totalChartsOption" autoresize></vue-e-charts>
     </div>
     <div class="m-t-base fill-blank radius-base p-base">
       <base-table
+        v-loading="loading"
         border
         stripe
         size="small"
@@ -33,7 +34,7 @@ type SubjectProgress = ExtractArrayValue<ExtractApiResponse<'subjectProgressEnd'
 
 const mainStore = useMainStore()
 
-const { fetch: subjectProgressEnd, result: subjectProgressEndList } = useFetch('subjectProgressEnd')
+const { fetch: subjectProgressEnd, result: subjectProgressEndList, loading } = useFetch('subjectProgressEnd')
 
 subjectProgressEnd({ subjectCode: mainStore.myUserInfo?.subjectCode || '' })
 

+ 48 - 35
src/modules/quality/subjective-check/index.vue

@@ -23,41 +23,52 @@
         </div>
       </div>
       <div class="p-base radius-base fill-blank scroll-auto m-l-base table-view">
-        <base-form size="small" :model="formModel" :items="formItems" :label-width="useVW(80)">
-          <template #form-item-search>
-            <el-button :loading="loading" type="primary" @click="onSearch">查询</el-button>
-          </template>
-        </base-form>
-        <div class="m-b-mini">
-          <el-button custom-1 size="small" class="detail-info-label">
-            <span class="">{{ statusText }}: 共</span>
-            <span class="m-l-extra-small detail-info-label-num">{{ tableData.length }}</span>
-          </el-button>
-        </div>
-        <base-table
-          ref="tableRef"
-          border
-          stripe
-          size="small"
-          height="45vh"
-          :data="tableData"
-          :columns="columns"
-          highlight-current-row
-          @current-change="onCurrentChange"
-        ></base-table>
-        <base-table
-          v-if="currentSubjectiveCheck"
-          border
-          stripe
-          class="m-t-base"
-          size="small"
-          height="150px"
-          :data="[currentSubjectiveCheck]"
-          :columns="subColumns"
-          @row-dblclick="onDbClick"
-        >
-          <template #empty> 暂无数据 </template>
-        </base-table>
+        <splitpanes class="default-theme" horizontal style="height: 100%">
+          <pane max-size="100" size="70" style="overflow: auto">
+            <base-form
+              size="small"
+              :model="formModel"
+              :items="formItems"
+              :label-width="useVW(80)"
+              style="margin-top: 20px"
+            >
+              <template #form-item-search>
+                <el-button :loading="loading" type="primary" @click="onSearch">查询</el-button>
+              </template>
+            </base-form>
+            <div class="m-b-mini">
+              <el-button custom-1 size="small" class="detail-info-label">
+                <span class="">{{ statusText }}: 共</span>
+                <span class="m-l-extra-small detail-info-label-num">{{ tableData.length }}</span>
+              </el-button>
+            </div>
+            <base-table
+              ref="tableRef"
+              border
+              stripe
+              size="small"
+              :data="tableData"
+              :columns="columns"
+              highlight-current-row
+              @current-change="onCurrentChange"
+            ></base-table>
+          </pane>
+          <pane max-size="100" size="30">
+            <base-table
+              v-if="currentSubjectiveCheck"
+              border
+              stripe
+              class="m-t-base"
+              size="small"
+              height="150px"
+              :data="[currentSubjectiveCheck]"
+              :columns="subColumns"
+              @row-dblclick="onDbClick"
+            >
+              <template #empty> 暂无数据 </template>
+            </base-table>
+          </pane>
+        </splitpanes>
       </div>
     </div>
   </div>
@@ -99,6 +110,8 @@ import SvgIcon from '@/components/common/SvgIcon.vue'
 import type { SetImgBgOption } from '@/hooks/useSetImgBg'
 import type { ExtractMultipleApiResponse, ExtractApiParams } from '@/api/api'
 import type { MarkHeaderInstance, EpFormItem, EpTableColumn } from 'global-type'
+import { Splitpanes, Pane } from 'splitpanes'
+import 'splitpanes/dist/splitpanes.css'
 
 type RowType = ExtractMultipleApiResponse<'getSubjectiveCheckList'> & { index: number }