Files
fe-manage/src/components/drawers/router/RouterExaminationManage.vue
2023-02-23 09:55:01 +08:00

749 lines
20 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<a-drawer v-if="ExaminationModelVisible" :visible="ExaminationModelVisible" class="drawerStyle ProjectExamManage"
placement="right" width="80%" @after-visible-change="afterVisibleChange">
<div class="drawerMain">
<div class="header">
<div class="headerTitle">考试{{ title }}</div>
<img style="width: 29px; height: 29px; cursor: pointer" src="../../../assets/images/basicinfo/close.png"
@click="closeDrawer" />
</div>
<div class="main">
<div class="endtime">起止时间{{ datasource.startTime }} {{ datasource.endTime }}</div>
<div class="search">
<div class="namecon" style="margin-right: 30px">
<div class="name">姓名</div>
<a-input v-model:value="name" style="width: 200px; height: 40px; border-radius: 8px" placeholder="请输入姓名" />
</div>
<div v-if="datasource.type !== 5" class="namecon" style="margin-right: 50px">
<div class="name">任务状态</div>
<div class="select">
<a-select v-model:value="projectName" style="width: 200px" placeholder="请选择" :options="projectNameList"
@change="selectProjectName" allowClear></a-select>
</div>
</div>
<div class="btns">
<div class="btn btn1" style="margin-right: 20px" @click="searchTableData">
<div class="img1"></div>
<div class="wz">搜索</div>
</div>
<div class="btn btn2" @click="reseatTableData">
<div class="img2"></div>
<div class="wz">重置</div>
</div>
</div>
</div>
<div class="btnss" style="margin-top: 20px">
<!-- <div class="btn btn1" @click="godie" style="margin-right: 20px">
<div class="img1"></div>
<div class="wz">催促考试</div>
</div>-->
<div class="btn btn2" @click="exportData">
<div class="img2"></div>
<div class="wz">导出数据</div>
</div>
<!-- <div class="btn btn2" @click="showEScoreModal">
<div class="wz">导入成绩</div>
</div> -->
</div>
<!-- <div class="line">
<div class="inline">
<div class="left">
<div class="img"></div>
<div class="text" style="margin-left: 10px">已选择</div>
<div class="text2">{{ selectedRowKeys.length }}</div>
<div class="text"></div>
<div class="text3">列表选项总计</div>
<div class="text4">{{ tableDataTotal }}</div>
</div>
<div class="right" @click="clearLine">清空</div>
</div>
</div> -->
<div class="tableBox" style="margin-top: 20px; margin-bottom: 100px">
<a-table style="border: 1px solid #f2f6fe" :columns="tablecolumns" :data-source="tabledata"
:loading="loadingData" :scroll="{ x: 900 }" :pagination="false" />
<div class="pa">
<a-pagination :showSizeChanger="false" showQuickJumper="true" hideOnSinglePage="true" :pageSize="pageSize"
:current="currentPage" :total="tableDataTotal" class="pagination" v-if="tableDataTotal > 10"
@change="changePaginationStu" />
</div>
</div>
</div>
<!--
<div class="btnn">
<button class="btn1" @click="closeDrawer">取消</button>
<button class="btn2" @click="closeDrawer">确定</button>
</div>-->
</div>
<!-- 导出成绩抽屉 -->
<EScore v-model:eScorevisible="eScorevisible" />
</a-drawer>
<!-- 查看答卷抽屉 -->
<CheckAnsware v-model:CAvisible="CAvisible" :datasource="datasource" />
</template>
<script>
import { toRefs, reactive } from "vue";
import { message } from "ant-design-vue";
import EScore from "../ExportScore.vue";
import CheckAnsware from '../CheckAnsware.vue'
import * as api from '../../../api/indexTaskManage';
// import * as api from "../../../api/index";
export default {
name: "RouterExaminationManage",
components: {
EScore,
CheckAnsware
},
props: {
ExaminationModelVisible: {
type: Boolean,
default: false,
},
title: {
type: String,
default: "",
},
levelName: {
type: String,
default: "",
},
projectTaskId: {
type: Number,
default: null,
},
datasource: {
type: Object,
default: function () {
return {};
},
},
},
setup(props, ctx) {
const state = reactive({
name: "",
open: false,
projectName: undefined,
projectNameList: [
{
id: 1,
value: "0",
label: "未开始",
},
{
id: 2,
value: "10",
label: "未通过",
},
{
id: 3,
value: "1",
label: "已通过",
},
],
selectedRowKeys: [],
eScorevisible: false, //导入成绩抽屉
pageNo: 1,
pageSize: 10,
currentPage: 1,
tableDataTotal: 0,
tabledata: [],
tablecolumns: [
{
title: "工号",
dataIndex: "studentCode",
key: "studentCode",
width: 120,
align: "center",
className: "h head",
customRender: (text) => {
return (
<div class="racona">
<span> {text.record.studentCode ? text.record.studentCode : "-"}</span>
</div>
);
},
},
{
title: "姓名",
dataIndex: "studentName",
key: "studentName",
width: 50,
align: "center",
className: "h",
customRender: (text) => {
return (
<div class="racona">
<span> {text.record.studentName ? text.record.studentName : "-"}</span>
</div>
);
},
},
{
title: "所在部门",
dataIndex: "studentDepartName",
key: "studentDepartName",
width: 60,
align: "center",
ellipsis: true,
customRender: (text) => {
return (
<div class="racona">
<span> {text.record.studentDepartName ? text.record.studentDepartName : "-"}</span>
</div>
);
},
},
{
title: "所在岗位",
dataIndex: "studentJobName",
key: "studentJobName",
width: 60,
align: "center",
ellipsis: true,
className: "h",
customRender: (text) => {
return (
<div class="racona">
<span> {text.record.studentJobName ? text.record.studentJobName : "-"}</span>
</div>
);
},
},
{
title: "学员关卡",
dataIndex: "currentStageId",
key: "currentStageId",
width: 60,
align: "center",
ellipsis: true,
className: "h",
customRender: () => {
return (
<div class="racona">
<span> {props.levelName}</span>
</div>
);
},
},
{
title: "考试次数",
dataIndex: "num",
key: "num",
width: 60,
align: "center",
ellipsis: true,
className: "h",
customRender: (text) => {
return (
<div class="racona">
<span> {text.record.num ? text.record.num : "-"}</span>
</div>
);
},
},
{
title: "成绩",
dataIndex: "score",
key: "score",
width: 60,
align: "center",
ellipsis: true,
className: "h",
customRender: (text) => {
return (
<div class="racona">
<span> {text.record.examinationScore ? text.record.examinationScore : "-"}</span>
</div>
);
},
},
{
title: "完成时间",
dataIndex: "examinationSubmitTime",
key: "examinationSubmitTime",
width: 60,
align: "center",
ellipsis: true,
className: "h",
customRender: (text) => {
return (
<div class="racona">
<span> {text.record.examinationSubmitTime ? text.record.examinationSubmitTime : "-"}</span>
</div>
);
},
},
{
title: "任务状态",
dataIndex: "finishStatus",
key: "finishStatus",
width: 60,
align: "center",
ellipsis: true,
className: "h",
customRender: ({ record: { finishStatus } }) => ({ 1: '通过', 2: '未通过' }[finishStatus] || '未开始'),
},
{
title: "操作",
dataIndex: "studentKid",
key: "studentKid",
width: 60,
align: "center",
ellipsis: true,
className: "h",
customRender: (text) => {
{/* debugger */ }
console.log("text" + text.record)
if (text.record.finishStatus === 1 || text.record.finishStatus === 2) {
return (
<div class="racona">
<a-button
type="link"
onClick={() => {
state.studentKid = text.record.studentKid;
state.datasource = text.record;
state.CAvisible = true;
}}>
查看答卷
</a-button>
</div>
);
} else {
return (
<div class="racona">
<a-button
type="link"
disabled
onClick={() => {
state.studentKid = text.record.studentKid;
state.datasource = text.record;
state.CAvisible = true;
}}>
查看答卷
</a-button>
</div>
);
}
},
},
],
loadingData: true,
studentKid: '',
CAvisible: false,
datasource: ''
});
const closeDrawer = () => {
ctx.emit("update:ExaminationModelVisible", false);
state.name = "";
state.projectName = undefined;
state.selectedRowKeys = [];
state.currentPage = 1;
state.tabledata = [];
};
const afterVisibleChange = (bol) => {
if (bol == true) {
state.loadingData = true;
getData();
}
};
const selectProjectName = (value) => {
state.projectName = value;
};
const onSelectChange = (selectedRowKeys) => {
console.log('表格前方选中项目', selectedRowKeys)
if (selectedRowKeys.length > 2) {
return;
}
state.selectedRowKeys = selectedRowKeys;
};
//催促学员学习
const godie = () => {
message.destroy();
message.success("催促" + props.title + "成功");
};
//导入成绩
const showEScoreModal = () => {
state.eScorevisible = true;
};
//表头清空
const clearLine = () => {
state.selectedRowKeys = [];
};
// 获取数据
function getData() {
api.ExamManagementMessage({
studentName: state.name,
pageNo: state.currentPage,
pageSize: state.pageSize,
chapterId: props.datasource.chapterId,
type: 1,
taskId: props.datasource.courseId,
targetId: props.datasource.routerId
}).then(res => {
state.tabledata = res.data.data.managementDtoList;
state.tableDataTotal = res.data.data.total;
state.loadingData = false;
})
}
// 搜索
function searchTableData() {
state.currentPage = 1;
state.loadingData = true;
getData();
}
// 重置
function reseatTableData() {
state.loadingData = true;
state.currentPage = 1;
state.name = '';
state.projectName = undefined;
getData();
}
//分页
const changePaginationStu = (page) => {
state.loadingData = true;
state.currentPage = page;
getData();
};
{/* 导出数据 */ }
function exportData() {
// window.open(`${process.env.VUE_APP_BASE_API}/admin/exam/manage/exportExam?chapterId=${props.datasource.chapterId}&targetId=${props.datasource.routerId}&taskId=${props.datasource.courseId}&type=${1}`)
window.open(`${process.env.VUE_APP_BASE_API}/admin/exam/manage/exportExam?currentStageId=${props.datasource.chapterId}&type=${1}&pid=${props.datasource.routerId}&targetId=${props.datasource.routerId}&taskId=${props.datasource.courseId}&taskType=${props.datasource.type}`)
{/* api.ExportExam({
"chapterId": props.datasource.chapterId,
"targetId": props.datasource.routerId,
"taskId": props.datasource.courseId,
"type": 1
}).then(res=>{
console.log(res)
}).catch(err=>{
console.log(err)
}) */}
}
return {
...toRefs(state),
selectProjectName,
closeDrawer,
afterVisibleChange,
onSelectChange,
godie,
clearLine,
showEScoreModal,
searchTableData,
reseatTableData,
changePaginationStu,
exportData
};
},
};
</script>
<style lang="scss">
.ProjectExamManage {
.drawerMain {
min-width: 550px;
margin: 0px 32px 0px 32px;
overflow-x: auto;
display: flex;
flex-direction: column;
.header {
height: 73px;
border-bottom: 1px solid #e8e8e8;
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
.headerTitle {
font-size: 18px;
font-weight: 600;
color: #333333;
line-height: 25px;
}
}
.main {
width: 100%;
height: 100%;
overflow: auto;
padding-right: 10px;
.endtime {
font-size: 16px;
font-weight: 500;
color: #333333;
}
.search {
width: 100%;
display: flex;
flex-wrap: wrap;
margin-top: 20px;
.namecon {
display: flex;
flex-wrap: nowrap;
margin-bottom: 10px;
.name {
margin-top: 8px;
}
}
.btns {
display: flex;
flex-wrap: nowrap;
.btn {
cursor: pointer;
width: 100px;
height: 40px;
border-radius: 8px;
display: flex;
justify-content: center;
align-items: center;
.img1 {
width: 15px;
height: 17px;
background-image: url(../../../assets/images/courseManage/search0.png);
background-size: 100% 100%;
margin-right: 7px;
}
.img2 {
width: 16px;
height: 18px;
background-image: url(../../../assets/images/courseManage/reset1.png);
background-size: 100% 100%;
margin-right: 7px;
}
}
.btn1 {
background: #4ea6ff;
color: #ffffff;
}
.btn2 {
background: #ffffff;
color: #4ea6ff;
border: 1px solid #4ea6ff;
}
}
}
.btnss {
display: flex;
flex-wrap: nowrap;
.btn {
cursor: pointer;
width: 130px;
height: 40px;
border-radius: 8px;
display: flex;
justify-content: center;
align-items: center;
.img1 {
width: 15px;
height: 17px;
background-image: url(../../../assets/images/basicinfo/call.png);
background-size: 100% 100%;
margin-right: 7px;
}
.img2 {
width: 17px;
height: 16px;
background-image: url(../../../assets/images/coursewareManage/export.png);
background-size: 100% 100%;
margin-right: 7px;
}
}
.btn1 {
background: #4ea6ff;
color: #ffffff;
}
.btn2 {
background: #ffffff;
margin-right: 20px;
color: #4ea6ff;
border: 1px solid #4ea6ff;
}
}
.line {
width: 100%;
height: 40px;
background-color: #e9f6fe;
display: flex;
justify-content: center;
align-items: center;
margin-top: 20px;
border: 1px solid #c3e6fc;
.inline {
width: 95%;
height: 100%;
display: flex;
justify-content: space-between;
.left {
height: 100%;
display: flex;
align-items: center;
.img {
width: 14px;
height: 15px;
background-image: url(../../../assets/images/leveladd/gan.png);
background-size: 100% 100%;
}
.text {
color: #999ba3;
}
.text2 {
color: #4ea6ff;
margin-left: 5px;
margin-right: 5px;
}
.text3 {
color: #999ba3;
margin-left: 20px;
}
}
.right {
font-size: 14px;
font-weight: 400;
color: #387df7;
height: 100%;
display: flex;
align-items: center;
cursor: pointer;
}
}
}
.tableBox {
.ant-table-selection-column {
padding: 0px !important;
}
.ant-pagination-item,
.ant-pagination-prev,
.ant-pagination-next,
.ant-pagination-options {
margin-bottom: 10px;
}
.ant-table-thead>tr>th {
background-color: rgba(239, 244, 252, 1) !important;
}
.ant-table-selection-column {
padding: 0 !important;
}
th.h {
background-color: #eff4fc !important;
}
.head {
padding-left: 0px !important;
}
.ant-table-tbody>tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)>td {
background: #f6f9fd;
}
.studentopea1 {
font-size: 14px;
font-weight: 400;
color: #387df7;
line-height: 22px;
padding-right: 8px;
border-right: 1px solid #e9e9e9;
cursor: pointer;
}
.studentopea2 {
font-size: 14px;
font-weight: 400;
color: #387df7;
line-height: 22px;
padding-right: 8px;
padding-left: 8px;
border-right: 1px solid #e9e9e9;
cursor: pointer;
}
.pa {
margin-top: 15px;
width: 100%;
display: flex;
justify-content: center;
}
}
}
.btnn {
height: 72px;
width: 100%;
position: absolute;
background-color: #fff;
bottom: 0;
left: 0;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.16);
.btn1 {
width: 100px;
height: 40px;
border: 1px solid #4ea6ff;
border-radius: 8px;
color: #4ea6ff;
background-color: #fff;
cursor: pointer;
}
.btn2 {
cursor: pointer;
width: 100px;
height: 40px;
background: #4ea6ff;
border-radius: 8px;
border: 0;
margin-left: 15px;
color: #fff;
}
}
}
}
</style>