讲师认证管理认证

This commit is contained in:
zhangsir
2024-05-13 18:50:27 +08:00
parent a4001cfcf2
commit 9ead7c7f4d
18 changed files with 194 additions and 110 deletions

View File

@@ -121,4 +121,9 @@ export const deleteCourse = (data) => http.post('/activityApi/examine/deleteCour
export const addCourse = (data) => http.post('/activityApi/examine/addCourse',data)
//保存导入的教师信息
export const saveTeacher = (data) => http.post('/activityApi/teacher/saveTeacher',data)
//退回初稿或终稿
export const backDraft = (data) => http.post('/activityApi/examine/rejected',data)
//获取教师详情
export const getDataById = (data) => http.post('/activityApi/teacher/getDataById',data)
//获取认证状态
export const getCertificationProcess = (data) => http.post('/activityApi/teacher/getCertificationProcess',data)

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 834 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -96,7 +96,7 @@
</div>
<div class="cancel" style="margin-left: 15px"></div>
</div>
<div class="defeat">
<div class="defeat" v-if="errorIds.length > 0">
<div class="detext" @click="downloadEeeorData">
下载失败数据
</div>
@@ -232,6 +232,9 @@ export default {
teacherIds:state.successIds
}).then(res=>{
console.log(res,'res')
if(res.code == 200){
ctx.emit("AddImpStuvisibleClose", state.isAddStudent);
}
})
state.successIds = []
state.errorIds = []
@@ -246,7 +249,7 @@ export default {
state.downloadErrUrl = "";
ctx.emit("update:AddImpStuvisible", false);
// 通知父组件重新获取学员列表
ctx.emit("AddImpStuvisibleClose", state.isAddStudent);
// ctx.emit("AddImpStuvisibleClose", state.isAddStudent);
state.isAddStudent = false;
};
@@ -327,8 +330,8 @@ export default {
// 下载失败数据
const downloadEeeorData = () => {
if (state.downloadErrUrl !== "") {
window.open(`/activityApi/teacher/errorExport?ids=${state.errorIds}`);
if (state.errorIds.length !== 0) {
window.open(`/activityApi/teacher/errorExport?ids=${state.errorIds.join(',')}`);
}
};

View File

@@ -128,6 +128,15 @@ const OnlineLearning = async () => {
}
})
}
//创建认证
const createData = () => {
createParam.value = {
name: '',
description: '',
cover: '',
}
visible.value = true
}
//删除数据
const deleteReview = (record) =>{
dialog({
@@ -202,6 +211,7 @@ console.log(999);
}
//重置
const handleRest = ()=>{
searchValue.value = null
getlist()
}
@@ -362,7 +372,7 @@ function handleOper(record, type, status = "") {
<div class="btns" @click="centerDialogVisible=true">
<div class="btn btn3">
<div class="search"></div>
<div class="btnText" @click="visible=true">创建认证</div>
<div class="btnText" @click="createData">创建认证</div>
</div>
</div>

View File

@@ -4,7 +4,7 @@ import { message } from 'ant-design-vue';
import AddInstructor from './AddInstructor.vue'
import LeadInstructor from './LeadInstructor.vue'
import { useRoute, useRouter } from 'vue-router'
import {getTeacherList,deleTeTeacher,getReview,delreview,reviewdetail,reviewSave,endreview,addTeacher,editreview} from '@/api/examineApi.js'
import {getTeacherList,deleTeTeacher,getReview,delreview,reviewdetail,reviewSave,endreview,addTeacher,editreview,backDraft,getDataById,getCertificationProcess} from '@/api/examineApi.js'
import dialog from "@/utils/dialog";
// import QrCode from './QrCode.vue'
import ViewReview from './ViewReview.vue'
@@ -139,6 +139,17 @@ const columnsTeacher = [
dataIndex: 'reviewTime',
},
]
//认证流程
const attestation = [
{name:'初稿已上传',success:'su3.png',error:'',initial:''},
{name:'线上学习已完成',success:'su4.png',error:'',initial:'s1.png'},
{name:'线下辅导已完成',success:'su5.png',error:'',initial:'s2.png'},
{name:'终稿已上传',success:'su1.png',error:'',initial:'s3.png'},
{name:'认证未通过',success:'su2.png',error:'e1.png',initial:'s4.png'},
{name:'线下辅导已完成',success:'su5.png',error:'',initial:'s2.png'},
{name:'终稿已上传',success:'su1.png',error:'',initial:'s3.png'},
{name:'认证',success:'su2.png',error:'e1.png',initial:'s4.png'},
]
//老师重置
const resetTeacher = ()=>{
addTeacherList()
@@ -317,18 +328,34 @@ function handleOper(record, type, status = "") {
//搜索教师
const SearchTeachers =async()=>{
const res = await getTeacherList({
PageNo: 1,
PageSize: 8,
examineId: route.query.id.toString(),
secondResult: value2.value.toString(),
reviewResult:value.value.toString(),
keyWord:value3.value.toString()
pageNo: 1,
pageSize: 8,
examineId: route.query.id,
secondResult: value2.value,
reviewResult:value.value,
keyWord:value3.value
})
total.value = res.data.total
data.value = res.data.records
if(value2.value=='1'){
getTeacher2()
}
}
//重置教师
const handleRest=()=>{
value2.value = null
value.value = null
value3.value = null
getTeacher()
getTeacher2()
}
//刷新列表
const translateTeacher = (flag) => {
handleRest()
}
const translate = (flag) => {
handleRest()
}
//2次认证
const total2 = ref(null)
@@ -336,11 +363,12 @@ const data2 = ref([])
//教师列表2
const getTeacher2 =async()=>{
const res = await getTeacherList({
PageNo: 1,
PageSize: 8,
pageNo: 1,
pageSize: 8,
examineId: route.query.id.toString(),
secondResult: '0',
secondResult: '1',
reviewResult:value.value,
keyWord:value3.value
})
console.log(res,'resaaaa')
total2.value = res.data.total
@@ -358,8 +386,8 @@ const onChangeTeacher = (pageNo,pageSize) => {
//教师列表
const getTeacher =async()=>{
const res = await getTeacherList({
PageNo: current1.value,
PageSize: 8,
pageNo: current1.value,
pageSize: 8,
examineId: route.query.id.toString(),
secondResult: "0"
})
@@ -383,7 +411,7 @@ onMounted(()=>{
}
getTeacher()
getReviewList()
// getTeacher2()
getTeacher2()
})
const activeName = ref('first')
const ViewReviewShow =ref(null)
@@ -481,6 +509,52 @@ const twiceolumns = [
key: 'action',
},
];
const twiceolumnsOne = [
{
title: '序号',
dataIndex: 'index',
key: 'index',
customRender: ({ text,record,index }) => index + 1
},
{
title: '评委姓名',
dataIndex: 'judgesName',
key: 'judgesName',
},
{
title: '评委工号',
dataIndex: 'judgesWorkNum',
key: 'judgesWorkNum',
},
{
title: '评分',
dataIndex: 'score',
key: 'score',
},
];
const twiceolumnsTwo = [
{
title: '序号',
dataIndex: 'index',
key: 'index',
customRender: ({ text,record,index }) => index + 1
},
{
title: '评委姓名',
dataIndex: 'judgesName',
key: 'judgesName',
},
{
title: '评委工号',
dataIndex: 'judgesWorkNum',
key: 'judgesWorkNum',
},
{
title: '评分',
dataIndex: 'score',
key: 'score',
},
]
const selectedRowKeysList = ref(null)
const rowSelection = {
onChange: async(selectedRowKeys, selectedRows) => {
@@ -514,9 +588,48 @@ const delVisible = ref(false)
const activeKey = ref('1');
const showViewInstructor =ref(false)
const show= ()=>{
const techerDetail = ref(null)
const processData = ref()
const show= async (record)=>{
showViewInstructor.value=true
await getDataById({teacherId:record.teacherId}).then(res=>{
console.log(res,'res')
if(res.code == 200){
console.log(res.data,'data')
techerDetail.value = res.data
}
})
await getCertificationProcess({teacherId:record.teacherId}).then(res=>{
console.log(res,'getCertificationProcess')
processData = res.data
})
}
const returnPage = (record) => {
console.log(record,'record')
dialog({
content: "确定退回初稿吗?",
ok:()=>{
backDraft({
teacherId:record.id,
version:0
}).then(res=>{
console.log(res,'res')
})
}
});
}
const returnPageTwo = (record) => {
dialog({
content: "确定退回初稿吗?",
ok:()=>{
backDraft({
teacherId:record.id,
version:1
}).then(res=>{
console.log(res,'res')
})
}
});
}
const InitiateReviewShow = ref(false)
//二维码显示
@@ -604,7 +717,7 @@ const options1 = ref([{
<div style="display: flex; align-items: center; margin-top: 15px;margin-bottom: 15px;">
<div class="btns" style="margin-left: 15px;">
<proj-check-ship>
<proj-check-ship @finash="translate">
<div class="btn btn3">
<div class="search"></div>
<div class="btnText" @click="Tecvisible=true">添加讲师</div>
@@ -618,7 +731,7 @@ const options1 = ref([{
<div class="btnText" @click="AddImpStuvisible=true">导入讲师</div>
</div>
</div>
<a-button type="primary" style="color: #fff ;background-color: #4ea6ff; width: 100px; height: 40px; border-radius: 8px;margin-left: 15px; padding-left: 10px;">导出讲师</a-button>
<a-button type="primary" @click="exportExcel" style="color: #fff ;background-color: #4ea6ff; width: 100px; height: 40px; border-radius: 8px;margin-left: 15px; padding-left: 10px;">导出讲师</a-button>
<a-button type="primary" @click="batchhandleOper()" style="width: 100px; height: 40px; border-radius: 8px;margin-left: 12px; padding-left: 10px;" ghost>批量删除</a-button>
</div>
<!-- 表格 -->
@@ -666,11 +779,11 @@ const options1 = ref([{
<template v-else-if="column.key === 'action'">
<span style="text-align: center;">
<a style="margin-right: 7px;" @click="show()">
<a style="margin-right: 7px;" @click="show(record)">
查看
</a>
<a style="margin-right: 7px;" @click="show()">
退回初
<a v-if="record.draftStatus == 0" style="margin-right: 7px;" @click="returnPage(record)">
退回初稿
</a>
<a style="color: #de2139" @click="handleOper(record, 'del')">删除</a>
</span>
@@ -731,6 +844,9 @@ const options1 = ref([{
<a style="margin-right: 7px;">
查看
</a>
<a v-if="record.draftStatus == 0" style="margin-right: 7px;" @click="returnPageTwo(record)">
退回终稿
</a>
<a style="color: #de2139">删除</a>
</span>
</template>
@@ -742,7 +858,7 @@ const options1 = ref([{
</div>
<LeadInstructor :imprtlecturer='imprtlecturer' @CloseImprt="showImprtlecturer"></LeadInstructor>
<!-- <LeadInstructor :imprtlecturer='imprtlecturer' @CloseImprt="showImprtlecturer"></LeadInstructor>
<AddInstructor :AddSwitch="AddSwitch" @myClick="handleChildEmit"></AddInstructor>
<proj-check-ship>
<a-button class="cus-btn" style="background: #4ea6ff; color: #fff">
@@ -753,9 +869,9 @@ const options1 = ref([{
/></template>
添加学员
</a-button>
</proj-check-ship>
<!-- 导入学员抽屉 -->
<imp-stu v-model:AddImpStuvisible="AddImpStuvisible" />
</proj-check-ship> -->
<!-- 导入讲师抽屉 -->
<imp-stu @AddImpStuvisibleClose="translateTeacher" v-model:AddImpStuvisible="AddImpStuvisible" :courseId="route.query.id"/>
</a-tab-pane>
<a-tab-pane key="2" tab="发起评审" force-render>
@@ -988,10 +1104,11 @@ const options1 = ref([{
<div class="drawerMain">
<div class="header">
<div class="headerTitle">查看讲师</div>
<img v-if="techerDetail?.avatar" style="width: 29px; height: 29px; cursor: pointer" :src="techerDetail?.avatar"/>
<img
v-else
style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png"
@click="closeDrawer"
/>
</div>
<div >
@@ -1000,9 +1117,9 @@ const options1 = ref([{
<img src="../../assets/2.png" alt="">
</div>
<div style="margin-left: 18px;">
<div style="font-size: 18px;font-weight: 500;color: #333333;line-height: 25px;font-style: normal;">张三 <span style="margin-left: 8px;"> 01011098</span></div>
<div style="font-size: 14px;color: #979797;margin-top: 12px;">后台(业务支援体系)/BOEU/企划中心/数据资产部数据资产部</div>
<div style="font-size: 14px;color: #979797;">产品企划岗 Band 1</div>
<div style="font-size: 18px;font-weight: 500;color: #333333;line-height: 25px;font-style: normal;">{{techerDetail?.teacherName}} {{techerDetail?.workNo}}<span style="margin-left: 8px;"> 01011098</span></div>
<div style="font-size: 14px;color: #979797;margin-top: 12px;">{{techerDetail?.orgName}}</div>
<div style="font-size: 14px;color: #979797;">{{techerDetail?.orgPath}} {{techerDetail?.bandCode}}</div>
</div>
@@ -1010,14 +1127,14 @@ const options1 = ref([{
<div style="margin-top: 24px">
<div style="display:flex;">
<div style="padding-left:16px; width: 136px;height: 56px;background: #FFFFFF;border: 1px solid #F0F6FC;line-height: 56px;">认证课程名称</div>
<div style="width: 559px;height: 56px;line-height: 56px;border: 1px solid #F0F6FC;padding-left:16px;">关于提升学习能力</div>
<div style="width: 559px;height: 56px;line-height: 56px;border: 1px solid #F0F6FC;padding-left:16px;">{{techerDetail?.courseName}}</div>
<div style="width: 136px;height: 56px;line-height: 56px;background: #FFFFFF;border: 1px solid #F0F6FC;padding-left:16px;">课程内容分类</div>
<div style="width: 342px;height: 56px;line-height: 56px;border: 1px solid #F0F6FC;padding-left:16px;">影响力</div>
<div style="width: 342px;height: 56px;line-height: 56px;border: 1px solid #F0F6FC;padding-left:16px;">{{techerDetail?.courseContent}}</div>
</div>
<div style="display:flex;">
<div style="padding-left:16px; width: 136px;height: 56px;background: #FFFFFF;border: 1px solid #F0F6FC;line-height: 56px;">课程简介</div>
<div style="width: 559px;height: 56px;line-height: 56px;border: 1px solid #F0F6FC;padding-left:16px;">这是我的认证课程关于提升学习能力的课程</div>
<div style="width: 559px;height: 56px;line-height: 56px;border: 1px solid #F0F6FC;padding-left:16px;">{{techerDetail?.courseIntroduction}}</div>
</div>
@@ -1029,7 +1146,7 @@ const options1 = ref([{
<a href="">下载</a>
</div>
<div style="width: 136px;height: 56px;line-height: 56px;background: #FFFFFF;border: 1px solid #F0F6FC;padding-left:16px;">上传时间</div>
<div style="width: 342px;height: 56px;line-height: 56px;border: 1px solid #F0F6FC;padding-left:16px;">2024.04.10 20:58</div>
<div style="width: 342px;height: 56px;line-height: 56px;border: 1px solid #F0F6FC;padding-left:16px;">{{techerDetail?.uploadTime}}</div>
</div>
@@ -1038,12 +1155,14 @@ const options1 = ref([{
认证流程
</div>
<div style="margin-top: 13px; height: 125px;width: 100%;display: flex;align-items: center;justify-content: center;" >
<div class="step_box" v-for="item in 5">
<div v-if="item != 1" style="height: 1px;width: 81px;background-color: #DEDEDE;"></div>
<div style="display: flex;width: 70px;height: 78px;flex-direction: column;align-items: center">
<img src="../../assets/8.png" alt="">
<div style="color: #409EFF;font-size: 14px;">初稿已上传</div>
</div>
<div style="height: 1px;width: 81px;background-color: #DEDEDE;"></div>
<div style="display: flex;width: 70px;height: 78px;flex-direction: column;align-items: center">
</div>
<!-- <div style="display: flex;width: 70px;height: 78px;flex-direction: column;align-items: center">
<img src="../../assets/8.png" alt="">
<div style="color: #409EFF;font-size: 14px;">初稿已上传</div>
</div>
@@ -1077,78 +1196,20 @@ const options1 = ref([{
<div style="display: flex;width: 70px;height: 78px;flex-direction: column;align-items: center">
<img src="../../assets/8.png" alt="">
<div style="color: #409EFF;font-size: 14px;">初稿已上传</div>
</div>
</div> -->
</div>
<div style="font-size: 14px;margin-bottom: 15px;">评委打分信息表</div>
<div>
<a-table :columns="twiceolumns" :data-source="data" :scroll="{ x: 1000 }" :pagination="false">
<template #headerCell="{ column }">
<template v-if="column.key === 'name'">
<span>
姓名
</span>
</template>
</template>
<a-table :columns="twiceolumnsOne" :data-source="techerDetail?.firstList" :scroll="{ x: 1000 }" :pagination="false">
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'name'">
<a>
{{ record.name }}
</a>
</template>
<template v-else-if="column.key === 'tags'">
<span>
<a-tag
v-for="tag in record.tags"
:key="tag"
:color="tag === 'loser' ? 'volcano' : tag.length > 5 ? 'geekblue' : 'green'"
>
{{ tag.toUpperCase() }}
</a-tag>
</span>
</template>
<template v-else-if="column.key === 'action'">
</template>
</template>
</a-table>
</div>
<div style="font-size: 14px;margin-bottom: 19px;margin-top: 40px;font-size: 18px;font-weight: 500;">二次认证</div>
<div style="font-size: 14px;margin-bottom: 15px;">评委打分信息表</div>
<div>
<a-table :columns="twiceolumns" :data-source="data" :scroll="{ x: 1000 }" :pagination="false">
<template #headerCell="{ column }">
<template v-if="column.key === 'name'">
<span>
姓名
</span>
</template>
</template>
<a-table :columns="twiceolumnsTwo" :data-source="techerDetail?.secondList" :scroll="{ x: 1000 }" :pagination="false">
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'name'">
<a>
{{ record.name }}
</a>
</template>
<template v-else-if="column.key === 'tags'">
<span>
<a-tag
v-for="tag in record.tags"
:key="tag"
:color="tag === 'loser' ? 'volcano' : tag.length > 5 ? 'geekblue' : 'green'"
>
{{ tag.toUpperCase() }}
</a-tag>
</span>
</template>
<template v-else-if="column.key === 'action'">
</template>
</template>
</a-table>
</div>
<div>
@@ -1316,4 +1377,9 @@ const options1 = ref([{
// :deep(.ant-form-item-label){
// text-align: left;
// }
.step_box{
display: flex;
justify-content: center;
align-items: center;
}
</style>