feat:修改面授等

This commit is contained in:
lixg
2023-02-27 21:02:14 +08:00
parent e6d3a5af8d
commit 8f7a3305e5
5 changed files with 451 additions and 140 deletions

2
.env
View File

@@ -33,4 +33,4 @@ VITE_BOE_CASS_DETAIL_URL=//u-pre.boe.com/pc/case/detail?id=
#考试 #考试
VITE_BOE_EXAM_DETAIL_URL=//u-pre.boe.com/pc/exam/test?id= VITE_BOE_EXAM_DETAIL_URL=//u-pre.boe.com/pc/exam/test?id=
#h5的基本url #h5的基本url
VUE_APP_H5=//u-pre.boe.com/mobile/student-h5 VUE_APP_H5=//u-pre.boe.com/student-h5

View File

@@ -1,32 +1,46 @@
<template> <template>
<a-drawer :visible="AAvisible" class="largeDrawerStyle" placement="right" width="80%" <a-drawer
@after-visible-change="afterVisibleChange"> :visible="AAvisible"
class="largeDrawerStyle"
placement="right"
width="80%"
@after-visible-change="afterVisibleChange"
>
<div class="drawerMain"> <div class="drawerMain">
<div class="header"> <div class="header">
<div class="headerTitle">{{ datasource.type == 6 ? "直播" : "活动" }}考勤</div> <div class="headerTitle">
<img style="width: 29px; height: 29px; cursor: pointer" src="../../assets/images/basicinfo/close.png" {{ datasource.type == 6 ? "直播" : "活动" }}考勤
@click="closeDrawer" /> </div>
<img
style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png"
@click="closeDrawer"
/>
</div> </div>
<div class="centermain"> <div class="centermain">
<div class="titl"> <div class="titl">
<div class="endtime"> <div class="endtime">
起止时间{{ 起止时间{{ datasource.startTime ? datasource.startTime : "-" }}
datasource.startTime ? datasource.startTime : "-"
}}
{{ datasource.endTime ? datasource.endTime : "-" }} {{ datasource.endTime ? datasource.endTime : "-" }}
</div> </div>
<div class="endtime" style="margin-left: 64px">签到时间{{ beginTime }} {{ endTime }}</div> <div class="endtime" style="margin-left: 64px">
<!--<div class="endtime" style="margin-left: 40px">签退时间{{ endTime }}</div>--> 签到时间{{ beginTime }} {{ endTime }}
</div>
<!--<div class="endtime" style="margin-left: 40px">签退时间{{ endTime }}</div>-->
</div> </div>
<div class="search"> <div class="search">
<div class="leftchoose"> <div class="leftchoose">
<div class="namecon" style="margin-right: 30px"> <div class="namecon" style="margin-right: 30px">
<div class="name">姓名</div> <div class="name">姓名</div>
<a-input v-model:value="name" style="width: 270px; height: 40px; border-radius: 8px" placeholder="请输入姓名" <a-input
maxlength="20" /> v-model:value="name"
style="width: 270px; height: 40px; border-radius: 8px"
placeholder="请输入姓名"
maxlength="20"
/>
</div> </div>
<!-- <div class="namecon" style="margin-right: 30px"> <!-- <div class="namecon" style="margin-right: 30px">
<div class="name">考勤</div> <div class="name">考勤</div>
@@ -45,14 +59,24 @@
<div class="namecon"> <div class="namecon">
<div class="name">签到状态</div> <div class="name">签到状态</div>
<div class="select"> <div class="select">
<a-select v-model:value="projectName2" style="width: 160px" placeholder="请选择" :options="projectNameList2" <a-select
@change="selectProjectName2" allowClear></a-select> v-model:value="projectName2"
style="width: 160px"
placeholder="请选择"
:options="projectNameList2"
@change="selectProjectName2"
allowClear
></a-select>
</div> </div>
</div> </div>
</div> </div>
<div class="btns"> <div class="btns">
<div class="btn btn1" style="margin-right: 20px" @click="searchTaskList"> <div
class="btn btn1"
style="margin-right: 20px"
@click="searchTaskList"
>
<div class="img1"></div> <div class="img1"></div>
<div class="wz">搜索</div> <div class="wz">搜索</div>
</div> </div>
@@ -89,11 +113,18 @@
</div> --> </div> -->
<div class="tableBox" style="margin-top: 30px"> <div class="tableBox" style="margin-top: 30px">
<a-table style="border: 1px solid #f2f6fe" :columns="tableDataFunc()" :data-source="tableData" <a-table
:loading="tableDataTotalLoading" :scroll="{ x: 1300 }" :pagination="false" :row-selection="{ style="border: 1px solid #f2f6fe"
:columns="tableDataFunc()"
:data-source="tableData"
:loading="tableDataTotalLoading"
:scroll="{ x: 1300 }"
:pagination="false"
:row-selection="{
selectedRowKeys: selectedRowKeys, selectedRowKeys: selectedRowKeys,
onChange: onSelectChange, onChange: onSelectChange,
}" /> }"
/>
</div> </div>
</div> </div>
<div class="btnn"> <div class="btnn">
@@ -103,7 +134,13 @@
</div> </div>
</a-drawer> </a-drawer>
<!-- 批量签到弹窗 --> <!-- 批量签到弹窗 -->
<a-modal v-model:visible="qdModal" :footer="null" :closable="closeCopy" wrapClassName="CopyModal" centered="true"> <a-modal
v-model:visible="qdModal"
:footer="null"
:closable="closeCopy"
wrapClassName="CopyModal"
centered="true"
>
<div class="delete"> <div class="delete">
<div class="del_header"></div> <div class="del_header"></div>
<div class="del_main"> <div class="del_main">
@@ -128,7 +165,13 @@
</a-modal> </a-modal>
<!-- 单独签到弹窗 --> <!-- 单独签到弹窗 -->
<a-modal v-model:visible="singleqdModal" :footer="null" :closable="closeCopy" wrapClassName="CopyModal" centered="true"> <a-modal
v-model:visible="singleqdModal"
:footer="null"
:closable="closeCopy"
wrapClassName="CopyModal"
centered="true"
>
<div class="delete"> <div class="delete">
<div class="del_header"></div> <div class="del_header"></div>
<div class="del_main"> <div class="del_main">
@@ -152,7 +195,13 @@
</div> </div>
</a-modal> </a-modal>
<!-- 单独签退弹窗 --> <!-- 单独签退弹窗 -->
<a-modal v-model:visible="singleqtModal" :footer="null" :closable="closeCopy" wrapClassName="CopyModal" centered="true"> <a-modal
v-model:visible="singleqtModal"
:footer="null"
:closable="closeCopy"
wrapClassName="CopyModal"
centered="true"
>
<div class="delete"> <div class="delete">
<div class="del_header"></div> <div class="del_header"></div>
<div class="del_main"> <div class="del_main">
@@ -176,7 +225,13 @@
</div> </div>
</a-modal> </a-modal>
<!-- 单独请假弹窗 --> <!-- 单独请假弹窗 -->
<a-modal v-model:visible="singleqjModal" :footer="null" :closable="closeCopy" wrapClassName="CopyModal" centered="true"> <a-modal
v-model:visible="singleqjModal"
:footer="null"
:closable="closeCopy"
wrapClassName="CopyModal"
centered="true"
>
<div class="delete"> <div class="delete">
<div class="del_header"></div> <div class="del_header"></div>
<div class="del_main"> <div class="del_main">
@@ -203,8 +258,12 @@
<SignQR v-model:signQRvisible="signQRvisible" /> <SignQR v-model:signQRvisible="signQRvisible" />
<!-- 二维码弹窗 --> <!-- 二维码弹窗 -->
<two-dimensional-code v-model:codevisible="codevisible" :codeInfo="codeInfo" :index="codeIndex" <two-dimensional-code
:type="codeType == 1 ? '课程二维码' : codeType == 2 ? '签到二维码' : ''" /> v-model:codevisible="codevisible"
:codeInfo="codeInfo"
:index="codeIndex"
:type="codeType == 1 ? '课程二维码' : codeType == 2 ? '签到二维码' : ''"
/>
<!-- 二维码弹窗 --> <!-- 二维码弹窗 -->
</template> </template>
@@ -219,7 +278,7 @@ export default {
name: "ActiveAttendance", name: "ActiveAttendance",
components: { components: {
SignQR, SignQR,
TwoDimensionalCode TwoDimensionalCode,
}, },
props: { props: {
AAvisible: { AAvisible: {
@@ -239,7 +298,7 @@ export default {
types: { types: {
type: Number, type: Number,
default: null, default: null,
} },
}, },
setup(props, ctx) { setup(props, ctx) {
@@ -267,7 +326,7 @@ export default {
id: 2, id: 2,
value: "2", value: "2",
label: "请假", label: "请假",
} },
], ],
projectNameList2: [ projectNameList2: [
{ {
@@ -279,7 +338,7 @@ export default {
id: 2, id: 2,
value: "2", value: "2",
label: "异常", label: "异常",
} },
], ],
selectedRowKeys: [], selectedRowKeys: [],
tableData: [ tableData: [
@@ -295,7 +354,7 @@ export default {
signIn: false, //签到 signIn: false, //签到
signOut: false, //签退 signOut: false, //签退
leave: false, //请假 leave: false, //请假
} },
], ],
options: [ options: [
{ {
@@ -393,9 +452,12 @@ export default {
const getTableData = () => { const getTableData = () => {
// debugger // debugger
console.log('当前是项目还是路径图 1 项目 2 路径图', props) console.log("当前是项目还是路径图 1 项目 2 路径图", props);
console.log('当前是项目还是路径图 1 项目 2 路径图', props.types) console.log("当前是项目还是路径图 1 项目 2 路径图", props.types);
if (props.datasource.type == 6 && props.types == 2 || props.datasource.type == 9 && props.types == 2) { if (
(props.datasource.type == 6 && props.types == 2) ||
(props.datasource.type == 9 && props.types == 2)
) {
// 此处为获取评估学员的接口 - 如后续还有用到此接口的公共任务可直接在if里面加||判断即可 // 此处为获取评估学员的接口 - 如后续还有用到此接口的公共任务可直接在if里面加||判断即可
console.log("我是传递的查询参数", { console.log("我是传递的查询参数", {
pageNo: state.currentPage, pageNo: state.currentPage,
@@ -414,7 +476,7 @@ export default {
pageNo: state.currentPage, pageNo: state.currentPage,
pageSize: state.pageSize, pageSize: state.pageSize,
currentStageId: props.datasource.chapterId, currentStageId: props.datasource.chapterId,
type: 2, // 1项目 2 路径 type: 2, // 1项目 2 路径
pid: props.datasource.routerId, pid: props.datasource.routerId,
taskId: props.datasource.id, taskId: props.datasource.id,
taskType: props.datasource.type, taskType: props.datasource.type,
@@ -425,10 +487,11 @@ export default {
.then((res) => { .then((res) => {
console.log(res); console.log(res);
if (res.status == 200) { if (res.status == 200) {
let keyarr = [] let keyarr = [];
for (let i = 0; i < res.data.data.records.length; i++) { for (let i = 0; i < res.data.data.records.length; i++) {
res.data.data.records[i].key = res.data.data.records[i].studentId res.data.data.records[i].key =
keyarr.push(res.data.data.records[i]) res.data.data.records[i].studentId;
keyarr.push(res.data.data.records[i]);
} }
state.tableData = keyarr; state.tableData = keyarr;
state.tableDataTotal = res.data.data.total; state.tableDataTotal = res.data.data.total;
@@ -440,7 +503,10 @@ export default {
state.tableDataTotalLoading = false; state.tableDataTotalLoading = false;
state.tableData = []; state.tableData = [];
}); });
} else if (props.datasource.type == 6 && props.types == 1 || props.datasource.type == 9 && props.types == 1) { } else if (
(props.datasource.type == 6 && props.types == 1) ||
(props.datasource.type == 9 && props.types == 1)
) {
// 此处为获取评估学员的接口 - 如后续还有用到此接口的公共任务可直接在if里面加||判断即可 // 此处为获取评估学员的接口 - 如后续还有用到此接口的公共任务可直接在if里面加||判断即可
console.log("我是传递的查询参数", { console.log("我是传递的查询参数", {
pageNo: state.currentPage, pageNo: state.currentPage,
@@ -452,28 +518,29 @@ export default {
taskType: props.datasource.type, taskType: props.datasource.type,
status: state.projectName, status: state.projectName,
studentName: state.name, studentName: state.name,
signStatus: state.projectName2 signStatus: state.projectName2,
}); });
api api
.AssessmentManagementMessage({ .AssessmentManagementMessage({
pageNo: state.currentPage, pageNo: state.currentPage,
pageSize: state.pageSize, pageSize: state.pageSize,
currentStageId: props.datasource.stageId, currentStageId: props.datasource.stageId,
type: 1, // 1项目 2 路径 type: 1, // 1项目 2 路径
pid: props.datasource.projectId, pid: props.datasource.projectId,
taskId: props.datasource.id, taskId: props.datasource.id,
taskType: props.datasource.type, taskType: props.datasource.type,
status: state.projectName, status: state.projectName,
studentName: state.name, studentName: state.name,
signStatus: state.projectName2 signStatus: state.projectName2,
}) })
.then((res) => { .then((res) => {
console.log(res); console.log(res);
if (res.status == 200) { if (res.status == 200) {
let keyarr = [] let keyarr = [];
for (let i = 0; i < res.data.data.records.length; i++) { for (let i = 0; i < res.data.data.records.length; i++) {
res.data.data.records[i].key = res.data.data.records[i].studentId res.data.data.records[i].key =
keyarr.push(res.data.data.records[i]) res.data.data.records[i].studentId;
keyarr.push(res.data.data.records[i]);
} }
state.tableData = keyarr; state.tableData = keyarr;
state.tableDataTotal = res.data.data.total; state.tableDataTotal = res.data.data.total;
@@ -538,7 +605,7 @@ export default {
taskType: Number(props.datasource.type), taskType: Number(props.datasource.type),
type: 1, type: 1,
}; };
console.log(obj) console.log(obj);
state.tableDataTotalLoading = true; state.tableDataTotalLoading = true;
api api
@@ -571,7 +638,10 @@ export default {
customRender: (text) => { customRender: (text) => {
return ( return (
<div class="racona"> <div class="racona">
<span> {text.record.studentUserNo ? text.record.studentUserNo : "-"}</span> <span>
{" "}
{text.record.studentUserNo ? text.record.studentUserNo : "-"}
</span>
</div> </div>
); );
}, },
@@ -587,7 +657,10 @@ export default {
customRender: (text) => { customRender: (text) => {
return ( return (
<div class="racona"> <div class="racona">
<span> {text.record.studentName ? text.record.studentName : "-"}</span> <span>
{" "}
{text.record.studentName ? text.record.studentName : "-"}
</span>
</div> </div>
); );
}, },
@@ -603,7 +676,12 @@ export default {
customRender: (text) => { customRender: (text) => {
return ( return (
<div class="racona"> <div class="racona">
<span> {text.record.studentDepartName ? text.record.studentDepartName : "-"}</span> <span>
{" "}
{text.record.studentDepartName
? text.record.studentDepartName
: "-"}
</span>
</div> </div>
); );
}, },
@@ -619,7 +697,12 @@ export default {
customRender: (text) => { customRender: (text) => {
return ( return (
<div class="racona"> <div class="racona">
<span> {text.record.studentJobName ? text.record.studentJobName : "-"}</span> <span>
{" "}
{text.record.studentJobName
? text.record.studentJobName
: "-"}
</span>
</div> </div>
); );
}, },
@@ -634,7 +717,10 @@ export default {
customRender: (text) => { customRender: (text) => {
return ( return (
<div class="racona"> <div class="racona">
<span> {text.record.signTime ? text.record.signTime : "-"}</span> <span>
{" "}
{text.record.signTime ? text.record.signTime : "-"}
</span>
</div> </div>
); );
}, },
@@ -654,8 +740,8 @@ export default {
{text.record.signStatus {text.record.signStatus
? "签到" ? "签到"
: text.record.leaveStatus : text.record.leaveStatus
? "请假" ? "请假"
: "-"} : "-"}
</span> </span>
</div> </div>
); );
@@ -671,7 +757,18 @@ export default {
customRender: (text) => { customRender: (text) => {
return ( return (
<div class="racona"> <div class="racona">
<span>{text.record.signStatus == null && new Date().getTime() > new Date(state.endTime).getTime() ? "异常" : text.record.signStatus ? "正常" : text.record.leaveStatus ? "异常" : text.record.signStatus == null ? "-" : "异常"}</span> <span>
{text.record.signStatus == null &&
new Date().getTime() > new Date(state.endTime).getTime()
? "异常"
: text.record.signStatus
? "正常"
: text.record.leaveStatus
? "异常"
: text.record.signStatus == null
? "-"
: "异常"}
</span>
</div> </div>
); );
}, },
@@ -685,15 +782,23 @@ export default {
align: "center", align: "center",
customRender: (value) => { customRender: (value) => {
return ( return (
<div class="opa" style='display:flex;justify-content:center;align-items:center;'> <div
class="opa"
style="display:flex;justify-content:center;align-items:center;"
>
<div <div
onClick={() => { onClick={() => {
{/* debugger */ } {
/* debugger */
}
console.log("点击签到", value); console.log("点击签到", value);
// 获取当前时间 // 获取当前时间
{/* showsingleqdModal(); */ } {
{/* AttendanceSign */ } /* showsingleqdModal(); */
}
{
/* AttendanceSign */
}
let obj1 = { let obj1 = {
courseId: Number(props.datasource.courseId), courseId: Number(props.datasource.courseId),
@@ -713,33 +818,42 @@ export default {
type: 2, type: 2,
}; };
// 1是项目 2路径图 3开课 // 1是项目 2路径图 3开课
console.log(obj1, obj2) console.log(obj1, obj2);
state.tableDataTotalLoading = true; state.tableDataTotalLoading = true;
api.AttendanceSign(props.types === '1' ? obj1 : obj2).then(res => { api
console.log('res----签到是否成功', res) .AttendanceSign(props.types === "1" ? obj1 : obj2)
message.destroy() .then((res) => {
message.info('签到成功') console.log("res----签到是否成功", res);
getTableData(); message.destroy();
}).catch(err => { message.info("签到成功");
state.tableDataTotalLoading = false; getTableData();
console.log(err) })
}) .catch((err) => {
state.tableDataTotalLoading = false;
console.log(err);
});
}} }}
style="display:flex;justify-content:center;align-items:center;margin-right:12px;cursor:pointer;"> style="display:flex;justify-content:center;align-items:center;margin-right:12px;cursor:pointer;"
{value.record.signStatus ? >
<div style='width:16px;height:16px;margin-right:6px;border-radius:16px;border:1px solid #ccc;display:flex;justify-content:center;align-items:center;'> {value.record.signStatus ? (
<div style='width:8px;height:8px;border-radius:8px;background:#4ea6ff;'></div> <div style="width:16px;height:16px;margin-right:6px;border-radius:16px;border:1px solid #ccc;display:flex;justify-content:center;align-items:center;">
</div> : <div style="width:8px;height:8px;border-radius:8px;background:#4ea6ff;"></div>
<div style='width:16px;height:16px;margin-right:6px;border-radius:16px;border:1px solid #ccc;'></div> </div>
} ) : (
<div style="width:16px;height:16px;margin-right:6px;border-radius:16px;border:1px solid #ccc;"></div>
)}
<div>签到</div> <div>签到</div>
</div> </div>
<div <div
onClick={() => { onClick={() => {
console.log("点击请假", value); console.log("点击请假", value);
{/* showsingleqjModal(); */ } {
/* showsingleqjModal(); */
}
{/* AttendanceLeave */ } {
/* AttendanceLeave */
}
let obj = { let obj = {
courseId: Number(props.datasource.courseId), courseId: Number(props.datasource.courseId),
routerId: Number(props.datasource.routerId), routerId: Number(props.datasource.routerId),
@@ -756,30 +870,35 @@ export default {
taskType: Number(props.datasource.type), taskType: Number(props.datasource.type),
type: 2, type: 2,
}; };
console.log(obj, obj2) console.log(obj, obj2);
state.tableDataTotalLoading = true; state.tableDataTotalLoading = true;
api.AttendanceLeave(props.types == 1 ? obj : obj2).then(res => { api
console.log('res----请假是否成功', res) .AttendanceLeave(props.types == 1 ? obj : obj2)
message.destroy() .then((res) => {
message.info('请假成功') console.log("res----请假是否成功", res);
getTableData(); message.destroy();
}).catch(err => { message.info("请假成功");
state.tableDataTotalLoading = false; getTableData();
console.log(err) })
}) .catch((err) => {
state.tableDataTotalLoading = false;
console.log(err);
});
}} }}
style="display:flex;justify-content:center;align-items:center;cursor:pointer;"> style="display:flex;justify-content:center;align-items:center;cursor:pointer;"
{value.record.leaveStatus ? >
<div style='width:16px;height:16px;margin-right:6px;border-radius:16px;border:1px solid #ccc;display:flex;justify-content:center;align-items:center;'> {value.record.leaveStatus ? (
<div style='width:8px;height:8px;border-radius:8px;background:#4ea6ff;'></div> <div style="width:16px;height:16px;margin-right:6px;border-radius:16px;border:1px solid #ccc;display:flex;justify-content:center;align-items:center;">
</div> : <div style="width:8px;height:8px;border-radius:8px;background:#4ea6ff;"></div>
<div style='width:16px;height:16px;margin-right:6px;border-radius:16px;border:1px solid #ccc;'></div> </div>
} ) : (
<div style="width:16px;height:16px;margin-right:6px;border-radius:16px;border:1px solid #ccc;"></div>
)}
<div>请假</div> <div>请假</div>
</div> </div>
</div> </div>
) );
} },
}, },
]; ];
return columns; return columns;
@@ -791,9 +910,9 @@ export default {
}; };
const showqdModal = () => { const showqdModal = () => {
if (state.selectedStudents.length == 0) { if (state.selectedStudents.length == 0) {
message.destroy() message.destroy();
message.error('请选择学员') message.error("请选择学员");
return return;
} }
state.qdModal = true; state.qdModal = true;
}; };
@@ -820,14 +939,16 @@ export default {
state.singleqjModal = false; state.singleqjModal = false;
}; };
const signQR = () => { const signQR = () => {
console.log("props.datasource", props.datasource);
state.codevisible = true; state.codevisible = true;
state.codeInfo = { state.codeInfo = {
title: "【签到】二维码", title: "【签到】二维码",
name: props.datasource?.name, name: props.datasource?.name,
url: url:
process.env.VUE_APP_BASE_API + process.env.VUE_APP_BASE_API +
`/admin/student/studentSign?taskId=${props.datasource.id `/admin/student/studentSign?taskId=${props.datasource.id}&taskType=${
}&taskType=${props.datasource.type}&type=${2}`, props.datasource.type
}&type=${2}`,
}; };
console.log("codeInfo", state.codeInfo); console.log("codeInfo", state.codeInfo);
state.codeIndex = 0; state.codeIndex = 0;
@@ -855,20 +976,21 @@ export default {
// 导出数据 // 导出数据
function exportTaskStu() { function exportTaskStu() {
{/* debugger */ } {
console.log("props.datasource此处的taskId 应该是router_task 表中主键", props.datasource); /* debugger */
}
console.log(
"props.datasource此处的taskId 应该是router_task 表中主键",
props.datasource
);
console.log("props.datasource", props.datasource); console.log("props.datasource", props.datasource);
if (props.types == 2) { if (props.types == 2) {
window.open( window.open(
`${process.env.VUE_APP_BASE_API `${process.env.VUE_APP_BASE_API}/admin/student/exportTaskStudent?currentStageId=${props.datasource.chapterId}&type=2&pid=${props.datasource.routerId}&thirdType=1&taskId=${props.datasource.id}&taskType=${props.datasource.type}`
}/admin/student/exportTaskStudent?currentStageId=${props.datasource.chapterId
}&type=2&pid=${props.datasource.routerId}&thirdType=1&taskId=${props.datasource.id}&taskType=${props.datasource.type}`
); );
} else { } else {
window.open( window.open(
`${process.env.VUE_APP_BASE_API `${process.env.VUE_APP_BASE_API}/admin/student/exportTaskStudent?currentStageId=${props.datasource.stageId}&type=1&pid=${props.datasource.projectId}&thirdType=1&taskId=${props.datasource.id}&taskType=${props.datasource.type}`
}/admin/student/exportTaskStudent?currentStageId=${props.datasource.stageId
}&type=1&pid=${props.datasource.projectId}&thirdType=1&taskId=${props.datasource.id}&taskType=${props.datasource.type}`
); );
} }
@@ -911,7 +1033,7 @@ export default {
batchSign, batchSign,
searchTaskList, searchTaskList,
resetTaskList, resetTaskList,
exportTaskStu exportTaskStu,
}; };
}, },
}; };
@@ -1157,7 +1279,7 @@ export default {
padding: 0px !important; padding: 0px !important;
} }
.ant-table-thead>tr>th { .ant-table-thead > tr > th {
background-color: rgba(239, 244, 252, 1); background-color: rgba(239, 244, 252, 1);
} }
@@ -1165,7 +1287,11 @@ export default {
background-color: #eff4fc !important; background-color: #eff4fc !important;
} }
.ant-table-tbody>tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)>td { .ant-table-tbody
> tr:hover:not(.ant-table-expanded-row):not(
.ant-table-row-selected
)
> td {
background: #f6f9fd; background: #f6f9fd;
} }
} }

View File

@@ -96,11 +96,42 @@
</a-drawer> </a-drawer>
<a-button @click="openDrawer" type="link"><slot></slot></a-button> <a-button @click="openDrawer" type="link"><slot></slot></a-button>
</div> </div>
<!-- 删除弹窗 -->
<a-modal
v-model:visible="deleteModalVisible"
:footer="null"
wrapClassName="deleteModal1"
centered="true"
>
<div class="delete">
<div class="del_header"></div>
<div class="del_main">
<div class="header">
<div class="icon"></div>
<span>提示</span>
<div class="close_exit" @click="closeSameModal"></div>
</div>
<div class="body">
<span>确定删除?</span>
<span style="margin-top: 20px">数据删除后不可恢复!</span>
</div>
<div class="del_btnbox">
<div class="del_btn btn1" @click="closeSameModal">
<div class="btnText">取消</div>
</div>
<div class="del_btn btn2" @click="sureSameModal">
<div class="btnText">确定</div>
</div>
</div>
</div>
</div>
</a-modal>
</template> </template>
<script setup> <script setup>
import { import {
computed, computed,
createVNode, // createVNode,
defineProps, defineProps,
defineExpose, defineExpose,
ref, ref,
@@ -109,8 +140,8 @@ import {
import { usePage } from "@/api/request"; import { usePage } from "@/api/request";
import { STUDENT_LIST } from "@/api/apis"; import { STUDENT_LIST } from "@/api/apis";
import { delStudentList } from "@/api/index1"; import { delStudentList } from "@/api/index1";
import { ExclamationCircleOutlined } from "@ant-design/icons-vue"; // import { ExclamationCircleOutlined } from "@ant-design/icons-vue";
import { Modal } from "ant-design-vue"; // import { Modal } from "ant-design-vue";
const props = defineProps({ const props = defineProps({
type: Number, type: Number,
@@ -220,23 +251,42 @@ function search() {
searchParams.value.studentName = searchName.value; searchParams.value.studentName = searchName.value;
searchParams.value.pageNo = 1; searchParams.value.pageNo = 1;
} }
const deleteModalVisible = ref(false);
const deleteId = ref(null);
function del(id) { function del(id) {
Modal.confirm({ deleteModalVisible.value = true;
title: () => "确定删除?", deleteId.value = id;
icon: () => createVNode(ExclamationCircleOutlined), // Modal.confirm({
content: () => "数据删除后不可恢复!", // title: () => "确定删除?",
okText: () => "确定", // icon: () => createVNode(ExclamationCircleOutlined),
okType: "danger", // content: () => "数据删除后不可恢复!",
cancelText: () => "取消", // okText: () => "确定",
onOk() { // okType: "danger",
if (id) { // cancelText: () => "取消",
loading.value = true; // onOk() {
delStudentList({ ids: [id] }).then(() => searchStu()); // if (id) {
} // loading.value = true;
}, // delStudentList({ ids: [id] }).then(() => searchStu());
}); // }
// },
// });
} }
//确定删除
const sureSameModal = () => {
if (deleteId.value) {
loading.value = true;
delStudentList({ ids: [deleteId.value] }).then(() => searchStu());
deleteModalVisible.value = false;
}
};
//取消
const closeSameModal = () => {
deleteModalVisible.value = false;
deleteId.value = null;
};
const closeDrawer = () => { const closeDrawer = () => {
visiable.value = false; visiable.value = false;
}; };
@@ -511,4 +561,133 @@ defineExpose({
} }
} }
} }
.deleteModal1 {
.ant-modal {
width: 424px !important;
height: 258px !important;
.ant-modal-content {
width: 424px !important;
height: 258px !important;
.ant-modal-body {
width: 424px !important;
height: 258px !important;
padding: 0 !important;
.delete {
z-index: 999;
width: 424px;
height: 258px;
background: #ffffff;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.21);
border-radius: 4px;
// position: absolute;
// left: 50%;
// top: 10%;
// transform: translate(-50%, -50%);
.del_header {
position: absolute;
width: calc(100%);
height: 68px;
background: linear-gradient(
rgba(78, 166, 255, 0.2) 0%,
rgba(78, 166, 255, 0) 100%
);
}
.del_main {
width: 100%;
position: relative;
.header {
display: flex;
align-items: center;
padding-top: 20px;
padding-left: 26px;
font-size: 16px;
.icon {
width: 16px;
height: 16px;
margin-right: 10px;
background-image: url(@/assets/images/taskpage/gan.png);
background-size: 100% 100%;
}
.close_exit {
position: absolute;
right: 42px;
cursor: pointer;
width: 20px;
height: 20px;
background-image: url(@/assets/images/coursewareManage/close.png);
background-size: 100% 100%;
}
}
.body {
width: 100%;
margin: 34px auto 56px auto;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
// background-color: red;
position: relative;
.back {
position: absolute;
top: 30px;
font-size: 12px;
font-weight: 400;
color: #666666;
}
}
.del_btnbox {
display: flex;
margin: 30px auto;
justify-content: center;
.del_btn {
width: 100px;
height: 40px;
background: rgba(64, 158, 255, 0);
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
cursor: pointer;
.btnText {
font-size: 14px;
font-weight: 400;
line-height: 40px;
}
}
.btn1 {
border: 1px solid rgba(64, 158, 255, 1);
color: #4ea6ff;
margin-right: 14px;
}
.btn2 {
background-color: #4ea6ff;
color: #ffffff;
}
}
}
}
}
}
.ant-modal-close-x {
display: none;
}
}
}
</style> </style>

View File

@@ -355,11 +355,11 @@
:courseType="type" :courseType="type"
/> />
<!-- 有重复添加的项目时的弹窗 --> <!-- 删除弹窗 -->
<a-modal <a-modal
v-model:visible="deleteModalVisible" v-model:visible="deleteModalVisible"
:footer="null" :footer="null"
wrapClassName="deleteModal" wrapClassName="deleteModal1"
centered="true" centered="true"
> >
<div class="delete"> <div class="delete">
@@ -372,7 +372,7 @@
</div> </div>
<div class="body"> <div class="body">
<span>确定删除?</span> <span>确定删除?</span>
<span>数据删除后不可恢复</span> <span style="margin-top: 20px">数据删除后不可恢复</span>
</div> </div>
<div class="del_btnbox"> <div class="del_btnbox">
<div class="del_btn btn1" @click="closeSameModal"> <div class="del_btn btn1" @click="closeSameModal">
@@ -718,6 +718,7 @@ const sureSameModal = () => {
//取消 //取消
const closeSameModal = () => { const closeSameModal = () => {
deleteModalVisible.value = false; deleteModalVisible.value = false;
deleteId.value = null;
}; };
function submitCall(flag) { function submitCall(flag) {
@@ -1069,7 +1070,7 @@ defineExpose({ getStuList, startLoading });
} }
} }
.deleteModal { .deleteModal1 {
.ant-modal { .ant-modal {
width: 424px !important; width: 424px !important;
height: 258px !important; height: 258px !important;
@@ -1193,6 +1194,9 @@ defineExpose({ getStuList, startLoading });
} }
} }
} }
.ant-modal-close-x {
display: none;
}
} }
} }
/*.delete { /*.delete {

View File

@@ -330,10 +330,7 @@
>提交审核 >提交审核
</a-button> </a-button>
<a-button <a-button
v-if=" v-if="record.auditStatus === 2 && checkPer(record.permissions)"
(record.auditStatus === 0 || record.auditStatus === -1) &&
checkPer(record.permissions)
"
@click="() => handleEdit(record, String(record.courseform))" @click="() => handleEdit(record, String(record.courseform))"
type="link" type="link"
>编辑 >编辑
@@ -366,7 +363,12 @@
type="link" type="link"
>管理 >管理
</a-button> </a-button>
<DropDown v-if="checkPer(record.permissions) && checkOwner(record.permissions)" value="授权"> <DropDown
v-if="
checkPer(record.permissions) && checkOwner(record.permissions)
"
value="授权"
>
<OwnerTableModelStudent :types="[10, 11, 12]" :id="record.id" <OwnerTableModelStudent :types="[10, 11, 12]" :id="record.id"
>权限名单</OwnerTableModelStudent >权限名单</OwnerTableModelStudent
> >
@@ -383,7 +385,7 @@
> >
<a-button <a-button
v-if=" v-if="
(record.auditStatus === 3 || record.auditStatus === 2) && record.auditStatus === 3 &&
record.status && record.status &&
checkPer(record.permissions) checkPer(record.permissions)
" "
@@ -1731,7 +1733,7 @@ import FJUpload from "@/components/common/FJUpload";
import { updateStudent } from "@/api/indexProjStu"; import { updateStudent } from "@/api/indexProjStu";
import { useStore } from "vuex"; import { useStore } from "vuex";
import DropDown from "@/components/common/DropDown"; import DropDown from "@/components/common/DropDown";
import { checkPer,checkOwner } from "@/utils/utils"; import { checkPer, checkOwner } from "@/utils/utils";
import dayjs from "dayjs"; import dayjs from "dayjs";
//列表表格 //列表表格