刘洋 1 سال پیش
والد
کامیت
09f8168d04

+ 2 - 1
src/assets/styles/element/custom.scss

@@ -257,7 +257,8 @@ body {
     }
     }
   }
   }
   .el-loading-mask {
   .el-loading-mask {
-    z-index: 1200 !important;
+    // z-index: 1200 !important;
+    z-index: 3000 !important;
   }
   }
   .el-loading-parent--relative {
   .el-loading-parent--relative {
     pointer-events: auto !important;
     pointer-events: auto !important;

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

@@ -9,7 +9,7 @@
     class="keybord-dialog"
     class="keybord-dialog"
     @close="onToggleClick"
     @close="onToggleClick"
   >
   >
-    <div class="scoring-panel-box" :class="getClass('modal-box')">
+    <div v-loading="props.loading" class="scoring-panel-box" :class="getClass('modal-box')">
       <template v-for="(question, index) in questionList" :key="question.mainNumber + question.subNumber">
       <template v-for="(question, index) in questionList" :key="question.mainNumber + question.subNumber">
         <div v-if="dialogMode" class="flex dialog-name items-center">
         <div v-if="dialogMode" class="flex dialog-name items-center">
           <p>{{ question.mainNumber }} - {{ question.subNumber }}</p>
           <p>{{ question.mainNumber }} - {{ question.subNumber }}</p>
@@ -27,6 +27,7 @@
           :large="props.large"
           :large="props.large"
           :allow-submit="allowSubmit"
           :allow-submit="allowSubmit"
           :cannot-toggle="props.cannotToggle"
           :cannot-toggle="props.cannotToggle"
+          :loading="props.loading"
           @blur="() => onBlur(index)"
           @blur="() => onBlur(index)"
           @enter="() => onEnter(index)"
           @enter="() => onEnter(index)"
           @focused="() => onFocused(index)"
           @focused="() => onFocused(index)"
@@ -68,6 +69,7 @@ const props = withDefaults(
     autoVisible?: boolean | undefined
     autoVisible?: boolean | undefined
     large?: boolean
     large?: boolean
     cannotToggle?: boolean
     cannotToggle?: boolean
+    loading?: boolean
   }>(),
   }>(),
   {
   {
     modal: false,
     modal: false,
@@ -79,6 +81,7 @@ const props = withDefaults(
     autoVisible: true,
     autoVisible: true,
     large: true,
     large: true,
     cannotToggle: false,
     cannotToggle: false,
+    loading: false,
   }
   }
 )
 )
 
 

+ 13 - 1
src/components/shared/ScoringPanelItem.vue

@@ -35,6 +35,7 @@
               ref="refInput1"
               ref="refInput1"
               class="flex-1 text-center score-input score-num"
               class="flex-1 text-center score-input score-num"
               :value="currentScore"
               :value="currentScore"
+              :readonly="props.loading"
               @focus="onInputFocus"
               @focus="onInputFocus"
               @blur="onBlur"
               @blur="onBlur"
               @keydown="onValidScoreDebounce"
               @keydown="onValidScoreDebounce"
@@ -59,6 +60,7 @@
           ref="refInput2"
           ref="refInput2"
           class="score-input radius-base"
           class="score-input radius-base"
           :value="currentScore"
           :value="currentScore"
+          :readonly="props.loading"
           @focus="onInputFocus"
           @focus="onInputFocus"
           @blur="onBlur"
           @blur="onBlur"
           @keydown="onValidScoreDebounce"
           @keydown="onValidScoreDebounce"
@@ -120,8 +122,18 @@ const props = withDefaults(
     showConfirmBtn?: boolean
     showConfirmBtn?: boolean
     cannotToggle?: boolean
     cannotToggle?: boolean
     id?: any
     id?: any
+    loading?: any
   }>(),
   }>(),
-  { modal: false, toggleModal: true, score: void 0, scoreValidFail: false, large: true, cannotToggle: false, id: null }
+  {
+    modal: false,
+    toggleModal: true,
+    score: void 0,
+    scoreValidFail: false,
+    large: true,
+    cannotToggle: false,
+    id: null,
+    loading: false,
+  }
 )
 )
 
 
 const emit = defineEmits(['focused', 'blur', 'toggle-click', 'enter', 'update:score'])
 const emit = defineEmits(['focused', 'blur', 'toggle-click', 'enter', 'update:score'])

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

@@ -8,6 +8,7 @@
     :subject-code="props.subjectCode"
     :subject-code="props.subjectCode"
     :large="props.large ?? false"
     :large="props.large ?? false"
     :cannot-toggle="props.cannotToggle"
     :cannot-toggle="props.cannotToggle"
+    :loading="props.loading"
     @submit="onSubmit"
     @submit="onSubmit"
   ></scoring-panel>
   ></scoring-panel>
   <base-dialog v-model="submitModalVisible" unless :width="260" center>
   <base-dialog v-model="submitModalVisible" unless :width="260" center>
@@ -62,6 +63,7 @@ const props = defineProps<{
   large?: boolean
   large?: boolean
   cannotToggle?: boolean
   cannotToggle?: boolean
   id?: any
   id?: any
+  loading?: any
 }>()
 }>()
 
 
 const attrs = useAttrs()
 const attrs = useAttrs()

+ 1 - 1
src/layout/PauseMarker.vue

@@ -17,7 +17,7 @@
   </div>
   </div>
 </template>
 </template>
 <script lang="ts" setup name="PauseMarker">
 <script lang="ts" setup name="PauseMarker">
-import { ElInput, ElButton, ElForm, ElMessage, ElProgress } from 'element-plus'
+import { ElInput, ElButton, ElForm, ElMessage, ElProgress, ElFormItem } from 'element-plus'
 import { onMounted, reactive, ref, computed } from 'vue'
 import { onMounted, reactive, ref, computed } from 'vue'
 // import StandardDialog from '@/components/shared/StandardDialog.vue'
 // import StandardDialog from '@/components/shared/StandardDialog.vue'
 import useFetch from '@/hooks/useFetch'
 import useFetch from '@/hooks/useFetch'

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

@@ -24,15 +24,15 @@
     </div>
     </div>
     <div class="flex fill-blank detail-info">
     <div class="flex fill-blank detail-info">
       <splitpanes class="default-theme" style="height: 100%">
       <splitpanes class="default-theme" style="height: 100%">
-        <pane max-size="80" :size="64" class="flex p-base detail-info-chart">
-          <div style="width: 50%">
+        <pane max-size="80" :size="64" class="flex p-base detail-info-chart justify-between">
+          <div style="width: 48%">
             <vue-echarts class="full" :option="markerSubjectiveChartsOption" autoresize></vue-echarts>
             <vue-echarts class="full" :option="markerSubjectiveChartsOption" autoresize></vue-echarts>
           </div>
           </div>
-          <div class="flex-1 m-l-base">
+          <div style="width: 48%">
             <vue-echarts class="full" :option="markerObjectiveChartsOption" autoresize></vue-echarts>
             <vue-echarts class="full" :option="markerObjectiveChartsOption" autoresize></vue-echarts>
           </div>
           </div>
         </pane>
         </pane>
-        <pane max-size="80" :size="36" class="flex direction-column p-extra-small">
+        <pane max-size="65" :size="36" class="flex direction-column p-extra-small">
           <div class="flex items-center justify-between detail-info-table-header m-b-mini">
           <div class="flex items-center justify-between detail-info-table-header m-b-mini">
             <el-button custom-1 size="small" class="detail-info-label">
             <el-button custom-1 size="small" class="detail-info-label">
               <span class="">{{ dataType }}试卷总数:</span>
               <span class="">{{ dataType }}试卷总数:</span>

+ 32 - 19
src/modules/analysis/marking-progress/components/TotalProgress.vue

@@ -495,7 +495,8 @@ const groupChartsOption = computed<EChartsOption>(() => {
     legend: {
     legend: {
       right: 0,
       right: 0,
       itemWidth: 14,
       itemWidth: 14,
-      data: ['完成总量', '当日已完成', '完成比'],
+      // data: ['完成总量', '当日已完成', '完成比'],
+      data: ['完成总量', '当日已完成'],
     },
     },
     xAxis: {
     xAxis: {
       axisLine: { show: false },
       axisLine: { show: false },
@@ -510,13 +511,13 @@ const groupChartsOption = computed<EChartsOption>(() => {
       {
       {
         type: 'value',
         type: 'value',
       },
       },
-      {
-        type: 'value',
-        axisLabel: {
-          formatter: `{value}%`,
-        },
-        splitLine: { show: false },
-      },
+      // {
+      //   type: 'value',
+      //   axisLabel: {
+      //     formatter: `{value}%`,
+      //   },
+      //   splitLine: { show: false },
+      // },
     ],
     ],
     series: [
     series: [
       {
       {
@@ -532,23 +533,35 @@ const groupChartsOption = computed<EChartsOption>(() => {
         name: '当日已完成',
         name: '当日已完成',
         type: 'bar',
         type: 'bar',
         barWidth: 20,
         barWidth: 20,
+        barGap: '40%',
         itemStyle: {
         itemStyle: {
           color: '#3AD500',
           color: '#3AD500',
         },
         },
         data: getXAxisData('dayFinishCount', groupProgressResult?.value),
         data: getXAxisData('dayFinishCount', groupProgressResult?.value),
-      },
-      {
-        name: '完成比',
-        type: 'bar',
-        barWidth: 20,
-        // showBackground: true,
-        barGap: '-200%',
-        yAxisIndex: 1,
-        itemStyle: {
-          color: 'rgba(0, 186, 151,0.3)',
+        label: {
+          show: true,
+          color: '#444',
+          fontSize: 10,
+          position: 'top',
+          formatter(params: any) {
+            // return value > 0 ? `${value}` : ''
+            let arr: any = getXAxisData('finishRate', groupProgressResult?.value)
+            return arr[params.dataIndex] ? arr[params.dataIndex] + '%' : ''
+          },
         },
         },
-        data: getXAxisData('finishRate', groupProgressResult?.value),
       },
       },
+      // {
+      //   name: '完成比',
+      //   type: 'bar',
+      //   barWidth: 20,
+      //   // showBackground: true,
+      //   barGap: '-200%',
+      //   yAxisIndex: 1,
+      //   itemStyle: {
+      //     color: 'rgba(0, 186, 151,0.3)',
+      //   },
+      //   data: getXAxisData('finishRate', groupProgressResult?.value),
+      // },
     ],
     ],
   }
   }
 })
 })

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

@@ -62,6 +62,7 @@
           :main-number="currentTask?.mainNumber"
           :main-number="currentTask?.mainNumber"
           :subject-code="mainStore.myUserInfo?.subjectCode"
           :subject-code="mainStore.myUserInfo?.subjectCode"
           :large="true"
           :large="true"
+          :loading="mergeLoading"
           @submit="onSubmit"
           @submit="onSubmit"
         ></scoring-panel-with-confirm>
         ></scoring-panel-with-confirm>
       </div>
       </div>
@@ -217,7 +218,7 @@ const excludeOperations = computed<excludeOperationTypes>(() => {
 
 
 const { fetch: getMarkingTask, loading } = useFetch('getMarkingTask')
 const { fetch: getMarkingTask, loading } = useFetch('getMarkingTask')
 const { fetch: submitMarkTask, loading: submitting } = useFetch('submitMarkTask')
 const { fetch: submitMarkTask, loading: submitting } = useFetch('submitMarkTask')
-const { fetch: getMarkStatus, result: markStatus } = useFetch('getMarkStatus')
+const { fetch: getMarkStatus, result: markStatus, loading: statusLoading } = useFetch('getMarkStatus')
 
 
 const historyTaskChange = (task: any) => {
 const historyTaskChange = (task: any) => {
   let saveTargetTask = unref(currentTask)
   let saveTargetTask = unref(currentTask)
@@ -490,12 +491,19 @@ const clearTaskView = () => {
   handleTaskPool()
   handleTaskPool()
   currentTask.value = undefined
   currentTask.value = undefined
 }
 }
+
+const getUserInfoLoading = ref(false)
+const mergeLoading = computed(() => {
+  return submitting.value || getUserInfoLoading.value || statusLoading.value
+})
 const checkMarkStatus = async (): Promise<boolean> => {
 const checkMarkStatus = async (): Promise<boolean> => {
   if (currentTask.value?.taskType === 'FORCE') {
   if (currentTask.value?.taskType === 'FORCE') {
     return true
     return true
   }
   }
   // let myUserInfo: any = await useFetch('getMyUserInfo').fetch()
   // let myUserInfo: any = await useFetch('getMyUserInfo').fetch()
+  getUserInfoLoading.value = true
   let myUserInfo: any = (await mainStore.getMyUserInfo()) || {}
   let myUserInfo: any = (await mainStore.getMyUserInfo()) || {}
+  getUserInfoLoading.value = false
   //markDayCount表示该用户当天的任务量限制,markTotalCount表示该用户总任务量限制
   //markDayCount表示该用户当天的任务量限制,markTotalCount表示该用户总任务量限制
   const { markDayCount, markTotalCount } = myUserInfo
   const { markDayCount, markTotalCount } = myUserInfo
   let res: any = await getMarkStatus()
   let res: any = await getMarkStatus()