Files
fe-manage/src/components/drawers/AddGroupMembers.vue
2022-12-04 21:29:00 +08:00

638 lines
16 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
:visible="AGMembers"
class="drawerStyle AddGroupMembers"
placement="right"
width="70%"
@after-visible-change="afterVisibleChange"
>
<div class="drawerMain">
<div class="header">
<div class="headerTitle">添加组员</div>
<img
style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png"
@click="closeDrawer"
/>
</div>
<div class="main">
<div class="search">
<div class="namecon" style="margin-right: 30px">
<div class="name">组员名称</div>
<a-input
v-model:value="name"
style="width: 270px; height: 40px; border-radius: 8px"
placeholder="请输入姓名"
/>
</div>
<div class="btns">
<div class="btn btn1" style="margin-right: 20px" @click="searchStu">
<div class="img1"></div>
<div class="wz">搜索</div>
</div>
<div class="btn btn2" @click="resetSearch">
<div class="img2"></div>
<div class="wz">重置</div>
</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">{{ choosed }}</div>
<div class="text"></div>
<div class="text3">列表选项总计</div>
<div class="text4">{{ total }}</div>
</div>
<div class="right" @click="clearChooseStu">清空</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="tableDataTotal === -1 ? true : false"
expandRowByClick="true"
:scroll="{ x: 900 }"
@expand="expandTable"
:pagination="false"
:row-selection="{
columnWidth: 30,
selectedRowKeys: selectedRowKeys,
onChange: onSelectChange,
}"
/>
<div class="pa">
<a-pagination
v-if="total > 10"
showSizeChanger="true"
showQuickJumper="true"
hideOnSinglePage="true"
:pageSize="pageSize"
:current="currentPage"
:total="total"
class="pagination"
@change="changePaginationStu"
/>
</div>
</div>
</div>
<div class="btnn">
<button class="btn1" @click="closeDrawer">取消</button>
<button class="btn2" @click="addStu">确定</button>
</div>
</div>
</a-drawer>
</template>
<script>
import { toRefs, reactive } from "vue";
import { getProjStu } from "../../api/indexProjStu";
import { toDate } from "../../api/method";
import * as api from "../../api/index1";
import { message } from "ant-design-vue";
// import { message } from "ant-design-vue";
export default {
name: "AddGroupMembers",
props: {
AGMembers: {
type: Boolean,
default: false,
},
chooseGroupId: {
type: Number,
default: null,
},
projectId: {
type: Number,
default: null,
},
},
setup(props, ctx) {
const state = reactive({
AGMembers: false,
name: null,
pageSize: 10,
currentPage: 1,
total: null,
tableDataTotal: -1,
selectedRowKeys: [],
choosed: 0, //勾选的学员总数
selectedRows: [], //选择的学员的id值
selectedRowStu: [], //选择的学员id和名字数组
tabledata: [
// {
// key: 1,
// name: "小李",
// bum: "产品部",
// gangw: "产品经理",
// progress: "20%",
// operations: "删除",
// },
],
tablecolumns: [
{
title: "姓名",
dataIndex: "name",
key: "name",
width: 40,
align: "left",
className: "h head",
},
{
title: "部门",
dataIndex: "bum",
key: "bum",
width: 60,
align: "center",
className: "h",
},
{
title: "岗位",
dataIndex: "gangw",
key: "gangw",
width: 60,
align: "center",
className: "h",
},
// {
// title: "进度",
// dataIndex: "progress",
// key: "progress",
// width: 60,
// align: "center",
// className: "h",
// },
],
});
const closeDrawer = () => {
ctx.emit("update:AGMembers", false);
state.selectedRowKeys = [];
state.choosed = 0; //勾选的学员总数
state.selectedRows = []; //选择的学员的id值
state.selectedRowStu = []; //选择的学员id和名字数组
};
//把数据放到state里
const getTableDataList = (tableData) => {
let data = tableData;
let array = [];
data.map((value) => {
let obj = {
key: value.studentId,
projectId: value.projectId, //项目id
groupId: value.groupId, //小组id
group: value.groupName, //小组名
studentId: value.studentId, //学生id
currentStageId: value.currentStageId, //当前关卡id
name: value.name, //用户名
bum: value.userInfoBo.deptName, //部门
gangw: value.userInfoBo.jobName, //岗位
completeStageCnt: value.completeStageCnt, //当前完成阶段数
totalStageCnt: value.totalStageCnt, //总阶段数
progress: value.completeStageCnt + "/" + value.totalStageCnt,
stutime: toDate(value.beginStudyTime / 1000, "Y-M-D"), //开始学习时间
};
array.push(obj);
});
state.tabledata = array;
};
//获取学员列表
const getStu = (obj) => {
let objf = obj || {
deptIds: [], //部门
groupId: 0,
groupName: "",
name: state.name,
pageNo: state.currentPage,
pageSize: state.pageSize,
projectId: props.projectId,
topFlag: "",
};
getProjStu(objf).then((res) => {
if (res.data.code === 200) {
console.log(res.data.data, "获取学员列表");
// let leng = res.data.data.rows.length;
state.total = res.data.data.total;
state.tableDataTotal = res.data.data.total;
// if (leng > 0) {
// }
let arr = res.data.data.rows;
getTableDataList(arr);
}
});
};
const afterVisibleChange = (bool) => {
if (bool) {
getStu();
}
};
//分页
const changePaginationStu = (page) => {
state.currentPage = page;
getStu();
};
//勾选学员
const onSelectChange = (selectedRowKeys, selectedRows) => {
console.log("selectedRowKeys changed: ", selectedRowKeys, selectedRows);
state.selectedRowKeys = selectedRowKeys;
state.choosed = state.selectedRowKeys.length;
state.selectedRows = [];
let selectedRowStu = [];
selectedRows.map((item) => {
console.log(item.studentId);
state.selectedRows.push(item.studentId);
let obj = {
id: item.studentId,
name: item.name,
};
selectedRowStu.push(obj);
});
state.selectedRowStu = selectedRowStu;
};
//清空所选的学员
const clearChooseStu = () => {
state.selectedRowKeys = [];
state.choosed = 0;
};
//学员搜索
const searchStu = () => {
state.currentPage = 1;
getStu();
};
//重置
const resetSearch = () => {
state.name = null;
let obj = {
deptIds: [], //部门
groupName: "",
name: "",
pageNo: 1,
pageSize: 10,
projectId: props.projectId,
topFlag: "",
};
//重新获取列表
getStu(obj);
};
//向小组添加组员
const addStu = () => {
let obj = {
deptList: [],
groupList: [],
projectGroupId: props.chooseGroupId,
projectId: props.projectId,
studentList: state.selectedRowStu,
};
console.log("添加小组学员obj", obj);
api
.addStudentProject(obj)
.then((res) => {
console.log("添加小组学员成功", res);
message.success("添加成功");
ctx.emit("getStuPro");
closeDrawer();
})
.catch((err) => {
console.log("添加小组学员失败", err);
});
};
// console.log("chooseGroupId", props.chooseGroupId);
return {
...toRefs(state),
closeDrawer,
getStu,
getTableDataList,
afterVisibleChange,
changePaginationStu,
clearChooseStu,
onSelectChange,
searchStu,
resetSearch,
addStu,
};
},
};
</script>
<style lang="scss">
.AddGroupMembers {
.drawerMain {
min-width: 600px;
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;
// 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;
.endtime {
font-size: 16px;
font-weight: 500;
color: #333333;
}
.search {
width: 100%;
display: flex;
justify-content: space-between;
flex-wrap: wrap;
margin-top: 20px;
.namecon {
display: flex;
flex-wrap: nowrap;
margin-bottom: 10px;
.name {
margin-top: 8px;
}
// .name {
// margin-top: 8px;
// color: rgba(0, 0, 0, 0.85);
// font-size: 14px;
// font-weight: 400;
// }
}
.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: #409eff;
color: #ffffff;
}
.btn2 {
background: #ffffff;
color: #409eff;
border: 1px solid #409eff;
}
}
}
.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/courseManage/add0.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;
}
.img3 {
width: 17px;
height: 16px;
background-image: url(../../assets/images/projectadd/delete.png);
background-size: 100% 100%;
margin-right: 7px;
}
}
.btn1 {
background: #409eff;
color: #ffffff;
}
.btn2 {
background: #ffffff;
margin-right: 20px;
color: #409eff;
border: 1px solid #409eff;
}
}
.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;
// background-color: #bfa;
.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;
// padding-left: 45px !important;
}
.ant-table-thead > tr > th {
background-color: rgba(239, 244, 252, 1) !important;
color: rgba(0, 0, 0, 0.85);
}
.ant-table-cell {
color: rgba(0, 0, 0, 0.65);
}
.ant-table-selection-column {
padding: 0 !important;
}
th.h {
background-color: #eff4fc !important;
}
.head {
padding-left: 0px !important;
}
.operation {
color: rgba(56, 125, 247, 1);
cursor: pointer;
}
.ant-table-tbody
> tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)
> td {
background: #f6f9fd;
}
.ant-table-tbody > tr > td {
border-bottom: 1px solid rgba(240, 244, 254, 1);
}
.pa {
// left: 0;
margin-top: 15px;
width: 100%;
// height: 20px;
// background-color: red;
display: flex;
justify-content: center;
// position: absolute;
// bottom: 20px;
}
}
}
.btnn {
height: 72px;
width: 100%;
position: absolute;
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>