lsc 1 ano atrás
pai
commit
09edb52c01
33 arquivos alterados com 845 adições e 73 exclusões
  1. 1 1
      dist/index.html
  2. 0 0
      dist/static/css/app.688d051224fbc839c601ed88c7fdadb6.css
  3. 0 0
      dist/static/css/app.688d051224fbc839c601ed88c7fdadb6.css.map
  4. 0 0
      dist/static/css/app.aeffb5b75ddc358d5b9585be8f17eb69.css.map
  5. BIN
      dist/static/img/all_icon_b.df6028a.png
  6. BIN
      dist/static/img/gr_icon_b.8703adc.png
  7. BIN
      dist/static/img/js_icon_b.1d1d718.png
  8. BIN
      dist/static/img/md_icon_b.838dfa9.png
  9. BIN
      dist/static/img/yy_icon_b.926d090.png
  10. 0 0
      dist/static/js/app.0a147c1dd65b9883e0e7.js
  11. 0 0
      dist/static/js/app.0a147c1dd65b9883e0e7.js.map
  12. 0 0
      dist/static/js/app.6f2f0e90be16624295f6.js
  13. 0 0
      dist/static/js/manifest.3512a67a6213c2df4180.js.map
  14. BIN
      src/assets/icon/test/all_icon_b.png
  15. BIN
      src/assets/icon/test/camera_icon.png
  16. BIN
      src/assets/icon/test/check_test_icon.png
  17. BIN
      src/assets/icon/test/delete_test_icon.png
  18. BIN
      src/assets/icon/test/edit_test_icon.png
  19. BIN
      src/assets/icon/test/gr_icon_b.png
  20. BIN
      src/assets/icon/test/js_icon_b.png
  21. BIN
      src/assets/icon/test/md_icon_b.png
  22. BIN
      src/assets/icon/test/yy_icon_b.png
  23. 7 2
      src/components/pages/test/add/addTest.vue
  24. 1 1
      src/components/pages/test/add/edit/check/file.vue
  25. 1 1
      src/components/pages/test/add/setInfo/manualCreated.vue
  26. 0 0
      src/components/pages/test/file/wPdf2.vue
  27. 205 41
      src/components/pages/test/index.vue
  28. 1 1
      src/components/pages/testPerson/index.vue
  29. 19 2
      src/components/pages/testPerson/info/index.vue
  30. 400 0
      src/components/pages/testPerson/info/infoDialog/index.vue
  31. 1 1
      src/components/pages/testPerson/test/index.vue
  32. 208 22
      src/components/pages/testStudent/index.vue
  33. 1 1
      src/components/pages/testStudent/view/component/file.vue

+ 1 - 1
dist/index.html

@@ -25,7 +25,7 @@
       height: 100%;
       width: 100%;
       background: #e6eaf0;
-    }</style><link href=./static/css/app.aeffb5b75ddc358d5b9585be8f17eb69.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.3512a67a6213c2df4180.js></script><script type=text/javascript src=./static/js/vendor.b01159b52abeac4e6216.js></script><script type=text/javascript src=./static/js/app.6f2f0e90be16624295f6.js></script></body></html><script>function stopSafari() {
+    }</style><link href=./static/css/app.688d051224fbc839c601ed88c7fdadb6.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.3512a67a6213c2df4180.js></script><script type=text/javascript src=./static/js/vendor.b01159b52abeac4e6216.js></script><script type=text/javascript src=./static/js/app.0a147c1dd65b9883e0e7.js></script></body></html><script>function stopSafari() {
     //阻止safari浏览器双击放大功能
     let lastTouchEnd = 0  //更新手指弹起的时间
     document.documentElement.addEventListener("touchstart", function (event) {

Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
dist/static/css/app.688d051224fbc839c601ed88c7fdadb6.css


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
dist/static/css/app.688d051224fbc839c601ed88c7fdadb6.css.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
dist/static/css/app.aeffb5b75ddc358d5b9585be8f17eb69.css.map


BIN
dist/static/img/all_icon_b.df6028a.png


BIN
dist/static/img/gr_icon_b.8703adc.png


BIN
dist/static/img/js_icon_b.1d1d718.png


BIN
dist/static/img/md_icon_b.838dfa9.png


BIN
dist/static/img/yy_icon_b.926d090.png


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
dist/static/js/app.0a147c1dd65b9883e0e7.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
dist/static/js/app.0a147c1dd65b9883e0e7.js.map


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
dist/static/js/app.6f2f0e90be16624295f6.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
dist/static/js/manifest.3512a67a6213c2df4180.js.map


BIN
src/assets/icon/test/all_icon_b.png


BIN
src/assets/icon/test/camera_icon.png


BIN
src/assets/icon/test/check_test_icon.png


BIN
src/assets/icon/test/delete_test_icon.png


BIN
src/assets/icon/test/edit_test_icon.png


BIN
src/assets/icon/test/gr_icon_b.png


BIN
src/assets/icon/test/js_icon_b.png


BIN
src/assets/icon/test/md_icon_b.png


BIN
src/assets/icon/test/yy_icon_b.png


+ 7 - 2
src/components/pages/test/add/addTest.vue

@@ -153,7 +153,9 @@ export default {
                             this.role
                         );
                     }
-                    this.getData();
+                    setTimeout(() => {
+                        this.getData();
+                    }, 1000);
                 })
                 .catch((err) => {
                     this.$message.error("网络不佳");
@@ -211,7 +213,9 @@ export default {
                             this.role
                         );
                     }
-                    this.getData();
+                    setTimeout(() => {
+                        this.getData();
+                    }, 1000);
                 })
                 .catch((err) => {
                     this.$message.error("网络不佳");
@@ -243,6 +247,7 @@ export default {
                         }
                         console.log(this.testType);
                         this.look = res.data[0][0].look
+                        this.$forceUpdate()
                         this.loading = false
 
                     })

+ 1 - 1
src/components/pages/test/add/edit/check/file.vue

@@ -75,8 +75,8 @@ import videoIcon from '../../../../../../assets/icon/fileIcon/isVideo.png'
 import wordIcon from '../../../../../../assets/icon/fileIcon/isWord.png'
 import fileIcon from '../../../../../../assets/icon/fileIcon/word2.png'
 
-import wpdf from "../../../file/wpdf.vue";
 import wVideo from "../../../file/wVideo.vue";
+import wpdf from "../../../file/wPdf2.vue";
 import wOffice from "../../../file/wOffice.vue";
 export default {
     components: {

+ 1 - 1
src/components/pages/test/add/setInfo/manualCreated.vue

@@ -24,7 +24,7 @@
         <div class="mc_checkBox">
             <checkOrder :checkC.sync="checkC" :checkJson="checkJson" @changeJson="changeJson"></checkOrder>
             <div class="e_btn">
-                <el-button type="primary" size="small" @click="nextSteps()" style="width: 100px;">下一步</el-button>
+                <el-button type="primary" size="mini" @click="nextSteps()">下一步</el-button>
             </div>
         </div>
     </div>

+ 0 - 0
src/components/pages/test/file/wPdf.vue → src/components/pages/test/file/wPdf2.vue


+ 205 - 41
src/components/pages/test/index.vue

@@ -1,14 +1,15 @@
 <template>
-    <div class="pb_content" style="height: auto">
-        <div class="pb_head top">
-            <div>
-                <span>评测管理</span>
-            </div>
-            <div class="student_button">
-                <el-button type="primary" class="bgColor" @click="goToCourse()">新建评测</el-button>
+    <div class="pb_content" style="height: auto; width: 94%; margin: 10px auto;background: unset;">
+        <div style="width:100%;padding:0 21px;background:#fff;border-radius: 5px;box-sizing: border-box;">
+            <div class="pb_head top">
+                <div>
+                    <span>评测管理</span>
+                </div>
+                <div class="student_button">
+                    <el-button type="primary" class="bgColor" @click="goToCourse()">新建评测</el-button>
+                </div>
+
             </div>
-        </div>
-        <div class="pb_content_body" style="height: 100%">
             <div class="student_head">
                 <div class="choose">
                     <div class="all_choose" v-for="(item, index) in CourseType[0]" :key="index">
@@ -24,21 +25,16 @@
                     <div class="student_search" v-if="typeArray.length">
                         <span>类型</span>
                         <el-select v-model="typeCheck" placeholder="请选择" clearable @change="search">
-                                <el-option v-for="(item, index) in typeArray" :key="index" :label="item.name" :value="item.id"></el-option>
+                            <el-option v-for="(item, index) in typeArray" :key="index" :label="item.name"
+                                :value="item.id"></el-option>
                         </el-select>
                     </div>
-                    <div class="student_search">
-                        <span>所有者</span>
+                    <!-- <div class="student_search">
+                        <span></span>
                         <el-select v-model="groupA" @change="search">
                             <el-option value="0" label="我的"></el-option>
-                            <!-- <el-option value="4" label="全部"></el-option> -->
-                            <!-- <el-option value="2" label="他人"
-                                v-if="oid != '1c3b9def-8fbe-11ed-b13d-005056b86db5'"></el-option> -->
                         </el-select>
-                        <!-- <el-select v-model="groupA" @change="search" v-else>
-                <el-option value="4" label="全部"></el-option>
-              </el-select> -->
-                    </div>
+                    </div> -->
                     <div @click="clear" class="clear" v-if="CourseType.length">重置</div>
                 </div>
 
@@ -49,9 +45,12 @@
                     </div>
                 </div>
             </div>
+        </div>
+
+        <div class="pb_content_body" style="height: 100%;width: 100%;">
             <div class="student_table" v-loading="isLoading">
                 <div class="course_box">
-                    <div class="out_box" v-for="(item, index) in course" :key="index">
+                    <!-- <div class="out_box" v-for="(item, index) in course" :key="index">
                         <div class="myCourse" v-if="item.userid == userid">
                             我的项目
                         </div>
@@ -85,12 +84,39 @@
                                     item.course_teacher.indexOf(userid) !== -1) || role == '1')">编辑</div>
                             <div @click="checkToTest(item.courseId)">查看</div>
                             <div @click="deleteCourse(item.courseId)">删除</div>
-                            <!-- <div @click="get(item.courseId)">预览</div> -->
-                            <!-- 项目进展 -->
-                            <!-- <div @click="copyCourse(item.courseId)">复制</div> -->
-                            <!-- <div v-if="(item.userid == userid || role == '1')" @click="deleteCourse(item.courseId)">
-                                删除
-                            </div> -->
+                        </div>
+                    </div> -->
+                    <div class="test_box" v-for="(item, index) in course" :key="index">
+                        <div class="test_top">
+                            <div class="test_top_img" :class="{ gr: item.typeid == 'afc3f97f-2429-408d-8dcd-5e63a44d355a', md: item.typeid == '478bcccd-e3a1-472b-aa29-3ed7bc479469', jy: item.typeid == '178a377a-b4f1-4a75-b3c3-2787a7c98784', yy: item.typeid == 'dda9728e-5f11-469e-89ee-aca518daf223'}"></div>
+                            <div class="test_top_title">
+                                <span>{{ item.title }}</span>
+                                <span>创建人:{{ item.uname }}</span>
+                            </div>
+                        </div>
+                        <div class="test_time">
+                            <span>创建日期:</span>{{ item.time }}
+                        </div>
+                        <div class="test_time">
+                            <span>修改日期:</span>{{ item.utime }}
+                        </div>
+                        <div class="test_btn">
+                            <div class="test_o_btn">
+                                <el-tooltip content="编辑" placement="top" effect="dark">
+                                    <span class="edit" @click="goToCourse2(item.courseId)" v-if="((item.userid == userid) ||
+                                        (item.course_teacher &&
+                                            item.course_teacher.indexOf(userid) !== -1) || role == '1')"></span>
+                                </el-tooltip>
+                                <el-tooltip class="check" content="查看" placement="top" effect="dark">
+                                    <span @click="checkToTest(item.courseId)"></span>
+                                </el-tooltip>
+                                <el-tooltip class="delete" content="删除" placement="top" effect="dark">
+                                    <span @click="deleteCourse(item.courseId)"></span>
+                                </el-tooltip>
+                            </div>
+                            <div class="test_type" :class="{no:item.look == '1',is:item.look == '2'}">
+                                <span>{{ item.look == '1' ? '未发布' : '已发布' }}</span>
+                            </div>
                         </div>
                     </div>
                     <div class="course_empty" v-if="course.length == 0">暂无数据</div>
@@ -122,10 +148,10 @@
                 <div class="out_box" v-for="(item, index) in courseTeam" :key="index" style="margin-left: 15px">
                     <div class="tup">
                         <img :src="item.cover != null && item.cover != ''
-                                ? JSON.parse(item.cover).length > 0
-                                    ? JSON.parse(item.cover)[0].url
-                                    : mr
+                            ? JSON.parse(item.cover).length > 0
+                                ? JSON.parse(item.cover)[0].url
                                 : mr
+                            : mr
                             " alt />
                     </div>
                     <div class="bottom_box">
@@ -200,7 +226,7 @@ export default {
             now: "",
             courseDetail: {},
             addCourse: {},
-            groupA: "3",
+            groupA: "0",
             classX: "",
             course: [],
             courseName: "",
@@ -212,8 +238,8 @@ export default {
             isChoose: 0,
             problemCourse: null, //查看提问的项目
             courseTeam: [],
-            typeArray:[],
-            typeCheck:"",
+            typeArray: [],
+            typeCheck: "",
         };
     },
     methods: {
@@ -289,7 +315,7 @@ export default {
                 this.role
             );
         },
-        checkToTest(cid){
+        checkToTest(cid) {
             this.$router.push(
                 "/checkToTest?cid=" +
                 cid +
@@ -513,12 +539,12 @@ export default {
                             this.getCourse();
                         })
                         .catch((err) => {
+                            loading.close();
+                            this.isLoading = false;
                             console.error(err);
                         });
                 })
                 .catch(() => {
-                    loading.close();
-                    this.isLoading = false;
                     return;
                 });
             // }
@@ -776,6 +802,11 @@ export default {
 .top {
     display: flex;
     justify-content: space-between;
+    width: 100% !important;
+    box-sizing: border-box;
+    margin: 0px auto;
+    padding: 10px 0;
+    height: 54px;
 }
 
 .bgColor {
@@ -798,7 +829,7 @@ export default {
 .student_button {
     display: flex;
     overflow: hidden;
-    height: 50px;
+    height: 40px;
 }
 
 .upload-demo {
@@ -811,7 +842,7 @@ export default {
 }
 
 .student_table {
-    padding: 20px 0;
+    padding: 0 0;
     height: 100%;
     /* overflow: auto; */
     min-height: 360px;
@@ -875,7 +906,7 @@ export default {
 }
 
 .student_page {
-    width: 95%;
+    width: 100%;
     margin: 0 auto;
 }
 
@@ -988,7 +1019,8 @@ export default {
     display: flex;
     align-items: center;
 }
-.bottom_box>div:nth-child(1) span:nth-child(1){
+
+.bottom_box>div:nth-child(1) span:nth-child(1) {
     font-weight: bold;
     font-size: 18px;
     overflow: hidden;
@@ -996,7 +1028,8 @@ export default {
     white-space: nowrap;
     max-width: 100%;
 }
-.bottom_box>div:nth-child(1) span:nth-child(2){
+
+.bottom_box>div:nth-child(1) span:nth-child(2) {
     font-size: 14px;
     min-width: fit-content;
     margin-left: 5px;
@@ -1218,5 +1251,136 @@ export default {
 
 .more div>span:hover {
     color: #79a2ff;
-}</style>
+}
+
+.test_box {
+    width: 250px;
+    background: #fff;
+    margin-right: 25px;
+    border-radius: 5px;
+    padding: 20px;
+    margin: 5px 15px 10px 0;
+}
+
+.test_top{
+    width: 100%;
+    display: flex;
+    align-items: center;
+}
+.test_top > .test_top_img{
+    height: 40px;
+    width: 40px;
+    background: rgb(108 150 217);
+    margin-right: 10px;
+    border-radius: 5px;
+    display:flex;
+    align-items: center;
+    justify-content: center;
+}
+.test_top > .gr{
+    background: rgb(142, 189, 176);
+}
+.test_top > .md{
+    background: rgb(139, 174, 227);
+}
+.test_top > .js{
+    background: rgb(64, 149, 174);
+}
+.test_top > .yy{
+    background: rgb(98, 102, 188);
+}
+.test_top > .test_top_img:after{
+    content: '';
+    display: block;
+    width: 23px;
+    height: 23px;
+    background-size: 100% 100%;
+    background-image: url('../../../assets/icon/test/all_icon_b.png');
+}
+.test_top > .gr:after{
+    background-image: url('../../../assets/icon/test/gr_icon_b.png');
+}
+.test_top > .md:after{
+    background-image: url('../../../assets/icon/test/md_icon_b.png');
+}
+.test_top > .js:after{
+    background-image: url('../../../assets/icon/test/js_icon_b.png');
+}
+.test_top > .yy:after{
+    background-image: url('../../../assets/icon/test/yy_icon_b.png');
+}
+.test_top > .test_top_title{
+    display: flex;
+    flex-direction: column;
+    justify-content: space-between;
+    height: 40px;
+    width: calc(100% - 40px - 10px)
+}
+.test_top > .test_top_title > span{
+    width: 100;
+    display: block;
+    word-break: break-all;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+}
+.test_top > .test_top_title > span:nth-child(1){
+    font-size: 15px;
+}
+.test_top > .test_top_title > span:nth-child(2){
+    font-size: 14px;
+    color: rgb(58, 131, 252);
+}
+
+.test_box > .test_time{
+    margin-top: 10px;
+    font-size: 14px;
+    color: #a7a7a7;
+}
+
+.test_box > .test_btn{
+    margin-top: 10px;
+    display:flex;
+    align-items: center;
+    justify-content: space-between;
+}
+
+.test_box > .test_btn > .test_o_btn{
+    display: flex;
+    align-items: center;
+}
+.test_box > .test_btn > .test_o_btn > span{
+    display: block;
+    width: 14px;
+    height: 14px;
+    background-size: 100% 100%;
+    cursor: pointer;
+}
+.test_box > .test_btn > .test_o_btn > .edit{
+    background-image: url('../../../assets/icon/test/edit_test_icon.png');
+    margin-right: 20px;
+}
+.test_box > .test_btn > .test_o_btn > .check{
+    background-image: url('../../../assets/icon/test/check_test_icon.png');
+    margin-right: 20px;
+}
+.test_box > .test_btn > .test_o_btn > .delete{
+    background-image: url('../../../assets/icon/test/delete_test_icon.png');
+}
+
+.test_box > .test_btn > .test_type{
+    font-size: 12px;
+    border-radius: 5px;
+    border: 1.5px solid;
+    padding: 3px 8px;
+}
+.test_box > .test_btn > .is{
+    color: rgb(57, 204, 127);
+    background-color: rgba(57, 204, 127,.1);
+}
+.test_box > .test_btn > .no{
+    color: rgb(235, 154, 96);
+    background-color: rgba(235, 154, 96,.1);
+}
+</style>
   

+ 1 - 1
src/components/pages/testPerson/index.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="tp_body">
     <div class="tp_left">
-        <infoA :userid="userid"></infoA>
+        <infoA :userid="userid" :oid="oid"></infoA>
         <panelA :userid="userid" :oid="oid" :org="org"></panelA>
     </div>
     <div class="tp_right">

+ 19 - 2
src/components/pages/testPerson/info/index.vue

@@ -32,26 +32,40 @@
             <span>{{info.job ? info.job : '暂无'}}</span>
           </el-tooltip>
         </div>
-        <!-- <div class="i_bottom_btn">
+        <div class="i_bottom_btn" @click="openInfo()">
           <span class="edit"></span>
           <span>编辑个人信息</span>
-        </div> -->
+        </div>
     </div>
+    <infoDialog :dialogVisibleInfo.sync="dialogVisibleInfo" :userid="userid" :oid="oid"></infoDialog>
   </div>
 </template>
 
 <script>
 import avator from '../../../../assets/icon/test/teacher.jpg'
+import infoDialog from './infoDialog/index.vue'
 export default {
+  components: {
+    infoDialog,
+  },
   props: {
     userid: {
       type: String
     },
+    oid: {
+      type: String
+    },
   },
   data() {
     return {
       avator: avator,
       info: {},
+      dialogVisibleInfo:false,
+    }
+  },
+  watch: {
+    dialogVisibleInfo(newValue, oldValue) {
+      this.getData()
     }
   },
   methods: {
@@ -69,6 +83,9 @@ export default {
         .catch((err) => {
           console.error(err);
         });
+    },
+    openInfo(){
+      this.dialogVisibleInfo = true
     }
   },
   mounted () {

+ 400 - 0
src/components/pages/testPerson/info/infoDialog/index.vue

@@ -0,0 +1,400 @@
+<template>
+    <el-dialog title="编辑个人信息" :visible.sync="dialogVisibleInfo" :append-to-body="true" width="500px"
+        :before-close="handleClose" class="dialog_diy">
+        <div style="width:100%;height: 100%;">
+            <div class="info_box">
+                <div class="img" v-loading="imgLoading">
+                    <img :src="info.headportrait ? info.headportrait : avator" alt="">
+                    <div class="mask" @click.stop="addImg($event)">
+                        <img src="../../../../../assets/icon/test/camera_icon.png" alt="">
+                        <input type="file" accept="image/*" capture="camera" style="display: none"
+                            @change="beforeUpload($event)" />
+                    </div>
+                </div>
+                <div class="info_span">
+                    <span>姓名:</span>
+                    <div>
+                        <el-input v-model="info.username" placeholder="请输入姓名"></el-input>
+                    </div>
+                </div>
+                <div class="info_span">
+                    <span>教研室:</span>
+                    <div>
+                        <el-select multiple collapse-tags v-model="info.teacherOffice" placeholder="请选择教研室"
+                            @change="Ochange" style="width: 100%;">
+                            <el-option v-for="(item, index) in classJuri" :key="index" :label="item.name"
+                                :value="item.id"></el-option>
+                        </el-select>
+                    </div>
+                </div>
+                <div class="info_span">
+                    <span>学科:</span>
+                    <div>
+                        <el-input v-model="info.subject" placeholder="请输入学科"></el-input>
+                    </div>
+                </div>
+                <div class="info_span">
+                    <span>职务:</span>
+                    <div>
+                        <el-input v-model="info.job" placeholder="请输入职务"></el-input>
+                    </div>
+                </div>
+                <div class="info_span">
+                    <span>简介:</span>
+                    <div>
+                        <!-- <el-input v-model="info.intro" placeholder="想说点什么..."></el-input> -->
+                        <textarea v-autoHeight="68" rows="2" class="binfo_input binfo_textarea" cols v-model="info.intro"
+                            placeholder="想说点什么..."></textarea>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <span slot="footer" class="dialog-footer">
+            <el-button type="primary" @click="confirm()">确 认</el-button>
+            <el-button @click="close()">关 闭</el-button>
+        </span>
+    </el-dialog>
+</template>
+  
+<script>
+import avator from '../../../../../assets/icon/test/teacher.jpg'
+export default {
+    props: {
+        dialogVisibleInfo: {
+            type: Boolean,
+            default: false
+        },
+        userid: {
+            type: String
+        },
+        oid: {
+            type: String
+        }
+    },
+    watch: {
+        dialogVisibleInfo(newVal) {
+            if (newVal) {
+                this.getClass2();
+                this.getData();
+            }
+        }
+    },
+    directives: {
+        autoHeight: {
+            update(el, binding) {
+                const { value } = binding
+                if (value && typeof value === 'number') {
+                    el.style.height = `${value}px`
+                } else {
+                    el.style.height = 'auto'
+                }
+            },
+            componentUpdated(el) {
+                el.style.height = `${el.scrollHeight + 5}px`
+            },
+        },
+    },
+    data() {
+        return {
+            avator: avator,
+            info: {},
+            imgLoading: false,
+            classJuri: [],
+        };
+    },
+    methods: {
+        handleClose(done) {
+            this.close();
+            done();
+        },
+        close() {
+            this.$emit("update:dialogVisibleInfo", false);
+        },
+        confirm() {
+            if (!this.info.username) {
+                this.$message.error("姓名不能为空!");
+                return
+            }
+            let params = [{
+                userid: this.userid,
+                username: this.info.username,
+                cclassid: this.info.teacherOffice.join(","),
+                job: this.info.job,
+                subject: this.info.subject,
+                intro: this.info.intro,
+                h: this.info.headportrait ? this.info.headportrait : '',
+            }]
+            this.ajax
+                .post(this.$store.state.api + "updateUserInfoText", params)
+                .then((res) => {
+                    this.$message.success('修改成功')
+                    this.$emit("update:dialogVisibleInfo", false);
+                })
+                .catch((err) => {
+                    this.$message.error("网络不佳");
+                    console.error(err);
+                });
+        },
+        getData() {
+            let params = {
+                uid: this.userid,
+            };
+            this.ajax
+                .get(this.$store.state.api + "selectTestUser", params)
+                .then((res) => {
+                    this.info = res.data[0][0]
+                    this.info.teacherOffice = []
+                    this.info.teacherOffice = this.info.cclassid.split(',')
+                })
+                .catch((err) => {
+                    console.error(err);
+                });
+        },
+        addImg(e) {
+            var el = e.currentTarget;
+            el.getElementsByTagName("input")[0].click();
+            e.target.value = "";
+        },
+        beforeUpload(event, type) {
+            // const loading = this.openLoading();
+            var file = event.target.files[0];
+            var credentials = {
+                accessKeyId: "AKIATLPEDU37QV5CHLMH",
+                secretAccessKey: "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",
+            }; //秘钥形式的登录上传
+            window.AWS.config.update(credentials);
+            window.AWS.config.region = "cn-northwest-1"; //设置区域
+
+            var bucket = new window.AWS.S3({ params: { Bucket: "ccrb" } }); //选择桶
+            var imgA = [
+                "png",
+                "jpg",
+                "jpeg",
+                "bmp",
+                "gif",
+                "webp",
+                "psd",
+                "svg",
+                "tiff",
+            ];
+            if (imgA.indexOf(file.name.split(".")[file.name.split(".").length - 1]) == -1) {
+                this.$message.error("图片格式错误")
+                return;
+            }
+            this.imgLoading = true
+            var _this = this;
+
+            if (file) {
+                var params = {
+                    Key:
+                        file.name.split(".")[0] +
+                        new Date().getTime() +
+                        "." +
+                        file.name.split(".")[file.name.split(".").length - 1],
+                    ContentType: file.type,
+                    Body: file,
+                    "Access-Control-Allow-Credentials": "*",
+                    ACL: "public-read",
+                }; //key可以设置为桶的相抵路径,Body为文件, ACL最好要设置
+                var options = {
+                    partSize: 2048 * 1024 * 1024,
+                    queueSize: 2,
+                    leavePartsOnError: true,
+                };
+                bucket
+                    .upload(params, options)
+                    .on("httpUploadProgress", function (evt) {
+                        //这里可以写进度条
+                        // console.log("Uploaded : " + parseInt((evt.loaded * 80) / evt.total) + '%');
+                    })
+                    .send(function (err, data) {
+                        _this.imgLoading = false
+                        // loading.close();
+                        if (err) {
+                            _this.$message.error("上传失败");
+                        } else {
+
+                            _this.info.headportrait = data.Location
+                            _this.$forceUpdate();
+
+                            console.log(_this.checkJson);
+                            console.log(data.Location);
+                        }
+                    });
+            }
+        },
+        //获取教研室列表
+        getClass2() {
+            let params = {
+                oid: this.oid,
+            };
+            this.ajax
+                .get(this.$store.state.api + "selectTeacherOfficeBySchool", params)
+                .then((res) => {
+                    this.classJuri = res.data[0];
+                })
+                .catch((err) => {
+                    this.isLoading = false;
+                    console.error(err);
+                });
+        },
+        Ochange() {
+            this.$forceUpdate()
+        }
+    }
+};
+</script>
+  
+<style scoped>
+.dialog_diy>>>.el-dialog {
+    /* height: 100%; */
+    margin: 10vh auto !important;
+}
+
+.dialog_diy>>>.el-dialog__header {
+    background: #454545 !important;
+    padding: 15px 20px;
+}
+
+.dialog_diy>>>.el-dialog__body {
+    height: calc(100% - 124px);
+    box-sizing: border-box;
+    padding: 0px;
+}
+
+.dialog_diy>>>.el-dialog__title {
+    color: #fff;
+}
+
+.dialog_diy>>>.el-dialog__headerbtn {
+    top: 19px;
+}
+
+.dialog_diy>>>.el-dialog__headerbtn .el-dialog__close {
+    color: #fff;
+}
+
+.dialog_diy>>>.el-dialog__headerbtn .el-dialog__close:hover {
+    color: #fff;
+}
+
+.dialog_diy>>>.el-dialog__body,
+.dialog_diy>>>.el-dialog__footer {
+    background: #fafafa;
+}
+
+
+.info_box {
+    width: 100%;
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    padding: 30px 0;
+}
+
+.info_box>.img {
+    width: 80px;
+    height: 80px;
+    overflow: hidden;
+    border-radius: 50%;
+    position: relative;
+}
+
+.info_box>.img:hover>.mask {
+    display: flex;
+}
+
+.info_box>.img>.mask {
+    cursor: pointer;
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    background: rgba(0, 0, 0, 0.5);
+    /* display: flex; */
+    align-items: center;
+    justify-content: center;
+    display: none;
+}
+
+.info_box>.img>.mask>img {
+    width: 20px;
+}
+
+.info_box>.img>img {
+    width: 100%;
+    height: 100%;
+    object-fit: cover;
+}
+
+.binfo_input {
+    width: 100%;
+    margin: 0;
+    padding: 12px 14px;
+    display: block;
+    min-width: 0;
+    outline: none;
+    box-sizing: border-box;
+    background: none;
+    border: none;
+    border-radius: 4px;
+    background: #fff;
+    font-size: 16px;
+    resize: none;
+    font-family: 'Microsoft YaHei';
+    min-height: 48px;
+    /* border: 1px solid #3682fc00; */
+    border: 1px solid #C0C4CC;
+}
+
+.binfo_textarea {
+    border: 1px solid #C0C4CC;
+    font-size: 16px;
+    resize: none;
+    /* background: #f6f6f6; */
+    font-family: 'Microsoft YaHei';
+    font-size: 14px;
+    color: #606266;
+}
+
+.binfo_input:focus-visible {
+    border: 1px solid #3681FC !important;
+}
+
+.binfo_textarea::-webkit-input-placeholder {
+    /* WebKit browsers */
+    color: rgb(192, 196, 204);
+}
+
+.binfo_textarea:-moz-placeholder {
+    /* Mozilla Firefox 4 to 18 */
+    color: rgb(192, 196, 204);
+}
+
+.binfo_textarea::-moz-placeholder {
+    /* Mozilla Firefox 19+ */
+    color: rgb(192, 196, 204);
+}
+
+.binfo_textarea:-ms-input-placeholder {
+    /* Internet Explorer 10+ */
+    color: rgb(192, 196, 204);
+}
+
+.info_span {
+    display: flex;
+    margin-top: 10px;
+}
+
+.info_span>span:nth-child(1) {
+    margin-top: 10px;
+    width: 100px;
+    text-align: right;
+}
+
+.info_span>div {
+    width: 250px;
+}
+</style>
+  

+ 1 - 1
src/components/pages/testPerson/test/index.vue

@@ -10,7 +10,7 @@
       <div class="check_nav">
         <div class="nav all" :class="{ active: type == '' }" @click="checkType('')">所有评测</div>
         <div class="nav"
-          :class="{ active: type == item.id, gr: item.name == '个人写真', md: item.name == '明灯导航', jy: item.name == '教师耕耘', yy: item.name == '煜煜星光' }"
+          :class="{ active: type == item.id, gr: item.id == 'afc3f97f-2429-408d-8dcd-5e63a44d355a', md: item.id == '478bcccd-e3a1-472b-aa29-3ed7bc479469', jy: item.id == '178a377a-b4f1-4a75-b3c3-2787a7c98784', yy: item.id == 'dda9728e-5f11-469e-89ee-aca518daf223' }"
           @click="checkType(item.id)" v-for="(item, index) in typeArray" :key="index">{{ item.name }}</div>
         <!-- <div class="nav gr" :class="{ active: type == 2 }" @click="checkType(2)">个人写真</div>
         <div class="nav md" :class="{ active: type == 3 }" @click="checkType(3)">明灯导航</div>

+ 208 - 22
src/components/pages/testStudent/index.vue

@@ -1,14 +1,14 @@
 <template>
-  <div class="pb_content" style="height: auto">
-    <div class="pb_head top">
-      <div>
-        <span>评测中心</span>
-      </div>
-      <div class="student_button">
+  <div class="pb_content" style="height: auto; width: 94%; margin: 10px auto;background: unset;">
+    <div style="width:100%;padding:0 21px;background:#fff;border-radius: 5px;box-sizing: border-box;">
+      <div class="pb_head top">
+        <div>
+          <span>评测中心</span>
+        </div>
+        <div class="student_button">
           <el-button type="primary" class="bgColor" @click="open()">个人中心</el-button>
+        </div>
       </div>
-    </div>
-    <div class="pb_content_body" style="height: 100%">
       <div class="student_head">
         <div class="choose">
           <div class="all_choose" v-for="(item, index) in CourseType[0]" :key="index">
@@ -48,17 +48,20 @@
           </div>
         </div>
       </div>
+    </div>
+    <div class="pb_content_body" style="height: 100%;width:100%;">
       <div class="student_table" v-loading="isLoading">
         <div class="course_box">
-          <div class="out_box" v-for="(item, index) in course" :key="index">
+          <!-- <div class="out_box" v-for="(item, index) in course" :key="index">
             <div class="bottom_box">
               <div class="title">
                 <el-tooltip :content="item.title" placement="top" effect="dark">
                   <span>{{ item.title }}</span>
                 </el-tooltip>
                 <span
-                  :class="{ is: (item.type == 1 && item.testCount > 1) || (item.type != 1  && item.testCount > 0), no: item.testCount == 0, isR: item.type == 3, isS: item.type == 1 && item.testCount == 1 }">{{
-                    item.testCount > 0 ? item.type == 3 ? "已批改" : (item.type == 1 && item.testCount == 1) ? "已保存" : "已完成" : "未完成" }}</span>
+                  :class="{ is: (item.type == 1 && item.testCount > 1) || (item.type != 1 && item.testCount > 0), no: item.testCount == 0, isR: item.type == 3, isS: item.type == 1 && item.testCount == 1 }">{{
+                    item.testCount > 0 ? item.type == 3 ? "已批改" : (item.type == 1 && item.testCount == 1) ? "已保存" : "已完成" :
+                    "未完成" }}</span>
               </div>
               <div class="kc_t">创建人:{{ item.uname }}</div>
               <div class="kc_time">
@@ -68,6 +71,38 @@
                 <span style="color: #4b4b4b">修改日期:</span>{{ item.utime }}
               </div>
             </div>
+            <div class="three_bottom">
+              <div @click="checkTest(item.courseId)" v-if="item.type == 3 || item.type == 2">查看答题</div>
+              <div @click="goToCourse2(item.courseId)">{{ item.testCount > 0 ? item.type == 1 ? '继续答题' : '继续答题' : '进入答题'
+              }}</div>
+            </div>
+          </div> -->
+          <div class="test_box" v-for="(item, index) in course" :key="index">
+            <div class="test_top">
+              <div class="test_top_img"
+                :class="{ gr: item.typeid == 'afc3f97f-2429-408d-8dcd-5e63a44d355a', md: item.typeid == '478bcccd-e3a1-472b-aa29-3ed7bc479469', jy: item.typeid == '178a377a-b4f1-4a75-b3c3-2787a7c98784', yy: item.typeid == 'dda9728e-5f11-469e-89ee-aca518daf223' }">
+              </div>
+              <div class="test_top_title">
+                <span>{{ item.title }}</span>
+                <span>创建人:{{ item.uname }}</span>
+              </div>
+            </div>
+            <div class="test_time">
+              <span>创建日期:</span>{{ item.time }}
+            </div>
+            <div class="test_time">
+              <span>修改日期:</span>{{ item.utime }}
+            </div>
+            <div class="test_btn">
+              <div class="test_o_btn">
+              </div>
+              <div class="test_type"
+                :class="{ is: (item.type == 1 && item.testCount > 1) || (item.type != 1 && item.testCount > 0), no: item.testCount == 0, isR: item.type == 3, isS: item.type == 1 && item.testCount == 1 }">
+                <span>{{
+                  item.testCount > 0 ? item.type == 3 ? "已批改" : (item.type == 1 && item.testCount == 1) ? "已保存" : "已完成" :
+                  "未完成" }}</span>
+              </div>
+            </div>
             <div class="three_bottom">
               <!-- <div @click="checkTest(item.courseId)" v-if="item.type == 3 || item.type == 2">查看答题</div> -->
               <div @click="goToCourse2(item.courseId)">{{ item.testCount > 0 ? item.type == 1 ? '继续答题' : '继续答题' : '进入答题'
@@ -657,16 +692,16 @@ export default {
           console.error(err);
         });
     },
-    open(){
+    open() {
       this.$router.push(
         "/testPerson?userid=" +
-          this.userid +
-          "&oid=" +
-          this.oid +
-          "&org=" +
-          this.org +
-          "&role=" +
-          this.role
+        this.userid +
+        "&oid=" +
+        this.oid +
+        "&org=" +
+        this.org +
+        "&role=" +
+        this.role
       );
     },
     openCourse() {
@@ -772,6 +807,11 @@ export default {
 .top {
   display: flex;
   justify-content: space-between;
+  width: 100% !important;
+  box-sizing: border-box;
+  margin: 0px auto;
+  padding: 10px 0;
+  height: 54px;
 }
 
 .bgColor {
@@ -807,7 +847,7 @@ export default {
 }
 
 .student_table {
-  padding: 20px 0;
+  padding: 0 0;
   height: 100%;
   /* overflow: auto; */
   min-height: 360px;
@@ -871,7 +911,7 @@ export default {
 }
 
 .student_page {
-  width: 95%;
+  width: 100%;
   margin: 0 auto;
 }
 
@@ -1116,7 +1156,7 @@ export default {
 }
 
 .choose>div {
-  margin-left: 10px;
+  margin-right: 10px;
   width: calc(100% / 4 - 50px)
 }
 
@@ -1230,5 +1270,151 @@ export default {
 .more div>span:hover {
   color: #79a2ff;
 }
+
+.test_box {
+  width: 250px;
+  background: #fff;
+  margin-right: 25px;
+  border-radius: 5px;
+  padding: 20px;
+  margin: 5px 15px 10px 0;
+}
+
+.test_top {
+  width: 100%;
+  display: flex;
+  align-items: center;
+}
+
+.test_top>.test_top_img {
+  height: 40px;
+  width: 40px;
+  background: rgb(108 150 217);
+  margin-right: 10px;
+  border-radius: 5px;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+
+.test_top>.gr {
+  background: rgb(142, 189, 176);
+}
+
+.test_top>.md {
+  background: rgb(139, 174, 227);
+}
+
+.test_top>.js {
+  background: rgb(64, 149, 174);
+}
+
+.test_top>.yy {
+  background: rgb(98, 102, 188);
+}
+
+.test_top>.test_top_img:after {
+  content: '';
+  display: block;
+  width: 23px;
+  height: 23px;
+  background-size: 100% 100%;
+  background-image: url('../../../assets/icon/test/all_icon_b.png');
+}
+
+.test_top>.gr:after {
+  background-image: url('../../../assets/icon/test/gr_icon_b.png');
+}
+
+.test_top>.md:after {
+  background-image: url('../../../assets/icon/test/md_icon_b.png');
+}
+
+.test_top>.js:after {
+  background-image: url('../../../assets/icon/test/js_icon_b.png');
+}
+
+.test_top>.yy:after {
+  background-image: url('../../../assets/icon/test/yy_icon_b.png');
+}
+
+.test_top>.test_top_title {
+  display: flex;
+  flex-direction: column;
+  justify-content: space-between;
+  height: 40px;
+  width: calc(100% - 40px - 10px)
+}
+
+.test_top>.test_top_title>span {
+  width: 100;
+  display: block;
+  word-break: break-all;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
+.test_top>.test_top_title>span:nth-child(1) {
+  font-size: 15px;
+}
+
+.test_top>.test_top_title>span:nth-child(2) {
+  font-size: 14px;
+  color: rgb(58, 131, 252);
+}
+
+.test_box>.test_time {
+  margin-top: 10px;
+  font-size: 14px;
+  color: #a7a7a7;
+}
+
+.test_box>.test_btn {
+  margin-top: 10px;
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+}
+
+.test_box>.test_btn>.test_o_btn {
+  display: flex;
+  align-items: center;
+}
+
+
+.test_box>.test_btn>.test_type {
+  font-size: 12px;
+  border-radius: 5px;
+  border: 1.5px solid;
+  padding: 3px 8px;
+}
+
+.test_box>.test_btn>.is {
+  color: rgb(57, 204, 127);
+  background-color: rgba(57, 204, 127, .1);
+}
+
+.test_box>.test_btn>.no {
+  color: rgb(240, 66, 66);
+  background-color: rgba(240, 66, 66, .1);
+}
+
+
+
+.test_box>.test_btn>.isR {
+  color: rgb(0, 98, 255);
+  background-color: rgba(0, 98, 255, .1);
+}
+
+.test_box>.test_btn>.isS {
+  color: rgb(255, 173, 31);
+  background-color: rgba(255, 173, 31, .1);
+}
+
+.test_box .three_bottom{
+  margin-top: 10px;
+}
+
 </style>
   

+ 1 - 1
src/components/pages/testStudent/view/component/file.vue

@@ -89,7 +89,7 @@ import "../../../../../common/aws-sdk-2.235.1.min.js";
 import videoIcon from '../../../../../assets/icon/fileIcon/isVideo.png'
 import wordIcon from '../../../../../assets/icon/fileIcon/isWord.png'
 import fileIcon from '../../../../../assets/icon/fileIcon/word2.png'
-import wpdf from "../../../test/file/wpdf.vue";
+import wpdf from "../../../test/file/wPdf2.vue";
 import wVideo from "../../../test/file/wVideo.vue";
 import wOffice from "../../../test/file/wOffice.vue";
 

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff