Explorar el Código

feat: 设置姓名和选择考试页面退出到登录页。头部显示考试名称

chenhao hace 2 años
padre
commit
e931cc5c40

+ 8 - 3
src/layout/main/MainHeader.vue

@@ -6,8 +6,9 @@
         <fold v-else />
       </el-icon>
     </div>
-    <div class="flex items-center header-info-view">
-      <div class="m-r-base">
+    <div class="flex-1 flex items-center header-info-view">
+      <div>当前考试: {{ mainStore?.myUserInfo?.examName }}</div>
+      <div class="m-l-auto m-r-base">
         <message :reply-user-id="props.replyUserId" :message-visible="props.messageVisible"></message>
       </div>
       <div class="m-r-base">
@@ -25,6 +26,7 @@ import { ElIcon } from 'element-plus'
 import { Fold, Expand, Close } from '@element-plus/icons-vue'
 import { logout } from '@/utils/shared'
 import useMainLayoutStore from '@/store/layout'
+import useMainStore from '@/store/main'
 import Message from '@/components/shared/message/Message.vue'
 import UserInfo from '@/components/shared/UserInfo.vue'
 
@@ -34,6 +36,8 @@ const props = defineProps<{
 }>()
 
 const mainLayoutStore = useMainLayoutStore()
+
+const mainStore = useMainStore()
 </script>
 
 <style scoped lang="scss">
@@ -46,7 +50,8 @@ const mainLayoutStore = useMainLayoutStore()
     padding: $ExtraSmallGapSpace;
   }
   .header-info-view {
-    margin-left: auto;
+    color: $RegularFontColor;
+    font-size: $SmallFont;
     .close-icon {
       width: 32px;
       height: 32px;

+ 2 - 2
src/modules/bootstrap/check-exam/index.vue

@@ -17,7 +17,7 @@
             :ok-text="isCreate ? '创建考试' : '确定'"
             cancel-text="退出"
             @confirm="joinOrCreateExam(isCreate)"
-            @cancel="closeApp"
+            @cancel="logout"
           ></confirm-button>
         </div>
       </div>
@@ -29,7 +29,7 @@
 import { ref, computed } from 'vue'
 import { useRouter } from 'vue-router'
 import { ElMessage } from 'element-plus'
-import { closeApp } from '@/utils/shared'
+import { logout } from '@/utils/shared'
 import useFetch from '@/hooks/useFetch'
 import useMainStore from '@/store/main'
 import BaseSelect from '@/components/element/BaseSelect.vue'

+ 2 - 2
src/modules/bootstrap/init-name/index.vue

@@ -5,7 +5,7 @@
       <div class="login-modal-content">
         <base-form ref="formRef" :model="model" :items="items" size="large"></base-form>
         <div class="m-t-super-large">
-          <confirm-button ok-text="确定" cancel-text="退出" :loading="loading" @confirm="onSubmit" @cancel="closeApp">
+          <confirm-button ok-text="确定" cancel-text="退出" :loading="loading" @confirm="onSubmit" @cancel="logout">
           </confirm-button>
         </div>
       </div>
@@ -21,7 +21,7 @@ import ConfirmButton from '@/components/common/ConfirmButton.vue'
 import useFetch from '@/hooks/useFetch'
 import useForm from '@/hooks/useForm'
 import useMainStore from '@/store/main'
-import { closeApp } from '@/utils/shared'
+import { logout } from '@/utils/shared'
 
 import type { EpFormItem } from 'global-type'
 

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

@@ -3,6 +3,7 @@ import { ElMessage } from 'element-plus'
 import { setupAuthSign, transformRequestData } from '@/plugins/request/plugin'
 import { filterEmpty, downloadBlob, extractFileName } from '@/utils/common'
 import { logout } from '@/utils/shared'
+import useMainStore from '@/store/main'
 
 const request = axios.create({
   baseURL: import.meta.env.VITE_APP_API_HOST || '/',
@@ -40,6 +41,8 @@ request.interceptors.request.use(
 
 request.interceptors.response.use(
   (response) => {
+    useMainStore().serverTime = new Date(response.headers?.['date']).getTime()
+    useMainStore().diffTime = useMainStore().serverTime - Date.now()
     if (response.data.hasError) {
       const errMsg = response.data?.failRecords.map((v: any) => [v.msg, v.lineNum].join('--'))?.join('\n')
       ElMessage.error(errMsg)

+ 9 - 0
src/store/main.ts

@@ -5,6 +5,9 @@ import useFetch from '@/hooks/useFetch'
 import type { ExtractApiResponse } from 'api-type'
 interface MainStoreState {
   bootstrapTime: number
+  loginSuccessTime: number
+  serverTime: number
+  diffTime: number
   loginInfo?: ExtractApiResponse<'userLogin'>
   myUserInfo?: ExtractApiResponse<'getMyUserInfo'>
 }
@@ -18,6 +21,12 @@ const useMainStore = defineStore<'main', MainStoreState, Record<string, any>, Ma
     return {
       /** 进入系统的时间 */
       bootstrapTime: Date.now(),
+      /** 登录成功时间 */
+      loginSuccessTime: 0,
+      /** 服务器时间 */
+      serverTime: 0,
+      /** 时间差 */
+      diffTime: 0,
       /** 用户登录信息 */
       loginInfo: (sessionStorage.get('LOGIN_RESULT') as ExtractApiResponse<'userLogin'>) ?? void 0,
       /** 当前用户信息 */