增加公开课的审核处理

This commit is contained in:
daihh
2023-01-05 19:40:51 +08:00
parent 0ff864e996
commit d90a3920b3
5 changed files with 498 additions and 81 deletions

View File

@@ -0,0 +1,111 @@
/**
* 课程审核的操作因为是后续添加有些处理还在course.js中
* 针对于管理员,教师的功能
*
**/
import ajax from '@/utils/xajax.js'
/**计算待审核课程*/
const countWaitAudit = function() {
return ajax.get('/xboe/m/course/manage/wait-audit-num');
}
/**
* HRBP要审核的课程列表
* @param {Object} query 同pageList
*/
const hrbpAuditList = function(query) {
return ajax.post('/xboe/m/course/manage/audit-pagelist', query);
}
/**
* hrbp审核提交
* @param {Object} data
* {String auditId,String courseId,String title,Boolean open, Boolean pass,String remark}
*/
const hrbpAuditSubmit=function(data) {
return ajax.post('/xboe/m/course/audit/hrbp-submit-audit', data);
}
/**
* 指定审核人,转审核人
* 点击“转审” 弹出教师查询窗口,查询教师,填写备注,提交,调用此接口
* @param {Object} data
* {courseId:课程id,teacherId:指定的审核人教师的id,teacherName:教师名称,remark:备注}
*/
const hrbpAuditAppoint = function(data) {
return ajax.post('/xboe/m/course/audit/appoint', data);
}
/**教师需要审核的课程列表*/
const teacherAuditList = function(query) {
return ajax.post('/xboe/m/course/audit/teacher-course', query);
}
/**
* @param {Object} data
* String auditId,Boolean pass,String remark
*/
const teacherAuditSubmit = function(data) {
return ajax.post('/xboe/m/course/audit/teacher-submit-audit', data);
}
/**
* 最后的审核(公开课审核)查询列表
* @param {Object} data
* CourseHRBPAuditDto
*/
const lastAuditList = function(data) {
return ajax.post('/xboe/m/course/audit/last-audit-list', data);
}
/**
* 最后的审核(公开课审核)提交审核
* @param {Object} data
* String auditId,String courseId,Boolean pass,String remark
*/
const lastAuditSubmit = function(data) {
return ajax.post('/xboe/m/course/audit/last-audit-submit', data);
}
/**
* 获取审核信息,上面教师点击审核课程时,用于查询,上面“转审”时,用户填写的备注信息
* @param {courseId:'课程id',teacherId:'可以不填写,系统会查询当前人'} data
*/
const getAuditInfo = function(data) {
return ajax.post('/xboe/m/course/audit/infos', data);
}
/**
* 审核记录列表,分页查询
*/
const auditPageRecords = function(data) {
return ajax.post('/xboe/m/course/audit/page-records', data);
}
/**
* 审核记录列表要卖课程id查询出审核列记录信息
* { courseId:必须}
*/
const auditCourseRecords = function(data) {
return ajax.post('/xboe/m/course/audit/course-records', data);
}
export default {
countWaitAudit,
hrbpAuditList,
hrbpAuditSubmit,
hrbpAuditAppoint,
teacherAuditList,
teacherAuditSubmit,
lastAuditList,
lastAuditSubmit,
getAuditInfo,
auditPageRecords,
auditCourseRecords
}

View File

@@ -27,9 +27,9 @@
<el-menu-item index="/examine/notapproved">
<span class="textl"><el-badge :value="messagesBeReviewed" class="item" :hidden="messagesBeReviewed == 0">待审核的课程</el-badge></span>
</el-menu-item>
<!-- <el-menu-item index="/course/opencourse/audit">
<el-menu-item index="/course/opencourse/audit">
<span class="textl">公开课审核</span>
</el-menu-item> -->
</el-menu-item>
</el-submenu>
<el-submenu index="manageFinish" v-show="curIdentity == 3">
<template slot="title">

View File

@@ -1,9 +1,348 @@
<template>
<!--公开课审核-->
<div class="u-page">
<div style="padding: 2px 0px 10px 0px;">
<el-row :gutter="10">
<el-col :span="6">
<el-input placeholder="课程名" v-model="params.courseName" clearable></el-input>
</el-col>
<el-col :span="4">
<el-select v-model="params.status" placeholder="审核状态" clearable>
<el-option label="全部" value=""></el-option>
<el-option label="未审核" :value="1"></el-option>
<el-option label="审核通过" :value="9"></el-option>
<el-option label="审核未通过" :value="2"></el-option>
</el-select>
</el-col>
<el-col :span="8">
<el-button type="primary" @click="getseatch();" icon="el-icon-search">搜索</el-button>
<el-button icon="el-icon-refresh-right" type="primary" @click="reset">重置</el-button>
</el-col>
</el-row>
</div>
<el-table :data="pageData" border stripe>
<el-table-column label="序号" type="index" width="50"></el-table-column>
<el-table-column label="名称" prop="courseName" show-overflow-tooltip width="200px">
<template slot-scope="scope">
<span class="previewStyle" @click="viewTopic(scope.row)">{{ scope.row.courseName }}</span>
</template>
</el-table-column>
<el-table-column label="状态" prop="status" width="120px">
<template slot-scope="scope">
<span v-if="scope.row.lastState == 1">待审核</span>
<span v-if="scope.row.lastState == 9">已审核</span>
<span v-if="scope.row.lastState == 2">审核未通过</span>
</template>
</el-table-column>
<el-table-column label="创建人" prop="auditUser"></el-table-column>
<el-table-column label="hrbp审核时间" prop="auditTime" width="200px" show-overflow-tooltip></el-table-column>
<el-table-column label="hrbp" prop="auditInfo" width="150px">
<template slot-scope="scope">{{scope.row.auditUser}}</template>
</el-table-column>
<el-table-column label="操作" width="100px" fixed="right">
<template slot-scope="scope">
<el-button v-if="scope.row.lastState == 1" @click="toExamine(scope.row)" type="text" >审核</el-button>
<el-button @click="toPreview(scope.row)" type="text" >预览</el-button>
</template>
</el-table-column>
</el-table>
<div v-if="pageData.length > 0" style="text-align: center;margin-top:70px">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="page.pageIndex"
:page-sizes="[10, 20, 30, 40]"
:page-size="page.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="page.count"
></el-pagination>
</div>
<div style="height: 100px;"></div>
<!-- 审核 -->
<el-dialog title="审核" :visible.sync="dialogVisible" width="900px" custom-class="g-dialog" @close="examin={}">
<div v-show="expandDetails">
<div v-if="examin.detailType == 10"><auditCourse1 :showTest="true" :isDetails="false" :id="examin.examineId"></auditCourse1></div>
<div v-if="examin.detailType == 20"><auditCourse2 :showTest="true" :isDetails="false" :id="examin.examineId"></auditCourse2></div>
</div>
<div style="border-top: 1px solid #eee; background-color: #eee; padding: 5px;">
<div style="text-align: center;margin-bottom: 10px;">
<el-button @click="expandDetails = !expandDetails">{{expandDetails? '详情折叠':'详情展开'}}</el-button>
</div>
<el-form label-width="80px">
<el-form-item label="审核">
<el-radio-group v-model="auditInfo.pass">
<el-radio :label="true">通过</el-radio>
<el-radio :label="false">不通过</el-radio>
</el-radio-group>
<span v-if="auditInfo.pass" style="margin-left: 50px; color: #1381e8; ">审核通过提交后同时会发布课程</span>
</el-form-item>
<el-form-item label="审核意见"><el-input v-model="auditInfo.remark" type="textarea" rows="3"></el-input></el-form-item>
</el-form>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false;examin={}"> </el-button>
<el-button :loading="btnLoading" type="primary" @click="examineData(true)">提交审核</el-button>
</span>
</el-dialog>
<el-dialog title="课程详情" :visible.sync="showDetails" @close="examin = {};" width="900px" custom-class="g-dialog">
<!-- <div v-show="expandDetails"> -->
<div v-if="examin.detailType == 10"><auditCourse1 :showTest="true" :isDetails="false" :isShow="false" :id="examin.examineId"></auditCourse1></div>
<div v-if="examin.detailType == 20"><auditCourse2 :showTest="true" :isDetails="false" :isShow="false" :id="examin.examineId"></auditCourse2></div>
<!-- </div> -->
<span slot="footer" class="dialog-footer">
<el-button @click="showDetails = false;examin = {};"> </el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import auditCourse1 from '@/components/Course/auditCourse1.vue';
import auditCourse2 from '@/components/Course/auditCourse2.vue';
import {courseType} from '../../utils/tools.js';
import apiType from '../../api/modules/type.js';
import apiCourse from '../../api/modules/course.js';
import apiCourseAudit from '../../api/modules/courseAudit.js';
import { mapGetters,mapActions} from 'vuex';
export default {
name: 'lastAuditCourse',
components: {auditCourse1, auditCourse2 },
computed: {
...mapGetters(['sysTypeMap']),
},
data() {
return {
loading: true,
btnLoading:false,
params: {courseName:'',status:''},
sysTypeList: [],
sysTypeListMap:[],
showDetails:false,
audit:{},
examin:{
detailType: '',
examineId: '',
auditId:'',
examineName: '',
},
courseType: courseType,
page: {
pageIndex: 1,//第几页
pageSize: 10, // 每页多少条
count: 0
},
resOwner: [],
defaultProps:{ value: 'code', label: 'name'},
defaultTypeProps:{ value: 'id', label: 'name' },
expandDetails: false,
auditInfo: {
pass: true,
remark: ''
},
detailType: 1,
dialogVisible: false,
pageData:[],
};
},
mounted() {
this.searchData();
// this.getResOwnerTree().then(rs=>{
// this.resOwnerListMap=rs;
// });
this.getSysTypeTree().then(rs=>{
this.sysTypeListMap=rs;
})
//this.loadResOwners();
this.loadSysTypes();
},
methods: {
getseatch(){
this.params.pageIndex= 1;
this.searchData();
},
reset(){
this.resOwner = ''
this.params.sysType = ''
this.params.createUser = ''
this.params.keyword = ''
this.params.status = ''
this.params.publish = ''
this.sysTypeList = [];
this.params.sysType1 = '';
this.params.sysType2 = '';
this.params.sysType3 = '';
this.params.pageIndex= 1;
this.searchData();
},
...mapActions({
//getResOwnerTree:'resOwner/getResOwnerTree',
//loadResOwners:'resOwner/loadResOwners',
getSysTypeTree:'sysType/getSysTypeTree',
loadSysTypes:'sysType/loadSysTypes'
}),
// resOwnerName(code){
// if(code==''){return '';}
// return this.resOwnerMap.get(code);
// },
sysTypeName(code){
if(code==''){return '';}
return this.sysTypeMap.get(code);
},
//预览跳转页面
toPreview(row) {
// if(row.type == 10) {
// window.open(`${this.webBaseUrl}/course/microPreview?id=${row.id}`);
// } else{
window.open(`${this.webBaseUrl}/course/rePreview?id=${row.courseId}`);
// }
},
// 直接审核
examineData(flag) {
let params = {
auditId:this.examin.auditId,
courseId:this.examin.examineId,//课程id,
title:this.examin.examineName,//课程的名称,
pass: this.auditInfo.pass,//Boolean 是否通过,
remark: this.auditInfo.remark// 备注
}
this.btnLoading=true;
apiCourseAudit.lastAuditSubmit(params).then(res=>{
if(res.status === 200) {
this.$message.success('操作成功!');
this.dialogVisible = false;
this.searchData();
this.$store.dispatch('refrashReviewed');
}else{
this.$message.error(res.message);
}
this.btnLoading=false;
})
},
// 课程查询
async searchData() {
this.params.pageIndex = this.page.pageIndex;
this.params.pageSize = this.page.pageSize;
try {
this.loading = true;
const {result, status,message} = await apiCourseAudit.lastAuditList(this.params);
if(status === 200) {
this.pageData = result.list;
this.page.count = result.count;
} else {
this.$message.error(message)
}
this.loading = false;
} catch (error) {
this.loading = false;
console.log(error);
}
},
viewTopic(row) {
this.examin.detailType = row.courseType;
this.examin.examineId = row.courseId;
this.examin.examineName = row.courseName;
this.showDetails = true;
},
editCurriculum(row) {
this.editData = row;
},
jumpDetails() {
// 跳转打开新页面
let routeData = this.$router.resolve({ path: '/course/detail'});
window.open(this.webBaseUrl+routeData.href, '_blank');
},
toExamine(row) {
this.audit = {};
this.examin.auditId=row.id;
this.examin.detailType = row.courseType;
this.examin.examineId = row.courseId;
this.examin.examineName = row.courseName;
this.auditInfo.pass=true;//审核状态重置回true
this.auditInfo.remark = '';
this.dialogVisible = true;
apiCourse.getAuditInfo({courseId:row.courseId}).then(res=>{
if(res.status == 200) {
if(res.result.length > 0) {
this.audit = res.result[0];
}
} else {
this.$message.error(res.message);
}
})
},
enSure() {
// 确认事件
},
handleSizeChange(val) {
this.page.pageSize = val;
this.page.pageIndex = 1;
this.searchData();
},
handleCurrentChange(val) {
this.page.pageIndex = val;
this.searchData();
}
}
};
</script>
<style>
</style>
<style lang="scss" scoped>
.audit-text{
font-size: 14px;
color: #606266;
font-weight: 700;
}
.course-types {
display: flex;
justify-content: center;
padding: 15px;
.course-type {
margin: 10px;
text-align: center;
padding: 5px;
cursor: pointer;
img {
width: 110px;
height: 110px;
}
.info {
padding-top: 10px;
}
}
.choose {
border: 2px solid #008000;
}
}
.el-aside {
padding: 5px 10px;
}
.cctree {
.cctree-chapter {
.cctree-chapter-name {
border-bottom: 1px solid #dddddd;
}
.cctree-chapter-cells {
margin: 0px;
list-style-type: circle;
padding: 0px;
.cctree-chapter-cell {
line-height: 30px;
list-style-type: circle;
padding-left: 25px;
}
}
}
}
</style>

View File

@@ -181,6 +181,7 @@ import adminPage from '@/components/Administration/adminPage.vue';
import {courseType} from '../../utils/tools.js';
import apiType from '../../api/modules/type.js';
import apiCourse from '../../api/modules/course.js';
import apiCourseAudit from '../../api/modules/courseAudit.js';
import { mapGetters,mapActions} from 'vuex';
export default {
name: 'manageCourse',
@@ -320,8 +321,8 @@ export default {
},
// 直接审核
examineData(flag) {
if(this.isExamine == 1) {
let params = {
let params = {
auditId:this.examin.auditId,
from:2,
courseId:this.examin.examineId,//课程id,
@@ -330,35 +331,18 @@ export default {
remark: this.auditInfo.remark// 备注
}
this.btnLoading=true;
if(flag){
apiCourse.auditAndPublish(params).then(res=>{
if(res.status === 200) {
this.$message.success('操作成功!');
this.dialogVisible = false;
this.searchData();
this.$store.dispatch('refrashReviewed');
}else{
this.$message.error(res.message);
}
this.btnLoading=false;
})
}else{
apiCourse.audit(params).then(res=>{
if(res.status === 200) {
this.$message.success('操作成功!');
this.dialogVisible = false;
this.searchData();
this.$store.dispatch('refrashReviewed');
}else{
this.$message.error(res.message);
}
this.btnLoading=false;
})
}
apiCourseAudit.teacherAuditSubmit(params).then(res=>{
if(res.status === 200) {
this.$message.success('操作成功!');
this.dialogVisible = false;
this.searchData();
this.$store.dispatch('refrashReviewed');
}else{
this.$message.error(res.message);
}
this.btnLoading=false;
})
} else {
this.$message.warning('暂未开放!');
}
},
// 课程查询

View File

@@ -97,7 +97,7 @@
</div>
<div style="height: 100px;"></div>
<!--邀请审核-->
<el-dialog custom-class="g-dialog" title="邀请教师审核课程" :visible.sync="inviteTeacher.dlgShow">
<!-- <el-dialog custom-class="g-dialog" title="邀请教师审核课程" :visible.sync="inviteTeacher.dlgShow">
<div style="display: flex;justify-content:flex-start;padding-bottom: 10px;">
<div style="padding: 0px 5px;"><el-input placeholder="姓名" v-model="inviteTeacher.params.name"></el-input></div>
<div style="padding: 0px 5px;"><el-button @click="findTeachers()" icon="el-icon-search" type="primary" size="small">搜索</el-button></div>
@@ -119,7 +119,7 @@
<el-button @click="inviteTeacher.dlgShow = false"> </el-button>
<el-button type="primary" @click="enSure">确认</el-button>
</template>
</el-dialog>
</el-dialog> -->
<!-- 审核 -->
<el-dialog title="审核" :visible.sync="dialogVisible" width="900px" custom-class="g-dialog" @close="examin={}">
<div v-show="expandDetails">
@@ -143,7 +143,7 @@
</el-form-item>
<el-form-item label="审核意见"><el-input v-model="auditInfo.remark" type="textarea" rows="3"></el-input></el-form-item>
</el-form>
<div v-if="isExamine === 2">
<!-- <div v-if="isExamine === 2">
<div style="display: flex;justify-content:flex-start;padding-bottom: 10px;">
<div style="padding: 0px 5px;"><el-input placeholder="姓名" v-model="inviteTeacher.params.name"></el-input></div>
<div style="padding: 0px 5px;"><el-button @click="findTeachers()" icon="el-icon-search" type="primary" >搜索</el-button></div>
@@ -168,7 +168,7 @@
<el-table-column prop="text" label="备注"></el-table-column>
</el-table>
</div>
</div>
</div> -->
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false;examin={}"> </el-button>
@@ -183,6 +183,7 @@
<el-button @click="showDetails = false;examin = {};"> </el-button>
</span>
</el-dialog>
<!--邀请审核-->
<el-dialog title="请选择教师" :visible.sync="teacherInfo.show" :close-on-click-modal="false" :append-to-body="true" width="500px" custom-class="g-dialog">
<div style="height: 200px;padding-right: 30px;">
<el-form label-width="100px" @submit.native.prevent >
@@ -210,7 +211,6 @@
</el-dialog>
</div>
</template>
<script>
import courseForm from '@/components/Course/courseForm.vue';
import manager from '@/components/Study/manager.vue';
@@ -220,6 +220,7 @@ import auditCourse2 from '@/components/Course/auditCourse2.vue';
import adminPage from '@/components/Administration/adminPage.vue';
import {courseType} from '../../utils/tools.js';
import apiCourse from '../../api/modules/course.js';
import apiCourseAudit from '../../api/modules/courseAudit.js';
import apiUser from '@/api/system/user.js'
import { mapGetters,mapActions} from 'vuex';
export default {
@@ -441,7 +442,7 @@ export default {
},
//直接审核
examineData(flag) {
if(this.isExamine == 1) {
console.log('提交')
let params = {
auditId:this.examin.auditId,//审核记录的id
from:1,
@@ -451,35 +452,17 @@ export default {
remark: this.auditInfo.remark// 备注
}
this.btnLoading=true;
if(flag){
apiCourse.auditAndPublish(params).then(res=>{
if(res.status === 200) {
this.$message.success('操作成功!');
this.dialogVisible = false;
this.searchData();
this.$store.dispatch('refrashReviewed');
}else{
this.$message.error(res.message);
}
this.btnLoading=false;
})
}else{
apiCourse.audit(params).then(res=>{
if(res.status === 200) {
this.$message.success('操作成功!');
this.dialogVisible = false;
this.searchData();
this.$store.dispatch('refrashReviewed');
}else{
this.$message.error(res.message);
}
this.btnLoading=false;
})
}
} else {
this.$message.warning('暂未开放!');
}
apiCourseAudit.hrbpAuditSubmit(params).then(res=>{
if(res.status === 200) {
this.$message.success('操作成功!');
this.dialogVisible = false;
this.searchData();
this.$store.dispatch('refrashReviewed');
}else{
this.$message.error(res.message);
}
this.btnLoading=false;
})
},
// 课程查询
@@ -541,17 +524,17 @@ export default {
this.page.pageIndex = val;
this.searchData();
},
chooseInvite(row) {
//邀请老师审核
this.inviteTeacher.dlgShow = true;
},
findTeachers() {
this.inviteTeacher.list = [
{ id: '1', name: '李玉冰', type:'通过',text: '实用',sex: '男', code: '1023123', orgInfo: '教育技术中心', checked: false },
{ id: '2', name: '李玉冰', type:'未通过',text: '内容在调整',sex: '男', code: '1023123', orgInfo: '教育技术中心', checked: false },
{ id: '3', name: '李玉冰', type:'驳回',text: '内容重复',sex: '男', code: '1023123', orgInfo: '教育技术中心', checked: false }
];
},
// chooseInvite(row) {
// //邀请老师审核
// this.inviteTeacher.dlgShow = true;
// },
// findTeachers() {
// this.inviteTeacher.list = [
// { id: '1', name: '李玉冰', type:'通过',text: '实用',sex: '男', code: '1023123', orgInfo: '教育技术中心', checked: false },
// { id: '2', name: '李玉冰', type:'未通过',text: '内容在调整',sex: '男', code: '1023123', orgInfo: '教育技术中心', checked: false },
// { id: '3', name: '李玉冰', type:'驳回',text: '内容重复',sex: '男', code: '1023123', orgInfo: '教育技术中心', checked: false }
// ];
// },
// 关闭弹框,清除已经生成的二维码
closeCode() {
this.$refs.qrcode.innerHTML = '';