|
@@ -20,19 +20,18 @@
|
|
|
'&screenType=' +
|
|
|
screenType
|
|
|
)
|
|
|
- ">
|
|
|
+ ">
|
|
|
返回
|
|
|
</div>
|
|
|
<div class="box_course">
|
|
|
<div class="wheel">
|
|
|
- <img style="object-fit: cover" :src="
|
|
|
- this.courseDetail.cover != null &&
|
|
|
+ <img style="object-fit: cover" :src="this.courseDetail.cover != null &&
|
|
|
this.courseDetail.cover != ''
|
|
|
? JSON.parse(this.courseDetail.cover).length > 0
|
|
|
? JSON.parse(this.courseDetail.cover)[0].url
|
|
|
: mr
|
|
|
: mr
|
|
|
- " alt />
|
|
|
+ " alt />
|
|
|
</div>
|
|
|
<div class="right_box">
|
|
|
<div class="rightT">
|
|
@@ -50,22 +49,24 @@
|
|
|
<div class="cType" style="font-size: 18px; color: #6c6c6c">
|
|
|
<div style="min-width:150px">
|
|
|
创建者:<span style="color: #000">{{
|
|
|
- courseDetail.username
|
|
|
+ courseDetail.username
|
|
|
}}</span>
|
|
|
</div>
|
|
|
<div class="Tname" v-if="Tname.length > 0" @click="TnameCheck = !TnameCheck">
|
|
|
- 协同人员:<span v-for="(tname, tIndex) in TnameCheck ? Tname : Tname.slice(0,6)" :key="tIndex" style="margin: 0 5px; color: #000">{{ tname
|
|
|
- }}</span><span style="margin: 0 5px; color: #b2b2b2" v-if="!TnameCheck && Tname.length > 6">更多....</span>
|
|
|
+ 协同人员:<span v-for="(tname, tIndex) in TnameCheck ? Tname : Tname.slice(0, 6)" :key="tIndex"
|
|
|
+ style="margin: 0 5px; color: #000">{{ tname
|
|
|
+ }}</span><span style="margin: 0 5px; color: #b2b2b2"
|
|
|
+ v-if="!TnameCheck && Tname.length > 6">更多....</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="cType" style="font-size: 18px; color: #6c6c6c">
|
|
|
</div>
|
|
|
- <div class="btnBox">
|
|
|
+ <div class="btnBox" v-if="false">
|
|
|
<div class="now_study" @click="dialogVisible = true">
|
|
|
预览
|
|
|
</div>
|
|
|
<div class="now_study" @click="goToCongress">进展</div>
|
|
|
- </div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -75,13 +76,20 @@
|
|
|
<div class="courseTd">{{ courseDetail.brief }}</div>
|
|
|
</div>
|
|
|
<div :class="courseDetail.brief != '' ? 'rightTd' : 'noBRight'">
|
|
|
- <div :class="courseDetail.brief != '' ? 'rightTd' : 'noBRight'">
|
|
|
+ <div class="checkBox">
|
|
|
+ <span :class="{ active: type == 1 }" @click="type = 1">阶段选择</span>
|
|
|
+ <span :class="{ active: type == 2 }" @click="type = 2">项目进展</span>
|
|
|
+ </div>
|
|
|
+ <div :class="courseDetail.brief != '' ? 'rightTd' : 'noBRight'" v-show="type == 1">
|
|
|
<div class="blue_box_one" v-for="(item, index) in chapInfo" :key="index" @click="addUserRate(index)">
|
|
|
<div>第{{ index + 1 }}阶段</div>
|
|
|
<div :title="item.dyName">{{ item.dyName }}</div>
|
|
|
<div>{{ item.chapterInfo[0].taskJson.length }}个任务</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
+ <div :class="courseDetail.brief != '' ? 'rightTd' : 'noBRight'" v-show="type == 2">
|
|
|
+ <courseProgress :cid="id" :userid="userid" :oid="oid" :org="org"></courseProgress>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
@@ -108,9 +116,12 @@
|
|
|
|
|
|
<script>
|
|
|
import Heatmap from '../tools/heatmap.vue'
|
|
|
+import courseProgress from './courseProgress.vue'
|
|
|
+
|
|
|
export default {
|
|
|
components: {
|
|
|
Heatmap,
|
|
|
+ courseProgress
|
|
|
},
|
|
|
data() {
|
|
|
return {
|
|
@@ -129,7 +140,7 @@ export default {
|
|
|
chapInfo: [],
|
|
|
courseType: [],
|
|
|
Tname: [],
|
|
|
- TnameCheck:false,
|
|
|
+ TnameCheck: false,
|
|
|
courseTypeJson: {},
|
|
|
userinfo: [],
|
|
|
mr: "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/noBanner1656409780264.jpg",
|
|
@@ -145,15 +156,15 @@ export default {
|
|
|
goTo(path) {
|
|
|
this.$router.push(path);
|
|
|
},
|
|
|
- goToCongress(){
|
|
|
- window.location.href='https://pbl.cocorobo.cn/pbl-teacher-table/dist/#/courseProgress?cid=' +
|
|
|
- this.id +
|
|
|
- '&userid=' +
|
|
|
- this.userid +
|
|
|
- '&oid=' +
|
|
|
- this.oid +
|
|
|
- '&org=' +
|
|
|
- this.org
|
|
|
+ goToCongress() {
|
|
|
+ window.location.href = 'https://pbl.cocorobo.cn/pbl-teacher-table/dist/#/courseProgress?cid=' +
|
|
|
+ this.id +
|
|
|
+ '&userid=' +
|
|
|
+ this.userid +
|
|
|
+ '&oid=' +
|
|
|
+ this.oid +
|
|
|
+ '&org=' +
|
|
|
+ this.org
|
|
|
},
|
|
|
addUserRate(i) {
|
|
|
// var suid = this.userid;
|
|
@@ -273,83 +284,6 @@ export default {
|
|
|
}
|
|
|
|
|
|
|
|
|
- let _chapters = JSON.parse(a[0].chapters)
|
|
|
- let _works = res.data[3];
|
|
|
- let _sCont = res.data[4];
|
|
|
- let _comment = res.data[5];
|
|
|
-
|
|
|
- let _chaptersJson = {
|
|
|
- chapterState: _chapters,
|
|
|
- state: {
|
|
|
- stage: _chapters.length,
|
|
|
- finish: 0,
|
|
|
- learing: 0,
|
|
|
- },
|
|
|
- tool: [],
|
|
|
- chapter: [],
|
|
|
- time: {},
|
|
|
- startTime: _works.length ? _works[0].time : '',
|
|
|
- work: [],
|
|
|
- studentCount: _sCont[0].usercount
|
|
|
- }
|
|
|
- let timeAarry = []
|
|
|
- for (var j = 0; j < _works.length; j++) {
|
|
|
- timeAarry.push(_works[j].vtime)
|
|
|
- }
|
|
|
- timeAarry.forEach(item => {
|
|
|
- _chaptersJson.time[item] = (_chaptersJson.time[item] + 1) || 1
|
|
|
- })
|
|
|
- for (var i = 0; i < _chapters.length; i++) {
|
|
|
- _chaptersJson.chapterState[i].isFinsh = false;
|
|
|
- _chaptersJson.tool[i] = []
|
|
|
- _chaptersJson.chapter[i] = []
|
|
|
- _chaptersJson.work[i] = { name: _chapters[i].dyName, chapter: [] }
|
|
|
- for (var j = 0; j < _works.length; j++) {
|
|
|
- if (i == _works[j].stage) {
|
|
|
- _chaptersJson.chapterState[i].isFinsh = true;
|
|
|
- _chaptersJson.state.finish++
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- let el = _chapters[i].chapterInfo[0].taskJson;
|
|
|
- for (var z = 0; z < el.length; z++) {
|
|
|
- _chaptersJson.tool[i][z] = []
|
|
|
- _chaptersJson.chapter[i][z] = []
|
|
|
- _chaptersJson.work[i].chapter[z] = { name: el[z].task, task: [] }
|
|
|
- _chaptersJson.work[i].is = false;
|
|
|
- let tools = el[z].toolChoose
|
|
|
- for (var k = 0; k < tools.length; k++) {
|
|
|
- _chaptersJson.work[i].chapter[z].task[k] = { tool: tools[k].tool[0], works: [], likeCount: 0, commentCount: 0, score: 0, isScore: 0 }
|
|
|
- for (var j = 0; j < _works.length; j++) {
|
|
|
- if (i == _works[j].stage && z == _works[j].task && k == _works[j].tool) {
|
|
|
- _chaptersJson.work[i].chapter[z].task[k].works.push(_works[j])
|
|
|
- if (_works[j].score) {
|
|
|
- _chaptersJson.work[i].chapter[z].task[k].score += JSON.parse(_works[j].score).wScore
|
|
|
- _chaptersJson.work[i].chapter[z].task[k].isScore++
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- for (var j = 0; j < _comment.length; j++) {
|
|
|
- if (i == _comment[j].stage && z == _comment[j].task && k == _comment[j].tool) {
|
|
|
- if (_comment[j].cType == 1) {
|
|
|
- _chaptersJson.work[i].chapter[z].task[k].likeCount++
|
|
|
- }
|
|
|
-
|
|
|
- if (_comment[j].cType == 2) {
|
|
|
- _chaptersJson.work[i].chapter[z].task[k].commentCount++
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- // if (_chaptersJson.chapter[i][z].indexOf(tools[k].tool[0]) == -1) {
|
|
|
- // _chaptersJson.tool[i][z].push(tools[k].tool[0])
|
|
|
- // }
|
|
|
- _chaptersJson.chapter[i][z][k] = { tool: tools[k].tool[0] }
|
|
|
- _chaptersJson.tool[i][z][k] = { tool: tools[k].tool[0] }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- _chaptersJson.state.learing = _chaptersJson.state.stage - _chaptersJson.state.finish
|
|
|
- this.chaptersJson = _chaptersJson
|
|
|
// debugger
|
|
|
})
|
|
|
.catch((err) => {
|
|
@@ -476,7 +410,7 @@ export default {
|
|
|
margin-top: 30px;
|
|
|
}
|
|
|
|
|
|
-.now_study + .now_study{
|
|
|
+.now_study+.now_study {
|
|
|
margin-left: 10px;
|
|
|
}
|
|
|
|
|
@@ -779,7 +713,7 @@ export default {
|
|
|
cursor: pointer;
|
|
|
margin-left: 40px;
|
|
|
word-break: break-all;
|
|
|
- width:auto;
|
|
|
+ width: auto;
|
|
|
/* overflow: hidden;
|
|
|
white-space: nowrap;
|
|
|
text-overflow: ellipsis; */
|
|
@@ -1165,8 +1099,29 @@ export default {
|
|
|
transform: rotate(90deg);
|
|
|
}
|
|
|
|
|
|
-.btnBox{
|
|
|
+.btnBox {
|
|
|
+ display: flex;
|
|
|
+}
|
|
|
+
|
|
|
+.checkBox {
|
|
|
display: flex;
|
|
|
+ padding: 20px 0 0 20px;
|
|
|
+ box-sizing: border-box;
|
|
|
+ width: 100%;
|
|
|
+}
|
|
|
+
|
|
|
+.checkBox span {
|
|
|
+ padding: 0 10px 5px;
|
|
|
+ cursor: pointer;
|
|
|
+ font-size: 18px;
|
|
|
+}
|
|
|
+
|
|
|
+.checkBox span+span {
|
|
|
+ margin-left: 20px;
|
|
|
}
|
|
|
|
|
|
+.checkBox .active {
|
|
|
+ border-bottom: 2px solid rgb(75, 151, 229);
|
|
|
+ cursor: pointer;
|
|
|
+}
|
|
|
</style>
|