Merge branch 'dev0124' into dev0515

This commit is contained in:
zhangsir
2024-06-20 17:12:29 +08:00
2 changed files with 146 additions and 10 deletions

View File

@@ -7,7 +7,7 @@
<el-popover <el-popover
placement="right" placement="right"
width="437" width="437"
trigger="click" trigger="hover"
:visible-arrow="false" :visible-arrow="false"
v-model="explainBody" v-model="explainBody"
popper-class="growth_explain" popper-class="growth_explain"

View File

@@ -28,7 +28,7 @@
<div class="detailContent"> <div class="detailContent">
<div :class="dataList.length <= 7 ? 'detailbgc' : 'detailAllbgc'"> <div :class="dataList.length <= 7 ? 'detailbgc' : 'detailAllbgc'">
<div v-for="item, index in dataList" :key="index"> <div v-for="item, index in dataList" :key="index">
<el-popover popper-class="pathdetails" placement="right-start" width="360" trigger="click" <el-popover popper-class="pathdetails" placement="right-start" width="360" trigger="hover"
:visible-arrow="false"> :visible-arrow="false">
<div style="font-size: 14px;padding: 20px 20px 10px; "> <div style="font-size: 14px;padding: 20px 20px 10px; ">
<div style="font-size: 16px;font-weight: 600;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;" :title="item.title">{{ item.title }}</div> <div style="font-size: 16px;font-weight: 600;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;" :title="item.title">{{ item.title }}</div>
@@ -41,7 +41,7 @@
<el-progress :percentage="item.currentRatio || 0"></el-progress> <el-progress :percentage="item.currentRatio || 0"></el-progress>
</div> </div>
<div style="margin: 20px 0;">课程讲师{{item.teacherName}}</div> <div style="margin: 20px 0;">课程讲师{{item.teacherName}}</div>
<div>课程简介{{item.introduce}}</div> <div style="overflow: hidden;white-space: nowrap;text-overflow: ellipsis;">课程简介{{item.introduce}}</div>
<el-button style="width: 100%;margin-top: 20px;" type="primary" @click="goStudy(item)"> <el-button style="width: 100%;margin-top: 20px;" type="primary" @click="goStudy(item)">
<div style="display: flex;justify-content: space-between;align-items: center;"> <div style="display: flex;justify-content: space-between;align-items: center;">
<div></div> <div></div>
@@ -56,12 +56,14 @@
</el-button> </el-button>
</div> </div>
<div slot="reference" class="address" :style="{ <div slot="reference" class="address" :style="{
backgroundColor: getColor(item.flag, 0), backgroundColor: getColor(item.flag, (notColor.length>0?
(notColor.includes(item.id)?4:item.id == istabId?flagToggle:0):item.id == istabId?flagToggle:0)),
left: getPosition(item.name, index).left + 'px', left: getPosition(item.name, index).left + 'px',
top: getPosition(item.name, index).top + 'px' top: getPosition(item.name, index).top + 'px'
}"> }">
<div class="icon"> <div class="icon">
<div class="icon-content" :style="{ background: getColor(item.flag, 1) }"> <div class="icon-content" :style="{ background: getColor(item.flag, (notColor.length>0?
(notColor.includes(item.id)?4:item.id == istabId?flagToggleTwo:1):item.id == istabId?flagToggleTwo:1)) }">
{{ item.currentRatio || 0 }}% {{ item.currentRatio || 0 }}%
</div> </div>
<!-- <div v-else class="icon-content" style="background-color: #fff;"> <!-- <div v-else class="icon-content" style="background-color: #fff;">
@@ -78,7 +80,17 @@
<div :style="{ <div :style="{
left: (getPosition(item.name, index).left + 55) + 'px', left: (getPosition(item.name, index).left + 55) + 'px',
top: getPosition(item.name, index).top + 'px' top: getPosition(item.name, index).top + 'px'
}" class="iconTitle" :title="item.title">{{ item.title.length>15?item.title.slice(0,15)+'...':item.title }}</div> }" class="iconTitle" :title="item.title">{{ item.title.length>15?item.title.slice(0,15)+'...':item.title }}
</div>
<div :style="{
left: (getPosition(item.name, index).left + 55) + 'px',
top: (getPosition(item.name, index).top + 60) + 'px'
}" class="growth_explain1" v-if="item.id == istabId && explainBody">
<div class="growth_explain_text">
<div class="text">{{item.title}}是您当前所在位置请您从这里开始学习哦</div>
<div class="explain_close" @click="explainBody = false"></div>
</div>
</div>
</div> </div>
<div class="text_end">您的学习之旅已结束</div> <div class="text_end">您的学习之旅已结束</div>
</div> </div>
@@ -95,8 +107,8 @@
</div> </div>
<!-- 嵌入 --> <!-- 嵌入 -->
<div v-else class="growth-content"> <div v-else class="growth-content">
<div class="pathdetails"> <div class="pathdetails" style="padding: 0">
<div class="detailinfo"> <div class="detailinfo" style="margin: 0">
<div class="select"> <div class="select">
<div class="select-radio" style="margin-left: 0;"><span style="background: #34CA2B;"></span> 必修</div> <div class="select-radio" style="margin-left: 0;"><span style="background: #34CA2B;"></span> 必修</div>
<div class="select-radio"><span style="background: #FE9C4A;"></span>选修</div> <div class="select-radio"><span style="background: #FE9C4A;"></span>选修</div>
@@ -249,23 +261,35 @@
</div> </div>
</el-drawer> </el-drawer>
<el-backtop :bottom="650" :right="119">
<div class="back-to-top">
<div class="img"></div>
<div class="text">继续学习之旅</div>
</div>
</el-backtop>
</div> </div>
</template> </template>
<script> <script>
import portalHeader from '@/components/PortalHeader.vue'; import portalHeader from '@/components/PortalHeader.vue';
import {taskList} from '@/api/growth'; import {taskList} from '@/api/growth';
import { scrollTo } from '@/utils/scroll-to'
export default { export default {
name: 'GrowthPath', name: 'GrowthPath',
components: { portalHeader }, components: { portalHeader },
data() { data() {
return { return {
notColor: [],
flagToggle: 0,
flagToggleTwo: 1,
istabId: '',
explainBody: true,
isIframe: this.$route.query.isTrue, isIframe: this.$route.query.isTrue,
switchFalse: false, switchFalse: false,
showUClass: false, showUClass: false,
colorAttrValue: { colorAttrValue: {
0: ['#FFD04B', "#FBA944"], 0: ['#FFD04B', "#FBA944"],
1: ["#b8e3b8", "#8ac84a"], 1: ["#b8e3b8", "#8ac84a","#FBA944","#8ac84a","#EE423D"],
2: ['#FFD04B', '#FBA944'] 2: ['#FFD04B', '#FBA944']
}, },
iconAttrs: { iconAttrs: {
@@ -366,10 +390,37 @@ export default {
name: '路径图背景全', name: '路径图背景全',
})) }))
} }
const foundItemIndex = this.dataList.findIndex(item => item.currentRatio !== 100);
if (foundItemIndex !== -1) {
const scrollTop = this.iconAttrs[this.dataList[0].name].positions[foundItemIndex]
// 滚动到指定位置
this.performScroll(scrollTop.top);
//判断显示提示弹窗
console.log(this.dataList[foundItemIndex],'xixixi')
this.istabId = this.dataList[foundItemIndex].id
}
} }
}) })
}, },
methods: { methods: {
toggleFlag() {
this.flagToggle = this.flagToggle === 2 ? 3 : 2;
this.flagToggleTwo = this.flagToggleTwo === 2 ? 3 : 2;
},
startToggleInterval() {
this.intervalId = setInterval(this.toggleFlag, 500);
},
async performScroll(scrollTop) {
await this.$nextTick();
window.scrollTo({ top: scrollTop, behavior: 'smooth' });
this.startToggleInterval();
setTimeout(() => {
this.explainBody = false
clearInterval(this.intervalId);
this.flagToggle = 0
this.flagToggleTwo = 1
}, 10000);
},
cylClick() { cylClick() {
window.open("https://u.boe.com/pc/course?keyword=创新力专区"); window.open("https://u.boe.com/pc/course?keyword=创新力专区");
}, },
@@ -570,11 +621,54 @@ export default {
console.log(item,'其他') console.log(item,'其他')
} }
}, },
} },
watch: {
switchFalse(val){
if(val){
const notList = []
this.dataList.forEach(item => {
if(item.currentRatio != 100){
notList.push(item)
}
});
this.notColor = notList.map(item => item.id)
}else{
this.notColor = []
}
}
},
}; };
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.back-to-top{
display: flex;
justify-content: center;
align-items: center;
.img{
width: 50px;
height: 50px;
background-image: url('../../assets/images/growth/plane.png');
background-repeat: no-repeat;
background-size: 100%;
}
.text{
width: 108px;
height: 22px;
line-height: 22px;
background: #0876FF;
border-radius: 11px;
font-weight: 400;
font-size: 14px;
color: #FFFFFF;
text-align: center;
}
}
.el-backtop{
box-shadow: none;
border-radius: 0;
background-color: transparent;
}
::v-deep .el-dialog__header { ::v-deep .el-dialog__header {
border-bottom: 1px solid #E8E8E8; border-bottom: 1px solid #E8E8E8;
padding-bottom: 20px; padding-bottom: 20px;
@@ -659,6 +753,48 @@ export default {
padding: 0 20px; padding: 0 20px;
white-space: nowrap; white-space: nowrap;
} }
.growth_explain1{
position: absolute;
z-index: 9999;
display: flex;
justify-content: center;
align-items: center;
width: 487px;
height: 170px;
margin: -37px;
background: url("../../assets/images/growth/explain.png") no-repeat;
background-size: 100%;
.growth_explain_text{
width: 376px;
height: 56px;
font-weight: 400;
font-size: 14px;
color: #333333;
line-height: 28px;
text-align: left;
position: relative;
.text{
display: -webkit-box;
word-wrap: break-word;
word-break:break-all;
overflow: hidden;
text-overflow:ellipsis;
-webkit-box-orient: vertical;
-webkit-line-clamp:2;
}
.explain_close{
cursor: pointer;
background-image: url(../../assets/images/growth/close.png);
z-index: 99999;
width: 26px;
height: 26px;
position: absolute;
right: -21px;
top: -26px;
}
}
}
.text_end{ .text_end{
position: absolute; position: absolute;
right: 69px; right: 69px;