mirror of
https://codeup.aliyun.com/67762337eccfc218f6110e0e/vue/fe-manage.git
synced 2025-12-09 19:06:45 +08:00
1739 lines
56 KiB
Vue
1739 lines
56 KiB
Vue
<script setup >
|
||
import { ref,reactive,onMounted,computed,watch } from 'vue'
|
||
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,backDraft,getDataById,getCertificationProcess} from '@/api/examineApi.js'
|
||
import dialog from "@/utils/dialog";
|
||
// import QrCode from './QrCode.vue'
|
||
import ViewReview from './ViewReview.vue'
|
||
import EvaluationForm from "./EvaluationForm.vue"
|
||
import InitiateReview from './InitiateReview.vue'
|
||
import ProjCheckShip from "./teaAdd";
|
||
import ImpStu from './AddLevelImportTec.vue'
|
||
import qrCode from "@/utils/qrCode2";
|
||
import { useStore } from "vuex";
|
||
const route = useRoute()
|
||
const router = useRouter()
|
||
const store = useStore();
|
||
const userInfo = computed(() => store.state.userInfo)
|
||
const uploadAdmin = (admin)=>{
|
||
const roleCode = userInfo.value.roleList.map((item)=>item.roleCode)
|
||
if (admin){
|
||
return roleCode.some(t => t == admin)
|
||
}
|
||
}
|
||
console.log(route.query.id, 'idssss');
|
||
const formState = reactive({
|
||
reviewname: '',
|
||
time: '',
|
||
|
||
});
|
||
//取消评审
|
||
const CancelReview = ()=>{
|
||
rwname.value = null
|
||
formState.reviewname = ''
|
||
formState.time = ''
|
||
InitiateReviewShow.value = false;
|
||
teacherNames.value = []
|
||
teacherid.value = []
|
||
reviewIds.value = null
|
||
}
|
||
const namelist = ref([])
|
||
//表格点击时间
|
||
const rowClick = (record) => {
|
||
|
||
return {
|
||
onClick: () => {
|
||
namelist.value.push(record.teacherName)
|
||
console.log(record);
|
||
console.log(namelist.value);
|
||
|
||
},
|
||
}
|
||
}
|
||
const InitReview = () => {
|
||
teacherCurrent1.value = 1
|
||
InitiateReviewShow.value = true;
|
||
formState.reviewname = ''
|
||
formState.time = ''
|
||
rwname.value = null
|
||
teacherNames.value = []
|
||
teacherid.value = []
|
||
addTeacherList()
|
||
}
|
||
const teacherid = ref(null)
|
||
//发起评审
|
||
const startReviewSave = async () => {
|
||
if (formState.reviewname.trim()==="" ) {
|
||
formState.reviewname = ''
|
||
return message.info('请填写评审名称');
|
||
|
||
}
|
||
if (formState.time==="") {
|
||
return message.info('请填写评审时间');
|
||
|
||
}
|
||
if (!rwname.value) {
|
||
reviewSave({
|
||
"examineId": route.query.id,
|
||
"reviewName": formState.reviewname,
|
||
"reviewTime": formState.time,
|
||
"teacherIds": teacherid.value
|
||
}).then(res => {
|
||
console.log(res);
|
||
message.info('发起成功');
|
||
rwname.value = null
|
||
reviewIds.value = null
|
||
searchReview()
|
||
InitiateReviewShow.value = false
|
||
return
|
||
}).catch(err => {
|
||
if (err) {
|
||
console.log(err,'错误信息');
|
||
InitiateReviewShow.value = false
|
||
return message.info('添加失败');
|
||
}
|
||
})
|
||
|
||
}
|
||
|
||
if (rwname.value) {
|
||
if (formState.reviewname.trim()==="") {
|
||
return message.info('请填写评审名称');
|
||
}
|
||
if (formState.time===null) {
|
||
return message.info('请填写评审时间');
|
||
}
|
||
editreview({
|
||
"reviewId": editId.value,
|
||
"reviewName": formState.reviewname,
|
||
"reviewTime": formState.time,
|
||
"teacherIds": teacherid.value,
|
||
}).then(res => {
|
||
if (res) {
|
||
searchReview()
|
||
message.info('编辑成功');
|
||
InitiateReviewShow.value = false
|
||
reviewIds.value = null
|
||
rwname.value = null
|
||
}
|
||
|
||
|
||
})
|
||
.catch(err=>{
|
||
console.log(err);
|
||
if (err) {
|
||
InitiateReviewShow.value = false
|
||
|
||
message.info('编辑失败');
|
||
|
||
}
|
||
})
|
||
|
||
}
|
||
}
|
||
//编辑评审
|
||
const editName = ref(null)
|
||
const editId = ref(null)
|
||
const editTime = ref(null)
|
||
const rwname = ref(null)
|
||
const rwtime = ref(null)
|
||
const reviewIds = ref(null)
|
||
const editReviewSave = async (name, time, id) => {
|
||
teacherCurrent1.value = 1
|
||
reviewIds.value = id
|
||
teacherNames.value = []
|
||
teacherid.value = []
|
||
InitiateReviewShow.value = true
|
||
formState.reviewname = name
|
||
formState.time = time
|
||
rwname.value = name
|
||
editName.value = name
|
||
editId.value = id
|
||
editTime.value = time
|
||
addTeacherList(id)
|
||
}
|
||
const ViewReviewcolumns = reactive([
|
||
{
|
||
title: '序号',
|
||
key: 'name',
|
||
dataIndex: 'name',
|
||
fixed: 'left',
|
||
},
|
||
{
|
||
title: '姓名',
|
||
key: '姓名',
|
||
dataIndex: '姓名',
|
||
fixed: 'left',
|
||
},
|
||
{
|
||
title: '工号',
|
||
key: '工号',
|
||
dataIndex: '工号',
|
||
fixed: 'left',
|
||
},
|
||
{
|
||
title: '认证结果',
|
||
key: '认证结果',
|
||
dataIndex: '认证结果',
|
||
fixed: 'left',
|
||
},
|
||
|
||
{
|
||
title: '平均分',
|
||
key: '平均分',
|
||
dataIndex: '平均分',
|
||
fixed: 'right',
|
||
},
|
||
]);
|
||
const ViewReviewdata = ref([])
|
||
const reviewcolumn = [
|
||
{
|
||
name: 'Name',
|
||
dataIndex: 'name',
|
||
key: 'name',
|
||
width: 100,
|
||
},
|
||
{
|
||
title: '评审名称',
|
||
dataIndex: 'reviewName',
|
||
key: 'reviewName',
|
||
width: 190,
|
||
ellipsis: true,
|
||
},
|
||
{
|
||
title: '认证讲师',
|
||
dataIndex: 'teacherName',
|
||
key: 'teacherName',
|
||
ellipsis: true,
|
||
width: 500,
|
||
},
|
||
{
|
||
title: '评审时间',
|
||
key: 'reviewTime',
|
||
dataIndex: 'reviewTime',
|
||
width: 200,
|
||
ellipsis: true,
|
||
},
|
||
{
|
||
title: '认证状态',
|
||
key: 'reviewResult',
|
||
dataIndex: 'reviewResult',
|
||
width: 100,
|
||
},
|
||
{
|
||
title: '操作',
|
||
key: 'action',
|
||
width: 200,
|
||
fixed: 'right',
|
||
},
|
||
];
|
||
const columnsTeacher = [
|
||
{
|
||
title: '姓名',
|
||
key: 'teacherName',
|
||
dataIndex: 'teacherName',
|
||
width: 100,
|
||
},
|
||
{
|
||
title: '工号',
|
||
key: 'teacherNo',
|
||
dataIndex: 'teacherNo',
|
||
width: 100,
|
||
},
|
||
{
|
||
title: '课程名称',
|
||
key: 'courseName',
|
||
dataIndex: 'courseName',
|
||
ellipsis: true,
|
||
width: 220,
|
||
align: 'left',
|
||
},
|
||
{
|
||
title: '报名时间',
|
||
key: 'reviewTime',
|
||
dataIndex: 'reviewTime',
|
||
width:180,
|
||
},
|
||
]
|
||
|
||
//下载课件
|
||
const downLoadCoures = (id) => {
|
||
console.log(id,'id')
|
||
if(id){
|
||
window.open(`/activityApi/teacher/download?coursewareId=${id}`)
|
||
}
|
||
}
|
||
//老师重置
|
||
const resetTeacher = () => {
|
||
teacherValue.value = ''
|
||
|
||
addTeacherList(reviewIds.value)
|
||
}
|
||
//老师搜索
|
||
const teacherValue = ref(null)
|
||
const SearchTeacher = async () => {
|
||
const res = await addTeacher({
|
||
"examineId": route.query.id,
|
||
"pageSize": 15,
|
||
"pageNo": teacherCurrent1.value,
|
||
"teacherSearch": teacherValue.value,
|
||
isEdit:reviewIds.value?0:1,
|
||
reviewId:reviewIds.value
|
||
})
|
||
tabledata.value = res.data.records
|
||
|
||
}
|
||
function timeChangeEnd(timeStr) {
|
||
console.log(timeStr, 'time')
|
||
formState.time = timeStr
|
||
// formData.value.endTime = timeStr;
|
||
}
|
||
const pageSizeSele = ref(15)
|
||
//添加讲师
|
||
const addTeacherList = async (id) => {
|
||
|
||
const res = await addTeacher({
|
||
"examineId": route.query.id,
|
||
"pageSize": pageSizeSele.value,
|
||
"pageNo": teacherCurrent1.value,
|
||
"teacherSearch": "",
|
||
reviewId: id,
|
||
isEdit: id?0:1,
|
||
})
|
||
console.log(res.data, 'res');
|
||
teacherTotal.value = res.data.total
|
||
tabledata.value = res.data.records
|
||
}
|
||
const teacherCurrent1 = ref(1)
|
||
//教师列表总数
|
||
const teacherTotal = ref(null)
|
||
//教师列表数据
|
||
const tabledata = ref(null)
|
||
//教师分页
|
||
const onChange3 = (pageNo) => {
|
||
teacherCurrent1.value = pageNo
|
||
addTeacherList()
|
||
}
|
||
//结束评审
|
||
const qrshow = ref(null)
|
||
|
||
const finishreview = async (item) => {
|
||
const isTrue = item.map(item=>item['平均分']).some(item=>item==null)
|
||
dialog({
|
||
content: isTrue?"确认结束评审吗?结束评审后认证结果将同步讲师库":"是否结束评审?",
|
||
ok: () => {
|
||
|
||
closereview()
|
||
}
|
||
});
|
||
|
||
}
|
||
const closereview = async () => {
|
||
const res = await endreview({
|
||
"reviewId": vwtext.value
|
||
})
|
||
console.log(res, 99999);
|
||
qrshow.value = res.data.show
|
||
ViewReviewShow.value = false
|
||
|
||
getReviewList()
|
||
}
|
||
|
||
const reviewdata = ref(null);
|
||
const revieTotal = ref(null)
|
||
const ReviewPageNo = ref(1)
|
||
//发起评审列表
|
||
const getReviewList = async () => {
|
||
const res = await getReview({
|
||
examineId:route.query.id,
|
||
pageNo: ReviewPageNo.value,
|
||
pageSize: 10,
|
||
reviewName: ""
|
||
})
|
||
console.log(res, 'pings');
|
||
revieTotal.value = res.data.total
|
||
reviewdata.value = res.data.records
|
||
}
|
||
|
||
|
||
//查看评审
|
||
const ViewReList = ref()
|
||
const arrayLists = ref([])
|
||
const remould = () => {
|
||
let keys = Object.keys(ViewReList.value);
|
||
arrayLists.value = keys.filter(key => Array.isArray(ViewReList.value[key]));
|
||
ViewReviewcolumns.splice(4)
|
||
ViewReviewcolumns.push({
|
||
title: '平均分',
|
||
key: '平均分',
|
||
dataIndex: '平均分',
|
||
fixed: 'right',
|
||
})
|
||
if(arrayLists.value.length!=0){
|
||
arrayLists.value.forEach(arrayKey => {
|
||
if (!ViewReviewcolumns.some(column => column.key === arrayKey)) {
|
||
ViewReviewcolumns.push({
|
||
title: arrayKey,
|
||
key: arrayKey,
|
||
dataIndex: arrayKey,
|
||
fixed: arrayKey=='认证结果'?'left':arrayKey=='平均分'?'right':'',
|
||
});
|
||
const averageScoreColumn = ViewReviewcolumns.find(column => column.title == "平均分");
|
||
if (averageScoreColumn) {
|
||
const index = ViewReviewcolumns.indexOf(averageScoreColumn);
|
||
ViewReviewcolumns.splice(index, 1);
|
||
ViewReviewcolumns.push(averageScoreColumn);
|
||
}
|
||
const averageScore = ViewReviewcolumns.find(column => column.title === "认证结果");
|
||
if (averageScore) {
|
||
const index = ViewReviewcolumns.indexOf(averageScore);
|
||
ViewReviewcolumns.splice(index, 1);
|
||
ViewReviewcolumns.splice(3, 0, averageScore);
|
||
}
|
||
}
|
||
});
|
||
|
||
for (let i = 0; i < ViewReList.value[arrayLists.value[0]].length; i++) {
|
||
const obj = {};
|
||
for (const key of arrayLists.value) {
|
||
if (ViewReList.value[key][i]===-1) {
|
||
obj[key] = null
|
||
continue;
|
||
}
|
||
obj[key] = ViewReList.value[key][i];
|
||
}
|
||
ViewReviewdata.value.push(obj);
|
||
}
|
||
console.log(ViewReviewdata.value,'ViewReviewdata.value')
|
||
}
|
||
}
|
||
//评审按钮显示
|
||
const ButtunReviewShow = ref(false)
|
||
const getreviewdetail = async (object,examineResult) => {
|
||
ButtunReviewShow.value = examineResult
|
||
|
||
ViewReviewShow.value = true
|
||
const res = await reviewdetail(object)
|
||
console.log(res, 'cscs成熟市场');
|
||
ViewReList.value = res.data
|
||
remould()
|
||
}
|
||
//删除评审
|
||
function handleOperReview(record) {
|
||
dialog({
|
||
content: "确认删除吗?数据删除后不可恢复",
|
||
ok: () => {
|
||
|
||
reviewdelete(record)
|
||
}
|
||
});
|
||
}
|
||
const reviewdelete = async (id) => {
|
||
await delreview({
|
||
reviewId: id
|
||
})
|
||
if (reviewdata.value.length == 1) {
|
||
ReviewPageNo.value = ReviewPageNo.value - 1
|
||
|
||
}
|
||
message.success('删除成功')
|
||
getReviewList()
|
||
}
|
||
|
||
//发起评审分页
|
||
const onChangeReview = (pageNo, pageSize) => {
|
||
ReviewPageNo.value = pageNo
|
||
console.log(pageNo, 1111);
|
||
getReviewList()
|
||
};
|
||
const reviewValue = ref('')
|
||
//重置评审
|
||
const resetReview = () => {
|
||
ReviewPageNo.value = 1
|
||
reviewValue.value=''
|
||
getReviewList()
|
||
}
|
||
//搜索评审
|
||
const searchReview = async () => {
|
||
// if ( reviewValue.value.trim().length ==0) {
|
||
// return message.info('搜索内容不能为空');
|
||
|
||
// }
|
||
// console.log(reviewValue.value.trim().length);
|
||
ReviewPageNo.value = 1
|
||
const res = await getReview({
|
||
examineId:route.query.id,
|
||
pageNo: ReviewPageNo.value,
|
||
pageSize: 10,
|
||
reviewName: reviewValue.value
|
||
|
||
})
|
||
reviewdata.value = res.data.records
|
||
|
||
}
|
||
//删除教师
|
||
const delteacherIds = async (id) => {
|
||
await deleTeTeacher(
|
||
{
|
||
"teacherIds": [
|
||
id
|
||
]
|
||
}
|
||
).then(res=>{
|
||
if(res.code == 200){
|
||
message.success("删除成功")
|
||
if (data.value.length == 1) {
|
||
current1.value = current1.value - 1
|
||
|
||
}
|
||
getTeacher()
|
||
getTeacher2()
|
||
}
|
||
})
|
||
}
|
||
const delteacherIdList = async () => {
|
||
await deleTeTeacher(
|
||
{ "teacherIds": selectedRowKeysList.value }
|
||
)
|
||
message.info('删除成功');
|
||
if (data.value.length == 1) {
|
||
current1.value = current1.value - 1
|
||
}
|
||
console.log(data.value.length,'sha c sss');
|
||
current1.value = 1
|
||
getTeacher()
|
||
getTeacher2()
|
||
}
|
||
//导出讲师
|
||
const exportExcel = () => {
|
||
if(data.value.length!=0||data2.value.length!=0){
|
||
window.open(`/activityApi/teacher/export?examineId=${route.query.id}`)
|
||
}else{
|
||
message.info('暂无要导出的讲师信息');
|
||
}
|
||
}
|
||
const batchhandleOper =()=>{
|
||
|
||
if (selectedRowKeysList.value.length == 0) {
|
||
message.info('请选择要删除的教师')
|
||
return
|
||
}
|
||
dialog({
|
||
content: "确认删除吗?数据删除后不可恢复",
|
||
ok: () => {
|
||
|
||
delteacherIdList()
|
||
}
|
||
});
|
||
}
|
||
|
||
function handleOper(record, type, status = "") {
|
||
dialog({
|
||
content: "确认删除吗?数据删除后不可恢复",
|
||
ok: () => {
|
||
delteacherIds(record.id)
|
||
}
|
||
});
|
||
}
|
||
//搜索教师
|
||
const SearchTeachers =async()=>{
|
||
current1.value = 1
|
||
const res = await getTeacherList({
|
||
pageNo: 1,
|
||
pageSize: 15,
|
||
examineId: route.query.id,
|
||
second: value2.value,
|
||
secondResult:'1',
|
||
reviewResult:value.value,
|
||
keyWord:value3.value
|
||
})
|
||
total.value = res.data.total
|
||
data.value = res.data.records
|
||
if(value2.value!=2){
|
||
getTeacher2()
|
||
}else{
|
||
data2.value = []
|
||
}
|
||
}
|
||
//重置教师
|
||
const handleRest=()=>{
|
||
current1.value = 1
|
||
value2.value = null
|
||
value.value = null
|
||
value3.value = null
|
||
getTeacher()
|
||
getTeacher2()
|
||
}
|
||
//刷新列表
|
||
const translateTeacher = (flag) => {
|
||
handleRest()
|
||
}
|
||
const translate = (flag) => {
|
||
if(flag){
|
||
SearchTeachers()
|
||
}
|
||
}
|
||
//2次认证
|
||
const total2 = ref(null)
|
||
const data2 = ref([])
|
||
//教师列表2
|
||
const getTeacher2 =async()=>{
|
||
const res = await getTeacherList({
|
||
pageNo: 1,
|
||
pageSize: 8,
|
||
examineId: route.query.id.toString(),
|
||
secondResult: '0',
|
||
reviewResult:value.value,
|
||
keyWord:value3.value
|
||
})
|
||
total2.value = res.data.total
|
||
data2.value = res.data.records
|
||
}
|
||
//讲师列表
|
||
const total = ref(null)
|
||
const data = ref([])
|
||
const current1 = ref(1);
|
||
const pageSize1 = ref(15)
|
||
const onChangeTeacher = (pageNo, pageSize) => {
|
||
current1.value = pageNo
|
||
getTeacher()
|
||
};
|
||
//教师列表
|
||
const getTeacher =async()=>{
|
||
const res = await getTeacherList({
|
||
pageNo: current1.value,
|
||
pageSize: pageSize1.value,
|
||
examineId: route.query.id.toString(),
|
||
secondResult: "1"
|
||
})
|
||
console.log(res,'resaaaa')
|
||
total.value = res.data.total
|
||
data.value = res.data.records
|
||
}
|
||
|
||
// 提交
|
||
const value = ref(null);
|
||
const value2 = ref(null);
|
||
const value3 = ref(null);
|
||
|
||
const onFinish = values => {
|
||
}
|
||
|
||
|
||
onMounted(() => {
|
||
if (route.query.lecture == 'true') {
|
||
activeKey.value = '2'
|
||
}
|
||
getTeacher()
|
||
getReviewList()
|
||
getTeacher2()
|
||
})
|
||
const activeName = ref('first')
|
||
const ViewReviewShow = ref(null)
|
||
watch(ViewReviewShow,(val)=>{
|
||
console.log(val,'val')
|
||
if(!val){
|
||
ViewReviewdata.value = []
|
||
|
||
}
|
||
})
|
||
const columns = [
|
||
{
|
||
title: '姓名',
|
||
dataIndex: 'teacherName',
|
||
key: 'teacherName',
|
||
},
|
||
{
|
||
title: '工号',
|
||
dataIndex: 'teacherNo',
|
||
key: 'teacherNo',
|
||
},
|
||
{
|
||
title: '课程名称',
|
||
dataIndex: 'courseName',
|
||
key: 'courseName',
|
||
align: 'left',
|
||
ellipsis: true,
|
||
width: 400,
|
||
},
|
||
{
|
||
title: '初稿状态',
|
||
dataIndex: 'draftStatus',
|
||
key: 'draftStatus',
|
||
},
|
||
|
||
{
|
||
title: '线上学习',
|
||
dataIndex: 'onlineLearning',
|
||
key: 'onlineLearning',
|
||
},
|
||
{
|
||
title: '线下辅导',
|
||
dataIndex: 'offlineTutoring',
|
||
key: 'offlineTutoring',
|
||
},
|
||
{
|
||
title: '终稿状态',
|
||
dataIndex: 'endStatus',
|
||
key: 'endStatus',
|
||
},
|
||
{
|
||
title: '认证结果',
|
||
key: 'reviewResult',
|
||
dataIndex: 'reviewResult',
|
||
},
|
||
{
|
||
title: '二次认证',
|
||
key: 'second',
|
||
dataIndex: 'second',
|
||
},
|
||
{
|
||
title: '操作',
|
||
key: 'action',
|
||
fixed: 'right',
|
||
width: 200,
|
||
},
|
||
];
|
||
const twiceolumns = [
|
||
{
|
||
title: '姓名',
|
||
dataIndex: 'teacherName',
|
||
key: 'teacherName',
|
||
},
|
||
{
|
||
title: '工号',
|
||
dataIndex: 'teacherNo',
|
||
key: 'teacherNo',
|
||
},
|
||
{
|
||
title: '课程名称',
|
||
dataIndex: 'courseName',
|
||
key: 'courseName',
|
||
ellipsis: true,
|
||
width: 400,
|
||
align: 'left',
|
||
},
|
||
{
|
||
title: '初稿状态',
|
||
dataIndex: 'draftStatus',
|
||
key: 'draftStatus',
|
||
},
|
||
|
||
{
|
||
title: '线上学习状态',
|
||
dataIndex: 'onlineLearning',
|
||
key: 'onlineLearning',
|
||
},
|
||
{
|
||
title: '二次线下辅导',
|
||
dataIndex: 'offlineTutoring',
|
||
key: 'offlineTutoring',
|
||
},
|
||
{
|
||
title: '二次终稿状态',
|
||
dataIndex: 'endStatus',
|
||
key: 'endStatus',
|
||
},
|
||
{
|
||
title: '二次认证结果',
|
||
key: 'reviewResult',
|
||
dataIndex: 'reviewResult',
|
||
},
|
||
{
|
||
title: '操作',
|
||
key: 'action',
|
||
fixed: 'right',
|
||
width: 200,
|
||
},
|
||
];
|
||
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([])
|
||
const rowSelection = {
|
||
onChange: async (selectedRowKeys, selectedRows) => {
|
||
console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows);
|
||
selectedRowKeysList.value = selectedRowKeys
|
||
console.log(selectedRowKeysList.value.length);
|
||
},
|
||
|
||
};
|
||
const teacherNames =ref([])
|
||
const teacherTables = ref()
|
||
const closeTeacher = (item,i) => {
|
||
teacherNames.value.splice(i,1)
|
||
teacherid.value.splice(i,1)
|
||
}
|
||
const teacherRowSelection = computed(() =>({
|
||
preserveSelectedRowKeys: true,
|
||
selectedRowKeys: teacherid.value,
|
||
onChange: async (selectedRowKeys, selectedRows) => {
|
||
console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows);
|
||
teacherid.value = selectedRowKeys
|
||
teacherNames.value = selectedRows
|
||
},
|
||
}));
|
||
|
||
const AddSwitch = ref(null)
|
||
const handleChildEmit = data => {
|
||
// console.log('父组件对子组件触发自定义事件时的后续处理', data);
|
||
|
||
AddSwitch.value = data
|
||
|
||
}
|
||
const showImprtlecturer = data => imprtlecturer.value = data
|
||
const imprtlecturer = ref(null)
|
||
const delVisible = ref(false)
|
||
|
||
|
||
|
||
const activeKey = ref('1');
|
||
const showViewInstructor =ref(false)
|
||
const techerDetail = ref(null)
|
||
const processData = ref()
|
||
const attestation = ref([])
|
||
const scoreTwo = ref()
|
||
const scoreOne = ref()
|
||
const show= async (record)=>{
|
||
await getDataById({teacherId:record.teacherId}).then(res=>{
|
||
if(res.code == 200){
|
||
showViewInstructor.value=true
|
||
techerDetail.value = res.data
|
||
if(techerDetail.value.firstList){
|
||
const totalScore = techerDetail.value.firstList.reduce((acc, item) => acc + item.score, 0);
|
||
// 计算平均分
|
||
const averageScore = totalScore / techerDetail.value.firstList.length;
|
||
scoreOne.value = averageScore.toFixed(2)
|
||
}
|
||
if(techerDetail.value.secondList){
|
||
const totalScore = techerDetail.value.secondList.reduce((acc, item) => acc + item.score, 0);
|
||
// 计算平均分
|
||
const averageScore = totalScore / techerDetail.value.secondList.length;
|
||
scoreTwo.value = averageScore.toFixed(2)
|
||
}
|
||
}else{
|
||
message.error('暂无数据')
|
||
}
|
||
})
|
||
await getCertificationProcess({teacherId:record.teacherId}).then(res=>{
|
||
processData.value = res.data
|
||
//认证流程
|
||
attestation.value =[
|
||
//0: 已上传 1: 未上传 2:已退回
|
||
{name:{0:'初稿已上传',1:'初稿未上传',2:'初稿已退回'},type:'draftStatus',status:processData?.value.draftStatus,images:{0:'su1.png',1:'s1.png',2:'e2.png'},color:['#409EFF','#979797','#FF4040','#31AF0D']},
|
||
{name:{0:'线上学习已完成',1:'线上学习未完成',2:'线上学习进行中'},type:'onlineLearning',status:processData?.value.onlineLearning,images:{0:'su2.png',1:'s2.png',2:'j1.png'},color:['#409EFF','#979797','#FFA050','#31AF0D']},
|
||
{name:{0:'线下辅导已完成',1:'线上辅导未完成',2:'线上辅导已退回'},type:'offlineTutoring',status:processData?.value.offlineTutoring,images:{0:'su3.png',1:'s3.png',2:'e2.png'},color:['#409EFF','#979797','#FF4040','#31AF0D']},
|
||
{name:{0:'终稿已上传',1:'终稿未上传',2:'终稿已退回'},type:'endStatus',status:processData?.value.endStatus,images:{0:'su4.png',1:'s4.png',2:'e3.png'},color:['#409EFF','#979797','#FF4040','#31AF0D']},
|
||
{name:{0:'认证已通过',1:'认证未通过',2:'认证',3:'认证'},type:'reviewResult',status:processData?.value.reviewResult,images:{0:'success.png',1:'e1.png',2:'s5.png',3:'s5.png',},color:['#31AF0D','#FF4040','#979797','#979797']},
|
||
]
|
||
if(processData.value.secondResult == '0'){
|
||
processData.value.draftStatus = 0
|
||
processData.value.onlineLearning = 0
|
||
processData.value.offlineTutoringOne = 0
|
||
processData.value.endStatusOne = 0
|
||
processData.value.reviewResultOne = 0
|
||
attestation.value = [
|
||
{name:{0:'初稿已上传',1:'初稿未上传',2:'初稿已退回'},status:processData?.value.draftStatus,images:{0:'su1.png',1:'s1.png',2:'e2.png'},color:['#3DA8F0','#31AF0D','#FF4040','#DEDEDE']},
|
||
{name:{0:'线上学习已完成',1:'线上学习未完成',2:'线上学习已退回'},status:processData?.value.onlineLearning,images:{0:'su2.png',1:'s2.png',2:'j1.png'},color:['#3DA8F0','#31AF0D','#FF4040','#DEDEDE']},
|
||
{name:{0:'线下辅导已完成',1:'线上辅导未完成',2:'线上辅导已退回'},status:processData?.value.offlineTutoringOne,images:{0:'su3.png',1:'s3.png',2:'e2.png'},color:['#3DA8F0','#31AF0D','#FF4040','#DEDEDE']},
|
||
{name:{0:'终稿已上传',1:'终稿未上传',2:'终稿已退回'},status:processData?.value.endStatusOne,images:{0:'su4.png',1:'s4.png',2:'e3.png'},color:['#3DA8F0','#31AF0D','#FF4040','#DEDEDE']},
|
||
{name:{0:'认证未通过',1:'认证未通过',2:'认证进行中',3:'认证已报名'},status:processData?.value.reviewResultOne,images:{0:'e1.png',2:'su5.png',1:'e1.png',3:'success.png',},color:['#FF4040','#FF4040','#FF4040','#DEDEDE']},
|
||
{name:{0:'线下辅导已完成',1:'线下辅导未完成',2:'线下辅导已退回'},status:processData?.value.offlineTutoring,images:{0:'su3.png',1:'s3.png',2:'e2.png'},color:['#409EFF','#979797','#FF4040','#31AF0D']},
|
||
{name:{0:'终稿已上传',1:'终稿未上传',2:'终稿已退回'},status:processData?.value.endStatus,images:{0:'su4.png',1:'s4.png',2:'e3.png'},color:['#409EFF','#979797','#FF4040','#31AF0D']},
|
||
{name:{0:'认证已通过',1:'认证未通过',2:'认证',3:'认证'},type:'reviewResult',status:processData?.value.reviewResult,images:{0:'success.png',1:'e1.png',2:'s5.png',3:'s5.png',},color:['#31AF0D','#FF4040','#979797','#979797']},
|
||
]
|
||
}
|
||
console.log(attestation.value,'value')
|
||
})
|
||
}
|
||
const returnPage = (record) => {
|
||
console.log(record,'record')
|
||
dialog({
|
||
content: record.endStatus==0?'确定退回终稿吗?':"确定退回初稿吗?",
|
||
ok:()=>{
|
||
backDraft({
|
||
teacherId:record.teacherId,
|
||
version:record.endStatus==0?1:0
|
||
}).then(res=>{
|
||
message.success('退回成功')
|
||
getTeacher()
|
||
})
|
||
}
|
||
});
|
||
}
|
||
const returnPageTwo = (record) => {
|
||
dialog({
|
||
content: "确定退回终稿吗?",
|
||
ok:()=>{
|
||
backDraft({
|
||
teacherId:record.teacherId,
|
||
version:1
|
||
}).then(res=>{
|
||
if(res.code == 200){
|
||
message.success('退回成功')
|
||
getTeacher2()
|
||
}
|
||
})
|
||
}
|
||
});
|
||
}
|
||
const InitiateReviewShow = ref(false)
|
||
//二维码显示
|
||
const handleMenuClick = (name, time, record) => {
|
||
console.log(`${location.protocol}//${location.host}/mobile/pages/lecturer/certification/list?reviewId=${record.id}&judgesWorkNum=${userInfo.value.userNo}`)
|
||
qrCode({
|
||
|
||
title: "二维码",
|
||
copyAble: true,
|
||
name: route.query.time + '认证-' + name+'认证',
|
||
|
||
url: `${location.protocol}//${location.host}/mobile/pages/lecturer/certification/list?reviewId=${record.id}&judgesWorkNum=${userInfo.value.userNo}`,
|
||
});
|
||
}
|
||
//添加讲师
|
||
const Tecvisible = ref(false)
|
||
//导入讲师
|
||
const AddImpStuvisible = ref(false)
|
||
const options1 = ref([{
|
||
value: 'jack',
|
||
label: 'Jack',
|
||
}, {
|
||
value: 'lucy',
|
||
label: 'Lucy',
|
||
}, {
|
||
value: 'disabled',
|
||
label: 'Disabled',
|
||
|
||
}]);
|
||
const vwtext = ref(null)
|
||
</script>
|
||
|
||
<template>
|
||
<div style="width: 100%;">
|
||
<div class="page-top">
|
||
<div style="margin-top: -16px">
|
||
<p class="title" :style="{marginTop:route.query.description?'16px':'36px'}" :title="route.query.time">认证项目名称:{{ route.query.time }}</p>
|
||
<p class="item" :title="route.query.description" style="line-height: 35px;height: 40px;" v-if="route.query.description">具体说明:{{ route.query.description }}</p>
|
||
|
||
</div>
|
||
<div @click="$router.push({ path: '/instructorcertification' })" style="cursor: pointer;">
|
||
<img src="../../assets/images/projectadd/return.png" alt="">
|
||
<el-button type="primary" text style="margin-left: 10px;">返回</el-button>
|
||
</div>
|
||
|
||
</div>
|
||
<!-- 划分条线 -->
|
||
<div class="boundary"></div>
|
||
|
||
<div style="width: 100%;">
|
||
<a-tabs v-model:activeKey="activeKey"
|
||
style="margin-right: 28px; margin-left: 6px ; display: flex; flex-direction: column;">
|
||
<a-tab-pane key="1" tab="讲师管理">
|
||
<div style="display: flex; flex-direction: column;">
|
||
<div style="display: flex; align-items: center;">
|
||
<div class="select" style="margin-left: 16px;">
|
||
<a-input v-model:value="value3" style="width: 270px;height: 40px;border-radius: 8px"
|
||
placeholder="请输入姓名/工号" />
|
||
|
||
</div>
|
||
<div class="select" style="margin-left: 15px;">
|
||
<a-select v-model:value="value" allowClear style="width: 270px; border-radius: 8px" placeholder="请选择认证结果">
|
||
<a-select-option value="3">已报名</a-select-option>
|
||
<a-select-option value="2">认证中</a-select-option>
|
||
<a-select-option value="1">未通过</a-select-option>
|
||
<a-select-option value="0">已通过</a-select-option>
|
||
|
||
</a-select>
|
||
|
||
</div>
|
||
<div class="select" style="margin-left: 15px;">
|
||
<a-select v-model:value="value2" allowClear style="width: 270px; border-radius: 8px" placeholder="请选择二次认证" >
|
||
<a-select-option value="1">是</a-select-option>
|
||
<a-select-option value="2">否</a-select-option>
|
||
</a-select>
|
||
</div>
|
||
<div style="display: flex; margin-left: 20px">
|
||
<div class="btn btn1" @click="SearchTeachers()">
|
||
<div class="search"></div>
|
||
<div class="btnText">搜索</div>
|
||
</div>
|
||
<div class="btn btn2" style="width: 105px" @click="handleRest">
|
||
<div class="search"></div>
|
||
<div class="btnText">重置</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div style="display: flex; align-items: center; margin-top: 15px;margin-bottom: 15px;">
|
||
<div v-if="route.query.isView!=0||uploadAdmin('examine-admin')" class="btns" style="margin-left: 15px;margin-bottom: 4.5px">
|
||
<proj-check-ship :type="13" :id="route.query.id" @finash="translate">
|
||
<div class="btn btn3" >
|
||
<div class="search"></div>
|
||
<div class="btnText" @click="Tecvisible=true">添加讲师</div>
|
||
</div>
|
||
</proj-check-ship>
|
||
|
||
</div>
|
||
<div v-if="route.query.isView!=0||uploadAdmin('examine-admin')" class="btns" style="margin-left: 15px;">
|
||
<div class="btn btn3">
|
||
<div class="search"></div>
|
||
<div class="btnText" @click="AddImpStuvisible=true">导入讲师</div>
|
||
</div>
|
||
</div>
|
||
<a-button v-if="route.query.isView!=0||uploadAdmin('examine-admin')" 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 v-if="route.query.isView!=0||uploadAdmin('examine-admin')" type="primary" @click="batchhandleOper()" style="width: 100px; height: 40px; border-radius: 8px;margin-left: 12px; padding-left: 10px;background-color: #4ea6ff;" >批量删除</a-button>
|
||
</div>
|
||
<!-- 表格 -->
|
||
<div style="display: flex; flex-direction: column;margin-left: 15px">
|
||
<div class="table">
|
||
<a-table :row-selection="rowSelection" row-key="id" :columns="columns" :data-source="data" :scroll="{ x: 1500 }" :pagination="false">
|
||
<template #headerCell="{ column }">
|
||
<template v-if="column.key === 'name'">
|
||
<span>
|
||
姓名
|
||
</span>
|
||
</template>
|
||
</template>
|
||
|
||
<template #bodyCell="{ column, record,text }">
|
||
<template v-if="column.key === 'name'">
|
||
<a>
|
||
{{ record.name }}
|
||
</a>
|
||
</template>
|
||
|
||
<template v-else-if="column.key === 'draftStatus'">
|
||
<span>
|
||
{{ text===1?'未上传':(text===2?'已退回':'已上传') }}
|
||
</span>
|
||
</template>
|
||
<template v-else-if="column.key === 'onlineLearning'">
|
||
<span>
|
||
{{ text===1?'未开始':(text===2?'进行中':'已完成') }}
|
||
</span>
|
||
</template> <template v-else-if="column.key === 'offlineTutoring'">
|
||
<span>
|
||
{{ text===1?'未开始':(text===2?'进行中':'已完成') }}
|
||
</span>
|
||
</template> <template v-else-if="column.key === 'endStatus'">
|
||
<span>
|
||
{{ text===1?'未上传':(text===2?'已退回':'已上传') }}
|
||
</span>
|
||
</template>
|
||
<template v-else-if="column.key === 'reviewResult'">
|
||
<span>
|
||
{{ text===1?'未通过':(text===2?'进行中':text==3?'已报名':'已通过') }}
|
||
</span>
|
||
</template>
|
||
<template v-else-if="column.key === 'second'">
|
||
<span>
|
||
{{ text==0?'-':text==1?'是':'否' }}
|
||
</span>
|
||
</template>
|
||
<template v-else-if="column.key === 'action'">
|
||
<span style="text-align: center;">
|
||
|
||
<a style="margin-right: 7px;" @click="show(record)">
|
||
查看
|
||
</a>
|
||
<a v-if="(record.draftStatus == 0||record.endStatus==0)&&uploadAdmin('examine-admin')&&record.endStatus!=2&&record.reviewResult!=0&&record.reviewResult!=1" style="margin-right: 7px;" @click="returnPage(record)">
|
||
{{record.endStatus==0?'退回终稿':'退回初稿'}}
|
||
</a>
|
||
<a v-if="route.query.isView!=0||uploadAdmin('examine-admin')" style="color: #de2139" @click="handleOper(record, 'del')">删除</a>
|
||
</span>
|
||
</template>
|
||
</template>
|
||
</a-table>
|
||
</div>
|
||
</div>
|
||
<div style="text-align: center; margin-top: 18px;">
|
||
<a-pagination :showSizeChanger="false" v-model:pageSize="pageSize1" v-model:current="current1" show-quick-jumper :total="total" @change="onChangeTeacher" />
|
||
</div>
|
||
<div style="height: 1px; width: 100%; background-color: #eceff4; margin-top: 15px;margin-left: 14px;"></div>
|
||
<div v-if="data2.length>0" style="margin-left: 14px; margin-top: 15px;margin-bottom: 12px;" >二次认证</div>
|
||
<div v-if="data2.length>0" style="display: flex; flex-direction: column;margin-left: 15px">
|
||
<div class="table">
|
||
<a-table :row-selection="rowSelection" row-key="id" :columns="twiceolumns" :data-source="data2" :scroll="{ x: 1500 }" :pagination="false">
|
||
<template #headerCell="{ column }">
|
||
<template v-if="column.key === '姓名'">
|
||
<span>
|
||
姓名
|
||
</span>
|
||
</template>
|
||
</template>
|
||
|
||
<template #bodyCell="{ column, record,text }">
|
||
<template v-if="column.key === 'name'">
|
||
<a>
|
||
{{ record.name }}
|
||
</a>
|
||
</template>
|
||
|
||
<template v-else-if="column.key === 'draftStatus'">
|
||
<span>
|
||
{{ '已上传' }}
|
||
</span>
|
||
</template>
|
||
<template v-else-if="column.key === 'onlineLearning'">
|
||
<span>
|
||
{{ text===1?'未开始':(text===2?'进行中':'已完成') }}
|
||
</span>
|
||
</template> <template v-else-if="column.key === 'offlineTutoring'">
|
||
<span>
|
||
{{ text===1?'未开始':(text===2?'进行中':'已完成') }}
|
||
</span>
|
||
</template> <template v-else-if="column.key === 'endStatus'">
|
||
<span>
|
||
{{ text===1?'未开始':(text===2?'已退回':'已上传') }}
|
||
</span>
|
||
</template>
|
||
<template v-else-if="column.key === 'reviewResult'">
|
||
<span>
|
||
{{ text===1?'未通过':(text===2?'进行中':text==3?'已报名':'已通过') }}
|
||
</span>
|
||
</template>
|
||
<template v-else-if="column.key === 'action'">
|
||
<span style="text-align: center;">
|
||
|
||
<a style="margin-right: 7px;" @click="show(record)">
|
||
查看
|
||
</a>
|
||
<a v-if="record.endStatus == 0&&uploadAdmin('examine-admin')&&(record.reviewResult!=0&&record.reviewResult!=1)" style="margin-right: 7px;" @click="returnPageTwo(record)">
|
||
退回终稿
|
||
</a>
|
||
<a v-if="route.query.isView!=0||uploadAdmin('examine-admin')" style="color: #de2139" @click="handleOper(record, 'del')">删除</a>
|
||
</span>
|
||
</template>
|
||
</template>
|
||
</a-table>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
<!-- <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">
|
||
<template #icon
|
||
><img
|
||
style="margin-right: 10px"
|
||
src="../../assets/images/courseManage/add0.png"
|
||
/></template>
|
||
添加学员
|
||
</a-button>
|
||
</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>
|
||
<!-- <QrCode ></QrCode> -->
|
||
<div style="display: flex;flex-direction: column;">
|
||
<div style="display: flex; align-items: center;justify-content: space-between;margin-left: 14px;">
|
||
<div>
|
||
<a-input ref="input" v-model:value="reviewValue" maxlength="30"
|
||
style="width: 270px;height: 40px;border-radius: 8px" placeholder="请输入评审名称" />
|
||
<a-button @click="searchReview()" type="primary"
|
||
style="color: #fff ;background-color: #4ea6ff;width: 100px; height: 40px; border-radius: 8px;margin-left: 15px;">搜索</a-button>
|
||
<a-button @click="resetReview()"
|
||
style="color: #fff ;background-color: #4ea6ff; width: 100px; height: 40px; border-radius: 8px;margin-left: 12px;"
|
||
>重置</a-button>
|
||
</div>
|
||
<div v-if="route.query.isView!=0">
|
||
<a-button @click="InitReview()" type="primary" style="color: #fff ;background-color: #4ea6ff;width: 100px; height: 40px;
|
||
border-radius: 8px;margin-left: 15px; padding-left: 10px;">发起评审</a-button>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div style="margin-left: 14px;margin-top: 20px">
|
||
<div class="table">
|
||
<a-table :columns="reviewcolumn" :data-source="reviewdata" :scroll="{ x: 1000 }" :pagination="false">
|
||
<template #headerCell="{ column }">
|
||
<template v-if="column.key === 'name'">
|
||
<span>
|
||
序号
|
||
</span>
|
||
</template>
|
||
</template>
|
||
|
||
<template #bodyCell="{ column, record, index, text }">
|
||
<template v-if="column.key === 'name'">
|
||
<span>
|
||
{{ index + 1 }}
|
||
</span>
|
||
</template>
|
||
<template v-else-if="column.key === 'reviewResult'">
|
||
<span>
|
||
{{ record.examineResult === 1 ? '已结束' : '认证中' }}
|
||
</span>
|
||
</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'">
|
||
<div style=" text-align: center;display:flex;justify-content:center">
|
||
<span style="display:flex;justify-content:end;align-self: end;width: 160px;">
|
||
<a v-if="record.examineResult === 0" style="margin-right: 7px;"
|
||
@click="handleMenuClick(record.reviewName, record.reviewTime.slice(0, 7), record)">二维码</a>
|
||
<div>
|
||
|
||
<a style="margin-right: 7px;"
|
||
@click='getreviewdetail({ reviewId: record.id, examineId: route.query.id},record.examineResult), vwtext = record.id'>查看</a>
|
||
|
||
<a v-if="record.examineResult === 0&&(route.query.isView!=0||uploadAdmin('examine-admin'))" @click="editReviewSave(record.reviewName, record.reviewTime, record.id)"
|
||
style="margin-right: 7px;">
|
||
编辑
|
||
</a>
|
||
<a v-if="(record.examineResult === 0&&route.query.isView!=0)||uploadAdmin('examine-admin')" @click="handleOperReview(record.id)" style="color: #de2139">删除</a>
|
||
</div>
|
||
</span>
|
||
</div>
|
||
</template>
|
||
</template>
|
||
</a-table>
|
||
</div>
|
||
<div style="text-align: center; margin-top: 18px;">
|
||
<a-pagination v-model:current="ReviewPageNo" defaultPageSize="15" show-quick-jumper :total="revieTotal"
|
||
@change="onChangeReview" />
|
||
</div>
|
||
|
||
<!-- 查看评审 -->
|
||
<a-drawer v-model:visible="ViewReviewShow" class="custom-class" :closable="false" placement="right"
|
||
width="80%">
|
||
<div class="header" style="margin-bottom: 20px;">
|
||
<div class="headerTitle">查看评审</div>
|
||
<img style="width: 29px; height: 29px; cursor: pointer" src="../../assets/images/basicinfo/close.png"
|
||
@click="ViewReviewShow = false" />
|
||
</div>
|
||
<div style="display: flex;flex-direction: column;">
|
||
<div style="font-size: 16px;"> 评审名称:<span>第三场二次认证</span></div>
|
||
<div style="font-size: 16px;margin: 20px 0;"> 评审时间:<span>2024.05.30 14:00</span></div>
|
||
<div style="font-size: 16px;margin-bottom: 20px;">评审结果:</div>
|
||
<div>
|
||
<a-table :pagination="false" :columns="ViewReviewcolumns" :scroll="{ x: 'max-content' }" :data-source="ViewReviewdata"
|
||
class="ant-table-striped" size="middle">
|
||
<template #bodyCell="{ column, record, index, text }">
|
||
<template v-if="column.key === 'name'">
|
||
<span>
|
||
{{ index + 1 }}
|
||
</span>
|
||
</template>
|
||
<template v-else-if="column.key === '认证结果'">
|
||
<!-- <span>
|
||
{{ text === 0 ? '通过' : (text === 1 ? '未通过' : (text === 2 ? '进行中' : '已报名')) }}
|
||
</span> -->
|
||
<span :style="{ color: record.平均分 >= 80 ? '#31AF0D' : (record.平均分 < 80 ? '#f5222d' : '#3da8f0') }">
|
||
{{ record.平均分==null?'': record.平均分 >= 80 ? '通过' : (record.平均分 < 80 ? '未通过' : (null)) }}
|
||
</span>
|
||
</template>
|
||
<template v-else-if="column.key === '平均分'">
|
||
<span :style="{ color: text >= 80 ? '#31AF0D' : (text < 80 ? '#f5222d' : '#3da8f0') }">
|
||
<!-- {{ text >= 80 ? '已通过' : (text < 80 ? '未通过' : text) }} -->
|
||
{{text}}
|
||
</span>
|
||
</template>
|
||
|
||
</template>
|
||
</a-table>
|
||
</div>
|
||
<div v-if="ButtunReviewShow===0&&ViewReviewdata.length>0" style="align-self: center;">
|
||
<div @click="finishreview(ViewReviewdata)"
|
||
style=" border-radius: 8px; color: #fff;font-weight: 900;font-size: 16px; display: flex; justify-content: center;align-items: center; width: 176px; height: 55px; margin-top: 36px;background: #3da8f0;">
|
||
结束评审并通知结果</div>
|
||
</div>
|
||
</div>
|
||
|
||
</a-drawer>
|
||
|
||
|
||
|
||
</div>
|
||
</div>
|
||
|
||
</a-tab-pane>
|
||
|
||
</a-tabs>
|
||
|
||
</div>
|
||
<!-- 发起评审 -->
|
||
<a-drawer v-model:visible="InitiateReviewShow" class="custom-class" :closable="false" placement="right"
|
||
width="60%">
|
||
<div class="header" style=" margin-bottom: 20px;">
|
||
<div class="headerTitle">{{ rwname ? '编辑评审' : '发起评审' }}</div>
|
||
<img style="width: 29px; height: 29px; cursor: pointer" src="../../assets/images/basicinfo/close.png"
|
||
@click="InitiateReviewShow = false, rwname = null" />
|
||
</div>
|
||
<div style="display: flex;flex-direction: column;">
|
||
|
||
<div style="display: flex;">
|
||
<div style="display: flex;flex-direction: column;flex:2;">
|
||
<a-form :model="formState" name="basic" :label-col="{ span: 5 }" :wrapper-col="{ span: 16 }"
|
||
autocomplete="off" @finish="onFinish" @finishFailed="onFinishFailed">
|
||
<a-form-item style="margin-top: 29px;" label="评审名称" :rules="[{ required: true, message: '请填写评审名称' }]">
|
||
<a-input showCount="ture" maxlength="50" placeholder="请输入评审名称" v-model:value="formState.reviewname" />
|
||
</a-form-item>
|
||
|
||
<a-form-item label="评审时间" :rules="[{ required: true, message: '请填写评审时间' }]">
|
||
<a-date-picker v-model:value="formState.time" placeholder="请选择评审时间" :show-time="{ format: 'HH:mm' }"
|
||
:format="['YYYY-MM-DD HH:mm']" valueFormat="YYYY-MM-DD HH:mm" @change="timeChangeEnd" />
|
||
</a-form-item>
|
||
<div>选择讲师</div>
|
||
<div style="width: 100%; height: 1px;background-color: #e2e0e0;margin-top: 8px;"></div>
|
||
<div style="display: flex;margin-top: 13px;">
|
||
<a-input v-model:value="teacherValue" placeholder="请输入姓名/工号" style="width: 150px;" />
|
||
<a-button @click="SearchTeacher()" type="primary"
|
||
style="width: 70px; height: 31px; border-radius: 5px;margin-left: 15px;background: #3da8f0;">搜索</a-button>
|
||
<a-button @click="resetTeacher()" type="primary"
|
||
style="width: 70px; height: 31px; border-radius: 5px;margin-left: 12px;background: #3da8f0;" >重置</a-button>
|
||
</div>
|
||
<p style="margin-top: 11px; color: #b6b7b8; font-size: 12px;">说明:列表仅显示终稿已上传且未认证的讲师</p>
|
||
<div style="display: flex;flex-direction: column;margin-top: -11px;">
|
||
<!-- 教师列表 -->
|
||
<a-table ref="teacherTables" :scroll="{ x: 500 }" :customRow="rowClick" :columns="columnsTeacher" row-key="teacherId" :pagination="false"
|
||
:data-source="tabledata" :row-selection="teacherRowSelection">
|
||
<template #bodyCell="{ column, text }">
|
||
<template v-if="column.dataIndex === 'name'">
|
||
<a>{{ text }}</a>
|
||
</template>
|
||
</template>
|
||
</a-table>
|
||
</div>
|
||
<div style="width: 100%;text-align: center;margin-top: 19px;">
|
||
<a-pagination v-model:pageSize="pageSizeSele" v-model:current="teacherCurrent1" show-quick-jumper :total="teacherTotal"
|
||
@change="onChange3" />
|
||
</div>
|
||
<a-form-item>
|
||
|
||
</a-form-item>
|
||
</a-form>
|
||
</div>
|
||
|
||
<div style="height: 500px; width: 1px; background: #b9e6fb;margin-left: 91px; margin-top: 10px"></div>
|
||
<div style="display: flex; flex-direction: column;width: 160px;margin-left: 24px;margin-top: 20px;">
|
||
<div style="font-size: 16px; font-weight: 900;">已选</div>
|
||
<div style="width: 16opx; height: 1px;background-color: #b9e6fb;margin: 11px 0;"></div>
|
||
<div class="teacher-list">
|
||
<div v-for="(item,i) in teacherNames" :key="i">
|
||
<div class="chose">
|
||
{{item.teacherName}}
|
||
<div class="ch" @click="closeTeacher(item,i)"></div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div style="width: 100%;margin-top: 0px;text-align: center;">
|
||
<a-button type="primary" @click="CancelReview()"
|
||
style="background: #3da8f0;width: 100px; height: 38px; border-radius: 8px ;margin: 0 15px 0 15px;margin-left: 30px">取消</a-button>
|
||
<a-button @click="startReviewSave()" html-type="submit" type="primary"
|
||
style="background: #3da8f0;width: 100px; height: 38px; border-radius: 8px">确认</a-button>
|
||
</div>
|
||
</a-drawer>
|
||
<!-- 查看讲师 -->
|
||
<a-drawer v-model:visible="showViewInstructor" class="custom-class" :closable="false" placement="right"
|
||
width="1248px" @after-visible-change="afterVisible">
|
||
<div class="drawerMain" >
|
||
<div class="header" style="margin-bottom: 20px;">
|
||
<div class="headerTitle">查看讲师</div>
|
||
<img
|
||
@click="showViewInstructor = false"
|
||
style="width: 29px; height: 29px; cursor: pointer"
|
||
src="../../assets/images/basicinfo/close.png"
|
||
/>
|
||
</div>
|
||
<div >
|
||
<div style="display: flex;width: 100%; height: 88px;">
|
||
<div>
|
||
<img v-if="techerDetail?.avatar" style="width: 60px; height: 58px;margin-left: 22px;margin-right: 29px;margin-top: 13px;" :src="techerDetail?.avatar"/>
|
||
<img
|
||
v-else
|
||
style="width: 60px; height: 58px;margin-left: 22px;margin-right: 29px;margin-top: 13px;"
|
||
src="../../assets/2.png"
|
||
/>
|
||
</div>
|
||
<div style="margin-left: 18px;">
|
||
<div style="font-size: 18px;font-weight: 500;color: #333333;line-height: 25px;font-style: normal;">{{techerDetail?.teacherName}}<span style="margin-left: 8px;"> {{techerDetail?.teacherNo}}</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>
|
||
|
||
|
||
</div>
|
||
<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;">{{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;">{{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 class="courseIntroduction" style="">{{techerDetail?.courseIntroduction}}</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;">
|
||
<img v-if="techerDetail?.coursewareName" src="../../assets/images/gratefulteacher/ppt.png" alt="">
|
||
{{ techerDetail?.coursewareName?techerDetail?.coursewareName:''}}
|
||
<span v-if="techerDetail?.coursewareName" style="color:#3da8f0" @click="downLoadCoures(techerDetail?.coursewareId)">下载</span>
|
||
</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;">{{techerDetail?.uploadTime}}</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div style='font-size: 18px;font-weight: 500;margin-top: 39px;'>
|
||
认证流程
|
||
</div>
|
||
<div style="margin-top: 13px; height: 125px;width: 100%;display: flex;margin-left: 44px;max-width: 1100px;" >
|
||
<div class="step_box" v-for="(item,index) in attestation" :key="index">
|
||
<div v-if="index != 0&&item.type!='reviewResult'" :style="{backgroundColor:(item.status!=1)?'#409EFF':'#DEDEDE'}" style="height: 2px;width: 81px;margin-top: -30px;"></div>
|
||
<div v-if="index != 0&&item.type=='reviewResult'" :style="{backgroundColor:(item.status==1||item.status==0)?'#409EFF':'#DEDEDE'}" style="height: 2px;width: 81px;margin-top: -30px;"></div>
|
||
<div style="display: flex;min-width: 70px;height: 78px;flex-direction: column;align-items: center">
|
||
<img style="width: 46px;height: 46px;margin-bottom: 12px;" :src="require(`../../assets/images/gratefulteacher/${item.images[item.status]}`)" alt="">
|
||
<div style="font-size: 14px;" :style="{color:item.color[item.status]}">{{item.name[item.status]}}</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div style="font-size: 14px;margin-bottom: 15px;">评委打分信息表:</div>
|
||
<div>
|
||
<a-table :columns="twiceolumnsOne" :data-source="techerDetail?.firstList" :scroll="{ x: 1000 }" :pagination="false">
|
||
<template #footer="{ record }">
|
||
<div v-if="techerDetail?.firstList" class="footer_table">
|
||
<div class="footer_left">平均分</div>
|
||
<div class="footer_right">{{ scoreOne }}</div>
|
||
</div>
|
||
</template>
|
||
</a-table>
|
||
</div>
|
||
<div v-if="techerDetail?.secondList" style="font-size: 14px;margin-bottom: 19px;margin-top: 40px;font-size: 18px;font-weight: 500;">二次认证</div>
|
||
<div v-if="techerDetail?.secondList" style="font-size: 14px;margin-bottom: 15px;">评委打分信息表:</div>
|
||
<div v-if="techerDetail?.secondList">
|
||
<a-table :columns="twiceolumnsTwo" :data-source="techerDetail?.secondList" :scroll="{ x: 1000 }" :pagination="false">
|
||
<template #footer>
|
||
<div v-if="techerDetail?.secondList" class="footer_table">
|
||
<div class="footer_left">平均分</div>
|
||
<div class="footer_right">{{scoreTwo}}</div>
|
||
</div>
|
||
</template>
|
||
</a-table>
|
||
</div>
|
||
<div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</a-drawer>
|
||
</div>
|
||
|
||
</template>
|
||
|
||
<style lang="scss" scoped>
|
||
::v-deep .ant-col-5{
|
||
flex: none;
|
||
}
|
||
.close_exit {
|
||
position: absolute;
|
||
right: 42px;
|
||
cursor: pointer;
|
||
width: 20px;
|
||
height: 20px;
|
||
top: 13px;
|
||
right: 13px;
|
||
font-size: 16px;
|
||
background-image: url(@/assets/images/coursewareManage/close.png);
|
||
background-size: 100% 100%;
|
||
}
|
||
|
||
.rectangle {
|
||
width: 537px;
|
||
height: 516px;
|
||
padding: 2px 2px 2px 2px;
|
||
background-image: linear-gradient(-180deg, #02a7f0 0%, #ffffff 26.810004387889418%);
|
||
box-sizing: border-box;
|
||
position: relative;
|
||
}
|
||
|
||
.page-top {
|
||
height: 134px;
|
||
width: 100%;
|
||
// background-color: orange;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
padding-left: 24px;
|
||
padding-right: 33px;
|
||
|
||
// flex-direction: row;
|
||
.title{
|
||
width: 600px;
|
||
margin-top: 16px;
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
white-space: nowrap;
|
||
}
|
||
.item{
|
||
width: 800px !important;
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
white-space: nowrap;
|
||
// display: -webkit-box;
|
||
// -webkit-line-clamp: 2;
|
||
// -webkit-box-orient: vertical;
|
||
// overflow: hidden;
|
||
// text-overflow: ellipsis;
|
||
// box-sizing: border-box;
|
||
// word-break: break-word;
|
||
}
|
||
}
|
||
|
||
.boundary {
|
||
height: 17px;
|
||
width: 100%;
|
||
background-color: #eceff4;
|
||
}
|
||
|
||
.el-table::v-deep .cell {
|
||
font-size: 13px;
|
||
color: #333;
|
||
font-weight: 400;
|
||
text-align: center;
|
||
}
|
||
|
||
|
||
:deep(.demo-pagination-block) {
|
||
width: 100%;
|
||
|
||
}
|
||
|
||
.el-pagination {
|
||
|
||
justify-content: center;
|
||
}
|
||
|
||
.sss {
|
||
background: #333;
|
||
}
|
||
|
||
:deep(.ant-tabs-tab) {
|
||
margin-left: 30px
|
||
}
|
||
|
||
:deep(.select .ant-select-selector) {
|
||
border-radius: 5px !important;
|
||
}
|
||
|
||
.select {
|
||
height: 100%;
|
||
|
||
display: flex;
|
||
align-items: center;
|
||
}
|
||
|
||
|
||
:deep(.ant-table-tbody > tr > td) {
|
||
text-align: center;
|
||
}
|
||
.btn1 {
|
||
.search {
|
||
width: 15px;
|
||
height: 17px;
|
||
background-image: url("@/assets/images/courseManage/search0.png");
|
||
}
|
||
}
|
||
|
||
.btn2 {
|
||
.search {
|
||
width: 16px;
|
||
height: 18px;
|
||
background-image: url("@/assets/images/courseManage/reset0.png");
|
||
}
|
||
}
|
||
|
||
.btn1:active {
|
||
background: #0982ff;
|
||
}
|
||
|
||
.btn2:active {
|
||
background: #0982ff;
|
||
}
|
||
|
||
.btn {
|
||
padding: 0 26px 0 26px;
|
||
height: 38px;
|
||
background: #4ea6ff;
|
||
border-radius: 8px;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
margin-right: 14px;
|
||
flex-shrink: 0;
|
||
cursor: pointer;
|
||
|
||
.search {
|
||
background-size: 100%;
|
||
}
|
||
|
||
.btnText {
|
||
font-size: 14px;
|
||
font-weight: 400;
|
||
color: #ffffff;
|
||
line-height: 36px;
|
||
margin-left: 5px;
|
||
}
|
||
}
|
||
|
||
.btn3 {
|
||
|
||
margin-right: 0;
|
||
|
||
.search {
|
||
width: 17px;
|
||
height: 18px;
|
||
background-image: url("@/assets/images/courseManage/add0.png");
|
||
}
|
||
}
|
||
|
||
.btn3:active {
|
||
background: #0982ff;
|
||
}
|
||
|
||
.header {
|
||
margin-top: -20px;
|
||
height: 73px;
|
||
border-bottom: 1px solid #e8e8e8;
|
||
display: flex;
|
||
justify-content: space-between;
|
||
align-items: center;
|
||
flex-shrink: 0;
|
||
// background-color: red;
|
||
margin-bottom: 58px;
|
||
|
||
.headerTitle {
|
||
font-size: 18px;
|
||
font-weight: 600;
|
||
color: #333333;
|
||
line-height: 25px;
|
||
// margin-left: 24px;
|
||
}
|
||
}
|
||
.teacher-list{
|
||
max-height: 800px;
|
||
overflow-y: auto;
|
||
}
|
||
.chose {
|
||
width: 64px;
|
||
height: 24px;
|
||
margin-top: 25px;
|
||
margin-right: 25px;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
border-radius: 2px;
|
||
border: 1px solid rgba(56, 139, 225, 1);
|
||
color: rgba(56, 139, 225, 1);
|
||
font-size: 12px;
|
||
position: relative;
|
||
|
||
.ch {
|
||
position: absolute;
|
||
width: 18px;
|
||
height: 18px;
|
||
background-image: url(../../assets/images/basicinfo/ch.png);
|
||
right: -8px;
|
||
top: -8px;
|
||
}
|
||
}
|
||
|
||
// :deep(.ant-form-item-label){
|
||
// text-align: left;
|
||
// }
|
||
.step_box{
|
||
display: flex;
|
||
justify-content: center;
|
||
align-items: center;
|
||
}
|
||
::v-deep .ant-table-footer{
|
||
background-color: #ffffff,
|
||
}
|
||
.footer_table{
|
||
display: flex;
|
||
justify-content: space-between;
|
||
.footer_left{
|
||
margin-left: 84px;
|
||
}
|
||
.footer_right{
|
||
margin-right: 85px;
|
||
}
|
||
}
|
||
.courseIntroduction{
|
||
width: 559px;height: 56px;line-height: 56px;border: 1px solid #F0F6FC;padding-left:16px; overflow: hidden;white-space: nowrap;text-overflow: ellipsis;
|
||
}
|
||
.courseIntroduction:hover{
|
||
overflow: visible;
|
||
}
|
||
</style>
|