feat:增加面授课成绩录入结业批量结业

This commit is contained in:
lixg
2023-02-01 17:31:29 +08:00
parent 8beb086909
commit 511f8cced3
7 changed files with 386 additions and 131 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-10 17:38:43
* @LastEditTime: 2023-02-01 11:07:17
* @FilePath: /fe-manage/src/api/index1.js
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
@@ -190,4 +190,4 @@ export const getImportStatus = (uuid) => http.get('/admin/student/getImportStatu
// 面授课导入学员
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)
export const updateStudent = (obj) => http.post('/admin/student/homeWorkScoreEntry', obj)

View File

@@ -2,7 +2,7 @@
* @Author: lixg lixg@dongwu-inc.com
* @Date: 2022-12-20 17:00:37
* @LastEditors: lixg lixg@dongwu-inc.com
* @LastEditTime: 2023-01-31 15:51:36
* @LastEditTime: 2023-01-31 16:14:39
* @FilePath: /fe-manage/src/components/student/ChangeLevelModal.vue
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
@@ -92,3 +92,124 @@ const changeGroup = (item) => {
console.log("换组", item);
};
</script>
<style lang="scss">
.changeModal {
.ant-modal {
width: 549px !important;
height: 245px !important;
.ant-modal-close-x {
display: none;
}
.ant-modal-content {
width: 549px !important;
height: 245px !important;
.ant-modal-body {
padding: 0 !important;
width: 549px !important;
height: 245px !important;
.con {
// background-color: #bfa;
width: 100%;
height: 100%;
.header {
width: 100%;
display: flex;
height: 68px;
position: relative;
justify-content: center;
background: linear-gradient(
rgba(78, 166, 255, 0.2) 0%,
rgba(78, 166, 255, 0) 100%
);
.inhe {
width: 80%;
height: 100%;
display: flex;
justify-content: space-between;
align-items: center;
.mod {
left: 30px;
top: 27px;
position: absolute;
width: 18px;
height: 17px;
background-image: url(../../assets/images/leveladd/mod.png);
}
.tz {
color: #000000;
font-weight: 400;
font-size: 16px;
}
.mg {
width: 20px;
height: 20px;
background-image: url(../../assets/images/basicinfo/close22.png);
background-size: 100% 100%;
cursor: pointer;
}
}
}
.mid {
width: 100%;
display: flex;
height: 100%;
justify-content: center;
.inher {
width: 80%;
height: 100%;
.cur {
color: #6f6f6f;
font-size: 14px;
}
.select {
margin-top: 10px;
}
.btn {
width: 100%;
display: flex;
justify-content: center;
margin-top: 30px;
.sameb {
width: 100px;
height: 40px;
font-size: 14px;
border-radius: 8px;
}
.btn1 {
color: #4ea6ff;
background: #ffffff;
border: 1px solid #4ea6ff;
}
.btn2 {
margin-left: 16px;
border: 0;
color: #ffffff;
background: #4ea6ff;
}
}
}
}
}
}
}
}
}
</style>

View File

@@ -161,10 +161,9 @@
<div class="btn4_tit" @click="showEScoreModal">
<span>批量录入成绩</span>
</div>
<!--2023-1-12 隐藏 后面放开 -->
<!-- <div class="btn4_op1" @click="updateStatus(1)">
<div class="btn4_op1" @click="updateStatus(1)">
<span>批量结业</span>
</div> -->
</div>
<div class="btn4_op2" @click="updateStatus(0)">
<span>批量通过</span>
</div>

View File

@@ -316,37 +316,110 @@
<template #bodyCell="{ record, column }">
<template v-if="column.key === 'operation'">
<a-space :size="0">
<a-button v-if="record.status===0 || record.status===-1 || !record.kkty" @click="() => handleEdit(record, String(record.courseform))" type="link">编辑</a-button>
<a-button block v-if="record.status===2" @click="() => handleStart(record, String(record.courseform))" type="link">开课</a-button>
<a-button v-if="record.status===2" @click="() => handleLook(record, String(record.courseform))" type="link">查看</a-button>
<a-button v-if="record.status===2" @click="() => handleGuan22(record, String(record.courseform))" type="link">管理</a-button>
<a-button
v-if="
record.status === 0 || record.status === -1 || !record.kkty
"
@click="() => handleEdit(record, String(record.courseform))"
type="link"
>编辑</a-button
>
<a-button
block
v-if="record.status === 2"
@click="() => handleStart(record, String(record.courseform))"
type="link"
>开课</a-button
>
<a-button
v-if="record.status === 2"
@click="() => handleLook(record, String(record.courseform))"
type="link"
>查看</a-button
>
<a-button
v-if="record.status === 2"
@click="() => handleGuan22(record, String(record.courseform))"
type="link"
>管理</a-button
>
<div className="tableSelect" style="margin-left: 0">
<a-select value="授权" dropdownClassName="tabledropdown">
<a-select-option value="权限名单" label="权限名单">
<TableModelStudent :types="[10,11,12]" :id="record.offcourseId">权限名单</TableModelStudent>
<TableModelStudent
:types="[10, 11, 12]"
:id="record.offcourseId"
>权限名单</TableModelStudent
>
</a-select-option>
<a-select-option value="查看权" label="查看权">
<CommonStudent :type="10" :id="record.offcourseId">查看权</CommonStudent>
<CommonStudent :type="10" :id="record.offcourseId"
>查看权</CommonStudent
>
</a-select-option>
<a-select-option value="管理权" label="管理权">
<CommonStudent :type="11" :id="record.offcourseId">管理权</CommonStudent>
<CommonStudent :type="11" :id="record.offcourseId"
>管理权</CommonStudent
>
</a-select-option>
</a-select>
</div>
<div className="tableSelect">
<a-select value="更多" dropdownClassName="tabledropdown">
<a-select-option value="复制" label="复制">
<a-button @click="() => handleCopy(record, String(record.courseform))" type="link">复制</a-button>
<a-button
@click="
() => handleCopy(record, String(record.courseform))
"
type="link"
>复制</a-button
>
</a-select-option>
<a-select-option v-if="record.status===1" value="撤回" label="撤回">
<a-button @click="() => handleRejectExit(record, String(record.courseform))" type="link">撤回</a-button>
<a-select-option
v-if="record.status === 1"
value="撤回"
label="撤回"
>
<a-button
@click="
() =>
handleRejectExit(record, String(record.courseform))
"
type="link"
>撤回</a-button
>
</a-select-option>
<a-select-option v-if="record.status===2" value="停用" label="停用">
<a-button v-if="record.status===2 && record.kkty" @click="() => handleStop(record, String(record.courseform))" type="link">停用</a-button>
<a-button v-if="record.status===2 && !record.kkty" @click="() => handleOpen(record, String(record.courseform))" type="link">启用</a-button>
<a-select-option
v-if="record.status === 2"
value="停用"
label="停用"
>
<a-button
v-if="record.status === 2 && record.kkty"
@click="
() => handleStop(record, String(record.courseform))
"
type="link"
>停用</a-button
>
<a-button
v-if="record.status === 2 && !record.kkty"
@click="
() => handleOpen(record, String(record.courseform))
"
type="link"
>启用</a-button
>
</a-select-option>
<a-select-option value="删除" label="删除">
<a-button @click="() => handleDelete(record, String(record.courseform))" type="link" danger>删除</a-button>
<a-button
@click="
() => handleDelete(record, String(record.courseform))
"
type="link"
danger
>删除</a-button
>
</a-select-option>
</a-select>
</div>
@@ -1122,9 +1195,42 @@
:isgetStudent="isgetStudent"
>
<template #extension="{ data: { record } }">
<a-button v-if="record.source === 4 && record.status === 1" @click="() => {record.status = 0;auditStudent(record);}" type="link">审核通过</a-button>
<a-button v-if="record.source === 4 && record.status === 1" @click="() => {record.status = 2;auditStudent(record);}" type="link">拒绝</a-button>
<a-button v-if="record.source === 4 && (record.status === 0 || record.status === 2)" @click="() => {record.status = 1;auditStudent(record);}" type="link">撤回</a-button>
<a-button
v-if="record.source === 4 && record.status === 1"
@click="
() => {
record.status = 0;
auditStudent(record);
}
"
type="link"
>审核通过</a-button
>
<a-button
v-if="record.source === 4 && record.status === 1"
@click="
() => {
record.status = 2;
auditStudent(record);
}
"
type="link"
>拒绝</a-button
>
<a-button
v-if="
record.source === 4 &&
(record.status === 0 || record.status === 2)
"
@click="
() => {
record.status = 1;
auditStudent(record);
}
"
type="link"
>撤回</a-button
>
</template>
</TableStudent>
</div>
@@ -1452,11 +1558,11 @@
</div>
</div>
<div class="qrm_btnbox">
<div class="qrm_btn btn1">
<div class="btnText" @click="graduate_exit">取消</div>
<div class="qrm_btn btn1" @click="graduate_exit">
<div class="btnText">取消</div>
</div>
<div class="qrm_btn btn2">
<div class="btnText" @click="handleJie">确定</div>
<div class="qrm_btn btn2" @click="handleJie">
<div class="btnText">确定</div>
</div>
</div>
</div>
@@ -1721,15 +1827,10 @@ import { useStore } from "vuex";
const columns1 = [
{
title: "课程编号",
width: 100,
dataIndex: "num",
key: "num",
width: 130,
dataIndex: "offcourseNumber",
key: "offcourseNumber",
align: "center",
customRender: ({ index, record }) => {
const pageNum =
Number(record.pageNo) - 1 > 0 ? (Number(record.pageNo) - 1) * 10 : 0;
return index + 1 + pageNum;
},
},
{
title: "名称",
@@ -1790,7 +1891,7 @@ const columns1 = [
{
title: "学习人数",
width: 130,
dataIndex: "stunum",
dataIndex: "studentCnt",
key: "4",
align: "center",
customRender: ({ text }) => {
@@ -2098,7 +2199,6 @@ const columns6 = [
return text ? text : "-";
},
},
// 新加学员数
{
title: "学员数",
dataIndex: "studentCnt",
@@ -2385,18 +2485,19 @@ export default defineComponent({
customRender: ({ record }) => {
return (
<div class="racona">
{record.workScore ? (
{record.workScore === -2 ? (
"-"
) : record.workScore ? (
<span>{record.workScore}</span>
) : (
// <span
// style={{ color: "#4EA6FF", cursor: "pointer" }}
// onClick={() => {
// handlJoinStu(record);
// }}
// >
// 成绩录入
// </span>
<span></span>
<span
style={{ color: "#4EA6FF", cursor: "pointer" }}
onClick={() => {
handlJoinStu(record);
}}
>
成绩录入
</span>
)}
</div>
);
@@ -2426,15 +2527,35 @@ export default defineComponent({
key: "8",
align: "center",
},
// 2023-1-12 隐藏 后面放开
// {
// title: "结业状态",
// width: "15%",
// dataIndex: "completionStatus",
// key: "8",
// align: "center",
// customRender: ({ record }) => <div>{{1:'结业'}[record.completionStatus] || '-'}</div>,
// },
{
title: "结业状态",
width: "15%",
dataIndex: "completionStatus",
key: "8",
align: "center",
customRender: ({ record }) => {
return (
<div>
{record.finishStatus == 1 &&
record.workScore != -2 &&
record.signStatus == 1 ? (
<div
style={{ color: "#4EA6FF", cursor: "pointer" }}
onClick={() => {
handleOverStu(record);
}}
>
结业
</div>
) : record.completionStatus == 1 ? (
<div>已结业</div>
) : (
<div>-</div>
)}
</div>
);
},
},
],
shipType: 1,
addLoading: false,
@@ -2688,6 +2809,7 @@ export default defineComponent({
regisCom: false,
comLeave: false,
studentId: 0,
homeWorkId: null,
studentItem: {},
addOnlineCoursevisible: false, //新建面授弹窗
@@ -3080,6 +3202,7 @@ export default defineComponent({
endTime: endTime,
beginTime: startTime,
});
console.log("获取面授课列表", res);
const { rows, total, pageNo } = res.data.data;
console.log(res.data.data);
state.tableDataTotal1 = total;
@@ -3191,7 +3314,7 @@ export default defineComponent({
state.scoreId = itm.id;
};
const handleOverStu = (itm) => {
console.log(itm);
console.log("点击结业", itm);
state.studentId = itm.studentId;
state.studentItem = itm;
@@ -3964,7 +4087,7 @@ export default defineComponent({
state.kk_eidt = true;
};
const handelGuan = (itm) => {
console.log(676766);
console.log("开课信息", itm);
state.offcourseId = itm.offcourseId;
state.offcoursePlanId = itm.offcoursePlanId;
state.studentId = itm.studentId;
@@ -3977,6 +4100,7 @@ export default defineComponent({
state.sm_hs = true;
// getTableDate2();
state.homeWorkId = itm.homeWorkId;
};
const sm_exit = () => {
state.sm_hs = false;
@@ -4061,16 +4185,18 @@ export default defineComponent({
if (state.rg_hs) {
if (state.piliang) {
api1.updateStudent({
score: state.lrcj_inputV1,
id: state.scoreId,
workScore: state.lrcj_inputV1,
workId: state.homeWorkId,
studentId: state.studentId,
});
getTableDate2();
delete_exit1();
} else {
api1
.updateStudent({
score: state.lrcj_inputV1,
id: state.scoreId,
workScore: state.lrcj_inputV1,
workId: state.homeWorkId,
studentId: state.studentId,
})
.then((res) => {
console.log("成绩录入", res);
@@ -4090,12 +4216,15 @@ export default defineComponent({
};
const handleJie = async () => {
if (state.graduate_hs) {
handleStudent({
offcoursePlanId: state.offcoursePlanId,
score: "",
studentIds: [state.studentId],
type: 2,
}).then((res) => {
// state.studentItem.id
// console.log("state.studentItem.id", state.studentItem.id);
api1
.batchUpdateStatus({
completionStatus: 1,
ids: [state.studentItem?.id],
// status: 1,
})
.then((res) => {
if (res.data.code === 200) {
getTableDate2();
delete_exit1();

View File

@@ -698,16 +698,13 @@ import ProjCheckShip from "../../components/drawers/ProjCheckPower";
import * as api from "../../api/index1";
import * as apiStu from "../../api/index";
import { message } from "ant-design-vue";
import {
commonData,
} from "@/api/method";
import { commonData } from "@/api/method";
import { storage } from "@/api/storage";
import { useStore } from "vuex";
import OrgClass from "@/components/project/OrgClass";
import NameInput from "@/components/project/NameInput";
import { validateName } from "@/api/index1";
export default {
name: "learningPath",
components: {
@@ -905,13 +902,15 @@ export default {
console.log("err", err);
});
//获取学员列表
apiStu.projectStudentCount({
apiStu
.projectStudentCount({
pid: router.id,
type:2
}).then((res) => {
type: 2,
})
.then((res) => {
state.routeStudentsNum = res.data.data;
state.pubLoading = false;
})
});
};
//确定发布
const releaseLearnPath = () => {
@@ -1253,13 +1252,23 @@ export default {
dropdownClassName="tabledropdown"
>
<a-select-option value="权限名单" label="权限名单">
<OwnerTableModelStudent types={[7,8,9]} id={text.record.id} type={9}>权限名单</OwnerTableModelStudent>
<OwnerTableModelStudent
types={[7, 8, 9]}
id={text.record.id}
type={9}
>
权限名单
</OwnerTableModelStudent>
</a-select-option>
<a-select-option value="查看权" label="查看权">
<CommonStudent type={7} id={text.record.id}>查看权</CommonStudent>
<CommonStudent type={7} id={text.record.id}>
查看权
</CommonStudent>
</a-select-option>
<a-select-option value="管理权" label="管理权">
<CommonStudent type={8} id={text.record.id}>管理权</CommonStudent>
<CommonStudent type={8} id={text.record.id}>
管理权
</CommonStudent>
</a-select-option>
</a-select>
}
@@ -1451,7 +1460,7 @@ export default {
name: state.pathName,
type: 3,
id: state.editPathId,
}).then(res => {
}).then((res) => {
return res.data.data == 1;
});
if (offName) {
@@ -1590,7 +1599,6 @@ export default {
arr.forEach((item) => {
if (item.dictValue === state.pathBg) {
state.pathBgId = item.dictCode;
}
});
@@ -1638,7 +1646,7 @@ export default {
name: state.pathName,
type: 3,
id: state.editPathId,
}).then(res => {
}).then((res) => {
return res.data.data == 1;
});
if (offName) {
@@ -1778,7 +1786,7 @@ export default {
// state.imgData = ;
// }
});
const imgData = computed(()=>store.state.pathmapPic)
const imgData = computed(() => store.state.pathmapPic);
//添加权限
watch(
() => state.addAuthList,

View File

@@ -1388,7 +1388,6 @@ export default {
const router = useRouter();
// const store = useStore();
const state = reactive({
pjModelVisible: false,
hasTask: false,
stage: [],
statess: [],

View File

@@ -2836,7 +2836,6 @@ export default {
facestudent: "",
modal1Visible: false, // 证书预览
changegroupV: false, //换组弹窗
});