feat:增加签到签退等

This commit is contained in:
lixg
2023-01-06 17:07:57 +08:00
parent e80ee2f4f7
commit 8cb9c6649e
11 changed files with 297 additions and 143 deletions

3
.env
View File

@@ -8,3 +8,6 @@ VUE_APP_BOE_API_URL=https://u-pre.boe.com
VUE_APP_IFRAME_URL=https://u-pre.boe.com/pc/iframe
VUE_APP_IFRAME_STUDENT_URL=https://u-pre.boe.com/pc/loading
COURSE_STUDY=https://u-pre.boe.com/pc/course/studyindex?id=

View File

@@ -8,3 +8,5 @@ VUE_APP_BOE_API_URL=https://u.boe.com
VUE_APP_IFRAME_URL=https://u.boe.com/pc/iframe
VUE_APP_IFRAME_STUDENT_URL=https://u.boe.com/pc/loading
COURSE_STUDY=https://u.boe.com/pc/course/studyindex?id=

View File

@@ -8,3 +8,5 @@ VUE_APP_BOE_API_URL=https://u.boe.com
VUE_APP_IFRAME_URL=https://u.boe.com/pc-release/iframe
VUE_APP_IFRAME_STUDENT_URL=https://u.boe.com/pc-release/loading
COURSE_STUDY=https://u.boe.com/pc-release/course/studyindex?id=

View File

@@ -2,7 +2,7 @@
* @Author: lixg lixg@dongwu-inc.com
* @Date: 2022-11-04 22:45:31
* @LastEditors: lixg lixg@dongwu-inc.com
* @LastEditTime: 2023-01-06 10:18:41
* @LastEditTime: 2023-01-06 15:21:17
* @FilePath: /fe-manage/src/api/index1.js
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
@@ -168,6 +168,9 @@ export const attendanceSign = (obj) => http.post('/stu/task/attendance/sign', ob
//请假
export const attendanceLeave = (obj) => http.post('/stu/task/attendance/leave', obj)
//批量标记完成
export const batchFinishTask = (obj) => http.post('/admin/student/batchFinishTask', obj)
// //面授课批量导入成绩
export const batchImportScore = (offcoursePlanId, obj) =>
http.post(`/admin/offcourse/batchImportScore?offcoursePlanId=${offcoursePlanId}`, obj);

View File

@@ -19,19 +19,45 @@
<div class="main">确定将所选学员标记完成吗</div>
<div class="butn">
<button class="btn btn1" @click="closeModal">取消</button>
<button class="btn btn2" @click="check">确定</button>
<button class="btn btn2" @click="batchFinishTask">确定</button>
</div>
</a-modal>
</template>
<script>
import { toRefs, reactive } from "vue";
import { message } from "ant-design-vue";
import * as api from "../../api/index1";
export default {
props: {
ASOvervisible: {
type: Boolean,
default:false
}
default: false,
},
type: {
type: Number,
default: null,
},
ids: {
type: Array,
default: () => [],
},
taskId: {
type: Number,
default: null,
},
pid: {
type: Number,
default: null,
},
taskType: {
type: Number,
default: null,
},
currentStageId: {
type: Number,
default: null,
},
},
setup(props, ctx) {
const state = reactive({
@@ -40,15 +66,39 @@ setup(props,ctx){
const closeModal = () => {
ctx.emit("update:ASOvervisible", false);
};
const check = () => {
//批量标记完成
const batchFinishTask = () => {
if (props.studentsId.length === 0) {
message.destroy();
message.warning("请选择学员");
return;
}
console.log("props.studentsId", props.studentsId);
closeModal();
let obj = {
ids: props.ids,
type: props.type,
taskId: props.taskId,
pid: props.pid,
taskType: props.taskType,
currentStageId: props.currentStageId,
};
api
.batchFinishTask(obj)
.then((res) => {
console.log("批量标记结果", res);
})
.catch((err) => {
console.log("批量标记失败", err);
});
};
return {
...toRefs(state),
closeModal,
check,
}
}
batchFinishTask,
};
},
};
</script>
<style lang="scss">

View File

@@ -135,7 +135,15 @@
</div>
</a-drawer>
<!-- 批量标注完成 -->
<ASOver v-model:ASOvervisible="ASOvervisible" />
<ASOver
v-model:ASOvervisible="ASOvervisible"
:ids="selectedRowKeys"
:taskId="projectTaskInfo.projectTaskId"
:type="2"
:pid="projectTaskInfo.projectId"
:taskType="projectTaskInfo.type"
:currentStageId="projectTaskInfo.stageId"
/>
<!-- 录入成绩抽屉 -->
<entry-scores v-model:Evisible="Evisible" />
<!-- 查看作业抽屉 -->
@@ -664,6 +672,7 @@ export default {
}&taskType=${props.projectTaskInfo.type}`
);
}
return {
...toRefs(state),
selectProjectName,

View File

@@ -127,8 +127,7 @@
</div>
</div>
</a-drawer>
<!-- 批量标注完成 -->
<ASOver v-model:ASOvervisible="ASOvervisible" />
<!-- 录入成绩抽屉 -->
<EScore v-model:eScorevisible="Evisible" />
<!-- 查看作业抽屉 -->
@@ -140,7 +139,6 @@
<script>
import { toRefs, reactive } from "vue";
import { message } from "ant-design-vue";
import ASOver from "../AllStuOver.vue";
import CKWork from "../CheckWork.vue";
import CQue from "../CheckQue.vue";
// import EntryScores from "../EntryScores.vue";
@@ -153,7 +151,6 @@ export default {
// EntryScores,
CKWork,
CQue,
ASOver,
EScore,
},
props: {

View File

@@ -130,7 +130,15 @@
</div>
</a-drawer>
<!-- 批量标注完成 -->
<ASOver v-model:ASOvervisible="ASOvervisible" />
<ASOver
v-model:ASOvervisible="ASOvervisible"
:ids="selectedRowKeys"
:taskId="datasource.routerTaskId"
:type="2"
:pid="datasource.routerId"
:taskType="datasource.type"
:currentStageId="datasource.chapterId"
/>
<!-- 录入成绩抽屉 -->
<entry-scores v-model:Evisible="Evisible" />
<!-- 查看作业抽屉 -->

View File

@@ -122,8 +122,7 @@
</div>
</div>
</a-drawer>
<!-- 批量标注完成 -->
<ASOver v-model:ASOvervisible="ASOvervisible" />
<!-- 录入成绩抽屉 -->
<EScore v-model:eScorevisible="Evisible" />
<!-- 查看作业抽屉 -->
@@ -135,7 +134,6 @@
<script>
import { toRefs, reactive } from "vue";
import { message } from "ant-design-vue";
import ASOver from "../AllStuOver.vue";
import CKWork from "../CheckWork.vue";
import CQue from "../CheckQue.vue";
// import EntryScores from "../EntryScores.vue";
@@ -148,7 +146,6 @@ export default {
// EntryScores,
CKWork,
CQue,
ASOver,
EScore,
},
props: {

View File

@@ -14,6 +14,40 @@
/>
</a-form-item>
</a-col>
<a-col v-if="type === 1">
<a-form-item title="小组名称:">
<a-input
class="cus-input"
v-model:value="tableParam.groupName"
placeholder="请输入小组名称"
/>
</a-form-item>
</a-col>
<a-col v-if="type === 1">
<a-form-item title="部门:">
<div class="select in" style="width: 270px">
<OrgClass
v-model:value="tableParam.studentDepartId"
v-model:name="tableParam.studentDepartName"
></OrgClass>
</div>
</a-form-item>
</a-col>
<a-col v-if="type === 1">
<a-form-item title="优秀学员:">
<div class="select">
<a-select
v-model:value="tableParam.topFlag"
style="width: 260px; height: 40px"
placeholder="是否为优秀学员"
:options="topFlagList"
@change="selectProjectName"
allowClear
showSearch
></a-select>
</div>
</a-form-item>
</a-col>
<a-col>
<a-button class="cus-btn" style="width: 100px" @click="getStuList">
<template #icon>
@@ -120,14 +154,14 @@
</div>
</div>
</div>
<div class="stmm_btn btn5" @click="handleExportStu">
<div class="stmm_btn btn5" @click="exportStu">
<div class="export"></div>
<div class="btnText">导出</div>
</div>
<div
class="stmm_btn btn5"
style="margin-left: 15px"
@click="handleExportStu"
@click="exportHomeWork"
>
<div class="btnText">导出作业</div>
</div>
@@ -313,6 +347,7 @@ import { message } from "ant-design-vue";
// import { topStudent } from "../../api/indexProjStu";
import SeeStu from "../../components/drawers/SeeStu";
import ExportScore from "../drawers/ExportScore.vue";
import OrgClass from "@/components/project/OrgClass";
const props = defineProps({
type: Number,
id: String,
@@ -329,6 +364,18 @@ const props = defineProps({
default: false,
},
});
const topFlagList = ref([
{
id: 0,
value: 0,
label: "普通学员",
},
{
id: 1,
value: 1,
label: "优秀学员",
},
]);
const tablecolumns = ref([
{
title: "姓名",
@@ -397,7 +444,11 @@ const tablecolumns = ref([
},
]);
const tableParam = ref({
studentName: "",
studentName: "", //学员名称
groupName: "", //学员小组
studentDepartId: null, //部门
studentDepartName: null, //部门名称
topFlag: null, //是否是优秀学员
pageNo: 1,
pageSize: 10,
type: props.type,
@@ -450,6 +501,7 @@ function changePagination(page) {
function getStuList() {
tableData.value.loading = true;
console.log("tableParam.value", tableParam.value);
getStuPage(tableParam.value).then((res) => {
console.log("学员管理-获取学员", res.data);
tableData.value.total = res.data.data.total;
@@ -460,6 +512,10 @@ function getStuList() {
function reset() {
tableParam.value.studentName = "";
tableParam.value.groupName = ""; //学员小组
tableParam.value.studentDepartId = null; //部门
tableParam.value.studentDepartName = null; //部门
tableParam.value.topFlag = null; //是否是优秀学员
getStuList();
}
@@ -568,6 +624,23 @@ const eScorevisible = ref(false);
const showEScoreModal = () => {
eScorevisible.value = true;
};
//导出作业
const exportHomeWork = () => {
window.open(
`${
process.env.VUE_APP_PROXY_URL
}admin/student/exportHomeWork?type=${3}&pid=${props.id}`
);
};
//导出
const exportStu = () => {
window.open(
`${
process.env.VUE_APP_PROXY_URL
}admin/student/exportTaskStudent?type=${3}&pid=${props.id}`
);
};
</script>
<style lang="scss">
.TableStudent {

View File

@@ -997,7 +997,9 @@
<div class="bs_left">内容分类:</div>
<div class="bs_right">{{ faceClassification }}</div>
<div class="bs_left">状态:</div>
<div class="bs_right">{{faceStatus==1?"已启用":"已停用"}}</div>
<div class="bs_right">
{{ faceStatus == 1 ? "已启用" : "已停用" }}
</div>
</div>
<a-tabs
class="b_menu"
@@ -1306,15 +1308,7 @@
<div class="operation">
<div class="fb">
<!--新加 签到 -->
<div
class="jc"
@click="
() => {
QR_hs = true;
ftsQR_hs = true;
}
"
>
<div class="jc" @click="qrcodeVisible(record, 2)">
签到
</div>
@@ -1361,14 +1355,7 @@
删除
</a-menu-item>
<!--新加 二维码 -->
<a-menu-item
@click="
() => {
QR_hs = true;
vipftQR_hs = true;
}
"
>
<a-menu-item @click="qrcodeVisible(record, 1)">
二维码
</a-menu-item>
</a-menu>
@@ -2285,7 +2272,7 @@
v-model:codevisible="codevisible"
:codeInfo="codeInfo"
:index="codeIndex"
:type="codeType === 1 ? '课程二维码' : '签到二维码'"
:type="codeType == 1 ? '课程二维码' : codeType == 2 ? '签到二维码' : ''"
/>
<!-- 二维码弹窗 -->
</template>
@@ -3461,7 +3448,9 @@ export default defineComponent({
// 点击开课管理 -- 显示得信息
faceType: "面授课", // 面授课类型
faceClassification: "", // 课程内容分类
faceStatus: "" // 课程状态
faceStatus: "", // 课程状态
codeType: null, //二维码类型
});
const showStuAdd = (record) => {
@@ -5211,32 +5200,34 @@ export default defineComponent({
// 获取开课管理里的学员
function getCourseStudentList() {
console.log('开课管理学员搜索参数',{
console.log("开课管理学员搜索参数", {
pageNo: state.currentPage222,
pageSize: 10,
status: state.gl_selectV2 ? state.gl_selectV2 : "",
studentName: state.gl_inputV2,
id:state.currentFaceId
id: state.currentFaceId,
});
apis
.GetCourseStudent({
pageNo: state.currentPage222,
pageSize: 10,
status: state.gl_selectV2 ? state.gl_selectV2 : "",
studentName: state.gl_inputV2,
id: state.currentFaceId,
})
apis.GetCourseStudent({
pageNo: state.currentPage222,
pageSize: 10,
status: state.gl_selectV2?state.gl_selectV2:"",
studentName: state.gl_inputV2,
id:state.currentFaceId
}).then(res=>{
console.log('获取开课管理学员信息', res)
.then((res) => {
console.log("获取开课管理学员信息", res);
// tableData3 tableDataTotal222 currentPage222 handelChangePage222
state.tableData3 = res.data.data.records;
state.tableDataTotal222 = res.data.data.total;
state.manageStuLoading = false;
}).catch(err=>{
console.log(err)
state.manageStuLoading = false;
})
.catch((err) => {
console.log(err);
state.manageStuLoading = false;
});
}
const handlePostSure = (obj) => {
console.log("处理后参数,直接解构使用");
console.log(obj);
@@ -5422,6 +5413,23 @@ export default defineComponent({
updateStudent(record);
}
//二维码
const qrcodeVisible = (record, type) => {
console.log(
"record",
record,
process.env.VUE_APP_IFRAME_STUDENT_URL,
process.env.COURSE_STUDY
);
state.codevisible = true;
state.codeInfo = {
title: type == 1 ? "【课程】二维码" : "【签到】二维码",
name: record.name ? record.name : "",
url: process.env.COURSE_STUDY + record.offcourseId,
};
state.codeIndex = type;
state.codeType = type;
};
return {
...toRefs(state),
CourseModalRef,
@@ -5553,6 +5561,8 @@ export default defineComponent({
handleLook,
logW,
logT,
qrcodeVisible,
};
},
});