feat:合并

This commit is contained in:
lixg
2022-11-29 09:47:46 +08:00
13 changed files with 337 additions and 152 deletions

View File

@@ -1,5 +1,5 @@
<template> <template>
<div id="container"> <div id="container" v-if="!isLogin">
<nav-top /> <nav-top />
<div style="display: flex"> <div style="display: flex">
<nav-left /> <nav-left />
@@ -14,9 +14,12 @@
</div> </div>
</div> </div>
</div> </div>
<div id="container" v-if="isLogin">
<router-view/>
</div>
</template> </template>
<script> <script>
import { computed, defineComponent } from "vue"; import {computed, defineComponent, ref, watch} from "vue";
import { useRouter, useRoute } from "vue-router"; import { useRouter, useRoute } from "vue-router";
import { useStore } from "vuex"; import { useStore } from "vuex";
import NavLeft from "@/components/NavLeft"; import NavLeft from "@/components/NavLeft";
@@ -36,11 +39,16 @@ export default defineComponent({
const router = useRouter(); const router = useRouter();
const route = useRoute(); const route = useRoute();
const store = useStore(); const store = useStore();
const isLogin = ref(false)
// console.log("router", router.getRoutes(), route); // console.log("router", router.getRoutes(), route);
const routes = computed(() => { const routes = computed(() => {
return router.getRoutes().filter((e) => e.meta?.isLink); return router.getRoutes().filter((e) => e.meta?.isLink);
}); });
watch(() => route.path, () => {
route.path === '/login' && (isLogin.value = true)
})
const currentRouteName = computed(() => route.name); const currentRouteName = computed(() => route.name);
//获取组织树 //获取组织树
@@ -68,6 +76,7 @@ export default defineComponent({
getOrgTree(); getOrgTree();
return { return {
isLogin,
routes, routes,
name: currentRouteName, name: currentRouteName,
zhCN, zhCN,

View File

@@ -75,3 +75,5 @@ export const getTemplateDetail = (obj) => http.get('/admin/project/template/deta
//获取项目统计 //获取项目统计
export const getProjectCount = (projectId) => http.get('/admin/project/projectCount', { params: { projectId: projectId } }) export const getProjectCount = (projectId) => http.get('/admin/project/projectCount', { params: { projectId: projectId } })
export const login = (obj) => http.post('/admin/CheckUser/userLogin', obj)

View File

@@ -169,7 +169,7 @@ const setCookie = (name, value, perpetual) => {
console.log('存储token到cookie') console.log('存储token到cookie')
let exdate = new Date() let exdate = new Date()
exdate.setDate(perpetual * 24 * 60 * 60 * 1000) //exdate.setDate(exdate.getDate() + 365) exdate.setDate(perpetual * 24 * 60 * 60 * 1000) //exdate.setDate(exdate.getDate() + 365)
document.cookie = name + '=' + value + ';expires=' + exdate.toGMTString() document.cookie = `${name}=${value};expires=${exdate.toGMTString()};path=/`
//永久有效 //永久有效
//document.cookie = name + '=' + value + ';expires=' + 'Fri, 31 Dec 9999 23:59:59 GMT' //document.cookie = name + '=' + value + ';expires=' + 'Fri, 31 Dec 9999 23:59:59 GMT'
} }

View File

@@ -110,7 +110,7 @@ export default {
}; };
const afterVisibleChange = (bool) => { const afterVisibleChange = (bool) => {
console.log("state getAllInvistText", bool,"======",props.titleTag); console.log("state getAllInvistText", bool,"======",props.titleTag);
if (props.assessmentVisible) { if (props.assessmentVisible&&bool) {
getAllInvistText(); getAllInvistText();
} }
}; };

View File

@@ -181,7 +181,7 @@
border-radius: 8px; border-radius: 8px;
overflow: hidden; overflow: hidden;
" "
:v-model:value="beforeStart" :v-model:value="beforeStartValue"
></a-input-number> ></a-input-number>
<span style="color: #999999; margin-left: 8px">分钟</span> <span style="color: #999999; margin-left: 8px">分钟</span>
</div> </div>
@@ -195,9 +195,8 @@
width: 88px; width: 88px;
height: 32px; height: 32px;
border-radius: 8px; border-radius: 8px;
overflow: hidden; overflow: hidden;"
" :value="afterStartValue"
:v-model:value="afterStart"
></a-input-number> ></a-input-number>
<span style="color: #999999; margin-left: 8px">分钟</span> <span style="color: #999999; margin-left: 8px">分钟</span>
</div> </div>
@@ -223,7 +222,7 @@
<span style="margin-right: 3px">其他设置:</span> <span style="margin-right: 3px">其他设置:</span>
</div> </div>
<div class="btnbox"> <div class="btnbox">
<a-checkbox v-model:checked="complete_leave" @click="complete_leave=!complete_leave" <a-checkbox v-model:checked="completeLeave" @click="completeLeave=!completeLeave"
>学员请假后记为任务完成</a-checkbox >学员请假后记为任务完成</a-checkbox
> >
</div> </div>
@@ -242,7 +241,7 @@
<span style="margin-right: 3px">评估:</span> <span style="margin-right: 3px">评估:</span>
</div> </div>
<div class="btnbox2"> <div class="btnbox2">
<a-checkbox v-model:checked="needEval" <a-checkbox v-model:checked="needEval" @click="needEval=!needEval"
>需要评估</a-checkbox > >需要评估</a-checkbox >
</div> </div>
</div> </div>
@@ -408,6 +407,11 @@ export default {
type: Number, type: Number,
default: null, default: null,
}, },
projectTemplateId:{
type: Number,
default: null,
},
}, },
setup(props, ctx) { setup(props, ctx) {
const options = ref([]); const options = ref([]);
@@ -426,10 +430,10 @@ export default {
memberId: 0, memberId: 0,
pageSize: 10, pageSize: 10,
courseName: "", courseName: "",
duration: "", duration:null,
address: null, address: null,
beforeStart: null, beforeStartValue:20,
afterStart: null, afterStartValue:10,
description: "", description: "",
chooseTime: [], chooseTime: [],
fileList: [], fileList: [],
@@ -437,19 +441,20 @@ export default {
assessmentId:null, assessmentId:null,
EditTestId:null, EditTestId:null,
EditWorkId:null, EditWorkId:null,
assessmentVisible: false, assessmentVisible:false,
needEval:false,
}); });
const clear = () => { const clear = () => {
state.courseName = null; state.courseName = "";
state.memberValue = null; state.memberValue = null;
state.duration = null; state.duration = null;
state.address = null; state.address = null;
state.beforeStart = null; state.beforeStart = 0;
state.afterStart = null; state.afterStartValue =0;
state.chooseTime = []; state.chooseTime = [];
state.description = null; state.description ="";
state.onlySign =false; state.onlySign =false;
state.completeLeave =false; state.completeLeave =false;
state.projectMember =false; state.projectMember =false;
@@ -458,7 +463,9 @@ export default {
state.EditTestId =null; state.EditTestId =null;
state.assessmentId=null; state.assessmentId=null;
state.EditWorkId=null; state.EditWorkId=null;
state.EditEvalId=null;
state.applyFlag="";
console.log("state.afterStart",state.afterStartValue);
}; };
const closeDrawer = () => { const closeDrawer = () => {
ctx.emit("update:addfaceteachVisible", false); ctx.emit("update:addfaceteachVisible", false);
@@ -505,6 +512,7 @@ export default {
//查询面授 //查询面授
const queryFaceTeach = () => { const queryFaceTeach = () => {
console.log("props.EditFaceI========d",props.EditFaceId);
queryFaceDetailById(props.EditFaceId).then((res) => { queryFaceDetailById(props.EditFaceId).then((res) => {
console.log("获取到了面授课开课详情", res.data.data); console.log("获取到了面授课开课详情", res.data.data);
let result = res.data.data; let result = res.data.data;
@@ -522,14 +530,15 @@ export default {
} }
state.address = result.address; state.address = result.address;
state.beforeStart = result.beforeStart; state.beforeStart = result.beforeStart;
state.afterStart = result.afterStart; state.afterStartValue = result.afterStart;
console.log("编辑========",state.afterStartValue);
state.fileList = JSON.parse(result.attach); state.fileList = JSON.parse(result.attach);
state.EditWorkId = result.homeWorkId; state.EditWorkId = result.homeWorkId;
state.onlySign = result.completeType.split(",")[0]==1?true:false; state.onlySign = result.completeType.split(",")[0]=="1"?true:false;
state.completeLeave =result.completeType.split(",")[1]==1?true:false; state.completeLeave =result.completeType.split(",")[1]=="1"?true:false;
state.chooseCourse =result.offcourseId; state.chooseCourse =result.offcourseId;
state.projectMember = result.projectMember.split(",")[0]==1?true:false; state.projectMember = result.projectMember.split(",")[0]=="1"?true:false;
state.noProjectMember = result.projectMember.split(",")[1]==1?true:false; state.noProjectMember = result.projectMember.split(",")[1]=="1"?true:false;
state.EditTestId = result.testId; state.EditTestId = result.testId;
state.EditWorkId=result.homeWorkId; state.EditWorkId=result.homeWorkId;
state.assessmentId =result.evaluateId; state.assessmentId =result.evaluateId;
@@ -539,13 +548,18 @@ export default {
//新建或编辑面授 //新建或编辑面授
// 新增任务 // 新增任务
const updateFaceTeach = () => { const updateFaceTeach = () => {
console.log("v",state.beforeStart,"v",state.afterStartValue,"v",
state.applyFlag,"v",state.evalFlag,"v",state.completeType,"state.address",state.address);
if ( if (
/*
state.courseName == "" || state.courseName == "" ||
state.chooseCourse == null || state.chooseCourse == null ||s
state.memberValue == "" || state.memberValue == "" ||
state.chooseTime == [] || state.chooseTime == [] ||
state.duration == "" || state.duration == "" ||
*/
state.address == "" state.address == ""
) { ) {
message.destroy(); message.destroy();
return message.warning("请输入必填字段"); return message.warning("请输入必填字段");
@@ -554,27 +568,27 @@ export default {
teacherId:state.memberValue.value, teacherId:state.memberValue.value,
teacher:state.memberValue.label, teacher:state.memberValue.label,
address:state.address, address:state.address,
applyFlag: 1, applyFlag: state.applyFlag,
attach: JSON.stringify(state.fileList), attach: JSON.stringify(state.fileList),
afterStart: state.afterStart || 0, afterStart:state.afterStartValue ||0,
beforeStart: state.beforeStart || 0, beforeStart:state.beforeStart,
beginTime: parseInt( new Date(state.chooseTime[0].$d).getTime() / 1000), beginTime: parseInt( new Date(state.chooseTime[0].$d).getTime() / 1000),
completeType: state.onlySign? "1,":"0," + state.completeLeave?"1":"0", completeType: state.onlySign? "1,":"0," + state.completeLeave?"1":"0",
description: state.description, description: state.description,
endTime: parseInt(new Date(state.chooseTime[1].$d).getTime() / 1000), endTime: parseInt(new Date(state.chooseTime[1].$d).getTime() / 1000),
evalFlag: state.needEval?1:0, evalFlag:state.needEval?1:0,
evaluateId:state.assessmentId, evaluateId:state.assessmentId,
homeWorkId: state.EditWorkId, homeWorkId: state.EditWorkId,
name: state.courseName, name: state.courseName,
projectMember:state.innerPersion?"1":"0" + state.outPerson?"1":"0", projectMember:state.innerPersion?"1,":"0," + state.outPerson?"1":"0",
offcourseId:state.chooseCourse, offcourseId:state.chooseCourse,
offcoursePlanId:props.EditFaceId >0 ? props.EditFaceId : 0, offcoursePlanId:props.EditFaceId >0 ? props.EditFaceId : 0,
signFlag: 0,
testId: state.EditTestId testId: state.EditTestId
}; };
editPlan(obj) editPlan(obj)
.then((res) => { .then((res) => {
console.log("更新任务s's");
updateTask(res); updateTask(res);
closeDrawer(); closeDrawer();
}).catch((err) => { }).catch((err) => {
@@ -588,6 +602,7 @@ export default {
//更新任务列表 //更新任务列表
// 新增编辑或新增项目任务 // 新增编辑或新增项目任务
const updateTask = (res) => { const updateTask = (res) => {
console.log("props.isLevel=====",props.isLevel);
if (props.isLevel == 1) { if (props.isLevel == 1) {
let editObj1 = { let editObj1 = {
chapterId: props.isactive, chapterId: props.isactive,
@@ -610,7 +625,7 @@ export default {
} else if (props.isLevel == 2) { } else if (props.isLevel == 2) {
let editObj = { let editObj = {
courseId: res.data.data.offcoursePlanId, courseId: res.data.data.offcoursePlanId,
duration: 0, duration: res.data.data.duration,
name: res.data.data.name, name: res.data.data.name,
projectId: props.projectId, projectId: props.projectId,
projectTaskId: props.projectTaskId || 0, projectTaskId: props.projectTaskId || 0,
@@ -629,11 +644,12 @@ export default {
message.error(`${props.EditFaceId ? "编辑" : "新增"}阶段任务失败`); message.error(`${props.EditFaceId ? "编辑" : "新增"}阶段任务失败`);
}); });
} else if (props.isLevel == 3) { } else if (props.isLevel == 3) {
console.log("dddddddddddd33333333");
addTempTask({ addTempTask({
courseId: res.data.data.offcoursePlanId, courseId: res.data.data.offcoursePlanId,
name: res.data.data.name, name: res.data.data.name,
duration: res.data.data.duration, duration: res.data.data.duration,
projectTemplateId: props.projectTemplateId, projectTemplateId:props.projectTemplateId,
projectTaskId: props.projectTaskId || 0, projectTaskId: props.projectTaskId || 0,
stageId: props.chooseStageId || 0, stageId: props.chooseStageId || 0,
type: 2, type: 2,

View File

@@ -276,7 +276,6 @@ export default {
afterVisibleChange, afterVisibleChange,
closeDrawer, closeDrawer,
updateTask, updateTask,
AssessmentList,
checkAssDrawer, checkAssDrawer,
getCheckedAss, getCheckedAss,
}; };

View File

@@ -121,39 +121,44 @@
></a-auto-complete> ></a-auto-complete>
</div> </div>
</div> </div>
<div class="main_item2"> <div class="mbl_items2">
<div class="signbox"> <div class="item_nam">
<span style="margin-right: 3px">直播封面</span> <div class="asterisk_icon">
</div> <img
<div src="@/assets/images/coursewareManage/asterisk.png"
class="textarea" alt=""
style="overflow: hidden; width: 102px; height: 102px" />
> </div>
<a-upload <span style="margin-right: 14px">直播封面</span>
v-model:file-list="fileList" </div>
name="avatar" <div class="item_inp">
list-type="picture-card"
class="avatar-uploader" <a-upload
:show-upload-list="false" name="avatar"
action="/manageApi/file/upload" list-type="picture-card"
:before-upload="beforeUpload" class="avatar-uploader"
@change="handleChange" :show-upload-list="false"
> :before-upload="beforeUpload"
<img >
v-if="imageUrl" <img
:src="imageUrl" class="i_upload_img"
alt="avatar" v-if="imageUrl"
style="“width100pxheight:100px;”" :src="imageUrl"
/> alt="avatar"
<div v-else> />
<loading-outlined v-if="loading"></loading-outlined> <div class="i_upload" v-else>
<plus-outlined v-else></plus-outlined> <div class="addimg">
<div class="ant-upload-text">Upload</div> <div class="heng"></div>
</div> <div class="shu"></div>
</a-upload> </div>
<div class="tip">支持图片格式为jpg/jpeg/png 图片最大为2MB</div> </div>
</div> </a-upload>
</div> <div class="i_bottom">
<div class="tip">支持图片格式为jpg/jpeg/png 图片最大为2MB</div>
</div>
</div>
</div>
<div class="main_item" style="margin-top: -10px"> <div class="main_item" style="margin-top: -10px">
<div class="signbox"> <div class="signbox">
<span style="margin-right: 3px">直播链接</span> <span style="margin-right: 3px">直播链接</span>
@@ -174,7 +179,7 @@
<a-switch v-model:checked="switchC1" @click="PlayBack" /> <a-switch v-model:checked="switchC1" @click="PlayBack" />
</div> </div>
</div> </div>
<div :style="{ display: playback ? 'block' : 'none' }"> <div v-if ="switchC1">
<div class="main_item"> <div class="main_item">
<div class="signbox"> <div class="signbox">
<span style="margin-right: 3px">回放链接</span> <span style="margin-right: 3px">回放链接</span>
@@ -189,33 +194,34 @@
</div> </div>
</div> </div>
<div class="main_item"> <div class="main_item2">
<div class="signbox"> <div class="signbox">
<span style="margin-right: 3px"></span> <span style="margin-right: 3px"></span>
</div> </div>
<div class="btnbox"> <div class="btnbox2">
<a-checkbox v-model:checked="checkedC1" @change="checkRadio" <a-checkbox v-model:checked="needEval" @click="needEval=!needEval"
>需要评估</a-checkbox >需要评估</a-checkbox >
>
</div> </div>
</div> </div>
<div <div v-if="needEval" class="main_item">
class="main_item" <div class="signbox">
style="margin-top: -25px" </div>
:style="{ display: checkedC1 ? 'block' : 'none' }"
>
<div class="signbox"></div>
<div class="btnbox"> <div class="btnbox">
<a-select <button class="xkbtn" @click="showAssessment">选择评估</button>
v-model:value="assessmentvalue" <div v-if = "assessmentId >0 ">
show-search <a-tag closable color="processing" @close="logA">
placeholder="选择评估" <span style="font-size:14px;line-height: 33px;" >删除评估</span>
style="width: 364px" </a-tag></div>
:options="assessment" <AssessmentList
@change="handleChangeAssessment" v-model:assessmentVisible="assessmentVisible"
></a-select> v-model:titleTag="titleTag"
v-model:assessmentId="assessmentId"
/>
</div> </div>
</div> </div>
<div class="main_item2"> <div class="main_item2">
<div class="signbox"> <div class="signbox">
<span style="margin-right: 3px">考勤设置:</span> <span style="margin-right: 3px">考勤设置:</span>
@@ -327,6 +333,9 @@ import { RouterEditTask } from "@/api/indexTask";
import { addTempTask } from "../../api/indexTaskadd"; import { addTempTask } from "../../api/indexTaskadd";
import { getMemberInfo } from "@/api/index1"; import { getMemberInfo } from "@/api/index1";
import dayjs from "dayjs"; import dayjs from "dayjs";
import { fileUp } from "../../api/indexEval";
import AssessmentList from "../drawers/ AssessmentList.vue";
import { debounce } from "lodash-es"; import { debounce } from "lodash-es";
// import { useRouter } from "vue-router"; // import { useRouter } from "vue-router";
function getBase64(img, callback) { function getBase64(img, callback) {
@@ -337,6 +346,9 @@ function getBase64(img, callback) {
export default { export default {
name: "AddLive", name: "AddLive",
components:{
AssessmentList
},
props: { props: {
addliveVisible: { addliveVisible: {
type: Boolean, type: Boolean,
@@ -419,6 +431,9 @@ export default {
obj: {}, //要传的obj数据 obj: {}, //要传的obj数据
assessment: [], //评估信息 assessment: [], //评估信息
assessmentvalue: null, assessmentvalue: null,
needEval:false,
otherSettings:false,
assessmentVisible:false,
}); });
const closeDrawer = () => { const closeDrawer = () => {
ctx.emit("update:addliveVisible", false); ctx.emit("update:addliveVisible", false);
@@ -437,12 +452,14 @@ export default {
state.textV1 = ""; state.textV1 = "";
state.switchC1 = ""; state.switchC1 = "";
state.imageUrl = ""; state.imageUrl = "";
state.needEval=false;
state.otherSettings;
ctx.emit("changeData", false); ctx.emit("changeData", false);
localStorage.setItem("stageId", props.chooseStageId); localStorage.setItem("stageId", props.chooseStageId);
localStorage.setItem("chapterId", props.isactive); localStorage.setItem("chapterId", props.isactive);
}; };
const afterVisibleChange = () => { const afterVisibleChange = (bool) => {
if (props.edit) { if (props.edit&&bool) {
queryLive(); queryLive();
} }
api api
@@ -492,6 +509,7 @@ export default {
}); });
}; };
const cloradio1 = (value) => { const cloradio1 = (value) => {
if (state.radioV1 === value.target._value) { if (state.radioV1 === value.target._value) {
state.radioV1 = ""; state.radioV1 = "";
@@ -519,24 +537,7 @@ export default {
message.error("upload error"); message.error("upload error");
} }
}; };
const beforeUpload = (file) => {
const isJpgOrPng =
file.type === "image/jpeg" ||
file.type === "image/png" ||
file.type === "image/jpg";
if (!isJpgOrPng) {
message.error("You can only upload JPG file!");
}
const isLt2M = file.size / 1024 / 1024 < 2;
if (!isLt2M) {
message.error("Image must smaller than 2MB!");
}
return isJpgOrPng && isLt2M;
};
const updateTask = (res) => { const updateTask = (res) => {
if (props.isLevel == 1) { if (props.isLevel == 1) {
RouterEditTask({ RouterEditTask({
@@ -593,6 +594,11 @@ export default {
}); });
} }
}; };
const showAssessment = () => {
state.assessmentVisible = true;
console.log("hshs======",state.assessmentVisible);
};
//创建直播 //创建直播
const updateLiveBroadcast = () => { const updateLiveBroadcast = () => {
if (!state.inputV1) { if (!state.inputV1) {
@@ -638,9 +644,10 @@ export default {
livePlayback: state.playback ? "true" : "false", livePlayback: state.playback ? "true" : "false",
livePlaybackLink: state.playback ? state.inputV5 : "", livePlaybackLink: state.playback ? state.inputV5 : "",
liveTeacherId: state.inputV3, liveTeacherId: state.inputV3,
otherSettings: 0, //1或0 otherSettings: state.otherSettings, //1或0
signOutTime: state.inputV8, signOutTime: state.inputV8,
standardSettings: state.radioV1, //1或2 standardSettings: state.radioV1, //1或2
isEvaluate:state.eedEval ? "1":"0",
}; };
if (props.edit) { if (props.edit) {
api api
@@ -662,6 +669,42 @@ export default {
.catch(() => {}); .catch(() => {});
} }
}; };
const beforeUpload = (file) => {
return new Promise((resolve, reject) => {
const isJpgOrPng =
file.type === "image/jpg" ||
file.type === "image/jpeg" ||
file.type === "image/png" ||
file.type === "image/svg" ||
file.type === "image/bmp" ||
file.type === "image/gif";
if (!isJpgOrPng) {
message.error("仅支持jpggifpngjpegsvgbmp格式!");
return reject(false);
}
let reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => {
const image = new Image();
image.src = reader.result;
image.onload = () => {
const formData = new FormData();
formData.append("file", file);
console.log(file);
fileUp(formData).then((res) => {
if (res.data.code === 200) {
state.imageUrl = res.data.data;
}
});
return resolve(true);
};
};
return reject(false);
});
};
const templateScroll = (e) => { const templateScroll = (e) => {
console.log("滚动", e); console.log("滚动", e);
const { target } = e; const { target } = e;
@@ -728,9 +771,7 @@ export default {
state.discussSettings = "false"; state.discussSettings = "false";
} }
}; };
const handleChangeAssessment = (option) => {
state.assessmentId = option.assessmentId;
};
return { return {
...toRefs(state), ...toRefs(state),
afterVisibleChange, afterVisibleChange,
@@ -743,10 +784,10 @@ export default {
handleChange2, handleChange2,
options, options,
checkRadio, checkRadio,
handleChangeAssessment,
queryMember, queryMember,
templateScroll, templateScroll,
handleSearch, handleSearch,
showAssessment,
}; };
}, },
}; };
@@ -874,6 +915,63 @@ export default {
} }
} }
} }
.mbl_items2 {
display: flex;
align-items: start;
margin-top: 10px;
margin-bottom: 10px;
.i_bottom{
margin-bottom: 30px;
}
.item_nam {
width: 100px;
display: flex;
align-items: center;
justify-content: flex-end;
white-space: nowrap;
.asterisk_icon {
width: 10px;
height: 10px;
margin-right: 5px;
margin-top: -15px;
}
}
.item_inp {
flex: 1;
.i_upload_img {
width: 100px;
height: 100px;
border-radius: 8px;
}
.i_upload {
width: 100px;
height: 100px;
border: 1px solid #4ea6ff;
border-radius: 8px;
text-align: center;
align-items: center;
cursor: pointer;
.addimg {
position: relative;
.heng {
position: absolute;
top: 50px;
left: 25px;
width: 50px;
border: 1px solid #4ea6ff;
}
.shu {
position: absolute;
top: 25px;
left: 50px;
height: 50px;
border: 1px solid #4ea6ff;
}
}
}
}
}
} }
} }
.main_btns { .main_btns {

View File

@@ -392,7 +392,7 @@ export default {
setup(props, ctx) { setup(props, ctx) {
const formState = reactive({ const formState = reactive({
examinationName: "", examinationName: "",
examinationDuration: "", examinationDuration:0,
examinationLimit: "", examinationLimit: "",
passLine:null, passLine:null,
examinationEndTime: "", examinationEndTime: "",

View File

@@ -370,12 +370,7 @@
<span style="margin-right: 14px">封面图</span> <span style="margin-right: 14px">封面图</span>
</div> </div>
<div class="item_inp"> <div class="item_inp">
<!-- <div class="i_upload">
<div class="addimg">
<div class="heng"></div>
<div class="shu"></div>
</div>
</div> -->
<a-upload <a-upload
name="avatar" name="avatar"
list-type="picture-card" list-type="picture-card"
@@ -1750,21 +1745,16 @@
<span style="margin-right: 3px">完成规则</span> <span style="margin-right: 3px">完成规则</span>
</div> </div>
<div class="b_input"> <div class="b_input">
<a-radio-group v-model:value="xjkkradioV2"> <a-checkbox v-model:checked="regisCom" @click="regisCom =!regisCom">
<a-radio :value="1" @click="clear_xjkkradioV2"> <span style="color: #6d7584">报名即完成</span>
<span style="color: #6d7584; margin-right: 30px"> </a-checkbox>
报名即完成 <a-checkbox v-model:checked="signCom" @click="signCom =!signCom">
</span> <span style="color: #6d7584">签到即完成</span>
</a-radio> </a-checkbox>
<a-radio :value="2" @click="clear_xjkkradioV2"> <a-checkbox v-model:checked="comLeave" @click="comLeave =!comLeave">
<span style="color: #6d7584; margin-right: 30px"> <span style="color: #6d7584">请假算完成</span>
签到即完成 </a-checkbox>
</span>
</a-radio>
<a-radio :value="3" @click="clear_xjkkradioV2">
<span style="color: #6d7584">请假算完成</span>
</a-radio>
</a-radio-group>
</div> </div>
</div> </div>
<div class="cstm_items items_fj"> <div class="cstm_items items_fj">
@@ -3343,7 +3333,7 @@ export default defineComponent({
kkinputV2: "", kkinputV2: "",
//新建开课 //新建开课
xjkkradioV1: "", xjkkradioV1: "",
xjkkradioV2: "", completeType: "",
xjkkinputV1: "", xjkkinputV1: "",
xjkkinputV2: "", xjkkinputV2: "",
xjkkinputV3: "", xjkkinputV3: "",
@@ -3379,7 +3369,9 @@ export default defineComponent({
checked4: false, checked4: false,
offcoursePlanId: 0, offcoursePlanId: 0,
filesList: [], filesList: [],
signCom:false ,
regisCom:false,
comLeave:false,
studentId: 0, studentId: 0,
studentItem: {}, studentItem: {},
addOnlineCoursevisible: false, //新建面授弹窗 addOnlineCoursevisible: false, //新建面授弹窗
@@ -4107,7 +4099,7 @@ export default defineComponent({
state.cstm_hs = false; state.cstm_hs = false;
state.kk_eidt = false; state.kk_eidt = false;
state.xjkkradioV1 = ""; state.xjkkradioV1 = "";
state.xjkkradioV2 = ""; state.completeType = "";
state.xjkkinputV1 = ""; state.xjkkinputV1 = "";
state.xjkkinputV2 = ""; state.xjkkinputV2 = "";
state.xjkkinputV3 = ""; state.xjkkinputV3 = "";
@@ -4130,12 +4122,12 @@ export default defineComponent({
applyFlag: state.checked1 ? 1 : 0, applyFlag: state.checked1 ? 1 : 0,
attach: state.filesList.length ? state.filesList.join(",") : "", attach: state.filesList.length ? state.filesList.join(",") : "",
beginTime: startTime, beginTime: startTime,
completeType: state.xjkkradioV2, completeType: state.regisCom?"1,":"0,"+state.signCom?"1,":"0,"+state.comLeave?"1":"0",
endTime: endTime, endTime: endTime,
evalFlag: state.checked4 ? 1 : 0, evalFlag: state.checked4 ? 1 : 0,
name: state.xjkkinputV1, name: state.xjkkinputV1,
signFlag: state.xjkkradioV1 === 0 ? 1 : 0, //是否允许未报名的签到:1是0否 signFlag: state.xjkkradioV1 === 0 ? 1 : 0, //是否允许未报名的签到:1是0否
signWordFlag: state.xjkkradioV1 === 1 ? 1 : 0, //签到是否需要口令:1是0否 // signWordFlag: state.xjkkradioV1 === 1 ? 1 : 0, //签到是否需要口令:1是0否
teacherId: state.xjkkinputV4 ? state.xjkkinputV4 : 1, teacherId: state.xjkkinputV4 ? state.xjkkinputV4 : 1,
}; };
console.log(postData); console.log(postData);
@@ -4178,13 +4170,17 @@ export default defineComponent({
dayjs(item.endTime, "YYYY/MM/DD"), dayjs(item.endTime, "YYYY/MM/DD"),
]; ];
options4CurId.value = item.teacherId; options4CurId.value = item.teacherId;
state.xjkkradioV2 = item.completeType; state.regisCom = item.completeType.split(",")[0]==1?true:false,
state.signCom = item.completeType.split(",")[1]==1?true:false,
state.comLeave = item.completeType.split(",")[2]==1?true:false,
state.completeType = state.regisCom?"1,":"0,"+state.signCom?"1,":"0,"+state.comLeave?"1":"0",
state.checked4 = item.evalFlag === 1 ? true : false; state.checked4 = item.evalFlag === 1 ? true : false;
state.xjkkinputV1 = item.name; state.xjkkinputV1 = item.name;
if (item.signFlag === 1) { if (item.signFlag === 1) {
//是否允许未报名的签到:1是0否 //是否允许未报名的签到:1是0否
state.xjkkradioV1 = 0; state.xjkkradioV1 = 0;
} }
/*
if (item.signWordFlag === 1) { if (item.signWordFlag === 1) {
//签到是否需要口令:1是0否 //签到是否需要口令:1是0否
state.xjkkradioV1 = 1; state.xjkkradioV1 = 1;
@@ -4192,6 +4188,7 @@ export default defineComponent({
if (item.signFlag === 0 && item.signWordFlag === 0) { if (item.signFlag === 0 && item.signWordFlag === 0) {
state.xjkkradioV1 = ""; state.xjkkradioV1 = "";
} }
*/
state.xjkkinputV4 = item.teacherId; state.xjkkinputV4 = item.teacherId;
getTea(); getTea();
@@ -4399,7 +4396,7 @@ export default defineComponent({
evalFlag: item.evalFlag, evalFlag: item.evalFlag,
name: item.name, name: item.name,
signFlag: item.signFlag, //是否允许未报名的签到:1是0否 signFlag: item.signFlag, //是否允许未报名的签到:1是0否
signWordFlag: item.signWordFlag, //签到是否需要口令:1是0否 //signWordFlag: item.signWordFlag, //签到是否需要口令:1是0否
teacherId: item.teacherId, teacherId: item.teacherId,
}; };
console.log(obj); console.log(obj);

51
src/views/login.vue Normal file
View File

@@ -0,0 +1,51 @@
<template>
<div :style="{
margin: 'auto',
background: 'url(http://img.gz2c.com/FoTcLY8ww-ISCFlwyCoYuLim1BMt) no-repeat',
backgroundSize: '100% 100%',
width: '100%',
height: '100vh',
display:'flex'
}">
<div
:style="{width:'300px', height: '300px', margin:'10% auto',padding:'20px 30px',textAlign:'center', borderRadius:'10px', background:'#e0e0e0',boxShadow:'20px 20px 60px #bebebe,-20px -20px 60px #ffffff'}">
<div :style="{fontSize:'24px',paddingBottom:'30px'}">用户登录</div>
<div>
<a-input placeholder='用户名' v-model:value="form.account"/>
<a-input placeholder='密码' v-model:value="form.password" :style="{marginTop: '30px'}" type='password'/>
<a-button :style="{marginTop:'30px'}" @click="loginUser">登录</a-button>
</div>
</div>
</div>
</template>
<script>
import {reactive, toRefs} from "vue";
import * as api from "@/api";
import {setCookie} from "@/api/method";
import {useRouter} from "vue-router";
export default {
name: "loginPage",
setup() {
const router = useRouter()
const state = reactive({
form: {
account: '10181461',
password: '1234567890Aa'
}
})
async function loginUser() {
const {data: {data: token}} = await api.login(state.form)
setCookie("token", token, 10)
await router.push({path: '/learningpath'})
location.reload()
}
return {
...toRefs(state),
loginUser
}
}
}
</script>

View File

@@ -901,6 +901,7 @@ export default defineComponent({
state.projectInfo.status = res.data.data.projectTemplateInfo.status state.projectInfo.status = res.data.data.projectTemplateInfo.status
state.projectInfo.picUrl = res.data.data.projectTemplateInfo.picUrl state.projectInfo.picUrl = res.data.data.projectTemplateInfo.picUrl
let data = res.data.data.stageList; let data = res.data.data.stageList;
console.log("data=====",data);
for(let i in data) { for(let i in data) {
state.taskSyllabus.push({text: data[i].name,children:[]}); state.taskSyllabus.push({text: data[i].name,children:[]});
for(let j in data[i].taskList) { for(let j in data[i].taskList) {
@@ -939,8 +940,8 @@ export default defineComponent({
"notice": state.projectInfo.notice, "notice": state.projectInfo.notice,
"noticeFlag": 0, "noticeFlag": 0,
"projectTemplateId": localStorage.getItem('projectTemplateId'), "projectTemplateId": localStorage.getItem('projectTemplateId'),
"remark": "", "remark": state.projectInfo.remark,
"status": 0, "status": state.projectInfo.status,
}; };
api.templateEdit(obj).then(res => { api.templateEdit(obj).then(res => {
message.success("公告发布成功") message.success("公告发布成功")

View File

@@ -1,4 +1,4 @@
<!-- 任务页面 --> <!-- 任务页面 -->img
<template> <template>
<div class="taskpage"> <div class="taskpage">
<div class="addhead" style="flex-shrink: 0"> <div class="addhead" style="flex-shrink: 0">

View File

@@ -196,7 +196,13 @@
<div> <div>
<add-faceteach <add-faceteach
v-model:addfaceteachVisible="addfaceteachvisible" v-model:addfaceteachVisible="addfaceteachvisible"
v-model:EditEvalId="EditEvalId" @changeData="updateTableData"
:isLevel="isLevel"
v-model:edit="edit"
v-model:projectTemplateId="projectTemplateId"
v-model:chooseStageId="chooseStageId"
v-model:projectTaskId="projectTaskId"
v-model:EditFaceId="EditFaceId"
/> />
</div> </div>
<!-- 添加面授侧弹窗 --> <!-- 添加面授侧弹窗 -->
@@ -1127,7 +1133,7 @@ export default {
EditTestId: null, // 要编辑的考试id EditTestId: null, // 要编辑的考试id
EditCaseId: null, //要编辑的案例id EditCaseId: null, //要编辑的案例id
EditOnlineId: null, //要编辑的在线id EditOnlineId: null, //要编辑的在线id
EditFaceTeach: null, EditFaceId: null,
EditEvalId: null, EditEvalId: null,
EditInvistId: null, EditInvistId: null,
EditVoteId: null, //编辑需要投票的id EditVoteId: null, //编辑需要投票的id
@@ -1619,8 +1625,8 @@ export default {
} else { } else {
{ {
let obj = { let obj = {
stageId: state.removeStageId, templateStageId: state.removeStageId,
projectTaskId: state.selectRow, projectTemplateTaskId: state.selectRow,
}; };
api api
.moveTask(obj) .moveTask(obj)
@@ -1771,8 +1777,11 @@ export default {
state.EditOnlineId = id; state.EditOnlineId = id;
state.projectTaskId = eleId; state.projectTaskId = eleId;
}; };
const showDrawerFaceteach = () => { const showDrawerFaceteach = (id, eleId) => {
state.addfaceteachvisible = true; state.addfaceteachvisible = true;
console.log("id==========",id);
state.EditFaceId = id;
state.projectTaskId = eleId;
}; };
const showDrawerAddCase = (id, eleId) => { const showDrawerAddCase = (id, eleId) => {
state.addcasevisible = true; state.addcasevisible = true;
@@ -1917,18 +1926,19 @@ export default {
const changeCourseType = (ele) => { const changeCourseType = (ele) => {
console.log("任务id", ele.id); console.log("任务id", ele.id);
console.log("flag", ele.checked1); console.log("flag", ele.checked1);
console.log("ele", ele);
let obj = { let obj = {
courseId: ele.courseId, courseId: ele.courseId,
duration: ele.cretime == "-" ? 0 : ele.cretime, duration: ele.cretime == "-" ? 0 : ele.cretime,
flag: ele.checked1, flag: ele.checked1,
name: ele.creater, name: ele.creater,
projectTemplateId: ele.projectTemplateId, projectTemplateId: ele.projectTemplateId,
projectTaskId: ele.id, projectTaskId:ele.id,
stageId: ele.templateStageId, stageId:ele.stageId,
type: ele.type, type: ele.type,
}; };
api api
.addTask(obj) .editTask(obj)
.then((res) => { .then((res) => {
console.log(`修改状态成功${res.data}`); console.log(`修改状态成功${res.data}`);
message.destroy(); message.destroy();
@@ -1972,6 +1982,8 @@ export default {
showDrawerAddTest(id, eleId); showDrawerAddTest(id, eleId);
} else if (type == "在线") { } else if (type == "在线") {
showDrawerOnline(id, eleId); showDrawerOnline(id, eleId);
}else if (type == "面授") {
showDrawerFaceteach(id, eleId);
} }
}; };
const showdeAll = () => { const showdeAll = () => {