mirror of
https://codeup.aliyun.com/67762337eccfc218f6110e0e/vue/learning-system-portal.git
synced 2025-12-07 01:46:42 +08:00
Compare commits
12 Commits
master-062
...
20250918-s
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f80494bf41 | ||
|
|
f4fad98724 | ||
|
|
0102d476a7 | ||
| 0b0789feda | |||
| 70bb87a17a | |||
| 4e60811542 | |||
|
|
075fdb1913 | ||
|
|
8c7569ae4e | ||
|
|
56f565cbf3 | ||
|
|
c15f52e325 | ||
|
|
98c10e703e | ||
|
|
2078c128c9 |
@@ -34,9 +34,48 @@ const userRsSginupCourse = function(data){
|
||||
return ajax.postJson(baseURL,'/stu/project/stuCancelEnrollment',data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取学员指定新员工转正项目的bpm审批状况
|
||||
* {studentId,pid}
|
||||
* add by zhengsongbo on 2025-07-12
|
||||
*/
|
||||
const getStudntProjectInfo = function(pid){
|
||||
return ajax.get(baseURL,`/stu/project/queryStudentInfo?pid=${pid}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* BPM项目:立即报名
|
||||
* pid
|
||||
* add by zhengsongbo on 2025-07-13
|
||||
*/
|
||||
const signUpBpmProjectNow = function(pid){
|
||||
return ajax.get(baseURL,`/stu/project/signUpBpmProjectNow?pid=${pid}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* BPM项目:重新报名
|
||||
* pid
|
||||
* add by zhengsongbo on 2025-07-13
|
||||
*/
|
||||
const signUpBpmProjectAgain = function(pid){
|
||||
return ajax.get(baseURL,`/stu/project/signUpBpmProjectAgain?pid=${pid}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 社招新员工
|
||||
* add by zhengsongbo on 2025-07-14
|
||||
*/
|
||||
const getNewSocialHireProject = function(){
|
||||
return ajax.get(baseURL,'/stu/project/getNewSocialHireProject');
|
||||
}
|
||||
|
||||
export default {
|
||||
getTaskNum,
|
||||
userTaskList,
|
||||
userDeleteStudy,
|
||||
userRsSginupCourse
|
||||
userRsSginupCourse,
|
||||
getStudntProjectInfo,
|
||||
signUpBpmProjectNow,
|
||||
signUpBpmProjectAgain,
|
||||
getNewSocialHireProject
|
||||
}
|
||||
|
||||
BIN
src/assets/images/project/title-bg.png
Normal file
BIN
src/assets/images/project/title-bg.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 48 KiB |
@@ -137,6 +137,30 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- "社招新员工转正培训项目简介"弹框 -->
|
||||
<el-dialog width="733px"
|
||||
:visible.sync="projectDialogVisible"
|
||||
:append-to-body="true"
|
||||
>
|
||||
<div class="el-dialog__header">
|
||||
<span style="font-size: 35px; font-weight: bold; color: white; margin: 60px;line-height: 100px;">项目简介</span>
|
||||
</div>
|
||||
<div style="height: 280px;margin: 0px 40px 0px 40px;">
|
||||
<span v-html="studentInfo.introduction"></span>
|
||||
</div>
|
||||
<div>
|
||||
<span style="font-size: 14px; margin: 40px;" v-if="studentInfo.bpmStatus!=0">审批编号:<span style="font-weight: bold;">{{studentInfo.bpmNumber}}</span></span>
|
||||
<br/>
|
||||
<span style="font-size: 14px; margin: 40px;">审批状态:<span style="font-weight: bold; color: #efbf82">{{studentInfo.bpmStatusName}}</span></span>
|
||||
</div>
|
||||
<template #footer>
|
||||
<span class="dialog-footer">
|
||||
<el-button type="primary" @click="signUpNow" v-if="studentInfo.bpmStatus==0">立即报名</el-button>
|
||||
<el-button v-if="studentInfo.bpmStatus==1" disabled>审批中</el-button>
|
||||
<el-button type="primary" @click="signUpAgain" v-if="studentInfo.bpmStatus==3">重新报名</el-button>
|
||||
</span>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<popup></popup><yearMedal></yearMedal>
|
||||
</div>
|
||||
@@ -144,6 +168,7 @@
|
||||
<script>
|
||||
import { mapGetters, mapActions } from 'vuex';
|
||||
import apiMessage from '@/api/system/message.js';
|
||||
import apiManage from '@/api/manage/manage.js';
|
||||
import popup from '@/components/AlertPopup.vue';
|
||||
import yearMedal from '@/components/Popup/China2023.vue';
|
||||
import apiBoeCourse from '@/api/boe/course.js';
|
||||
@@ -204,6 +229,8 @@ export default {
|
||||
keyword: '',
|
||||
isTiao: false,
|
||||
sex:'',
|
||||
projectDialogVisible: false,
|
||||
studentInfo: {},
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
@@ -214,7 +241,26 @@ export default {
|
||||
//this.loadPopupConfig();
|
||||
},
|
||||
methods: {
|
||||
|
||||
//BPM项目:立即报名
|
||||
signUpNow(){
|
||||
const pid = this.studentInfo.projectId;
|
||||
apiManage.signUpBpmProjectNow(pid).then(res=>{
|
||||
if (res.status == 200){
|
||||
this.projectDialogVisible = false;
|
||||
this.$message.success('报名成功')
|
||||
}else {
|
||||
this.projectDialogVisible = false;
|
||||
this.$message.error('报名失败')
|
||||
}
|
||||
})
|
||||
},
|
||||
//BPM项目:重新报名
|
||||
signUpAgain(){
|
||||
const pid = this.studentInfo.projectId;
|
||||
apiManage.signUpBpmProjectAgain(pid).then(res=>{
|
||||
this.projectDialogVisible = false;
|
||||
})
|
||||
},
|
||||
setCurIdentity(iden){
|
||||
this.$store.dispatch('SetCurIdentity',iden);
|
||||
},
|
||||
@@ -255,7 +301,29 @@ export default {
|
||||
if (val === "four") {
|
||||
window.open("https://m.qingxuetang.com/x/?appId=qxtcorp306130")
|
||||
// this.$emit('showClass',true)
|
||||
} else {
|
||||
} else if(val === "five"){//new社招新员工项目(需BPM审批报名--唯一,如果不唯一,取发布时间最新的)
|
||||
let studentPath = process.env.VUE_APP_STUDENT_PATH;
|
||||
apiManage.getNewSocialHireProject().then(res=>{
|
||||
this.studentInfo = res.data;
|
||||
const bpmStatus = this.studentInfo.bpmStatus;
|
||||
if (bpmStatus == 0){//未报名--则弹窗含“立即报名”
|
||||
this.studentInfo.bpmStatusName="未报名";
|
||||
this.projectDialogVisible=true;
|
||||
|
||||
}else if (bpmStatus == 1){//已报名待审核(审批中)--仅弹窗展示
|
||||
this.studentInfo.bpmStatusName="审批中";
|
||||
this.projectDialogVisible=true;
|
||||
|
||||
}else if (bpmStatus == 2){//bpm报名审核通过,则直接进入项目进行学习
|
||||
let params = encodeURIComponent('projectId=' + this.studentInfo.projectId);
|
||||
this.$router.push('/forward?to=' + studentPath + '/projectdetails¶ms=' + params);
|
||||
}else if(bpmStatus == 3){//已拒绝--则弹窗含“重新报名”
|
||||
this.studentInfo.bpmStatusName="已拒绝(含个人撤回)";
|
||||
this.projectDialogVisible=true;
|
||||
|
||||
}
|
||||
})
|
||||
} else {
|
||||
let urlPre = window.location.protocol + "//" + window.location.host;
|
||||
// process.env.VUE_APP_BOE_WEB_URL
|
||||
let obj = {
|
||||
@@ -264,7 +332,7 @@ export default {
|
||||
two: urlPre + "/grow180/login",
|
||||
three: this.webBaseUrl + "/study/index?study=1",
|
||||
// four: 'https://m.qingxuetang.com/x/?appId=qxtcorp306130',
|
||||
five: urlPre + "/boe/new-employee/index.html",
|
||||
// five: urlPre + "/boe/new-employee/index.html", //old社招新员工 zhengsongbo 注释掉 2025-07-14
|
||||
six: urlPre + "/web/contributor/index",
|
||||
seven: this.webBaseUrl + '/grateful/index'
|
||||
};
|
||||
@@ -598,4 +666,27 @@ text-align: center;
|
||||
margin-right: 8px;
|
||||
border-radius: 50%;
|
||||
}
|
||||
/* 项目简介 弹窗 ---start--- */
|
||||
::v-deep .el-dialog__header {
|
||||
padding: 0 !important;
|
||||
}
|
||||
::v-deep .el-dialog {
|
||||
border-radius: 3% 3% 1% 1%;
|
||||
}
|
||||
.el-dialog__header {
|
||||
height: 100px;
|
||||
margin: 0 !important;
|
||||
background-image: url('../assets/images/project/title-bg.png');
|
||||
background-size: 100% 100%; /* 完全填充 */
|
||||
display: block; /* 避免行内元素空隙 */
|
||||
}
|
||||
::v-deep .el-dialog__title {
|
||||
margin: 0 !important;
|
||||
padding: 0 !important;
|
||||
}
|
||||
::v-deep .el-dialog__body {
|
||||
margin: 0 !important;
|
||||
padding: 0 !important;
|
||||
}
|
||||
/* 项目简介 弹窗 ---end--- */
|
||||
</style>
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
<!-- 当轮播图等于一张时 -->
|
||||
<swiper :options="swiperOptiontwo">
|
||||
<swiper-slide style="margin: 0 auto" v-for="(item, idx) in resonimg" :key="'a' + idx"
|
||||
class="swiper-slide games pointer">
|
||||
<div class="bannbox" :style="{
|
||||
class="swiper-slide games pointer" >
|
||||
<div class="bannbox" @click="handleCarouselClick(item)" :style="{
|
||||
background: `url(${fileBaseUrl + item.image
|
||||
}) center center no-repeat`,
|
||||
}"></div>
|
||||
@@ -17,8 +17,8 @@
|
||||
<div id="container" style="z-index: 99" v-else>
|
||||
<swiper :options="swiperOption" ref="mySwiper" v-if="resonimg.length > 1">
|
||||
<swiper-slide style="margin: 0 auto" v-for="(item, idx) in resonimg" :key="'b' + idx"
|
||||
class="swiper-slide games pointer">
|
||||
<div class="bannbox" :style="{
|
||||
class="swiper-slide games pointer" >
|
||||
<div class="bannbox" @click="handleCarouselClick(item)" :style="{
|
||||
background: `url(${fileBaseUrl + item.image
|
||||
}) center center no-repeat`,
|
||||
}"></div>
|
||||
@@ -220,7 +220,7 @@ export default {
|
||||
autoplay: false,
|
||||
// noSwiping: true,
|
||||
},
|
||||
resonimg: [],
|
||||
// resonimg: [],
|
||||
swiperOption: {
|
||||
autoplay: {
|
||||
delay: 2000,
|
||||
@@ -249,6 +249,13 @@ export default {
|
||||
this.getToolData()
|
||||
},
|
||||
methods: {
|
||||
// 添加点击轮播图跳转的方法
|
||||
handleCarouselClick(item) {
|
||||
if (item.url) {
|
||||
window.open(item.url, '_blank');
|
||||
}
|
||||
},
|
||||
|
||||
downTool(toolInfo) {
|
||||
console.log(toolInfo);
|
||||
window.open(`/activityApi/xboe/m/boe/tools/url/download?urlStr=${process.env.VUE_APP_BOE_WEB_URL}/upload${toolInfo.filePath}&fileName=${toolInfo.name}`)
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<div class="navTop">
|
||||
<div>
|
||||
<router-link to="/grateful" class="nav">首页</router-link> >
|
||||
<span style="cursor: pointer;" class="nav">认证讲师库(2023)</span>
|
||||
<span style="cursor: pointer;" class="nav">认证讲师库</span>
|
||||
</div>
|
||||
<div style="position: relative;">
|
||||
<el-input class="portal-input" placeholder="请输入课程名称" style="border-radius: 20px !important; "
|
||||
|
||||
@@ -486,6 +486,32 @@
|
||||
</div>
|
||||
</div>
|
||||
</el-dialog>
|
||||
<!-- "新员工项目简介""弹框 -->
|
||||
<el-dialog width="733px" title="项目简介" top="80px"
|
||||
:visible.sync="projectDialogVisible"
|
||||
class="custom-class">
|
||||
<div slot="header" class="el-dialog__header">
|
||||
</div>
|
||||
<div style="height: 300px;margin: 20px 40px 0px 40px;">
|
||||
<span v-html="studentInfo.introduction"></span>
|
||||
</div>
|
||||
<div>
|
||||
<span style="margin: 40px; font-size: 14px" v-if="studentInfo.bpmStatus!=0">
|
||||
审批编号:<span style="font-weight: bold;">{{studentInfo.bpmNumber}}</span>
|
||||
</span>
|
||||
<br/>
|
||||
<span style="margin: 40px; font-size: 14px">
|
||||
审批状态:<span v-html="studentInfo.bpmStatusName"></span>
|
||||
</span>
|
||||
</div>
|
||||
<template #footer>
|
||||
<span class="dialog-footer">
|
||||
<el-button type="primary" @click="signUpNow" v-if="studentInfo.bpmStatus==0">立即报名</el-button>
|
||||
<el-button v-if="studentInfo.bpmStatus==1" disabled>审批中</el-button>
|
||||
<el-button type="primary" @click="signUpAgain" v-if="studentInfo.bpmStatus==3">重新报名</el-button>
|
||||
</span>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@@ -507,6 +533,7 @@ import apiTeacher from "@/api/modules/teacher.js";
|
||||
import apiUser from "@/api/system/user.js";
|
||||
import scene from "@/api/modules/scene.js";
|
||||
import apiUserbasic from "@/api/boe/userbasic.js";
|
||||
import apiManage from '@/api/manage/manage.js';
|
||||
import interactBar from "@/components/Portal/interactBar.vue";
|
||||
import courseImage from "@/components/Course/courseImage.vue";
|
||||
import { courseType, getType, toScore, formatDate, formatUserNumber, formatDateByFmt } from "@/utils/tools.js";
|
||||
@@ -619,6 +646,7 @@ export default {
|
||||
twoId: '',
|
||||
count: 0,//分页总条条数
|
||||
showUClass: false,
|
||||
projectDialogVisible: false,
|
||||
ctypeList: [
|
||||
{ type: 1, id: 20, name: '录播课', checked: false },
|
||||
{ type: 1, id: 30, name: '线下课', checked: false },
|
||||
@@ -629,7 +657,7 @@ export default {
|
||||
twoList: [], //二级分类{type:12}
|
||||
threeList: [],//三级分类{type:13}
|
||||
searching: false,//是否正在搜索中
|
||||
|
||||
studentInfo: {},
|
||||
resonimg: {},
|
||||
formatDate,
|
||||
formatNum: formatUserNumber,
|
||||
@@ -769,6 +797,24 @@ export default {
|
||||
// window.removeEventListener("scroll", this.handleScroll);
|
||||
},
|
||||
methods: {
|
||||
//BPM项目:立即报名
|
||||
signUpNow(){
|
||||
const pid = this.studentInfo.projectId;
|
||||
apiManage.signUpBpmProjectNow(pid).then(res=>{
|
||||
this.projectDialogVisible = false;
|
||||
})
|
||||
},
|
||||
|
||||
//BPM项目:重新报名
|
||||
signUpAgain(){
|
||||
const pid = this.studentInfo.projectId;
|
||||
const studentId=this.studentInfo.studentId;
|
||||
const data = {"pid":pid,"studentId":studentId};
|
||||
apiManage.signUpBpmProjectAgain(data).then(res=>{
|
||||
this.projectDialogVisible = false;
|
||||
})
|
||||
},
|
||||
|
||||
// 改变分页
|
||||
currentChange(val) {
|
||||
this.course.pageIndex = val
|
||||
@@ -1216,9 +1262,33 @@ export default {
|
||||
let params = encodeURIComponent('courseId=' + courseId);
|
||||
this.$router.push('/forward?to=' + manageApi + '/stu/project/redirectDetail¶ms=' + params);
|
||||
} else if (item.type == 40) { //学习项目
|
||||
let params = encodeURIComponent('projectId=' + courseId);
|
||||
this.$router.push('/forward?to=' + studentPath + '/projectdetails¶ms=' + params);
|
||||
//this.$router.push('/forward?to='+manageApi+'/stu/project/redirectDetail¶ms='+params);
|
||||
if (item.bpmFlag == 1) { //是否是需要BPM审批的项目(新员工转正项目)
|
||||
//检查当前用户是否已经报名该项目(“未报名”、“审批中”和“审核拒绝”--则弹窗!--“立即报名”和“重新报名"调BPM接口)
|
||||
apiManage.getStudntProjectInfo(courseId).then(res=>{
|
||||
this.studentInfo = res.data;
|
||||
const bpmStatus = this.studentInfo.bpmStatus;
|
||||
if (bpmStatus == 0){//未报名--则弹窗含“立即报名”
|
||||
this.projectDialogVisible=true;
|
||||
this.studentInfo.bpmStatusName="<span style='color: #ddc507;font-weight: bold;'>未报名</span>";
|
||||
|
||||
}else if (bpmStatus == 1){//已报名待审核(审批中)--仅弹窗展示
|
||||
this.projectDialogVisible=true;
|
||||
this.studentInfo.bpmStatusName="<span style='color: #ddc507;font-weight: bold;'>审批中</span>";
|
||||
|
||||
}else if (bpmStatus == 2){//bpm报名审核通过,则直接进入项目进行学习
|
||||
let params = encodeURIComponent('projectId=' + courseId);
|
||||
this.$router.push('/forward?to=' + studentPath + '/projectdetails¶ms=' + params);
|
||||
}else if(bpmStatus == 3){//已拒绝--则弹窗含“重新报名”
|
||||
this.projectDialogVisible=true;
|
||||
this.studentInfo.bpmStatusName="<span style='color: red;font-weight: bold;'>已拒绝(含个人撤回)</span>";
|
||||
|
||||
}
|
||||
})
|
||||
}else {
|
||||
let params = encodeURIComponent('projectId=' + courseId);
|
||||
this.$router.push('/forward?to=' + studentPath + '/projectdetails¶ms=' + params);
|
||||
//this.$router.push('/forward?to='+manageApi+'/stu/project/redirectDetail¶ms='+params);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (item.type == 10) {
|
||||
@@ -2421,4 +2491,31 @@ console.log(res.result.list,'data')
|
||||
|
||||
.option-active {
|
||||
color: #387DF7;
|
||||
}</style>
|
||||
}
|
||||
/* 项目简介 方法一:外部 CSS 类 */
|
||||
::v-deep.el-dialog {
|
||||
border-radius: 3% 3% 1% 1%;
|
||||
padding: 0;
|
||||
}
|
||||
::v-deep.custom-class .el-dialog__header {
|
||||
height: 100px;
|
||||
margin: 0 !important;
|
||||
padding: 0 !important;
|
||||
background-image: url('../../../assets/images/project/title-bg.png');
|
||||
background-size: 100% 100%; /* 完全填充 */
|
||||
display: block; /* 避免行内元素空隙 */
|
||||
}
|
||||
::v-deep.custom-class .el-dialog__header .el-dialog__title {
|
||||
padding: 0 !important;
|
||||
font-size: 35px;
|
||||
font-weight: bold;
|
||||
color: white;
|
||||
margin: 60px;
|
||||
line-height: 100px;
|
||||
}
|
||||
::v-deep.custom-class .el-dialog__body {
|
||||
margin: 0 !important;
|
||||
padding: 0 !important;
|
||||
}
|
||||
/* ---end--- */
|
||||
</style>
|
||||
|
||||
@@ -177,7 +177,7 @@
|
||||
</div>
|
||||
<!-- 课程单元 -->
|
||||
<div class="course-units" v-if="tab == 1">
|
||||
<div :style="`height: ${controlHeight}px;overflow-y: auto;`">
|
||||
<div style="min-height: 350px;max-height: 650px ;overflow-y: auto;">
|
||||
<div class="catalog" v-if="courseInfo.type == 20">
|
||||
<div v-for="(item, index) in catalogTree" :key="index" :name="index">
|
||||
<el-menu
|
||||
@@ -816,7 +816,8 @@
|
||||
}else if(h>500){
|
||||
h=h+60;
|
||||
}
|
||||
$this.controlHeight=h-95;
|
||||
// 移除高度控制 防止内容塌陷
|
||||
// $this.controlHeight=h-95;
|
||||
})
|
||||
|
||||
|
||||
@@ -1800,7 +1801,7 @@
|
||||
margin: 20px auto;
|
||||
.course-playbox {
|
||||
background-color: #fff;
|
||||
min-height: 400px;
|
||||
//min-height: 400px;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
.course-player-container {
|
||||
|
||||
Reference in New Issue
Block a user