mirror of
https://codeup.aliyun.com/67762337eccfc218f6110e0e/vue/fe-manage.git
synced 2025-12-08 18:36:46 +08:00
教师权重
This commit is contained in:
@@ -464,7 +464,7 @@ const columns = ref([
|
||||
width: "20%",
|
||||
align: "center",
|
||||
customRender: ({ record }) => {
|
||||
const teachers = record.offteachers;
|
||||
const teachers = record.offteachers;
|
||||
return teachers.map((teacher, index) => {
|
||||
// 如果需要显示为列表形式
|
||||
return (
|
||||
@@ -473,7 +473,7 @@ const columns = ref([
|
||||
{index !== teachers.length - 1 && ', '}
|
||||
</div>
|
||||
);
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
},
|
||||
@@ -562,33 +562,33 @@ const formDataRule = {
|
||||
message: "请输入开课名称",
|
||||
},
|
||||
],
|
||||
beginTime: [
|
||||
{
|
||||
required: true,
|
||||
message: "请选择开始时间",
|
||||
},
|
||||
],
|
||||
endTime: [
|
||||
{
|
||||
required: true,
|
||||
message: "请选择结束时间",
|
||||
},
|
||||
],
|
||||
// beginTime: [
|
||||
// {
|
||||
// required: true,
|
||||
// message: "请选择开始时间",
|
||||
// },
|
||||
// ],
|
||||
// endTime: [
|
||||
// {
|
||||
// required: true,
|
||||
// message: "请选择结束时间",
|
||||
// },
|
||||
// ],
|
||||
offteachers: [
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
if (!value.every(item => item.teacherName)) {
|
||||
callback(new Error('请选择教师'));
|
||||
callback(new Error('请填写教师名称和设置权重'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
},
|
||||
message: '请选择教师',
|
||||
message: '请填写教师名称和设置权重',
|
||||
fields: {
|
||||
teacherName: [
|
||||
{
|
||||
required: true,
|
||||
message: "请选择教师",
|
||||
message: "请填写教师名称和设置权重",
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -740,15 +740,18 @@ const del = (id,record) => {
|
||||
};
|
||||
|
||||
async function coursePlanConfirm() {
|
||||
console.log({ ...formData.value },'{ ...formData.value }')
|
||||
if(!dateTime.value[0]){
|
||||
message.info('开始时间未填写')
|
||||
return
|
||||
}
|
||||
if(!dateTime.value[1]){
|
||||
message.info('结束时间未填写')
|
||||
return
|
||||
}
|
||||
await validate().catch(({ errorFields }) => {
|
||||
message.warning(errorFields[0].errors.join());
|
||||
throw Error("数据校验不通过");
|
||||
});
|
||||
if(dateTime.value.length<2){
|
||||
message.info('请选择开始时间和结束时间')
|
||||
return
|
||||
}
|
||||
if(formData.value.offteachers.length==1&& totalWeightSum.value!=100){
|
||||
message.error('单名教师您设置的权重应该是100%')
|
||||
return
|
||||
@@ -756,6 +759,10 @@ async function coursePlanConfirm() {
|
||||
message.error('多名教师权重合计值为100%')
|
||||
return
|
||||
}
|
||||
if(formData.value.offteachers.some(item => item.weight==0)){
|
||||
message.error('权重值不能为0%')
|
||||
return
|
||||
}
|
||||
if(editBeginClass.value){
|
||||
message.info('讲师费已进入审批阶段,无法编辑')
|
||||
return
|
||||
@@ -1308,8 +1315,8 @@ defineExpose({ openDrawer });
|
||||
margin-top: 5px;
|
||||
span{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
font-size: 33px;
|
||||
height: 100%;
|
||||
font-size: 33px;
|
||||
}
|
||||
}
|
||||
.signbox {
|
||||
|
||||
@@ -188,7 +188,7 @@ const signOptions = ref([
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
value: 0,
|
||||
value: 2,
|
||||
label: "未签到",
|
||||
},
|
||||
]);
|
||||
|
||||
@@ -904,9 +904,9 @@
|
||||
<span v-else>新建开课</span>
|
||||
<div class="close_exit" @click="handleCancelStu"></div>
|
||||
</div>
|
||||
<div class="cstm_title">
|
||||
<!-- <div class="cstm_title">
|
||||
<span>面授名称:{{ newCourseName }}</span>
|
||||
</div>
|
||||
</div> -->
|
||||
<div class="cstm_items">
|
||||
<div class="signbox">
|
||||
<div class="sign">
|
||||
@@ -942,8 +942,8 @@
|
||||
</div>
|
||||
<span style="margin-right: 3px">面授时间</span>
|
||||
</div>
|
||||
<div class="select fitems">
|
||||
<a-range-picker
|
||||
<div class="select fitems" style="width: 84%">
|
||||
<!-- <a-range-picker
|
||||
style="width: 440px; height: 40px; border-radius: 8px"
|
||||
:show-time="{ format: 'HH:mm' }"
|
||||
format="YYYY-MM-DD HH:mm"
|
||||
@@ -952,6 +952,33 @@
|
||||
separator="至"
|
||||
:placeholder="[' 开始时间', ' 结束时间']"
|
||||
:disabled="editBeginClass"
|
||||
/> -->
|
||||
<a-date-picker
|
||||
style="width: 45%; height: 40px; border-radius: 8px"
|
||||
:show-time="{ format: 'HH:mm' }"
|
||||
format="YYYY-MM-DD HH:mm"
|
||||
valueFormat="YYYY-MM-DD HH:mm"
|
||||
v-model:value="xjkkinputV3[0]"
|
||||
@change="timeChange"
|
||||
:placeholder="' 开始时间'"
|
||||
:disabled="editBeginClass"
|
||||
@blur="onBlurStart"
|
||||
@focus="onFocusStart"
|
||||
@select="onDateSelect"
|
||||
/>
|
||||
<span style="margin: 0 10px;">至</span>
|
||||
<a-date-picker
|
||||
style="width: 45%; height: 40px; border-radius: 8px"
|
||||
:show-time="{ format: 'HH:mm' }"
|
||||
format="YYYY-MM-DD HH:mm"
|
||||
valueFormat="YYYY-MM-DD HH:mm"
|
||||
v-model:value="xjkkinputV3[1]"
|
||||
@change="timeChangeEnd"
|
||||
:placeholder="' 结束时间'"
|
||||
:disabled="editBeginClass"
|
||||
@focus="onFocusEnd"
|
||||
@blur="onBlurEnd"
|
||||
@select="onDateEnd"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
@@ -983,7 +1010,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cstm_items">
|
||||
<div class="cstm_items" style="align-items: baseline;">
|
||||
<div class="signbox">
|
||||
<div class="sign">
|
||||
<img
|
||||
@@ -993,12 +1020,26 @@
|
||||
</div>
|
||||
<span style="margin-right: 3px">授课教师</span>
|
||||
</div>
|
||||
<div class="select" style="width: 440px">
|
||||
<ProjectManager
|
||||
<div class="select teacher_input" style="display: flex; flex-wrap: wrap;width: 74.5%">
|
||||
<!-- <ProjectManager
|
||||
v-model:value="member.value"
|
||||
v-model:name="member.name"
|
||||
:disabled="editBeginClass"
|
||||
></ProjectManager>
|
||||
></ProjectManager> -->
|
||||
<div v-for="(item, index) in offteachers"
|
||||
:key="index" style="display: flex;margin-bottom: 10px;width: 100%;">
|
||||
<ProjectManager
|
||||
v-model:value="item.teacherId"
|
||||
v-model:name="item.teacherName"
|
||||
:disabled="editBeginClass"
|
||||
></ProjectManager>
|
||||
<a-input-number :min="0" :max="100" @change="inputWeightChange(index)" v-model:value="item.weight" placeholder="%"/>
|
||||
<span style="margin-top: 10px;width: 34px;">权重</span>
|
||||
<div style="display: flex;">
|
||||
<a-button shape="circle" class="btn-circle btn-add" @click="inputAdd">+</a-button>
|
||||
<a-button shape="circle" class="btn-circle" @click="inputRemove(index)" :disabled="offteachers.length == 1">-</a-button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cstm_items">
|
||||
@@ -1264,7 +1305,7 @@
|
||||
</div>
|
||||
<div class="stmm_i4">
|
||||
<span style="color: #999ba3">授课教师:</span>
|
||||
<span>{{ currentPlanItem.teacher }}</span>
|
||||
<!-- <span>{{ currentPlanItem.teacher }}</span> -->
|
||||
</div>
|
||||
<div class="stmm_i5">
|
||||
<TableStudent
|
||||
@@ -1750,7 +1791,7 @@ import { fileUp } from "../../api/indexEval";
|
||||
import * as api1 from "../../api/index1";
|
||||
|
||||
import "@wangeditor/editor/dist/css/style.css";
|
||||
import ProjectManager from "@/components/project/ProjectManagerNew";
|
||||
import ProjectManager from "@/components/project/ProjectManagerNewTeacher";
|
||||
|
||||
import SeeModal from "./components/seeModal.vue";
|
||||
import CourseModal from "./courseModal.vue";
|
||||
@@ -1941,9 +1982,18 @@ const columns6 = [
|
||||
width: "8%",
|
||||
align: "center",
|
||||
ellipsis: true,
|
||||
customRender: ({ text }) => {
|
||||
return text ? text : "-";
|
||||
},
|
||||
customRender: ({ record }) => {
|
||||
const teachers = record.offteachers;
|
||||
return teachers.map((teacher, index) => {
|
||||
// 如果需要显示为列表形式
|
||||
return (
|
||||
<div key={index}>
|
||||
{teacher.teacherName}
|
||||
{index !== teachers.length - 1 && ', '}
|
||||
</div>
|
||||
);
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
@@ -2402,11 +2452,16 @@ export default defineComponent({
|
||||
addLoading: false,
|
||||
currentPlanItem: {},
|
||||
teacherId: null,
|
||||
teacher: null,
|
||||
// teacher: null,
|
||||
selectedRowKeys7: [],
|
||||
auditDescription: "",
|
||||
isEdit: 0,
|
||||
member: { name: "", value: "" },
|
||||
offteachers:[{
|
||||
teacherId: "",
|
||||
teacherName: "",
|
||||
weight: '',
|
||||
}],
|
||||
//列表表格
|
||||
tableData1: [
|
||||
// {
|
||||
@@ -2619,7 +2674,7 @@ export default defineComponent({
|
||||
onceName: "",
|
||||
xjkkinputV2: "",
|
||||
duration: "",
|
||||
xjkkinputV3: "",
|
||||
xjkkinputV3: [],
|
||||
xjkkinputV4: null,
|
||||
beforeValue: null, //考勤 开始前
|
||||
afterStartValue: null, //考勤 开始后
|
||||
@@ -2829,8 +2884,78 @@ export default defineComponent({
|
||||
codeType: null, //二维码类型
|
||||
});
|
||||
|
||||
function timeChange(time, timeStr) {
|
||||
// state.duration || (state.duration = dayjs(timeStr[1]).diff(dayjs(timeStr[0]),'minute'))
|
||||
// function timeChange(time, timeStr) {
|
||||
// // state.duration || (state.duration = dayjs(timeStr[1]).diff(dayjs(timeStr[0]),'minute'))
|
||||
// }
|
||||
// function timeChange(timeStr) {
|
||||
// console.log(timeStr,'timeStr')
|
||||
// formData.value.beginTime = timeStr;
|
||||
// }
|
||||
function onDateSelect(date) {
|
||||
const month = String(date.$M+1).padStart(2, '0')
|
||||
const day = String(date.$D).padStart(2, '0')
|
||||
state.xjkkinputV3[0]=date.$y+'-'+month+'-'+day+' '+date.$H+':'+date.$m
|
||||
}
|
||||
function onBlurStart(){
|
||||
onFocusStart()
|
||||
console.log(state.xjkkinputV3[0],'dateTime')
|
||||
}
|
||||
function onFocusStart(){
|
||||
if(!state.xjkkinputV3[0]){
|
||||
let now=new Date()
|
||||
let start=new Date(now.setFullYear(now.getFullYear(), now.getMonth(), now.getDate(), 0, 0))
|
||||
state.xjkkinputV3 = [
|
||||
moment(start).format('YYYY-MM-DD HH:mm'),
|
||||
state.xjkkinputV3[1]
|
||||
];
|
||||
}
|
||||
}
|
||||
// function timeChangeEnd(timeStr){
|
||||
// formData.value.endTime = timeStr;
|
||||
// }
|
||||
function onDateEnd(date) {
|
||||
const month = String(date.$M+1).padStart(2, '0')
|
||||
const day = String(date.$D).padStart(2, '0')
|
||||
state.xjkkinputV3[1]=date.$y+'-'+month+'-'+day+' '+date.$H+':'+date.$m
|
||||
}
|
||||
function onFocusEnd(){
|
||||
if(!state.xjkkinputV3[1]){
|
||||
let now=new Date()
|
||||
let start=new Date()
|
||||
let end=new Date(now.setFullYear(now.getFullYear()))
|
||||
state.xjkkinputV3 = [
|
||||
state.xjkkinputV3[0],
|
||||
moment(end).format('YYYY-MM-DD HH:mm')
|
||||
];
|
||||
}
|
||||
}
|
||||
const totalWeightSum = ref(0)
|
||||
function inputWeightChange(index) {
|
||||
let totalWeight = 0
|
||||
state.offteachers.forEach(item => {
|
||||
totalWeight += Number(item.weight);
|
||||
});
|
||||
if (totalWeight > 100) {
|
||||
state.offteachers[index].weight -= totalWeight - 100;
|
||||
totalWeight = 100;
|
||||
}
|
||||
totalWeightSum.value = totalWeight
|
||||
}
|
||||
function inputAdd() {
|
||||
state.offteachers.push({
|
||||
teacherId: "",
|
||||
teacherName: "",
|
||||
weight: '',
|
||||
});
|
||||
}
|
||||
function inputRemove(index) {
|
||||
dialog({
|
||||
content: "确定删除此授课教师吗?",
|
||||
ok: async () => {
|
||||
state.offteachers.splice(index, 1);
|
||||
message.success("删除成功");
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
function findClassFullName(list, classify, name = "") {
|
||||
@@ -3239,7 +3364,7 @@ export default defineComponent({
|
||||
const rest = () => {
|
||||
options4CurName.value = "";
|
||||
options4CurId.value = "";
|
||||
state.teacher = null;
|
||||
// state.teacher = null;
|
||||
state.teacherId = null;
|
||||
};
|
||||
const handleChangeTea1 = (val) => {
|
||||
@@ -3409,7 +3534,7 @@ export default defineComponent({
|
||||
pageNo: type?state.currentPage2:state.currentPage222,
|
||||
pageSize: state.pageSize222,
|
||||
createName: state.kk_inputV1,
|
||||
teacher: state.kk_inputV2,
|
||||
// teacher: state.kk_inputV2,
|
||||
beginTime: beginTime,
|
||||
endTime: endTime,
|
||||
offcourseId: state.offcourseId,
|
||||
@@ -3582,7 +3707,7 @@ export default defineComponent({
|
||||
CourseModalRef.value.visibleOpen(null, state.xzinputV1);
|
||||
|
||||
state.valueE1 = "";
|
||||
state.teacher = "";
|
||||
// state.teacher = "";
|
||||
state.teacherName = "";
|
||||
|
||||
state.qdms_inputV1 = state.xzinputV1;
|
||||
@@ -3655,9 +3780,15 @@ export default defineComponent({
|
||||
handleRestTable();
|
||||
};
|
||||
const createkk = () => {
|
||||
state.xjkkinputV1 = state.newCourseName
|
||||
state.offcoursePlanId = null;
|
||||
state.itemType = 3;
|
||||
state.member = {};
|
||||
state.offteachers = [{
|
||||
teacherId: "",
|
||||
teacherName: "",
|
||||
weight: '',
|
||||
}]
|
||||
state.cstm_hs = true;
|
||||
};
|
||||
const handleCancelStu = () => {
|
||||
@@ -3672,7 +3803,7 @@ export default defineComponent({
|
||||
state.onceName = "";
|
||||
state.xjkkinputV2 = "";
|
||||
state.duration = "";
|
||||
state.xjkkinputV3 = "";
|
||||
state.xjkkinputV3 = [];
|
||||
state.xjkkinputV4 = null;
|
||||
state.checked1 = false;
|
||||
state.checked4 = false;
|
||||
@@ -3696,7 +3827,7 @@ export default defineComponent({
|
||||
}
|
||||
let startTime,
|
||||
endTime = 0;
|
||||
if (state.xjkkinputV3) {
|
||||
if (state.xjkkinputV3.length!=0) {
|
||||
startTime = dayjs(state.xjkkinputV3[0]).format("YYYY-MM-DD HH:mm"); //parseInt(state.xjkkinputV3[0].$d.getTime() / 1000);
|
||||
endTime = dayjs(state.xjkkinputV3[1]).format("YYYY-MM-DD HH:mm"); //parseInt(state.xjkkinputV3[1].$d.getTime() / 1000);
|
||||
}
|
||||
@@ -3734,8 +3865,9 @@ export default defineComponent({
|
||||
name: state.xjkkinputV1,
|
||||
signFlag: state.xjkkradioV1 ? 1 : 0, //是否允许未报名的签到:1是0否
|
||||
// signWordFlag: state.xjkkradioV1 === 1 ? 1 : 0, //签到是否需要口令:1是0否
|
||||
teacherId: state.member.value,
|
||||
teacher: state.member.name,
|
||||
// teacherId: state.member.value,
|
||||
// teacher: state.member.name,
|
||||
offteachers: state.offteachers,
|
||||
workInfo: state.workInfo, //提交的作业信息
|
||||
examInfo: state.examInfo, //提交的考试信息
|
||||
beforeStart: state.beforeValue, //考勤 开始前
|
||||
@@ -3745,15 +3877,27 @@ export default defineComponent({
|
||||
if(!postData.name){
|
||||
return message.error("请输入开课名称");
|
||||
}
|
||||
if(!postData.beginTime){
|
||||
return message.error("请选择开课时间");
|
||||
if(!state.xjkkinputV3[0]){
|
||||
return message.error("开始时间未填写");
|
||||
}
|
||||
if(!postData.endTime){
|
||||
return message.error("请选择结束时间");
|
||||
if(!state.xjkkinputV3[1]){
|
||||
return message.error("结束时间未填写");
|
||||
}
|
||||
if(!postData.teacherId){
|
||||
return message.error("请选择授课老师");
|
||||
if(state.offteachers.some(item => !item.teacherName)){
|
||||
return message.error("请填写教师名称和设置权重");
|
||||
}
|
||||
if(state.offteachers.length==1&& totalWeightSum.value!=100){
|
||||
message.error('单名教师您设置的权重应该是100%')
|
||||
return
|
||||
}else if(state.offteachers.length>1&& totalWeightSum.value!=100){
|
||||
message.error('多名教师权重合计值为100%')
|
||||
return
|
||||
}
|
||||
if(state.offteachers.some(item => item.weight==0)){
|
||||
message.error('权重值不能为0%')
|
||||
return
|
||||
}
|
||||
console.log(postData,'传输的数据')
|
||||
// if(!postData.duration){
|
||||
// return message.error("请输入持续时间");
|
||||
// }
|
||||
@@ -3827,7 +3971,8 @@ export default defineComponent({
|
||||
//是否允许未报名的签到:1是0否
|
||||
state.xjkkradioV1 = true;
|
||||
}
|
||||
state.member = { value: item.teacherId, name: item.teacher };
|
||||
// state.member = { value: item.teacherId, name: item.teacher };
|
||||
state.offteachers = [...item.offteachers]
|
||||
state.cstm_hs = true;
|
||||
state.kk_eidt = true;
|
||||
};
|
||||
@@ -4417,10 +4562,11 @@ export default defineComponent({
|
||||
state.chang_jin = String(item.sceneId);
|
||||
state.tags_val = item.tips ? item.tips.split(",") : [];
|
||||
//state.qdms_inputV5 = item.teacherId;
|
||||
state.teacher = item.teacher;
|
||||
state.teacherId = item.teacherId;
|
||||
// state.teacher = item.teacher;
|
||||
// state.teacherId = item.teacherId;
|
||||
state.qdms_inputV6 = item.intro;
|
||||
state.member = { value: item.teacherId, name: item.teacher };
|
||||
// state.member = { value: item.teacherId, name: item.teacher };
|
||||
state.offteachers = [...item.offteachers]
|
||||
if (item.attach == "") {
|
||||
state.imgList = [];
|
||||
} else {
|
||||
@@ -4902,9 +5048,11 @@ export default defineComponent({
|
||||
const qrcodeVisible = (record, type) => {
|
||||
// `${location.protocol}//${location.host}${import.meta.env.VUE_APP_BASE_API}/stu/project/redirectDetail?courseId=${record.id}`
|
||||
state.codevisible = true;
|
||||
let teacherNames = record.offteachers?.filter(teacher => teacher.teacherName !== null).map(teacher => teacher.teacherName);
|
||||
state.codeInfo = {
|
||||
title: type == 1 ? "【课程】二维码" : "【签到】二维码",
|
||||
name: record.name ? record.name : "",
|
||||
teacherName: teacherNames.length > 0 ? teacherNames.join(' ') : "",
|
||||
url:
|
||||
type == 1
|
||||
? process.env.VUE_APP_BASE_API +
|
||||
@@ -5054,8 +5202,19 @@ export default defineComponent({
|
||||
logW,
|
||||
logT,
|
||||
qrcodeVisible,
|
||||
timeChange,
|
||||
editBeginClass
|
||||
// timeChange,
|
||||
editBeginClass,
|
||||
|
||||
onDateSelect,
|
||||
onBlurStart,
|
||||
onFocusStart,
|
||||
// timeChangeEnd,
|
||||
onDateEnd,
|
||||
onFocusEnd,
|
||||
inputWeightChange,
|
||||
totalWeightSum,
|
||||
inputAdd,
|
||||
inputRemove
|
||||
};
|
||||
},
|
||||
});
|
||||
@@ -5560,6 +5719,28 @@ export default defineComponent({
|
||||
margin: auto;
|
||||
align-items: center;
|
||||
margin-bottom: 23px;
|
||||
.teacher_input{
|
||||
.ant-input-number{
|
||||
width: 15%;
|
||||
height: 40px !important;
|
||||
border-radius: 8px !important;
|
||||
border: 1px solid #C7CBD2 !important;
|
||||
margin: 0 10px 0 10px;
|
||||
}
|
||||
.btn-add{
|
||||
margin: 0 10px 0 10px;
|
||||
}
|
||||
.btn-circle{
|
||||
text-align: center;
|
||||
line-height: 100%;
|
||||
margin-top: 5px;
|
||||
span{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
font-size: 33px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.signbox {
|
||||
display: flex;
|
||||
|
||||
Reference in New Issue
Block a user