Compare commits

...

28 Commits

Author SHA1 Message Date
670788339
1bd77d3d5b 外部讲师的默认头像 2025-07-11 15:50:45 +08:00
670788339
21d1dffa7b 外部讲师图片显示3 2025-06-23 11:23:23 +08:00
670788339
231e9ed09b 外部讲师图片显示 2025-06-23 11:06:03 +08:00
670788339
f13a77f075 外部讲师图片显示 2025-06-23 10:49:46 +08:00
670788339
ab2ac961f5 替换图片 2025-06-13 09:17:26 +08:00
670788339
6727dd838b 替换图片 2025-06-12 09:36:58 +08:00
joshen
28aa639e1c Merge remote-tracking branch 'yx/master-20250428-shl' 2025-05-13 15:42:12 +08:00
joshen
05d48f5313 Merge remote-tracking branch 'yx/250415-bugfix-shl' 2025-05-13 15:41:28 +08:00
sunhonglai
7a67aca620 修改教师端我的授课记录查询和导出 2025-04-29 16:33:42 +08:00
sunhonglai
a810da8978 修改教师端我的授课记录查询和导出 2025-04-29 16:29:36 +08:00
sunhonglai
b4538150df 修改教师端我的授课记录查询和导出 2025-04-29 16:20:57 +08:00
sunhonglai
e79abe7aee 修改教师端我的授课记录查询和导出 2025-04-29 16:07:35 +08:00
sunhonglai
65dfa4f0e3 修改教师端我的授课记录查询和导出 2025-04-29 16:01:30 +08:00
sunhonglai
4784b02ca4 修改教师端我的授课记录查询和导出 2025-04-29 15:44:55 +08:00
sunhonglai
45e006a4e7 修改教师端我的授课记录查询和导出 2025-04-29 15:34:09 +08:00
sunhonglai
577357ccd0 修改教师端我的授课记录查询和导出 2025-04-29 15:03:58 +08:00
sunhonglai
f92954aa6b 修改教师端我的授课记录查询和导出 2025-04-29 14:53:51 +08:00
sunhonglai
d59b5a9e06 修改教师端我的授课记录查询和导出 2025-04-29 14:53:24 +08:00
sunhonglai
4be009a6d8 修改教师端我的授课记录查询和导出 2025-04-29 14:13:34 +08:00
sunhonglai
b5f01c6357 修改教师端我的授课记录查询和导出 2025-04-29 13:55:05 +08:00
sunhonglai
78cbb21155 修改教师端我的授课记录查询和导出 2025-04-29 13:47:56 +08:00
sunhonglai
adc33e5892 修改教师端我的授课记录查询和导出 2025-04-29 13:36:24 +08:00
sunhonglai
a9de4ad77c 修改教师端我的授课记录查询和导出 2025-04-29 11:49:39 +08:00
sunhonglai
a3c85cbd19 修改教师端我的授课记录查询和导出 2025-04-29 11:46:40 +08:00
sunhonglai
9a6727e52f 修改教师端我的授课记录查询和导出 2025-04-29 11:40:29 +08:00
sunhonglai
7cee4b5ad1 修改教师端我的授课记录查询和导出 2025-04-29 11:33:51 +08:00
sunhonglai
c3b5f1baf0 修改教师端我的授课记录查询和导出 2025-04-29 11:23:45 +08:00
sunhonglai
213990a7b0 每次加载pdf前,清空路径 2025-04-23 14:16:21 +08:00
7 changed files with 313 additions and 190 deletions

View File

@@ -62,15 +62,62 @@ const courseRecordList = function(data) {
return ajax.postJson('/b1/system/teacher/teacher-course-list',data); return ajax.postJson('/b1/system/teacher/teacher-course-list',data);
} }
const getListByToken = function(data) { const getListByToken = function(data) {
return ajax2.get('/manageApi',`/admin/teacherRecord/getListByToken?courseName=${data.courseName}&page=${data.page}&pageSize=${data.pageSize}`); return ajax2.get('/manageApi',`/admin/teacherRecord/getListByToken?courseName=${data.courseName}&pageNo=${data.pageNo}&pageSize=${data.pageSize}`);
}
/**
* 导出授课记录
*
* @param {Object} data
*/
const courseRecordExport2 = function(data) {
return axios.request({
baseURL: "/manageApi",
url: '/admin/export/exportInTeacherRecord',
method: 'get',
data:data,
headers:{'Content-Type':'application/json;charset=utf-8'},
responseType: 'blob'
})
}
/**
* 导出课程下的学员信息
*
*/
const exportStudentOfCourse2 = function(courseId,courseType) {
return axios.request({
baseURL: "/manageApi",
url: '/admin/export/exportTeacherRecordStudentInfo?courseId='+courseId+'&courseType='+courseType,
method: 'get'
// headers:{'Content-Type':'application/json;charset=utf-8'},
// responseType: 'blob'
})
}
/**
* 导出教师下的所有授课记录下的学员信息
*
*/
const exportStudentOfTearcher2 = function(userId) {
return axios.request({
baseURL: "/manageApi",
url: '/b1/system/teacher/teacher-course-student-export?userId='+userId,
method: 'post',
headers:{'Content-Type':'application/json;charset=utf-8'},
responseType: 'blob'
})
} }
export default { export default {
courseRecordExport, courseRecordExport,
courseRecordExport2,
courseRecordList, courseRecordList,
getListByToken, getListByToken,
exportStudentOfCourse, exportStudentOfCourse,
exportStudentOfTearcher exportStudentOfCourse2,
exportStudentOfTearcher,
exportStudentOfTearcher2,
} }

View File

@@ -38,7 +38,7 @@ const detailTeacher=function (id){
* tlevelId级别 * tlevelId级别
* salaryId发薪地 * salaryId发薪地
* tsystemId * tsystemId
* } query * } query
* @returns * @returns
*/ */

Binary file not shown.

After

Width:  |  Height:  |  Size: 657 KiB

View File

@@ -1,206 +1,276 @@
<template> <template>
<div style="padding: 12px 32px 10px 12px;"> <div style="padding: 12px 32px 10px 12px;">
<div style="display: flex;justify-content: flex-start;"> <div style="display: flex;justify-content: flex-start;">
<div><el-input v-model="keyword" placeholder="输入课程名称搜索" clearable></el-input></div> <div>
<div style="padding-left: 10px;"><el-button @click="recordList()" type="primary" icon="el-icon-search">搜索</el-button></div> <el-input v-model="keyword" placeholder="输入课程名称搜索" clearable></el-input>
<div style="padding: 0px 5px;"><el-button icon="el-icon-refresh-right" @click="keyword = ''" type="primary" >重置</el-button></div> </div>
<div style="padding: 0px 5px;"><el-button type="primary" @click="exportFile()" icon="el-icon-search" size="small" round>导出</el-button></div> <div style="padding-left: 10px;">
<div style="padding: 0px 5px;"><el-button type="primary" @click="exportStudentOfTearcher()" icon="el-icon-search" size="small" round>导出学员信息</el-button></div> <el-button @click="recordList()" type="primary" icon="el-icon-search">搜索</el-button>
</div> </div>
<div class="Export"> <div style="padding: 0px 5px;">
<!-- <div style="padding-left: 10px;"><el-button type="primary" @click="exportFile()" icon="el-icon-search" size="small" round>导出</el-button></div> --> <el-button icon="el-icon-refresh-right" @click="keyword = ''" type="primary">重置</el-button>
<!-- <div style="padding: 0px 5px;"><el-button icon="el-icon-refresh-right" type="primary" size="small" round>导出学员信息</el-button></div> --> </div>
</div> <div style="padding: 0px 5px;">
<div style="margin-top:20px;"> <el-button type="primary" @click="exportFile()" icon="el-icon-search" size="small" round>导出</el-button>
<el-table :data="pageData" border stripe> </div>
<el-table-column <!-- <div style="padding: 0px 5px;">-->
label="课程时间" <!-- <el-button type="primary" @click="exportStudentOfTearcher()" icon="el-icon-search" size="small" round>-->
prop="courseTime" <!-- 导出学员信息-->
width="200px"> <!-- </el-button>-->
</el-table-column> <!-- </div>-->
<el-table-column </div>
label="课程名称" <div class="Export">
prop="courseName" <!-- <div style="padding-left: 10px;"><el-button type="primary" @click="exportFile()" icon="el-icon-search" size="small" round>导出</el-button></div> -->
width="200px"> <!-- <div style="padding: 0px 5px;"><el-button icon="el-icon-refresh-right" type="primary" size="small" round>导出学员信息</el-button></div> -->
</el-table-column> </div>
<el-table-column <div style="margin-top:20px;">
label="开课场地" <el-table :data="pageData" border stripe>
prop="address" <el-table-column
width="240px"> label="序号"
</el-table-column> prop="index"
<el-table-column width="100px">
label="所属课程"
prop="parentCourse"
width="120px">
</el-table-column>
<el-table-column
label="所属项目"
prop="parentProject"
></el-table-column>
<el-table-column
label="所属路径"
prop="parentRoute"
width="200px"
></el-table-column>
<el-table-column
label="学习总人数"
prop="studentNumber"
width="100px"
></el-table-column>
<el-table-column
label="时长(分钟)"
width="100px"
prop="period"
></el-table-column>
<el-table-column
label="评分"
width="100px"
prop="score"
></el-table-column>
<el-table-column
label="操作"
align="center"
width="150px"
prop="cz"
fixed="right"
>
<template v-slot="scope"> <template v-slot="scope">
<el-button type="text" @click="exportStudentOfCourse(scope.row.courseId)" size="small">导出学员信息</el-button> <span>{{ scope.$index + 1 }}</span>
</template> </template>
</el-table-column> </el-table-column>
</el-table> <el-table-column
</div> label="讲师工号"
prop="userNo"
width="100px">
</el-table-column>
<el-table-column
label="讲师姓名"
prop="teacherName"
width="200px">
</el-table-column>
<el-table-column
label="课程名称"
prop="courseName"
width="200px">
</el-table-column>
<el-table-column
label="培训发生组织"
prop="trainOrgName"
width="200px">
</el-table-column>
<el-table-column label="课程类型" prop="type" width="120px">
<template v-slot="scope">
<span>{{
{
"0": "在线课",
"1": "面授课",
"2": "课程开发",
"3": "作业员入模培训",
"4": "其他",
}[scope.row.type + '']
}}</span>
</template>
</el-table-column>
<el-table-column
label="授课/课程日期"
prop="teachingDate"
width="200px">
</el-table-column>
<div style="text-align: center; margin-top:57px"> <el-table-column
<el-pagination label="内容分类"
background prop="courseTypeName"
@size-change="handleSizeChange" width="200px">
@current-change="handleCurrentChange" </el-table-column>
:current-page="pageInfo.page" <el-table-column label="开课状态" width="100px" prop="courseStatus">
:page-sizes="[10, 20, 30, 40]" <template v-slot="scope">
:page-size="pageInfo.pageSize" <span>{{
layout="total, sizes, prev, pager, next, jumper" {
:total="pageInfo.total" "0": "未开课",
></el-pagination> "1": "已开课",
</div> }[scope.row.courseStatus + '']
}}</span>
</template>
</el-table-column>
<el-table-column
label="授课时长(分钟)"
prop="teaching"
width="120px"
></el-table-column>
<el-table-column
label="参训人数"
prop="studys"
width="120px"
></el-table-column>
<el-table-column
label="评分"
prop="score"
width="100px"
></el-table-column>
<el-table-column
label="是否生成讲师费"
prop="createdFee"
width="100px"
>
<template v-slot="scope">
<span>{{
{
"0": "否",
"1": "是",
}[scope.row.createdFee + '']
}}</span>
</template>
</el-table-column>
<el-table-column
label="备注"
width="200px"
prop="remark"
></el-table-column>
<el-table-column
label="操作"
align="center"
width="150px"
prop="cz"
fixed="right"
>
<template v-slot="scope">
<el-button type="text" @click="exportStudentOfCourse(scope.row.courseId, scope.row.type)"
size="small">导出学员信息
</el-button>
</template>
</el-table-column>
</el-table>
</div>
</div> <div style="text-align: center; margin-top:57px">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="pageInfo.page"
:page-sizes="[10, 20, 30, 40]"
:page-size="pageInfo.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="pageInfo.total"
></el-pagination>
</div>
</div>
</template> </template>
<script> <script>
import apiCourse from '../../api/boe/courseRecord.js'; import apiCourse from '../../api/boe/courseRecord.js';
import { mapGetters } from 'vuex'; import {mapGetters} from 'vuex';
export default { export default {
data(){ data() {
return { return {
pageData:[], pageData: [],
keyword:'', keyword: '',
pageInfo:{}, pageInfo: {
} pageIndex:1,
}, pageSize:10,
},
}
},
mounted() {
this.recordList();
},
computed: {
...mapGetters(['userInfo'])
},
methods: {
// 导出所有记录
exportFile() {
// let req = {
// }
// apiCourse.courseRecordExport2(req).then(res => {
// const link = document.createElement('a');// 创建a标签
// let blob = new Blob([res.data], {type: 'application/vnd.ms-excel'}); // 设置文件类型
// link.style.display = "none";
// link.href = URL.createObjectURL(blob); // 创建URL
// link.setAttribute("download", "授课记录.xls");
// document.body.appendChild(link);
// link.click();
// document.body.removeChild(link);
// })
// 取pageData记录第一条
if (this.pageData.length > 0) {
let teacherId = this.pageData[0].teacherId;
window.open(
`/manageApi/admin/export/exportInTeacherRecord?teacherId=${teacherId}`
);
}
},
mounted() { // 导出课程下的学员信息
this.recordList(1); exportStudentOfCourse(courseId, courseType) {
// apiCourse.exportStudentOfCourse2(courseId, courseType).then(res => {
// const link = document.createElement('a');// 创建a标签
// let blob = new Blob([res.data], {type: 'application/vnd.ms-excel'}); // 设置文件类型
// link.style.display = "none";
// link.href = URL.createObjectURL(blob); // 创建URL
// link.setAttribute("download", "授课记录.xls");
// document.body.appendChild(link);
// link.click();
// document.body.removeChild(link);
// })
}, window.open(
computed: { `/manageApi/admin/export/exportTeacherRecordStudentInfo?courseId=${courseId}&courseType=${courseType}`
...mapGetters(['userInfo']) );
}, },
methods: { // 导出教师下的所有授课记录下的学员信息
exportStudentOfTearcher() {
let userId = this.userInfo.sysId;
apiCourse.exportStudentOfTearcher2(userId).then(res => {
const link = document.createElement('a');// 创建a标签
let blob = new Blob([res.data], {type: 'application/vnd.ms-excel'}); // 设置文件类型
link.style.display = "none";
link.href = URL.createObjectURL(blob); // 创建URL
link.setAttribute("download", "授课记录.xls");
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
})
},
// 导出所有记录 recordList() {
exportFile(){ let req = {
let req = { courseName: this.keyword,
userId: this.userInfo.sysId pageNo: this.pageInfo.pageIndex,
// userId:"70F80F4E-34BA-10AB-894A-8FA812B19637" pageSize: this.pageInfo.pageSize
} }
apiCourse.courseRecordExport(req).then(res=>{ apiCourse.getListByToken(req).then(res => {
const link = document.createElement('a');// 创建a标签 if (res.status == 200) {
let blob = new Blob([res.data],{type: 'application/vnd.ms-excel'}); // 设置文件类型 this.pageData = res.data.records;
link.style.display = "none"; this.pageInfo.pageSize = Number(res.data.size);
link.href = URL.createObjectURL(blob); // 创建URL this.pageInfo.total = Number(res.data.total);
link.setAttribute("download", "授课记录.xls"); this.pageInfo.page = Number(res.data.current);
document.body.appendChild(link); } else {
link.click();
document.body.removeChild(link);
})
},
// 导出课程下的学员信息
exportStudentOfCourse(courseId){
let userId = this.userInfo.sysId;
apiCourse.exportStudentOfCourse(userId,courseId).then(res=>{
const link = document.createElement('a');// 创建a标签
let blob = new Blob([res.data],{type: 'application/vnd.ms-excel'}); // 设置文件类型
link.style.display = "none";
link.href = URL.createObjectURL(blob); // 创建URL
link.setAttribute("download", "授课记录.xls");
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
})
},
// 导出教师下的所有授课记录下的学员信息
exportStudentOfTearcher(){
let userId = this.userInfo.sysId;
// let userId = '5D36C207-64F4-C512-312D-C9598257695C';
apiCourse.exportStudentOfTearcher(userId).then(res=>{
const link = document.createElement('a');// 创建a标签
let blob = new Blob([res.data],{type: 'application/vnd.ms-excel'}); // 设置文件类型
link.style.display = "none";
link.href = URL.createObjectURL(blob); // 创建URL
link.setAttribute("download", "授课记录.xls");
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
})
},
recordList(pageIndex){
let req = {
//     userId:"6B049FAF-C314-7CCF-0D28-0D23F4C42531",
userId: this.userInfo.sysId,
keyword:this.keyword,
    page:pageIndex,
    pageSize:10
}
apiCourse.courseRecordList(req).then(res=>{
if(res.status == 200) {
this.pageData = res.result.list;
this.pageInfo = res.result.pageInfo;
} else {
this.$message({ this.$message({
type: 'error', type: 'error',
message: res.message message: res.message
}); });
} }
}) })
}, },
// 每页显示的条数事件
handleSizeChange(val){
this.pageInfo.pageSize = val;
this.recordList(1);
},
// 显示制定页的数据
handleCurrentChange(val){
this.pageInfo.pageIndex = val;
this.recordList(this.pageInfo.pageIndex);
},
},
// 每页显示的条数事件
handleSizeChange(val) {
this.pageInfo.pageIndex = 1;
this.pageInfo.pageSize = val;
this.recordList();
},
// 显示制定页的数据
handleCurrentChange(val) {
this.pageInfo.pageIndex = val;
this.recordList(this.pageInfo.pageIndex);
},
},
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.Export{ .Export {
display: flex; display: flex;
padding-top: 10px; padding-top: 10px;
} }
</style> </style>

View File

@@ -5,7 +5,7 @@
<!-- </div> --> <!-- </div> -->
<!-- 底部 --> <!-- 底部 -->
<div class="grateful"> <div class="grateful">
<img src="../../assets/images/grateful/gratefulFooter.png" alt="" /> <img src="../../assets/images/grateful/gratefulFooter20250613.png" alt="" />
</div> </div>
</div> </div>
</template> </template>

View File

@@ -651,6 +651,9 @@ export default {
}); });
}, },
getCaseData() { getCaseData() {
// 清空pdf数据
this.pdfPath = '';
let $this = this; let $this = this;
apiCase.details(this.resolveId, true).then(res => { apiCase.details(this.resolveId, true).then(res => {
if (res.status == 200) { if (res.status == 200) {

View File

@@ -277,12 +277,15 @@
<div class="teacher" v-for="(item, idx) in teachers" :key="idx"> <div class="teacher" v-for="(item, idx) in teachers" :key="idx">
<div class="teacher-avator" @click="toUserHome(item)" title="点击进入他的主页"> <div class="teacher-avator" @click="toUserHome(item)" title="点击进入他的主页">
<!-- <div class="teacher-text" v-if="item.authorInfo.avatar == ''">{{userAvatarText(item.teacherName)}}</div> --> <!-- <div class="teacher-text" v-if="item.authorInfo.avatar == ''">{{userAvatarText(item.teacherName)}}</div> -->
<div v-if="item.authorInfo.avatar !== ''"> <div v-if="item.authorInfo && item.authorInfo.avatar">
<el-avatar :src="fileBaseUrl + item.authorInfo.avatar" shape="circle" :size="50"></el-avatar> <el-avatar :src="fileBaseUrl + item.authorInfo.avatar" shape="circle" :size="50"></el-avatar>
</div> </div>
<div v-else-if="item.photo">
<el-avatar :src="item.photo" shape="circle" :size="50"></el-avatar>
</div>
<div v-else class="teacher-text"> <div v-else class="teacher-text">
<div v-if="item.authorInfo.sex === 1 "><img src="../../../public/images/Avatarman.png" alt=""></div> <div v-if="item.authorInfo && item.authorInfo.sex === 1"><img src="../../../public/images/Avatarwoman.png" alt=""></div>
<div v-else><img src="../../../public/images/Avatarwoman.png" alt=""></div> <div v-else><img src="../../../public/images/Avatarman.png" alt=""></div>
</div> </div>
</div> </div>
<div class="teacher-info"> <div class="teacher-info">