feat:增加面授课成绩录入

This commit is contained in:
lixg
2023-01-10 18:00:51 +08:00
9 changed files with 167 additions and 67 deletions

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-09 16:29:37
* @LastEditTime: 2023-01-10 17:38:43
* @FilePath: /fe-manage/src/api/index1.js
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
@@ -184,4 +184,6 @@ export const getImportStatus = (uuid) => http.get('/admin/student/getImportStatu
// export const exportHomeWork=(obj)=>http.get('admin/student/exportHomeWork',{params:obj})
// 面授课导入学员
export const FaceTeachImportStudent = (obj) => http.post('/admin/student/importStudent', obj, {headers: { "Content-Type": "multipart/form-data" }})
export const FaceTeachImportStudent = (obj) => http.post('/admin/student/importStudent', obj, { headers: { "Content-Type": "multipart/form-data" } })
//成绩录入
export const updateStudent = (obj) => http.post('/admin/student/updateStudent', obj)

View File

@@ -171,6 +171,7 @@ export default {
const state = reactive({
template: process.env.VUE_APP_TEMPLATE + "导入学员模版-1672998102528.xlsx",
importStudent: process.env.VUE_APP_BASE_API + "admin/student/importStudent",
timers: "", // 定时器,用于清空定时器使用
uploadpercent: -1,
uploadErr: false, //上传失败
addLoading: false,
@@ -182,6 +183,7 @@ export default {
locationHref: location.href.indexOf('http://') !== -1 ? 'http://111.231.196.214:12016/' : location.href.slice(0, location.href.indexOf('/m')) + '/upload/'
});
const closeDrawer = () => {
clearInterval(state.timers);
state.fileList = [];
state.uploadpercent = -1;
state.addLoading = false;
@@ -191,6 +193,8 @@ export default {
state.errNum = 0;
state.downloadErrUrl = "";
ctx.emit("update:AddImpStuvisible", false);
// 通知父组件重新获取学员列表
ctx.emit("AddImpStuvisibleClose", false);
};
const afterVisibleChange = (bool) => {
@@ -228,7 +232,7 @@ export default {
type: 3
})
let i = 0;
let timer = setInterval(() => {
state.timers = setInterval(() => {
let uid = info.file.response.data;
api
.getImportStatus(uid)
@@ -246,12 +250,12 @@ export default {
state.succNum = res.data.data.successNum;
state.errNum = res.data.data.failedNum;
state.downloadErrUrl = res.data.data.url;
clearInterval(timer);
clearInterval(state.timers);
}
}
})
.catch((err) => {
clearInterval(timer);
clearInterval(state.timers);
state.showBottomBar = true;
state.addLoading = false;
console.log("查询导入状态失败", err);

View File

@@ -6,7 +6,7 @@
placement="right"
width="700px"
@after-visible-change="afterVisibleChange"
:zIndex="999"
:zIndex="1000"
>
<div class="drawerMain">
<div class="header">
@@ -70,8 +70,8 @@
</div>
<div class="curloading">
<!-- <div class="cur">55%</div> -->
<div class="cancel" style="margin-left: 20px">暂停</div>
<div class="cancel" style="margin-left: 15px">取消</div>
<!-- <div class="cancel" style="margin-left: 20px">暂停</div>
<div class="cancel" style="margin-left: 15px">取消</div> -->
</div>
</div>
</div>
@@ -207,7 +207,7 @@ export default {
type: Number,
default: null,
},
getStudent: {
searchTaskList: {
type: Function,
default: null,
},
@@ -275,11 +275,12 @@ export default {
message.destroy();
message.success(`${info.file.name}上传成功`);
state.addLoading = false;
props.searchTaskList && props.searchTaskList();
}
state.succNum = res.data.data.successNum;
state.errNum = res.data.data.failedNum;
state.downloadErrUrl = res.data.data.url;
props.getStudent && props.getStudent();
console.log("props.getStudent", props.getStudent);
clearInterval(timer);
}
}
@@ -336,6 +337,10 @@ export default {
state.fileList = [];
state.uploadpercent = -1;
state.uploadErr = false; //上传失败
state.succNum = 0;
state.errNum = 0;
state.downloadErrUrl = null;
state.addLoading = false;
};
// 下载失败数据
const downloadEeeorData = () => {

View File

@@ -180,7 +180,7 @@
<!-- 二维码签到弹窗 -->
<SignQR v-model:signQRvisible="signQRvisible" />
<!-- 导入学员抽屉 -->
<imp-stu v-model:AddImpStuvisible="AddImpStuvisible" :courseId="projectTaskInfo.courseId" :courseType="2"/>
<imp-stu v-model:AddImpStuvisible="AddImpStuvisible" @AddImpStuvisibleClose="AddImpStuvisibleClose" :courseId="projectTaskInfo.courseId" :courseType="2"/>
<!-- 批量签到弹窗 -->
<a-modal
v-model:visible="copyModal"
@@ -727,6 +727,14 @@ export default {
// console.log(err);
// });
}
{/* 添加学员弹框关闭,重新获取学员列表 */}
const AddImpStuvisibleClose = () => {
console.log('关闭了导入学员弹框')
{/* 此处操作重新获取学员列表数据 */}
getStudent()
}
return {
...toRefs(state),
selectProjectName,
@@ -746,6 +754,7 @@ export default {
changePaginationStu,
exportTaskStu,
clearLine,
AddImpStuvisibleClose
};
},
};

View File

@@ -133,8 +133,8 @@
<EScore
v-model:eScorevisible="Evisible"
:type="1"
:id="datasource.projectTaskId"
v-model:getStudent="getStudent"
:id="projectTaskInfo?.projectTaskId"
v-model:searchTaskList="searchTaskList"
/>
<!-- 查看作业抽屉 -->
<CKWork v-model:CWvisible="CWvisible" />
@@ -639,6 +639,7 @@ export default {
exportTaskStu,
exportHomeWork,
exportHomeWorkShow,
getStudent,
};
},
};

View File

@@ -174,7 +174,7 @@
<!-- 二维码签到弹窗 -->
<SignQR v-model:signQRvisible="signQRvisible" />
<!-- 导入学员抽屉 -->
<imp-stu v-model:AddImpStuvisible="AddImpStuvisible" :courseId="datasource.courseId" :courseType="1"/>
<imp-stu v-model:AddImpStuvisible="AddImpStuvisible" @AddImpStuvisibleClose="AddImpStuvisibleClose" :courseId="datasource.courseId" :courseType="1" />
<!-- 批量签到弹窗 -->
<a-modal
v-model:visible="copyModal"
@@ -695,6 +695,14 @@ export default {
state.codeIndex = 1;
state.codeType = 2;
};
{/* 添加学员弹框关闭,重新获取学员列表 */}
const AddImpStuvisibleClose = () => {
console.log('关闭了导入学员弹框')
{/* 此处操作重新获取学员列表数据 */}
getStudent()
}
return {
...toRefs(state),
selectProjectName,
@@ -715,6 +723,7 @@ export default {
exportTaskStu,
clearLine,
qrcodeVisible,
AddImpStuvisibleClose
};
},
};

View File

@@ -128,8 +128,8 @@
<EScore
v-model:eScorevisible="Evisible"
:type="2"
:id="datasource.routerTaskId"
v-model:getStudent="getStudent"
:id="datasource?.routerTaskId"
v-model:searchTaskList="searchTaskList"
/>
<!-- 查看作业抽屉 -->
<CKWork v-model:CWvisible="CWvisible" />
@@ -647,6 +647,7 @@ export default {
exportTaskStu,
exportHomeWork,
exportHomeWorkShow,
getStudent,
};
},
};

View File

@@ -102,7 +102,9 @@
<a-button class="cus-btn white"> 批量换组 </a-button>
</a-col>
<a-col :span="1.5" v-if="type === 1">
<a-button class="cus-btn white" @click="exportTaskStu"> 导出学习信息 </a-button>
<a-button class="cus-btn white" @click="exportTaskStu">
导出学习信息
</a-button>
</a-col>
<a-col :span="1.5">
<a-button class="cus-btn white" @click="bathDel">
@@ -338,7 +340,12 @@
/>
<!-- 导入作业成绩抽屉 -->
<ExportScore v-model:eScorevisible="eScorevisible" :type="3" :id="id" />
<EScore
v-model:eScorevisible="eScorevisible"
:type="3"
:id="id"
v-model:searchTaskList="getStuList"
/>
<!-- 导出作业提示框 -->
<ExportHomeWork
v-model:exportHomeWorkV="exportHomeWorkV"
@@ -353,7 +360,7 @@ import ChangeLevelModal from "./ChangeLevelModal.vue";
import { message } from "ant-design-vue";
// import { topStudent } from "../../api/indexProjStu";
import SeeStu from "../../components/drawers/SeeStu";
import ExportScore from "../drawers/ExportScore.vue";
import EScore from "../drawers/ExportScore.vue";
import OrgClass from "@/components/project/OrgClass";
import ExportHomeWork from "../Modals/ExportHomeWork.vue";
import * as api from "../../api/index1";
@@ -372,6 +379,10 @@ const props = defineProps({
type: Boolean,
default: false,
},
isgetStudent: {
type: Boolean,
default: null,
},
});
const topFlagList = ref([
{
@@ -484,13 +495,14 @@ function exportTaskStu() {
process.env.VUE_APP_PROXY_URL
}admin/student/exportTaskStudent?type=${1}&pid=${props.id}&taskType=0`
);
}
onMounted(() => {
getStuList();
});
watch(props.isgetStudent, () => {
console.log("监测");
});
watch(props, () => {
if (!props.visable) {
stuSelectKeys.value = [];

View File

@@ -93,7 +93,11 @@
</div>
<div class="btns">
<!-- 2022-11-30注释 后面放开 -->
<div class="btn btn3" @click="openMessage" style="margin-right:14px;">
<div
class="btn btn3"
@click="openMessage"
style="margin-right: 14px"
>
<div class="search"></div>
<div class="btnText">导出</div>
</div>
@@ -1090,7 +1094,7 @@
</div>
<div class="bm_input">
<a-input
v-model:value="gl_inputV2"
v-model:value="gl_inputV2"
style="width: 200px; height: 40px; border-radius: 8px"
placeholder="姓名"
/>
@@ -1706,6 +1710,7 @@
:id="offcoursePlanId"
:columns="stuColumns"
:visable="sm_hs"
:isgetStudent="isgetStudent"
>
<template #extension="{ data: { record } }">
<div style="display: flex">
@@ -2545,7 +2550,10 @@ const columns2 = [
customRender: (text) => {
return (
<div class="racona">
<span> {text.record.studentName?text.record.studentName:"-"}</span>
<span>
{" "}
{text.record.studentName ? text.record.studentName : "-"}
</span>
</div>
);
},
@@ -2559,7 +2567,10 @@ const columns2 = [
customRender: (text) => {
return (
<div class="racona">
<span> {text.record.studentUserNo?text.record.studentUserNo:"-"}</span>
<span>
{" "}
{text.record.studentUserNo ? text.record.studentUserNo : "-"}
</span>
</div>
);
},
@@ -2573,7 +2584,7 @@ const columns2 = [
customRender: (text) => {
return (
<div class="racona">
<span> {text.record.name?text.record.name:"-"}</span>
<span> {text.record.name ? text.record.name : "-"}</span>
</div>
);
},
@@ -2587,7 +2598,7 @@ const columns2 = [
customRender: (text) => {
return (
<div class="racona">
<span> {text.record.address?text.record.address:"-"}</span>
<span> {text.record.address ? text.record.address : "-"}</span>
</div>
);
},
@@ -2601,7 +2612,10 @@ const columns2 = [
customRender: (text) => {
return (
<div class="racona">
<span> {text.record.courseSource?text.record.courseSource:"-"}</span>
<span>
{" "}
{text.record.courseSource ? text.record.courseSource : "-"}
</span>
</div>
);
},
@@ -2615,7 +2629,10 @@ const columns2 = [
customRender: (text) => {
return (
<div class="racona">
<span> {text.record.lastStudyTime?text.record.lastStudyTime:"-"}</span>
<span>
{" "}
{text.record.lastStudyTime ? text.record.lastStudyTime : "-"}
</span>
</div>
);
},
@@ -2629,7 +2646,7 @@ const columns2 = [
customRender: (text) => {
return (
<div class="racona">
<span> {text.record.signTime?text.record.signTime:"-"}</span>
<span> {text.record.signTime ? text.record.signTime : "-"}</span>
</div>
);
},
@@ -2643,7 +2660,12 @@ const columns2 = [
customRender: (text) => {
return (
<div class="racona">
<span> {text.record.finishStatus==0 || text.record.finishStatus == null ?"未开始":"已完成"}</span>
<span>
{" "}
{text.record.finishStatus == 0 || text.record.finishStatus == null
? "未开始"
: "已完成"}
</span>
</div>
);
},
@@ -2980,7 +3002,7 @@ export default defineComponent({
return (
<div class="racona">
<span>
{text.record.studentJobName
{text && text.record.studentJobName
? text.record.studentJobName
: "-"}
</span>
@@ -2994,13 +3016,11 @@ export default defineComponent({
dataIndex: "studentBandDesc",
key: "7",
align: "center",
customRender: (text) => {
customRender: (record) => {
return (
<div class="racona">
<span>
{text.record.studentBandDesc
? text.record.studentBandDesc
: "-"}
{record.studentBandDesc ? record.studentBandDesc : "-"}
</span>
</div>
);
@@ -3063,9 +3083,11 @@ export default defineComponent({
key: "7",
align: "center",
customRender: ({ record }) => {
switch (String(record.status)) {
case "0":
return (
return (
<div class="racona">
{record.workScore ? (
<span>{record.workScore}</span>
) : (
<span
style={{ color: "#4EA6FF", cursor: "pointer" }}
onClick={() => {
@@ -3074,12 +3096,26 @@ export default defineComponent({
>
成绩录入
</span>
);
case "1":
return "-";
case "2":
return "-";
}
)}
</div>
);
// switch (String(record.status)) {
// case "0":
// return (
// <span
// style={{ color: "#4EA6FF", cursor: "pointer" }}
// onClick={() => {
// handlJoinStu(record);
// }}
// >
// 成绩录入
// </span>
// );
// case "1":
// return "-";
// case "2":
// return "-";
// }
},
},
{
@@ -3314,6 +3350,8 @@ export default defineComponent({
xygl_inputV1: "",
//录入成绩
lrcj_inputV1: "",
scoreId: null, //录入成绩id
isgetStudent: false, //是否重新获取学员
//结业
jyradioV1: "",
@@ -3854,6 +3892,7 @@ export default defineComponent({
state.studentItem = itm;
state.rg_hs = true;
state.scoreId = itm.id;
};
const handleOverStu = (itm) => {
console.log(itm);
@@ -4091,7 +4130,7 @@ export default defineComponent({
offcoursePlanId: state.offcoursePlanId,
name: state.xygl_inputV1,
};
// console.log("获取学员信息", obj);
console.log("获取学员信息", obj);
let res = await studentList(obj);
console.log("获取学员列表", res);
const { rows, total, pageNo } = res.data.data;
@@ -4147,7 +4186,7 @@ export default defineComponent({
state.gl_selectV2 = undefined;
state.manageStuLoading = true;
getCourseStudentList();
}
};
// const getTableDate33 = async () => {
// let datas = state.tableData2;
// let res = await listReview({
@@ -4724,26 +4763,31 @@ export default defineComponent({
const handleJoin = async () => {
if (state.rg_hs) {
if (state.piliang) {
handleStudent({
offcoursePlanId: state.offcoursePlanId,
api1.updateStudent({
score: state.lrcj_inputV1,
studentIds: state.selectedRowKeys7,
type: 1,
id: state.scoreId,
});
getTableDate2();
delete_exit1();
} else {
handleStudent({
offcoursePlanId: state.offcoursePlanId,
score: state.lrcj_inputV1,
studentIds: [state.studentId],
type: 1,
}).then((res) => {
if (res.data.code === 200) {
getTableDate2();
delete_exit1();
}
});
api1
.updateStudent({
score: state.lrcj_inputV1,
id: state.scoreId,
})
.then((res) => {
console.log("成绩录入", res);
if (res.data.code === 200) {
// getTableDate2();
state.isgetStudent = true;
delete_exit1();
state.lrcj_inputV1 = "";
state.scoreId = null;
}
})
.catch((err) => {
console.log("录入失败", err);
});
}
}
};
@@ -4950,10 +4994,21 @@ export default defineComponent({
}
window.open(
`${process.env.VUE_APP_PROXY_URL}admin/offcourse/export?pageNo=${state.currentPage1}&pageSize=${state.pageSize1}&auditStatus=${state.auditStatus?state.auditStatus:""}&categoryId=${state.categoryId?state.categoryId:""}&projectName=${state.projectName?state.projectName:""}&name=${state.name?state.name:""}&createName=${state.createName?state.createName:""}&endTime=${endTime?endTime:""}&beginTime=${startTime?startTime:""}`
`${process.env.VUE_APP_PROXY_URL}admin/offcourse/export?pageNo=${
state.currentPage1
}&pageSize=${state.pageSize1}&auditStatus=${
state.auditStatus ? state.auditStatus : ""
}&categoryId=${state.categoryId ? state.categoryId : ""}&projectName=${
state.projectName ? state.projectName : ""
}&name=${state.name ? state.name : ""}&createName=${
state.createName ? state.createName : ""
}&endTime=${endTime ? endTime : ""}&beginTime=${
startTime ? startTime : ""
}`
);
{/* exportP({
{
/* exportP({
pageNo: state.currentPage1,
pageSize: state.pageSize1,
auditStatus: state.auditStatus,
@@ -4967,7 +5022,8 @@ export default defineComponent({
if (res.data.code === 200) {
message.success("导出成功");
}
}); */}
}); */
}
};
//获取教师
const getTea = async () => {
@@ -5497,7 +5553,8 @@ export default defineComponent({
url:
type == 1
? process.env.VUE_APP_COURSE_STUDY + record.offcourseId
:process.env.VUE_APP_BOE_API_URL + `/admin/student/studentSign?taskId=${
: process.env.VUE_APP_BOE_API_URL +
`/admin/student/studentSign?taskId=${
record.offcoursePlanId
}&type=${3}`,
};
@@ -6900,7 +6957,7 @@ export default defineComponent({
}
}
.btn2 {
.btn2 {
.search {
width: 15px;
height: 17px;