Files
fe-manage/src/components/drawers/router/RouterProjectManage.vue
2023-03-08 17:17:54 +08:00

736 lines
21 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="PjModelVisible"
:visible="PjModelVisible"
class="drawerStyle RouterProjectManage"
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
v-if="datasource.type !== 6 && datasource.type !== 9"
class="endtime"
>
<!-- 起止时间-->
</div>
<div v-else class="endtime">
起止时间{{ datasource.startTime }} {{ datasource.endTime }}
</div>
<div class="search" style="justify-content:flex-start;">
<div class="sealeft">
<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 !==1" 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"
></a-select>
</div>
</div>
</div>
<div class="btns">
<div
class="btn btn1"
style="margin-right: 20px"
@click="searchTaskList"
>
<div class="img1"></div>
<div class="wz">搜索</div>
</div>
<div class="btn btn2" @click="resetTaskList">
<div class="img2"></div>
<div class="wz">重置</div>
</div>
</div>
</div>
<div class="btnss" style="margin-top: 20px" v-if="checkPer(permissions,createId)">
<!--
<div class="btn btn1" @click="godie" style="margin-right: 20px">
<div class="img1"></div>
<div class="wz">催促学习</div>
</div>-->
<div class="btn btn2" @click="exportTaskStu">
<div class="img2"></div>
<div class="wz">导出数据</div>
</div>
</div>
<div class="tab" style="margin-top: 20px; margin-bottom: 100px">
<a-table
style="border: 1px solid #f2f6fe"
:columns="tableDataFunc()"
:data-source="tabledata"
:loading="tableDataTotalLoading"
:scroll="{ x: 900 }"
:pagination="false"
/>
<div class="tableBox">
<div class="pa">
<a-pagination
:showSizeChanger="false"
showQuickJumper="true"
hideOnSinglePage="true"
:pageSize="pageSize"
:current="currentPage"
:total="tableDataTotal"
class="pagination"
@change="changePaginationStu"
v-if="tableDataTotal > 10"
/>
</div>
</div>
</div>
</div>
<!--
<div class="btnn">
<button class="btn1" @click="closeDrawer">取消</button>
<button class="btn2" @click="closeDrawer">确定</button>
</div>-->
</div>
</a-drawer>
<!-- 学员查看抽屉 -->
<check-stu
v-model:CheckStuvisible="CheckStuvisible"
v-model:routerId="routerId"
v-model:studentId="studentId"
/>
</template>
<script>
import { toRefs, reactive, onMounted, onUnmounted } from "vue";
import { message } from "ant-design-vue";
// import * as api from "../../../api/index";
import * as api from "../../../api/indexTaskManage";
import CheckStu from "../CheckStu";
import {checkPer} from "@/utils/utils";
export default {
name: "RouterProjectManage",
components:{
CheckStu,
},
props: {
createId: {
type: Number,
default: null,
},
permissions: {
type: String,
default: null,
},
PjModelVisible: {
type: Boolean,
default: false,
},
title: {
type: String,
default: "",
},
levelName: {
type: String,
default: "",
},
projectTaskId: {
type: Number,
default: null,
},
itemsType: {
type: Number,
default: null,
},
datasource: {
type: Object,
default: function () {
return {};
},
},
},
setup(props, ctx) {
const state = reactive({
visible: props.PjModelVisible,
name: "",
pageNo: 1,
pageSize: 10,
currentPage: 1,
tableDataTotal: 0,
projectName: undefined,
projectNameList: [
{
id: 1,
value: "1",
label: "未开始",
},
{
id: 2,
value: "2",
label: "进行中",
},
{
id: 3,
value: "3",
label: "已完成",
}
],
tabledata: [],
tableDataTotalLoading: true, // 表格loading加载配置
CVvisible:false, //查看投票抽屉
voteID: "",
courseID: "",
routerId: '',
studentId: '',
CheckStuvisible: false,
});
const tableDataFunc = () => {
const columns = [
{
title: "工号",
dataIndex: "studentUserNo",
key: "studentUserNo",
width: "20%",
align: "center",
ellipsis: true,
className: "h head",
customRender: (text) => {
return (
<div class="racona">
<span> {text.record.studentUserNo?text.record.studentUserNo:"-"}</span>
</div>
);
},
},
{
title: "姓名",
dataIndex: "studentName",
key: "studentName",
width: "10%",
align: "center",
ellipsis: true,
className: "h head",
customRender: (text) => {
return (
<div class="racona">
<span> {text.record.studentName?text.record.studentName:"-"}</span>
</div>
);
},
},
{
title: "所在部门",
dataIndex: "studentDepartName",
key: "studentDepartName",
width: "20%",
align: "center",
className: "h",
ellipsis: true,
customRender: (text) => {
return (
<div class="racona">
<span> {text.record.studentDepartName?text.record.studentDepartName:"-"}</span>
</div>
);
},
},
{
title: "所在岗位",
dataIndex: "studentJobName",
key: "studentJobName",
width: "10%",
align: "center",
ellipsis: true,
className: "h",
customRender: (text) => {
return (
<div class="racona">
<span> {text.record.studentJobName?text.record.studentJobName:"-"}</span>
</div>
);
},
},
{
title: "学员关卡",
dataIndex: "chapterName",
key: "chapterName",
width: "10%",
align: "center",
ellipsis: true,
className: "h",
customRender: (text) => {
return (
<div class="racona">
<span> {text.record.chapterName?text.record.chapterName:"-"}</span>
</div>
);
},
},
{
title: "当前阶段",
dataIndex: "currentStageName",
key: "currentStageName",
width: "10%",
align: "center",
ellipsis: true,
className: "h",
customRender: (text) => {
return (
<div class="racona">
<span> {text.record.currentStageName?text.record.currentStageName:"-"}</span>
</div>
);
},
},
{
title: "当前任务",
dataIndex: "currentTaskName",
key: "currentTaskName",
width: "10%",
align: "center",
ellipsis: true,
className: "h",
customRender: (text) => {
return (
<div class="racona">
<span> {text.record.currentTaskName?text.record.currentTaskName:"-"}</span>
</div>
);
},
},
{
title: "进度",
dataIndex: "taskProcess",
key: "taskProcess",
width: "10%",
align: "center",
ellipsis: true,
className: "h",
customRender: (text) => {
return (
<div class="racona">
<span> {text.record.taskProcess?text.record.taskProcess:"-"}</span>
</div>
);
},
},
{
title: "完成时间",
dataIndex: "lastStudyTime",
key: "lastStudyTime",
width: "15%",
align: "center",
ellipsis: true,
className: "h",
customRender: (text) => {
return (
<div class="racona">
<span> {text.record.lastStudyTime?text.record.lastStudyTime:"-"}</span>
</div>
);
},
},
{
title: "任务状态",
dataIndex: "finishStatus",
key: "finishStatus",
width: "10%",
align: "center",
ellipsis: true,
className: "h",
customRender: (text) => {
return (
<div class="racona">
<span> {!text.record.finishStatus? "未开始" :text.record.finishStatus == 2 ?"进行中":text.record.finishStatus == 1 ? "已完成" :"未完成"}</span>
</div>
);
},
},
{
title: "操作",
dataIndex: "voteSubmitId",
key: "voteSubmitId",
width: "10%",
align: "center",
ellipsis: true,
className: "h",
customRender: (value) => {
return (
<div
style="color:#387df7;cursor:pointer"
onClick={
() => {
{/* 当前学员 用来查看学员详情 */}
state.routerId = value.record.pid;
state.studentId = value.record.studentId;
state.CheckStuvisible = true;
console.log(value);
}}>
<span style='color:#387df7;'> 查看 </span>
</div>
);
},
},
];
return columns;
};
const closeDrawer = () => {
ctx.emit("update:PjModelVisible", false);
state.currentPage = 1;
state.name = "";
state.projectName = undefined;
state.tabledata = [];
};
const afterVisibleChange = (bol) => {
if (bol == true) {
console.log("当前是什么类型", props.datasource.type);
console.log("当前是什么类型", props.datasource);
state.tableDataTotalLoading = true;
getData();
}
};
const selectProjectName = (value) => {
state.projectName = value;
};
//催促
const godie = () => {
message.destroy();
message.success("催促" + props.title + "成功");
};
const onChange = (pageNumber) => {
console.log("Page: ", pageNumber);
};
// 获取数据
function getData() {
if(props.datasource.type === 13){
api
.AssessmentManagementMessage({
pageNo: state.currentPage,
pageSize: state.pageSize,
currentStageId: props.datasource.chapterId,
type: 2,
pid: props.datasource.routerId,
taskId: props.datasource.id,
taskType: props.datasource.type,
status: state.projectName,
studentName: state.name,
})
.then((res) => {
state.tableDataTotalLoading = false;
let newData = [];
for (let i = 0; i < res.data.data.records.length; i++) {
res.data.data.records[i].key = res.data.data.records[i].id;
newData.push(res.data.data.records[i]);
}
state.tabledata = newData;
state.tableDataTotal = res.data.data.total;
state.courseID = props.datasource.courseId;
})
}else{
state.tableDataTotalLoading = false;
state.tabledata = [];
}
}
// 搜索按钮
function searchTaskList() {
state.currentPage = 1;
state.tableDataTotalLoading = true;
getData();
}
// 重置按钮
function resetTaskList() {
state.tableDataTotalLoading = true;
state.currentPage = 1;
state.name = "";
state.projectName = undefined;
getData();
}
//分页
const changePaginationStu = (page) => {
state.tableDataTotalLoading = true;
state.currentPage = page;
getData();
};
// 导出数据
function exportTaskStu() {
console.log(`${process.env.VUE_APP_BASE_API}/project/management/exportProjectManage?courseId=${props.datasource.courseId}`)
window.open(`${process.env.VUE_APP_BASE_API}/project/management/exportProjectManage?courseId=${props.datasource.courseId}`)
}
return {
...toRefs(state),
selectProjectName,
closeDrawer,
afterVisibleChange,
tableDataFunc,
godie,
checkPer,
onMounted,
onUnmounted,
onChange,
searchTaskList,
resetTaskList,
changePaginationStu,
exportTaskStu,
};
},
};
</script>
<style lang="scss">
.ant-drawer-content-wrapper {
max-width: 80% !important;
}
.RouterProjectManage {
// overflow-x: auto;
max-width: auto;
.drawerMain {
min-width: 550px;
margin: 0px 32px 0px 32px;
overflow-x: auto;
display: flex;
flex-direction: column;
.noticebox {
width: 240px;
height: 64px;
background: rgba(255, 255, 255, 1);
border-radius: 4px;
position: absolute;
top: 161px;
display: flex;
align-items: center;
justify-content: center;
.notext {
color: rgba(51, 51, 51, 1);
font-size: 14px;
font-weight: 500;
margin-left: 20px;
}
}
.header {
height: 73px;
border-bottom: 1px solid #e8e8e8;
display: flex;
flex-shrink: 0;
justify-content: space-between;
align-items: center;
// background-color: red;
margin-bottom: 20px;
.headerTitle {
font-size: 18px;
font-weight: 600;
color: #333333;
line-height: 25px;
// margin-left: 24px;
}
}
.main {
width: 100%;
height: 100%;
// background-color: #bfa;
overflow-y: auto;
padding-right: 10px;
.endtime {
font-size: 16px;
font-weight: 500;
color: #333333;
}
.search {
width: 100%;
display: flex;
flex-wrap: wrap;
margin-top: 20px;
justify-content: space-between;
.sealeft {
display: flex;
flex-wrap: wrap;
.namecon {
display: flex;
flex-wrap: nowrap;
margin-bottom: 10px;
.name {
margin-top: 8px;
white-space: nowrap;
}
}
}
.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/reset0.png);
background-size: 100% 100%;
margin-right: 7px;
}
}
.btn1 {
background: #4ea6ff;
color: #ffffff;
}
.btn2 {
background: #4ea6ff;
color: #fff;
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: 18px;
height: 18px;
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/export1.png);
background-size: 100% 100%;
margin-right: 7px;
}
}
.btn1 {
background: #4ea6ff;
color: #ffffff;
}
.btn2 {
background: #4ea6ff;
color: #fff;
border: 1px solid #4ea6ff;
}
}
.tab {
th.h {
background-color: #eff4fc !important;
}
.ant-table-tbody
> tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)
> td {
background: #f6f9fd;
}
.tableBox {
.pa {
// left: 0;
margin-top: 15px;
width: 100%;
// height: 20px;
// background-color: red;
display: flex;
justify-content: center;
// position: absolute;
// bottom: 20px;
.ant-pagination-prev,
.ant-pagination-next,
.ant-pagination-item,
.ant-pagination-options {
margin-bottom: 10px;
}
}
}
}
}
.btnn {
height: 72px;
width: 100%;
position: absolute;
bottom: 0;
left: 0;
background-color: #fff;
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>