From a8d8e144c852ec19c0745c0946109a3339522649 Mon Sep 17 00:00:00 2001
From: yujialong <479214531@qq.com>
Date: Thu, 5 Sep 2024 16:27:27 +0800
Subject: [PATCH] fix

---
 public/index.html                       |   8 +-
 src/components/ueditorPlus/index.vue    |   5 +-
 src/components/upload/config.js         |  28 +--
 src/layouts/footer/index.vue            | 253 ++++++++++++------------
 src/pages/account/login/index.vue       |  20 +-
 src/pages/match/details/index.vue       | 125 +++---------
 src/pages/match/theoryExam/index.vue    |  16 +-
 src/pages/record/theoryReport/index.vue |  22 ++-
 8 files changed, 234 insertions(+), 243 deletions(-)

diff --git a/public/index.html b/public/index.html
index 486c93a..0ba61e4 100644
--- a/public/index.html
+++ b/public/index.html
@@ -3,21 +3,21 @@
     <head>
         <meta charset="utf-8" />
         <meta http-equiv="X-UA-Compatible" content="IE=edge" />
-        <meta name="keywords" content="职站,教学,教育,在线编程" />
+        <meta name="keywords" content="智信云,教学,教育,在线编程" />
         <meta
             name="description"
-            content="职站是一款辅助院校教师开展虚拟仿真实验教学的智能云实践平台。平台采用了大数据,云计算等技术,为学校搭建信息化平台提供了基础,可助力院校实现教学智能化升级。职站平台设计遵循着极简、高效的理念,可帮助老师轻松开展实验教学,并支持自定义发布考核和练习,智能统计和检验学生的日常实训练习效果;老师还可以通过可视化图表报告直观查看学生实训成绩,评估教学成果。"
+            content="智信云是一家为高等院校提供实验课程数字化服务的国家级高新技术企业。以区块链、大数据、人工智能等前沿技术在行业领域的运用为支撑,将新技术与经济与管理人才培养深度融合,面向全国高等院校的经济、金融、大数据应用等相关专业提供科研创新、金课建设、实验实训教学软件、实践教学以及学生就业培训为一体的专业建设咨询与技术支持服务。"
         />
         <meta name="baidu-site-verification" content="code-TRfXe8xIkJ" />
         <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
         <!-- <meta name="viewport" content="width=device-width, user-scalable=yes, shrink-to-fit=no" /> -->
         <link rel="stylesheet" href="//at.alicdn.com/t/font_830376_qzecyukz0s.css" />
-        <title>职站——为院校打造一站式虚拟仿真实训教学数智云平台</title>
+        <title>智信云</title>
         <script>
             var _hmt = _hmt || [];
             (function () {
                 var hm = document.createElement('script');
-                hm.src = 'https://hm.baidu.com/hm.js?72fbad6ebf1d6c705117fe8fe0686a0e';
+                hm.src = 'https://hm.baidu.com/hm.js?e4d7deeca2d6ea71d2bd5fa2365bc654';
                 var s = document.getElementsByTagName('script')[0];
                 s.parentNode.insertBefore(hm, s);
             })();
diff --git a/src/components/ueditorPlus/index.vue b/src/components/ueditorPlus/index.vue
index 75c2ed6..0d0283b 100644
--- a/src/components/ueditorPlus/index.vue
+++ b/src/components/ueditorPlus/index.vue
@@ -44,10 +44,11 @@ export default {
   methods: {
     initEditor () {
       this.$nextTick(() => {
+        const host = Setting.isPro || Setting.isZxy ? location.origin : `http://121.37.12.51`
         // eslint-disable-next-line no-undef
         this.instance = UE.getEditor(this.randomId, {
-          UEDITOR_HOME_URL: Setting.isDev ? '/static/ueditorPlus/' : '/examination/static/ueditorPlus/',
-          serverUrl: "http://121.37.12.51/exam/exam/upload/configAndUpload",
+          UEDITOR_HOME_URL: Setting.isTest ? '/examination/static/ueditorPlus/' : '/static/ueditorPlus/',
+          serverUrl: host + `/exam/exam/upload/configAndUpload`,
           plugins: 'gapfilling'
         })
 
diff --git a/src/components/upload/config.js b/src/components/upload/config.js
index 04818ef..0d3a3ed 100644
--- a/src/components/upload/config.js
+++ b/src/components/upload/config.js
@@ -5,6 +5,8 @@ import { get } from '@/plugins/requests/index.js'
 import api from '@/api'
 import CryptoJS from 'crypto-js'
 import JSEncrypt from 'jsencrypt'
+import Util from '@/libs/util'
+import Setting from '@/setting'
 
 const A = (key, encryptedData) => {
   const keyHex = CryptoJS.enc.Base64.parse(key)
@@ -24,18 +26,20 @@ const R = (encryptedKey, privateKey) => {
 
 export default async function () {
   try {
-    const res = await get(api.encrypt)
-    const RE = A(R(res.encryptedKey, res.privateKey), res.encryptedData).split('/')
-    return {
-      // oss账号信息
-      config: {
-        region: 'oss-cn-shenzhen',
-        accessKeyId: RE[0],
-        accessKeySecret: RE[1],
-        bucket: 'huoran'
-      },
-      // 上传成功url前置部分(成功回调没有返回url)
-      preUrl: 'https://huoran.oss-cn-shenzhen.aliyuncs.com/'
+    if (Util.local.get(Setting.tokenKey)) {
+      const res = await get(api.encrypt)
+      const RE = A(R(res.encryptedKey, res.privateKey), res.encryptedData).split('/')
+      return {
+        // oss账号信息
+        config: {
+          region: 'oss-cn-shenzhen',
+          accessKeyId: RE[0],
+          accessKeySecret: RE[1],
+          bucket: 'huoran'
+        },
+        // 上传成功url前置部分(成功回调没有返回url)
+        preUrl: 'https://huoran.oss-cn-shenzhen.aliyuncs.com/'
+      }
     }
   } catch (e) { }
 }
\ No newline at end of file
diff --git a/src/layouts/footer/index.vue b/src/layouts/footer/index.vue
index d825730..ea97d6c 100644
--- a/src/layouts/footer/index.vue
+++ b/src/layouts/footer/index.vue
@@ -1,56 +1,45 @@
 <template>
   <div>
-    <div v-if="isZxy"
-         style="min-width: 1280px">
+    <div v-if="isZxy" style="min-width: 1280px">
       <template v-if="isIndex">
         <div class="use">
           <h6>现在就使用智信云平台,开始实践教学</h6>
           <div class="btns">
-            <span class="btn1"
-                  @click="toTrial">预约演示</span>
-            <span class="btn2"
-                  @click="toTrial">免费试用</span>
+            <span class="btn1" @click="toTrial">预约演示</span>
+            <span class="btn2" @click="toTrial">免费试用</span>
           </div>
         </div>
         <div class="company">
           <div class="left">
             <div class="logo">
-              <img src="@/assets/img/zxy/logo-gray.png"
-                   alt="">
+              <img src="@/assets/img/zxy/logo-gray.png" alt="">
               <span>联系我们,为您提供最新产品咨询与客服答疑</span>
             </div>
             <div class="texts">
-              <p class="line"
-                 style="margin-bottom: 10px">
+              <p class="line" style="margin-bottom: 10px">
                 <span class="label">联系我们</span>
                 <span class="val">客服电话:0551-68112926&emsp;&emsp;合作咨询:18019930142 刘经理</span>
               </p>
-              <p class="line"
-                 style="margin: 0 0 20px 72px;">
+              <p class="line" style="margin: 0 0 20px 72px;">
                 <span class="val">客服邮箱:ahzxy@zhixinyunedu.com</span>
               </p>
               <p class="line">
                 <span class="label">友情链接</span>
                 <span class="val">
-                  <a href="http://www.zxyicloud.com/#/ChuanDa/66/leftmenu/0"
-                     target="_blank">智信云官网</a>
+                  <a href="http://www.zxyicloud.com/#/ChuanDa/66/leftmenu/0" target="_blank">智信云官网</a>
                   &emsp;<em style="font-style: normal;color: #636F7C;">|</em>&emsp;
-                  <a href="http://cxhz.hep.com.cn/"
-                     target="_blank">协同育人</a>
+                  <a href="http://cxhz.hep.com.cn/" target="_blank">协同育人</a>
                 </span>
               </p>
             </div>
           </div>
           <div class="qrcodes">
-            <div class="qrcode"
-                 style="margin-right: 16px">
-              <img src="@/assets/img/zxy/qrcode1.png"
-                   alt="">
+            <div class="qrcode" style="margin-right: 16px">
+              <img src="@/assets/img/zxy/qrcode1.png" alt="">
               <p class="text">高校交流群</p>
             </div>
             <div class="qrcode">
-              <img src="@/assets/img/zxy/qrcode2.png"
-                   alt="">
+              <img src="@/assets/img/zxy/qrcode2.png" alt="">
               <p class="text">扫一扫 关注我们</p>
             </div>
           </div>
@@ -60,16 +49,13 @@
         © Copyright 2022 智信云&emsp;皖ICP备2021016749号
       </div>
     </div>
-    <div v-else
-         class="footer">
-      <div class="info"
-           v-if="isIndex">
+    <div v-else class="footer">
+      <div class="info" v-if="isIndex">
         <span class="m-r-20">客服邮箱:service@huorantech.cn</span>
       </div>
       <div class="copyright">
         <span v-if="isIndex">© Copyright 2021 Occupation Lab 职站</span>
-        <a href="https://beian.miit.gov.cn/#/Integrated/index"
-           target="_blank">粤ICP备20072679号</a>
+        <a href="https://beian.miit.gov.cn/#/Integrated/index" target="_blank">粤ICP备20072679号</a>
       </div>
     </div>
   </div>
@@ -96,120 +82,141 @@ export default {
 </script>
 <style lang="scss" scoped>
 .footer {
-    padding: 17px 0 9px;
+  padding: 17px 0 9px;
+  text-align: center;
+  background-color: #0f1d2e;
+
+  .info {
+    margin-bottom: 7px;
+    font-size: 14px;
+    line-height: 20px;
+    color: #d7dfe7;
+  }
+
+  .copyright {
+    font-size: 12px;
     text-align: center;
-    background-color: #0f1d2e;
-    .info {
-        margin-bottom: 7px;
-        font-size: 14px;
-        line-height: 20px;
-        color: #d7dfe7;
+    line-height: 17px;
+
+    span {
+      margin-right: 20px;
+      color: #757f8a;
     }
-    .copyright {
-        font-size: 12px;
-        text-align: center;
-        line-height: 17px;
-        span {
-            margin-right: 20px;
-            color: #757f8a;
-        }
-        a {
-            color: #757f8a;
-            font-size: 12px;
-            &:hover {
-                color: #c7c7c7;
-            }
-        }
+
+    a {
+      color: #757f8a;
+      font-size: 12px;
+
+      &:hover {
+        color: #c7c7c7;
+      }
     }
+  }
 }
 
 .use {
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  align-items: center;
+  height: 242px;
+  background: url(../../assets/img/zxy/begin-bg.png) 0 0/100% 100% no-repeat;
+
+  h6 {
+    margin-bottom: 25px;
+    font-size: 40px;
+    color: #fff;
+  }
+
+  .btns {
     display: flex;
-    flex-direction: column;
-    justify-content: center;
-    align-items: center;
-    height: 242px;
-    background: url(../../assets/img/zxy/begin-bg.png) 0 0/100% 100% no-repeat;
-    h6 {
-        margin-bottom: 25px;
-        font-size: 40px;
-        color: #fff;
+
+    span {
+      width: 96px;
+      font-size: 14px;
+      line-height: 36px;
+      text-align: center;
+      border-radius: 6px;
+      cursor: pointer;
     }
-    .btns {
-        display: flex;
-        span {
-            width: 96px;
-            font-size: 14px;
-            line-height: 36px;
-            text-align: center;
-            border-radius: 6px;
-            cursor: pointer;
-        }
-        .btn1 {
-            margin-right: 16px;
-            color: #fff;
-            background: rgba(255, 255, 255, 0.14);
-            border: 1px solid #fff;
-        }
-        .btn2 {
-            color: #007eff;
-            background-color: #fff;
-        }
+
+    .btn1 {
+      margin-right: 16px;
+      color: #fff;
+      background: rgba(255, 255, 255, 0.14);
+      border: 1px solid #fff;
     }
+
+    .btn2 {
+      color: #007eff;
+      background-color: #fff;
+    }
+  }
 }
+
 .company {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  padding: 36px 0 14px;
+  background-color: #0f1d2e;
+
+  .logo {
     display: flex;
-    justify-content: center;
     align-items: center;
-    padding: 36px 0 14px;
-    background-color: #0f1d2e;
-    .logo {
-        display: flex;
-        align-items: center;
-        margin-bottom: 18px;
-        span {
-            padding-left: 14px;
-            margin-left: 18px;
-            font-size: 16px;
-            color: #9aacbe;
-            border-left: 1px solid #283545;
-        }
+    margin-bottom: 18px;
+
+    span {
+      padding-left: 14px;
+      margin-left: 18px;
+      font-size: 16px;
+      color: #9aacbe;
+      border-left: 1px solid #283545;
     }
-    .left {
-        margin-right: 160px;
+  }
+
+  .left {
+    margin-right: 160px;
+  }
+
+  .texts {
+    .line {
+      display: flex;
+      font-size: 13px;
     }
-    .texts {
-        .line {
-            display: flex;
-            font-size: 13px;
-        }
-        .label {
-            margin-right: 20px;
-            color: #636f7c;
-        }
-        .val {
-            color: #d6dee8;
-        }
+
+    .label {
+      margin-right: 20px;
+      color: #636f7c;
     }
-    .qrcodes {
-        display: inline-flex;
-        margin-top: 20px;
+
+    .val {
+      color: #d6dee8;
     }
-    .qrcode {
-        text-align: center;
-        .text {
-            margin-top: 10px;
-            font-size: 12px;
-            color: #757f8a;
-        }
+  }
+
+  .qrcodes {
+    display: inline-flex;
+    margin-top: 20px;
+  }
+
+  .qrcode {
+    text-align: center;
+
+    .text {
+      margin-top: 10px;
+      font-size: 12px;
+      color: #757f8a;
     }
+  }
 }
+
 .zxy-footer {
-    line-height: 34px;
-    text-align: center;
-    font-size: 12px;
-    color: #757f8a;
-    border-top: 1px solid rgba(255, 255, 255, 0.05);
-    background-color: #0f1d2e;
+  line-height: 42px;
+  text-align: center;
+  font-size: 12px;
+  color: #757f8a;
+  border-top: 1px solid rgba(255, 255, 255, 0.05);
+  background-color: #0f1d2e;
 }
 </style>
\ No newline at end of file
diff --git a/src/pages/account/login/index.vue b/src/pages/account/login/index.vue
index 1535528..a0ca552 100644
--- a/src/pages/account/login/index.vue
+++ b/src/pages/account/login/index.vue
@@ -1,6 +1,12 @@
 <template>
   <div class="wrap">
     <div class="login">
+      <div class="notice-alert">
+        <el-alert
+          title="平台维护通知:我们计划于2024年9月6日(星期五)20:00至2024年9月7日(星期六)12:00进行系统维护升级工作。维护期间,平台将暂时关闭,所有用户将无法登录平台,全部服务将暂停使用。"
+          type="warning" :closable="false">
+        </el-alert>
+      </div>
       <div class="form">
         <h6 class="title">欢迎使用请登录</h6>
 
@@ -718,6 +724,11 @@ export default {
 .wrap {
   min-height: 100%;
   background-color: #f3f6fa;
+
+  .notice-alert {
+    max-width: 436px;
+    margin: 0 auto 20px;
+  }
 }
 
 .ver-code {
@@ -732,7 +743,7 @@ export default {
 
 .login {
   min-height: calc(100vh - 43px);
-  padding-top: calc((100vh - 584px) / 2);
+  padding-top: calc((100vh - 750px) / 2);
   background: url(../../../assets/img/shapes/shape1.png) (0 123px) / auto no-repeat,
     url(../../../assets/img/shapes/shape2.png) (35px 238px) / auto no-repeat,
     url(../../../assets/img/shapes/shape3.png) (0 485px) / auto no-repeat,
@@ -869,6 +880,13 @@ export default {
     border-radius: 4px;
     border: 0;
   }
+
+  .notice {
+    width: 400px;
+    // padding: 10px 20px;
+    margin-left: 20px;
+    // box-shadow: 0 0 7px rgba(235, 235, 235, .8);
+  }
 }
 
 .copyright {
diff --git a/src/pages/match/details/index.vue b/src/pages/match/details/index.vue
index d9f4e4a..50d1624 100644
--- a/src/pages/match/details/index.vue
+++ b/src/pages/match/details/index.vue
@@ -374,59 +374,24 @@
         <el-button size="small" @click="peopleSignupVisible = false">取消</el-button>
       </span>
     </el-dialog>
-    <el-dialog title="报名" :visible.sync="enterVisible" :close-on-click-modal="false" width="850px"
-      custom-class="enter-dia" @close="enterClose">
-      <div class="flex">
-        <el-form class="dia-form" label-width="90px">
-          <el-form-item label="姓名">
-            <el-input disabled v-model="userName"></el-input>
-          </el-form-item>
-          <el-form-item label="来自学校">
-            <el-select v-model="enterForm.studentAffiliatedInstitutionId" filterable style="width: 100%">
-              <el-option v-for="(item, i) in schools" :key="i" :label="item.schoolName"
-                :value="item.schoolId"></el-option>
-            </el-select>
-          </el-form-item>
-          <p class="m-t-20 m-b-5">请选择要加入的团队</p>
-          <el-form-item label="团队">
-            <el-select class="w-100" v-model="enterForm.teamId" filterable>
-              <el-option v-for="(item, i) in teams" :key="i" :label="item.teamName" :value="item.teamId"></el-option>
-            </el-select>
-          </el-form-item>
-          <el-form-item label="团队邀请码">
-            <el-input placeholder="请输入团队邀请码" maxlength="6" v-model="enterForm.invitationCode"></el-input>
-          </el-form-item>
-          <el-form-item label="大赛邀请码" v-if="form.completeCompetitionSetup.isNeedCode">
-            <el-input placeholder="请输入大赛邀请码" maxlength="6" v-model="enterForm.registrationInvitationCode"></el-input>
-          </el-form-item>
-          <p class="tips">
-            查找不到团队?点击 <el-link :underline="false" type="primary" @click="toTeam">创建团队</el-link>
-          </p>
-        </el-form>
-        <div class="agree">
-          <div class="agreement">
-            <h6>参赛选手承诺书</h6>
-            <div class="text">
-              <p class="line">本人自愿参加2024年安徽省大学生金融投资创新大赛,为进一步提高廉洁自律意识,客观公正的履行职责,我以大赛参赛学生的身份和荣誉郑重作出如下承诺:</p>
-              <p class="line">1.尊重大赛组委会及秘书处,尊重专家和仲裁,尊重参赛单位和其他选手,客观、公正地参加比赛。</p>
-              <p class="line">
-                2.遵守道德,遵守大赛纪律,不私下接触其他参赛单位和团队成员、专家、裁判员、仲裁员。
-              </p>
-              <p class="line">
-                3.保证提交的所有信息、数据和材料均真实、准确、合法及有效,不侵犯任何第三方的知识产权和其他权益。参赛选手均无条件配合大赛组委会对参赛选手提供的数据、信息、材料及有关情况等进行核实。
-              </p>
-              <p class="line">4.遵守公正、公平原则,不干扰裁判员、仲裁员等工作及其他参赛单位和团队成员等比赛,影响比赛成绩。认可大赛组委会提供的基础数据。</p>
-              <p class="line">5.不发表、不传播没有根据并对大赛产生不利影响的言论。</p>
-              <p class="line">6.不隐瞒按规定应该回避的事项。</p>
-              <p class="line">7.对于涉嫌泄密事宜,愿接受、协助、配合相关部门的监督检查,并履行举证义务。</p>
-              <p class="line">8.如若发生上述问题,自愿承担相关责任。</p>
-              <p class="line">特此承诺!</p>
-              <p class="line">勾选后才可登录和注册!</p>
-            </div>
-          </div>
-          <el-checkbox class="m-t-15 m-l-20" v-model="agreeCheck">同意,我已阅读</el-checkbox>
-        </div>
-      </div>
+    <el-dialog title="报名" :visible.sync="enterVisible" :close-on-click-modal="false" width="300px" @close="enterClose">
+      <el-form class="dia-form">
+        <p style="margin-bottom: 5px">请选择要加入的团队</p>
+        <el-form-item>
+          <el-select class="w-100" v-model="enterForm.teamId" filterable>
+            <el-option v-for="(item, i) in teams" :key="i" :label="item.teamName" :value="item.teamId"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-input placeholder="请输入团队邀请码" maxlength="6" v-model="enterForm.invitationCode"></el-input>
+        </el-form-item>
+        <el-form-item v-if="form.completeCompetitionSetup.isNeedCode">
+          <el-input placeholder="请输入大赛邀请码" maxlength="6" v-model="enterForm.registrationInvitationCode"></el-input>
+        </el-form-item>
+        <p class="tips">
+          查找不到团队?点击 <el-link :underline="false" type="primary" @click="toTeam">创建团队</el-link>
+        </p>
+      </el-form>
       <span slot="footer" class="dialog-footer">
         <el-button size="small" type="primary" @click="enterSubmit">报名</el-button>
         <el-button size="small" @click="enterVisible = false">取消</el-button>
@@ -560,6 +525,7 @@ import Const from '@/const/match'
 import OSS from 'ali-oss'
 import OssConfig from '@/components/upload/config.js'
 import Oss from '@/components/upload/upload.js'
+import _ from 'lodash'
 export default {
   name: 'matchdetail',
   data () {
@@ -625,8 +591,6 @@ export default {
         registrationInvitationCode: '',
         whetherSignUp: 1
       },
-      schools: [],
-      agreeCheck: false,
 
       teamVisible: false,
       teams: [],
@@ -698,7 +662,7 @@ export default {
   },
   computed: {
     ...mapState("user", [
-      "userId", 'account', 'logView', 'userName'
+      "userId", 'account', 'logView'
     ]),
   },
   components: {
@@ -716,9 +680,6 @@ export default {
     this.getProgress()
     this.getNotice()
     this.getTeam()
-    this.getAutomaticAllocation()
-
-    this.initOss()
   },
   methods: {
     ...mapMutations('match', [
@@ -759,6 +720,8 @@ export default {
               name: '参赛信息'
             })
             this.getInfo()
+            this.getAutomaticAllocation()
+            this.initOss()
           }
           this.token && this.intervalRank()
         } else {
@@ -894,7 +857,7 @@ export default {
       this.$post(`${this.api.entryInformation}?competitionId=${this.id}`).then(async res => {
         const info = res.entryInformation
         // 如果是队长,并且没有指导老师,默认添加一个空的
-        if (info.team && !info.team.captain && !info.teamInstructors.length) info.teamInstructors.push(JSON.parse(JSON.stringify(this.originIns)))
+        if (info.team && !info.team.captain && !info.teamInstructors.length) info.teamInstructors.push(_.cloneDeep(this.originIns))
         if (info.personalDetail) {
           info.team = {}
           info.teamDetail = []
@@ -904,7 +867,7 @@ export default {
         const caption = info.teamDetail.find(e => !e.caption)
         info.caption = caption ? caption : {}
         info.person = info.personalDetail || info.teamDetail.find(e => e.accountId == info.team.accountId)
-        this.originInfo = JSON.parse(JSON.stringify(info))
+        this.originInfo = _.cloneDeep(info)
         // 把参赛人员的名字和accountId处理成一个数组
         info.stages && info.stages.map(e => {
           if (e.participantAccountIds && e.teamParticipantIds) {
@@ -1013,6 +976,7 @@ export default {
         } else if (JSON.stringify(teamInstructors) !== JSON.stringify(originInfo.teamInstructors)) {
           notSave = 2
         }
+        // debugger
         if (notSave) {
           this.$confirm('所填写内容暂未保存,是否保存?', "提示", {
             type: "warning",
@@ -1076,16 +1040,18 @@ export default {
           this.$post(`${this.api.deleteAnAdvisor}?id=${row.id}`).then(res => {
             Util.successMsg('删除成功')
             this.info.teamInstructors.splice(i, 1)
+            this.originInfo.teamInstructors = _.cloneDeep(this.info.teamInstructors)
           }).catch(res => { })
         }).catch(() => { })
       } else {
         this.info.teamInstructors.splice(i, 1)
+        this.originInfo.teamInstructors = _.cloneDeep(this.info.teamInstructors)
       }
     },
     // 添加指导老师
     addAdvisor () {
       if (this.info.teamInstructors.length > 4) return Util.errorMsg('指导老师仅限添加5个!')
-      const line = JSON.parse(JSON.stringify(this.originIns))
+      const line = _.cloneDeep(this.originIns)
       line.edit = 1
       this.info.teamInstructors.push(line)
     },
@@ -1111,6 +1077,7 @@ export default {
           this.info.teamInstructors[i].id = id
         }
         this.info.teamInstructors[i].edit = 0
+        this.originInfo.teamInstructors = _.cloneDeep(this.info.teamInstructors)
       }).catch(res => { })
     },
     // 显示转让队长
@@ -1311,7 +1278,6 @@ export default {
     },
     // 团队报名提交
     enterSubmit () {
-      if (!this.agreeCheck) return Util.errorMsg('请勾选同意,才可继续报名!')
       const form = this.enterForm
       if (!form.teamId) return Util.errorMsg('请选择团队')
       if (!form.invitationCode) return Util.errorMsg('请输入团队邀请码')
@@ -1433,8 +1399,9 @@ export default {
       }
     },
 
-    initOss () {
-      this.client = new OSS(OssConfig.config)
+    async initOss () {
+      const o = await OssConfig()
+      this.client = new OSS(o.config)
     },
     // 附件上传前
     beforeUpload (file) {
@@ -2204,32 +2171,4 @@ export default {
     }
   }
 }
-
-/deep/.enter-dia {
-  .agree {
-    width: 500px;
-    margin-left: 20px;
-  }
-
-  .agreement {
-    max-height: 300px;
-    padding: 10px 20px;
-    box-shadow: 0 0 7px rgba(235, 235, 235, .8);
-    overflow: auto;
-
-    h6 {
-      font-size: 20px;
-      font-weight: 600;
-      text-align: center;
-    }
-
-    .text {
-      line-height: 1.6;
-    }
-
-    .line {
-      margin-top: 7px;
-    }
-  }
-}
 </style>
\ No newline at end of file
diff --git a/src/pages/match/theoryExam/index.vue b/src/pages/match/theoryExam/index.vue
index fe9b3a2..1dc63fe 100644
--- a/src/pages/match/theoryExam/index.vue
+++ b/src/pages/match/theoryExam/index.vue
@@ -47,7 +47,7 @@
                   <li
                     v-if="!sheetStatus || (sheetStatus === 1 && !ques.answered) || (sheetStatus === 2 && ques.answered) || (sheetStatus === 3 && ques.partAnswer) || (sheetStatus === 4 && ques.sign)"
                     :key="j" :class="{ answered: ques.answered, partAnswer: ques.partAnswer }"
-                    @click="scrollToQues(ques)">
+                    @click="scrollToQues(ques, item)">
                     <img v-if="ques.sign" class="tag" src="@/assets/img/tag-active.svg" alt="">
                     {{ j + 1 }}
                   </li>
@@ -92,7 +92,7 @@
                 <div v-for="(opt, j) in ques.questionAnswerVersionsList" :key="j" class="opt">
                   <el-checkbox v-if="item.questionType === 'multiple_choice'" v-model="opt.answer" :true-label="1"
                     @change="mulChange(ques)"></el-checkbox>
-                  <el-radio v-else v-model="opt.answer" :true-label="1" :label="1"
+                  <el-radio v-else v-model="opt.answer" tabindex="-1" :true-label="1" :label="1"
                     @change="singleChange(ques, j)"></el-radio>
 
                   <span>{{ numToLetter(j) }}.&nbsp;</span>
@@ -454,9 +454,12 @@ export default {
       window.requestAnimationFrame(scroll)
     },
     // 答题卡题目点击滚动
-    scrollToQues (e) {
+    scrollToQues (e, item) {
+      item.shrink = false
       const el = document.querySelector('#ques' + e.id)
-      el && this.scrollToSmooth(el.offsetTop - document.querySelector('#quesWrap').offsetTop, 200)
+      this.$nextTick(() => {
+        el && this.scrollToSmooth(el.offsetTop - document.querySelector('#quesWrap').offsetTop, 200)
+      })
     },
     // 答题卡筛选
     filterStatus (e) {
@@ -483,6 +486,10 @@ export default {
         return stem
       }
     },
+    preventAllKeyPress (event) {
+      // 阻止所有键盘事件
+      event.preventDefault();
+    },
     // 单选题回调
     singleChange (ques, j) {
       ques.questionAnswerVersionsList.map(e => {
@@ -623,6 +630,7 @@ export default {
         // 缓存跟提交接口的参数一样
         await this.$post(this.api[isSubmit ? 'submitTheExamPaper' : 'examPaperRecordCache'], data)
 
+        window.opener && window.opener.location.reload()
         if (isSubmit) {
           clearInterval(this.counterTimer)
           this.submiting = false
diff --git a/src/pages/record/theoryReport/index.vue b/src/pages/record/theoryReport/index.vue
index 4a6bc0c..92349e6 100644
--- a/src/pages/record/theoryReport/index.vue
+++ b/src/pages/record/theoryReport/index.vue
@@ -17,7 +17,7 @@
               <ul class="serials">
                 <template v-for="(ques, j) in item.userAnswerList">
                   <li v-if="!sheetStatus || sheetStatus === ques.isCorrect" :key="j" :class="'status' + ques.isCorrect"
-                    @click="scrollToQues(ques)">
+                    @click="scrollToQues(ques, item)">
                     <p :class="['serial', { answered: ques.answered, partAnswer: ques.partAnswer }]">{{ j + 1 }}</p>
                     <p class="score">{{ ques.userScore }}</p>
                   </li>
@@ -203,7 +203,7 @@
 
                     <div class="line">题目分值:{{ ques.questionScore }}分</div>
                     <div class="line">考生得分:<el-input class="score-input" size="small" :value="ques.userScore"
-                        readonly />分
+                        disabled />分
                     </div>
                   </div>
                 </div>
@@ -446,9 +446,12 @@ export default {
       window.requestAnimationFrame(scroll)
     },
     // 答题卡题目点击滚动
-    scrollToQues (e) {
+    scrollToQues (e, item) {
+      item.shrink = false
       const el = document.querySelector('#ques' + e.id)
-      el && this.scrollToSmooth(el.offsetTop - document.querySelector('#right').offsetTop, 200)
+      this.$nextTick(() => {
+        el && this.scrollToSmooth(el.offsetTop - document.querySelector('#right').offsetTop, 200)
+      })
     },
     // 答题卡筛选
     filterStatus (e) {
@@ -974,6 +977,11 @@ samp {
     .score-input {
       width: 100px;
       margin-right: 5px;
+
+      .el-input__inner {
+        color: #333;
+        background-color: #fff;
+      }
     }
 
     .fill-input {
@@ -1018,6 +1026,12 @@ samp {
       }
     }
   }
+
+  .ques-wrap {
+    &>li {
+      margin-bottom: 15px;
+    }
+  }
 }
 
 .result-pic {