Bläddra i källkod

feat: 科目&大题联动问题修复

chenhao 2 år sedan
förälder
incheckning
e32fbb9c1b

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

@@ -42,7 +42,7 @@ const model = reactive<ExtractMultipleApiParams<'getCetScoreList'>>({
 
 const { defineColumn, _ } = useForm()
 
-const { subjectList, dataModel, onOptionInit } = useOptions(['subject'])
+const { subjectList, dataModel, onOptionInit, changeModelValue } = useOptions(['subject'])
 
 watch(dataModel, () => {
   model.subjectCode = dataModel.subject || ''
@@ -56,7 +56,7 @@ const items = computed<EpFormItem[]>(() => {
       label: '科目',
       prop: 'subjectCode',
       slotType: 'select',
-      slot: { options: subjectList.value },
+      slot: { options: subjectList.value, onChange: changeModelValue('subject') },
     }),
     OneRowSpan5({ slotName: 'operation', labelWidth: useVW(20) }),
   ]

+ 8 - 3
src/modules/admin-data/marking/index.vue

@@ -71,7 +71,7 @@ const { fetch, loading } = useFetch('importMarkingData', { onUploadProgress })
 
 const showProgress = ref(false)
 
-const { subjectList, mainQuestionList } = useOptions(['subject', 'question'])
+const { subjectList, mainQuestionList, dataModel, changeModelValue } = useOptions(['subject', 'question'])
 
 const { formRef, elFormRef, defineColumn, _ } = useForm()
 
@@ -83,6 +83,11 @@ const model = reactive<ExtractApiParams<'importMarkingData'>>({
   subjectCode: '',
 })
 
+watch(dataModel, () => {
+  model.subjectCode = dataModel.subject || ''
+  model.mainNumber = dataModel.question
+})
+
 watch([() => model.subjectCode, () => model.mainNumber], () => {
   /** 获取导入文件路径 */
   model.subjectCode &&
@@ -125,14 +130,14 @@ const items = computed<EpFormItem[]>(() => {
       label: '科目',
       prop: 'subjectCode',
       slotType: 'select',
-      slot: { placeholder: '选择科目', options: subjectList.value },
+      slot: { placeholder: '选择科目', options: subjectList.value, onChange: changeModelValue('subject') },
     }),
     span6({
       rowKey: 'row-1',
       label: '大题',
       prop: 'mainNumber',
       slotType: 'select',
-      slot: { placeholder: '选择大题', options: mainQuestionList.value },
+      slot: { placeholder: '选择大题', options: mainQuestionList.value, onChange: changeModelValue('question') },
     }),
     span6({
       rowKey: 'row-2',

+ 8 - 3
src/modules/admin-data/paper/components/rf.vue

@@ -76,7 +76,12 @@ watch([() => model.subjectCode, () => model.mainNumber], () => {
     })
 })
 
-const { subjectList, mainQuestionList } = useOptions(['subject', 'question'])
+const { subjectList, mainQuestionList, dataModel, changeModelValue } = useOptions(['subject', 'question'])
+
+watch(dataModel, () => {
+  model.subjectCode = dataModel.subject || ''
+  model.mainNumber = dataModel.question
+})
 
 const { formRef, elFormRef, defineColumn, _ } = useForm()
 
@@ -105,7 +110,7 @@ const items = computed<EpFormItem[]>(() => {
       label: '科目',
       prop: 'subjectCode',
       slotType: 'select',
-      slot: { placeholder: '选择科目', options: subjectList.value },
+      slot: { placeholder: '选择科目', options: subjectList.value, onChange: changeModelValue('subject') },
     }),
     span6({
       rowKey: 'row-1',
@@ -113,7 +118,7 @@ const items = computed<EpFormItem[]>(() => {
       labelWidth: useVW(100),
       prop: 'mainNumber',
       slotType: 'select',
-      slot: { placeholder: '选择大题', options: mainQuestionList.value },
+      slot: { placeholder: '选择大题', options: mainQuestionList.value, onChange: changeModelValue('question') },
     }),
     span6({
       rowKey: 'row-2',

+ 8 - 3
src/modules/admin-data/paper/components/sample.vue

@@ -78,7 +78,12 @@ watch([() => model.subjectCode, () => model.mainNumber, () => model.paperType],
     })
 })
 
-const { subjectList, mainQuestionList } = useOptions(['subject', 'question'])
+const { subjectList, mainQuestionList, dataModel, changeModelValue } = useOptions(['subject', 'question'])
+
+watch(dataModel, () => {
+  model.subjectCode = dataModel.subject || ''
+  model.mainNumber = dataModel.question
+})
 
 const { formRef, elFormRef, defineColumn, _ } = useForm()
 
@@ -107,7 +112,7 @@ const items = computed<EpFormItem[]>(() => {
       label: '科目',
       prop: 'subjectCode',
       slotType: 'select',
-      slot: { placeholder: '选择科目', options: subjectList.value },
+      slot: { placeholder: '选择科目', options: subjectList.value, onChange: changeModelValue('subject') },
     }),
     span6({
       rowKey: 'row-1',
@@ -115,7 +120,7 @@ const items = computed<EpFormItem[]>(() => {
       labelWidth: useVW(100),
       prop: 'mainNumber',
       slotType: 'select',
-      slot: { placeholder: '选择大题', options: mainQuestionList.value },
+      slot: { placeholder: '选择大题', options: mainQuestionList.value, onChange: changeModelValue('question') },
     }),
     span6({
       rowKey: 'row-2',

+ 8 - 3
src/modules/admin-data/paper/components/standard.vue

@@ -68,7 +68,12 @@ watch([() => model.subjectCode, () => model.mainNumber], () => {
     })
 })
 
-const { subjectList, mainQuestionList } = useOptions(['subject', 'question'])
+const { subjectList, mainQuestionList, dataModel, changeModelValue } = useOptions(['subject', 'question'])
+
+watch(dataModel, () => {
+  model.subjectCode = dataModel.subject || ''
+  model.mainNumber = dataModel.question
+})
 
 const { formRef, elFormRef, defineColumn, _ } = useForm()
 
@@ -97,7 +102,7 @@ const items = computed<EpFormItem[]>(() => {
       label: '科目',
       prop: 'subjectCode',
       slotType: 'select',
-      slot: { placeholder: '选择科目', options: subjectList.value },
+      slot: { placeholder: '选择科目', options: subjectList.value, onChange: changeModelValue('subject') },
     }),
     span6({
       rowKey: 'row-1',
@@ -105,7 +110,7 @@ const items = computed<EpFormItem[]>(() => {
       labelWidth: useVW(100),
       prop: 'mainNumber',
       slotType: 'select',
-      slot: { placeholder: '选择大题', options: mainQuestionList.value },
+      slot: { placeholder: '选择大题', options: mainQuestionList.value, onChange: changeModelValue('question') },
     }),
     span6({
       rowKey: 'row-2',

+ 60 - 3
src/modules/admin-subject/edit-main-question/index.vue

@@ -11,6 +11,9 @@
         :rules="rules"
         :disabled="adding || editing"
       >
+        <template #form-item-setLevelRange>
+          <el-button class="m-l-base" type="primary" @click="setLevelRangeVisible = true">设置</el-button>
+        </template>
         <template #form-item-expand>
           <el-button type="primary" link @click="expand = !expand">高级设置</el-button>
         </template>
@@ -20,15 +23,37 @@
       </base-form>
     </el-card>
   </div>
+  <base-dialog v-model="setLevelRangeVisible" title="档次设置">
+    <div class="level-list">
+      <div v-for="([start, end], index) in levelRanges" :key="index" class="flex items-center level-row">
+        <div class="m-r-base level-label">档次一({{ start }}~{{ end }})</div>
+        <div class="flex items-center level-input">
+          <el-input-number
+            v-model="levelRangeValues[index]"
+            class="m-r-mini"
+            size="small"
+            :controls="false"
+          ></el-input-number>
+          %
+        </div>
+      </div>
+    </div>
+    <template #footer>
+      <div class="flex justify-center">
+        <confirm-button @confirm="onSetLevelRangeSubmit" @cancel="setLevelRangeVisible = false"></confirm-button>
+      </div>
+    </template>
+  </base-dialog>
 </template>
 
 <script setup lang="ts" name="SubjectAddQuestion">
 /** 添加大题 */
 import { computed, reactive, ref } from 'vue'
 import { useRouter } from 'vue-router'
-import { ElCard, ElButton, ElMessage } from 'element-plus'
+import { ElCard, ElButton, ElMessage, ElInputNumber } from 'element-plus'
 import { omit } from 'lodash-es'
 import ConfirmButton from '@/components/common/ConfirmButton.vue'
+import BaseDialog from '@/components/element/BaseDialog.vue'
 import BaseForm from '@/components/element/BaseForm.vue'
 import useFetch from '@/hooks/useFetch'
 import useForm from '@/hooks/useForm'
@@ -43,6 +68,18 @@ const props = defineProps<{ subjectCode: string; mainNumber?: number | string }>
 
 const isEdit = !!props.mainNumber
 
+const levelRanges = [
+  [0, 2],
+  [3, 5],
+  [6, 8],
+  [9, 11],
+  [12, 14],
+]
+
+const levelRangeValues = ref<number[]>(Array.from({ length: 5 }))
+
+const setLevelRangeVisible = ref<boolean>(false)
+
 const { fetch: getMainQuestionInfo, result: MainQuestionInfo } = useFetch('getMainQuestionInfo')
 
 const { fetch: addMainQuestion, loading: adding } = useFetch('addMainQuestion')
@@ -194,9 +231,15 @@ const items = computed<EpFormItem[]>(() => [
     'row-12'
   ),
   Span6(
-    { label: '档次抽查比例', slotType: 'input', prop: 'levelRange', slot: { placeholder: '档次抽查比例' } },
+    {
+      label: '档次抽查比例',
+      slotType: 'input',
+      prop: 'levelRange',
+      slot: { placeholder: '档次抽查比例', disabled: true },
+    },
     'row-12'
   ),
+  Span6({ slotName: 'setLevelRange', labelWidth: '0px' }, 'row-12'),
   Span6({ slotName: 'expand' }, 'expand'),
   Span6({ slotName: 'operation' }, 'operation'),
 ])
@@ -207,6 +250,10 @@ if (isEdit) {
   })
 }
 
+const onSetLevelRangeSubmit = () => {
+  console.log('onSetLevelRangeSubmit')
+}
+
 const onSubmit = async () => {
   try {
     const valid = await elFormRef?.value?.validate().catch((error: object) => {
@@ -231,4 +278,14 @@ const onCancel = () => {
 }
 </script>
 
-<style scoped lang="scss"></style>
+<style scoped lang="scss">
+.level-list {
+  .level-row {
+    margin-bottom: 8px;
+    .level-label {
+      width: 100px;
+      text-align: right;
+    }
+  }
+}
+</style>

+ 1 - 1
src/modules/admin-subject/manage/index.vue

@@ -99,7 +99,7 @@ const columns: EpTableColumn<ExtractMultipleApiResponse<'getSubjectList'>>[] = [
 ]
 
 async function onSearch() {
-  Object.assign(request, { code: subjectCode })
+  Object.assign(request, { code: subjectCode.value })
 }
 
 function onViewSubjectStruct(row: ExtractMultipleApiResponse<'getSubjectList'>) {

+ 3 - 1
src/modules/marking/assess/index.vue

@@ -87,7 +87,7 @@ watch(forceCheckGroupList, () => {
   }
 })
 
-const { subjectList, mainQuestionList, dataModel, onOptionInit } = useOptions(['subject', 'question'])
+const { subjectList, mainQuestionList, dataModel, onOptionInit, changeModelValue } = useOptions(['subject', 'question'])
 
 watch(dataModel, () => {
   model.subjectCode = dataModel.subject || ''
@@ -123,6 +123,7 @@ const items = computed<EpFormItem[]>(() => {
       slotType: 'select',
       slot: {
         options: subjectList.value,
+        onChange: changeModelValue('subject'),
       },
     }),
     Span12({
@@ -132,6 +133,7 @@ const items = computed<EpFormItem[]>(() => {
       slotType: 'select',
       slot: {
         options: mainQuestionList.value,
+        onChange: changeModelValue('question'),
       },
     }),
     {

+ 2 - 2
src/modules/quality/spot-check/index.vue

@@ -40,7 +40,7 @@ const { defineColumn, _ } = useForm()
 
 const mainStore = useMainStore()
 
-const { mainQuestionList, dataModel, onOptionInit } = useOptions(['question'], {
+const { mainQuestionList, dataModel, onOptionInit, changeModelValue } = useOptions(['question'], {
   subject: mainStore?.myUserInfo?.subjectCode,
 })
 
@@ -75,7 +75,7 @@ const items = computed<EpFormItem[]>(() => {
       label: '大题',
       prop: 'questionMainNumber',
       slotType: 'select',
-      slot: { options: mainQuestionList.value },
+      slot: { options: mainQuestionList.value, onChange: changeModelValue('question') },
     }),
     OneRowSpan5({
       label: '组长',