Explorar el Código

局域网——教师端考试轮次信息

XW hace 3 meses
padre
commit
32c2ffffc6

+ 1 - 0
TEAMModelOS.Extension/IES.Exam/IES.ExamViews/src/api/http.js

@@ -9,6 +9,7 @@ const NO_ACCESS_API = [
     '/index/login-check',
     '/index/list-schools',
     '/index/bind-school',
+    '/manage/get-activate-evaluation',
 ]
 
 // 需要携带access_token 不需要auth-token

+ 1 - 1
TEAMModelOS.Extension/IES.Exam/IES.ExamViews/src/api/index.js

@@ -109,7 +109,7 @@ export default {
      * @param {String} shortCode - 提取码
      */
     getRoundList: function(data) {
-        return post('/manage/setting-evaluation-round', data)
+        return post('/manage/list-evaluation-round', data)
     },
 
     // 学生页面

+ 3 - 371
TEAMModelOS.Extension/IES.Exam/IES.ExamViews/src/assets/iconfont/demo_index.html

@@ -84,114 +84,18 @@
                 <div class="code-name">&amp;#xe9d9;</div>
               </li>
           
-            <li class="dib">
-              <span class="icon element-icons">&#xe608;</span>
-                <div class="name">iconfont_disconnected</div>
-                <div class="code-name">&amp;#xe608;</div>
-              </li>
-          
-            <li class="dib">
-              <span class="icon element-icons">&#xe663;</span>
-                <div class="name">下载失败</div>
-                <div class="code-name">&amp;#xe663;</div>
-              </li>
-          
-            <li class="dib">
-              <span class="icon element-icons">&#xe7e8;</span>
-                <div class="name">云端-关闭-填充</div>
-                <div class="code-name">&amp;#xe7e8;</div>
-              </li>
-          
             <li class="dib">
               <span class="icon element-icons">&#xe7e9;</span>
                 <div class="name">云端-关闭-线性</div>
                 <div class="code-name">&amp;#xe7e9;</div>
               </li>
           
-            <li class="dib">
-              <span class="icon element-icons">&#xe617;</span>
-                <div class="name">云端勾</div>
-                <div class="code-name">&amp;#xe617;</div>
-              </li>
-          
-            <li class="dib">
-              <span class="icon element-icons">&#xe640;</span>
-                <div class="name">云端链接</div>
-                <div class="code-name">&amp;#xe640;</div>
-              </li>
-          
-            <li class="dib">
-              <span class="icon element-icons">&#xe6bf;</span>
-                <div class="name">云端</div>
-                <div class="code-name">&amp;#xe6bf;</div>
-              </li>
-          
             <li class="dib">
               <span class="icon element-icons">&#xe60d;</span>
                 <div class="name">云端资源</div>
                 <div class="code-name">&amp;#xe60d;</div>
               </li>
           
-            <li class="dib">
-              <span class="icon element-icons">&#xee19;</span>
-                <div class="name">云端</div>
-                <div class="code-name">&amp;#xee19;</div>
-              </li>
-          
-            <li class="dib">
-              <span class="icon element-icons">&#xe638;</span>
-                <div class="name">云端存储</div>
-                <div class="code-name">&amp;#xe638;</div>
-              </li>
-          
-            <li class="dib">
-              <span class="icon element-icons">&#xe601;</span>
-                <div class="name">云端</div>
-                <div class="code-name">&amp;#xe601;</div>
-              </li>
-          
-            <li class="dib">
-              <span class="icon element-icons">&#xe603;</span>
-                <div class="name">云端连接</div>
-                <div class="code-name">&amp;#xe603;</div>
-              </li>
-          
-            <li class="dib">
-              <span class="icon element-icons">&#xe602;</span>
-                <div class="name">云端存储</div>
-                <div class="code-name">&amp;#xe602;</div>
-              </li>
-          
-            <li class="dib">
-              <span class="icon element-icons">&#xe731;</span>
-                <div class="name">云端默认</div>
-                <div class="code-name">&amp;#xe731;</div>
-              </li>
-          
-            <li class="dib">
-              <span class="icon element-icons">&#xe648;</span>
-                <div class="name">上传云端失败</div>
-                <div class="code-name">&amp;#xe648;</div>
-              </li>
-          
-            <li class="dib">
-              <span class="icon element-icons">&#xe64e;</span>
-                <div class="name">云端</div>
-                <div class="code-name">&amp;#xe64e;</div>
-              </li>
-          
-            <li class="dib">
-              <span class="icon element-icons">&#xe60f;</span>
-                <div class="name">云端,链接</div>
-                <div class="code-name">&amp;#xe60f;</div>
-              </li>
-          
-            <li class="dib">
-              <span class="icon element-icons">&#xe698;</span>
-                <div class="name">云端</div>
-                <div class="code-name">&amp;#xe698;</div>
-              </li>
-          
             <li class="dib">
               <span class="icon element-icons">&#xe618;</span>
                 <div class="name">时间</div>
@@ -330,9 +234,9 @@
 <pre><code class="language-css"
 >@font-face {
   font-family: 'element-icons';
-  src: url('iconfont.woff2?t=1740130849005') format('woff2'),
-       url('iconfont.woff?t=1740130849005') format('woff'),
-       url('iconfont.ttf?t=1740130849005') format('truetype');
+  src: url('iconfont.woff2?t=1740223260776') format('woff2'),
+       url('iconfont.woff?t=1740223260776') format('woff'),
+       url('iconfont.ttf?t=1740223260776') format('truetype');
 }
 </code></pre>
           <h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
@@ -403,33 +307,6 @@
             </div>
           </li>
           
-          <li class="dib">
-            <span class="icon element-icons el-icon-iconfont_disconnected"></span>
-            <div class="name">
-              iconfont_disconnected
-            </div>
-            <div class="code-name">.el-icon-iconfont_disconnected
-            </div>
-          </li>
-          
-          <li class="dib">
-            <span class="icon element-icons el-icon-xiazaishibai"></span>
-            <div class="name">
-              下载失败
-            </div>
-            <div class="code-name">.el-icon-xiazaishibai
-            </div>
-          </li>
-          
-          <li class="dib">
-            <span class="icon element-icons el-icon-yunduan-guanbi-tianchong"></span>
-            <div class="name">
-              云端-关闭-填充
-            </div>
-            <div class="code-name">.el-icon-yunduan-guanbi-tianchong
-            </div>
-          </li>
-          
           <li class="dib">
             <span class="icon element-icons el-icon-yunduan-guanbi-xianxing"></span>
             <div class="name">
@@ -439,33 +316,6 @@
             </div>
           </li>
           
-          <li class="dib">
-            <span class="icon element-icons el-icon-yunduangou"></span>
-            <div class="name">
-              云端勾
-            </div>
-            <div class="code-name">.el-icon-yunduangou
-            </div>
-          </li>
-          
-          <li class="dib">
-            <span class="icon element-icons el-icon-yunduanlianjie"></span>
-            <div class="name">
-              云端链接
-            </div>
-            <div class="code-name">.el-icon-yunduanlianjie
-            </div>
-          </li>
-          
-          <li class="dib">
-            <span class="icon element-icons el-icon-yunduan"></span>
-            <div class="name">
-              云端
-            </div>
-            <div class="code-name">.el-icon-yunduan
-            </div>
-          </li>
-          
           <li class="dib">
             <span class="icon element-icons el-icon-yunduanziyuan"></span>
             <div class="name">
@@ -475,96 +325,6 @@
             </div>
           </li>
           
-          <li class="dib">
-            <span class="icon element-icons el-icon-yunduan1"></span>
-            <div class="name">
-              云端
-            </div>
-            <div class="code-name">.el-icon-yunduan1
-            </div>
-          </li>
-          
-          <li class="dib">
-            <span class="icon element-icons el-icon-yunduancunchu"></span>
-            <div class="name">
-              云端存储
-            </div>
-            <div class="code-name">.el-icon-yunduancunchu
-            </div>
-          </li>
-          
-          <li class="dib">
-            <span class="icon element-icons el-icon-yunduan2"></span>
-            <div class="name">
-              云端
-            </div>
-            <div class="code-name">.el-icon-yunduan2
-            </div>
-          </li>
-          
-          <li class="dib">
-            <span class="icon element-icons el-icon-a-huaban1fuben25"></span>
-            <div class="name">
-              云端连接
-            </div>
-            <div class="code-name">.el-icon-a-huaban1fuben25
-            </div>
-          </li>
-          
-          <li class="dib">
-            <span class="icon element-icons el-icon-yunduancunchu1"></span>
-            <div class="name">
-              云端存储
-            </div>
-            <div class="code-name">.el-icon-yunduancunchu1
-            </div>
-          </li>
-          
-          <li class="dib">
-            <span class="icon element-icons el-icon-yunduanmoren"></span>
-            <div class="name">
-              云端默认
-            </div>
-            <div class="code-name">.el-icon-yunduanmoren
-            </div>
-          </li>
-          
-          <li class="dib">
-            <span class="icon element-icons el-icon-shangchuanyunduanshibai"></span>
-            <div class="name">
-              上传云端失败
-            </div>
-            <div class="code-name">.el-icon-shangchuanyunduanshibai
-            </div>
-          </li>
-          
-          <li class="dib">
-            <span class="icon element-icons el-icon-yunduan3"></span>
-            <div class="name">
-              云端
-            </div>
-            <div class="code-name">.el-icon-yunduan3
-            </div>
-          </li>
-          
-          <li class="dib">
-            <span class="icon element-icons el-icon-a-yunduanlianjie"></span>
-            <div class="name">
-              云端,链接
-            </div>
-            <div class="code-name">.el-icon-a-yunduanlianjie
-            </div>
-          </li>
-          
-          <li class="dib">
-            <span class="icon element-icons el-icon-yunduan4"></span>
-            <div class="name">
-              云端
-            </div>
-            <div class="code-name">.el-icon-yunduan4
-            </div>
-          </li>
-          
           <li class="dib">
             <span class="icon element-icons el-icon-shijian"></span>
             <div class="name">
@@ -812,30 +572,6 @@
                 <div class="code-name">#el-icon-mti-diannao</div>
             </li>
           
-            <li class="dib">
-                <svg class="icon svg-icon" aria-hidden="true">
-                  <use xlink:href="#el-icon-iconfont_disconnected"></use>
-                </svg>
-                <div class="name">iconfont_disconnected</div>
-                <div class="code-name">#el-icon-iconfont_disconnected</div>
-            </li>
-          
-            <li class="dib">
-                <svg class="icon svg-icon" aria-hidden="true">
-                  <use xlink:href="#el-icon-xiazaishibai"></use>
-                </svg>
-                <div class="name">下载失败</div>
-                <div class="code-name">#el-icon-xiazaishibai</div>
-            </li>
-          
-            <li class="dib">
-                <svg class="icon svg-icon" aria-hidden="true">
-                  <use xlink:href="#el-icon-yunduan-guanbi-tianchong"></use>
-                </svg>
-                <div class="name">云端-关闭-填充</div>
-                <div class="code-name">#el-icon-yunduan-guanbi-tianchong</div>
-            </li>
-          
             <li class="dib">
                 <svg class="icon svg-icon" aria-hidden="true">
                   <use xlink:href="#el-icon-yunduan-guanbi-xianxing"></use>
@@ -844,30 +580,6 @@
                 <div class="code-name">#el-icon-yunduan-guanbi-xianxing</div>
             </li>
           
-            <li class="dib">
-                <svg class="icon svg-icon" aria-hidden="true">
-                  <use xlink:href="#el-icon-yunduangou"></use>
-                </svg>
-                <div class="name">云端勾</div>
-                <div class="code-name">#el-icon-yunduangou</div>
-            </li>
-          
-            <li class="dib">
-                <svg class="icon svg-icon" aria-hidden="true">
-                  <use xlink:href="#el-icon-yunduanlianjie"></use>
-                </svg>
-                <div class="name">云端链接</div>
-                <div class="code-name">#el-icon-yunduanlianjie</div>
-            </li>
-          
-            <li class="dib">
-                <svg class="icon svg-icon" aria-hidden="true">
-                  <use xlink:href="#el-icon-yunduan"></use>
-                </svg>
-                <div class="name">云端</div>
-                <div class="code-name">#el-icon-yunduan</div>
-            </li>
-          
             <li class="dib">
                 <svg class="icon svg-icon" aria-hidden="true">
                   <use xlink:href="#el-icon-yunduanziyuan"></use>
@@ -876,86 +588,6 @@
                 <div class="code-name">#el-icon-yunduanziyuan</div>
             </li>
           
-            <li class="dib">
-                <svg class="icon svg-icon" aria-hidden="true">
-                  <use xlink:href="#el-icon-yunduan1"></use>
-                </svg>
-                <div class="name">云端</div>
-                <div class="code-name">#el-icon-yunduan1</div>
-            </li>
-          
-            <li class="dib">
-                <svg class="icon svg-icon" aria-hidden="true">
-                  <use xlink:href="#el-icon-yunduancunchu"></use>
-                </svg>
-                <div class="name">云端存储</div>
-                <div class="code-name">#el-icon-yunduancunchu</div>
-            </li>
-          
-            <li class="dib">
-                <svg class="icon svg-icon" aria-hidden="true">
-                  <use xlink:href="#el-icon-yunduan2"></use>
-                </svg>
-                <div class="name">云端</div>
-                <div class="code-name">#el-icon-yunduan2</div>
-            </li>
-          
-            <li class="dib">
-                <svg class="icon svg-icon" aria-hidden="true">
-                  <use xlink:href="#el-icon-a-huaban1fuben25"></use>
-                </svg>
-                <div class="name">云端连接</div>
-                <div class="code-name">#el-icon-a-huaban1fuben25</div>
-            </li>
-          
-            <li class="dib">
-                <svg class="icon svg-icon" aria-hidden="true">
-                  <use xlink:href="#el-icon-yunduancunchu1"></use>
-                </svg>
-                <div class="name">云端存储</div>
-                <div class="code-name">#el-icon-yunduancunchu1</div>
-            </li>
-          
-            <li class="dib">
-                <svg class="icon svg-icon" aria-hidden="true">
-                  <use xlink:href="#el-icon-yunduanmoren"></use>
-                </svg>
-                <div class="name">云端默认</div>
-                <div class="code-name">#el-icon-yunduanmoren</div>
-            </li>
-          
-            <li class="dib">
-                <svg class="icon svg-icon" aria-hidden="true">
-                  <use xlink:href="#el-icon-shangchuanyunduanshibai"></use>
-                </svg>
-                <div class="name">上传云端失败</div>
-                <div class="code-name">#el-icon-shangchuanyunduanshibai</div>
-            </li>
-          
-            <li class="dib">
-                <svg class="icon svg-icon" aria-hidden="true">
-                  <use xlink:href="#el-icon-yunduan3"></use>
-                </svg>
-                <div class="name">云端</div>
-                <div class="code-name">#el-icon-yunduan3</div>
-            </li>
-          
-            <li class="dib">
-                <svg class="icon svg-icon" aria-hidden="true">
-                  <use xlink:href="#el-icon-a-yunduanlianjie"></use>
-                </svg>
-                <div class="name">云端,链接</div>
-                <div class="code-name">#el-icon-a-yunduanlianjie</div>
-            </li>
-          
-            <li class="dib">
-                <svg class="icon svg-icon" aria-hidden="true">
-                  <use xlink:href="#el-icon-yunduan4"></use>
-                </svg>
-                <div class="name">云端</div>
-                <div class="code-name">#el-icon-yunduan4</div>
-            </li>
-          
             <li class="dib">
                 <svg class="icon svg-icon" aria-hidden="true">
                   <use xlink:href="#el-icon-shijian"></use>

+ 3 - 67
TEAMModelOS.Extension/IES.Exam/IES.ExamViews/src/assets/iconfont/iconfont.css

@@ -1,8 +1,8 @@
 @font-face {
   font-family: "element-icons"; /* Project id 4795944 */
-  src: url('iconfont.woff2?t=1740130849005') format('woff2'),
-       url('iconfont.woff?t=1740130849005') format('woff'),
-       url('iconfont.ttf?t=1740130849005') format('truetype');
+  src: url('iconfont.woff2?t=1740223260776') format('woff2'),
+       url('iconfont.woff?t=1740223260776') format('woff'),
+       url('iconfont.ttf?t=1740223260776') format('truetype');
 }
 
 .element-icons {
@@ -33,78 +33,14 @@
   content: "\e9d9";
 }
 
-.el-icon-iconfont_disconnected:before {
-  content: "\e608";
-}
-
-.el-icon-xiazaishibai:before {
-  content: "\e663";
-}
-
-.el-icon-yunduan-guanbi-tianchong:before {
-  content: "\e7e8";
-}
-
 .el-icon-yunduan-guanbi-xianxing:before {
   content: "\e7e9";
 }
 
-.el-icon-yunduangou:before {
-  content: "\e617";
-}
-
-.el-icon-yunduanlianjie:before {
-  content: "\e640";
-}
-
-.el-icon-yunduan:before {
-  content: "\e6bf";
-}
-
 .el-icon-yunduanziyuan:before {
   content: "\e60d";
 }
 
-.el-icon-yunduan1:before {
-  content: "\ee19";
-}
-
-.el-icon-yunduancunchu:before {
-  content: "\e638";
-}
-
-.el-icon-yunduan2:before {
-  content: "\e601";
-}
-
-.el-icon-a-huaban1fuben25:before {
-  content: "\e603";
-}
-
-.el-icon-yunduancunchu1:before {
-  content: "\e602";
-}
-
-.el-icon-yunduanmoren:before {
-  content: "\e731";
-}
-
-.el-icon-shangchuanyunduanshibai:before {
-  content: "\e648";
-}
-
-.el-icon-yunduan3:before {
-  content: "\e64e";
-}
-
-.el-icon-a-yunduanlianjie:before {
-  content: "\e60f";
-}
-
-.el-icon-yunduan4:before {
-  content: "\e698";
-}
-
 .el-icon-shijian:before {
   content: "\e618";
 }

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 1 - 1
TEAMModelOS.Extension/IES.Exam/IES.ExamViews/src/assets/iconfont/iconfont.js


+ 0 - 112
TEAMModelOS.Extension/IES.Exam/IES.ExamViews/src/assets/iconfont/iconfont.json

@@ -40,27 +40,6 @@
       "unicode": "e9d9",
       "unicode_decimal": 59865
     },
-    {
-      "icon_id": "9232602",
-      "name": "iconfont_disconnected",
-      "font_class": "iconfont_disconnected",
-      "unicode": "e608",
-      "unicode_decimal": 58888
-    },
-    {
-      "icon_id": "10574966",
-      "name": "下载失败",
-      "font_class": "xiazaishibai",
-      "unicode": "e663",
-      "unicode_decimal": 58979
-    },
-    {
-      "icon_id": "12690964",
-      "name": "云端-关闭-填充",
-      "font_class": "yunduan-guanbi-tianchong",
-      "unicode": "e7e8",
-      "unicode_decimal": 59368
-    },
     {
       "icon_id": "12690973",
       "name": "云端-关闭-线性",
@@ -68,27 +47,6 @@
       "unicode": "e7e9",
       "unicode_decimal": 59369
     },
-    {
-      "icon_id": "13056815",
-      "name": "云端勾",
-      "font_class": "yunduangou",
-      "unicode": "e617",
-      "unicode_decimal": 58903
-    },
-    {
-      "icon_id": "14928240",
-      "name": "云端链接",
-      "font_class": "yunduanlianjie",
-      "unicode": "e640",
-      "unicode_decimal": 58944
-    },
-    {
-      "icon_id": "15034707",
-      "name": "云端",
-      "font_class": "yunduan",
-      "unicode": "e6bf",
-      "unicode_decimal": 59071
-    },
     {
       "icon_id": "20904889",
       "name": "云端资源",
@@ -96,76 +54,6 @@
       "unicode": "e60d",
       "unicode_decimal": 58893
     },
-    {
-      "icon_id": "27402410",
-      "name": "云端",
-      "font_class": "yunduan1",
-      "unicode": "ee19",
-      "unicode_decimal": 60953
-    },
-    {
-      "icon_id": "29534026",
-      "name": "云端存储",
-      "font_class": "yunduancunchu",
-      "unicode": "e638",
-      "unicode_decimal": 58936
-    },
-    {
-      "icon_id": "30284033",
-      "name": "云端",
-      "font_class": "yunduan2",
-      "unicode": "e601",
-      "unicode_decimal": 58881
-    },
-    {
-      "icon_id": "31987464",
-      "name": "云端连接",
-      "font_class": "a-huaban1fuben25",
-      "unicode": "e603",
-      "unicode_decimal": 58883
-    },
-    {
-      "icon_id": "32659898",
-      "name": "云端存储",
-      "font_class": "yunduancunchu1",
-      "unicode": "e602",
-      "unicode_decimal": 58882
-    },
-    {
-      "icon_id": "34234770",
-      "name": "云端默认",
-      "font_class": "yunduanmoren",
-      "unicode": "e731",
-      "unicode_decimal": 59185
-    },
-    {
-      "icon_id": "34808601",
-      "name": "上传云端失败",
-      "font_class": "shangchuanyunduanshibai",
-      "unicode": "e648",
-      "unicode_decimal": 58952
-    },
-    {
-      "icon_id": "36235763",
-      "name": "云端",
-      "font_class": "yunduan3",
-      "unicode": "e64e",
-      "unicode_decimal": 58958
-    },
-    {
-      "icon_id": "40478671",
-      "name": "云端,链接",
-      "font_class": "a-yunduanlianjie",
-      "unicode": "e60f",
-      "unicode_decimal": 58895
-    },
-    {
-      "icon_id": "41033647",
-      "name": "云端",
-      "font_class": "yunduan4",
-      "unicode": "e698",
-      "unicode_decimal": 59032
-    },
     {
       "icon_id": "10352325",
       "name": "时间",

BIN
TEAMModelOS.Extension/IES.Exam/IES.ExamViews/src/assets/iconfont/iconfont.ttf


BIN
TEAMModelOS.Extension/IES.Exam/IES.ExamViews/src/assets/iconfont/iconfont.woff


BIN
TEAMModelOS.Extension/IES.Exam/IES.ExamViews/src/assets/iconfont/iconfont.woff2


+ 2 - 1
TEAMModelOS.Extension/IES.Exam/IES.ExamViews/src/view/admin/ActivityManage.less

@@ -230,7 +230,8 @@
         }
 
         .el-tab-pane {
-            height: 100%;
+            margin: 0 15px 15px;
+            height: calc(100% - 30px);
         }
     }
 

+ 119 - 37
TEAMModelOS.Extension/IES.Exam/IES.ExamViews/src/view/admin/ActivityManage.vue

@@ -1,8 +1,9 @@
 <template>
     <el-container>
         <el-header>
-            <div>
-                <!-- <img :src="" alt=""> -->
+            <div style="display: flex; justify-content: center; align-items: center;">
+                <img :src="userInfo.schPicture" alt="" style="width: 40px; height: 40px; margin-right: 10px;">
+                <span>{{ userInfo.schoolName }}</span>
             </div>
             <!-- <div> -->
                 <el-dropdown class="base-user-center" size="small">
@@ -99,33 +100,31 @@
                                 <div class="short-code">
                                     提取码:
                                     <span style="color: #24b880;">{{ evaluationClient.shortCode }}</span>
-                                    <!-- <el-button size="mini" :type="evaluationClient.activate ? 'success' : 'danger'" @click="evaluationClient.activate = 1"
-                                                :icon="evaluationClient.activate ? 'el-icon-jihuo1' : 'el-icon-jihuo'"
-                                                :title="evaluationClient.activate ? '已激活' : '激活'" circle></el-button> -->
                                 </div>
                             </vuescroll>
                         </el-tab-pane>
                         <el-tab-pane label="学生作答" name="student" class="answer-content">
                             <div v-show="!isInputOpen" style="height: 100%;">
                                 <vuescroll>
-                                    <!-- 学生作答
-                                活动列表
-                                活动信息(激活按钮、信息框、学生作答框)
-                                    信息框中展示基本信息、试卷下载情况等
-                                    学生作答框展示哪些电脑在作答,是否作答完成,设置评测考试时间等
-                                            在进入学生作答页面时,判断 激活字段 是否存在,不存在需要用户输入开卷码,才能展示相关信息(勾选一次作答的班级(多选),考试时长,)
-                                            学生端需教师点击开始考试后,才能进行作答 -->
-                                    <div style="border-bottom: 1px dashed #ccc; padding: 15px 10px;">
-                                        <div>
+                                    <div style="border-bottom: 1px dashed #ccc; padding: 15px 10px; position: relative;">
+                                        <div style="position: absolute; right: 0; top: 0;">
+                                            <el-button size="mini" @click="isRoundList = true">查看已考轮次</el-button>
+                                        </div>
+                                        <!-- <div>
                                             <div>参考人数:{{ 92 }}</div>
                                             <div></div>
                                             <div></div>
-                                        </div>
+                                        </div> -->
                                         <div>
                                             <div style="margin-right: 40px; margin-bottom: 20px;">设置作答班级:
                                                 <el-tooltip class="item" effect="light" placement="bottom-start">
                                                     <el-select v-model="setAnswerInfo.groupId" :disabled="!!setAnswerInfo.activate" size="small" clearable multiple collapse-tags placeholder="请选择">
-                                                        <el-option v-for="(item, index) in evaluationClient.grouplist" :key="index" :label="item.name" :value="item.id"></el-option>
+                                                        <el-option v-for="(item, index) in evaluationClient.grouplist" :key="index" :label="item.name" :value="item.id">
+                                                            <span>
+                                                                {{ item.name }}
+                                                                <el-tag v-if="item.isUesed" type="warning" size="mini" style="margin-left: 5px;">已考试</el-tag>
+                                                            </span>
+                                                        </el-option>
                                                     </el-select>
                                                     <template slot="content">
                                                         <div v-if="!selectGroup.length">未选择班级</div>
@@ -152,11 +151,11 @@
                                                     </el-radio>
                                                 </el-radio-group>
                                             </div>
-                                            <div style="margin-right: 40px; margin-bottom: 20px;">设置作答时间:
-                                                <el-date-picker v-show="setAnswerInfo.countdownType === 1" v-model="setAnswerInfo.startTime" :disabled="!!setAnswerInfo.activate" type="datetime" placeholder="开考时间"></el-date-picker>
-                                                <el-date-picker v-show="setAnswerInfo.countdownType != 1" v-model="setAnswerInfo.answerTime" :disabled="!!setAnswerInfo.activate" size="small" type="datetimerange" start-placeholder="开考时间" end-placeholder="截至时间"></el-date-picker>
+                                            <div style="margin-right: 40px; margin-bottom: 20px;">设置考试时间:
+                                                <el-date-picker v-show="setAnswerInfo.countdownType === 1" v-model="setAnswerInfo.startTime" :disabled="!!setAnswerInfo.activate" :picker-options="pickerOptions" type="datetime" placeholder="开考时间"></el-date-picker>
+                                                <el-date-picker v-show="setAnswerInfo.countdownType != 1" v-model="setAnswerInfo.answerTime" :disabled="!!setAnswerInfo.activate" :picker-options="pickerOptions" size="small" type="datetimerange" start-placeholder="开考时间" end-placeholder="截至时间"></el-date-picker>
                                             </div>
-                                            <div v-show="setAnswerInfo.countdownType" style="margin-right: 40px; margin-bottom: 20px;">考试时长:
+                                            <div v-show="setAnswerInfo.countdownType" style="margin-right: 40px; margin-bottom: 20px;">作答时长:
                                                 <el-input-number v-model="setAnswerInfo.hour" :disabled="!!setAnswerInfo.activate" :min="0" type="number" controls-position="right" placeholder="请输入内容" size="small" style="width: 100px;"></el-input-number>
                                                 <span style="margin: 0 15px 0 10px;">时</span>
                                                 <el-input-number v-model="setAnswerInfo.minute" :disabled="!!setAnswerInfo.activate" :min="0" :max="59" type="number" controls-position="right" placeholder="请输入内容" size="small" style="width: 100px;"></el-input-number>
@@ -166,10 +165,9 @@
                                                 <el-button size="mini" :type="setAnswerInfo.activate ? 'info' : 'primary'" @click="startExam()" v-show="evaluationClient.progress === 'going'">{{ setAnswerInfo.activate ? '停止考试' : '开始考试'}}</el-button>
                                             </div>
                                         </div>
-                                        <div></div>
-                                        <div></div>
                                     </div>
-                                    <div style="display: flex; flex-wrap: wrap; margin-top: 20px;">
+                                    <div v-if="!studentListShow.length" style="margin-top: 10%; font-size: 25px; text-align: center;">暂未开始考试</div>
+                                    <div style="display: flex; flex-wrap: wrap; margin-top: 20px;" v-else>
                                         <div v-for="(item, index) in studentListShow" :key="index" class="student-info" :style="{'border-color': item.isAnswer === 1 ? '#4393e4' : item.isAnswer === 2 ? '#53a929' : '#909399'}">
                                             <p class="name-info" :style="{'background-color': item.isAnswer === 1 ? '#4393e4' : item.isAnswer === 2 ? '#53a929' : '#909399'}">
                                                 <i class="el-icon-s-custom" style="margin-right: 5px;"></i>
@@ -193,7 +191,7 @@
                                     </div>
                                 </vuescroll>
                             </div>
-                            <div v-show="isInputOpen">请输入开卷码,验证查看权限</div>
+                            <div v-show="isInputOpen" style="font-size: 25px; text-align: center; margin-top: 20%;">请输入开卷码,验证查看权限</div>
                         </el-tab-pane>
                     </el-tabs>
                 </template>
@@ -221,6 +219,21 @@
                 <el-button @click="isStartExam = false">取消</el-button>
             </span>
         </el-dialog>
+        <el-dialog title="已考试的轮次信息" width="30%" :visible.sync="isRoundList">
+            <div v-for="(item, index) in roundList" :key="index" style="border-bottom: 1px dashed #ccc; padding: 5px 10px;">
+                <p>
+                    <i class="el-icon-time"></i>
+                    考试时间:{{ item.startTime }} - {{ item.endTime }}</p>
+                <p>考试班级:
+                    <span v-for="(group, gIndex) in item.groupList" :key="gIndex">{{ group.name }}</span>
+                </p>
+                <p style="display: flex;">
+                    <span style="margin-right: 30px;">时间类型:{{ !item.countdownType ? '无' : item.countdownType === 1 ? '统一作答时长' : '学生个人作答时长' }}</span>
+                    <span v-show="item.countdownType">作答时长:{{ item.duration }}</span>
+                </p>
+                <el-button @click="getExamRoundInfo(item.id, true)" style="float: right;">查看详情</el-button>
+            </div>
+        </el-dialog>
         <div class="open-evaluation" v-if="showErrorMsgs">
             <div class="info-box error-info" v-for="(item, index) in openErrorMsgs" :key="index">
                 <p>
@@ -251,6 +264,7 @@ import TestPaper from './TestPaper.vue'
 export default {
     components: { TestPaper },
     data() {
+        const that = this
         return {
             isLoading: undefined,
             examList: [],
@@ -266,6 +280,7 @@ export default {
             isStartExam: false, //开始考试
             studentListShow: [],
             setAnswerInfo: {
+                id: '',
                 groupId: [],
                 startTime: '',
                 answerTime: [],
@@ -285,16 +300,29 @@ export default {
             paperList: [],
             paperInfo: undefined,
             isShowPaper: false,
+            roundList: [], //开考的轮次信息
+            isRoundList: false,
+            pickerOptions: {
+                disabledDate(date) {
+                    return date.getTime() < that.evaluationClient.stime || date.getTime() > that.evaluationClient.etime
+                }
+            },
         }
     },
     created() {
+        this.isLoading = Loading.service({
+            lock: true,
+            text: '加载中',
+            background: 'rgba(0, 0, 0, 0.7)'
+        })
         this.deviceId = localStorage.getItem('deviceId')
         this.userInfo = jwtDecode(localStorage.getItem('auth_token'))
         let schoolInfo = JSON.parse(localStorage.getItem('schoolInfo'))
         this.userInfo.schoolName = schoolInfo.name
-        this.userInfo.picture = schoolInfo.picture
+        this.userInfo.schPicture = schoolInfo.picture
         this.getActivityList()
         if(!this.deviceId) this.viewNetworkInfo()
+        this.isLoading.close()
     },
     mounted() {
     },
@@ -319,7 +347,7 @@ export default {
                     return
                 }
                 if(!this.evaluationClient.openCode) this.isInputOpen = true
-                // else this.getExamRoundInfo()
+                else this.getRoundList()
             }
         },
         getNowTime() {
@@ -669,6 +697,10 @@ export default {
                         item.startTime = this.$tools.getDate(item.stime, 'year')
                         item.endTime = this.$tools.getDate(item.etime, 'year')
                         item.progress = this.timeStatus(item.stime, item.etime)
+                        item.grouplist = item.grouplist.map(group => {
+                            group.isUesed = false
+                            return group
+                        })
                         return item
                     })
                     this.onSelectAct(0)
@@ -726,7 +758,7 @@ export default {
             }
             this.studentListShow = []
             this.curIndex = index
-            this.evaluationClient = this.examList[index]
+            // this.evaluationClient = this.examList[index]
             let params = {
                 deviceId: this.deviceId,
                 shortCode: this.examList[index].shortCode,
@@ -775,7 +807,7 @@ export default {
                 if(openCode && this.openCode === openCode) {
                     this.evaluationClient.openCode = openCode
                     this.examList[this.curIndex].openCode = openCode
-                    // this.getExamRoundInfo()
+                    this.getRoundList()
                     this.openCode = ''
                     this.isInputOpen = false
                     this.$message({
@@ -793,7 +825,7 @@ export default {
                         if(res.code === 200) {
                             this.evaluationClient.openCode = this.openCode
                             this.examList[this.curIndex].openCode = this.openCode
-                            // this.getExamRoundInfo()
+                            this.getRoundList()
                             sessionStorage.setItem(this.evaluationClient.id, this.openCode)
                             this.openCode = ''
                         } else if(res.code === 1) {
@@ -827,10 +859,22 @@ export default {
                 console.log('11111111111111');
                 
             }) */
+            if(this.setAnswerInfo.countdownType && !this.setAnswerInfo.hour && !this.setAnswerInfo.minute || !this.setAnswerInfo.groupId.length || !this.setAnswerInfo.startTime && this.setAnswerInfo.answerTime.length != 2) {
+                this.$message({
+                    message: '请完善考试信息!',
+                    type: 'warning'
+                });
+                return
+            }
+            this.isLoading = Loading.service({
+                lock: true,
+                text: '加载中',
+                background: 'rgba(0, 0, 0, 0.7)'
+            })
             let params = {
                 evaluationId: this.evaluationClient.id,
                 groupList: [],
-                activate: this.evaluationClient.activate ? 0 : 1,
+                activate: this.setAnswerInfo.activate ? 0 : 1,
                 countdownType: this.setAnswerInfo.countdownType,
                 countdown: '',
                 startline: '',
@@ -873,6 +917,8 @@ export default {
                         type: 'warning'
                     });
                 }
+            }).finally(() => {
+                this.isLoading.close()
             })
         },
         updatePackage() {
@@ -906,16 +952,53 @@ export default {
                 this.isLoading.close()
             })
         },
-        // 先调用 getRoundList if(settings === []) 不调用getExamRoundInfo else 获取 settings中activate === 1 的数据,若有,则调用getExamRoundInfo 否则不调用
-        getExamRoundInfo() {
+        getRoundList() {
             let params = {
                 evaluationId: this.evaluationClient.id,
                 openCode: this.evaluationClient.openCode,
                 shortCode: this.evaluationClient.shortCode,
-                settingId: '',
+            }
+            this.$api.getRoundList(params).then(res => {
+                if(res.code === 200) {
+                    if(res.settings.length) {
+                        this.roundList = res.settings.map(item => {
+                            item.startTime = this.$tools.getDate(item.startline, 'year')
+                            item.endTime = this.$tools.getDate(item.deadline, 'year')
+                            let second = item.countdown / 1000 / 60
+                            let hour = Math.floor(second / 60)
+                            let minute = (second - hour * 60)
+                            item.duration = `${hour}时${minute}分`
+                            return item
+                        })
+                        let roundGroup = res.settings.map(item => item.groupList).flat();
+                        this.evaluationClient.grouplist.forEach(item => {
+                            if(roundGroup.find(group => group.id === item.id)) item.isUesed = true
+                        })
+                        let activateInfo = res.settings.find(item => item.activate === 1)
+                        if(activateInfo) this.getExamRoundInfo(activateInfo.id)
+                    }
+                }
+            })
+        },
+        getExamRoundInfo(settingId, isDialog) {
+            if(isDialog) {
+                this.isRoundList = false
+                if(this.setAnswerInfo.id === settingId) return
+                this.isLoading = Loading.service({
+                    lock: true,
+                    text: '加载中',
+                    background: 'rgba(0, 0, 0, 0.7)'
+                })
+            }
+            let params = {
+                evaluationId: this.evaluationClient.id,
+                openCode: this.evaluationClient.openCode,
+                shortCode: this.evaluationClient.shortCode,
+                settingId,
             }
             this.$api.getExamRoundInfo(params).then(res => {
                 if(res.code === 200) {
+                    this.setAnswerInfo.id = res.setting.id
                     this.setAnswerInfo.groupId = res.setting.groupList.map(item => item.id)
                     this.setAnswerInfo.activate = res.setting.activate
                     this.setAnswerInfo.countdownType = res.setting.countdownType
@@ -933,6 +1016,8 @@ export default {
                         return item
                     })
                 }
+            }).finally(() => {
+                if(isDialog) this.isLoading.close()
             })
         },
         delInfo(index) {
@@ -987,7 +1072,7 @@ export default {
         selectGroup() {
             return this.evaluationClient.grouplist.filter(item => this.setAnswerInfo.groupId.includes(item.id))
         },
-    },
+    }
 }
 </script>
 
@@ -1026,9 +1111,6 @@ export default {
 .el-tabs__header {
     margin-bottom: 0;
 }
-.el-tab-pane {
-    margin: 0 15px 15px;
-}
 
 .test-paper {
     height: 100%;

+ 3 - 3
TEAMModelOS.Extension/IES.Exam/IES.ExamViews/src/view/login/Admin.vue

@@ -50,8 +50,8 @@
                     </div>
                     <div class="network-info">
                         <span @click="showDevice()">
-                            <i v-show="hybridType" class="el-icon-success" style="color: #0eb90e;"></i>
-                            <i v-show="!hybridType" class="el-icon-error" style="color: #fb3636;"></i>
+                            <i v-show="hybridType" class="el-icon-yunduanziyuan" style="color: #0eb90e;"></i>
+                            <i v-show="!hybridType" class="el-icon-yunduan-guanbi-xianxing" style="color: #fb3636;"></i>
                             服务端信息
                         </span>
                     </div>
@@ -113,8 +113,8 @@
                 内的所有条款。如您同意以上协议内容,请点击“同意并继续”。
             </p>
             <span slot="footer" class="dialog-footer">
-                <el-button @click="isPrivacy = false">不同意</el-button>
                 <el-button type="primary" @click="toLogin(loginType)">同意并继续</el-button>
+                <el-button @click="isPrivacy = false">不同意</el-button>
             </span>
         </el-dialog>
         <el-dialog title="请绑定学校" width="30%" :visible.sync="isBindSchool" :show-close="bindSchoolType" :close-on-press-escape="bindSchoolType" :close-on-click-modal="bindSchoolType">

+ 46 - 4
TEAMModelOS.Extension/IES.Exam/IES.ExamViews/src/view/login/Student.vue

@@ -3,11 +3,11 @@
         <!-- 学生端
         会获取到学校信息、正在进行的活动,此处会展示活动名称、学校信息、账号密码
         若没有活动,则不展示账号密码,提示没有活动 -->
-            <div class="activity-school">
-                <h2>艺术评测本地缓存25</h2>
+            <div class="activity-school" v-if="evaluationInfo">
+                <h2>{{ evaluationInfo.name }}</h2>
                 <p>
-                    <img :src="schoolInfo.picture" alt="">
-                    <span>{{ schoolInfo.name }}</span>
+                    <img :src="evaluationInfo.ownerPicture" alt="">
+                    <span>{{ evaluationInfo.ownerName }}</span>
                 </p>
             </div>
         <div class="login-body">
@@ -36,6 +36,7 @@
 export default {
     data() {
         return {
+            evaluationInfo: undefined,
             loginForm: {
                 id: '',
                 password: '',
@@ -47,7 +48,48 @@ export default {
             },
         }
     },
+    created() {
+        this.viewNetworkInfo()
+    },
     methods: {
+        async viewNetworkInfo() {
+            let params = {
+                fp: await this.$tools.getFingerprint()
+            }
+            this.$api.getDevice(params).then(res => {
+                /* res.data.server.host = []
+                res.data.server.uris.forEach(item => {
+                    res.data.server.networks.forEach(network => {
+                        // https://192.168.8.140:5001/login/student
+                        let url = `${item.protocol}://${network.ip}:${item.port}/login/student`
+                        res.data.server.host.push(url)
+                    })
+                })
+                res.data.server.shwoRam = (res.data.server.ram / 1024 / 1024 / 1024).toFixed(1)
+                res.data.server.cpuInfos.forEach(item => {
+                    item.showHZ = item.hz ? (item.hz / 1000) : 0
+                });
+                if(!res.data.server.school) this.isBindSchool = true
+                localStorage.setItem('deviceId', res.data.device)
+                localStorage.setItem('schoolInfo', JSON.stringify(res.data.server.school))
+                this.deviceInfo = res.data
+                this.hybridType = res.data?.hybrid */
+
+                this.stuGetEvaluation()
+            })
+        },
+        stuGetEvaluation() {
+            this.$api.stuGetEvaluation({}).then(res => {
+                if(res.code === 200) {
+                    this.evaluationInfo = res.evaluationClient
+                } else {
+                    this.$message({
+                        message: '当前无评测可以作答',
+                        type: 'warning'
+                    });
+                }
+            })
+        },
         toLogin() {},
     }
 }