刘洋 2 years ago
parent
commit
82c58e46a6

+ 8 - 2
src/components/element/BaseSelect.vue

@@ -1,5 +1,5 @@
 <template>
 <template>
-  <el-select class="custom-select">
+  <el-select class="custom-select" @change="selChange" @clear="selClear">
     <el-option-group
     <el-option-group
       v-for="(group, index) in renderOptions.groups"
       v-for="(group, index) in renderOptions.groups"
       :key="'group-' + index"
       :key="'group-' + index"
@@ -29,7 +29,7 @@ interface SelectProp {
   optionGroup?: Required<FormItemSelectCustomProp>['optionGroup']
   optionGroup?: Required<FormItemSelectCustomProp>['optionGroup']
   options?: Required<FormItemSelectCustomProp>['options']
   options?: Required<FormItemSelectCustomProp>['options']
 }
 }
-
+const emits = defineEmits(['change', 'clear'])
 const props = defineProps<SelectProp>()
 const props = defineProps<SelectProp>()
 
 
 type OptionGroup = ExtractRecordValue<SelectProp['optionGroup']> & { options: SelectProp['options'] }
 type OptionGroup = ExtractRecordValue<SelectProp['optionGroup']> & { options: SelectProp['options'] }
@@ -54,6 +54,12 @@ const renderOptions = computed<OptionRender>(() => {
   )
   )
   return groups || { default: [], groups: {} }
   return groups || { default: [], groups: {} }
 })
 })
+const selChange = (index: any) => {
+  emits('change', index)
+}
+const selClear = () => {
+  emits('clear')
+}
 </script>
 </script>
 
 
 <style scoped lang="scss">
 <style scoped lang="scss">

+ 3 - 1
src/hooks/useOptions.ts

@@ -171,7 +171,7 @@ const useOptions = (
         // changeModelValue('question')(void 0)
         // changeModelValue('question')(void 0)
         // changeModelValue('group')(void 0)
         // changeModelValue('group')(void 0)
         getMainQuestionList({ subjectCode: dataModel.subject })
         getMainQuestionList({ subjectCode: dataModel.subject })
-        dataModel.question = undefined
+        // dataModel.question = undefined
       }
       }
     },
     },
     { immediate: true }
     { immediate: true }
@@ -280,6 +280,8 @@ const useOptions = (
   }
   }
 
 
   return {
   return {
+    getMainQuestionList,
+    getQuestionGroupList,
     subjectList,
     subjectList,
     mainQuestionList,
     mainQuestionList,
     groupList,
     groupList,

+ 11 - 3
src/layout/main/index.vue

@@ -14,7 +14,7 @@
       <main-header :reply-user-id="replyUserId" :message-visible="messageVisible" :in-layout="true"></main-header>
       <main-header :reply-user-id="replyUserId" :message-visible="messageVisible" :in-layout="true"></main-header>
       <div class="flex-1 scroll-auto main-layout-right-content">
       <div class="flex-1 scroll-auto main-layout-right-content">
         <!-- <RouterView></RouterView> -->
         <!-- <RouterView></RouterView> -->
-        <router-view #default="{ Component }">
+        <router-view v-if="isRouterAlive" #default="{ Component }">
           <keep-alive :include="mainStore.keepAliveViews">
           <keep-alive :include="mainStore.keepAliveViews">
             <component :is="Component" />
             <component :is="Component" />
           </keep-alive>
           </keep-alive>
@@ -25,7 +25,7 @@
 </template>
 </template>
 
 
 <script setup lang="ts" name="MainLayout">
 <script setup lang="ts" name="MainLayout">
-import { ref, provide } from 'vue'
+import { ref, provide, nextTick } from 'vue'
 import LeftMenu from './LeftMenu.vue'
 import LeftMenu from './LeftMenu.vue'
 import MainHeader from './MainHeader.vue'
 import MainHeader from './MainHeader.vue'
 import useMainLayoutStore from '@/store/layout'
 import useMainLayoutStore from '@/store/layout'
@@ -37,7 +37,7 @@ const mainStore = useMainStore()
 const replyUserId = ref<number>()
 const replyUserId = ref<number>()
 
 
 const messageVisible = ref<boolean>(false)
 const messageVisible = ref<boolean>(false)
-
+const isRouterAlive = ref(true)
 const setReplyUserId = (id: number) => {
 const setReplyUserId = (id: number) => {
   replyUserId.value = id
   replyUserId.value = id
 }
 }
@@ -48,6 +48,14 @@ const setMessageVisible = (visible: boolean) => {
 
 
 provide('setReplyUserId', setReplyUserId)
 provide('setReplyUserId', setReplyUserId)
 provide('setMessageVisible', setMessageVisible)
 provide('setMessageVisible', setMessageVisible)
+
+const reload = () => {
+  isRouterAlive.value = false
+  nextTick(() => {
+    isRouterAlive.value = true
+  })
+}
+provide('reload', reload)
 </script>
 </script>
 
 
 <style scoped lang="scss">
 <style scoped lang="scss">

+ 113 - 26
src/modules/marking/inquiry/index.vue

@@ -13,6 +13,8 @@
             clearable
             clearable
             value-key="secretNumber"
             value-key="secretNumber"
             :options="customQueryConfigList?.map((v, i) => ({ label: v.name, value: i }))"
             :options="customQueryConfigList?.map((v, i) => ({ label: v.name, value: i }))"
+            @clear="fastParamClear"
+            @change="fastParamChange"
           ></base-select>
           ></base-select>
         </template>
         </template>
       </base-form>
       </base-form>
@@ -32,7 +34,7 @@
 
 
 <script setup lang="ts" name="MarkingInquiry">
 <script setup lang="ts" name="MarkingInquiry">
 /** 阅卷-自定义查询 */
 /** 阅卷-自定义查询 */
-import { computed, reactive, ref, watch } from 'vue'
+import { computed, reactive, ref, watch, inject } from 'vue'
 import { useRouter } from 'vue-router'
 import { useRouter } from 'vue-router'
 import { ElButton, ElInput } from 'element-plus'
 import { ElButton, ElInput } from 'element-plus'
 import { omit } from 'lodash-es'
 import { omit } from 'lodash-es'
@@ -48,14 +50,22 @@ import useVW from '@/hooks/useVW'
 
 
 import type { EpFormItem, EpFormRules } from 'global-type'
 import type { EpFormItem, EpFormRules } from 'global-type'
 import type { ExtractApiParams } from '@/api/api'
 import type { ExtractApiParams } from '@/api/api'
-
+const refresh: any = inject('reload')
 const { push } = useRouter()
 const { push } = useRouter()
-
+const resetMarkerId = ref<any>(void 0)
 const shortQueryConfigIndex = ref<number>()
 const shortQueryConfigIndex = ref<number>()
 
 
-const { subjectList, mainQuestionList, groupListWithAll, dataModel, changeModelValue, isExpert, isLeader } = useOptions(
-  ['subject', 'question', 'group']
-)
+const {
+  subjectList,
+  mainQuestionList,
+  groupListWithAll,
+  dataModel,
+  changeModelValue,
+  isExpert,
+  isLeader,
+  getMainQuestionList,
+  getQuestionGroupList,
+} = useOptions(['subject', 'question', 'group'])
 
 
 const { formRef, elFormRef, defineColumn, _ } = useForm()
 const { formRef, elFormRef, defineColumn, _ } = useForm()
 
 
@@ -80,11 +90,47 @@ const model = reactive<FormModel>({
   objectiveScoreEnd: void 0,
   objectiveScoreEnd: void 0,
 })
 })
 
 
-watch(dataModel, () => {
-  model.subjectCode = dataModel.subject
-  model.mainNumber = dataModel.question
-  model.markingGroupNumber = dataModel.group
-})
+// watch(dataModel, () => {
+//   model.subjectCode = dataModel.subject
+//   model.mainNumber = dataModel.question
+//   model.markingGroupNumber = dataModel.group
+// })
+watch(
+  () => dataModel.subject,
+  () => {
+    model.subjectCode = dataModel.subject
+  }
+)
+watch(
+  () => dataModel.question,
+  () => {
+    model.mainNumber = dataModel.question
+  }
+)
+watch(
+  () => dataModel.group,
+  () => {
+    model.markingGroupNumber = dataModel.group
+  }
+)
+watch(
+  () => model.subjectCode,
+  () => {
+    dataModel.subject = model.subjectCode
+  }
+)
+watch(
+  () => model.mainNumber,
+  () => {
+    dataModel.question = model.mainNumber
+  }
+)
+watch(
+  () => model.markingGroupNumber,
+  () => {
+    dataModel.group = model.markingGroupNumber
+  }
+)
 
 
 const { fetch: getCustomQueryConfigList, result: customQueryConfigList } = useFetch('getCustomQueryConfigList')
 const { fetch: getCustomQueryConfigList, result: customQueryConfigList } = useFetch('getCustomQueryConfigList')
 const { fetch: setCustomQueryConfig, loading: saving } = useFetch('setCustomQueryConfig')
 const { fetch: setCustomQueryConfig, loading: saving } = useFetch('setCustomQueryConfig')
@@ -99,7 +145,12 @@ watch(
         mainNumber: model.mainNumber,
         mainNumber: model.mainNumber,
         markingGroupNumber: model.markingGroupNumber,
         markingGroupNumber: model.markingGroupNumber,
       }).then(() => {
       }).then(() => {
-        model.markerId = void 0
+        if (resetMarkerId.value) {
+          model.markerId = resetMarkerId.value
+          resetMarkerId.value = void 0
+        } else {
+          model.markerId = void 0
+        }
       })
       })
     }
     }
   },
   },
@@ -110,22 +161,58 @@ watch(
 
 
 getCustomQueryConfigList()
 getCustomQueryConfigList()
 
 
-const shortQueryConfig = computed<ExtractApiParams<'setCustomQueryConfig'>['params'] | void>(() => {
-  if (shortQueryConfigIndex.value === undefined) {
-    return void 0
-  }
-  return customQueryConfigList?.value?.[shortQueryConfigIndex.value]?.params
-})
+// const shortQueryConfig = computed<ExtractApiParams<'setCustomQueryConfig'>['params'] | void>(() => {
+//   if (shortQueryConfigIndex.value === undefined) {
+//     return void 0
+//   }
+//   return customQueryConfigList?.value?.[shortQueryConfigIndex.value]?.params
+// })
 
 
-watch(shortQueryConfig, () => {
-  if (!shortQueryConfig.value) {
-    elFormRef?.value?.resetFields()
-  } else {
-    Object.assign(model, omit(shortQueryConfig.value, 'timeStart', 'timeEnd'), {
-      time: [shortQueryConfig.value.timeStart, shortQueryConfig.value.timeEnd],
-    })
+// watch(shortQueryConfig, () => {
+//   if (!shortQueryConfig.value) {
+//     elFormRef?.value?.resetFields()
+//   } else {
+//     Object.assign(model, omit(shortQueryConfig.value, 'timeStart', 'timeEnd'), {
+//       time: [shortQueryConfig.value.timeStart, shortQueryConfig.value.timeEnd],
+//     })
+//   }
+// })
+const fastParamClear = () => {
+  // elFormRef?.value?.resetFields()
+  refresh()
+}
+const fastParamChange = async (index: number) => {
+  if (typeof index === 'number') {
+    let shortQueryConfig = customQueryConfigList?.value?.[index]?.params
+    if (shortQueryConfig) {
+      // Object.assign(model, omit(shortQueryConfig, 'timeStart', 'timeEnd'), {
+      //   time: [shortQueryConfig.timeStart, shortQueryConfig.timeEnd],
+      // })
+      elFormRef?.value?.resetFields()
+      if (shortQueryConfig.subjectCode) {
+        await getMainQuestionList({ subjectCode: shortQueryConfig.subjectCode as string })
+        if (shortQueryConfig.mainNumber) {
+          await getQuestionGroupList({
+            subjectCode: shortQueryConfig.subjectCode,
+            mainNumber: shortQueryConfig.mainNumber,
+          })
+        }
+      }
+      setTimeout(() => {
+        if (shortQueryConfig.markerId) {
+          resetMarkerId.value = shortQueryConfig.markerId
+        }
+        if (!shortQueryConfig.hasOwnProperty('markingGroupNumber')) {
+          shortQueryConfig.markingGroupNumber = undefined
+        }
+        console.log('shortQueryConfig:', shortQueryConfig)
+        Object.assign(model, omit(shortQueryConfig, 'timeStart', 'timeEnd'), {
+          time: [shortQueryConfig.timeStart, shortQueryConfig.timeEnd],
+        })
+      }, 30)
+    }
   }
   }
-})
+}
 
 
 const Span7 = defineColumn(_, _, { span: 7 })
 const Span7 = defineColumn(_, _, { span: 7 })
 const Span6 = defineColumn(_, _, { span: 6 })
 const Span6 = defineColumn(_, _, { span: 6 })