瀏覽代碼

产品问题优化

刘洋 1 年之前
父節點
當前提交
7dd691ba81

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

@@ -378,7 +378,8 @@ export namespace Statistics {
   interface TrainingMonitorParams {
   interface TrainingMonitorParams {
     subjectCode: string
     subjectCode: string
     mainNumber?: number | string
     mainNumber?: number | string
-    markingGroupNumber?: number | string
+    // markingGroupNumber?: number | string
+    markingGroupNumbers?: any
     markStage: 'SAMPLE_A' | 'SAMPLE_B' | 'FORCE'
     markStage: 'SAMPLE_A' | 'SAMPLE_B' | 'FORCE'
     forceGroupNumber?: number
     forceGroupNumber?: number
     dispenseRound?: number
     dispenseRound?: number

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

@@ -11,17 +11,32 @@
         v-bind="omit(option, 'groupKey')"
         v-bind="omit(option, 'groupKey')"
       ></el-option>
       ></el-option>
     </el-option-group>
     </el-option-group>
-    <el-option
-      v-for="(option, OIndex) in renderOptions.default"
-      :key="'group-default' + '-option-' + OIndex"
-      v-bind="omit(option, 'groupKey')"
-    ></el-option>
+    <template v-if="attrs.multiple">
+      <el-option
+        v-for="(option, OIndex) in renderOptions.default"
+        :key="'group-default' + '-option-' + OIndex"
+        v-bind="omit(option, 'groupKey')"
+      >
+        <span style="pointer-events: none; position: relative; bottom: -1px; margin-right: 4px">
+          <el-checkbox :model-value="checkboxValue(option)" label="" />
+        </span>
+        <span>{{ option.label }}</span>
+      </el-option>
+    </template>
+    <template v-else>
+      <el-option
+        v-for="(option, OIndex) in renderOptions.default"
+        :key="'group-default' + '-option-' + OIndex"
+        v-bind="omit(option, 'groupKey')"
+      >
+      </el-option>
+    </template>
   </el-select>
   </el-select>
 </template>
 </template>
 
 
 <script setup lang="ts" name="EpSelect">
 <script setup lang="ts" name="EpSelect">
-import { computed } from 'vue'
-import { ElSelect, ElOption, ElOptionGroup } from 'element-plus'
+import { computed, useAttrs } from 'vue'
+import { ElSelect, ElOption, ElOptionGroup, ElCheckbox } from 'element-plus'
 import { omit } from 'lodash-es'
 import { omit } from 'lodash-es'
 import type { FormItemSelectCustomProp } from 'global-type'
 import type { FormItemSelectCustomProp } from 'global-type'
 
 
@@ -31,7 +46,11 @@ interface SelectProp {
 }
 }
 const emits = defineEmits(['change', 'clear'])
 const emits = defineEmits(['change', 'clear'])
 const props = defineProps<SelectProp>()
 const props = defineProps<SelectProp>()
-
+const attrs: any = useAttrs()
+const checkboxValue = (option: any) => {
+  // return Array.isArray(attrs?.modelValue) ? attrs?.modelValue.includes(option.value) : false
+  return attrs?.modelValue?.includes(option.value)
+}
 type OptionGroup = ExtractRecordValue<SelectProp['optionGroup']> & { options: SelectProp['options'] }
 type OptionGroup = ExtractRecordValue<SelectProp['optionGroup']> & { options: SelectProp['options'] }
 
 
 type OptionRender = { default: SelectProp['options']; groups: Record<string | number, OptionGroup> }
 type OptionRender = { default: SelectProp['options']; groups: Record<string | number, OptionGroup> }

+ 33 - 8
src/modules/monitor/training-monitoring/hooks/useFormFilter.ts

@@ -17,14 +17,14 @@ const useFormFilter = () => {
     changeModelValue,
     changeModelValue,
     isExpert,
     isExpert,
     isLeader,
     isLeader,
-  } = useOptions(['subject', 'question', 'group'])
+  } = useOptions(['subject', 'question', 'group'], undefined, true, true, true)
 
 
   const { formRef, elFormRef, defineColumn, _ } = useForm()
   const { formRef, elFormRef, defineColumn, _ } = useForm()
 
 
   const model = reactive<ExtractApiParams<'getTrainingMonitor'> & { diffShow: string[] }>({
   const model = reactive<ExtractApiParams<'getTrainingMonitor'> & { diffShow: string[] }>({
     subjectCode: dataModel.subject || '',
     subjectCode: dataModel.subject || '',
     mainNumber: dataModel.question,
     mainNumber: dataModel.question,
-    markingGroupNumber: dataModel.group,
+    markingGroupNumbers: dataModel.group,
     markStage: 'SAMPLE_A',
     markStage: 'SAMPLE_A',
     forceGroupNumber: void 0,
     forceGroupNumber: void 0,
     diffShow: [],
     diffShow: [],
@@ -66,7 +66,7 @@ const useFormFilter = () => {
     () => {
     () => {
       model.subjectCode = dataModel.subject || ''
       model.subjectCode = dataModel.subject || ''
       model.mainNumber = dataModel.question
       model.mainNumber = dataModel.question
-      model.markingGroupNumber = dataModel.group
+      model.markingGroupNumbers = dataModel.group
     },
     },
     { deep: true }
     { deep: true }
   )
   )
@@ -121,6 +121,30 @@ const useFormFilter = () => {
   const OneRowSpan5 = defineColumn(_, 'row-1', { span: 5 })
   const OneRowSpan5 = defineColumn(_, 'row-1', { span: 5 })
   // const TwoRowSpan5 = defineColumn(_, 'row-2', { span: 5 })
   // const TwoRowSpan5 = defineColumn(_, 'row-2', { span: 5 })
 
 
+  const customGroupChange = (v: any) => {
+    if (groupListWithAll.value.find((item: any) => item.value == undefined)) {
+      if (model.markingGroupNumbers.includes(undefined)) {
+        model.markingGroupNumbers = [void 0]
+        changeModelValue('group')(model.markingGroupNumbers)
+      } else {
+        changeModelValue('group')(v)
+      }
+    } else {
+      changeModelValue('group')(v)
+    }
+  }
+  const transGroupOptions = computed(() => {
+    return (model.markingGroupNumbers || []).includes(undefined)
+      ? (groupListWithAll.value || []).map((item: any) => {
+          item.value != undefined && (item.disabled = true)
+          return item
+        })
+      : groupListWithAll.value.map((item: any) => {
+          item.disabled = false
+          return item
+        })
+  })
+
   const items = computed<EpFormItem[]>(() => {
   const items = computed<EpFormItem[]>(() => {
     return [
     return [
       OneRowSpan3({
       OneRowSpan3({
@@ -145,14 +169,15 @@ const useFormFilter = () => {
           disabled: !isExpert.value && !isLeader.value,
           disabled: !isExpert.value && !isLeader.value,
         },
         },
       }),
       }),
-      OneRowSpan3({
-        prop: 'markingGroupNumber',
+      OneRowSpan4({
+        prop: 'markingGroupNumbers',
         label: '小组',
         label: '小组',
         slotType: 'select',
         slotType: 'select',
         labelWidth: '50px',
         labelWidth: '50px',
         slot: {
         slot: {
-          options: groupListWithAll.value,
-          onChange: changeModelValue('group'),
+          options: transGroupOptions.value,
+          onChange: customGroupChange,
+          multiple: true,
         },
         },
       }),
       }),
 
 
@@ -183,7 +208,7 @@ const useFormFilter = () => {
           })
           })
         : null,
         : null,
       model.markStage === 'FORCE' && !isNaN(model.forceGroupNumber as number)
       model.markStage === 'FORCE' && !isNaN(model.forceGroupNumber as number)
-        ? OneRowSpan3({
+        ? OneRowSpan2({
             label: '',
             label: '',
             labelWidth: '5px',
             labelWidth: '5px',
             slotType: 'select',
             slotType: 'select',