Merge remote-tracking branch 'origin/develop' into develop

# Conflicts:
#	src/views/courselibrary/CoursewareManage.vue
#	src/views/learningpath/LearningPath.vue
#	src/views/learningpath/LevelAdd.vue
This commit is contained in:
yuping
2023-02-01 20:25:12 +08:00
7 changed files with 252 additions and 117 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
*/
@@ -78,7 +78,7 @@ export const delStudent = (obj) =>
http.post("/admin/router/deleteStudent", obj);
// 获取学员路径图进度明细
export const stuProgress = (params) => http.get('/admin/router/studentProcess', {params});
export const stuProgress = (params) => http.get('/admin/router/studentProcess', { params });
// export const stuProgress = (obj) =>http.post("/admin/router/studentProcess", obj);
//编辑学习路径基本信息
@@ -103,7 +103,7 @@ export const billboard = (obj) => http.post("/admin/project/billboard", obj);
//公共信息---------------------------------------------------
// 获取字典信息
export const getDict = (obj) => http.post('/dict/getList', obj)
export const getDictTree = (params) => http.get('/dict/getTree', {params})
export const getDictTree = (params) => http.get('/dict/getTree', { params })
//获取组织树一级列表
export const getOrgTree = (obj) => http.post('/admin/router/orgList', obj)
//根据id获取组织树一级元素下所有子元素
@@ -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

@@ -162,10 +162,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

@@ -1279,11 +1279,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>
@@ -1550,15 +1550,10 @@ import {checkPer} from "@/utils/utils";
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: "名称",
@@ -1619,7 +1614,7 @@ const columns1 = [
{
title: "学习人数",
width: 130,
dataIndex: "stunum",
dataIndex: "studentCnt",
key: "4",
align: "center",
customRender: ({ text }) => {
@@ -1720,7 +1715,7 @@ const columns1 = [
},
{
title: "操作",
width: 320,
width: 370,
dataIndex: "operation",
key: "operation",
fixed: "right",
@@ -1927,7 +1922,6 @@ const columns6 = [
return text ? text : "-";
},
},
// 新加学员数
{
title: "学员数",
dataIndex: "studentCnt",
@@ -2215,18 +2209,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>
);
@@ -2256,15 +2251,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,
@@ -2518,6 +2533,7 @@ export default defineComponent({
regisCom: false,
comLeave: false,
studentId: 0,
homeWorkId: null,
studentItem: {},
addOnlineCoursevisible: false, //新建面授弹窗
@@ -2910,6 +2926,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;
@@ -3021,7 +3038,7 @@ export default defineComponent({
state.scoreId = itm.id;
};
const handleOverStu = (itm) => {
console.log(itm);
console.log("点击结业", itm);
state.studentId = itm.studentId;
state.studentItem = itm;
@@ -3794,7 +3811,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;
@@ -3807,6 +3824,7 @@ export default defineComponent({
state.sm_hs = true;
// getTableDate2();
state.homeWorkId = itm.homeWorkId;
};
const sm_exit = () => {
state.sm_hs = false;
@@ -3891,16 +3909,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);
@@ -3920,17 +3940,20 @@ export default defineComponent({
};
const handleJie = async () => {
if (state.graduate_hs) {
handleStudent({
offcoursePlanId: state.offcoursePlanId,
score: "",
studentIds: [state.studentId],
type: 2,
}).then((res) => {
if (res.data.code === 200) {
getTableDate2();
delete_exit1();
}
});
// 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();
}
});
}
};
//确认复制
@@ -4448,15 +4471,13 @@ export default defineComponent({
// 管理开课
const handleGuan22 = (item) => {
if (String(item.courseform) === '1') {
if (String(item.courseform) === "1") {
return;
}
if (String(item.courseform) === ('1' || '线上')) {
if (String(item.courseform) === ("1" || "线上")) {
state.om_1 = true;
state.ft_1 = false;
} else if (
String(item.courseform) === ('2' || '面授')
) {
} else if (String(item.courseform) === ("2" || "面授")) {
state.om_1 = true;
state.ft_1 = true;
}
@@ -4824,7 +4845,7 @@ export default defineComponent({
handelChangePageTea2,
submitReview,
reviewClick,
checkPer,
showPrower,
showOwnPrower,
showViewPrower,
@@ -7301,24 +7322,24 @@ export default defineComponent({
margin-bottom: 20px;
}
.tableSelect {
position: relative;
.hoverList {
display: none;
}
&:hover {
.hoverList {
display: block;
position: absolute;
top: 20px;
left: -20px;
background: #fff;
box-sizing: border-box;
// padding: 20px;
color: #000000;
}
}
}
.tableSelect {
position: relative;
.hoverList {
display: none;
}
&:hover {
.hoverList {
display: block;
position: absolute;
top: 20px;
left: -20px;
background: #fff;
box-sizing: border-box;
// padding: 20px;
color: #000000;
}
}
}
// ::v-deep .w-e-toolbar {
// .w-e-bar-item {

View File

@@ -266,7 +266,7 @@
class="aeLoading"
:style="{ display: lpLoading ? 'flex' : 'none' }"
>
<a-spin :spinning="lpLoading" tip=""/>
<a-spin :spinning="lpLoading" tip="" />
</div>
</div>
</div>
@@ -300,7 +300,7 @@
/>
</div>
<div class="inname">路径图名称</div>
<div class="in road" >
<div class="in road">
<!-- <a-input-->
<!-- v-model:value="pathName"-->
<!-- maxlength="20"-->
@@ -721,18 +721,15 @@ 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";
import { validateName } from "@/api/index1";
import DropDown from "@/components/common/DropDown";
import {checkPer} from "@/utils/utils";
export default {
name: "learningPath",
components: {
@@ -743,7 +740,7 @@ export default {
ProjCheckShip,
CommonStudent,
OwnerTableModelStudent,
DropDown
DropDown,
},
setup() {
@@ -883,7 +880,7 @@ export default {
state.pathIntro = "";
state.out = !state.out;
setTimeout(() => {
if(store.state.userInfo.departId && store.state.userInfo.departName){
if (store.state.userInfo.departId && store.state.userInfo.departName) {
state.organizationSelectName = store.state.userInfo.departName;
state.organizationSelectId = store.state.userInfo.departId;
}
@@ -892,7 +889,7 @@ export default {
const handleOut1 = () => {
state.pathName = "";
state.pathBg = "";
state.pathBgId =1;
state.pathBgId = 1;
state.organizationSelectName = null;
state.organizationSelectId = null;
state.pathIntro = "";
@@ -930,13 +927,15 @@ export default {
console.log("err", err);
});
//获取学员列表
apiStu.projectStudentCount({
apiStu
.projectStudentCount({
pid: router.id,
type:2
}).then((res) => {
state.routeStudentsNum = res.data.data;
state.pubLoading = false;
type: 2,
})
.then((res) => {
state.routeStudentsNum = res.data.data;
state.pubLoading = false;
});
};
//确定发布
const releaseLearnPath = () => {
@@ -1126,7 +1125,6 @@ export default {
pubtime: value.publishTime ? value.publishTime : "-",
cretime: value.createTime ? value.createTime : "-",
remark: value.remark ? value.remark : "-",
permissions:value.permissions
};
array.push(obj);
});
@@ -1194,7 +1192,7 @@ export default {
width: "20%",
align: "right",
fixed: "right",
scopedSlots: { customRender: "action" }
scopedSlots: { customRender: "action" },
},
];
return columns;
@@ -1205,7 +1203,7 @@ export default {
state.organizationSelectId = e;
};
//创建学习路径图
const createLearnPath = async() => {
const createLearnPath = async () => {
if (!state.pathName) {
message.destroy();
return message.warning("请输入路径图名称");
@@ -1223,11 +1221,11 @@ export default {
message.warning("路径图名称重复");
return;
}
const offName = await validateName({
const offName = await validateName({
name: state.pathName,
type: 3,
id:state.editPathId,
}).then(res => {
id: state.editPathId,
}).then((res) => {
return res.data.data == 1;
});
if (offName) {
@@ -1282,7 +1280,7 @@ export default {
//获取学习路径列表
const getLearnPath = () => {
state.tableLoading = true
state.tableLoading = true;
let obj = {
pageNo: state.currentPage,
pageSize: state.pageSize,
@@ -1309,7 +1307,7 @@ export default {
}
getTableDate(arr);
state.tableDataTotal = Number(res.data.data.total);
state.tableLoading = false
state.tableLoading = false;
}
})
.catch((err) => {
@@ -1376,8 +1374,8 @@ export default {
const offName = await validateName({
name: state.pathName,
type: 3,
id:state.editPathId,
}).then(res => {
id: state.editPathId,
}).then((res) => {
return res.data.data == 1;
});
if (offName) {
@@ -1459,7 +1457,7 @@ export default {
state.searchdate = null;
state.startTime = null;
state.endTime = null;
state.createUser=null;
state.createUser = null;
getLearnPath();
};
@@ -1517,7 +1515,7 @@ export default {
// state.imgData = ;
// }
});
const imgData = computed(()=>store.state.pathmapPic)
const imgData = computed(() => store.state.pathmapPic);
//添加权限
watch(
() => state.addAuthList,
@@ -1548,7 +1546,7 @@ export default {
});
}
);
function manage(id){
function manage(id) {
router.push({
path: "/leveladd",
});
@@ -1596,7 +1594,6 @@ export default {
searchLearnPath,
resetLearnPath,
showLearnBgMore,
checkPer,
closeLearnBgMore,
};
},

View File

@@ -1350,7 +1350,6 @@ import TwoDimensionalCode from "../../components/TwoDimensionalCode.vue";
import TableStudent from "@/components/student/TableStudent";
// import * as student from "@/api/student";
import { getStuPage, moveStudent } from "@/api/index1";
import { checkPer } from "@/utils/utils";
import RouterFaceTeachManage from "../../components/drawers/router/RouterFaceTeachManage";
import RouterExaminationManage from "../../components/drawers/router/RouterExaminationManage";
@@ -1389,7 +1388,7 @@ export default {
const router = useRouter();
// const store = useStore();
const state = reactive({
permissions:'',
permissions: "",
hasTask: false,
stage: [],
statess: [],
@@ -2242,7 +2241,7 @@ export default {
.then((res) => {
console.log("router-list", res);
state.fileList = JSON.parse(res.data.data.routerInfo.attach);
state.permissions = res.data.data.routerInfo.permissions
state.permissions = res.data.data.routerInfo.permissions;
console.log("asdasdasd-------->", state.fileList);
state.docChecked =
res.data.data.routerInfo.attachSwitch == 1 ? true : false;
@@ -2715,7 +2714,6 @@ export default {
setLevels,
selectProjectName4,
changeLevel,
checkPer
};
},
};

View File

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