|
@@ -21,7 +21,18 @@
|
|
<el-button type="primary" link @click="expand = !expand">高级设置</el-button>
|
|
<el-button type="primary" link @click="expand = !expand">高级设置</el-button>
|
|
</template>
|
|
</template>
|
|
<template #form-item-operation>
|
|
<template #form-item-operation>
|
|
- <confirm-button ok-text="保存" @confirm="onSubmit" @cancel="onCancel"></confirm-button>
|
|
|
|
|
|
+ <confirm-button
|
|
|
|
+ :loading="adding || editing"
|
|
|
|
+ ok-text="保存"
|
|
|
|
+ @confirm="onSubmit"
|
|
|
|
+ @cancel="onCancel"
|
|
|
|
+ ></confirm-button>
|
|
|
|
+ </template>
|
|
|
|
+ <template #form-item-compare>
|
|
|
|
+ <el-select v-model="compare">
|
|
|
|
+ <el-option value="1" label="启用"></el-option>
|
|
|
|
+ <el-option value="0" label="不启用"></el-option>
|
|
|
|
+ </el-select>
|
|
</template>
|
|
</template>
|
|
</base-form>
|
|
</base-form>
|
|
</el-card>
|
|
</el-card>
|
|
@@ -61,7 +72,7 @@
|
|
/** 添加大题 */
|
|
/** 添加大题 */
|
|
import { computed, reactive, ref } from 'vue'
|
|
import { computed, reactive, ref } from 'vue'
|
|
import { useRouter } from 'vue-router'
|
|
import { useRouter } from 'vue-router'
|
|
-import { ElCard, ElButton, ElMessage, ElInput, ElInputNumber } from 'element-plus'
|
|
|
|
|
|
+import { ElCard, ElButton, ElMessage, ElInput, ElInputNumber, ElSelect, ElOption } from 'element-plus'
|
|
import { omit } from 'lodash-es'
|
|
import { omit } from 'lodash-es'
|
|
import ConfirmButton from '@/components/common/ConfirmButton.vue'
|
|
import ConfirmButton from '@/components/common/ConfirmButton.vue'
|
|
import BaseDialog from '@/components/element/BaseDialog.vue'
|
|
import BaseDialog from '@/components/element/BaseDialog.vue'
|
|
@@ -72,11 +83,22 @@ import useVW from '@/hooks/useVW'
|
|
|
|
|
|
import type { ExtractApiParams } from '@/api/api'
|
|
import type { ExtractApiParams } from '@/api/api'
|
|
import type { EpFormItem, EpFormRules, FormGroup } from 'global-type'
|
|
import type { EpFormItem, EpFormRules, FormGroup } from 'global-type'
|
|
-
|
|
|
|
|
|
+const { fetch: getMainQuestionList, result: mainQuestionListResult } = useFetch('getMainQuestionList')
|
|
const { back } = useRouter()
|
|
const { back } = useRouter()
|
|
|
|
|
|
const props = defineProps<{ subjectCode: string; mainNumber?: number | string }>()
|
|
const props = defineProps<{ subjectCode: string; mainNumber?: number | string }>()
|
|
-
|
|
|
|
|
|
+getMainQuestionList({ subjectCode: props.subjectCode })
|
|
|
|
+const mainQuestionOptions = computed(() => {
|
|
|
|
+ return (
|
|
|
|
+ mainQuestionListResult.value?.map((v: any) => {
|
|
|
|
+ return {
|
|
|
|
+ ...v,
|
|
|
|
+ label: `${v.mainNumber}-${v.title}`,
|
|
|
|
+ value: v.mainNumber,
|
|
|
|
+ }
|
|
|
|
+ }) || []
|
|
|
|
+ )
|
|
|
|
+})
|
|
const isEdit = !!props.mainNumber
|
|
const isEdit = !!props.mainNumber
|
|
|
|
|
|
// const levelRanges = [
|
|
// const levelRanges = [
|
|
@@ -126,6 +148,7 @@ const model = reactive<ExtractApiParams<'addMainQuestion'>>({
|
|
selfRate: void 0,
|
|
selfRate: void 0,
|
|
systemRate: void 0,
|
|
systemRate: void 0,
|
|
startNumber: 1,
|
|
startNumber: 1,
|
|
|
|
+ relationMainNumber: void 0,
|
|
})
|
|
})
|
|
|
|
|
|
const levelRangeView = computed(() => {
|
|
const levelRangeView = computed(() => {
|
|
@@ -169,10 +192,12 @@ const rules = computed<EpFormRules>(() => {
|
|
remarkNumber: [{ required: true, message: '请输入回评设置' }],
|
|
remarkNumber: [{ required: true, message: '请输入回评设置' }],
|
|
startNumber: [{ required: true, message: '请输入小题起始号' }],
|
|
startNumber: [{ required: true, message: '请输入小题起始号' }],
|
|
systemRate: [{ required: !!model.levelRange?.filter(Boolean)?.length, message: '请设置系统抽查比例' }],
|
|
systemRate: [{ required: !!model.levelRange?.filter(Boolean)?.length, message: '请设置系统抽查比例' }],
|
|
|
|
+ relationMainNumber: [{ required: true, message: '请选择关联大题' }],
|
|
}
|
|
}
|
|
})
|
|
})
|
|
|
|
|
|
const expand = ref<boolean>(false)
|
|
const expand = ref<boolean>(false)
|
|
|
|
+const compare = ref('0')
|
|
|
|
|
|
const groups = computed<FormGroup[]>(() => {
|
|
const groups = computed<FormGroup[]>(() => {
|
|
return [
|
|
return [
|
|
@@ -180,7 +205,7 @@ const groups = computed<FormGroup[]>(() => {
|
|
rowKeys: Array.from({ length: 10 }).map((_, i) => `row-${i + 1}`),
|
|
rowKeys: Array.from({ length: 10 }).map((_, i) => `row-${i + 1}`),
|
|
},
|
|
},
|
|
{
|
|
{
|
|
- rowKeys: ['row-11', 'row-12'],
|
|
|
|
|
|
+ rowKeys: ['row-11', 'row-12', 'row-13'],
|
|
groupTitle: '高级设置',
|
|
groupTitle: '高级设置',
|
|
hidden: !expand.value,
|
|
hidden: !expand.value,
|
|
},
|
|
},
|
|
@@ -193,160 +218,186 @@ const groups = computed<FormGroup[]>(() => {
|
|
|
|
|
|
const Span8 = defineColumn(_, _, { span: 8 })
|
|
const Span8 = defineColumn(_, _, { span: 8 })
|
|
|
|
|
|
-const items = computed<EpFormItem[]>(() => [
|
|
|
|
- Span8(
|
|
|
|
- {
|
|
|
|
- label: '大题号',
|
|
|
|
- slotType: 'inputNumber',
|
|
|
|
- prop: 'mainNumber',
|
|
|
|
- slot: {
|
|
|
|
- placeholder: '大题号',
|
|
|
|
- disabled: isEdit,
|
|
|
|
|
|
+const items = computed<any>(() =>
|
|
|
|
+ [
|
|
|
|
+ Span8(
|
|
|
|
+ {
|
|
|
|
+ label: '大题号',
|
|
|
|
+ slotType: 'inputNumber',
|
|
|
|
+ prop: 'mainNumber',
|
|
|
|
+ slot: {
|
|
|
|
+ placeholder: '大题号',
|
|
|
|
+ disabled: isEdit,
|
|
|
|
+ },
|
|
},
|
|
},
|
|
- },
|
|
|
|
- 'row-1'
|
|
|
|
- ),
|
|
|
|
- Span8({ label: '大题名称', slotType: 'input', prop: 'mainTitle', slot: { placeholder: '大题名称' } }, 'row-2'),
|
|
|
|
- Span8(
|
|
|
|
- {
|
|
|
|
- label: '成绩表对应字段',
|
|
|
|
- slotType: 'select',
|
|
|
|
- prop: 'category',
|
|
|
|
- slot: {
|
|
|
|
- placeholder: '成绩表对应字段',
|
|
|
|
- clearable: true,
|
|
|
|
- options: [
|
|
|
|
- { label: '作文分', value: 'WRITING' },
|
|
|
|
- { label: '翻译分', value: 'TRANSLATION' },
|
|
|
|
- ],
|
|
|
|
|
|
+ 'row-1'
|
|
|
|
+ ),
|
|
|
|
+ Span8({ label: '大题名称', slotType: 'input', prop: 'mainTitle', slot: { placeholder: '大题名称' } }, 'row-2'),
|
|
|
|
+ Span8(
|
|
|
|
+ {
|
|
|
|
+ label: '成绩表对应字段',
|
|
|
|
+ slotType: 'select',
|
|
|
|
+ prop: 'category',
|
|
|
|
+ slot: {
|
|
|
|
+ placeholder: '成绩表对应字段',
|
|
|
|
+ clearable: true,
|
|
|
|
+ options: [
|
|
|
|
+ { label: '作文分', value: 'WRITING' },
|
|
|
|
+ { label: '翻译分', value: 'TRANSLATION' },
|
|
|
|
+ ],
|
|
|
|
+ },
|
|
},
|
|
},
|
|
- },
|
|
|
|
- 'row-2'
|
|
|
|
- ),
|
|
|
|
- Span8(
|
|
|
|
- {
|
|
|
|
- label: '小题起始号',
|
|
|
|
- slotType: 'inputNumber',
|
|
|
|
- prop: 'startNumber',
|
|
|
|
- slot: { placeholder: '小题起始号', disabled: isEdit, stepStrictly: true, step: 1, min: 0, max: 999999 },
|
|
|
|
- },
|
|
|
|
- 'row-3'
|
|
|
|
- ),
|
|
|
|
- Span8(
|
|
|
|
- {
|
|
|
|
- label: '小题数量',
|
|
|
|
- slotType: 'inputNumber',
|
|
|
|
- prop: 'questionCount',
|
|
|
|
- slot: { placeholder: '小题数量', stepStrictly: true, step: 1, min: 0, max: 999999 },
|
|
|
|
- },
|
|
|
|
- 'row-4'
|
|
|
|
- ),
|
|
|
|
- Span8(
|
|
|
|
- {
|
|
|
|
- label: '小题满分',
|
|
|
|
- slotType: 'inputNumber',
|
|
|
|
- prop: 'questionScore',
|
|
|
|
- slot: { placeholder: '小题满分', stepStrictly: true, step: 1, min: 0, max: 999999 },
|
|
|
|
- },
|
|
|
|
- 'row-5'
|
|
|
|
- ),
|
|
|
|
- Span8(
|
|
|
|
- {
|
|
|
|
- label: '间隔分',
|
|
|
|
- slotType: 'inputNumber',
|
|
|
|
- prop: 'intervalScore',
|
|
|
|
- slot: { placeholder: '间隔分', stepStrictly: true, step: 1, min: 0, max: 999999 },
|
|
|
|
- },
|
|
|
|
- 'row-6'
|
|
|
|
- ),
|
|
|
|
- Span8(
|
|
|
|
- {
|
|
|
|
- label: '最小阅卷时长(秒)',
|
|
|
|
- slotType: 'inputNumber',
|
|
|
|
- prop: 'minMarkTime',
|
|
|
|
- slot: { placeholder: '最小阅卷时长(秒)', stepStrictly: true, step: 1, min: 0, max: 9999999 },
|
|
|
|
- },
|
|
|
|
- 'row-7'
|
|
|
|
- ),
|
|
|
|
- Span8(
|
|
|
|
- {
|
|
|
|
- label: '评卷小组数量',
|
|
|
|
- slotType: 'inputNumber',
|
|
|
|
- prop: 'groupNumber',
|
|
|
|
- slot: { placeholder: '评卷小组数量', stepStrictly: true, step: 1, min: 0, max: 999999 },
|
|
|
|
- },
|
|
|
|
- 'row-8'
|
|
|
|
- ),
|
|
|
|
- Span8(
|
|
|
|
- {
|
|
|
|
- label: '回评设置',
|
|
|
|
- slotType: 'select',
|
|
|
|
- prop: 'remarkType',
|
|
|
|
- slot: {
|
|
|
|
- placeholder: '回评设置',
|
|
|
|
- disabled: isEdit,
|
|
|
|
- options: [
|
|
|
|
- { value: 'QUANTITY', label: '按数量' },
|
|
|
|
- { value: 'TIME', label: '按时间' },
|
|
|
|
- ],
|
|
|
|
|
|
+ 'row-2'
|
|
|
|
+ ),
|
|
|
|
+ Span8(
|
|
|
|
+ {
|
|
|
|
+ label: '小题起始号',
|
|
|
|
+ slotType: 'inputNumber',
|
|
|
|
+ prop: 'startNumber',
|
|
|
|
+ slot: { placeholder: '小题起始号', disabled: isEdit, stepStrictly: true, step: 1, min: 0, max: 999999 },
|
|
},
|
|
},
|
|
- },
|
|
|
|
- 'row-9'
|
|
|
|
- ),
|
|
|
|
- Span8(
|
|
|
|
- {
|
|
|
|
- label: model.remarkType === 'QUANTITY' ? '数量' : '时间:(近N分钟)',
|
|
|
|
- prop: 'remarkNumber',
|
|
|
|
- slotType: 'inputNumber',
|
|
|
|
- slot: {
|
|
|
|
- stepStrictly: true,
|
|
|
|
- step: 1,
|
|
|
|
- min: 0,
|
|
|
|
- max: 120,
|
|
|
|
|
|
+ 'row-3'
|
|
|
|
+ ),
|
|
|
|
+ Span8(
|
|
|
|
+ {
|
|
|
|
+ label: '小题数量',
|
|
|
|
+ slotType: 'inputNumber',
|
|
|
|
+ prop: 'questionCount',
|
|
|
|
+ slot: { placeholder: '小题数量', stepStrictly: true, step: 1, min: 0, max: 999999 },
|
|
},
|
|
},
|
|
- },
|
|
|
|
- 'row-10'
|
|
|
|
- ),
|
|
|
|
- Span8(
|
|
|
|
- {
|
|
|
|
- label: '标准卷分发频度',
|
|
|
|
- slotType: 'inputNumber',
|
|
|
|
- prop: 'standardRate',
|
|
|
|
- slot: { placeholder: '标准卷分发频度', stepStrictly: true, step: 1 },
|
|
|
|
- },
|
|
|
|
- 'row-11'
|
|
|
|
- ),
|
|
|
|
- Span8(
|
|
|
|
- {
|
|
|
|
- label: '自查卷分发频度',
|
|
|
|
- slotType: 'inputNumber',
|
|
|
|
- prop: 'selfRate',
|
|
|
|
- slot: { placeholder: '自查卷分发频度', stepStrictly: true, step: 1 },
|
|
|
|
- },
|
|
|
|
- 'row-11'
|
|
|
|
- ),
|
|
|
|
- Span8(
|
|
|
|
- {
|
|
|
|
- label: '系统抽查卷比例',
|
|
|
|
- slotType: 'inputNumber',
|
|
|
|
- prop: 'systemRate',
|
|
|
|
- slot: { placeholder: '系统抽查卷比例', stepStrictly: true, step: 1 },
|
|
|
|
- },
|
|
|
|
- 'row-12'
|
|
|
|
- ),
|
|
|
|
- Span8(
|
|
|
|
- {
|
|
|
|
- label: '档次抽查比例',
|
|
|
|
- slotName: 'setLevelRange',
|
|
|
|
- },
|
|
|
|
- 'row-12'
|
|
|
|
- ),
|
|
|
|
- Span8({ slotName: 'expand' }, 'expand'),
|
|
|
|
- Span8({ slotName: 'operation' }, 'operation'),
|
|
|
|
-])
|
|
|
|
|
|
+ 'row-4'
|
|
|
|
+ ),
|
|
|
|
+ Span8(
|
|
|
|
+ {
|
|
|
|
+ label: '小题满分',
|
|
|
|
+ slotType: 'inputNumber',
|
|
|
|
+ prop: 'questionScore',
|
|
|
|
+ slot: { placeholder: '小题满分', stepStrictly: true, step: 1, min: 0, max: 999999 },
|
|
|
|
+ },
|
|
|
|
+ 'row-5'
|
|
|
|
+ ),
|
|
|
|
+ Span8(
|
|
|
|
+ {
|
|
|
|
+ label: '间隔分',
|
|
|
|
+ slotType: 'inputNumber',
|
|
|
|
+ prop: 'intervalScore',
|
|
|
|
+ slot: { placeholder: '间隔分', stepStrictly: true, step: 1, min: 0, max: 999999 },
|
|
|
|
+ },
|
|
|
|
+ 'row-6'
|
|
|
|
+ ),
|
|
|
|
+ Span8(
|
|
|
|
+ {
|
|
|
|
+ label: '最小阅卷时长(秒)',
|
|
|
|
+ slotType: 'inputNumber',
|
|
|
|
+ prop: 'minMarkTime',
|
|
|
|
+ slot: { placeholder: '最小阅卷时长(秒)', stepStrictly: true, step: 1, min: 0, max: 9999999 },
|
|
|
|
+ },
|
|
|
|
+ 'row-7'
|
|
|
|
+ ),
|
|
|
|
+ Span8(
|
|
|
|
+ {
|
|
|
|
+ label: '评卷小组数量',
|
|
|
|
+ slotType: 'inputNumber',
|
|
|
|
+ prop: 'groupNumber',
|
|
|
|
+ slot: { placeholder: '评卷小组数量', stepStrictly: true, step: 1, min: 0, max: 999999 },
|
|
|
|
+ },
|
|
|
|
+ 'row-8'
|
|
|
|
+ ),
|
|
|
|
+ Span8(
|
|
|
|
+ {
|
|
|
|
+ label: '回评设置',
|
|
|
|
+ slotType: 'select',
|
|
|
|
+ prop: 'remarkType',
|
|
|
|
+ slot: {
|
|
|
|
+ placeholder: '回评设置',
|
|
|
|
+ disabled: isEdit,
|
|
|
|
+ options: [
|
|
|
|
+ { value: 'QUANTITY', label: '按数量' },
|
|
|
|
+ { value: 'TIME', label: '按时间' },
|
|
|
|
+ ],
|
|
|
|
+ },
|
|
|
|
+ },
|
|
|
|
+ 'row-9'
|
|
|
|
+ ),
|
|
|
|
+ Span8(
|
|
|
|
+ {
|
|
|
|
+ label: model.remarkType === 'QUANTITY' ? '数量' : '时间:(近N分钟)',
|
|
|
|
+ prop: 'remarkNumber',
|
|
|
|
+ slotType: 'inputNumber',
|
|
|
|
+ slot: {
|
|
|
|
+ stepStrictly: true,
|
|
|
|
+ step: 1,
|
|
|
|
+ min: 0,
|
|
|
|
+ max: 120,
|
|
|
|
+ },
|
|
|
|
+ },
|
|
|
|
+ 'row-10'
|
|
|
|
+ ),
|
|
|
|
+ Span8(
|
|
|
|
+ {
|
|
|
|
+ label: '标准卷分发频度',
|
|
|
|
+ slotType: 'inputNumber',
|
|
|
|
+ prop: 'standardRate',
|
|
|
|
+ slot: { placeholder: '标准卷分发频度', stepStrictly: true, step: 1 },
|
|
|
|
+ },
|
|
|
|
+ 'row-11'
|
|
|
|
+ ),
|
|
|
|
+ Span8(
|
|
|
|
+ {
|
|
|
|
+ label: '自查卷分发频度',
|
|
|
|
+ slotType: 'inputNumber',
|
|
|
|
+ prop: 'selfRate',
|
|
|
|
+ slot: { placeholder: '自查卷分发频度', stepStrictly: true, step: 1 },
|
|
|
|
+ },
|
|
|
|
+ 'row-11'
|
|
|
|
+ ),
|
|
|
|
+ Span8(
|
|
|
|
+ {
|
|
|
|
+ label: '系统抽查卷比例',
|
|
|
|
+ slotType: 'inputNumber',
|
|
|
|
+ prop: 'systemRate',
|
|
|
|
+ slot: { placeholder: '系统抽查卷比例', stepStrictly: true, step: 1 },
|
|
|
|
+ },
|
|
|
|
+ 'row-12'
|
|
|
|
+ ),
|
|
|
|
+ Span8(
|
|
|
|
+ {
|
|
|
|
+ label: '档次抽查比例',
|
|
|
|
+ slotName: 'setLevelRange',
|
|
|
|
+ },
|
|
|
|
+ 'row-12'
|
|
|
|
+ ),
|
|
|
|
+ Span8(
|
|
|
|
+ {
|
|
|
|
+ label: '人机抽查比对',
|
|
|
|
+ slotName: 'compare',
|
|
|
|
+ },
|
|
|
|
+ 'row-13'
|
|
|
|
+ ),
|
|
|
|
+ compare.value == '1'
|
|
|
|
+ ? Span8(
|
|
|
|
+ {
|
|
|
|
+ label: '关联大题',
|
|
|
|
+ slotType: 'select',
|
|
|
|
+ prop: 'relationMainNumber',
|
|
|
|
+ slot: {
|
|
|
|
+ clearable: true,
|
|
|
|
+ options: mainQuestionOptions.value,
|
|
|
|
+ },
|
|
|
|
+ },
|
|
|
|
+ 'row-13'
|
|
|
|
+ )
|
|
|
|
+ : null,
|
|
|
|
+ Span8({ slotName: 'expand' }, 'expand'),
|
|
|
|
+ Span8({ slotName: 'operation' }, 'operation'),
|
|
|
|
+ ].filter((v) => !!v)
|
|
|
|
+)
|
|
|
|
|
|
if (isEdit) {
|
|
if (isEdit) {
|
|
getMainQuestionInfo({ subjectCode: props.subjectCode, mainNumber: +props.mainNumber }).then((result) => {
|
|
getMainQuestionInfo({ subjectCode: props.subjectCode, mainNumber: +props.mainNumber }).then((result) => {
|
|
|
|
+ if (!!result.relationMainNumber) {
|
|
|
|
+ compare.value = '1'
|
|
|
|
+ }
|
|
if (result.remarkType === 'TIME') {
|
|
if (result.remarkType === 'TIME') {
|
|
result.remarkNumber = (result.remarkNumber || 0) / 60
|
|
result.remarkNumber = (result.remarkNumber || 0) / 60
|
|
}
|
|
}
|