刘洋 1 year ago
parent
commit
f1e71ba61f

+ 1 - 0
src/api/api-types/exam.d.ts

@@ -48,6 +48,7 @@ export namespace Exam {
     scoreEffective: string
     markSite?: string
     rejectMessage?: boolean
+    employerCollect?: boolean
   }
 
   /** 新增/修改考试 */

+ 1 - 1
src/api/api-types/question.d.ts

@@ -49,7 +49,7 @@ export namespace Question {
   }
 
   /** 获取大题列表 */
-  type GetMainQuestionList = BaseDefine<{ subjectCode: string }, MainQuestionListItem[]>
+  type GetMainQuestionList = BaseDefine<{ subjectCode: string; excludeNumber?: any }, MainQuestionListItem[]>
 
   /** 获取小组列表 */
   type GetQuestionGroupList = BaseDefine<{ subjectCode?: string; mainNumber?: number | string }, number[]>

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

@@ -71,6 +71,7 @@ export namespace User {
     updateTime: string
     updaterName: string
     passwordWeak: boolean
+    employer?: string
   }
 
   /** 新增修改用户信息 */
@@ -129,7 +130,7 @@ export namespace User {
   /** 修改用户密码 */
   type UpdateUserPwd = BaseDefine<{ password: string }>
   /** 修改用户姓名 */
-  type UpdateUserName = BaseDefine<{ name: string }>
+  type UpdateUserName = BaseDefine<{ name: string; employer?: string }>
   /** 重置指定用户密码 */
   type ResetUsersPwd = BaseDefine<{ userIds: number[]; password: string }>
   /** 启用/禁用用户 */

+ 5 - 2
src/components/shared/UpdateUserPwd.vue

@@ -24,14 +24,16 @@ import type { EpFormItem, EpFormRules } from 'global-type'
 const props = defineProps<{
   userName: string
   modelValue: boolean
+  employer?: string
 }>()
 
 const visible = useVModel(props, 'modelValue')
 
 const { formRef, elFormRef } = useForm()
 
-const userModel = reactive<{ name: string; password: string; rePassword?: string }>({
+const userModel = reactive<{ name: string; password: string; rePassword?: string; employer?: string }>({
   name: props.userName,
+  employer: props.employer,
   password: '',
   rePassword: '',
 })
@@ -66,6 +68,7 @@ const rules: EpFormRules = {
 
 const items: EpFormItem[] = [
   { label: '姓名', prop: 'name', slotType: 'input', slot: { disabled: true } },
+  { label: '单位', prop: 'employer', slotType: 'input' },
   { label: '新密码', prop: 'password', slotType: 'input', slot: { type: 'password' } },
   { label: '确认密码', prop: 'rePassword', slotType: 'input', slot: { type: 'password' } },
   { slotName: 'confirm' },
@@ -74,7 +77,7 @@ const items: EpFormItem[] = [
 const onSubmit = async () => {
   try {
     const valid = await elFormRef?.value?.validate()
-    valid && (await useFetch('updateUserPwd').fetch({ password: userModel.password }))
+    valid && (await useFetch('updateUserPwd').fetch({ password: userModel.password, employer: userModel.employer }))
     visible.value = false
     ElMessage.success('修改成功')
   } catch (error) {

+ 7 - 2
src/components/shared/UserInfo.vue

@@ -24,7 +24,11 @@
     </div>
   </div>
 
-  <update-user-pwd v-model="visibleUpdatePwd" :user-name="info.name || ''"></update-user-pwd>
+  <update-user-pwd
+    v-model="visibleUpdatePwd"
+    :user-name="info.name || ''"
+    :employer="info.employer || ''"
+  ></update-user-pwd>
 </template>
 
 <script setup lang="ts" name="UserInfo">
@@ -36,11 +40,12 @@ import SvgIcon from '../common/SvgIcon.vue'
 const mainStore = useMainStore()
 const props = defineProps<{ inLayout?: boolean }>()
 const info = computed(() => {
-  const { loginName, name, roleName } = mainStore.myUserInfo || {}
+  const { loginName, name, roleName, employer } = mainStore.myUserInfo || {}
   return {
     userName: [loginName, name].filter(Boolean).join('-'),
     roleName,
     name,
+    employer,
   }
 })
 

+ 3 - 0
src/modules/admin-exam/edit-exam/index.vue

@@ -41,6 +41,7 @@ const initModel: ExtractApiParams<'saveExamInfo'> = {
   maxMarkingDuration: void 0,
   spotCheckReject: true,
   userNameCollect: true,
+  employerCollect: true,
   enable: true,
   rejectReason: true,
   // scoreEffective: 'FINAL_MARK',
@@ -71,6 +72,7 @@ const rules: EpFormRules = {
     { type: 'number', min: 1, max: 1440, message: '任务回收时间限制1-1440分钟' },
   ],
   userNameCollect: [{ required: true, message: '是否收集用户姓名' }],
+  employerCollect: [{ required: true, message: '是否收集用户单位' }],
   // scoreEffective: [{ required: true, message: '分析计算取值方式' }],
   enable: [{ required: true, message: '是否启用考试' }],
   markSite: [{ required: true, message: '请填写评卷点' }],
@@ -111,6 +113,7 @@ const items: EpFormItem[] = [
     slot: { stepStrictly: true, step: 1 },
   }),
   span8({ label: '用户姓名收集', slotType: 'select', prop: 'userNameCollect', slot: { options: TrueOrFalse } }),
+  span8({ label: '单位信息收集', slotType: 'select', prop: 'employerCollect', slot: { options: TrueOrFalse } }),
   // span8({ label: '分析计算取值', slotType: 'select', prop: 'scoreEffective', slot: { options: scoreEffectiveOption } }),
   span8({ label: '状态', slotType: 'select', prop: 'enable', slot: { options: StatusMap } }),
   span8({ label: '评卷点', slotType: 'input', prop: 'markSite' }),

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

@@ -87,7 +87,7 @@ const { fetch: getMainQuestionList, result: mainQuestionListResult } = useFetch(
 const { back } = useRouter()
 
 const props = defineProps<{ subjectCode: string; mainNumber?: number | string }>()
-getMainQuestionList({ subjectCode: props.subjectCode })
+getMainQuestionList({ subjectCode: props.subjectCode, excludeNumber: props.mainNumber || undefined })
 const mainQuestionOptions = computed(() => {
   return (
     mainQuestionListResult.value?.map((v: any) => {

+ 1 - 0
src/modules/admin-user/manage/hooks/useUserManageTable.ts

@@ -10,6 +10,7 @@ const useUserManageTable = (model?: ModelType<'getUserList'>) => {
     { label: 'ID', prop: 'id', minWidth: 50 },
     { label: '姓名', prop: 'name', minWidth: 100 },
     { label: '登录名', prop: 'loginName', minWidth: 100 },
+    { label: '单位', prop: 'employer', minWidth: 100 },
     { label: '角色', prop: 'roleName', minWidth: 80 },
     {
       label: '状态',

+ 1 - 0
src/modules/analysis/marker-statistics/index.vue

@@ -453,6 +453,7 @@ const columns: any = computed(() => {
     { label: '客主比', prop: 'markerRatio', minWidth: 80 },
     { label: '成绩客主比', prop: 'ratio', minWidth: 110 },
     { label: '成绩', prop: 'markScore', minWidth: 70 },
+    { label: '评卷时间', prop: 'markTime', minWidth: 140 },
   ]
   if (isMult.value) {
     cols.unshift({

+ 0 - 1
src/modules/analysis/marking-progress/components/TotalProgress.vue

@@ -440,7 +440,6 @@ const dayColumns = computed(() => {
         formatter(row: any) {
           let dayProgresses = row.dayProgresses
           let col = dayProgresses.find((v: any) => v.date == item.date)
-          // return '444'
           return <span>{`${col.count} / ${col.rate}%`}</span>
         },
       }

+ 44 - 18
src/modules/bootstrap/init-name/index.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="grid full init-name-view">
     <div class="init-name-modal">
-      <div class="p-l-large modal-header">首次登录,请填写姓名</div>
+      <div class="p-l-large modal-header">首次登录,请填写姓名{{ needEmployer ? '和单位' : '' }}</div>
       <div class="login-modal-content">
         <base-form ref="formRef" :rules="rules" :model="model" :items="items" size="large"></base-form>
         <div class="m-t-super-large">
@@ -14,7 +14,7 @@
 </template>
 
 <script setup lang="ts" name="InitUserName">
-import { reactive } from 'vue'
+import { reactive, ref, computed } from 'vue'
 import { useRouter } from 'vue-router'
 import BaseForm from '@/components/element/BaseForm.vue'
 import ConfirmButton from '@/components/common/ConfirmButton.vue'
@@ -28,33 +28,58 @@ import type { EpFormItem, EpFormRules } from 'global-type'
 const { replace } = useRouter()
 
 const mainStore = useMainStore()
-
-const model = reactive<{ name: string }>({ name: '' })
+const needEmployer = ref(false)
+const model = reactive<{ name: string; employer: string }>({ name: '', employer: '' })
 
 const { formRef, elFormRef } = useForm()
 
 const rules: EpFormRules = {
   name: [
-    { required: true, message: '请填写用户姓名' },
+    { required: true, message: '请输入你的姓名' },
     { type: 'string', max: 50, message: '用户姓名限制50字以内' },
   ],
 }
 
-const items: EpFormItem[] = [
-  {
-    prop: 'name',
-    slotType: 'input',
-    slot: {
-      placeholder: '请输入你的姓名',
-      onKeydown(event: any) {
-        if (event.keyCode == 13) {
-          onSubmit()
-        }
+const items: any = computed(() => {
+  let options = [
+    {
+      prop: 'name',
+      slotType: 'input',
+      label: '姓名',
+      labelWidth: '60px',
+      slot: {
+        placeholder: '请输入你的姓名',
+        onKeydown(event: any) {
+          if (event.keyCode == 13) {
+            onSubmit()
+          }
+        },
       },
     },
-  },
-]
+  ]
+  if (needEmployer.value) {
+    options.push({
+      prop: 'employer',
+      slotType: 'input',
+      label: '单位',
+      labelWidth: '60px',
+      slot: {
+        placeholder: '请输入你的单位全称',
+        onKeydown(event: any) {
+          if (event.keyCode == 13) {
+            onSubmit()
+          }
+        },
+      },
+    })
+  }
+  return options
+})
 
+const { fetch: getExamInfo } = useFetch('getExamInfo')
+getExamInfo({ id: mainStore.loginInfo?.examId as number }).then((result: any) => {
+  needEmployer.value = result.employerCollect
+})
 const { loading, fetch } = useFetch('updateUserName')
 
 async function onSubmit() {
@@ -63,7 +88,7 @@ async function onSubmit() {
   }
   try {
     await elFormRef.value?.validate()
-    await fetch({ name: model.name })
+    await fetch({ name: model.name, employer: needEmployer.value ? model.employer : undefined })
     mainStore.getMyUserInfo()
     replace({ name: mainStore.loginInfo?.role === 'MARKER' ? 'MarkingMark' : 'AnalysisMonitoring' })
   } catch (error) {
@@ -90,6 +115,7 @@ async function onSubmit() {
     }
     .login-modal-content {
       padding: 52px 80px;
+      padding-left: 50px;
     }
     :deep(button.el-button) {
       width: 120px;