刘洋 1 year ago
parent
commit
e5c2a0bcac

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

@@ -74,10 +74,11 @@ a {
 }
 // 滚动条上的滚动滑块。
 ::-webkit-scrollbar-thumb {
-  background-color: $ScrollBarThumbColor;
+  // background-color: $ScrollBarThumbColor;
+  background:rgba(85,85,85,.3);
   border-radius: $ScrollBarThumbRadius;
   &:hover {
-    background-color: $ScrollBarThumbHoverColor;
+    background-color: rgba(85,85,85,.5);;
   }
 }
 //滚动条没有滑块的轨道部分。
@@ -110,7 +111,7 @@ a {
   // padding-left: 14px;
   background: #fff url(../images/link.png) 6px 6px no-repeat;
   background-size: 8px 8px;
-  padding:2px 8px 2px 18px;
+  padding:3px 8px 3px 18px;
   border-radius:4px;
   margin:0 4px;
   font-weight:normal;

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

@@ -65,7 +65,7 @@ $LayoutLeftMenuItemHoverColor: map-get($ep-text-color, 'regular');
 $LayoutLeftMenuItemActiveColor: map-get($ep-text-color, 'primary');
 
 /** scroll bar */
-$ScrollBarThumbWidth: 8px;
+$ScrollBarThumbWidth: 9px;
 $ScrollBarThumbRadius: 4px;
 $ScrollBarThumbColor: rgba(0, 0, 0, 0.1);
 $ScrollBarThumbHoverColor: rgba(0, 0, 0, 0.15);

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

@@ -46,6 +46,8 @@ import useVModel from '@/hooks/useVModel'
 import useVW from '@/hooks/useVW'
 import { cloneDeep } from 'lodash'
 import bus from '@/utils/bus'
+import { useRoute } from 'vue-router'
+const route = useRoute()
 import type { ExtractApiResponse } from '@/api/api'
 
 const props = defineProps<{
@@ -106,7 +108,9 @@ const addEventToPaperImg = () => {
 }
 onMounted(() => {
   document.addEventListener('keyup', yesOrNo)
-  addEventToPaperImg()
+  if (route.path === '/inquiry-result') {
+    addEventToPaperImg()
+  }
 })
 onBeforeUnmount(() => {
   document.removeEventListener('keyup', yesOrNo)

+ 17 - 3
src/components/shared/message/MessageList.vue

@@ -82,11 +82,14 @@
         <div class="p-base flex items-center justify-between">
           <!-- <el-button size="small" type="primary" :disabled="!currentMessage" @click="onReply">回复</el-button> -->
           <!-- <el-button size="small" plain :disabled="!currentMessage" @click="toggleHistory">历史消息</el-button> -->
-          <el-button v-if="showSendPaper && isFromMyLeader" size="small" plain @click="sendCurrentPaper"
+          <el-button
+            :disabled="!(showSendPaper && isFromMyLeader) || isFromSystem"
+            size="small"
+            plain
+            @click="sendCurrentPaper"
             >发送当前试卷</el-button
           >
-          <span v-else></span>
-          <el-button
+          <!-- <el-button
             v-if="isFromMyLeader"
             size="small"
             type="primary"
@@ -94,6 +97,14 @@
             :loading="sendLoading"
             @click="onSendMessage"
             >发送</el-button
+          > -->
+          <el-button
+            :disabled="!isFromMyLeader || !allowSend || isFromSystem"
+            size="small"
+            type="primary"
+            :loading="sendLoading"
+            @click="onSendMessage"
+            >发送</el-button
           >
         </div>
       </div>
@@ -189,6 +200,9 @@ const isFromMyLeader = computed(() => {
   // return isFromOther.value && currentMessage.value?.sendUserRole === 'DEPUTY'
   return mainStore?.myUserInfo?.role !== 'MARKER' || getOtherRole.value === 'DEPUTY'
 })
+const isFromSystem = computed(() => {
+  return currentMessage.value?.sendUserRole === 'SYSTEM'
+})
 function scrollToBottom() {
   let scrollHeight = historyMsgWrap.value.scrollHeight
   if (scrollHeight > 200) {

+ 9 - 2
src/hooks/useOptions.ts

@@ -25,7 +25,8 @@ const useOptions = (
   initModel?: DataModel | Ref<DataModel>,
   autoFill = true,
   subjectEnable: boolean | null = true,
-  multGroup = false
+  multGroup = false,
+  isAiCheck = false
 ) => {
   const mainStore = useMainStore()
   const isChooseAllOptionMap = reactive<any>({
@@ -123,7 +124,13 @@ const useOptions = (
           value: v.mainNumber,
         }
       }) || []
-    )
+    ).filter((v: any) => {
+      if (isAiCheck) {
+        return !!v.relationMainNumber
+      } else {
+        return v
+      }
+    })
   })
 
   const groupList = computed<Group[]>(() => {

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

@@ -16,7 +16,7 @@
             :key="i"
             v-model="model.dayWeight[i]"
             class="day-dispatch-num"
-            :step="0.01"
+            :step="0.1"
             step-strictly
             :controls="false"
           />
@@ -243,7 +243,7 @@ const items = computed<EpFormItem[]>(() => {
       slotType: 'inputNumber',
       slot: {
         placeholder: '计划评卷天数',
-        step: 0.01,
+        step: 0.1,
         stepStrictly: true,
         onChange: checkDays,
       },

+ 21 - 14
src/modules/analysis/marker-statistics/index.vue

@@ -174,6 +174,7 @@ import useMainStore from '@/store/main'
 import ScoringPanelWithConfirm from '@/components/shared/ScoringPanelWithConfirm.vue'
 import ImagePreview from '@/components/shared/ImagePreview.vue'
 import BtnPagination from '@/components/common/BtnPagination.vue'
+import SecNumberStatus from '@/components/common/secNumberStatus.vue'
 import { ElIcon } from 'element-plus'
 import { Close } from '@element-plus/icons-vue'
 import type { EChartsOption } from 'echarts'
@@ -227,14 +228,23 @@ const onRefresh = () => {
 const onPreview = () => {
   previewModalVisible.value = true
 }
-
+const model = reactive({
+  type: 'today',
+})
 const tableModel = reactive<any>({
   markerId: query.markerId,
   score: '',
   pageSize: 100,
   subjectCode: query.subjectCode as string,
   mainNumber: query.questionMainNumber as string,
+  // today: true,
 })
+watch(
+  () => model.type,
+  () => {
+    // tableModel.today = model.type === 'today'
+  }
+)
 ;(window as any)._tableModel = tableModel
 const { pagination, currentPage, data, fetchTable } = useTable('getPersonalMarkDetail', tableModel)
 const {
@@ -264,7 +274,7 @@ const onSubmit = async () => {
     current.value.corrected = res.corrected
     current.value.markerScore = res.markerScore
     current.value.objectiveScore = res.objectiveScore
-    current.value.markerRatio = res.ratio
+    current.value.ratio = res.ratio
     current.value.markTime = res.markTime
     current.value.markerScore = res.markerScore
     ElMessage.success('修改成功')
@@ -299,9 +309,6 @@ watch(
     fetchTable()
   }
 )
-const model = reactive({
-  type: 'today',
-})
 
 const formItems: EpFormItem[] = [
   {
@@ -391,15 +398,15 @@ const columns: EpTableColumn<any>[] = [
     label: '评卷员',
     prop: 'markerName',
     minWidth: 90,
-    // formatter(row: any) {
-    //   return (
-    //     <SecNumberStatus
-    //       secretNumber={row.markerName}
-    //       checked={row.checked}
-    //       corrected={row.corrected}
-    //     ></SecNumberStatus>
-    //   )
-    // },
+    formatter(row: any) {
+      return (
+        <SecNumberStatus
+          secretNumber={row.markerName}
+          checked={row.checked}
+          corrected={row.corrected}
+        ></SecNumberStatus>
+      )
+    },
   },
   {
     label: '密号',

+ 5 - 0
src/modules/analysis/personnel-compare/index.vue

@@ -177,6 +177,11 @@ const columns = computed(() => {
       formatter(row: any) {
         return row[dataType.value]
       },
+      sortMethod: function (a: any, b: any) {
+        let aValue = a[dataType.value] || 0
+        let bValue = b[dataType.value] || 0
+        return aValue - bValue
+      },
     },
     ...(result.value || { columns: [] }).columns.map((d: any) => {
       return {

+ 3 - 2
src/modules/expert/assess/index.vue

@@ -210,7 +210,7 @@ const formItems = computed<EpFormItem[]>(() => [
     label: '科目',
     prop: 'subjectCode',
     slotType: 'select',
-    labelWidth: '46px',
+    labelWidth: '50px',
     slot: { options: subjectList.value, onChange: changeModelValue('subject'), disabled: !isExpert.value },
   }),
   span10({
@@ -218,7 +218,7 @@ const formItems = computed<EpFormItem[]>(() => [
     label: '大题',
     prop: 'mainNumber',
     slotType: 'select',
-    labelWidth: '46px',
+    labelWidth: '50px',
     slot: {
       options: mainQuestionList.value,
       onChange: changeModelValue('question'),
@@ -230,6 +230,7 @@ const formItems = computed<EpFormItem[]>(() => [
     label: '组号',
     prop: 'forceGroupNumber',
     slotType: 'select',
+    labelWidth: '50px',
     slot: {
       options: forceCheckGroup.value?.map((d) => ({ value: d.forceGroupNumber, label: `第${d.forceGroupNumber}组` })),
     },

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

@@ -251,7 +251,7 @@ const formItems = computed<EpFormItem[]>(() => {
       label: '科目',
       prop: 'subjectCode',
       slotType: 'select',
-      labelWidth: '46px',
+      labelWidth: '50px',
       slot: { options: subjectList.value, onChange: changeModelValue('subject'), disabled: !isExpert.value },
     }),
     span10({
@@ -259,7 +259,7 @@ const formItems = computed<EpFormItem[]>(() => {
       label: '大题',
       prop: 'mainNumber',
       slotType: 'select',
-      labelWidth: '46px',
+      labelWidth: '70px',
       slot: {
         options: mainQuestionList.value,
         onChange: changeModelValue('question'),
@@ -271,6 +271,7 @@ const formItems = computed<EpFormItem[]>(() => {
       label: '角色',
       prop: 'role',
       slotType: 'select',
+      labelWidth: '50px',
       slot: { options: ROLE_OPTION.value },
     }),
     { rowKey: 'row-1', slotName: 'search', labelWidth: '10px', colProp: { span: 4 } },

+ 4 - 3
src/modules/expert/standard/index.vue

@@ -141,7 +141,7 @@ const formItems = computed<EpFormItem[]>(() => [
     label: '科目',
     prop: 'subjectCode',
     slotType: 'select',
-    labelWidth: '46px',
+    labelWidth: '50px',
     slot: { options: subjectList.value, onChange: changeModelValue('subject'), disabled: !isExpert.value },
   }),
   span10({
@@ -149,7 +149,7 @@ const formItems = computed<EpFormItem[]>(() => [
     label: '大题',
     prop: 'mainNumber',
     slotType: 'select',
-    labelWidth: '46px',
+    labelWidth: '50px',
     slot: {
       options: mainQuestionList.value,
       onChange: changeModelValue('question'),
@@ -161,6 +161,7 @@ const formItems = computed<EpFormItem[]>(() => [
     label: '分发',
     prop: 'dispensed',
     slotType: 'select',
+    labelWidth: '50px',
     slot: {
       options: [
         { label: '全部', value: '' },
@@ -175,7 +176,7 @@ const formItems = computed<EpFormItem[]>(() => [
     label: '分数',
     prop: 'scoreStart',
     slotType: 'input',
-    labelWidth: '46px',
+    labelWidth: '50px',
     // slotType: 'inputNumber',
     // slot: {
     //   step: 1,

+ 3 - 2
src/modules/expert/training/index.vue

@@ -167,7 +167,7 @@ const formItems = computed<EpFormItem[]>(() => [
     label: '科目',
     prop: 'subjectCode',
     slotType: 'select',
-    labelWidth: '46px',
+    labelWidth: '50px',
     slot: { options: subjectList.value, onChange: changeModelValue('subject'), disabled: !isExpert.value },
   }),
   span10({
@@ -175,7 +175,7 @@ const formItems = computed<EpFormItem[]>(() => [
     label: '大题',
     prop: 'mainNumber',
     slotType: 'select',
-    labelWidth: '46px',
+    labelWidth: '50px',
     slot: {
       options: mainQuestionList.value,
       onChange: changeModelValue('question'),
@@ -187,6 +187,7 @@ const formItems = computed<EpFormItem[]>(() => [
     label: '组号',
     prop: 'paperType',
     slotType: 'select',
+    labelWidth: '50px',
     slot: {
       options: [
         { label: 'A', value: 'SAMPLE_A' },

+ 3 - 3
src/modules/marking/arbitration/index.vue

@@ -188,7 +188,7 @@ const formItems = computed<EpFormItem[]>(() => [
     label: '科目',
     prop: 'subjectCode',
     slotType: 'select',
-    labelWidth: '46px',
+    labelWidth: '50px',
     slot: { options: subjectList.value, onChange: changeModelValue('subject'), disabled: !isExpert.value },
   }),
   span10({
@@ -196,7 +196,7 @@ const formItems = computed<EpFormItem[]>(() => [
     label: '大题',
     prop: 'mainNumber',
     slotType: 'select',
-    labelWidth: '46px',
+    labelWidth: '50px',
     slot: {
       options: mainQuestionList.value,
       onChange: changeModelValue('question'),
@@ -208,7 +208,7 @@ const formItems = computed<EpFormItem[]>(() => [
     label: '状态',
     prop: 'status',
     slotType: 'select',
-    labelWidth: '58px',
+    labelWidth: '50px',
     slot: {
       options: [
         { label: '已给分', value: 'GRADED' },

+ 50 - 21
src/modules/marking/assess/index.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="p-base">
     <div class="m-b-base flex top-box">
-      <div class="flex-1 p-base radius-base fill-blank m-r-base form-card">
+      <div class="flex-1 p-base radius-base fill-blank m-r-base form-card scroll-auto">
         <base-form
           ref="formRef"
           :label-width="'72px'"
@@ -15,18 +15,15 @@
             <base-table
               ref="tableRef"
               v-loading="paperLoading"
-              style="width: 240px"
               border
               stripe
               size="small"
               :data="paperTableData"
               :columns="[
-                { label: '密号', prop: 'secretNumber', width: 120 },
+                { label: '密号', prop: 'secretNumber' },
                 { label: '分数', prop: 'score' },
               ]"
-              max-height="180"
-              :cell-style="{ padding: '3px 0' }"
-              :header-cell-style="{ padding: '3px 0' }"
+              max-height="176"
             ></base-table>
           </template>
         </base-form>
@@ -195,6 +192,7 @@ const { formRef, elFormRef, defineColumn, _ } = useForm()
 const Span12 = defineColumn(_, '', { span: 12 })
 const Span6 = defineColumn(_, '', { span: 6 })
 const Span18 = defineColumn(_, '', { span: 18 })
+const Span24 = defineColumn(_, '', { span: 24 })
 
 const rules: EpFormRules = {
   subjectCode: [{ required: true, message: '请选择科目' }],
@@ -213,6 +211,36 @@ const groups: FormGroup[] = [
 ]
 
 const items = computed<EpFormItem[]>(() => {
+  let rowStart = 3
+  let domArr = []
+  let arr = forceCheckGroupList?.value || []
+  for (let i = 0; i < arr.length; i++) {
+    if (i % 5 == 0) {
+      domArr.push(
+        Span24({
+          rowKey: 'row-' + rowStart,
+          prop: 'forceGroupNumber',
+          slotType: 'radio',
+          slot: {
+            options: arr.slice(i, i + 5).map((v) => ({
+              label: v.forceGroupNumber,
+              slotLabel: `第${v.forceGroupNumber}组`,
+            })),
+          },
+        })
+      )
+      rowStart++
+    }
+    if (model.forceGroupNumber == arr[i].forceGroupNumber) {
+      domArr.push(
+        Span18({
+          rowKey: 'row-' + rowStart,
+          slotName: 'paperTable',
+        })
+      )
+      rowStart++
+    }
+  }
   return [
     Span12({
       rowKey: 'row-1',
@@ -236,21 +264,22 @@ const items = computed<EpFormItem[]>(() => {
         disabled: !isExpert.value && !isLeader.value,
       },
     }),
-    Span6({
-      rowKey: 'row-3',
-      prop: 'forceGroupNumber',
-      slotType: 'radio',
-      slot: {
-        options: forceCheckGroupList?.value?.map((v) => ({
-          label: v.forceGroupNumber,
-          slotLabel: `第${v.forceGroupNumber}组`,
-        })),
-      },
-    }),
-    Span18({
-      rowKey: 'row-3',
-      slotName: 'paperTable',
-    }),
+    // Span24({
+    //   rowKey: 'row-3',
+    //   prop: 'forceGroupNumber',
+    //   slotType: 'radio',
+    //   slot: {
+    //     options: forceCheckGroupList?.value?.map((v) => ({
+    //       label: v.forceGroupNumber,
+    //       slotLabel: `第${v.forceGroupNumber}组`,
+    //     })),
+    //   },
+    // }),
+    ...domArr,
+    // Span18({
+    //   rowKey: 'row-3',
+    //   slotName: 'paperTable',
+    // }),
   ]
 })
 

+ 10 - 13
src/modules/marking/inquiry-result/index.vue

@@ -354,19 +354,16 @@ const setExpertModel = reactive<SetExpertModel>({
   forceGroupNumber: 'A',
 })
 
-watch(
-  () => setExpertModel.forceGroupNumber,
-  () => {
-    if (setExpertModel.forceGroupNumber !== 'A' && setExpertModel.forceGroupNumber !== 'B')
-      getExpertAssessList({
-        subjectCode: query.subjectCode as string,
-        mainNumber: query.mainNumber as string,
-        pageNumber: 1,
-        pageSize: 9999999,
-        forceGroupNumber: setExpertModel.forceGroupNumber as any,
-      })
-  }
-)
+watch([() => setExpertModel.forceGroupNumber, setExpertPaperVisible], () => {
+  if (setExpertModel.forceGroupNumber !== 'A' && setExpertModel.forceGroupNumber !== 'B' && setExpertPaperVisible.value)
+    getExpertAssessList({
+      subjectCode: query.subjectCode as string,
+      mainNumber: query.mainNumber as string,
+      pageNumber: 1,
+      pageSize: 9999999,
+      forceGroupNumber: setExpertModel.forceGroupNumber as any,
+    })
+})
 
 const items = computed<EpFormItem[]>(() => {
   let paperTypeItems: EpFormItem[] = [

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

@@ -490,8 +490,8 @@ const deleteFastQuery = (v: any, i: number) => {
       ElMessage.success('删除成功')
       if (i == shortQueryConfigIndex.value) {
         shortQueryConfigIndex.value = void 0
-        getCustomQueryConfigList()
       }
+      getCustomQueryConfigList()
     })
 }
 </script>

+ 3 - 3
src/modules/marking/problem/index.vue

@@ -221,14 +221,14 @@ const formItems = computed<EpFormItem[]>(() => [
     label: '科目',
     prop: 'subjectCode',
     slotType: 'select',
-    labelWidth: '46px',
+    labelWidth: '50px',
     slot: { options: subjectList.value, onChange: changeModelValue('subject'), disabled: !isExpert.value },
   }),
   span10({
     rowKey: 'row-1',
     label: '大题',
     prop: 'mainNumber',
-    labelWidth: '46px',
+    labelWidth: '70px',
     slotType: 'select',
     slot: {
       options: mainQuestionList.value,
@@ -241,7 +241,7 @@ const formItems = computed<EpFormItem[]>(() => [
     label: '状态',
     prop: 'status',
     slotType: 'select',
-    labelWidth: '58px',
+    labelWidth: '50px',
     slot: {
       options: [
         { label: '未处理', value: 'INITIAL' },

+ 3 - 3
src/modules/marking/repeat/index.vue

@@ -198,7 +198,7 @@ const formItems = computed<EpFormItem[]>(() => [
     label: '科目',
     prop: 'subjectCode',
     slotType: 'select',
-    labelWidth: '46px',
+    labelWidth: '50px',
     slot: { options: subjectList.value, onChange: changeModelValue('subject'), disabled: !isExpert.value },
   }),
   span10({
@@ -206,7 +206,7 @@ const formItems = computed<EpFormItem[]>(() => [
     label: '大题',
     prop: 'mainNumber',
     slotType: 'select',
-    labelWidth: '46px',
+    labelWidth: '50px',
     slot: {
       options: mainQuestionList.value,
       onChange: changeModelValue('question'),
@@ -216,7 +216,7 @@ const formItems = computed<EpFormItem[]>(() => [
   span10({
     rowKey: 'row-2',
     label: '状态',
-    labelWidth: '46px',
+    labelWidth: '50px',
     prop: 'confirm',
     slotType: 'select',
     slot: {

+ 3 - 3
src/modules/marking/similar/index.vue

@@ -137,7 +137,7 @@ const formItems = computed<EpFormItem[]>(() => [
     label: '科目',
     prop: 'subjectCode',
     slotType: 'select',
-    labelWidth: '46px',
+    labelWidth: '70px',
     slot: { options: subjectList.value, onChange: changeModelValue('subject'), disabled: !isExpert.value },
   }),
   span10({
@@ -145,7 +145,7 @@ const formItems = computed<EpFormItem[]>(() => [
     label: '大题',
     prop: 'mainNumber',
     slotType: 'select',
-    labelWidth: '46px',
+    labelWidth: '70px',
     slot: {
       options: mainQuestionList.value,
       onChange: changeModelValue('question'),
@@ -155,7 +155,7 @@ const formItems = computed<EpFormItem[]>(() => [
   span10({
     rowKey: 'row-2',
     label: '雷同判定',
-    labelWidth: '86px',
+    labelWidth: '70px',
     prop: 'status',
     slotType: 'select',
     slot: {

+ 4 - 3
src/modules/monitor/system-check/index.vue

@@ -255,7 +255,7 @@ const formItems = computed<EpFormItem[]>(() => [
     label: '科目',
     prop: 'subjectCode',
     slotType: 'select',
-    labelWidth: '46px',
+    labelWidth: '50px',
     slot: { options: subjectList.value, onChange: changeModelValue('subject'), disabled: !isExpert.value },
   }),
   span10({
@@ -263,7 +263,7 @@ const formItems = computed<EpFormItem[]>(() => [
     label: '大题',
     prop: 'mainNumber',
     slotType: 'select',
-    labelWidth: '46px',
+    labelWidth: '50px',
     slot: {
       options: mainQuestionList.value,
       onChange: changeModelValue('question'),
@@ -275,6 +275,7 @@ const formItems = computed<EpFormItem[]>(() => [
     label: '档次',
     prop: 'level',
     slotType: 'select',
+    labelWidth: '50px',
     slot: {
       // options: [{ label: '全部', value: '' }, ...[1, 2, 3, 4, 5].map((n) => ({ label: n, value: `LEVEL_${n}` }))],
       // options: [
@@ -290,7 +291,7 @@ const formItems = computed<EpFormItem[]>(() => [
     label: '类型',
     prop: 'status',
     slotType: 'select',
-    labelWidth: '46px',
+    labelWidth: '50px',
     slot: {
       options: [
         { label: '未浏览', value: 'INITIAL' },

+ 4 - 2
src/modules/monitor/training-monitoring/hooks/useFormFilter.ts

@@ -175,8 +175,10 @@ const useFormFilter = () => {
             prop: 'dispenseRound',
             slot: {
               placeholder: '考核轮次',
-              options: roundList.value,
-              valueKey: 'round',
+              options: roundList.value.map((item: any) => {
+                item.value = item.round
+                return item
+              }),
             },
           })
         : null,

+ 8 - 4
src/modules/quality/ai-check/index.vue

@@ -230,10 +230,14 @@ const onOperationClick: OperationClick = ({ type, value }) => {
   operationHandles[type]?.(value)
 }
 
-const { subjectList, mainQuestionList, dataModel, changeModelValue, onOptionInit, isExpert, isLeader } = useOptions([
-  'subject',
-  'question',
-])
+const { subjectList, mainQuestionList, dataModel, changeModelValue, onOptionInit, isExpert, isLeader } = useOptions(
+  ['subject', 'question'],
+  {},
+  true,
+  true,
+  false,
+  true
+)
 
 const formModel = reactive<ExtractApiParams<'getAiCheckList'>>({
   subjectCode: dataModel.subject || '',