|
@@ -10,6 +10,17 @@
|
|
:items="items"
|
|
:items="items"
|
|
:rules="rules"
|
|
: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>
|
|
<template #form-item-address>
|
|
<span class="flex items-center">
|
|
<span class="flex items-center">
|
|
{{ filePath }}
|
|
{{ filePath }}
|
|
@@ -51,7 +62,7 @@
|
|
<script setup lang="ts" name="DataMarking">
|
|
<script setup lang="ts" name="DataMarking">
|
|
/** 导入评卷数据 */
|
|
/** 导入评卷数据 */
|
|
import { computed, nextTick, reactive, ref, watch } from 'vue'
|
|
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 { useTimeoutFn } from '@vueuse/core'
|
|
import ConfirmButton from '@/components/common/ConfirmButton.vue'
|
|
import ConfirmButton from '@/components/common/ConfirmButton.vue'
|
|
import BaseForm from '@/components/element/BaseForm.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 { FormGroup, EpFormItem, EpFormRules } from 'global-type'
|
|
import type { ExtractApiParams } from '@/api/api'
|
|
import type { ExtractApiParams } from '@/api/api'
|
|
-
|
|
|
|
|
|
+import { omit } from 'lodash-es'
|
|
// const allowImport = ref<boolean>(false)
|
|
// const allowImport = ref<boolean>(false)
|
|
const allowImport = ref<boolean>(true)
|
|
const allowImport = ref<boolean>(true)
|
|
|
|
|
|
@@ -109,6 +120,7 @@ const model = reactive<ExtractApiParams<'importMarkingData'>>({
|
|
packageTaskCount: 5,
|
|
packageTaskCount: 5,
|
|
dayNumber: void 0,
|
|
dayNumber: void 0,
|
|
file: void 0,
|
|
file: void 0,
|
|
|
|
+ dayWeight: [],
|
|
})
|
|
})
|
|
|
|
|
|
watch(dataModel, () => {
|
|
watch(dataModel, () => {
|
|
@@ -148,16 +160,52 @@ const rules: EpFormRules = {
|
|
],
|
|
],
|
|
separator: [{ required: true, message: '请设置分隔符' }],
|
|
separator: [{ required: true, message: '请设置分隔符' }],
|
|
file: [{ 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[] = [
|
|
const groups: FormGroup[] = [
|
|
{ groupTitle: '选择大题', rowKeys: ['row-1'] },
|
|
{ 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 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[]>(() => {
|
|
const items = computed<EpFormItem[]>(() => {
|
|
return [
|
|
return [
|
|
span7({
|
|
span7({
|
|
@@ -189,27 +237,40 @@ const items = computed<EpFormItem[]>(() => {
|
|
slot: { placeholder: '每包打包人数', step: 1, stepStrictly: true },
|
|
slot: { placeholder: '每包打包人数', step: 1, stepStrictly: true },
|
|
}),
|
|
}),
|
|
span7({
|
|
span7({
|
|
- rowKey: 'row-3',
|
|
|
|
|
|
+ rowKey: 'row-4',
|
|
label: '计划评卷天数',
|
|
label: '计划评卷天数',
|
|
prop: 'dayNumber',
|
|
prop: 'dayNumber',
|
|
slotType: 'inputNumber',
|
|
slotType: 'inputNumber',
|
|
- slot: { placeholder: '计划评卷天数', step: 1, stepStrictly: true },
|
|
|
|
|
|
+ slot: {
|
|
|
|
+ placeholder: '计划评卷天数',
|
|
|
|
+ step: 0.01,
|
|
|
|
+ stepStrictly: true,
|
|
|
|
+ onChange: checkDays,
|
|
|
|
+ },
|
|
itemDescription: { description: '系统将按各省考生平均分配到计划评卷天数中,确保各天的评卷进度一致' },
|
|
itemDescription: { description: '系统将按各省考生平均分配到计划评卷天数中,确保各天的评卷进度一致' },
|
|
}),
|
|
}),
|
|
|
|
+ showDayWeight.value
|
|
|
|
+ ? span24({
|
|
|
|
+ rowKey: 'row-5',
|
|
|
|
+ label: '按天分配',
|
|
|
|
+ slotName: 'dayWeight',
|
|
|
|
+ prop: 'dayWeight',
|
|
|
|
+ })
|
|
|
|
+ : {},
|
|
span7({
|
|
span7({
|
|
- rowKey: 'row-4',
|
|
|
|
|
|
+ rowKey: 'row-6',
|
|
label: '图片路径',
|
|
label: '图片路径',
|
|
slotName: 'address',
|
|
slotName: 'address',
|
|
itemDescription: { description: '试卷图片请按路径存放' },
|
|
itemDescription: { description: '试卷图片请按路径存放' },
|
|
}),
|
|
}),
|
|
span7({
|
|
span7({
|
|
- rowKey: 'row-5',
|
|
|
|
|
|
+ rowKey: 'row-7',
|
|
label: '导入文件',
|
|
label: '导入文件',
|
|
prop: 'file',
|
|
prop: 'file',
|
|
slotName: 'import',
|
|
slotName: 'import',
|
|
}),
|
|
}),
|
|
span7({
|
|
span7({
|
|
- rowKey: 'row-6',
|
|
|
|
|
|
+ rowKey: 'row-8',
|
|
slotName: 'progress',
|
|
slotName: 'progress',
|
|
}),
|
|
}),
|
|
]
|
|
]
|
|
@@ -231,7 +292,7 @@ async function onSubmit() {
|
|
if (valid) {
|
|
if (valid) {
|
|
showProgress.value = true
|
|
showProgress.value = true
|
|
setPercentage(0)
|
|
setPercentage(0)
|
|
- await importMarkingData(model)
|
|
|
|
|
|
+ await importMarkingData(omit(model, 'dayNumber'))
|
|
ElMessage.success(`导入成功,您可以稍后去“任务信息报告”页面进行查询`)
|
|
ElMessage.success(`导入成功,您可以稍后去“任务信息报告”页面进行查询`)
|
|
// checkImportStatus()
|
|
// checkImportStatus()
|
|
}
|
|
}
|
|
@@ -252,7 +313,7 @@ async function exportMarkTasks() {
|
|
dayNumberValid &&
|
|
dayNumberValid &&
|
|
(await useFetch('exportStudentTask').fetch({
|
|
(await useFetch('exportStudentTask').fetch({
|
|
subjectCode: model.subjectCode,
|
|
subjectCode: model.subjectCode,
|
|
- dayNumber: model.dayNumber!,
|
|
|
|
|
|
+ // dayNumber: model.dayNumber!,
|
|
mainNumber: model.mainNumber!,
|
|
mainNumber: model.mainNumber!,
|
|
}))
|
|
}))
|
|
} catch (error) {
|
|
} catch (error) {
|
|
@@ -263,4 +324,14 @@ async function exportMarkTasks() {
|
|
// getStudentImportStatus()
|
|
// getStudentImportStatus()
|
|
</script>
|
|
</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>
|