feat:增加项目/学习路径直播 考勤模块

This commit is contained in:
wyx
2023-01-30 18:04:57 +08:00
parent 698062c0fd
commit 9ca64c3987
4 changed files with 544 additions and 185 deletions

View File

@@ -37,3 +37,9 @@ export const QueryVoteManagementDetail = (obj) => http.post('/admin/vote/manage/
// 根据投票任务Id获取投票任务信息 // 根据投票任务Id获取投票任务信息
export const QueryVoteTaskDetailById = (obj) => http.post('/voteSubmit/queryVoteTaskDetailById', obj) export const QueryVoteTaskDetailById = (obj) => http.post('/voteSubmit/queryVoteTaskDetailById', obj)
// 直播考勤请假
export const AttendanceLeave = (obj) => http.post('/stu/task/attendance/leave', obj)
// 直播考勤签到
export const AttendanceSign = (obj) => http.post('/stu/task/attendance/sign', obj)

View File

@@ -8,7 +8,7 @@
> >
<div class="drawerMain"> <div class="drawerMain">
<div class="header"> <div class="header">
<div class="headerTitle">{{ title }}考勤</div> <div class="headerTitle">{{ datasource.type==6?"直播":"讨论" }}考勤</div>
<img <img
style="width: 29px; height: 29px; cursor: pointer" style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png" src="../../assets/images/basicinfo/close.png"
@@ -18,10 +18,15 @@
<div class="centermain"> <div class="centermain">
<div class="titl"> <div class="titl">
<div class="endtime"> <div class="endtime">
起止时间2022-07-21 14:00 2022-7-30 14:00 起止时间{{
datasource && datasource.startTime ? datasource.startTime : "-"
}}
{{ datasource && datasource.endTime ? datasource.endTime : "-" }}
</div> </div>
<div class="endtime" style="margin-left: 64px">签到时间14:00</div>
<div class="endtime" style="margin-left: 40px">退时间21:00</div> <div class="endtime" style="margin-left: 64px">时间{{beginTime}}</div>
<div class="endtime" style="margin-left: 40px">签退时间{{endTime}}</div>
</div> </div>
<div class="search"> <div class="search">
@@ -35,7 +40,7 @@
maxlength="20" 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>
<div class="select"> <div class="select">
<a-select <a-select
@@ -48,7 +53,7 @@
showSearch showSearch
></a-select> ></a-select>
</div> </div>
</div> </div> -->
<div class="namecon"> <div class="namecon">
<div class="name">签到状态</div> <div class="name">签到状态</div>
<div class="select"> <div class="select">
@@ -65,11 +70,11 @@
</div> </div>
<div class="btns"> <div class="btns">
<div class="btn btn1" style="margin-right: 20px"> <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>
<div class="btn btn2"> <div class="btn btn2" @click="resetTaskList">
<div class="img2"></div> <div class="img2"></div>
<div class="wz">重置</div> <div class="wz">重置</div>
</div> </div>
@@ -82,12 +87,12 @@
<div class="btn btn2" @click="showqdModal"> <div class="btn btn2" @click="showqdModal">
<div class="wz">批量签到</div> <div class="wz">批量签到</div>
</div> </div>
<div class="btn btn1"> <div class="btn btn1" @click="exportTaskStu">
<div class="img2"></div> <div class="img2"></div>
<div class="wz">导出数据</div> <div class="wz">导出数据</div>
</div> </div>
</div> </div>
<div class="line"> <!-- <div class="line">
<div class="inline"> <div class="inline">
<div class="left"> <div class="left">
<div class="img"></div> <div class="img"></div>
@@ -99,14 +104,14 @@
</div> </div>
<div class="right" @click="clearLine">清空</div> <div class="right" @click="clearLine">清空</div>
</div> </div>
</div> </div> -->
<div class="tableBox" style="margin-top: 30px"> <div class="tableBox" style="margin-top: 30px">
<a-table <a-table
style="border: 1px solid #f2f6fe" style="border: 1px solid #f2f6fe"
:columns="tableDataFunc()" :columns="tableDataFunc()"
:data-source="tableData" :data-source="tableData"
:loading="tableDataTotal === -1 ? true : false" :loading="tableDataTotalLoading"
:scroll="{ x: 1300 }" :scroll="{ x: 1300 }"
:pagination="false" :pagination="false"
:row-selection="{ :row-selection="{
@@ -142,11 +147,11 @@
<span>您确定要批量签到吗</span> <span>您确定要批量签到吗</span>
</div> </div>
<div class="del_btnbox"> <div class="del_btnbox">
<div class="del_btn btn1"> <div class="del_btn btn1" @click="closeqdModal">
<div class="btnText" @click="closeqdModal">取消</div> <div class="btnText">取消</div>
</div> </div>
<div class="del_btn btn2"> <div class="del_btn btn2" @click="batchSign">
<div class="btnText" @click="closeqdModal">确定</div> <div class="btnText">确定</div>
</div> </div>
</div> </div>
</div> </div>
@@ -245,15 +250,29 @@
</a-modal> </a-modal>
<!-- 二维码签到弹窗 --> <!-- 二维码签到弹窗 -->
<SignQR v-model:signQRvisible="signQRvisible" /> <SignQR v-model:signQRvisible="signQRvisible" />
<!-- 二维码弹窗 -->
<two-dimensional-code
v-model:codevisible="codevisible"
:codeInfo="codeInfo"
:index="codeIndex"
:type="codeType == 1 ? '课程二维码' : codeType == 2 ? '签到二维码' : ''"
/>
<!-- 二维码弹窗 -->
</template> </template>
<script> <script>
import { toRefs, reactive } from "vue"; import { toRefs, reactive } from "vue";
import SignQR from "./SignQR.vue"; import SignQR from "./SignQR.vue";
import TwoDimensionalCode from "../../components/TwoDimensionalCode";
import * as api from "../../api/indexTaskManage";
import { toDate } from "../../api/method";
import { message } from "ant-design-vue";
export default { export default {
name: "ActiveAttendance", name: "ActiveAttendance",
components: { components: {
SignQR, SignQR,
TwoDimensionalCode
}, },
props: { props: {
AAvisible: { AAvisible: {
@@ -264,6 +283,16 @@ export default {
type: String, type: String,
default: "", default: "",
}, },
datasource: {
type: Object,
default: function () {
return {};
},
},
types: {
type: Number,
default: null,
}
}, },
setup(props, ctx) { setup(props, ctx) {
@@ -284,46 +313,26 @@ export default {
projectNameList: [ projectNameList: [
{ {
id: 1, id: 1,
value: "项目一", value: "1",
label: "项目一", label: "签到",
}, },
{ {
id: 2, id: 2,
value: "项目二", value: "2",
label: "项目二", label: "请假",
}, }
{
id: 3,
value: "项目三",
label: "项目三",
},
{
id: 4,
value: "项目四",
label: "项目四",
},
], ],
projectNameList2: [ projectNameList2: [
{ {
id: 1, id: 1,
value: "项目一", value: "1",
label: "项目一", label: "正常",
}, },
{ {
id: 2, id: 2,
value: "项目二", value: "2",
label: "项目二", label: "异常",
}, }
{
id: 3,
value: "项目三",
label: "项目三",
},
{
id: 4,
value: "项目四",
label: "项目四",
},
], ],
selectedRowKeys: [], selectedRowKeys: [],
tableData: [ tableData: [
@@ -339,72 +348,7 @@ export default {
signIn: false, //签到 signIn: false, //签到
signOut: false, //签退 signOut: false, //签退
leave: false, //请假 leave: false, //请假
}, }
{
key: 2,
name: "张三",
com: "产研部",
gang: "产品经理",
cur: "2022-10-31 23:12",
jin: "-",
time: "签到/签退",
state: "正常",
signIn: true, //签到
signOut: true, //签退
leave: false, //请假
},
{
key: 3,
name: "张三",
com: "产研部",
gang: "产品经理",
cur: "2022-10-31 23:12",
jin: "2022-10-31 23:12",
time: "迟到",
state: "异常",
signIn: false, //签到
signOut: true, //签退
leave: false, //请假
},
{
key: 4,
name: "张三",
com: "产研部",
gang: "产品经理",
cur: "2022-10-31 23:12",
jin: "2022-10-31 23:12",
time: "早退",
state: "异常",
signIn: true, //签到
signOut: false, //签退
leave: false, //请假
},
{
key: 5,
name: "张三",
com: "产研部",
gang: "产品经理",
cur: "2022-10-31 23:12",
jin: "2022-10-31 23:12",
time: "签到/签退",
state: "正常",
signIn: true, //签到
signOut: true, //签退
leave: false, //请假
},
{
key: 6,
name: "张三",
com: "产研部",
gang: "产品经理",
cur: "2022-10-31 23:12",
jin: "2022-10-31 23:12",
time: "签到/签退",
state: "正常",
signIn: true, //签到
signOut: true, //签退
leave: false, //请假
},
], ],
options: [ options: [
{ {
@@ -420,6 +364,16 @@ export default {
value: "Orange", value: "Orange",
}, },
], ],
tableDataTotalLoading: true, // 表格loading加载配置
beginTime: null, //签到开始时间
endTime: null, //签到结束时间
selectedStudents:[],
projectName:undefined,
projectName2:undefined,
codeType: null,
codeIndex: null,
codeInfo: null, //二维码内容
codevisible: false, //二维码弹窗
}); });
const selectProjectName = (value, index) => { const selectProjectName = (value, index) => {
console.log("value", value, index); console.log("value", value, index);
@@ -434,64 +388,238 @@ export default {
const showEntryScore = () => { const showEntryScore = () => {
state.Evisible = true; state.Evisible = true;
}; };
const onSelectChange = (selectedRowKeys) => { const onSelectChange = (selectedRowKeys, e) => {
console.log("selectedRowKeys changed: ", selectedRowKeys);
state.selectedRowKeys = selectedRowKeys; state.selectedRowKeys = selectedRowKeys;
let array = [];
for (let i = 0; i < e.length; i++) {
array.push(e[i].studentId);
}
state.selectedStudents = array;
};
// 计算签到时间
const isSignClick = () => {
console.log("计算签到时间", props.datasource);
let beginTime = new Date(props.datasource.startTime).getTime();
let endTime = !props.datasource.afterStart
? new Date(props.datasource.endTime).getTime()
: new Date(props.datasource.startTime).getTime();
if (props.datasource.beforeStart && props.datasource.afterStart) {
//有开始前有开始后
beginTime = beginTime - props.datasource.beforeStart * 60 * 1000;
endTime = endTime + props.datasource.afterStart * 60 * 1000;
console.log("1111", beginTime, endTime);
} else if (props.datasource.beforeStart && !props.datasource.afterStart) {
//只有开始前无开始后
beginTime = beginTime - props.datasource.beforeStart * 60 * 1000;
console.log("11112222", beginTime);
} else if (!props.datasource.beforeStart && props.datasource.afterStart) {
//无开始前有开始后
endTime = endTime + props.datasource.afterStart * 60 * 1000;
console.log("1111333", endTime);
}
state.beginTime = toDate(beginTime / 1000, "Y/M/D h:m:s");
state.endTime = toDate(endTime / 1000, "Y/M/D h:m:s");
console.log("beginTime,endTime", state.beginTime, state.endTime);
};
const afterVisibleChange = (bol) => {
if (bol == true) {
console.log("当前是什么类型", props.datasource.type);
state.tableDataTotalLoading = true;
getTableData();
isSignClick();
}
}; };
const getTableData = () => { const getTableData = () => {
let arr = state.tableData; console.log('当前是项目还是路径图 1 路径图 2 项目', props.types)
arr.map((value) => { if ( props.datasource.type == 6 && props.types==1) {
// console.log("value", value); // 此处为获取评估学员的接口 - 如后续还有用到此接口的公共任务可直接在if里面加||判断即可
value.opacation = ( console.log("我是传递的查询参数", {
<div class="opa"> pageNo: state.currentPage,
<a-checkbox pageSize: state.pageSize,
checked={value.signIn} currentStageId: props.datasource.chapterId,
onChange={(e) => { type: 2,
console.log("点击签到", e); pid: props.datasource.routerId,
showsingleqdModal(); taskId: props.datasource.routerTaskId,
}} taskType: props.datasource.type,
> status: state.projectName,
签到 studentName: state.name,
</a-checkbox> signStatus: state.projectName2
<a-checkbox
checked={value.signOut}
onChange={(e) => {
console.log("点击签退", e);
showsingleqtModal();
}}
>
签退
</a-checkbox>
<a-checkbox
checked={value.leave}
onChange={(e) => {
console.log("点击请假", e);
showsingleqjModal();
}}
>
请假
</a-checkbox>
</div>
);
}); });
state.tableData = arr; api
.AssessmentManagementMessage({
pageNo: state.currentPage,
pageSize: state.pageSize,
currentStageId: props.datasource.chapterId,
type: 2, // 1项目 2 路径
pid: props.datasource.routerId,
taskId: props.datasource.routerTaskId,
taskType: props.datasource.type,
status: state.projectName,
studentName: state.name,
})
.then((res) => {
console.log(res);
if (res.status == 200) {
let keyarr = []
for(let i =0;i<res.data.data.records.length;i++){
res.data.data.records[i].key = res.data.data.records[i].studentId
keyarr.push( res.data.data.records[i])
}
state.tableData = keyarr;
state.tableDataTotal = res.data.data.total;
state.tableDataTotalLoading = false;
}
})
.catch((err) => {
console.log(err);
state.tableDataTotalLoading = false;
state.tableData = [];
});
} else if ( props.datasource.type == 6 && props.types==2) {
// 此处为获取评估学员的接口 - 如后续还有用到此接口的公共任务可直接在if里面加||判断即可
console.log("我是传递的查询参数", {
pageNo: state.currentPage,
pageSize: state.pageSize,
currentStageId: props.datasource.stageId,
type: 1,
pid: props.datasource.projectId,
taskId: props.datasource.projectTaskId,
taskType: props.datasource.type,
status: state.projectName,
studentName: state.name,
signStatus: state.projectName2
});
api
.AssessmentManagementMessage({
pageNo: state.currentPage,
pageSize: state.pageSize,
currentStageId: props.datasource.stageId,
type: 1, // 1项目 2 路径
pid: props.datasource.projectId,
taskId: props.datasource.projectTaskId,
taskType: props.datasource.type,
status: state.projectName,
studentName: state.name,
})
.then((res) => {
console.log(res);
if (res.status == 200) {
let keyarr = []
for(let i =0;i<res.data.data.records.length;i++){
res.data.data.records[i].key = res.data.data.records[i].studentId
keyarr.push( res.data.data.records[i])
}
state.tableData = keyarr;
state.tableDataTotal = res.data.data.total;
state.tableDataTotalLoading = false;
}
})
.catch((err) => {
console.log(err);
state.tableDataTotalLoading = false;
state.tableData = [];
});
} else{
state.tableDataTotalLoading = false;
state.tableData = [];
}
// let arr = state.tableData;
// arr.map((value) => {
// // console.log("value", value);
// value.opacation = (
// <div class="opa">
// <a-checkbox
// checked={value.signIn}
// onChange={(e) => {
// console.log("点击签到", e);
// showsingleqdModal();
// }}
// >
// 签到
// </a-checkbox>
// <a-checkbox
// checked={value.signOut}
// onChange={(e) => {
// console.log("点击签退", e);
// showsingleqtModal();
// }}
// >
// 签退
// </a-checkbox>
// <a-checkbox
// checked={value.leave}
// onChange={(e) => {
// console.log("点击请假", e);
// showsingleqjModal();
// }}
// >
// 请假
// </a-checkbox>
// </div>
// );
// });
// state.tableData = arr;
}; };
//批量签到
const batchSign = () => {
let obj = {
courseId: Number(props.datasource.courseId),
routerId: Number(props.datasource.routerId),
ids: state.selectedStudents,
taskId: Number(props.datasource.routerTaskId),
taskType: Number(props.datasource.type),
type: 1,
};
console.log(obj)
state.tableDataTotalLoading = true;
api
.AttendanceSign(obj)
.then((res) => {
console.log("签到结果", res, obj);
if (res.data.code === 200) {
message.destroy();
message.success("批量签到成功");
state.qdModal = false;
state.selectedRowKeys = [];
state.selectedStudents = [];
getTableData(); getTableData();
}
})
.catch((err) => {
console.log("签到失败", err, obj);
});
};
const tableDataFunc = () => { const tableDataFunc = () => {
const columns = [ const columns = [
{ {
title: "工号", title: "工号",
dataIndex: "workNum", dataIndex: "studentUserNo",
key: "workNum", key: "studentUserNo",
width: 50, width: 50,
align: "center", align: "center",
className: "h", className: "h",
customRender: (text) => {
return (
<div class="racona">
<span> {text.record.studentUserNo?text.record.studentUserNo:"-"}</span>
</div>
);
},
}, },
{ {
title: "姓名", title: "姓名",
dataIndex: "name", dataIndex: "studentName",
key: "name", key: "studentName",
width: 50, width: 50,
align: "center", align: "center",
className: "classify", className: "classify",
@@ -499,18 +627,26 @@ export default {
customRender: (text) => { customRender: (text) => {
return ( return (
<div class="racona"> <div class="racona">
<span> {text.record.name}</span> <span> {text.record.studentName?text.record.studentName:"-"}</span>
</div> </div>
); );
}, },
}, },
{ {
title: "所在部门", title: "所在部门",
dataIndex: "com", dataIndex: "studentDepartName",
key: "com", key: "studentDepartName",
width: 50, width: 50,
align: "center", align: "center",
className: "h", className: "h",
ellipsis: true,
customRender: (text) => {
return (
<div class="racona">
<span> {text.record.studentDepartName?text.record.studentDepartName:"-"}</span>
</div>
);
},
}, },
{ {
title: "所在岗位", title: "所在岗位",
@@ -519,38 +655,66 @@ export default {
width: 50, width: 50,
align: "center", align: "center",
className: "h", className: "h",
ellipsis: true,
customRender: (text) => {
return (
<div class="racona">
<span> {text.record.studentJobName?text.record.studentJobName:"-"}</span>
</div>
);
},
}, },
{ {
title: "签到时间", title: "签到时间",
dataIndex: "cur", dataIndex: "signTime",
key: "cur", key: "signTime",
width: 110, width: 110,
align: "center", align: "center",
className: "h", className: "h",
customRender: (text) => {
return (
<div class="racona">
<span> {text.record.signTime?text.record.signTime:"-"}</span>
</div>
);
}, },
{
title: "签退时间",
dataIndex: "jin",
key: "jin",
width: 110,
align: "center",
className: "h",
}, },
{ {
title: "考勤", title: "考勤",
dataIndex: "time", dataIndex: "signStatus",
key: "time", key: "signStatus",
width: 50, width: 50,
align: "center", align: "center",
className: "h", className: "h",
customRender: (text) => {
// console.log("text", text);
return (
<div class="racona">
<span>
{text.record.signStatus
? "签到"
: text.record.leaveStatus
? "请假"
: "-"}
</span>
</div>
);
},
}, },
{ {
title: "签到状态", title: "签到状态",
dataIndex: "state", dataIndex: "signStatus",
key: "state", key: "signStatus",
width: 50, width: 50,
align: "center", align: "center",
className: "h", className: "h",
customRender: (text) => {
return (
<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>
</div>
);
},
}, },
{ {
title: "考勤情况", title: "考勤情况",
@@ -559,18 +723,118 @@ export default {
key: "opacation", key: "opacation",
width: 130, width: 130,
align: "center", align: "center",
customRender: (value) => {
return (
<div class="opa" style='display:flex;justify-content:center;align-items:center;'>
<div
onClick={()=>{
console.log("点击签到", value);
{/* showsingleqdModal(); */}
{/* AttendanceSign */}
let obj = {
courseId: Number(props.datasource.courseId),
routerId: Number(props.datasource.routerId),
ids: [value.record.studentId],
taskId: Number(props.datasource.routerTaskId),
taskType: Number(props.datasource.type),
type: 1,
};
let obj2 = {
courseId: Number(props.datasource.courseId),
routerId: Number(props.datasource.projectId),
ids: [value.record.studentId],
taskId: Number(props.datasource.projectTaskId),
taskType: Number(props.datasource.type),
type: 2,
};
console.log(obj, obj2)
state.tableDataTotalLoading = true;
api.AttendanceSign(props.types==1? obj : obj2).then(res=>{
console.log('res----签到是否成功',res)
message.destroy()
message.info('签到成功')
getTableData();
}).catch(err=>{
state.tableDataTotalLoading = false;
console.log(err)
})
}}
style="display:flex;justify-content:center;align-items:center;margin-right:12px;cursor:pointer;">
{value.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;'>
<div style='width:8px;height:8px;border-radius:8px;background:#4ea6ff;'></div>
</div>:
<div style='width:16px;height:16px;margin-right:6px;border-radius:16px;border:1px solid #ccc;'></div>
}
<div>签到</div>
</div>
<div
onClick={()=>{
console.log("点击请假", value);
{/* showsingleqjModal(); */}
{/* AttendanceLeave */}
let obj = {
courseId: Number(props.datasource.courseId),
routerId: Number(props.datasource.routerId),
ids: [value.record.studentId],
taskId: Number(props.datasource.routerTaskId),
taskType: Number(props.datasource.type),
type: 1,
};
let obj2 = {
courseId: Number(props.datasource.courseId),
routerId: Number(props.datasource.projectId),
ids: [value.record.studentId],
taskId: Number(props.datasource.projectTaskId),
taskType: Number(props.datasource.type),
type: 2,
};
console.log(obj, obj2)
state.tableDataTotalLoading = true;
api.AttendanceLeave(props.types==1? obj : obj2).then(res=>{
console.log('res----请假是否成功',res)
message.destroy()
message.info('请假成功')
getTableData();
}).catch(err=>{
state.tableDataTotalLoading = false;
console.log(err)
})
}}
style="display:flex;justify-content:center;align-items:center;cursor:pointer;">
{value.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;'>
<div style='width:8px;height:8px;border-radius:8px;background:#4ea6ff;'></div>
</div>:
<div style='width:16px;height:16px;margin-right:6px;border-radius:16px;border:1px solid #ccc;'></div>
}
<div>请假</div>
</div>
</div>
)
}
}, },
]; ];
return columns; return columns;
}; };
// 清空所选 // 清空所选
const clearLine = () => { const clearLine = () => {
state.selectedRowKeys = []; state.selectedRowKeys = [];
}; };
const showqdModal = () => { const showqdModal = () => {
if(state.selectedStudents.length==0){
message.destroy()
message.error('请选择学员')
return
}
state.qdModal = true; state.qdModal = true;
}; };
const closeqdModal = () => { const closeqdModal = () => {
state.selectedRowKeys = [];
state.qdModal = false; state.qdModal = false;
}; };
const showsingleqdModal = () => { const showsingleqdModal = () => {
@@ -592,8 +856,78 @@ export default {
state.singleqjModal = false; state.singleqjModal = false;
}; };
const signQR = () => { const signQR = () => {
state.signQRvisible = true; state.codevisible = true;
state.codeInfo = {
title: "【签到】二维码",
name: props.datasource?.name,
url:
process.env.VUE_APP_BASE_API +
`/admin/student/studentSign?taskId=${
props.datasource.routerTaskId
}&taskType=${props.datasource.type}&type=${2}`,
}; };
console.log("codeInfo", state.codeInfo);
state.codeIndex = 0;
state.codeType = 1;
};
//搜索学员
const searchTaskList = () => {
state.tableDataTotalLoading = true;
state.currentPage = 1;
getTableData();
};
// 重置按钮
function resetTaskList() {
state.selectedRowKeys = [];
state.tableDataTotalLoading = true;
state.currentPage = 1;
state.name = null;
state.projectName2 = undefined;
state.tableDataTotal = -1;
state.tableDataTotal2 = 0;
getTableData();
}
// 导出数据
function exportTaskStu() {
console.log("props.datasource", props.datasource);
if(props.types==1){
window.open(
`${
process.env.VUE_APP_BASE_API
}/admin/student/exportTaskStudent?currentStageId=${
props.datasource.chapterId
}&type=2&pid=${props.datasource.courseId}&thirdType=1&taskId=${props.datasource.routerTaskId}`
);
}else{
window.open(
`${
process.env.VUE_APP_BASE_API
}/admin/student/exportTaskStudent?currentStageId=${
props.datasource.stageId
}&type=1&pid=${props.datasource.courseId}&thirdType=1&taskId=${props.datasource.projectTaskId}`
);
}
// api
// .exportTaskStudent({
// pageNo: state.currentPage,
// pageSize: state.pageSize,
// currentStageId: props.datasource.stageId,
// currentTaskId: props.datasource.projectTaskId,
// type: 1,
// pid: props.datasource.projectId,
// })
// .then((res) => {
// console.log(res);
// })
// .catch((err) => {
// console.log(err);
// });
}
return { return {
...toRefs(state), ...toRefs(state),
selectProjectName, selectProjectName,
@@ -612,6 +946,11 @@ export default {
closesingleqtModal, closesingleqtModal,
closesingleqjModal, closesingleqjModal,
signQR, signQR,
afterVisibleChange,
batchSign,
searchTaskList,
resetTaskList,
exportTaskStu
}; };
}, },
}; };

View File

@@ -455,7 +455,7 @@
<div <div
class="operation" class="operation"
style="cursor: pointer" style="cursor: pointer"
@click="showAA(item.type, item.name)" @click="showAA(item.type, item.name, item)"
:style="{ :style="{
display: display:
item.type === 6 || item.type === 9 item.type === 6 || item.type === 9
@@ -1070,7 +1070,9 @@
<!-- 活动考勤抽屉 --> <!-- 活动考勤抽屉 -->
<active-attendance <active-attendance
v-model:AAvisible="AAvisible" v-model:AAvisible="AAvisible"
:datasource="liveData"
:title="showKaoqinText" :title="showKaoqinText"
types="1"
classify="2" classify="2"
/> />
<!-- 时间管理抽屉 --> <!-- 时间管理抽屉 -->
@@ -1569,6 +1571,7 @@ export default {
evaluationData: "", evaluationData: "",
homeworkData: "", homeworkData: "",
commonData: "", commonData: "",
liveData: "",
voteData: "", voteData: "",
commonLevelName: "", commonLevelName: "",
examLevelName: "", examLevelName: "",
@@ -1797,10 +1800,11 @@ export default {
console.log("facestudent", state.facestudent); console.log("facestudent", state.facestudent);
}; };
//考勤的抽屉 //考勤的抽屉
const showAA = (course) => { const showAA = (course, a, data) => {
state.AAvisible = true; state.AAvisible = true;
state.showKaoqinText = "【" + course + "】" + "考勤"; state.liveData = data;
console.log(state.showKaoqinText, 1111); state.showKaoqinText = "直播";
console.log(state.showKaoqinText, 1111, data);
}; };
// 时间管理 // 时间管理
const showTime = (course) => { const showTime = (course) => {

View File

@@ -567,7 +567,7 @@
<div <div
class="operation" class="operation"
style="cursor: pointer" style="cursor: pointer"
@click="showAA(item.name)" @click="showAA(item.type, item.name, item)"
v-if="item.type == 6 || item.type == 9" v-if="item.type == 6 || item.type == 9"
> >
考勤 考勤
@@ -1262,11 +1262,13 @@
v-model:FSvisible="FSvisible" v-model:FSvisible="FSvisible"
:projectTaskInfo="facestudent" :projectTaskInfo="facestudent"
/> />
<!-- 活动考勤抽屉 --> <!-- 活动直播考勤抽屉 -->
<active-attendance <active-attendance
v-model:AAvisible="AAvisible" v-model:AAvisible="AAvisible"
:title="showkaoqinText" :datasource="liveData"
classify="1" :title="showKaoqinText"
types="2"
classify="2"
/> />
<!-- 批量面授报名 --> <!-- 批量面授报名 -->
@@ -2536,7 +2538,8 @@ export default {
//直播、面授传递title //直播、面授传递title
showWorkText: "", showWorkText: "",
//直播、活动页面传递参数 //直播、活动页面传递参数
showkaoqinText: "", showkaoqinText: "直播",
liveData:'',
//所有抽屉的传过去的type //所有抽屉的传过去的type
itemstype: null, itemstype: null,
@@ -2869,9 +2872,16 @@ export default {
state.chooseGroupId = id; state.chooseGroupId = id;
}; };
//活动考勤的抽屉 //活动考勤的抽屉
const showAA = (title) => { {/* const showAA = (title) => {
state.AAvisible = true; state.AAvisible = true;
state.showkaoqinText = title; state.showkaoqinText = title;
}; */}
//考勤的抽屉
const showAA = (course, a, data) => {
state.AAvisible = true;
state.liveData = data;
state.showKaoqinText = "直播";
console.log(state.showKaoqinText, 1111, data);
}; };
//作业管理的抽屉 //作业管理的抽屉
const showWork = (name, id, item) => { const showWork = (name, id, item) => {