소스 검색

计划评卷天数支持按天分配

刘洋 1 년 전
부모
커밋
4d9c855119
3개의 변경된 파일88개의 추가작업 그리고 16개의 파일을 삭제
  1. 2 2
      server.config.ts
  2. 2 1
      src/api/api-types/system.d.ts
  3. 84 13
      src/modules/admin-data/marking/index.vue

+ 2 - 2
server.config.ts

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

+ 2 - 1
src/api/api-types/system.d.ts

@@ -10,11 +10,12 @@ export namespace System {
     packageTaskCount?: number
     separator: string
     subjectCode: string
+    dayWeight: any[]
   }
 
   type ImportMarkingData = BaseDefine<MarkingDataImport>
 
-  type ExportStudentTask = BaseDefine<{ subjectCode: string; mainNumber: number | string; dayNumber: number }>
+  type ExportStudentTask = BaseDefine<{ subjectCode: string; mainNumber: number | string; dayNumber?: number }>
 
   /** 获取导入文件路径 */
   type GetImportFilePath = BaseDefine<

+ 84 - 13
src/modules/admin-data/marking/index.vue

@@ -10,6 +10,17 @@
         :items="items"
         :rules="rules"
       >
+        <template #form-item-dayWeight>
+          <el-input-number
+            v-for="(v, i) in model.dayWeight"
+            :key="i"
+            v-model="model.dayWeight[i]"
+            class="day-dispatch-num"
+            :step="0.01"
+            step-strictly
+            :controls="false"
+          />
+        </template>
         <template #form-item-address>
           <span class="flex items-center">
             {{ filePath }}
@@ -51,7 +62,7 @@
 <script setup lang="ts" name="DataMarking">
 /** 导入评卷数据 */
 import { computed, nextTick, reactive, ref, watch } from 'vue'
-import { ElButton, ElInput, ElCard, ElFormItem, ElUpload, ElProgress, ElMessage } from 'element-plus'
+import { ElButton, ElInput, ElCard, ElFormItem, ElUpload, ElProgress, ElMessage, ElInputNumber } from 'element-plus'
 import { useTimeoutFn } from '@vueuse/core'
 import ConfirmButton from '@/components/common/ConfirmButton.vue'
 import BaseForm from '@/components/element/BaseForm.vue'
@@ -63,7 +74,7 @@ import useVW from '@/hooks/useVW'
 
 import type { FormGroup, EpFormItem, EpFormRules } from 'global-type'
 import type { ExtractApiParams } from '@/api/api'
-
+import { omit } from 'lodash-es'
 // const allowImport = ref<boolean>(false)
 const allowImport = ref<boolean>(true)
 
@@ -109,6 +120,7 @@ const model = reactive<ExtractApiParams<'importMarkingData'>>({
   packageTaskCount: 5,
   dayNumber: void 0,
   file: void 0,
+  dayWeight: [],
 })
 
 watch(dataModel, () => {
@@ -148,16 +160,52 @@ const rules: EpFormRules = {
   ],
   separator: [{ required: true, message: '请设置分隔符' }],
   file: [{ required: true, message: '请选择导入文件' }],
+  dayWeight: [
+    { required: true, message: '请完善按天分配值' },
+    {
+      validator: (rule: any, value: any, callback: any) => {
+        if (!model.dayWeight.every((v) => !!v)) {
+          callback(new Error('每日分配的数值不能为空或者0'))
+        } else if (
+          Number(
+            model.dayWeight.reduce((total: number, v: number) => {
+              return (total * 100 + v * 100) / 100
+            }, 0) !== Number(model.dayNumber)
+          )
+        ) {
+          callback(new Error('相加总和必须等于计划评卷天数'))
+        } else {
+          callback()
+        }
+      },
+    },
+  ],
 }
 
 const groups: FormGroup[] = [
   { groupTitle: '选择大题', rowKeys: ['row-1'] },
-  { groupTitle: '任务设置', rowKeys: ['row-2', 'row-3', 'row-4'] },
-  { groupTitle: '选择文件', rowKeys: ['row-5'] },
+  { groupTitle: '任务设置', rowKeys: ['row-2', 'row-3', 'row-4', 'row-5'] },
+  { groupTitle: '选择文件', rowKeys: ['row-6'] },
 ]
 
 const span7 = defineColumn(_, '', { span: 7 })
-
+const span24 = defineColumn(_, '', { span: 24 })
+const showDayWeight = ref(false)
+const checkDays = (val: any) => {
+  console.log(val, typeof val)
+  const isFloat = String(val).indexOf('.') > -1
+  showDayWeight.value = isFloat
+  if (!isFloat) {
+    model.dayWeight = new Array(val).fill(1)
+  } else {
+    let arr = String(val).split('.')
+    let left = Number(arr[0])
+    let right = Number('0.' + arr[1])
+    model.dayWeight = new Array(left).fill(1)
+    model.dayWeight.unshift(right)
+  }
+  elFormRef?.value?.validateField('dayWeight')
+}
 const items = computed<EpFormItem[]>(() => {
   return [
     span7({
@@ -189,27 +237,40 @@ const items = computed<EpFormItem[]>(() => {
       slot: { placeholder: '每包打包人数', step: 1, stepStrictly: true },
     }),
     span7({
-      rowKey: 'row-3',
+      rowKey: 'row-4',
       label: '计划评卷天数',
       prop: 'dayNumber',
       slotType: 'inputNumber',
-      slot: { placeholder: '计划评卷天数', step: 1, stepStrictly: true },
+      slot: {
+        placeholder: '计划评卷天数',
+        step: 0.01,
+        stepStrictly: true,
+        onChange: checkDays,
+      },
       itemDescription: { description: '系统将按各省考生平均分配到计划评卷天数中,确保各天的评卷进度一致' },
     }),
+    showDayWeight.value
+      ? span24({
+          rowKey: 'row-5',
+          label: '按天分配',
+          slotName: 'dayWeight',
+          prop: 'dayWeight',
+        })
+      : {},
     span7({
-      rowKey: 'row-4',
+      rowKey: 'row-6',
       label: '图片路径',
       slotName: 'address',
       itemDescription: { description: '试卷图片请按路径存放' },
     }),
     span7({
-      rowKey: 'row-5',
+      rowKey: 'row-7',
       label: '导入文件',
       prop: 'file',
       slotName: 'import',
     }),
     span7({
-      rowKey: 'row-6',
+      rowKey: 'row-8',
       slotName: 'progress',
     }),
   ]
@@ -231,7 +292,7 @@ async function onSubmit() {
     if (valid) {
       showProgress.value = true
       setPercentage(0)
-      await importMarkingData(model)
+      await importMarkingData(omit(model, 'dayNumber'))
       ElMessage.success(`导入成功,您可以稍后去“任务信息报告”页面进行查询`)
       // checkImportStatus()
     }
@@ -252,7 +313,7 @@ async function exportMarkTasks() {
       dayNumberValid &&
       (await useFetch('exportStudentTask').fetch({
         subjectCode: model.subjectCode,
-        dayNumber: model.dayNumber!,
+        // dayNumber: model.dayNumber!,
         mainNumber: model.mainNumber!,
       }))
   } catch (error) {
@@ -263,4 +324,14 @@ async function exportMarkTasks() {
 // getStudentImportStatus()
 </script>
 
-<style scoped lang="scss"></style>
+<style scoped lang="scss">
+.day-dispatch-num {
+  width: 50px;
+  margin-right: 5px;
+  margin-bottom: 5px;
+  :deep(.el-input__wrapper) {
+    padding-left: 10px;
+    padding-right: 10px;
+  }
+}
+</style>