瀏覽代碼

feat: 小题间隔分限制 & get请求数组参数转换

chenhao 2 年之前
父節點
當前提交
1216de96ff

+ 57 - 11
src/modules/admin-subject/edit-main-question/index.vue

@@ -92,7 +92,7 @@ const model = reactive<ExtractApiParams<'addMainQuestion'>>({
   subjectCode: props.subjectCode,
   subjectCode: props.subjectCode,
   groupNumber: void 0,
   groupNumber: void 0,
   category: void 0,
   category: void 0,
-  intervalScore: void 0,
+  intervalScore: 1,
   mainNumber: void 0,
   mainNumber: void 0,
   mainTitle: '',
   mainTitle: '',
   minMarkTime: void 0,
   minMarkTime: void 0,
@@ -186,30 +186,53 @@ const items = computed<EpFormItem[]>(() => [
       label: '小题起始号',
       label: '小题起始号',
       slotType: 'inputNumber',
       slotType: 'inputNumber',
       prop: 'startNumber',
       prop: 'startNumber',
-      slot: { placeholder: '小题起始号', disabled: isEdit },
+      slot: { placeholder: '小题起始号', disabled: isEdit, stepStrictly: true, step: 1 },
     },
     },
     'row-3'
     'row-3'
   ),
   ),
   Span8(
   Span8(
-    { label: '小题数量', slotType: 'inputNumber', prop: 'questionCount', slot: { placeholder: '小题数量' } },
+    {
+      label: '小题数量',
+      slotType: 'inputNumber',
+      prop: 'questionCount',
+      slot: { placeholder: '小题数量', stepStrictly: true, step: 1 },
+    },
     'row-4'
     'row-4'
   ),
   ),
   Span8(
   Span8(
-    { label: '小题满分', slotType: 'inputNumber', prop: 'questionScore', slot: { placeholder: '小题满分' } },
+    {
+      label: '小题满分',
+      slotType: 'inputNumber',
+      prop: 'questionScore',
+      slot: { placeholder: '小题满分', stepStrictly: true, step: 1 },
+    },
     'row-5'
     'row-5'
   ),
   ),
-  Span8({ label: '间隔分', slotType: 'inputNumber', prop: 'intervalScore', slot: { placeholder: '间隔分' } }, 'row-6'),
+  Span8(
+    {
+      label: '间隔分',
+      slotType: 'inputNumber',
+      prop: 'intervalScore',
+      slot: { placeholder: '间隔分', stepStrictly: true, step: 1 },
+    },
+    'row-6'
+  ),
   Span8(
   Span8(
     {
     {
       label: '最小阅卷时长(秒)',
       label: '最小阅卷时长(秒)',
       slotType: 'inputNumber',
       slotType: 'inputNumber',
       prop: 'minMarkTime',
       prop: 'minMarkTime',
-      slot: { placeholder: '最小阅卷时长(秒)' },
+      slot: { placeholder: '最小阅卷时长(秒)', stepStrictly: true, step: 1 },
     },
     },
     'row-7'
     'row-7'
   ),
   ),
   Span8(
   Span8(
-    { label: '评卷小组数量', slotType: 'inputNumber', prop: 'groupNumber', slot: { placeholder: '评卷小组数量' } },
+    {
+      label: '评卷小组数量',
+      slotType: 'inputNumber',
+      prop: 'groupNumber',
+      slot: { placeholder: '评卷小组数量', stepStrictly: true, step: 1 },
+    },
     'row-8'
     'row-8'
   ),
   ),
   Span8(
   Span8(
@@ -228,19 +251,42 @@ const items = computed<EpFormItem[]>(() => [
     'row-9'
     'row-9'
   ),
   ),
   Span8(
   Span8(
-    { label: model.remarkType === 'QUANTITY' ? '数量' : '时间:(近N秒)', prop: 'remarkNumber', slotType: 'inputNumber' },
+    {
+      label: model.remarkType === 'QUANTITY' ? '数量' : '时间:(近N秒)',
+      prop: 'remarkNumber',
+      slotType: 'inputNumber',
+      slot: {
+        stepStrictly: true,
+        step: 1,
+      },
+    },
     'row-10'
     'row-10'
   ),
   ),
   Span8(
   Span8(
-    { label: '标准卷分发频度', slotType: 'inputNumber', prop: 'standardRate', slot: { placeholder: '标准卷分发频度' } },
+    {
+      label: '标准卷分发频度',
+      slotType: 'inputNumber',
+      prop: 'standardRate',
+      slot: { placeholder: '标准卷分发频度', stepStrictly: true, step: 1 },
+    },
     'row-11'
     'row-11'
   ),
   ),
   Span8(
   Span8(
-    { label: '自查卷分发频度', slotType: 'inputNumber', prop: 'selfRate', slot: { placeholder: '自查卷分发频度' } },
+    {
+      label: '自查卷分发频度',
+      slotType: 'inputNumber',
+      prop: 'selfRate',
+      slot: { placeholder: '自查卷分发频度', stepStrictly: true, step: 1 },
+    },
     'row-11'
     'row-11'
   ),
   ),
   Span8(
   Span8(
-    { label: '系统抽查卷比例', slotType: 'inputNumber', prop: 'systemRate', slot: { placeholder: '系统抽查卷比例' } },
+    {
+      label: '系统抽查卷比例',
+      slotType: 'inputNumber',
+      prop: 'systemRate',
+      slot: { placeholder: '系统抽查卷比例', stepStrictly: true, step: 1 },
+    },
     'row-12'
     'row-12'
   ),
   ),
   Span8(
   Span8(

+ 6 - 1
src/modules/admin-subject/struct/index.vue

@@ -126,7 +126,12 @@ const items = computed<EpFormItem[]>(() => {
   return [
   return [
     { label: '大题', slotName: 'mainQuestion' },
     { label: '大题', slotName: 'mainQuestion' },
     { label: '小题号', slotName: 'subQuestion' },
     { label: '小题号', slotName: 'subQuestion' },
-    { label: '间隔分', prop: 'intervalScore', slotType: 'input', slot: { placeholder: '间隔分' } },
+    {
+      label: '间隔分',
+      prop: 'intervalScore',
+      slotType: 'inputNumber',
+      slot: { placeholder: '间隔分', stepStrictly: true, step: 1 },
+    },
   ]
   ]
 })
 })
 
 

+ 3 - 1
src/plugins/request/index.ts

@@ -1,6 +1,6 @@
 import axios, { AxiosError } from 'axios'
 import axios, { AxiosError } from 'axios'
 import { ElMessage } from 'element-plus'
 import { ElMessage } from 'element-plus'
-import { setupAuthSign, transformRequestData } from '@/plugins/request/plugin'
+import { setupAuthSign, transformRequestData, transformGetParams } from '@/plugins/request/plugin'
 import { filterEmpty, downloadBlob, extractFileName } from '@/utils/common'
 import { filterEmpty, downloadBlob, extractFileName } from '@/utils/common'
 import { logout } from '@/utils/shared'
 import { logout } from '@/utils/shared'
 import useMainStore from '@/store/main'
 import useMainStore from '@/store/main'
@@ -23,6 +23,8 @@ request.interceptors.request.use(
     config.data = filterEmpty(config.data)
     config.data = filterEmpty(config.data)
     config.params = filterEmpty(config.params)
     config.params = filterEmpty(config.params)
 
 
+    transformGetParams(config)
+
     setupAuthSign(config)
     setupAuthSign(config)
     transformRequestData(config)
     transformRequestData(config)
 
 

+ 17 - 0
src/plugins/request/plugin.ts

@@ -1,5 +1,6 @@
 import { SHA1, enc } from 'crypto-js'
 import { SHA1, enc } from 'crypto-js'
 import { sessionStorage } from '@/plugins/storage'
 import { sessionStorage } from '@/plugins/storage'
+import { typeOf } from '@/utils/common'
 import type { Method, AxiosRequestConfig } from 'axios'
 import type { Method, AxiosRequestConfig } from 'axios'
 import type { ExtractApiResponse } from '@/api/api'
 import type { ExtractApiResponse } from '@/api/api'
 
 
@@ -50,3 +51,19 @@ export const transformRequestData = (config: AxiosRequestConfig) => {
   }
   }
   return config
   return config
 }
 }
+
+/**
+ * @description get请求数组参数转换
+ */
+
+export const transformGetParams = (config: AxiosRequestConfig) => {
+  if (config.method?.toLowerCase() === 'get') {
+    config.params ??= {}
+    for (const k in config.params) {
+      if (typeOf(config.params[k]) === 'array') {
+        config.params[k] = config.params[k].join(',')
+      }
+    }
+  }
+  return config
+}