|
@@ -3,65 +3,87 @@
|
|
|
<div class="i_body_title">
|
|
|
<span>测评项目</span>
|
|
|
<div>
|
|
|
- <el-button type="primary" class="bgColor" @click="returnA()">返回</el-button>
|
|
|
+ <el-button type="primary" class="bgColor" @click="returnA()">评测中心</el-button>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="i_body_box">
|
|
|
<div class="check_nav">
|
|
|
<div class="nav all" :class="{ active: type == '' }" @click="checkType('')">所有评测</div>
|
|
|
<div class="nav"
|
|
|
- :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' }"
|
|
|
+ :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', bj: item.id == 'afc3f97f-2429-408d-8dcd-5e63a44d355c' }"
|
|
|
@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>
|
|
|
<div class="nav jy" :class="{ active: type == 4 }" @click="checkType(4)">教研耕耘</div>
|
|
|
<div class="nav yy" :class="{ active: type == 5 }" @click="checkType(5)">煜煜星光</div> -->
|
|
|
</div>
|
|
|
- <div class="check_box">
|
|
|
+ <div class="check_box" v-loading="loading">
|
|
|
<div class="noneData" v-if="!worksArray.length" style="text-align: center;">暂无数据</div>
|
|
|
<div class="test_panel" v-for="(item, index) in worksArray" :key="index">
|
|
|
<div class="test_panel_title">
|
|
|
<div class="title">
|
|
|
- <span>已完成</span>
|
|
|
+ <span :class="{ is: item.array.length > 0, no: !item.array.length }">{{ item.array.length > 0 ? "已完成" :
|
|
|
+ "未完成" }}</span>
|
|
|
<span>{{ item.title }}</span>
|
|
|
</div>
|
|
|
<div class="time">
|
|
|
- <span>提交时间: {{ item.time }}</span>
|
|
|
+ <span>创建时间: {{ item.time }}</span>
|
|
|
<span>修改时间: {{ item.utime }}</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="test_panel_box">
|
|
|
- <div class="detail">
|
|
|
- {{ item.brief ? item.brief : '暂无描述' }}
|
|
|
+ <div class="detail" v-if="item.array.length === 0 || item.brief">
|
|
|
+ <span>{{ item.brief ? item.brief : '暂无描述' }}</span>
|
|
|
+ </div>
|
|
|
+ <div class="test_add_box" style="width: calc(100% - 350px - 20px);border: none;margin-right: 20px;padding: 0;" v-else>
|
|
|
+ <div class="test" v-for="(test) in item.array" :key="test.id">
|
|
|
+ <img
|
|
|
+ :src="getImg(test.courseJson) ? getImg(test.courseJson) : require('../../../../assets/icon/test/teacher.jpg')" />
|
|
|
+ <div class="time">
|
|
|
+ <span>提交时间</span>
|
|
|
+ <span>{{ test.time }}</span>
|
|
|
+ <span>修改时间</span>
|
|
|
+ <span>{{ test.utime }}</span>
|
|
|
+ </div>
|
|
|
+ <img @click="deleteTest(test.id)" class="delete" src="../../../../assets/icon/test/delete.png" alt="">
|
|
|
+ <div class="mask">
|
|
|
+ <div @click="doTest(test.courseid, test.id)"><span></span><span>编辑</span></div>
|
|
|
+ <div @click="checkTest(test.courseid, test.id)"><span></span><span>查看</span></div>
|
|
|
+ <div @click="copyTest(test.id)"><span></span><span>复制</span></div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
<div class="panel">
|
|
|
<div class="score">
|
|
|
- <div><span>{{getNum(item.chapters)}}</span><span>题</span></div>
|
|
|
+ <div><span>{{ getNum(item.chapters) }}</span><span>题</span></div>
|
|
|
<div>题目总数</div>
|
|
|
</div>
|
|
|
<div class="score">
|
|
|
- <div><span>{{getScore(item.array)}}</span><span>分</span></div>
|
|
|
+ <div><span>{{ getScore(item.array) }}</span><span>分</span></div>
|
|
|
<div>综合得分</div>
|
|
|
</div>
|
|
|
<div class="btn">
|
|
|
- <div @click="doTest(item.courseid,item.id)"><span></span><span>编辑</span></div>
|
|
|
- <div @click="checkTest(item.courseid,item.id)"><span></span><span>查看</span></div>
|
|
|
- <div @click="copyTest(item.id)"><span></span><span>复制</span></div>
|
|
|
+ <!-- <div @click="doTest(item.courseid,item.id)"><span></span><span>编辑</span></div> -->
|
|
|
+ <div @click="doTest2(item.courseid)"><span></span><span>添加</span></div>
|
|
|
+ <!-- <div @click="checkTest(item.courseid,item.id)"><span></span><span>查看</span></div> -->
|
|
|
+ <!-- <div @click="copyTest(item.id)"><span></span><span>复制</span></div> -->
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div class="test_add_box" v-if="item.array.length > 1">
|
|
|
+ <div class="test_add_box" v-if="item.array.length > 0 && item.brief">
|
|
|
<div class="test" v-for="(test) in item.array" :key="test.id">
|
|
|
- <img src="../../../../assets/icon/test/teacher.jpg" />
|
|
|
+ <img
|
|
|
+ :src="getImg(test.courseJson) ? getImg(test.courseJson) : require('../../../../assets/icon/test/teacher.jpg')" />
|
|
|
<div class="time">
|
|
|
<span>提交时间</span>
|
|
|
<span>{{ test.time }}</span>
|
|
|
<span>修改时间</span>
|
|
|
<span>{{ test.utime }}</span>
|
|
|
</div>
|
|
|
+ <img @click="deleteTest(test.id)" class="delete" src="../../../../assets/icon/test/delete.png" alt="">
|
|
|
<div class="mask">
|
|
|
- <div @click="doTest(test.courseid,test.id)"><span></span><span>编辑</span></div>
|
|
|
- <div @click="checkTest(test.courseid,test.id)"><span></span><span>查看</span></div>
|
|
|
+ <div @click="doTest(test.courseid, test.id)"><span></span><span>编辑</span></div>
|
|
|
+ <div @click="checkTest(test.courseid, test.id)"><span></span><span>查看</span></div>
|
|
|
<div @click="copyTest(test.id)"><span></span><span>复制</span></div>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -90,6 +112,7 @@ export default {
|
|
|
worksArray: [],
|
|
|
org: this.$route.query.org,
|
|
|
role: this.$route.query.role,
|
|
|
+ loading: false
|
|
|
}
|
|
|
},
|
|
|
computed: {
|
|
@@ -103,7 +126,7 @@ export default {
|
|
|
if (item.ttype == 2 && item.array.length > 0) {
|
|
|
item.array.forEach(item2 => {
|
|
|
if (item2.ttype == 1 && item2.json) {
|
|
|
- num++
|
|
|
+ num++
|
|
|
}
|
|
|
})
|
|
|
} else if (item.ttype == 1 && item.json) {
|
|
@@ -122,38 +145,83 @@ export default {
|
|
|
// let _array = JSON.parse(array)
|
|
|
let _score = 0;
|
|
|
let scoreArray = [];
|
|
|
- for(var i = 0;i<array.length;i++){
|
|
|
+ for (var i = 0; i < array.length; i++) {
|
|
|
let _array = JSON.parse(array[i].courseJson)
|
|
|
let score = 0;
|
|
|
- for(var j = 0;j<_array.length;j++){
|
|
|
+ for (var j = 0; j < _array.length; j++) {
|
|
|
let el = _array[j];
|
|
|
if ((el.ttype == 3 || el.ttype == 2) && el.array.length > 0) {
|
|
|
- for(var k = 0;k<el.array.length;k++){
|
|
|
+ for (var k = 0; k < el.array.length; k++) {
|
|
|
let item = el.array[k];
|
|
|
if (item.ttype == 2 && item.array.length > 0) {
|
|
|
- for(var z = 0;z<item.array.length;z++){
|
|
|
+ for (var z = 0; z < item.array.length; z++) {
|
|
|
let item2 = item.array[k];
|
|
|
if (item2.ttype == 1 && item2.json && item2.json.score2) {
|
|
|
- score+=parseInt(item2.json.score2)
|
|
|
+ score += parseInt(item2.json.score2)
|
|
|
}
|
|
|
}
|
|
|
} else if (item.ttype == 1 && item.json && item.json.score2) {
|
|
|
- score+=parseInt(item.json.score2)
|
|
|
+ score += parseInt(item.json.score2)
|
|
|
}
|
|
|
}
|
|
|
} else if (el.ttype == 1 && el.json && el.json.score2) {
|
|
|
- score+=parseInt(el.json.score2)
|
|
|
+ score += parseInt(el.json.score2)
|
|
|
}
|
|
|
}
|
|
|
scoreArray.push(score)
|
|
|
}
|
|
|
scoreArray.forEach(el => {
|
|
|
- _score+=el
|
|
|
+ _score += el
|
|
|
})
|
|
|
console.log(scoreArray)
|
|
|
return (_score ? _score / scoreArray.length : 0);
|
|
|
};
|
|
|
},
|
|
|
+ getImg() {
|
|
|
+ return function (array) {
|
|
|
+ let _array = JSON.parse(array)
|
|
|
+ let _img = '';
|
|
|
+ s: for (var j = 0; j < _array.length; j++) {
|
|
|
+ let el = _array[j];
|
|
|
+ if ((el.ttype == 3 || el.ttype == 2) && el.array.length > 0) {
|
|
|
+ for (var k = 0; k < el.array.length; k++) {
|
|
|
+ let item = el.array[k];
|
|
|
+ if (item.ttype == 2 && item.array.length > 0) {
|
|
|
+ for (var z = 0; z < item.array.length; z++) {
|
|
|
+ let item2 = item.array[k];
|
|
|
+ if (item2.ttype == 1 && item2.type == 5 && item2.json && item2.json.file && item2.json.file.length > 0) {
|
|
|
+ for (var k = 0; k < item2.json.file.length; k++) {
|
|
|
+ let ik = item2.json.file[k];
|
|
|
+ if (ik.type == 3) {
|
|
|
+ _img = ik.url
|
|
|
+ break s;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if (item.ttype == 1 && item.type == 5 && item.json && item.json.file && item.json.file.length > 0) {
|
|
|
+ for (var k = 0; k < item.json.file.length; k++) {
|
|
|
+ let ik = item.json.file[k];
|
|
|
+ if (ik.type == 3) {
|
|
|
+ _img = ik.url
|
|
|
+ break s;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if (el.ttype == 1 && el.type == 5 && el.json && el.json.file && el.json.file.length > 0) {
|
|
|
+ for (var k = 0; k < el.json.file.length; k++) {
|
|
|
+ let ik = el.json.file[k];
|
|
|
+ if (ik.type == 3) {
|
|
|
+ _img = ik.url
|
|
|
+ break s;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return _img;
|
|
|
+ };
|
|
|
+ },
|
|
|
},
|
|
|
methods: {
|
|
|
checkType(type) {
|
|
@@ -174,6 +242,7 @@ export default {
|
|
|
});
|
|
|
},
|
|
|
getWorks() {
|
|
|
+ this.loading = true;
|
|
|
let params = {
|
|
|
uid: this.userid,
|
|
|
typeid: this.type,
|
|
@@ -181,32 +250,41 @@ export default {
|
|
|
this.ajax
|
|
|
.get(this.$store.state.api + "getTestWorksPerson", params)
|
|
|
.then((res) => {
|
|
|
+ this.loading = false;
|
|
|
let array = res.data[0]
|
|
|
+ let array2 = res.data[1]
|
|
|
// 用于存储归类后的数据的对象
|
|
|
- const worksArray = {};
|
|
|
+ let worksArray = {};
|
|
|
|
|
|
// 遍历原始数据,根据 parentId 进行分组
|
|
|
- array.forEach(item => {
|
|
|
- if (!worksArray[item.courseid]) {
|
|
|
- // console.log(item.chapters);
|
|
|
- worksArray[item.courseid] = {
|
|
|
- id: item.id,
|
|
|
- courseid: item.courseid,
|
|
|
- title: item.title,
|
|
|
- time: item.time,
|
|
|
- utime: item.utime,
|
|
|
- chapters: item.chapters,
|
|
|
- brief: item.brief,
|
|
|
- array: []
|
|
|
- };
|
|
|
- }
|
|
|
- worksArray[item.courseid].array.push(item);
|
|
|
+ array2.forEach(item => {
|
|
|
+ // console.log(item.chapters);
|
|
|
+ worksArray[item.courseId] = {
|
|
|
+ id: item.id,
|
|
|
+ courseid: item.courseId,
|
|
|
+ title: item.title,
|
|
|
+ time: item.time,
|
|
|
+ utime: item.utime,
|
|
|
+ chapters: item.chapters,
|
|
|
+ brief: item.brief,
|
|
|
+ array: []
|
|
|
+ };
|
|
|
});
|
|
|
+ worksArray = Object.values(worksArray)
|
|
|
+ worksArray.forEach(el => {
|
|
|
+ array.forEach(el2 => {
|
|
|
+ if (el.courseid == el2.courseid) {
|
|
|
+ el.array.push(el2);
|
|
|
+ }
|
|
|
+ })
|
|
|
+ })
|
|
|
+ // worksArray[item.courseid].array.push(item);
|
|
|
|
|
|
- this.worksArray = Object.values(worksArray);
|
|
|
+ this.worksArray = worksArray;
|
|
|
this.$forceUpdate();
|
|
|
})
|
|
|
.catch((err) => {
|
|
|
+ this.loading = false;
|
|
|
console.error(err);
|
|
|
});
|
|
|
},
|
|
@@ -239,7 +317,7 @@ export default {
|
|
|
this.role
|
|
|
);
|
|
|
},
|
|
|
- doTest(cid,tid){
|
|
|
+ doTest(cid, tid) {
|
|
|
this.$router.push(
|
|
|
"/doTest?cid=" +
|
|
|
cid +
|
|
@@ -256,7 +334,22 @@ export default {
|
|
|
this.role
|
|
|
);
|
|
|
},
|
|
|
- copyTest(tid){
|
|
|
+ doTest2(cid) {
|
|
|
+ this.$router.push(
|
|
|
+ "/doTest?cid=" +
|
|
|
+ cid +
|
|
|
+ "&userid=" +
|
|
|
+ this.userid +
|
|
|
+ "&oid=" +
|
|
|
+ this.oid +
|
|
|
+ "&org=" +
|
|
|
+ this.org +
|
|
|
+ "&type=3" +
|
|
|
+ "&role=" +
|
|
|
+ this.role
|
|
|
+ );
|
|
|
+ },
|
|
|
+ copyTest(tid) {
|
|
|
let params = [{
|
|
|
tid: tid,
|
|
|
uid: this.userid,
|
|
@@ -270,6 +363,33 @@ export default {
|
|
|
.catch((err) => {
|
|
|
console.error(err);
|
|
|
});
|
|
|
+ },
|
|
|
+ deleteTest(tid) {
|
|
|
+ let _this = this
|
|
|
+ _this
|
|
|
+ .$confirm("确定删除此提交的评测么?", "提示", {
|
|
|
+ confirmButtonText: "确定",
|
|
|
+ cancelButtonText: "取消",
|
|
|
+ type: "warning",
|
|
|
+ })
|
|
|
+ .then(() => {
|
|
|
+ let params = [{
|
|
|
+ tid: tid,
|
|
|
+ }];
|
|
|
+ _this.ajax
|
|
|
+ .post(_this.$store.state.api + "deleteTestCourseWorks", params)
|
|
|
+ .then((res) => {
|
|
|
+ _this.$message.success("删除成功");
|
|
|
+ _this.getWorks();
|
|
|
+ })
|
|
|
+ .catch((err) => {
|
|
|
+ console.error(err);
|
|
|
+ });
|
|
|
+ })
|
|
|
+ .catch(() => {
|
|
|
+ return;
|
|
|
+ });
|
|
|
+
|
|
|
}
|
|
|
},
|
|
|
mounted() {
|
|
@@ -334,6 +454,7 @@ export default {
|
|
|
.check_nav>.gr::before,
|
|
|
.check_nav>.md::before,
|
|
|
.check_nav>.jy::before,
|
|
|
+.check_nav>.bj::before,
|
|
|
.check_nav>.yy::before {
|
|
|
content: "";
|
|
|
display: block;
|
|
@@ -384,6 +505,15 @@ export default {
|
|
|
background-image: url('../../../../assets/icon/test/yy_icon_active.png');
|
|
|
}
|
|
|
|
|
|
+.check_nav>.bj::before {
|
|
|
+ background-image: url('../../../../assets/icon/test/bj_icon.png');
|
|
|
+}
|
|
|
+
|
|
|
+.check_nav>.active.bj::before {
|
|
|
+ background-image: url('../../../../assets/icon/test/bj_icon_active.png');
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
.check_box {
|
|
|
height: calc(100% - 50px);
|
|
|
overflow: auto;
|
|
@@ -422,15 +552,24 @@ export default {
|
|
|
}
|
|
|
|
|
|
.test_panel_title>.title>span:nth-child(1) {
|
|
|
- color: rgb(100, 215, 155);
|
|
|
- background: rgb(241, 255, 248);
|
|
|
font-size: 12px;
|
|
|
- border: 1px solid rgb(100, 215, 155);
|
|
|
padding: 3px 5px;
|
|
|
border-radius: 5px;
|
|
|
margin-right: 10px;
|
|
|
}
|
|
|
|
|
|
+.test_panel_title>.title>.is:nth-child(1) {
|
|
|
+ color: rgb(100, 215, 155);
|
|
|
+ background: rgb(241, 255, 248);
|
|
|
+ border: 1px solid rgb(100, 215, 155);
|
|
|
+}
|
|
|
+
|
|
|
+.test_panel_title>.title>.no:nth-child(1) {
|
|
|
+ color: rgb(240, 66, 66);
|
|
|
+ background: rgb(255, 241, 241);
|
|
|
+ border: 1px solid rgb(240, 66, 66);
|
|
|
+}
|
|
|
+
|
|
|
.test_panel_title>.title>span:nth-child(2) {
|
|
|
font-size: 18px;
|
|
|
font-weight: 600;
|
|
@@ -441,7 +580,7 @@ export default {
|
|
|
color: #a1a1a1;
|
|
|
}
|
|
|
|
|
|
-.test_panel_title>.time > span + span{
|
|
|
+.test_panel_title>.time>span+span {
|
|
|
margin-left: 10px;
|
|
|
}
|
|
|
|
|
@@ -560,7 +699,7 @@ export default {
|
|
|
min-width: 120px;
|
|
|
height: 120px;
|
|
|
border-radius: 5px;
|
|
|
- overflow: hidden;
|
|
|
+ /* overflow: hidden; */
|
|
|
position: relative;
|
|
|
}
|
|
|
|
|
@@ -568,10 +707,15 @@ export default {
|
|
|
display: flex;
|
|
|
}
|
|
|
|
|
|
+.test_add_box>.test:hover .delete {
|
|
|
+ display: block;
|
|
|
+}
|
|
|
+
|
|
|
.test_add_box>.test>img {
|
|
|
width: 100%;
|
|
|
height: 100%;
|
|
|
object-fit: cover;
|
|
|
+ border-radius: 5px;
|
|
|
}
|
|
|
|
|
|
.test_add_box>.test+.test {
|
|
@@ -592,6 +736,7 @@ export default {
|
|
|
background: rgba(0, 0, 0, 0.5);
|
|
|
font-size: 14px;
|
|
|
text-align: center;
|
|
|
+ border-radius: 5px;
|
|
|
}
|
|
|
|
|
|
.test_add_box>.test>.time>span {
|
|
@@ -611,6 +756,18 @@ export default {
|
|
|
left: 0;
|
|
|
color: rgb(69, 141, 255);
|
|
|
display: none;
|
|
|
+ border-radius: 5px;
|
|
|
+}
|
|
|
+
|
|
|
+.test_add_box>.test>.delete {
|
|
|
+ position: absolute;
|
|
|
+ width: 20px;
|
|
|
+ height: 20px;
|
|
|
+ right: -5px;
|
|
|
+ top: -5px;
|
|
|
+ cursor: pointer;
|
|
|
+ z-index: 2;
|
|
|
+ display: none;
|
|
|
}
|
|
|
|
|
|
.test_add_box>.test>.mask>div {
|