This commit is contained in:
Ggysh-7
2022-11-17 18:49:29 +08:00
30 changed files with 4058 additions and 2442 deletions

View File

@@ -1,17 +1,14 @@
import http from "./config";
// 创建考试信息接口
export const createExamination = (obj) => http.post('/examination/createExamination',obj,{
headers: {
'token': '123'
}
});
export const createExamination = (obj) => http.post('/examination/createExamination', obj);
// 根据Id删除考试信息
export const deleteExaminationById = (obj) => http.post('/examination/deleteExaminationById',obj);
export const deleteExaminationById = (obj) => http.post('/examination/deleteExaminationById', obj);
// 根据ID获取考试信息详情
export const queryExaminationDetailById = (obj) => http.post('/examination/queryExaminationDetailById',obj,{headers: {
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
}
export const queryExaminationDetailById = (obj) => http.post('/examination/queryExaminationDetailById', obj, {
headers: {
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
}
});
// 创建考试信息接口
export const updateExamination = (obj) => http.post('/examination/updateExamination',obj);
export const updateExamination = (obj) => http.post('/examination/updateExamination', obj);

View File

@@ -4,25 +4,13 @@ import http from "./config";
export const getLiveBroadcastInfor = (obj) => http.get('/liveBroadcast', { params: obj })
//创建直播接口
export const createLiveBroadcast = (obj) => http.post('/liveBroadcast/createLiveBroadcast', obj, {
headers: {
'token': '123'
}
})
export const createLiveBroadcast = (obj) => http.post('/liveBroadcast/createLiveBroadcast', obj)
//直播信息删除接口
export const deleteLiveBroadcast = (obj) => http.post('/liveBroadcast/deleteLiveBroadcast', obj, {
headers: {
'token': '123'
}
})
export const deleteLiveBroadcast = (obj) => http.post('/liveBroadcast/deleteLiveBroadcast', obj)
//直播信息修改接口
export const updateLiveBroadcastMessage = (obj) => http.post('/liveBroadcast/updateLiveBroadcastMessage', obj, {
headers: {
'token': '123'
}
})
export const updateLiveBroadcastMessage = (obj) => http.post('/liveBroadcast/updateLiveBroadcastMessage', obj)
//获取全部评估信息接口
export const queryAssessmentDetailList = (obj) => http.post('/assessment/queryAssessmentDetailList', obj)

View File

@@ -26,3 +26,6 @@ export const overview = (obj) => http.get('/admin/project/overview', { params: o
//设置项目积分规则
export const setScoreRule = (obj) => http.post('/admin/project/setScoreRule', obj)
//获取学员积分明细列表
export const studentScoreList = (obj) => http.post('/admin/project/studentScoreList', obj)

View File

@@ -1,10 +1,6 @@
import http from "./config";
//获取任务列表
export const getTask = (obj) => http.get('/admin/project/detail', { params: obj }, {
headers: {
'token': '123'
}
})
export const getTask = (obj) => http.get('/admin/project/detail', { params: obj })
//项目里的新建或编辑阶段任务
export const addTask = (obj) => http.post('/admin/project/editTask', obj)

View File

@@ -1,18 +1,14 @@
import http from "./config";
// 创建作业信息接口
export const createWorkTask = (obj) =>
http.post("/work/createWorkTask", obj, {
headers: {
token: "123",
},
});
http.post("/work/createWorkTask", obj);
// 删除作业信息接口
export const deleteWorkTask = (obj) => http.post("/work/deleteWorkTask", obj);
// 根据ID获取作业信息详情
export const queryWorkDetailById = (obj) => http.post('/work/queryWorkDetailById',obj,{
headers: {
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
}
export const queryWorkDetailById = (obj) => http.post('/work/queryWorkDetailById', obj, {
headers: {
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
}
});
// 修改作业信息接口
export const updateWorkTaskUsing = (obj) =>

View File

@@ -97,7 +97,6 @@ export default {
});
const closeDrawer = () => {
ctx.emit("update:assessmentVisible", false);
};
const afterVisibleChange = (bool) => {
console.log("state getAllInvistText", bool);

View File

@@ -9,15 +9,14 @@
>
<div class="drawerMain">
<div class="header">
<div class="headerTitle">{{edit?'编辑':'添加'}}活动</div>
<div class="headerTitle">{{ edit ? "编辑" : "添加" }}活动</div>
<img
style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png"
@click="closeDrawer"
/>
</div>
<div class="contentMain">
<div class="contentMain">
<div class="main_left">
<div class="main_item">
<div class="signbox">
@@ -72,7 +71,7 @@
</div>
<div class="main_item">
<div class="signbox">
<div class="sign">
<div class="sign">
<img
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
@@ -214,11 +213,11 @@
</div>
</div>
</div>
</div>
</div>
<div class="main_btns">
<button class="btn1" @click="closeDrawer">取消</button>
<button class="btn2" @click="updateActivityInfo">确定</button>
</div>
<button class="btn1" @click="closeDrawer">取消</button>
<button class="btn2" @click="updateActivityInfo">确定</button>
</div>
</div>
</a-drawer>
</template>
@@ -226,9 +225,9 @@
import { reactive, toRefs, ref } from "vue";
import * as api from "../../api/indexActivity";
import * as apiTask from "../../api/indexTaskadd";
import { RouterEditTask } from "@/api/indexTask"
import { RouterEditTask } from "@/api/indexTask";
import { message } from "ant-design-vue";
import dayjs from 'dayjs';
import dayjs from "dayjs";
const rowSelection = ref({
checkStrictly: false,
onChange: (selectedRowKeys, selectedRows) => {
@@ -258,7 +257,8 @@ export default {
type: Number,
default: null,
},
edit: { // 是否为编辑
edit: {
// 是否为编辑
type: Boolean,
default: null,
},
@@ -274,15 +274,18 @@ export default {
type: Number,
default: 0,
},
isLevel: { // 是否是关卡页面触发
isLevel: {
// 是否是关卡页面触发
type: Number,
default: null,
},
EditWorkId: { // 要编辑的workId
EditWorkId: {
// 要编辑的workId
type: Number,
default: null,
},
projectTaskId: { // 要编辑的projectId
projectTaskId: {
// 要编辑的projectId
type: Number,
default: null,
},
@@ -293,7 +296,7 @@ export default {
isactive: {
type: Number,
default: null,
}
},
},
setup(props, ctx) {
//console.log("学习路径",props.isStudiscuss);
@@ -322,35 +325,46 @@ export default {
state.textV1 = "";
state.textV2 = "";
state.time = "";
message.success(`${props.edit ? '编辑' : '新增'}关卡任务成功`)
message.success(`${props.edit ? "编辑" : "新增"}关卡任务成功`);
localStorage.setItem("stageId", props.chooseStageId);
localStorage.setItem("chapterId", props.isactive);
};
const queryActive = () => {
console.log("props.EditActiveId======",props.EditActiveId,props.chooseStageId,props.routerTaskId);
api.getActivity(props.EditActiveId).then(res => {
console.log('获取讨论信息成功',res.data.data.standardSettings)
console.log(
"props.EditActiveId======",
props.EditActiveId,
props.chooseStageId,
props.routerTaskId
);
api
.getActivity(props.EditActiveId)
.then((res) => {
console.log("获取讨论信息成功", res.data.data.standardSettings);
//更新讨论信息
state.inputV1 = res.data.data.activityName;
state.inputV1 = res.data.data.activityName;
state.textV1 = res.data.data.activityNotice;
state.textV2 = res.data.data.activityExplain;
state.inputV2 = res.data.data.activityDuration;
state.inputV3 = res.data.data.activityAddress;
state.inputV5 = res.data.data.afterSignIn;
state.inputV6 =res.data.data.signOutTime;
state.inputV6 = res.data.data.signOutTime;
state.inputV4 = res.data.data.beforeSignIn;
state.radioV1 = Number(res.data.data.standardSettings);
state.time = [dayjs(res.data.data.activityStartTime, "YYYY-MM-DD"), dayjs(res.data.data.activityEndTime, "YYYY-MM-DD")]
}).catch(err=>{
console.log('获取讨论信息失败',err)
state.time = [
dayjs(res.data.data.activityStartTime, "YYYY-MM-DD"),
dayjs(res.data.data.activityEndTime, "YYYY-MM-DD"),
];
})
}
.catch((err) => {
console.log("获取讨论信息失败", err);
});
};
const afterVisibleChange = (bool) => {
if(bool && props.edit){
if (bool && props.edit) {
queryActive();
}
};
const cloradio1 = (value) => {
if (value != "") {
@@ -358,107 +372,107 @@ export default {
}
};
const updateTask = (res) => {
if(props.isLevel == 1 ){
if (props.isLevel == 1) {
RouterEditTask({
chapterId:props.isactive,
courseId: res.data.data.activityId,
duration: res.data.data.activityDuration,
name: res.data.data.activityName,
routerId: props.routerId,
routerTaskId: props.routerTaskId ||0,
type: 9,
}).then(res => {
console.log("新增关卡任务成功",res);
}).catch(err => {
console.log("新增关卡任务失败",err);
chapterId: props.isactive,
courseId: res.data.data.activityId,
duration: res.data.data.activityDuration,
name: res.data.data.activityName,
routerId: props.routerId,
routerTaskId: props.routerTaskId || 0,
type: 9,
})
.then((res) => {
console.log("新增关卡任务成功", res);
})
}else if(props.isLevel==2){
apiTask.addTask({
.catch((err) => {
console.log("新增关卡任务失败", err);
});
} else if (props.isLevel == 2) {
apiTask
.addTask({
courseId: res.data.data.activityId,
duration: res.data.data.activityDuration,
name: res.data.data.activityName,
projectId: props.projectId,
projectTaskId: props.projectTaskId ||0,
stageId:props.chooseStageId,
projectTaskId: props.projectTaskId || 0,
stageId: props.chooseStageId,
type: 9,
}).then((res)=> {
console.log("更新任务列表成功",res);
})
.catch((err)=> {
console.log("更新任务列表失败",err);
.then((res) => {
console.log("更新任务列表成功", res);
})
}else if(props.isLevel == 3){
.catch((err) => {
console.log("更新任务列表失败", err);
});
} else if (props.isLevel == 3) {
console.log("模板库更新更新任务列表");
}
}
};
//创建活动
const updateActivityInfo = () => {
if(!state.inputV1){
if (!state.inputV1) {
message.destroy();
return message.warning("请输入活动名称");
}
if(!state.textV1){
if (!state.textV1) {
message.destroy();
return message.warning("请输入活动公告");
}
if(!state.time){
if (!state.time) {
message.destroy();
return message.warning("请输入活动时间");
}
if(!state.inputV2){
if (!state.inputV2) {
message.destroy();
return message.warning("请输入活动时长");
}
if(!state.inputV3){
if (!state.inputV3) {
message.destroy();
return message.warning("请输入活动地址");
}
let obj = {
activityAddress: state.inputV3, //活动地址
activityDuration: state.inputV2, //活动时长
activityExplain: state.textV2, //活动说明
activityEndTime: dayjs(state.time[1]).format("YYYY-MM-DD"), //活动结束时间
activityId: props.edit?props.EditActiveId:0, //活动ID
activityName: state.inputV1, //活动名称
activityNotice: state.textV1, //活动公告
activityStartTime:dayjs(state.time[0]).format("YYYY-MM-DD"),//活动开始时间
activityTag: "", //活动逻辑删除标识
afterSignIn: state.inputV5, //活动开始后多少分钟签到
beforeSignIn: state.inputV4, //活动开始前多少分钟签到
signOutTime: state.inputV6, //签退开始时间
standardSettings: state.radioV1, //标准设置
activityAddress: state.inputV3, //活动地址
activityDuration: state.inputV2, //活动时长
activityExplain: state.textV2, //活动说明
activityEndTime: dayjs(state.time[1]).format("YYYY-MM-DD"), //活动结束时间
activityId: props.edit ? props.EditActiveId : 0, //活动ID
activityName: state.inputV1, //活动名称
activityNotice: state.textV1, //活动公告
activityStartTime: dayjs(state.time[0]).format("YYYY-MM-DD"), //活动开始时间
activityTag: "", //活动逻辑删除标识
afterSignIn: state.inputV5, //活动开始后多少分钟签到
beforeSignIn: state.inputV4, //活动开始前多少分钟签到
signOutTime: state.inputV6, //签退开始时间
standardSettings: state.radioV1, //标准设置
};
if(props.edit){
if (props.edit) {
//更新编辑活动信息
api
.updateActivity(obj)
.then((res) => {
closeDrawer();
updateTask(res);
ctx.emit("changeData", false);
})
.catch((err) => {
console.log("更新失败",err);
})
}else{
.updateActivity(obj)
.then((res) => {
closeDrawer();
updateTask(res);
ctx.emit("changeData", false);
})
.catch((err) => {
console.log("更新失败", err);
});
} else {
//新建活动信息
api
.createActivity(obj)
.then((res) => {
.createActivity(obj)
.then((res) => {
message.success("创建成功");
closeDrawer();
updateTask(res);
ctx.emit("changeData", false);
})
.catch((err) => {
console.log("创建失败",err);
})
})
.catch((err) => {
console.log("创建失败", err);
});
}
};
return {
@@ -505,7 +519,7 @@ export default {
border-radius: 8px;
}
.main_left {
margin-top:32px;
margin-top: 32px;
padding-right: 30px;
flex: 1;
border-right: 1px solid #e8e8e8;

View File

@@ -40,28 +40,37 @@
<div class="search"></div>
<div class="btnText">重置</div>
</div>
</div>
</div>
</div>
</div>
<div class="main_table">
<a-table class="ant-table-striped" :row-class-name="
(_record, index) => (index % 2 === 1 ? 'table-striped' : null)
" :row-selection="rowSelection" :columns="tableDataFunc()" :data-source="tableData"
:loading="tableDataTotal === -1 ? true : false" expandRowByClick="true" this.getMilitaryDeployment()
@expand="expandTable" :pagination="false" filterMultiple:false
<div class="main_table">
<a-table
class="ant-table-striped"
:row-class-name="
(_record, index) => (index % 2 === 1 ? 'table-striped' : null)
"
:row-selection="rowSelection"
:columns="tableDataFunc()"
:data-source="tableData"
:loading="tableDataTotal === -1 ? true : false"
expandRowByClick="true"
this.getMilitaryDeployment()
@expand="expandTable"
:pagination="false"
filterMultiple:false
/>
<div class="pa">
<a-pagination
showSizeChanger="true"
showQuickJumper="true"
hideOnSinglePage="true"
:pageSize="pageSize"
:current="currentPage"
:total="tableDataTotal"
class="pagination"
@change="handelChangePage"
/>
</div>
<a-pagination
showSizeChanger="true"
showQuickJumper="true"
hideOnSinglePage="true"
:pageSize="pageSize"
:current="currentPage"
:total="tableDataTotal"
class="pagination"
@change="handelChangePage"
/>
</div>
</div>
</div>
<div class="main_btns">
@@ -90,7 +99,8 @@ export default {
type: Number,
default: null,
},
edit: { // 是否为编辑
edit: {
// 是否为编辑
type: Boolean,
default: null,
},
@@ -106,11 +116,13 @@ export default {
type: Number,
default: 0,
},
isLevel: { // 是否是关卡页面触发
isLevel: {
// 是否是关卡页面触发
type: Number,
default: null,
},
projectTaskId: { // 要编辑的projectId
projectTaskId: {
// 要编辑的projectId
type: Number,
default: null,
},
@@ -121,14 +133,15 @@ export default {
isactive: {
type: Number,
default: null,
}
},
},
setup(props, ctx) {
const state = reactive({
tableData: [
{
key: "1",
title: "基于BOE显示PNL工厂的工序平1111112222222221111111111111122222333335555",
title:
"基于BOE显示PNL工厂的工序平1111112222222221111111111111122222333335555",
name: "李玉冰",
time: "2022-10-31 23:12:00",
},
@@ -136,7 +149,7 @@ export default {
currentPage: 1,
tableDataTotal: 0,
pageSize: 10,
inputV1: '',
inputV1: "",
time: undefined,
assessmentId: null,
assessmentName: "",
@@ -144,6 +157,8 @@ export default {
const closeDrawer = () => {
ctx.emit("update:addcaseVisible", false);
ctx.emit("update:edit", false);
localStorage.setItem("stageId", props.chooseStageId);
localStorage.setItem("chapterId", props.isactive);
};
const afterVisibleChange = (bool) => {
console.log("state", bool);
@@ -179,7 +194,13 @@ export default {
const rowSelection = {
onSelect: (selectedRows, selected, selectedRowKeys) => {
console.log(
"selectedRowKeys", selectedRowKeys, "selectedRows", selectedRows, "selected", selected);
"selectedRowKeys",
selectedRowKeys,
"selectedRows",
selectedRows,
"selected",
selected
);
console.log(selectedRows.assessmentId);
state.assessmentId = selectedRows.assessmentId;
state.assessmentName = selectedRows.name;
@@ -228,8 +249,8 @@ export default {
});
};
const updateTask = () => {
console.log("jinlaile=================", state.assessmentName)
if (props.isLevel==1) {
console.log("jinlaile=================", state.assessmentName);
if (props.isLevel == 1) {
RouterEditTask({
chapterId: props.isactive,
courseId: state.assessmentId,
@@ -240,7 +261,7 @@ export default {
})
.then((res) => {
console.log(res, 11111);
message.success(`${props.edit ? '编辑' : '新增'}关卡任务成功`)
message.success(`${props.edit ? "编辑" : "新增"}关卡任务成功`);
ctx.emit("changeData", false);
closeDrawer();
state.addLoading = false;
@@ -248,7 +269,7 @@ export default {
.catch((err) => {
console.log(err, 1111);
});
} else if(props.isLevel==2){
} else if (props.isLevel == 2) {
console.log("=========projectTaskId", props.projectTaskId);
apiTask
.addTask({
@@ -267,10 +288,10 @@ export default {
.catch((err) => {
console.log(err, 111111);
});
}else if(props.isLevel==3){
} else if (props.isLevel == 3) {
console.log("模板库");
}
}
};
//重置案例信息
const resetCase = () => {
state.inputV1 = "";
@@ -297,181 +318,181 @@ export default {
</script>
<style lang="scss">
.ant-table-striped :deep(.table-striped) td {
background-color: #fafafa !important;
}
background-color: #fafafa !important;
}
.addcaseDrawer {
.drawerMain {
.header {
height: 73px;
border-bottom: 1px solid #e8e8e8;
.addcaseDrawer {
.drawerMain {
.header {
height: 73px;
border-bottom: 1px solid #e8e8e8;
display: flex;
justify-content: space-between;
align-items: center;
flex-shrink: 0;
.headerTitle {
font-size: 18px;
font-weight: 600;
color: #333333;
line-height: 25px;
margin-left: 24px;
}
}
.contentMain {
.main_items {
margin-top: 32px;
display: flex;
justify-content: space-between;
align-items: center;
flex-shrink: 0;
.headerTitle {
font-size: 18px;
font-weight: 600;
color: #333333;
line-height: 25px;
margin-left: 24px;
}
}
.contentMain {
.main_items {
margin-top:32px;
margin-bottom: 12px;
flex-wrap: wrap;
.mi_ipts {
display: flex;
justify-content: space-between;
margin-bottom: 12px;
flex-wrap: wrap;
.mi_ipts {
margin-bottom: 20px;
.mii_ipt {
display: flex;
margin-bottom: 20px;
.mii_ipt {
display: flex;
align-items: center;
margin-right: 24px;
.ipt_name {
white-space: nowrap;
}
}
}
.mi_btns {
display: flex;
margin-left: 38px;
margin-bottom: 20px;
cursor: pointer;
.btn {
padding: 0px 26px 0px 26px;
height: 38px;
border-radius: 8px;
border: 1px solid rgba(64, 158, 255, 1);
display: flex;
align-items: center;
justify-content: center;
margin-left: 14px;
flex-shrink: 0;
.search {
background-size: 100%;
}
.btnText {
font-size: 14px;
font-weight: 400;
line-height: 36px;
margin-left: 5px;
}
}
.btn1 {
background: rgb(64, 158, 255);
.search {
width: 15px;
height: 17px;
background-image: url("@/assets/images/coursewareManage/search0.png");
}
.btnText {
color: rgb(255, 255, 255);
}
}
.btn2 {
background: rgb(255, 255, 255);
.search {
width: 15px;
height: 17px;
background-image: url("@/assets/images/coursewareManage/reset1.png");
}
.btnText {
color: rgb(64, 158, 255);
}
}
.btn1:hover {
background: rgb(255, 255, 255);
.search {
background-image: url("@/assets/images/courseManage/search1.png");
}
.btnText {
color: #388be1;
}
}
.btn2:hover {
background: rgba(64, 158, 255, 1);
.search {
background-image: url("@/assets/images/courseManage/reset0.png");
}
.btnText {
color: #ffffff;
}
align-items: center;
margin-right: 24px;
.ipt_name {
white-space: nowrap;
}
}
}
.main_table {
position: relative;
padding-bottom: 80px;
.classify {
margin-left: 10px !important;
padding-left: 9px !important;
.mi_btns {
display: flex;
margin-left: 38px;
margin-bottom: 20px;
cursor: pointer;
.btn {
padding: 0px 26px 0px 26px;
height: 38px;
border-radius: 8px;
border: 1px solid rgba(64, 158, 255, 1);
display: flex;
align-items: center;
justify-content: center;
margin-left: 14px;
flex-shrink: 0;
.search {
background-size: 100%;
}
.ant-checkbox-wrapper {
align-items: center;
margin-top: -2px;
}
.ant-table-selection-column {
padding: 0px !important;
padding-left:15px !important;
}
.ant-table-thead > tr > th {
background-color: rgba(239, 244, 252, 1);
}
th.h {
background-color: #eff4fc !important;
}
.ant-table-tbody
> tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)
> td {
background: #f6f9fd;
}
.pa {
left: 0;
width: 100%;
// height: 20px;
// background-color: red;
display: flex;
justify-content: center;
position: absolute;
bottom: 20px;
.btnText {
font-size: 14px;
font-weight: 400;
line-height: 36px;
margin-left: 5px;
}
}
.btn1 {
background: rgb(64, 158, 255);
.search {
width: 15px;
height: 17px;
background-image: url("@/assets/images/coursewareManage/search0.png");
}
.btnText {
color: rgb(255, 255, 255);
}
}
.btn2 {
background: rgb(255, 255, 255);
.search {
width: 15px;
height: 17px;
background-image: url("@/assets/images/coursewareManage/reset1.png");
}
.btnText {
color: rgb(64, 158, 255);
}
}
.btn1:hover {
background: rgb(255, 255, 255);
.search {
background-image: url("@/assets/images/courseManage/search1.png");
}
.btnText {
color: #388be1;
}
}
.btn2:hover {
background: rgba(64, 158, 255, 1);
.search {
background-image: url("@/assets/images/courseManage/reset0.png");
}
.btnText {
color: #ffffff;
}
}
}
}
.main_btns {
height: 72px;
width: 100%;
bottom: 0;
left: 0;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.16);
.btn1 {
width: 100px;
height: 40px;
border: 1px solid #4ea6ff;
border-radius: 8px;
color: #4ea6ff;
background-color: #fff;
cursor: pointer;
.main_table {
position: relative;
padding-bottom: 80px;
.classify {
margin-left: 10px !important;
padding-left: 9px !important;
}
.btn2 {
cursor: pointer;
width: 100px;
height: 40px;
background: #4ea6ff;
border-radius: 8px;
border: 0;
margin-left: 15px;
color: #fff;
.ant-checkbox-wrapper {
align-items: center;
margin-top: -2px;
}
.ant-table-selection-column {
padding: 0px !important;
padding-left: 15px !important;
}
.ant-table-thead > tr > th {
background-color: rgba(239, 244, 252, 1);
}
th.h {
background-color: #eff4fc !important;
}
.ant-table-tbody
> tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)
> td {
background: #f6f9fd;
}
.pa {
left: 0;
width: 100%;
// height: 20px;
// background-color: red;
display: flex;
justify-content: center;
position: absolute;
bottom: 20px;
}
}
}
.main_btns {
height: 72px;
width: 100%;
bottom: 0;
left: 0;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.16);
.btn1 {
width: 100px;
height: 40px;
border: 1px solid #4ea6ff;
border-radius: 8px;
color: #4ea6ff;
background-color: #fff;
cursor: pointer;
}
.btn2 {
cursor: pointer;
width: 100px;
height: 40px;
background: #4ea6ff;
border-radius: 8px;
border: 0;
margin-left: 15px;
color: #fff;
}
}
}
}
</style>

View File

@@ -174,7 +174,9 @@ export default {
state.inputV1 = "";
state.textV1 = "";
message.success(`${props.edit ? "编辑" : "新增"}关卡任务成功`);
// ctx.emit("changeData", false);
localStorage.setItem("stageId", props.chooseStageId);
localStorage.setItem("chapterId", props.isactive);
};
const queryDiscuss = () => {
if (props.edit) {

View File

@@ -9,7 +9,7 @@
>
<div class="drawerMain">
<div class="header">
<div class="headerTitle">{{edit?'编辑':'添加'}}测评</div>
<div class="headerTitle">{{ edit ? "编辑" : "添加" }}测评</div>
<img
style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png"
@@ -48,16 +48,18 @@
<span style="margin-right: 3px">选择测评</span>
</div>
<div class="btnbox">
<button class="checkEval" @click="showEvalDrawer">选择测评</button>
<button class="checkEval" @click="showEvalDrawer">
选择测评
</button>
</div>
<div>
<div><EvList
v-model:EvalListVisible="EvalListVisible"
v-model:evaluationTypeId="evaluationTypeId"
v-model:evaluationTypeName="evaluationTypeName"
/>
</div>
<div>
<EvList
v-model:EvalListVisible="EvalListVisible"
v-model:evaluationTypeId="evaluationTypeId"
v-model:evaluationTypeName="evaluationTypeName"
/>
</div>
</div>
</div>
<div class="main_item">
@@ -78,8 +80,12 @@
<span style="margin-right: 3px">测评说明</span>
</div>
<div class="textarea">
<a-textarea v-model:value="description" placeholder="请输入测评说明" style="width:424px; height: 120px;" allowClear/>
<a-textarea
v-model:value="description"
placeholder="请输入测评说明"
style="width: 424px; height: 120px"
allowClear
/>
</div>
</div>
</div>
@@ -102,11 +108,11 @@ import * as api from "../../api/indexEval";
import * as apitaskadd from "../../api/indexTaskadd";
import { message } from "ant-design-vue";
import { RouterEditTask } from "@/api/indexTask";
import dayjs from 'dayjs';
import dayjs from "dayjs";
// const router = useRouter();
export default {
name: "AddEval",
components: {
components: {
EvList,
},
props: {
@@ -118,7 +124,8 @@ export default {
type: Number,
default: null,
},
edit: { // 是否为编辑
edit: {
// 是否为编辑
type: Boolean,
default: null,
},
@@ -134,11 +141,13 @@ export default {
type: Number,
default: 0,
},
isLevel: { // 是否是关卡页面触发
isLevel: {
// 是否是关卡页面触发
type: Number,
default: null,
},
projectTaskId: { // 要编辑的projectId
projectTaskId: {
// 要编辑的projectId
type: Number,
default: null,
},
@@ -157,10 +166,10 @@ export default {
inputV2: "",
time: undefined,
EvalId: null,
evaluationTypeId:null,
evaluationTypeName:"",
description:"",
EvalListVisible:false,
evaluationTypeId: null,
evaluationTypeName: "",
description: "",
EvalListVisible: false,
// addLoading:false,
});
@@ -169,67 +178,72 @@ export default {
ctx.emit("update:edit", false);
state.inputV1 = "";
state.inputV2 = "";
localStorage.setItem("stageId", props.chooseStageId);
localStorage.setItem("chapterId", props.isactive);
};
const afterVisibleChange = (bool) => {
if(props.edit && bool){
if (props.edit && bool) {
queryEval();
}
};
const showEvalDrawer = () =>{
const showEvalDrawer = () => {
state.EvalListVisible = true;
console.log("进来了吗");
};
const queryEval = () =>{
const queryEval = () => {
api
.queryEvaluationDetailById({evaluationId:props.evaluationId})
.then((res) => {
console.log("调用项目添加接口后", res.data.data);
state.inputV1 = res.data.data.evaluationName;
state.time = [dayjs(res.data.data.evaluationStartTime, "YYYY-MM-DD"), dayjs(res.data.data.evaluationEndTime, "YYYY-MM-DD")];
state.evaluationTypeId = res.data.data.evaluationTypeId;
state.evaluationTypeName =res.data.data.evaluationTypeName;
//state.description =
.queryEvaluationDetailById({ evaluationId: props.evaluationId })
.then((res) => {
console.log("调用项目添加接口后", res.data.data);
state.inputV1 = res.data.data.evaluationName;
state.time = [
dayjs(res.data.data.evaluationStartTime, "YYYY-MM-DD"),
dayjs(res.data.data.evaluationEndTime, "YYYY-MM-DD"),
];
state.evaluationTypeId = res.data.data.evaluationTypeId;
state.evaluationTypeName = res.data.data.evaluationTypeName;
//state.description =
})
.catch((err) => {
console.log(err);
});
}
const updateTask = (res)=>{
if(props.isLevel ==1){
};
const updateTask = (res) => {
if (props.isLevel == 1) {
apitaskadd
.addTask({
courseId: res.data.data.evaluationId,
name: res.data.data.evaluationName,
projectId: props.projectId,
projectTaskId: props.projectTaskId || 0,
stageId: props.chooseStageId,
type: 10,
})
.then((res) => {
console.log("调用项目添加接口后", res.data);
})
.catch((err) => {
console.log(err);
});
}else if(props.isLevel ==2){
.addTask({
courseId: res.data.data.evaluationId,
name: res.data.data.evaluationName,
projectId: props.projectId,
projectTaskId: props.projectTaskId || 0,
stageId: props.chooseStageId,
type: 10,
})
.then((res) => {
console.log("调用项目添加接口后", res.data);
})
.catch((err) => {
console.log(err);
});
} else if (props.isLevel == 2) {
RouterEditTask({
chapterId: props.isactive,
courseId: res.data.data.evaluationId,
name: res.data.data.evaluationName,
routerId: props.routerId,
routerTaskId: props.routerTaskId || 0,
type: 10,
}).then((res) => {
console.log("调用项目添加接口后", res.data);
}).catch((err) => {
console.log(err);
});
}else if(props.isLevel ==3){
console.log("模板库任务")
chapterId: props.isactive,
courseId: res.data.data.evaluationId,
name: res.data.data.evaluationName,
routerId: props.routerId,
routerTaskId: props.routerTaskId || 0,
type: 10,
})
.then((res) => {
console.log("调用项目添加接口后", res.data);
})
.catch((err) => {
console.log(err);
});
} else if (props.isLevel == 3) {
console.log("模板库任务");
}
}
};
//创建或编辑测评信息
const createEvalText = () => {
if (!state.inputV1) {
@@ -248,36 +262,36 @@ export default {
let obj = {
evaluationName: state.inputV1,
evaluationEndTime: dayjs(state.time[1]).format("YYYY-MM-DD"),
evaluationId: props.edit?props.evaluationId:0,
evaluationId: props.edit ? props.evaluationId : 0,
evaluationStartTime: dayjs(state.time[0]).format("YYYY-MM-DD"),
evaluationTypeId:state.evaluationTypeId,
evaluationTypeName:state.evaluationTypeName,
evaluationTypeId: state.evaluationTypeId,
evaluationTypeName: state.evaluationTypeName,
//state.description
};
if(props.edit){
if (props.edit) {
api
.createEvaluation(obj)
.then((res) => {
updateTask(res);
message.success("创建成功");
closeDrawer();
ctx.emit("changeData", false);
})
.catch((err) => {
console.log(err);
});
}else{
.createEvaluation(obj)
.then((res) => {
updateTask(res);
message.success("创建成功");
closeDrawer();
ctx.emit("changeData", false);
})
.catch((err) => {
console.log(err);
});
} else {
api
.updateEvaluation(obj)
.then((res) => {
updateTask(res);
message.success("创建成功");
closeDrawer();
ctx.emit("changeData", false);
})
.catch((err) => {
console.log(err);
});
.updateEvaluation(obj)
.then((res) => {
updateTask(res);
message.success("创建成功");
closeDrawer();
ctx.emit("changeData", false);
})
.catch((err) => {
console.log(err);
});
}
};
@@ -318,7 +332,7 @@ export default {
display: flex;
justify-content: space-between;
.main_left {
margin-top:32px;
margin-top: 32px;
padding-right: 30px;
flex: 1;
border-right: 1px solid #e8e8e8;

View File

@@ -48,11 +48,14 @@
<span style="margin-right: 3px">选择课程</span>
</div>
<div class="btnbox" @click="showDrawerSelFacet">
<button class="xkbtn">选择课程</button>
<button class="xkbtn">授课课程</button>
</div>
<!-- 选择面授侧弹窗 -->
<div>
<sel-facet v-model:selfacetVisible="selfacetvisible" />
<sel-facet
v-model:selfacetVisible="selfacetvisible"
@getData="upDateTable"
/>
</div>
<!-- 选择面授侧弹窗 -->
</div>
@@ -152,8 +155,15 @@
<div class="timerbox">
<span>开始前</span>
<a-input-number
:min="0" :max="30" :precision="0"
style="width: 88px; height: 32px;border-radius: 8px;overflow: hidden;"
:min="0"
:max="30"
:precision="0"
style="
width: 88px;
height: 32px;
border-radius: 8px;
overflow: hidden;
"
:v-model:value="inputV5"
></a-input-number>
<span style="color: #999999; margin-left: 8px">分钟</span>
@@ -161,29 +171,43 @@
<div class="timerbox">
<span>开始后</span>
<a-input-number
:min="0" :max="30" :precision="0"
style="width: 88px; height: 32px;border-radius: 8px;overflow: hidden;"
:min="0"
:max="30"
:precision="0"
style="
width: 88px;
height: 32px;
border-radius: 8px;
overflow: hidden;
"
:v-model:value="inputV6"
></a-input-number>
<span style="color: #999999; margin-left: 8px">分钟</span>
</div>
</div>
<div class="qdqtbox">
<!-- <div class="qdqtbox">
<div class="qtbtn"><div class="btntext">签退</div></div>
</div>
<div class="setbox">
</div> -->
<!-- <div class="setbox">
<div class="timerbox">
<span>结束前</span>
<a-input-number
:min="0" :max="30" :precision="0"
style="width: 88px; height: 32px;border-radius: 8px;overflow: hidden;"
:min="0"
:max="30"
:precision="0"
style="
width: 88px;
height: 32px;
border-radius: 8px;
overflow: hidden;
"
:v-model:value="inputV7"
></a-input-number>
<span style="color: #999999; margin-left: 8px"
>分钟提前签退则记为早退</span
>
</div>
</div>
</div> -->
</div>
</div>
<div class="main_item">
@@ -192,7 +216,9 @@
</div>
<div class="btnbox">
<a-radio-group v-model:value="radioV1">
<a-radio v-model:checked="checked" :value="1" @click="cloradio1">仅签到</a-radio>
<a-radio v-model:checked="checked" :value="1" @click="cloradio1"
>仅签到</a-radio
>
<a-radio v-model:checked="checked" :value="2" @click="cloradio1"
>签到签退全部完成</a-radio
>
@@ -215,7 +241,9 @@
</div>
<div class="btnbox2">
<a-radio-group v-model:value="radioV2">
<a-radio v-model:checked="checked" :value="1" @click="cloradio2">允许项目内人员临时到场参加</a-radio>
<a-radio v-model:checked="checked" :value="1" @click="cloradio2"
>允许项目内人员临时到场参加</a-radio
>
<a-radio v-model:checked="checked" :value="2" @click="cloradio2"
>允许项目外人员临时到场参加</a-radio
>
@@ -228,7 +256,7 @@
</div>
<div class="btnbox2">
<a-checkbox v-model:checked="checked">需要评估</a-checkbox>
<button class="xkbtn">选择课程</button>
<button class="xkbtn">选择评估</button>
</div>
</div>
</div>
@@ -271,13 +299,13 @@
</div>
<div class="main_btns">
<button class="btn1">取消</button>
<button class="btn2" @click ="updateFaceTeach">确定</button>
<button class="btn2" @click="updateFaceTeach">确定</button>
</div>
</div>
</a-drawer>
</template>
<script>
import { reactive, toRefs} from "vue";
import { reactive, toRefs } from "vue";
import SelFacet from "../../components/drawers/SelFacet.vue";
import AddHomework from "../../components/drawers/AddHomework.vue";
import AddTest from "../../components/drawers/AddTest.vue";
@@ -356,10 +384,12 @@ export default {
ctx.emit("update:addfaceteachVisible", false);
state.radioV1 = "";
state.radioV2 = "";
localStorage.setItem("stageId", props.chooseStageId);
localStorage.setItem("chapterId", props.isactive);
};
const afterVisibleChange = (bool) => {
console.log("state", bool);
if(bool){
if (bool) {
queryFaceTeach();
}
};
@@ -381,19 +411,16 @@ export default {
if (value != "") {
state.radioV2 = "";
}
}
};
//查询面授
const queryFaceTeach=()=>{
}
//更新任务列表
const updateTask=()=>{
}
//新建或编辑面授
const updateFaceTeach=()=>{
}
const queryFaceTeach = () => {};
//更新任务列表
const updateTask = () => {};
//新建或编辑面授
const updateFaceTeach = () => {};
const upDateTable = (data) => {
console.log("选择了课程", data);
};
return {
...toRefs(state),
showDrawerSelFacet,
@@ -405,6 +432,7 @@ export default {
cloradio2,
updateFaceTeach,
updateTask,
upDateTable,
// change,
};
},
@@ -443,115 +471,115 @@ export default {
display: flex;
align-items: center;
margin-top: 32px;
margin-bottom: 32px;
margin-bottom: 32px;
.signbox {
width: 120px;
display: flex;
justify-content: end;
align-items: center;
.signbox {
width: 120px;
display: flex;
justify-content: end;
align-items: center;
.sign {
margin-right: 5px;
}
}
.btnbox {
display: flex;
flex: 1;
align-items: center;
.xkbtn {
cursor: pointer;
width: 130px;
height: 40px;
background: #388be1;
border-radius: 8px;
border: 0;
margin-right: 8px;
color: #fff;
}
.sign {
margin-right: 5px;
}
}
.main_item2 {
.btnbox {
display: flex;
align-items: flex-start;
margin-bottom: 32px;
flex: 1;
align-items: center;
.signbox {
width: 120px;
display: flex;
justify-content: end;
align-items: center;
.xkbtn {
cursor: pointer;
width: 130px;
height: 40px;
background: #388be1;
border-radius: 8px;
border: 0;
margin-right: 8px;
color: #fff;
}
}
}
.main_item2 {
display: flex;
align-items: flex-start;
// margin-bottom: 32px;
.signbox {
width: 120px;
display: flex;
justify-content: end;
align-items: center;
}
.kqszbox {
.qdqtbox {
margin-left: 5px;
cursor: pointer;
}
.kqszbox {
.qdqtbox {
margin-left: 5px;
cursor: pointer;
}
.qdbtn,
.qtbtn {
width: 75px;
height: 24px;
background: rgba(56, 139, 225, 0.16);
border-radius: 2px;
border: 1px solid #387df7;
display: flex;
align-items: center;
justify-content: center;
.qdbtn,
.qtbtn {
width: 75px;
height: 24px;
background: rgba(56, 139, 225, 0.16);
border-radius: 2px;
border: 1px solid #387df7;
.btntext {
color: #387df7;
}
}
.setbox {
display: flex;
flex-wrap: wrap;
margin-top: 10px;
// margin-bottom: 24px;
.timerbox {
margin-top: 6px;
margin-right: 32px;
display: flex;
align-items: center;
justify-content: center;
.btntext {
color: #387df7;
}
}
.setbox {
display: flex;
flex-wrap: wrap;
margin-top: 10px;
margin-bottom: 24px;
.timerbox {
margin-top: 6px;
margin-right: 32px;
display: flex;
align-items: center;
flex-wrap: nowrap;
}
}
}
.btnbox2 {
display: flex;
flex-direction: column;
justify-content: flex-start;
.xkbtn {
cursor: pointer;
width: 130px;
height: 40px;
background: #388be1;
border-radius: 8px;
border: 0;
margin-right: 16px 8px 32px 0;
color: #fff;
margin-top: 16px;
margin-bottom: 60px;
flex-wrap: nowrap;
}
}
}
.btnbox2 {
display: flex;
flex-direction: column;
justify-content: flex-start;
.xkbtn {
cursor: pointer;
width: 130px;
height: 40px;
background: #388be1;
border-radius: 8px;
border: 0;
margin-right: 16px 8px 32px 0;
color: #fff;
margin-top: 16px;
margin-bottom: 60px;
}
}
}
}
.main_right {
width: 337px;
.main_right {
width: 337px;
.main_item {
display: flex;
align-items: center;
margin-top: 32px;
.main_item {
display: flex;
align-items: center;
margin-top: 32px;
margin-bottom: 32px;
.signbox {
width: 120px;

View File

@@ -279,6 +279,9 @@ export default {
formState.choosedTime = "";
ctx.emit("update:addhomeworkVisible", false);
ctx.emit("update:edit", false);
ctx.emit("changeData", false);
localStorage.setItem("stageId", props.chooseStageId);
localStorage.setItem("chapterId", props.isactive);
};
const afterVisibleChange = (bool) => {
if (props.addhomeworkVisible && props.edit) {
@@ -288,38 +291,35 @@ export default {
console.log("state", bool);
};
// 新增任务
const updteHomeWork = () => {
let obj = {
submitEndTime: dayjs(formState.choosedTime[1]).format("YYYY-MM-DD"),
submitStartTime: dayjs(formState.choosedTime[0]).format("YYYY-MM-DD"),
workEnclosureAddress: "",
workId: props.edit?props.EditWorkId:0,
workId: props.edit ? props.EditWorkId : 0,
workName: formState.workName,
workRequirement: formState.workRequirement,
};
if(props.edit){
if (props.edit) {
updateWorkTaskUsing(obj)
.then((res) => {
updateTask(res);
closeDrawer();
})
.catch((err) => {
message.error(`添加失败${err}`);
});
}else{
.then((res) => {
updateTask(res);
closeDrawer();
})
.catch((err) => {
message.error(`添加失败${err}`);
});
} else {
createWorkTask(obj)
.then((res) => {
updateTask(res);
closeDrawer();
})
.catch((err) => {
message.error(`添加失败${err}`);
});
.then((res) => {
updateTask(res);
closeDrawer();
})
.catch((err) => {
message.error(`添加失败${err}`);
});
}
};
// 查询任务
@@ -345,50 +345,48 @@ export default {
};
// 新增编辑或新增项目任务
const updateTask = (res) => {
if(props.isLevel==1 ){
if (props.isLevel == 1) {
let editObj1 = {
chapterId: props.isactive,
courseId: res.data.data.workId,
name: res.data.data.workName,
routerId: props.routerId,
routerTaskId: props.routerTaskId || 0,
type: 4,
};
chapterId: props.isactive,
courseId: res.data.data.workId,
name: res.data.data.workName,
routerId: props.routerId,
routerTaskId: props.routerTaskId || 0,
type: 4,
};
RouterEditTask(editObj1)
.then(() => {
message.success(`${props.edit ? "编辑" : "新增"}关卡任务成功`);
ctx.emit("changeData", false);
state.addLoading = false;
})
.catch(() => {
message.error(`${props.edit ? "编辑" : "新增"}关卡任务失败`);
});
}else if(props.isLevel==2){
RouterEditTask(editObj1)
.then(() => {
message.success(`${props.edit ? "编辑" : "新增"}关卡任务成功`);
ctx.emit("changeData", false);
state.addLoading = false;
})
.catch(() => {
message.error(`${props.edit ? "编辑" : "新增"}关卡任务失败`);
});
} else if (props.isLevel == 2) {
let editObj = {
courseId: res.data.data.workId,
name:res.data.data.workName,
projectId: props.edit?props.projectId:0,
projectTaskId: props.projectTaskId || 0,
stageId: props.chooseStageId,
type: 4,
};
ProjectEditTask(editObj)
.then(() => {
message.success(`${props.edit ? "编辑" : "新增"}阶段任务成功`);
ctx.emit("changeData", false);
state.addLoading = false;
})
.catch(() => {
message.error(`${props.edit ? "编辑" : "新增"}阶段任务失败`);
});
}else if(props.isLevel==3){
courseId: res.data.data.workId,
name: res.data.data.workName,
projectId: props.edit ? props.projectId : 0,
projectTaskId: props.projectTaskId || 0,
stageId: props.chooseStageId,
type: 4,
};
ProjectEditTask(editObj)
.then(() => {
message.success(`${props.edit ? "编辑" : "新增"}阶段任务成功`);
ctx.emit("changeData", false);
state.addLoading = false;
})
.catch(() => {
message.error(`${props.edit ? "编辑" : "新增"}阶段任务失败`);
});
} else if (props.isLevel == 3) {
console.log("模板库更新更新任务列表");
}
};
return {
afterVisibleChange,
closeDrawer,
@@ -440,7 +438,7 @@ export default {
padding-right: 30px;
flex: 1;
border-right: 1px solid #e8e8e8;
margin-top:32px;
margin-top: 32px;
.main_item {
display: flex;

View File

@@ -18,51 +18,61 @@
/>
</div>
<div class="contentMain">
<div class="main">
<div class="main_left">
<div class="main_notice">
<div class="mntc_left">
<div class="notice_icon"></div>
<div v-if="assessment==null">
<span class="title">已选择 <span class ="data">0</span> </span>
</div>
<div v-else>
<span class="title">已选择 <span class ="data">1</span> ;</span>
<span class="title">名称 <span class ="data">{{assessment.name}}</span> </span>
<span class="title">题数 <span class ="data">{{assessment.num}}</span> </span>
<span class="title">创建人 <span class ="data">{{assessment.creator}}</span> </span>
<span class="title">创建时间 <span class ="data">{{assessment.time}}</span> </span>
</div>
</div>
</div>
<div class="main_item">
<div class="fi_input">
<div class="btns" @click="checkAssDrawer">
<div class="search"></div>
<div class="btnText">选择评估</div>
<div class="main_item2">
<AssessmentList
v-model:assessmentVisible="assessmentVisible"
@checkedAss="getCheckedAss"/>
<div class="main">
<div class="main_left">
<div class="main_notice">
<div class="mntc_left">
<div class="notice_icon"></div>
<div v-if="assessment == null">
<span class="title"
>已选择 <span class="data">0</span> </span
>
</div>
<div v-else>
<span class="title"
>已选择 <span class="data">1</span> ;</span
>
<span class="title"
>名称 <span class="data">{{ assessment.name }}</span>
</span>
<span class="title"
>题数 <span class="data">{{ assessment.num }}</span>
</span>
<span class="title"
>创建人 <span class="data">{{ assessment.creator }}</span>
</span>
<span class="title"
>创建时间 <span class="data">{{ assessment.time }}</span>
</span>
</div>
</div>
</div>
<div class="main_item">
<div class="fi_input">
<div class="btns" @click="checkAssDrawer">
<div class="search"></div>
<div class="btnText">选择评估</div>
<div class="main_item2">
<AssessmentList
v-model:assessmentVisible="assessmentVisible"
@checkedAss="getCheckedAss"
/>
</div>
</div>
</div>
</div>
</div>
<div class="main_btns">
<button class="btn1" @click="closeDrawer">取消</button>
<button class="btn2" @click="updateTask">确定</button>
</div>
</div>
</div>
<div class="main_btns">
<button class="btn1" @click="closeDrawer">取消</button>
<button class="btn2" @click="updateTask">确定</button>
</div>
</div>
</div>
</div>
</a-drawer>
</template>
<script>
import { reactive, toRefs} from "vue";
import { reactive, toRefs } from "vue";
import * as apiTask from "../../api/indexTaskadd";
import { message } from "ant-design-vue";
import AssessmentList from "./ AssessmentList.vue";
@@ -81,7 +91,8 @@ export default {
type: Number,
default: null,
},
edit: { // 是否为编辑
edit: {
// 是否为编辑
type: Boolean,
default: null,
},
@@ -97,12 +108,14 @@ export default {
type: Number,
default: 0,
},
isLevel: { // 是否是关卡页面触发
isLevel: {
// 是否是关卡页面触发
type: Number,
default: null,
},
projectTaskId: { // 要编辑的projectId
projectTaskId: {
// 要编辑的projectId
type: Number,
default: null,
},
@@ -114,7 +127,6 @@ export default {
type: Number,
default: null,
},
},
setup(props, ctx) {
const state = reactive({
@@ -123,76 +135,79 @@ export default {
currentPage: 1,
pageSize: 10,
tableDataTotal: 0,
tableData: [
],
assessmentId:null,
assessmentName:"",
assessment:null,
assessmentVisible:false,
tableData: [],
assessmentId: null,
assessmentName: "",
assessment: null,
assessmentVisible: false,
});
const getCheckedAss = (ass) =>{
state.assessment = ass
console.log("checed===",state.assessment);
}
const getCheckedAss = (ass) => {
state.assessment = ass;
console.log("checed===", state.assessment);
};
const closeDrawer = () => {
ctx.emit("update:addinvistVisible", false);
ctx.emit("update:edit", false);
state.inputV1 = "";
// ctx.emit("changeData", false);
localStorage.setItem("stageId", props.chooseStageId);
localStorage.setItem("chapterId", props.isactive);
};
const checkAssDrawer =() =>{
const checkAssDrawer = () => {
state.assessmentVisible = true;
}
};
const afterVisibleChange = (bool) => {
console.log("state", bool);
state.assessmentId = null;
state.assessmentName = "";
state.assessment = null;
};
const updateTask =()=>{
if(state.assessment==null){
const updateTask = () => {
if (state.assessment == null) {
return message.warning("请选择评估");
}
if(props.isLevel ==1){
if (props.isLevel == 1) {
RouterEditTask({
chapterId: props.isactive,
courseId: state.assessment.assessmentId,
name:state.assessment.name,
routerId: props.routerId,
routerTaskId: props.routerTaskId || 0,
type: 11,
})
.then((res) => {
console.log(res, 11111);
message.success(`${props.edit ? '编辑' : '新增'}关卡任务成功`)
ctx.emit("changeData", false);
closeDrawer();
state.addLoading = false;
})
.catch((err) => {
console.log(err, 1111);
});
}else if(props.isLevel ==2){
chapterId: props.isactive,
courseId: state.assessment.assessmentId,
name: state.assessment.name,
routerId: props.routerId,
routerTaskId: props.routerTaskId || 0,
type: 11,
})
.then((res) => {
console.log(res, 11111);
message.success(`${props.edit ? "编辑" : "新增"}关卡任务成功`);
ctx.emit("changeData", false);
closeDrawer();
state.addLoading = false;
})
.catch((err) => {
console.log(err, 1111);
});
} else if (props.isLevel == 2) {
apiTask
.addTask({
courseId: state.assessment.assessmentId,
name:state.assessment.name,
projectId: props.projectId,
projectTaskId: props.projectTaskId || 0,
stageId: props.chooseStageId,
type: 11,
})
.then((res) => {
console.log("调用项目添加接口后111", res.data, 11111);
ctx.emit("changeData", false);
closeDrawer();
})
.catch((err) => {
console.log(err, 111111);
});
}else if(props.isLevel == 3){
.addTask({
courseId: state.assessment.assessmentId,
name: state.assessment.name,
projectId: props.projectId,
projectTaskId: props.projectTaskId || 0,
stageId: props.chooseStageId,
type: 11,
})
.then((res) => {
console.log("调用项目添加接口后111", res.data, 11111);
ctx.emit("changeData", false);
closeDrawer();
})
.catch((err) => {
console.log(err, 111111);
});
} else if (props.isLevel == 3) {
console.log("模板库更新更新任务列表");
}
}
};
return {
...toRefs(state),
@@ -229,107 +244,104 @@ export default {
.contentMain {
display: flex;
justify-content: space-between;
.main{
width:100%;
.main_left {
padding-right: 30px;
margin-top:32px;
.main_item {
display: flex;
align-items: center;
margin-bottom: 64px;
.fi_input {
margin-right: 20px;
}
.btns {
margin-right: 20px;
padding: 0px 26px 0px 26px;
height: 38px;
background: #409eff;
border-radius: 8px;
//border: 1px solid rgba(64, 158, 255, 1);
.main {
width: 100%;
.main_left {
padding-right: 30px;
margin-top: 32px;
.main_item {
display: flex;
align-items: center;
justify-content: center;
margin-right: 14px;
flex-shrink: 0;
cursor: pointer;
.search {
width: 15px;
height: 17px;
background-image: url("../../assets/images/courseManage/search0.png");
background-size: 100% 100%;
margin-bottom: 64px;
.fi_input {
margin-right: 20px;
}
.btnText {
font-size: 14px;
font-weight: 400;
color: #ffffff;
line-height: 36px;
margin-left: 5px;
.btns {
margin-right: 20px;
padding: 0px 26px 0px 26px;
height: 38px;
background: #409eff;
border-radius: 8px;
//border: 1px solid rgba(64, 158, 255, 1);
display: flex;
align-items: center;
justify-content: center;
margin-right: 14px;
flex-shrink: 0;
cursor: pointer;
.search {
width: 15px;
height: 17px;
background-image: url("../../assets/images/courseManage/search0.png");
background-size: 100% 100%;
}
.btnText {
font-size: 14px;
font-weight: 400;
color: #ffffff;
line-height: 36px;
margin-left: 5px;
}
}
.btnsn {
padding: 0px 26px 0px 26px;
height: 38px;
background: #ffffff;
border-radius: 8px;
border: 1px solid rgba(64, 158, 255, 1);
display: flex;
align-items: center;
justify-content: center;
margin-right: 14px;
flex-shrink: 0;
cursor: pointer;
.search {
width: 16px;
height: 18px;
background-image: url("../../assets/images/courseManage/reset1.png");
background-size: 100% 100%;
}
.btnText {
font-size: 14px;
font-weight: 400;
color: #409eff;
line-height: 36px;
margin-left: 5px;
}
}
}
.btnsn {
padding: 0px 26px 0px 26px;
height: 38px;
background: #ffffff;
border-radius: 8px;
border: 1px solid rgba(64, 158, 255, 1);
.main_notice {
display: flex;
justify-content: space-between;
align-items: center;
justify-content: center;
margin-right: 14px;
flex-shrink: 0;
cursor: pointer;
.search {
width: 16px;
height: 18px;
background-image: url("../../assets/images/courseManage/reset1.png");
background-size: 100% 100%;
margin-bottom: 32px;
height: 40px;
background-color: #e9f6fe;
.mntc_left {
display: flex;
align-items: center;
.title {
color: rgba(0, 0, 0, 0.65);
margin-right: 17px;
}
.data {
color: #388be1;
}
.notice_icon {
width: 14px;
height: 14px;
margin-right: 9px;
margin-left: 9px;
background-image: url(@/assets/images/coursewareManage/gan.png);
background-size: 100% 100%;
}
}
.btnText {
font-size: 14px;
font-weight: 400;
color: #409eff;
line-height: 36px;
margin-left: 5px;
.mntc_right {
cursor: pointer;
}
}
}
.main_notice {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 32px;
height: 40px;
background-color: #e9f6fe;
.mntc_left {
display: flex;
align-items: center;
.title{
color: rgba(0, 0, 0, 0.65);
margin-right: 17px
}
.data{
color: #388be1
}
.notice_icon {
width: 14px;
height: 14px;
margin-right: 9px;
margin-left: 9px;
background-image: url(@/assets/images/coursewareManage/gan.png);
background-size: 100% 100%;
}
}
.mntc_right {
cursor: pointer;
}
}
}
}
}
.main_btns {
height: 72px;

View File

@@ -445,6 +445,9 @@ export default {
state.textV1 = "";
state.switchC1 = "";
state.imageUrl = "";
ctx.emit("changeData", false);
localStorage.setItem("stageId", props.chooseStageId);
localStorage.setItem("chapterId", props.isactive);
};
const afterVisibleChange = (bool) => {
console.log("props.edit===================", props.edit, bool);

View File

@@ -59,10 +59,10 @@
<div class="mntc_left">
<div class="notice_icon"></div>
<span style="color: rgba(0, 0, 0, 0.65); margin-right: 17px"
>已选择 <span style="color: #388be1">{{RowsNum}}</span> </span
>已选择 <span style="color: #388be1">{{ RowsNum }}</span> </span
>
<span style="color: rgba(0, 0, 0, 0.65)"
>列表选项总计<span>{{tableDataTotal}}</span> </span
>列表选项总计<span>{{ tableDataTotal }}</span> </span
>
</div>
<div class="mntc_right">
@@ -79,24 +79,24 @@
:columns="tableDataFunc()"
:data-source="tableData"
:loading="tableDataTotal === -1 ? true : false"
expandRowByClick="true"
this.getMilitaryDeployment()
@expand="expandTable"
expandRowByClick="true"
this.getMilitaryDeployment()
@expand="expandTable"
:pagination="false"
filterMultiple:false
filterMultiple:false
/>
<div class="pa">
<a-pagination
showSizeChanger="true"
showQuickJumper="true"
hideOnSinglePage="true"
:pageSize="pageSize"
:current="currentPage"
:total="tableDataTotal"
class="pagination"
@change="handelChangePage"
/>
</div>
<a-pagination
showSizeChanger="true"
showQuickJumper="true"
hideOnSinglePage="true"
:pageSize="pageSize"
:current="currentPage"
:total="tableDataTotal"
class="pagination"
@change="handelChangePage"
/>
</div>
</div>
</div>
<div class="main_btns">
@@ -124,7 +124,8 @@ export default {
type: Number,
default: null,
},
edit: { // 是否为编辑
edit: {
// 是否为编辑
type: Boolean,
default: null,
},
@@ -140,11 +141,13 @@ export default {
type: Number,
default: 0,
},
isLevel: { // 是否是关卡页面触发
isLevel: {
// 是否是关卡页面触发
type: Number,
default: null,
},
projectTaskId: { // 要编辑的projectId
projectTaskId: {
// 要编辑的projectId
type: Number,
default: null,
},
@@ -155,20 +158,20 @@ export default {
isactive: {
type: Number,
default: null,
}
},
},
setup(props, ctx) {
const state = reactive({
inputV1:"",
options1 : [
inputV1: "",
options1: [
{
value: "value1",
label: "未完成",
},
],
time: undefined,
assessmentId:null,
assessmentName:"",
assessmentId: null,
assessmentName: "",
RowsNum: 0,
tableData: [],
currentPage: 1,
@@ -178,6 +181,9 @@ export default {
const closeDrawer = () => {
ctx.emit("update:addonlineVisible", false);
ctx.emit("update:edit", false);
// ctx.emit("changeData", false);
localStorage.setItem("stageId", props.chooseStageId);
localStorage.setItem("chapterId", props.isactive);
};
const afterVisibleChange = (bool) => {
console.log("state", bool);
@@ -199,7 +205,8 @@ export default {
width: "100px",
align: "left",
className: "classify",
}, {
},
{
title: "内容分类",
dataIndex: "content",
key: "content",
@@ -235,19 +242,25 @@ export default {
onSelectAll: (selected) => {
console.log(selected);
if (selected == true) {
state.RowsNum = state.tableDataTotal
state.RowsNum = state.tableDataTotal;
} else {
state.RowsNum = 0
state.RowsNum = 0;
}
},
onSelect: (selectedRows, selected, selectedRowKeys) => {
console.log(
"selectedRowKeys", selectedRowKeys, "selectedRows", selectedRows, "selected", selected);
"selectedRowKeys",
selectedRowKeys,
"selectedRows",
selectedRows,
"selected",
selected
);
console.log(selectedRows.assessmentId);
if (selected == true) {
state.RowsNum++
state.RowsNum++;
} else {
state.RowsNum--
state.RowsNum--;
}
state.assessmentId = selectedRows.assessmentId;
state.assessmentName = selectedRows.name;
@@ -295,49 +308,49 @@ export default {
// state.createLoading = false;
});
};
const updateTask =()=>{
if(props.isLevel ==1){
const updateTask = () => {
if (props.isLevel == 1) {
RouterEditTask({
chapterId: props.isactive,
courseId: state.assessmentId,
name: state.assessmentName,
routerId: props.routerId,
routerTaskId: props.routerTaskId || 0,
type: 1,
})
.then((res) => {
console.log(res, 11111);
message.success(`${props.edit ? '编辑' : '新增'}关卡任务成功`)
ctx.emit("changeData", false);
closeDrawer();
state.addLoading = false;
})
.catch((err) => {
console.log(err, 1111);
});
}else if(props.isLevel ==2){
console.log("=========projectTaskId",props.projectTaskId);
chapterId: props.isactive,
courseId: state.assessmentId,
name: state.assessmentName,
routerId: props.routerId,
routerTaskId: props.routerTaskId || 0,
type: 1,
})
.then((res) => {
console.log(res, 11111);
message.success(`${props.edit ? "编辑" : "新增"}关卡任务成功`);
ctx.emit("changeData", false);
closeDrawer();
state.addLoading = false;
})
.catch((err) => {
console.log(err, 1111);
});
} else if (props.isLevel == 2) {
console.log("=========projectTaskId", props.projectTaskId);
apiTask
.addTask({
courseId: state.assessmentId,
name: state.assessmentName,
projectId: props.projectId,
projectTaskId: props.projectTaskId || 0,
stageId: props.chooseStageId,
type: 1,
})
.then((res) => {
console.log("调用项目添加接口后111", res.data, 11111);
ctx.emit("changeData", false);
closeDrawer();
})
.catch((err) => {
console.log(err, 111111);
});
}else if(props.isLevel ==3){
.addTask({
courseId: state.assessmentId,
name: state.assessmentName,
projectId: props.projectId,
projectTaskId: props.projectTaskId || 0,
stageId: props.chooseStageId,
type: 1,
})
.then((res) => {
console.log("调用项目添加接口后111", res.data, 11111);
ctx.emit("changeData", false);
closeDrawer();
})
.catch((err) => {
console.log(err, 111111);
});
} else if (props.isLevel == 3) {
console.log("");
}
}
};
//重置在线信息
const resetOnline = () => {
state.inputV1 = "";
@@ -367,201 +380,201 @@ export default {
background-color: #fafafa !important;
}
.addonlineDrawer {
.drawerMain {
.header {
height: 73px;
border-bottom: 1px solid #e8e8e8;
.drawerMain {
.header {
height: 73px;
border-bottom: 1px solid #e8e8e8;
display: flex;
justify-content: space-between;
align-items: center;
flex-shrink: 0;
.headerTitle {
font-size: 18px;
font-weight: 600;
color: #333333;
line-height: 25px;
margin-left: 24px;
}
}
.contentMain {
padding-right: 12px;
.main_items {
display: flex;
justify-content: space-between;
margin-top: 32px;
margin-bottom: 12px;
flex-wrap: wrap;
.mi_ipts {
display: flex;
margin-bottom: 20px;
.mii_ipt {
display: flex;
align-items: center;
margin-right: 24px;
.ipt_name {
white-space: nowrap;
}
}
}
.mi_btns {
display: flex;
margin-left: 38px;
margin-bottom: 20px;
cursor: pointer;
.btn {
padding: 0px 26px 0px 26px;
height: 38px;
border-radius: 8px;
border: 1px solid rgba(64, 158, 255, 1);
display: flex;
align-items: center;
justify-content: center;
margin-left: 14px;
flex-shrink: 0;
.search {
background-size: 100%;
}
.btnText {
font-size: 14px;
font-weight: 400;
line-height: 36px;
margin-left: 5px;
}
}
.btn1 {
background: rgb(64, 158, 255);
.search {
width: 15px;
height: 17px;
background-image: url("@/assets/images/coursewareManage/search0.png");
}
.btnText {
color: rgb(255, 255, 255);
}
}
.btn2 {
background: rgb(255, 255, 255);
.search {
width: 15px;
height: 17px;
background-image: url("@/assets/images/coursewareManage/reset1.png");
}
.btnText {
color: rgb(64, 158, 255);
}
}
.btn1:hover {
background: rgb(255, 255, 255);
.search {
background-image: url("@/assets/images/courseManage/search1.png");
}
.btnText {
color: #388be1;
}
}
.btn2:hover {
background: rgba(64, 158, 255, 1);
.search {
background-image: url("@/assets/images/courseManage/reset0.png");
}
.btnText {
color: #ffffff;
}
}
}
}
.main_notice {
display: flex;
justify-content: space-between;
align-items: center;
flex-shrink: 0;
.headerTitle {
font-size: 18px;
font-weight: 600;
color: #333333;
line-height: 25px;
margin-left: 24px;
}
}
.contentMain {
padding-right: 12px;
.main_items {
margin-bottom: 32px;
height: 40px;
background-color: #e9f6fe;
.mntc_left {
display: flex;
justify-content: space-between;
margin-top: 32px;
margin-bottom: 12px;
flex-wrap: wrap;
.mi_ipts {
display: flex;
margin-bottom: 20px;
.mii_ipt {
display: flex;
align-items: center;
margin-right: 24px;
.ipt_name {
white-space: nowrap;
}
}
}
.mi_btns {
display: flex;
margin-left: 38px;
margin-bottom: 20px;
cursor: pointer;
.btn {
padding: 0px 26px 0px 26px;
height: 38px;
border-radius: 8px;
border: 1px solid rgba(64, 158, 255, 1);
display: flex;
align-items: center;
justify-content: center;
margin-left: 14px;
flex-shrink: 0;
.search {
background-size: 100%;
}
.btnText {
font-size: 14px;
font-weight: 400;
line-height: 36px;
margin-left: 5px;
}
}
.btn1 {
background: rgb(64, 158, 255);
.search {
width: 15px;
height: 17px;
background-image: url("@/assets/images/coursewareManage/search0.png");
}
.btnText {
color: rgb(255, 255, 255);
}
}
.btn2 {
background: rgb(255, 255, 255);
.search {
width: 15px;
height: 17px;
background-image: url("@/assets/images/coursewareManage/reset1.png");
}
.btnText {
color: rgb(64, 158, 255);
}
}
.btn1:hover {
background: rgb(255, 255, 255);
.search {
background-image: url("@/assets/images/courseManage/search1.png");
}
.btnText {
color: #388be1;
}
}
.btn2:hover {
background: rgba(64, 158, 255, 1);
.search {
background-image: url("@/assets/images/courseManage/reset0.png");
}
.btnText {
color: #ffffff;
}
}
}
}
.main_notice {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 32px;
height: 40px;
background-color: #e9f6fe;
.mntc_left {
display: flex;
align-items: center;
.notice_icon {
width: 14px;
height: 14px;
margin-right: 9px;
margin-left: 9px;
background-image: url(@/assets/images/coursewareManage/gan.png);
background-size: 100% 100%;
}
}
.mntc_right {
cursor: pointer;
.notice_icon {
width: 14px;
height: 14px;
margin-right: 9px;
margin-left: 9px;
background-image: url(@/assets/images/coursewareManage/gan.png);
background-size: 100% 100%;
}
}
.main_table {
position: relative;
padding-bottom: 80px;
.classify {
margin-left: 10px !important;
padding-left: 9px !important;
}
.ant-checkbox-wrapper {
align-items: center;
margin-top: -2px;
}
.ant-table-selection-column {
padding: 0px !important;
padding-left: 60px !important;
}
.ant-table-thead > tr > th {
background-color: rgba(239, 244, 252, 1);
}
th.h {
background-color: #eff4fc !important;
}
.ant-table-tbody
> tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)
> td {
background: #f6f9fd;
}
.pa {
left: 0;
width: 100%;
// height: 20px;
// background-color: red;
display: flex;
justify-content: center;
position: absolute;
bottom: 20px;
}
}
.mntc_right {
cursor: pointer;
}
}
.main_btns {
height: 72px;
width: 100%;
bottom: 0;
left: 0;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.16);
.btn1 {
width: 100px;
height: 40px;
border: 1px solid #4ea6ff;
border-radius: 8px;
color: #4ea6ff;
background-color: #fff;
cursor: pointer;
.main_table {
position: relative;
padding-bottom: 80px;
.classify {
margin-left: 10px !important;
padding-left: 9px !important;
}
.btn2 {
cursor: pointer;
width: 100px;
height: 40px;
background: #4ea6ff;
border-radius: 8px;
border: 0;
margin-left: 15px;
color: #fff;
.ant-checkbox-wrapper {
align-items: center;
margin-top: -2px;
}
.ant-table-selection-column {
padding: 0px !important;
padding-left: 60px !important;
}
.ant-table-thead > tr > th {
background-color: rgba(239, 244, 252, 1);
}
th.h {
background-color: #eff4fc !important;
}
.ant-table-tbody
> tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)
> td {
background: #f6f9fd;
}
.pa {
left: 0;
width: 100%;
// height: 20px;
// background-color: red;
display: flex;
justify-content: center;
position: absolute;
bottom: 20px;
}
}
}
.main_btns {
height: 72px;
width: 100%;
bottom: 0;
left: 0;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.16);
.btn1 {
width: 100px;
height: 40px;
border: 1px solid #4ea6ff;
border-radius: 8px;
color: #4ea6ff;
background-color: #fff;
cursor: pointer;
}
.btn2 {
cursor: pointer;
width: 100px;
height: 40px;
background: #4ea6ff;
border-radius: 8px;
border: 0;
margin-left: 15px;
color: #fff;
}
}
}
}
</style>

View File

@@ -8,68 +8,76 @@
>
<div class="drawerMain">
<div class="header">
<div class="headerTitle">{{edit ? '编辑' : '添加' }}外链</div>
<div class="headerTitle">{{ edit ? "编辑" : "添加" }}外链</div>
<img
style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png"
@click="closeDrawer"
/>
</div>
<a-form ref="formRef" name="custom-validation" :model="state" :rules="rules" v-bind="layout"
@finish="handleFinish" @validate="handleValidate" @finishFailed="handleFinishFailed">
<div class="contentMain">
<div class="main_left">
<div class="main_item">
<div class="signbox">
<div class="sign">
<img
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
<a-form
ref="formRef"
name="custom-validation"
:model="state"
:rules="rules"
v-bind="layout"
@finish="handleFinish"
@validate="handleValidate"
@finishFailed="handleFinishFailed"
>
<div class="contentMain">
<div class="main_left">
<div class="main_item">
<div class="signbox">
<div class="sign">
<img
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div>
<span style="margin-right: 3px">外链名称</span>
</div>
<div class="btnbox">
<a-input
v-model:value="inputV1"
style="width: 424px; height: 32px"
placeholder="请输入外链名称"
maxlength="20"
/>
</div>
<span style="margin-right: 3px">外链名称</span>
</div>
<div class="btnbox">
<a-input
v-model:value="inputV1"
style="width: 424px; height: 32px"
placeholder="请输入外链名称"
maxlength="20"
/>
</div>
</div>
<div class="main_item">
<div class="signbox">
<div class="sign">
<img
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
<div class="main_item">
<div class="signbox">
<div class="sign">
<img
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div>
<span style="margin-right: 3px">链接</span>
</div>
<div class="btnbox">
<a-input
v-model:value="inputV2"
style="width: 424px; height: 32px"
placeholder="请输入链接"
/>
</div>
<span style="margin-right: 3px">链接</span>
</div>
<div class="btnbox">
<a-input
v-model:value="inputV2"
style="width: 424px; height: 32px"
placeholder="请输入链接"
/>
</div>
</div>
<div class="main_item2">
<div class="signbox">
<span style="margin-right: 3px">外链说明</span>
</div>
<div class="textarea">
<a-textarea
v-model:value="textV1"
placeholder="请输入外链说明"
allow-clear
/>
<div class="main_item2">
<div class="signbox">
<span style="margin-right: 3px">外链说明</span>
</div>
<div class="textarea">
<a-textarea
v-model:value="textV1"
placeholder="请输入外链说明"
allow-clear
/>
</div>
</div>
</div>
</div>
</div>
</a-form>
<div class="main_btns">
<button class="btn1" @click="closeDrawer">取消</button>
@@ -114,7 +122,8 @@ export default {
type: Number,
default: null,
},
edit: { // 是否为编辑
edit: {
// 是否为编辑
type: Boolean,
default: null,
},
@@ -130,12 +139,14 @@ export default {
type: Number,
default: 0,
},
isLevel: { // 是否是关卡页面触发
isLevel: {
// 是否是关卡页面触发
type: Number,
default: null,
},
projectTaskId: { // 要编辑的projectId
projectTaskId: {
// 要编辑的projectId
type: Number,
default: null,
},
@@ -146,8 +157,7 @@ export default {
isactive: {
type: Number,
default: null,
}
},
},
setup(props, ctx) {
const state = reactive({
@@ -164,115 +174,120 @@ export default {
state.inputV2 = "";
state.inputV1 = "";
state.textV1 = "";
// ctx.emit("changeData", false);
localStorage.setItem("stageId", props.chooseStageId);
localStorage.setItem("chapterId", props.isactive);
};
const afterVisibleChange = (bool) => {
console.log("state", bool);
if(props.edit){
if (props.edit) {
queryRef();
}
};
const handleFinish = values => {
const handleFinish = (values) => {
console.log(values);
//updateRef(props.EditRefId)
};
const handleFinishFailed = errors => {
const handleFinishFailed = (errors) => {
console.log(errors);
// message.error("handleFinishFailed");
};
const updateTask =(res)=>{
if(props.isLevel ==1){
const updateTask = (res) => {
if (props.isLevel == 1) {
RouterEditTask({
chapterId: props.isactive,
courseId: res.data.data.linkId,
name: res.data.data.linkName,
routerId: props.routerId,
routerTaskId: props.routerTaskId || 0,
type: 7,
})
.then((res) => {
console.log(res, 11111);
message.success(`${props.edit ? '编辑' : '新增'}关卡任务成功`)
ctx.emit("changeData", false);
closeDrawer();
state.addLoading = false;
})
.catch((err) => {
console.log(err, 1111);
});
}else if(props.isLevel ==2){
chapterId: props.isactive,
courseId: res.data.data.linkId,
name: res.data.data.linkName,
routerId: props.routerId,
routerTaskId: props.routerTaskId || 0,
type: 7,
})
.then((res) => {
console.log(res, 11111);
message.success(`${props.edit ? "编辑" : "新增"}关卡任务成功`);
ctx.emit("changeData", false);
closeDrawer();
state.addLoading = false;
})
.catch((err) => {
console.log(err, 1111);
});
} else if (props.isLevel == 2) {
apiTask
.addTask({
courseId:res.data.data.linkId,
name: res.data.data.linkName,
projectId: props.projectId,
projectTaskId: props.projectTaskId || 0,
stageId: props.chooseStageId,
type: 7,
})
.then((res) => {
console.log("调用项目添加接口后111", res.data, 11111);
ctx.emit("changeData", false);
closeDrawer();
})
.catch((err) => {
console.log(err, 111111);
});
}else if(props.isLevel ==3){
.addTask({
courseId: res.data.data.linkId,
name: res.data.data.linkName,
projectId: props.projectId,
projectTaskId: props.projectTaskId || 0,
stageId: props.chooseStageId,
type: 7,
})
.then((res) => {
console.log("调用项目添加接口后111", res.data, 11111);
ctx.emit("changeData", false);
closeDrawer();
})
.catch((err) => {
console.log(err, 111111);
});
} else if (props.isLevel == 3) {
console.log("");
}
}
};
//创建外链
const updateRef = () => {
if (!state.inputV1) return message.warning("请输入外链名称");
if (!state.inputV2){
if (!state.inputV2) {
return message.warning("请输入链接");
}else{
const reg = /(https?|ftp|file):\/\/[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]/;
if ((!reg.test(state.inputV2)) && state.inputV2 != '') {
} else {
const reg =
/(https?|ftp|file):\/\/[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]/;
if (!reg.test(state.inputV2) && state.inputV2 != "") {
return message.warning("请输入合法的链接地址");
}
}
let obj = {
linkAddress: state.inputV2,
linkDescription: state.textV1,
linkId:props.edit?props.EditRefId:0,
linkId: props.edit ? props.EditRefId : 0,
linkName: state.inputV1,
};
console.log("编辑的id========",props.EditRefId)
if(props.edit){
console.log("编辑的id========", props.EditRefId);
if (props.edit) {
api
.updateLinks(obj)
.then((res) => {
message.success("编辑成功");
updateTask(res);
}).catch((err) => console.log(err));
}else{
.updateLinks(obj)
.then((res) => {
message.success("编辑成功");
updateTask(res);
})
.catch((err) => console.log(err));
} else {
api
.createExternalChain(obj)
.then((res) => {
message.success("提交成功");
updateTask(res);
}).catch((err) => console.log(err));
.createExternalChain(obj)
.then((res) => {
message.success("提交成功");
updateTask(res);
})
.catch((err) => console.log(err));
}
};
// 查询任务
// 查询任务
const queryRef = () => {
let d =props.EditRefId ;
let d = props.EditRefId;
api
.getLink({linkId:d}).then((res) => {
// console.log(dayjs(res.data.data.submitStartTime).format("YYYY-MM-DD"));
state.inputV1 = res.data.data.linkName;
state.inputV2 =res.data.data.linkAddress;
state.textV1 =res.data.data.linkDescription;
console.log("查询成功=====inputv1",state.inputV1);
}).catch(() => {
message.error(`查询失败`)
})
.getLink({ linkId: d })
.then((res) => {
// console.log(dayjs(res.data.data.submitStartTime).format("YYYY-MM-DD"));
state.inputV1 = res.data.data.linkName;
state.inputV2 = res.data.data.linkAddress;
state.textV1 = res.data.data.linkDescription;
console.log("查询成功=====inputv1", state.inputV1);
})
.catch(() => {
message.error(`查询失败`);
});
};
return {
...toRefs(state),
@@ -314,7 +329,7 @@ export default {
padding-right: 30px;
flex: 1;
border-right: 1px solid #e8e8e8;
margin-top:32px;
margin-top: 32px;
.main_item {
display: flex;
align-items: center;

File diff suppressed because it is too large Load Diff

View File

@@ -40,7 +40,7 @@
/>
<div class="votename">创建投票</div>
</div>
<div class="votebtn">创建投票</div>
<div class="votebtn" @click="showVoteDrawer">创建投票</div>
</div>
<!-- 创建投票 -->
<!-- 起止时间 -->
@@ -135,6 +135,17 @@
</div>
</div>
</a-drawer>
<a-drawer
v-model:visible="voteDrawerShow"
class="custom-class"
title="创建投票"
placement="right"
@after-visible-change="afterVoteVisibleChange"
>
<p>Some contents...</p>
<p>Some contents...</p>
<p>Some contents...</p>
</a-drawer>
</template>
<script>
import { reactive, toRefs } from "vue";
@@ -147,9 +158,14 @@ export default {
},
},
setup(props, ctx) {
const state = reactive({});
const state = reactive({
voteDrawerShow: false,
});
const closeDrawer = () => {
ctx.emit("update:addvoteVisible", false);
ctx.emit("changeData", false);
localStorage.setItem("stageId", props.chooseStageId);
localStorage.setItem("chapterId", props.isactive);
};
const afterVisibleChange = (bool) => {
@@ -160,12 +176,18 @@ export default {
state.visible = true;
};
const showVoteDrawer = () => {
state.voteDrawerShow = true;
};
const afterVoteVisibleChange = () => {};
return {
...toRefs(state),
afterVisibleChange,
showDrawer,
closeDrawer,
// change,
showVoteDrawer,
afterVoteVisibleChange,
};
},
};

View File

@@ -65,7 +65,7 @@
</button>
<div :style="{ display: creVote ? 'block' : 'none' }">
<div class="fileTigan">
<span style="color: #388be1">{{ballotName}}</span>
<span style="color: #388be1">{{ ballotName }}</span>
<div class="delBox" @click="dleVoteStem()"></div>
</div>
</div>
@@ -128,7 +128,7 @@
</a-drawer>
</template>
<script>
import { reactive, toRefs} from "vue";
import { reactive, toRefs } from "vue";
import CreVote from "./CreVote.vue";
import * as api from "../../api/indexVote";
import { message } from "ant-design-vue";
@@ -136,7 +136,6 @@ import { RouterEditTask } from "@/api/indexTask";
import dayjs from "dayjs";
import * as apiTask from "../../api/indexTaskadd";
export default {
name: "AddVote",
components: {
@@ -167,11 +166,13 @@ export default {
type: Number,
default: 0,
},
isLevel: { // 是否是关卡页面触发
isLevel: {
// 是否是关卡页面触发
type: Boolean,
default: null,
},
projectTaskId: { // 要编辑的projectId
projectTaskId: {
// 要编辑的projectId
type: Number,
default: null,
},
@@ -182,9 +183,7 @@ export default {
isactive: {
type: Number,
default: null,
}
},
},
setup(props, ctx) {
const state = reactive({
@@ -192,37 +191,40 @@ export default {
textV1: "",
crevotevisible: false,
time: undefined,
startTime:"",
endTime:"",
startTime: "",
endTime: "",
basevote: "",
ascriptionId: "",
voteStemId: null,
voteId:"",
voteStemName:"",
voteId: "",
voteStemName: "",
ballotName: "",
editStem: false, //编辑状态
editStem: false, //编辑状态
ballotId: 0, //题干id
optionId: "", //删除修改选项id
});
const closeDrawer = () => {
state.inputV1 = "",
state.textV1 = "",
state.time = undefined,
state.basevote = "",
ctx.emit("update:addvoteVisible", false);
(state.inputV1 = ""),
(state.textV1 = ""),
(state.time = undefined),
(state.basevote = ""),
ctx.emit("update:addvoteVisible", false);
ctx.emit("update:edit", false);
ctx.emit("changeData", false);
localStorage.setItem("stageId", props.chooseStageId);
localStorage.setItem("chapterId", props.isactive);
};
const afterVisibleChange = (bool) => {
console.log("state", bool);
queryVoteInfo();
queryVoteInfo();
};
const showDrawerCreVote = () => {
state.crevotevisible = true;
};
const getStemId = (data) => {
state.ballotName = data.ballotName;
state.ballotId =data.ballotId;
}
state.ballotId = data.ballotId;
};
const delBox = () => {
state.creVote = false;
@@ -231,19 +233,18 @@ export default {
//删除题干信息接口
const dleVoteStem = () => {
let objdelstem = {
voteStemId:state.voteStemId
}
api.deleteVoteStem(objdelstem)
.then((res) => {
console.log('删除题干信息成功', res)
message.success('删除题干信息成功')
delBox()
})
}
voteStemId: state.voteStemId,
};
api.deleteVoteStem(objdelstem).then((res) => {
console.log("删除题干信息成功", res);
message.success("删除题干信息成功");
delBox();
});
};
//根据投票id获取投票信息
const queryVoteInfo = ()=>{
/**
const queryVoteInfo = () => {
/**
let obj = {
voteId:props.voteId
}
@@ -261,10 +262,9 @@ export default {
console.log('获取投票信息失败',err);
})
**/
}
const updateToTask =(res)=>{
if(props.isLevel){
};
const updateToTask = (res) => {
if (props.isLevel) {
RouterEditTask({
chapterId: props.isactive,
courseId: res.data.data.voteId,
@@ -275,17 +275,17 @@ export default {
})
.then((res) => {
console.log(res, 11111);
message.success(`${props.edit ? '编辑' : '新增'}关卡任务成功`)
message.success(`${props.edit ? "编辑" : "新增"}关卡任务成功`);
ctx.emit("changeData", false);
state.addLoading = false;
})
.catch((err) => {
console.log(err, 1111);
});
}else{
} else {
apiTask
.addTask({
courseId:res.data.data.voteId,
courseId: res.data.data.voteId,
name: res.data.data.voteName,
projectId: props.projectId,
projectTaskId: props.projectTaskId || 0,
@@ -300,7 +300,7 @@ export default {
console.log(err, 111111);
});
}
}
};
//修改投票信息接口
const updateVoteInfo = () => {
if (!state.inputV1) {
@@ -311,48 +311,47 @@ export default {
if (state.basevote == "") {
state.basevote = 1;
}
if(state.time != undefined){
if (state.time != undefined) {
state.startTime = dayjs(state.time[0]).format("YYYY-MM-DD");
state.endTime = dayjs(state.time[1]).format("YYYY-MM-DD");
}
let obj = {
voteId: props.edit?state.voteId : 0,
voteId: props.edit ? state.voteId : 0,
voteName: state.inputV1,
voteStartTime: state.startTime,
voteEndTime: state.endTime,
ballotId: state.ballotId,
baseVote: state.basevote,
voteExplain: state.textV1,
createUser:0,
updateUser:0,
voteTag:"",
}
if(props.edit){
createUser: 0,
updateUser: 0,
voteTag: "",
};
if (props.edit) {
api
.editVote(obj)
.then((res) => {
updateToTask(res);
closeDrawer();
console.log('修改投票信息成功', res);
})
.catch((err) => {
console.log('修改投票信息失败', err);
})
}else{
.editVote(obj)
.then((res) => {
updateToTask(res);
closeDrawer();
console.log("修改投票信息成功", res);
})
.catch((err) => {
console.log("修改投票信息失败", err);
});
} else {
api
.createVote(obj)
.then((res) => {
updateToTask(res);
closeDrawer();
console.log('创建投票信息成功', res);
})
.catch((err) => {
console.log('创建投票信息失败', err);
})
.createVote(obj)
.then((res) => {
updateToTask(res);
closeDrawer();
console.log("创建投票信息成功", res);
})
.catch((err) => {
console.log("创建投票信息失败", err);
});
}
}
};
return {
...toRefs(state),
showDrawerCreVote,
@@ -363,7 +362,6 @@ export default {
dleVoteStem,
updateVoteInfo,
delBox,
};
},
};

View File

@@ -9,16 +9,16 @@
<div class="groupname" style="width: 42px">姓名</div>
<a-input
class="ant-input"
v-model:value="value"
v-model:value="searchNameValue"
placeholder="请输入姓名"
/>
</div>
<div class="groupright">
<div class="btn1">
<div class="btn1" @click="searchStu">
<img src="../../assets/images/courseManage/search0.png" />
<span class="btn1text">搜索</span>
</div>
<div class="btn2">
<div class="btn2" @click="resetStud">
<img src="../../assets/images/courseManage/reset1.png" />
<span class="btn2text">重置</span>
</div>
@@ -36,6 +36,7 @@
/>
<div class="pa">
<a-pagination
v-if="tableDataTotal > 10"
showSizeChanger="true"
showQuickJumper="true"
hideOnSinglePage="true"
@@ -43,6 +44,7 @@
:current="currentPage"
:total="tableDataTotal"
class="pagination"
@change="changePagination"
/>
</div>
</div>
@@ -277,16 +279,21 @@
>
</a-tabs>
</div>
<stu-score-detail v-model:Svisible="Svisible" />
<stu-score-detail
v-model:Svisible="Svisible"
v-model:studentId="checkStuId"
v-model:projectId="proId"
/>
</template>
<script>
import StuScoreDetail from "../../components/drawers/StuScoreDetail";
import { reactive, toRefs, computed } from "vue";
import { reactive, toRefs, computed, onMounted } from "vue";
import * as api from "../../api/index1";
// import { message } from "ant-design-vue";
// import { scoreRule } from "../../api/indexTaskadd"; //获取项目积分规则
import { setScoreRule } from "../../api/indexTaskadd"; //设置项目积分规则
import { getProjStu } from "../../api/indexProjStu";
export default {
name: "ProjectScore",
components: {
@@ -301,42 +308,15 @@ export default {
setup(props) {
const state = reactive({
tabledataStu: [
{
key: 1,
name: "小李",
bum: "产研部",
gangw: "产品经理",
group: "好好学习",
diploma: "0",
operation: "查看",
},
{
key: 2,
name: "小刘",
bum: "产研部",
gangw: "产品经理",
group: "天天向上",
diploma: "0",
operation: "查看",
},
{
key: 3,
name: "小王",
bum: "产研部",
gangw: "后端",
group: "好好学习",
diploma: "0",
operation: "查看",
},
{
key: 4,
name: "小赵",
bum: "产研部",
gangw: "前端",
group: "天天向上",
diploma: "0",
operation: "查看",
},
// {
// key: 1,
// name: "小李",
// bum: "产研部",
// gangw: "产品经理",
// group: "好好学习",
// diploma: "0",
// operation: "查看",
// },
],
tablecolumnStu: [
@@ -387,6 +367,20 @@ export default {
width: 60,
align: "center",
className: "operation",
customRender: (value) => {
return (
<div
style="color:#387df7;cursor:pointer"
onClick={() => {
state.Svisible = true;
console.log(value.record.key);
state.checkStuId = value.record.key;
}}
>
查看
</div>
);
},
},
],
datascore: [
@@ -450,7 +444,6 @@ export default {
activeKeyScore: "2",
stuName: "请输入姓名",
todayvalue: "1",
tableDataTotal: 30,
stuValue: false,
Svisible: false,
score1: null,
@@ -468,6 +461,12 @@ export default {
seven2: null,
edit: true,
searchRankName: null, //榜单搜索名称
pageSize: 10,
currentPage: 1,
tableDataTotal: null,
searchNameValue: null, //学员获取的姓名
checkStuId: null,
proId: null,
});
const getTableData = () => {
let datas = state.tabledataStu;
@@ -599,6 +598,66 @@ export default {
state.edit = true;
};
const getStu = (obj) => {
state.proId = props.projectId;
let objn = obj || {
deptIds: [],
groupId: "",
groupName: "",
name: "",
pageNo: state.currentPage,
pageSize: 10,
projectId: props.projectId,
topFlag: "",
};
getProjStu(objn).then((res) => {
console.log("dedaole", res.data.data.rows);
let result = res.data.data.rows;
state.tableDataTotal = res.data.data.total;
setStuData(result);
});
};
const setStuData = (tabledata) => {
let data = tabledata;
let array = [];
data.map((item) => {
let obj = {
key: item.studentId,
name: item.name,
bum: item.userInfoBo.deptName,
gangw: item.userInfoBo.jobName,
group: item.groupName,
diploma: "0",
// operation: "查看",
};
array.push(obj);
});
state.tabledataStu = array;
};
const changePagination = (current) => {
state.currentPage = current;
getStu();
};
const searchStu = () => {
let obj = {
deptIds: [],
groupId: "",
groupName: "",
name: state.searchNameValue,
pageNo: state.currentPage,
pageSize: 10,
projectId: props.projectId,
topFlag: "",
};
getStu(obj);
};
const resetStud = () => {
state.searchNameValue = null;
getStu();
};
onMounted(() => {
getStu();
});
return {
...toRefs(state),
typeChange,
@@ -609,6 +668,11 @@ export default {
scoreRank,
editRule,
scoresum,
getStu,
setStuData,
changePagination,
searchStu,
resetStud,
};
},
// computed: {

View File

@@ -63,7 +63,11 @@
:row-class-name="
(_record, index) => (index % 2 === 1 ? 'table-striped' : null)
"
:row-selection="rowSelection"
:row-selection="{
selectedRowKeys: selectedRowKeys,
onChange: onSelectChange,
type: 'radio',
}"
:columns="columns1"
:data-source="classTableData"
:loading="tableDataTotal === -1 ? true : false"
@@ -86,7 +90,7 @@
</div>
<div class="main_btns">
<button class="btn1">取消</button>
<button class="btn2">确定</button>
<button class="btn2" @click="closeDrawer">确定</button>
</div>
</div>
</a-drawer>
@@ -150,22 +154,7 @@ const columns1 = [
align: "center",
},
];
const rowSelection = ref({
checkStrictly: false,
onChange: (selectedRowKeys, selectedRows) => {
console.log(
`selectedRowKeys: ${selectedRowKeys}`,
"selectedRows: ",
selectedRows
);
},
onSelect: (record, selected, selectedRows) => {
console.log(record, selected, selectedRows);
},
onSelectAll: (selected, selectedRows, changeRows) => {
console.log(selected, selectedRows, changeRows);
},
});
export default {
name: "SelFacet",
props: {
@@ -219,9 +208,19 @@ export default {
pageSize: 10,
valueClass: null, //课程编号
valueContent: null, //内容分类
selectedRows: [], //选择的数据
selectedRowKeys: [],
});
const onSelectChange = (selectedRowKeys, selectedRows) => {
console.log("selectedRowKeys changed: ", selectedRowKeys);
state.selectedRowKeys = selectedRowKeys;
state.selectedRows = selectedRows;
console.log(selectedRows);
};
const closeDrawer = () => {
ctx.emit("update:selfacetVisible", false);
ctx.emit("getData", state.selectedRows);
};
const afterVisibleChange = (bool) => {
console.log("state", bool);
@@ -313,13 +312,13 @@ export default {
closeDrawer,
options1,
columns1,
rowSelection,
getClassData,
handleChange,
reset,
getClassList,
search,
changePaginationStu,
onSelectChange,
// change,
};
},

View File

@@ -1,35 +1,34 @@
<template>
<a-drawer
:visible="Svisible"
class="drawerStyle StuScore"
placement="right"
width="70%"
@after-visible-change="afterVisibleChange"
>
<div class="drawerMain">
<div class="header">
<div class="headerTitle">学员获取详情</div>
<img
style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png"
@click="closeDrawer"
/>
</div>
<div class="contentMain">
<a-drawer
:visible="Svisible"
class="drawerStyle StuScore"
placement="right"
width="70%"
@after-visible-change="afterVisibleChange"
>
<div class="drawerMain">
<div class="header">
<div class="headerTitle">学员获取详情</div>
<img
style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png"
@click="closeDrawer"
/>
</div>
<div class="contentMain">
<div class="main">
<div class="tableBox" style="margin-top: 20px; margin-bottom: 100px">
<a-table
style="border: 1px solid #f2f6fe"
:columns="tablecolumns"
:data-source="tabledata"
:loading="tableDataTotal === -1 ? true : false"
@expand="expandTable"
:pagination="false"
:columns="tablecolumns"
:data-source="tabledata"
:loading="tableDataTotal === -1 ? true : false"
@expand="expandTable"
:pagination="false"
/>
<div class="pa">
<a-pagination
v-if="tableDataTotal > 10"
showSizeChanger="true"
showQuickJumper="true"
hideOnSinglePage="true"
@@ -37,291 +36,258 @@
:current="currentPage"
:total="tableDataTotal"
class="pagination"
@change="changePagination"
/>
</div>
</div>
</div>
</div>
<div class="btnn">
<button class="btn1" @click="closeDrawer">取消</button>
<button class="btn2" @click="closeDrawer">确定</button>
</div>
<div class="btnn">
<button class="btn1" @click="closeDrawer">取消</button>
<button class="btn2" @click="closeDrawer">确定</button>
</div>
</a-drawer>
</div>
</a-drawer>
</template>
<script>
import { toRefs, reactive } from "vue";
export default {
name: "StuScoreDetail",
props: {
Svisible: {
type: Boolean,
default: false,
},
import { toRefs, reactive } from "vue";
import { studentScoreList } from "../../api/indexProjStu";
import { toDate } from "@/api/method";
export default {
name: "StuScoreDetail",
props: {
Svisible: {
type: Boolean,
default: false,
},
studentId: {
type: Number,
default: null,
},
projectId: {
type: Number,
default: null,
},
},
setup(props, ctx) {
const state = reactive({
name: null,
setup(props, ctx) {
const state = reactive({
name: null,
pageSize: 10,
currentPage: 1,
tableDataTotal: null,
// selectedRowKeys: [],
tabledata: [
// {
// key: 1,
// time: "2019-12-12 12:12",
// score: "12",
// type: "完成任务",
// from: "【在线】如何成为产品经理",
// },
],
tablecolumns: [
{
title: "获取时间",
dataIndex: "time",
key: "time",
width: 40,
align: "left",
className: "h head",
},
{
title: "积分",
dataIndex: "score",
key: "score",
width: 60,
align: "center",
className: "h",
},
{
title: "类型",
dataIndex: "type",
key: "type",
width: 60,
align: "center",
className: "h",
},
{
title: "来源",
dataIndex: "from",
key: "from",
width: 60,
align: "center",
className: "h",
},
],
});
const closeDrawer = () => {
ctx.emit("update:Svisible", false);
};
const getData = () => {
let obj = {
pageNo: state.currentPage,
pageSize: 10,
currentPage: 1,
tableDataTotal: 100,
selectedRowKeys: [],
tabledata: [
{
key: 1,
time: "2019-12-12 12:12",
score: "12",
type: "完成任务",
from: "【在线】如何成为产品经理",
},
{
key: 1,
time: "2019-12-12 12:12",
score: "12",
type: "完成任务",
from: "【在线】如何成为产品经理",
},
{
key: 1,
time: "2019-12-12 12:12",
score: "12",
type: "完成任务",
from: "【在线】如何成为产品经理",
},
{
key: 1,
time: "2019-12-12 12:12",
score: "12",
type: "完成任务",
from: "【在线】如何成为产品经理",
},
{
key: 1,
time: "2019-12-12 12:12",
score: "12",
type: "完成任务",
from: "【在线】如何成为产品经理",
},
{
key: 1,
time: "2019-12-12 12:12",
score: "12",
type: "完成任务",
from: "【在线】如何成为产品经理",
},
{
key: 1,
time: "2019-12-12 12:12",
score: "12",
type: "完成任务",
from: "【在线】如何成为产品经理",
},
{
key: 1,
time: "2019-12-12 12:12",
score: "12",
type: "完成任务",
from: "【在线】如何成为产品经理",
},
{
key: 1,
time: "2019-12-12 12:12",
score: "12",
type: "完成任务",
from: "【在线】如何成为产品经理",
},
{
key: 1,
time: "2019-12-12 12:12",
score: "12",
type: "完成任务",
from: "【在线】如何成为产品经理",
},
{
key: 1,
time: "2019-12-12 12:12",
score: "12",
type: "完成任务",
from: "【在线】如何成为产品经理",
},
],
tablecolumns: [
{
title: "获取时间",
dataIndex: "time",
key: "time",
width: 40,
align: "left",
className: "h head",
},
{
title: "积分",
dataIndex: "score",
key: "score",
width: 60,
align: "center",
className: "h",
},
{
title: "类型",
dataIndex: "type",
key: "type",
width: 60,
align: "center",
className: "h",
},
{
title: "来源",
dataIndex: "from",
key: "from",
width: 60,
align: "center",
className: "h",
},
],
projectId: props.projectId,
studentId: props.studentId,
};
studentScoreList(obj).then((res) => {
console.log("dede", res.data.data);
let result = res.data.data;
state.tableDataTotal = result.pageSize;
if (result.pageSize > 0) {
setTable(result.rows);
}
});
const closeDrawer = () => {
ctx.emit("update:Svisible", false);
};
};
const afterVisibleChange = () => {
getData();
};
const setTable = (tabledata) => {
let data = tabledata;
let array = [];
data.map((item) => {
let obj = {
time: toDate(item.createTime / 1000, "Y-M-D h-m"),
score: item.score,
type: "完成任务",
from: item.source,
};
array.push(obj);
});
state.tabledata = array;
};
const changePagination = (current) => {
state.currentPage = current;
getData();
};
return {
...toRefs(state),
closeDrawer,
};
},
};
return {
...toRefs(state),
closeDrawer,
afterVisibleChange,
getData,
setTable,
changePagination,
};
},
};
</script>
<style lang="scss" >
.StuScore{
.drawerMain {
min-width: 600px;
margin: 0px 32px 0px 32px;
.StuScore {
.drawerMain {
min-width: 600px;
margin: 0px 32px 0px 32px;
display: flex;
flex-direction: column;
.header {
height: 73px;
border-bottom: 1px solid #e8e8e8;
display: flex;
flex-direction: column;
.header {
height: 73px;
border-bottom: 1px solid #e8e8e8;
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
flex-shrink: 0;
.headerTitle {
font-size: 18px;
font-weight: 600;
color: #333333;
line-height: 25px;
// margin-left: 24px;
}
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
flex-shrink: 0;
.headerTitle {
font-size: 18px;
font-weight: 600;
color: #333333;
line-height: 25px;
// margin-left: 24px;
}
}
.main {
width: 100%;
height: 100%;
.endtime {
font-size: 16px;
font-weight: 500;
color: #333333;
}
.tableBox {
padding-bottom: 100px;
.ant-table-selection-column {
padding: 0px !important;
// padding-left: 45px !important;
}
.ant-table-thead > tr > th {
background-color: rgba(239, 244, 252, 1) !important;
color: rgba(0, 0, 0, 0.8500);
}
.ant-table-cell {
color: rgba(0, 0, 0, 0.6500);
}
.ant-table-selection-column {
padding: 0 !important;
}
th.h {
background-color: #eff4fc !important;
}
.ant-table-tbody
> tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)
> td {
background: #f6f9fd;
}
.ant-table-tbody > tr > td {
border-bottom: 1px solid rgba(240, 244, 254, 1);
padding: 16px 16px;
.operation {
color: rgba(56, 125, 247, 1);
cursor: pointer;
}
}
.pa {
margin-top: 20px;
width: 100%;
flex:1;
display: flex;
justify-content: center;
}
}
.main {
width: 100%;
height: 100%;
.endtime {
font-size: 16px;
font-weight: 500;
color: #333333;
}
.btnn {
height: 72px;
width: 100%;
position: absolute;
bottom: 0;
left: 0;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.16);
background-color: #ffffff;
.btn1 {
width: 100px;
height: 40px;
border: 1px solid #4ea6ff;
border-radius: 8px;
color: #4ea6ff;
background-color: #fff;
cursor: pointer;
.tableBox {
padding-bottom: 100px;
.ant-table-selection-column {
padding: 0px !important;
// padding-left: 45px !important;
}
.btn2 {
cursor: pointer;
width: 100px;
height: 40px;
background: #4ea6ff;
border-radius: 8px;
border: 0;
margin-left: 15px;
color: #fff;
.ant-table-thead > tr > th {
background-color: rgba(239, 244, 252, 1) !important;
color: rgba(0, 0, 0, 0.85);
}
.ant-table-cell {
color: rgba(0, 0, 0, 0.65);
}
.ant-table-selection-column {
padding: 0 !important;
}
th.h {
background-color: #eff4fc !important;
}
.ant-table-tbody
> tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)
> td {
background: #f6f9fd;
}
.ant-table-tbody > tr > td {
border-bottom: 1px solid rgba(240, 244, 254, 1);
padding: 16px 16px;
.operation {
color: rgba(56, 125, 247, 1);
cursor: pointer;
}
}
.pa {
margin-top: 20px;
width: 100%;
flex: 1;
display: flex;
justify-content: center;
}
}
}
.btnn {
height: 72px;
width: 100%;
position: absolute;
bottom: 0;
left: 0;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.16);
background-color: #ffffff;
.btn1 {
width: 100px;
height: 40px;
border: 1px solid #4ea6ff;
border-radius: 8px;
color: #4ea6ff;
background-color: #fff;
cursor: pointer;
}
.btn2 {
cursor: pointer;
width: 100px;
height: 40px;
background: #4ea6ff;
border-radius: 8px;
border: 0;
margin-left: 15px;
color: #fff;
}
}
}
}
</style>

View File

@@ -79,7 +79,7 @@
</div>
<!-- 创建投票侧弹窗 -->
<div>
<cre-vote
<create-vote
v-model:crevoteVisible="crevotevisible"
@getData="getStemId"
v-model:ballotId="ballotId"
@@ -136,7 +136,7 @@
</template>
<script>
import { reactive, toRefs} from "vue";
import CreVote from "./CreateVote.vue";
import CreateVote from "./CreateVote.vue";
import * as api from "../../api/indexVote";
import { message } from "ant-design-vue";
import { RouterEditTask } from "@/api/indexTask";
@@ -147,7 +147,7 @@ import * as apiTask from "../../api/indexTaskadd";
export default {
name: "AddVote",
components: {
CreVote,
CreateVote,
},
props: {
addvoteVisible: {

View File

@@ -1,209 +1,168 @@
<!-- 评估管理-创建评估页面 -->
<template>
<a-drawer
:visible="createVoteVisible"
class="drawerStyle createvoteDrawer"
width="80%"
placement="right"
@after-visible-change="afterVisibleChange"
>
<div class="researchadd">
<div class="header">
<div class="headerTitle">创建投票</div>
<img
style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png"
@click="closeDrawer"
/>
</div>
<div class="main_left">
<div class="main_item">
<a-drawer :visible="createVoteVisible" class="drawerStyle createvoteDrawer" width="100%" placement="right"
@after-visible-change="afterVisibleChange">
<div class="researchadd">
<div class="header">
<div class="headerTitle">创建投票</div>
<img style="width: 29px; height: 29px; cursor: pointer" src="../../assets/images/basicinfo/close.png"
@click="closeDrawer" />
</div>
<div class="main_left">
<div class="main_item">
<div class="signbox">
<div class="sign">
<img
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
<img src="@/assets/images/coursewareManage/asterisk.png" alt="" />
</div>
<span style="margin-right: 3px">投票名称</span>
</div>
<div class="btnbox">
<a-input
v-model:value="voteName"
style="width: 424px; height: 32px"
placeholder="请输入任务名称"
maxlength="20"
/>
<a-input v-model:value="voteName" style="width: 424px; height: 32px" placeholder="请输入任务名称" maxlength="20" />
</div>
</div>
<div class="main_item">
<div class="signbox">
<div class="sign">
<img
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div>
<span>创建题干</span>
<div class="main_item">
<div class="signbox">
<div class="sign">
<img src="@/assets/images/coursewareManage/asterisk.png" alt="" />
</div>
<span>创建题干</span>
</div>
<div class="btnbox">
<button class="xkbtn" @click="handleTypes">
添加题干
</button>
</div>
</div> <!-- 创建投票侧弹窗 -->
</div>
<div class="btnbox">
<button
class="xkbtn"
@click="handleTypes"
>
创建题干
</button>
<div v-for="(item, index) in allFormsData" :key="index">
<VoteQuestion :item="item" :ballotId="ballotId" @del="handleDel" />
</div>
</div> <!-- 创建投票侧弹窗 -->
</div>
<div v-for="(item, index) in allFormsData" :key="index">
<VoteQuestion
:item="item"
:ballotId="ballotId"
@del="handleDel"
/>
</div>
<div class="footer">
<div class="btn">
<a-button
type="primary"
style="width: 100px;height: 40px;border-radius: 8px; background-color: #409eff;"
@click="handleSave"
>
保存
</a-button>
<a-button
type="primary"
ghost
style="width: 100px;height: 40px;margin-left: 14px;border-radius: 8px;"
@click="handleAllCancel"
>
取消
</a-button>
<div class="footer">
<div class="btn">
<a-button type="primary" style="width: 100px;height: 40px;border-radius: 8px; background-color: #409eff;"
@click="handleSave">
保存
</a-button>
<a-button type="primary" ghost style="width: 100px;height: 40px;margin-left: 14px;border-radius: 8px;"
@click="handleAllCancel">
取消
</a-button>
</div>
</div>
</div>
</div>
</div>
</a-drawer>
</a-drawer>
</template>
<script>
import { reactive,toRefs} from "vue";
import { reactive, toRefs } from "vue";
// import { message } from "ant-design-vue";
// import { createResearch } from "../../api/indexResearch";
import VoteQuestion from "./VoteQuestion.vue";
import {
// sortBy,
traverseArr,
// filterCommon,
// deepCloneFilterString,
// sortBy,
traverseArr,
// filterCommon,
// deepCloneFilterString,
} from "../../utils/utils";
//import store from "@/store";
import {
//createOptionMessage,
queryStemByStemId
}from "@/api/indexVote";
import {
} from "@/api/indexResearch";
import * as api from "@/api/indexVote";
import {} from "@/api/indexResearch";
//import { message } from "ant-design-vue";
export default {
name: "CreateVote",
components: {
VoteQuestion,
name: "CreateVote",
components: {
VoteQuestion,
},
props: {
createVoteVisible: {
type: Boolean,
default: false,
},
ballotId: {
type: Number,
default: null,
},
editChild: {
type: Boolean,
default: false,
props: {
createVoteVisible: {
type: Boolean,
default: false,
},
ballotId: {
type: Number,
default: null,
},
editChild: {
type: Boolean,
default: false,
},
},
setup(props, ctx) {
const state = reactive({
ballotId: "",
ballotName: "",
allFormsData: [],
},
setup(props,ctx) {
const state = reactive({
ballotId: "",
ballotName: "",
allFormsData: [],
});
const afterVisibleChange = (bool) => {
console.log("state======进来creates", bool);
handleTypes();
};
const closeDrawer = () => {
ctx.emit("update:createVoteVisible", false);
});
const afterVisibleChange = (bool) => {
console.log("state======进来creates", bool);
handleTypes();
};
const closeDrawer = () => {
ctx.emit("update:createVoteVisible", false);
console.log("======关闭");
}
// 详情
const getInfoDate = async () => {
if (props.editChild) {
//stemId 多余字段
let res = await queryStemByStemId({stemId:0,
ballotId: state.ballotId,
}).then((res) => {
if (res.data.code === 200) {
return res.data.data;
}
});
state.ballotName = res[0].ballotId;
let renderArr = [
...res,
];
// sortBy(renderArr, "orderNumber"); //序号
state.allFormsData = parseData(renderArr); //类型
// console.log("state.allFormsData");
// console.log(state.allFormsData);
console.log("======关闭");
}
};
getInfoDate();
// 详情
const getInfoDate = async () => {
if (props.editChild) {
//stemId 多余字段
let res = await api.queryStemByStemId({
stemId: 0,
ballotId: state.ballotId,
}).then((res) => {
if (res.data.code === 200) {
return res.data.data;
}
});
state.ballotName = res[0].ballotId;
let renderArr = [
...res,
];
// sortBy(renderArr, "orderNumber"); //序号
state.allFormsData = parseData(renderArr); //类型
// console.log("state.allFormsData");
// console.log(state.allFormsData);
}
};
getInfoDate();
// 转换成前端格式
const parseData = (arr) => {
const resultArr = [];
arr.forEach((item) => {
let obj = {};
let restList = traverseArr(item.optionDetailList, {
inputVal: "singleOptionName",
imgVal: "singleOptionPictureAddress",
optionId: "singleOptionId",
}).map((itm, idx) => {
// 转换成前端格式
const parseData = (arr) => {
const resultArr = [];
arr.forEach((item) => {
let obj = {};
let restList = traverseArr(item.optionDetailList, {
inputVal: "singleOptionName",
imgVal: "singleOptionPictureAddress",
optionId: "singleOptionId",
}).map((itm, idx) => {
itm.id = idx + 1;
return itm;
});
obj = {
voteStemName: item.singleStemName,
singleList: restList,
};
resultArr.push(obj);
});
resultArr.map((itm, idx) => {
itm.id = idx + 1;
return itm;
});
obj = {
voteStemName: item.singleStemName,
singleList: restList,
};
resultArr.push(obj);
});
resultArr.map((itm, idx) => {
itm.id = idx + 1;
return itm;
});
return resultArr;
};
return resultArr;
};
/**
// 转换成后端格式
const restData = (arr, typeKey) => {
@@ -334,168 +293,166 @@ setup(props,ctx) {
};
*/
const handleTypes = () => {
let obj = {
id: state.allFormsData.length,
valueSingle: "",
singleList: [
{
id: 1,
inputVal: "",
imgVal: "",
},
],
};
state.allFormsData.push(obj);
console.log("state.allFormsData=====",state.allFormsData,state.allFormsData.length);
};
const handleTypes = () => {
let obj = {
id: state.allFormsData.length,
valueSingle: "",
singleList: [
{
id: 1,
inputVal: "",
imgVal: "",
},
],
};
state.allFormsData.push(obj);
console.log("state.allFormsData=====", state.allFormsData, state.allFormsData.length);
};
const handleDel = ({ id ,curItem}) => {
state.allFormsData.forEach((item, index) => {
if (item.id === id) {
state.allFormsData.splice(index, 1);
}
});
state.allFormsData.map((item, index) => {
item.id = index + 1;
return item;
});
console.log("curItem.orderNumber",curItem.orderNumber);
const handleDel = ({ id, curItem }) => {
state.allFormsData.forEach((item, index) => {
if (item.id === id) {
state.allFormsData.splice(index, 1);
}
});
state.allFormsData.map((item, index) => {
item.id = index + 1;
return item;
});
console.log("curItem.orderNumber", curItem.orderNumber);
// orderNumber: curItem.orderNumber,
};
const handleSave = () => {
/**
let resultPost = {};
};
const handleSave = () => {
/**
let resultPost = {};
let filterData = parseItem(restData(state.allFormsData, "type"));
// 校验
if (!checkVal(filterData)) {
return false;
}
console.log(12121212);
console.log(filterData);
if (state.ballotId) {
resultPost = {
ballotId: state.ballotId,
ballotName: state.ballotName,
...filterData,
};
resultPost = deepCloneFilterString(resultPost, [
"assessmentMaxScore",
"assessmentMinScore",
]);
console.log(1212334);
console.log(resultPost);
editResearchMessage(resultPost).then((res) => {
if (res.data.code === 200) {
message.success("编辑成功");
router.push({
path: "/researchmanage",
});
}
});
} else {
resultPost = {
ballotName: state.ballotNameNew,
assessmentMark: state.valueMore,
...filterData,
};
resultPost = deepCloneFilterString(resultPost, [
"assessmentMaxScore",
"assessmentMinScore",
]);
createOptionMessage(resultPost).then((res) => {
if (res.data.code === 200) {
message.success("创建成功");
}
});
}
*/
};
const handleAllCancel = () => {
state.allFormsData = [];
};
/**
const checkVal = (filterData) => {
// 问答
if (
filterData.assessmentEssayQuestionDtoList &&
filterData.assessmentEssayQuestionDtoList.length
) {
let arr = filterData.assessmentEssayQuestionDtoList;
for (let item of arr) {
if (!item.assessmentQaTitle) {
message.error("问答题干为必填 请确认");
return false;
}
}
}
// 多选
if (
filterData.assessmentMultipleChoiceDtoList &&
filterData.assessmentMultipleChoiceDtoList.length
) {
let arr = filterData.assessmentMultipleChoiceDtoList;
for (let item of arr) {
if (!item.multipleStemName) {
message.error("多选题干为必填 请确认");
return false;
}
}
}
// 评分
if (
filterData.assessmentScoringQuestionDtoList &&
filterData.assessmentScoringQuestionDtoList.length
) {
let CountNum = 0;
let CountArr = filterData.assessmentScoringQuestionDtoList;
for (let item of CountArr) {
if (!item.assessmentScTitle) {
message.error("评分题干为必填 请确认");
return false;
}
CountNum += Number(item["weightScale"]);
}
if (CountNum !== 100) {
message.error("当前权重设置是百分制 请重新配置");
let filterData = parseItem(restData(state.allFormsData, "type"));
// 校验
if (!checkVal(filterData)) {
return false;
}
}
// 单选
if (
filterData.assessmentSingleChoiceDtoList &&
filterData.assessmentSingleChoiceDtoList.length
) {
let arr = filterData.assessmentSingleChoiceDtoList;
for (let item of arr) {
if (!item.singleStemName) {
message.error("单选题干为必填 请确认");
console.log(12121212);
console.log(filterData);
if (state.ballotId) {
resultPost = {
ballotId: state.ballotId,
ballotName: state.ballotName,
...filterData,
};
resultPost = deepCloneFilterString(resultPost, [
"assessmentMaxScore",
"assessmentMinScore",
]);
console.log(1212334);
console.log(resultPost);
editResearchMessage(resultPost).then((res) => {
if (res.data.code === 200) {
message.success("编辑成功");
router.push({
path: "/researchmanage",
});
}
});
} else {
resultPost = {
ballotName: state.ballotNameNew,
assessmentMark: state.valueMore,
...filterData,
};
resultPost = deepCloneFilterString(resultPost, [
"assessmentMaxScore",
"assessmentMinScore",
]);
createOptionMessage(resultPost).then((res) => {
if (res.data.code === 200) {
message.success("创建成功");
}
});
}
*/
};
const handleAllCancel = () => {
state.allFormsData = [];
};
/**
const checkVal = (filterData) => {
// 问答
if (
filterData.assessmentEssayQuestionDtoList &&
filterData.assessmentEssayQuestionDtoList.length
) {
let arr = filterData.assessmentEssayQuestionDtoList;
for (let item of arr) {
if (!item.assessmentQaTitle) {
message.error("问答题干为必填 请确认");
return false;
}
}
}
// 多选
if (
filterData.assessmentMultipleChoiceDtoList &&
filterData.assessmentMultipleChoiceDtoList.length
) {
let arr = filterData.assessmentMultipleChoiceDtoList;
for (let item of arr) {
if (!item.multipleStemName) {
message.error("多选题干为必填 请确认");
return false;
}
}
}
// 评分
if (
filterData.assessmentScoringQuestionDtoList &&
filterData.assessmentScoringQuestionDtoList.length
) {
let CountNum = 0;
let CountArr = filterData.assessmentScoringQuestionDtoList;
for (let item of CountArr) {
if (!item.assessmentScTitle) {
message.error("评分题干为必填 请确认");
return false;
}
CountNum += Number(item["weightScale"]);
}
if (CountNum !== 100) {
message.error("当前权重设置是百分制 请重新配置");
return false;
}
}
}
return true;
};
*/
// 单选
if (
filterData.assessmentSingleChoiceDtoList &&
filterData.assessmentSingleChoiceDtoList.length
) {
let arr = filterData.assessmentSingleChoiceDtoList;
for (let item of arr) {
if (!item.singleStemName) {
message.error("单选题干为必填 请确认");
return false;
}
}
}
return true;
};
*/
return {
...toRefs(state),
handleTypes,
handleSave,
handleAllCancel,
handleDel,
afterVisibleChange,
closeDrawer,
};
},
return {
...toRefs(state),
handleTypes,
handleSave,
handleAllCancel,
handleDel,
afterVisibleChange,
closeDrawer,
};
},
};
</script>
<style lang="scss">
@@ -508,6 +465,7 @@ setup(props,ctx) {
align-items: center;
flex-shrink: 0;
margin-bottom: 25px;
.headerTitle {
font-size: 18px;
font-weight: 600;
@@ -516,105 +474,123 @@ setup(props,ctx) {
margin-left: 24px;
}
}
.main_left {
padding-right: 30px;
flex: 1;
border-right: 1px solid #e8e8e8;
.main_item {
margin-left: 50px;
padding-right: 30px;
flex: 1;
border-right: 1px solid #e8e8e8;
.main_item {
display: flex;
align-items: center;
margin-bottom: 32px;
.signbox {
width: 120px;
display: flex;
justify-content: end;
align-items: center;
margin-bottom: 32px;
.signbox {
width: 120px;
.sign {
margin-right: 5px;
}
}
.btnbox {
display: flex;
flex: 1;
align-items: center;
.xkbtn {
cursor: pointer;
width: 130px;
height: 40px;
background: #388be1;
border-radius: 8px;
border: 0;
margin-right: 8px;
color: #fff;
margin-right: 10px;
}
.fileTigan {
display: flex;
justify-content: end;
align-items: center;
.sign {
padding: 3px 5px;
background-color: rgba(42, 103, 209, 0.4);
span {
margin-right: 5px;
}
}
.btnbox {
display: flex;
flex: 1;
align-items: center;
.xkbtn {
cursor: pointer;
width: 130px;
height: 40px;
background: #388be1;
border-radius: 8px;
border: 0;
margin-right: 8px;
color: #fff;
margin-right: 10px;
.delBox {
width: 13px;
height: 13px;
background-image: url(@/assets/images/basicinfo/ch.png);
background-size: 100% 100%;
border-radius: 50%;
}
.fileTigan {
}
}
}
.main_item2 {
display: flex;
align-items: flex-start;
margin-bottom: 32px;
.signbox {
width: 120px;
display: flex;
justify-content: end;
align-items: center;
.sign {
margin-right: 5px;
}
}
.kqszbox {
.qdqtbox {
margin-left: 56px;
}
.setbox {
display: flex;
flex-wrap: wrap;
margin-top: 10px;
margin-bottom: 24px;
.timerbox {
margin-top: 6px;
margin-right: 32px;
display: flex;
align-items: center;
padding: 3px 5px;
background-color: rgba(42, 103, 209, 0.4);
span {
margin-right: 5px;
}
.delBox {
width: 13px;
height: 13px;
background-image: url(@/assets/images/basicinfo/ch.png);
background-size: 100% 100%;
border-radius: 50%;
}
flex-wrap: nowrap;
}
}
}
.main_item2 {
.btnbox2 {
display: flex;
align-items: flex-start;
margin-bottom: 32px;
.signbox {
width: 120px;
display: flex;
justify-content: end;
align-items: center;
.sign {
margin-right: 5px;
}
}
.kqszbox {
.qdqtbox {
margin-left: 56px;
}
.setbox {
display: flex;
flex-wrap: wrap;
margin-top: 10px;
margin-bottom: 24px;
.timerbox {
margin-top: 6px;
margin-right: 32px;
display: flex;
align-items: center;
flex-wrap: nowrap;
}
}
}
.btnbox2 {
display: flex;
flex-direction: column;
justify-content: flex-start;
.xkbtn {
cursor: pointer;
width: 130px;
height: 40px;
background: #388be1;
border-radius: 8px;
border: 0;
margin-right: 16px 8px 32px 0;
color: #fff;
margin-top: 16px;
margin-bottom: 60px;
}
flex-direction: column;
justify-content: flex-start;
.xkbtn {
cursor: pointer;
width: 130px;
height: 40px;
background: #388be1;
border-radius: 8px;
border: 0;
margin-right: 16px 8px 32px 0;
color: #fff;
margin-top: 16px;
margin-bottom: 60px;
}
}
}
}
}

View File

@@ -325,8 +325,9 @@
</div>
<div
@click="showImgMore"
v-if="imgData.length>=5"
class="learnBgItem">
v-if="imgData.length >= 5"
class="learnBgItem"
>
<!-- <img class="im" :src="item.source" /> -->
</div>
</div>

View File

@@ -2,7 +2,8 @@
<div class="addwrapper">
<div class="addhead">
<div class="leftimg">
<img class="img" :src="picUrl" />
<!-- <img class="img" :src="picUrl" /> -->
<img class="img" src="../../assets/images/leveladd/1.png" />
</div>
<div class="imgfor">
<div class="forz">{{ styTitle }}</div>
@@ -10,21 +11,65 @@
</div>
<div class="right">
<img class="img1" src="../../assets/images/leveladd/ma.png" />
<div class="line"></div>
<img class="img2" src="../../assets/images/leveladd/pub.png" />
<div class="pub">发布</div>
<div v-if="action == 1 || action == 0" class="line"></div>
<img
v-if="action == 1 || action == 0"
class="img2"
src="../../assets/images/leveladd/pub.png"
/>
<!-- 已发布的显示 -->
<div
class="pub"
style="width: 28px"
v-if="action == 1"
@click="showBackModal"
>
{{ act }}
</div>
<!-- 未发布/草稿的显示 -->
<div
class="pub"
style="width: 28px"
v-if="action == 0"
@click="showPub"
>
{{ act }}
</div>
<!-- 已结束的显示 -->
<!-- <div class="pub" style="width: 28px" v-if="action == -1">
{{ act }}
</div> -->
<div class="line"></div>
<img
style="margin-right: 15px"
class="img2"
src="../../assets/images/leveladd/more.png"
/>
<div class="more">
<!-- 草稿/未发布的显示 -->
<div class="more" v-if="action == 0">
<span style="color: #7096e3; cursor: pointer">更多</span>
<div class="moreArrow"></div>
<div class="moreItems">
<div class="sammo">撤回</div>
<div class="sammo">复制</div>
<!-- <div class="sammo">撤回</div> -->
<div class="sammo" @click="showCopy">复制</div>
</div>
</div>
<!-- 已发布的显示 -->
<div class="more" v-if="action == 1">
<span style="color: #7096e3; cursor: pointer">更多</span>
<div class="moreArrow"></div>
<div class="moreItems">
<div class="sammo" @click="showStop">结束</div>
<div class="sammo" @click="showCopy">复制</div>
</div>
</div>
<!-- 已结束的显示 -->
<div class="more" v-if="action == -1">
<span style="color: #7096e3; cursor: pointer">更多</span>
<div class="moreArrow"></div>
<div class="moreItems">
<!-- <div class="sammo">结束</div> -->
<div class="sammo" @click="showCopy">复制</div>
</div>
</div>
<div class="line"></div>
@@ -515,14 +560,14 @@
style="width: 270px; height: 40px; border-radius: 8px"
placeholder="关卡名称"
/>
<div class="btns">
<div class="btns" @click="searchLevel" >
<div class="btn btn1">
<div class="search"></div>
<div class="btnText">搜索</div>
<a-button class="btnText" style="border:none;background:none;transform: translateY(-20%);" >搜索</a-button>
</div>
<div class="btn btn2">
<div class="btn btn2" @click="resetLevel">
<div class="search"></div>
<div class="btnText">重置</div>
<a-button style="border:none;background:none; transform: translateY(-20%);width:100%;" class="btnText" >重置</a-button>
</div>
</div>
</div>
@@ -777,6 +822,13 @@
</div></a-modal
>
<!-- 查看学员 传入查看学员的id-->
<see-stu
v-model:Seevisible="Seevisible"
v-model:checkStuId="checkStuId"
v-model:projectId="projectId"
/>
<!-- 批量删除学员弹窗 -->
<a-modal
v-model:visible="deleteAll"
@@ -920,6 +972,172 @@
<div class="aeLoading" :style="{ display: addLoading ? 'flex' : 'none' }">
<a-spin :spinning="addLoading" tip="添加中..." />
</div>
<!-- 发布弹窗 -->
<a-modal
v-model:visible="pub"
:title="null"
:footer="null"
:closable="false"
wrapClassName="pub"
width="679px"
height="437px"
>
<div
class="modalHeader"
style="
width: 100%;
height: 68px;
display: flex;
align-items: center;
justify-content: space-between;
"
>
<div class="headerLeft" style="margin-left: 32px">
<span style="width: 15px; height: 15px"
><img src="../../assets/images/taskpage/pub.png"
/></span>
<span
class="headerLeftText"
style="font-size: 16px; margin-left: 10px"
>路径发布</span
>
</div>
<div style="cursor: pointer; margin-right: 32px" @click="closePub">
<img
style="width: 22px; height: 22px"
src="../../assets/images/basicinfo/close22.png"
/>
</div>
</div>
<div class="modalMain">
<div class="projectname">产品经理上升路径</div>
<!-- <div class="projecttime">
<span class="timeti">路径时间</span
><span class="timeme">2022/08/01-2022/08/30</span>
</div> -->
<div class="projectbox">
<div class="promessage">
<div class="messageme">路径信息</div>
<div class="messagege">当前路径共0个关卡0个任务</div>
</div>
<div class="stumessage">
<div class="messageme1">学员信息</div>
<div class="messagege1">路径共{{ routeStudentsNum }}名学员</div>
</div>
</div>
<!-- <div class="send">
<a-switch v-model:checked="checked" size="small" />
<span class="sendtext">发送路径通知</span>
</div>
<div class="ckb">
<a-checkbox v-model:checked="checkedTeacher"
><span class="sendpeo">发给老师</span></a-checkbox
>
<a-checkbox v-model:checked="checkStu"
><span class="sendpeo">发给学员</span></a-checkbox
>
</div> -->
<div class="pubtn">
<a-button class="pubtn1" @click="closePub">取消</a-button>
<a-button class="pubtn2" @click="releaseLearnPath">发布</a-button>
</div>
</div>
</a-modal>
<!-- 撤回路径弹窗 -->
<a-modal
v-model:visible="backModal"
:footer="null"
:closable="closeBack"
wrapClassName="CopyModal"
centered="true"
>
<div class="delete">
<div class="del_header"></div>
<div class="del_main">
<div class="header">
<div class="icon"></div>
<span>提示</span>
<div class="close_exit" @click="closeBackModal"></div>
</div>
<div class="body">
<span>是否撤回路径</span>
<div class="back">路径撤回后学员进度保留发布后可继续学习</div>
</div>
<div class="del_btnbox">
<div class="del_btn btn1" @click="closeBackModal">
<div class="btnText">取消</div>
</div>
<div class="del_btn btn2" @click="recallPath">
<div class="btnText">确定</div>
</div>
</div>
</div>
</div>
</a-modal>
<!-- 复制路径弹窗 -->
<a-modal
v-model:visible="dcopyModal"
:footer="null"
:closable="dcloseCopy"
wrapClassName="CopyModal"
centered="true"
>
<div class="delete">
<div class="del_header"></div>
<div class="del_main">
<div class="header">
<div class="icon"></div>
<span>提示</span>
<div class="close_exit" @click="closeCopy"></div>
</div>
<div class="body">
<span>您确定要复制此路径吗</span>
</div>
<div class="del_btnbox">
<div class="del_btn btn1" @click="closeCopy">
<div class="btnText">取消</div>
</div>
<div class="del_btn btn2" @click="sureCopy">
<div class="btnText">确定</div>
</div>
</div>
</div>
</div>
</a-modal>
<!-- 结束路径弹窗 -->
<a-modal
v-model:visible="stopModal"
:footer="null"
:closable="dicloseStop"
wrapClassName="CopyModal"
centered="true"
>
<div class="delete">
<div class="del_header"></div>
<div class="del_main">
<div class="header">
<div class="icon"></div>
<span>提示</span>
<div class="close_exit" @click="closeStopModal"></div>
</div>
<div class="body">
<!-- <span>您确定要停用此路径吗</span> -->
<span>是否结束项目</span>
<div class="back">
项目结束后学员将无法继续学习此操作不可逆
</div>
</div>
<div class="del_btnbox">
<div class="del_btn btn1" @click="closeStopModal">
<div class="btnText">取消</div>
</div>
<div class="del_btn btn2" @click="stopLearnPath">
<div class="btnText">确定</div>
</div>
</div>
</div>
</div>
</a-modal>
</div>
</template>
<script>
@@ -935,10 +1153,12 @@ import TimeManage from "../../components/drawers/TimeManage";
import TestManage from "../../components/drawers/TestManage";
import FaceManage from "../../components/drawers/FaceManage";
import WorkManage from "../../components/drawers/WorkManage";
import SeeStu from "../../components/drawers/SeeStu";
// import { useRoute } from "vue-router";
// import { useStore } from "vuex";
import { storage } from "../../api/storage";
import { getRouterOverview } from "@/api/indexLearningPath";
import { handleLearnPath } from "../../api/index1";
import { GetRouterDetail } from "@/api/indexTask";
import * as api from "../../api/index1";
import { toDate } from "../../api/method";
@@ -955,6 +1175,7 @@ export default {
TestManage,
FaceManage,
WorkManage,
SeeStu
},
methods: {},
setup() {
@@ -966,6 +1187,16 @@ export default {
: null, //学习路径页面传的学习路径id
gatename: null, //关卡名称
gatenamee: null, //学员管理关卡名称
action: null,
act: null,
pub: false, //发布弹窗
backModal: false, //撤回弹窗
dcopyModal: false, //复制弹窗
closeBack: false,
routeStudentsNum: null,
dcloseCopy: false,
dicloseCopy: false,
stopModal: false, //结束弹窗
deleteAll: false, //批量删除学员弹窗
Stuvisible: false, //添加学员抽屉
AddImpStuvisible: false, //导入学员抽屉
@@ -975,6 +1206,8 @@ export default {
twobtn: true,
number: true,
twobtnn: false,
Seevisible:false,
checkStuId:null,
inputbox: false,
Wvisible: false, //作业管理
studentId: null,
@@ -1190,6 +1423,7 @@ export default {
<span
onClick={() => {
showCheckStu(text.record.studentId);
state.Seevisible = true;
}}
style="color:#4EA6FF;margin-right:25px;cursor:pointer"
>
@@ -1386,6 +1620,147 @@ export default {
onMounted(() => {
state.addLoading = true;
getOverview();
reget();
});
const closePub = () => {
state.pub = false;
};
//确定发布
const releaseLearnPath = () => {
// console.log("state.releasePathId", state.releasePathId);
let obj = {
routerId: state.routerId,
type: 1,
};
handleLearnPath(obj)
.then((res) => {
console.log("发布成功", res);
message.destroy();
message.success("发布成功");
state.pub = false;
// getLearnPath();
reget();
})
.catch((err) => {
console.log("发布失败", err);
});
};
//显示发布弹窗
const showPub = () => {
state.pub = true;
// state.releasePathId = routerId;
//获取学员总数
let obj = {
pageNo: 0,
pageSize: 0,
routerId: state.routerId,
};
api
.getStudent(obj)
.then((res) => {
if (res.status === 200) {
// console.log("res", res.data.data);
state.routeStudentsNum = res.data.data.total;
}
})
.catch((err) => {
console.log("err", err);
});
//获取学习路径详细信息
// api
// .getRouterDetail(routerId)
// .then((res) => {
// console.log("学习路径详情", res);
// })
// .catch((err) => {
// console.log("学习路径详情获取错误", err);
// });
};
//显示撤回弹窗
const showBackModal = () => {
state.backModal = true;
};
//关闭撤回弹窗
const closeBackModal = () => {
state.backModal = false;
};
//确定撤回
const recallPath = () => {
let obj = {
routerId: state.routerId,
type: 0,
};
api
.handleLearnPath(obj)
.then((res) => {
console.log("撤回成功", res);
message.destroy();
message.success("撤回成功");
state.backModal = false;
reget();
})
.catch((err) => {
console.log("撤回失败", err);
});
};
//显示复制弹窗
const showCopy = () => {
state.dcopyModal = true;
};
//关闭复制弹窗
const closeCopy = () => {
state.dcopyModal = false;
};
//确认复制
const sureCopy = () => {
let obj = {
routerId: state.routerId,
type: 2,
};
api
.handleLearnPath(obj)
.then((res) => {
console.log("复制成功", res);
message.destroy();
message.success("复制成功");
state.dcopyModal = false;
reget();
})
.catch((err) => {
console.log("复制失败", err);
});
};
const showStop = () => {
state.stopModal = true;
};
//关闭结束窗口
const closeStopModal = () => {
state.stopModal = false;
};
//确认结束
const stopLearnPath = () => {
let obj = {
routerId: state.routerId,
type: -1,
};
api
.handleLearnPath(obj)
.then((res) => {
console.log("停用成功", res);
message.destroy();
message.success("停用成功");
state.stopModal = false;
reget();
// getLearnPath();
})
.catch((err) => {
console.log("停用失败", err);
});
};
const reget = () => {
GetRouterDetail(state.routerId).then((res) => {
state.styTitle = res.data.data.routerInfo.name;
state.cretime = toDate(
@@ -1393,9 +1768,17 @@ export default {
"Y-M-D h:m"
);
state.picUrl = res.data.data.routerInfo.picUrl;
state.action = res.data.data.routerInfo.status;
state.act =
state.action == 0
? "发布"
: state.action == 1
? "撤回"
: state.action == -1
? ""
: "-";
});
});
};
// 获取项目概览
const getOverview = () => {
getRouterOverview(state.routerId)
@@ -1478,7 +1861,14 @@ export default {
},
});
};
const searchLevel = () => {
const result = state.tableData.filter(item => item.cur == state.gatenamee)
state.tableData = result;
};
const resetLevel = () => {
state.gatenamee = '';
getStudent();
};
return {
...toRefs(state),
...toRefs(levelList),
@@ -1509,11 +1899,162 @@ export default {
checkType,
handleChange,
delConfirm,
searchLevel,
resetLevel,
closePub,
releaseLearnPath,
showPub,
showBackModal,
closeBackModal,
recallPath,
showCopy,
closeCopy,
sureCopy,
closeStopModal,
stopLearnPath,
showStop,
reget,
};
},
};
</script>
<style lang="scss">
.pub {
.ant-modal {
.ant-modal-body {
padding: 0;
.modalHeader {
background: linear-gradient(
rgba(78, 166, 255, 0.2) 0%,
rgba(78, 166, 255, 0) 100%
);
}
.modalMain {
.projectname {
color: rgba(79, 81, 86, 1);
font-size: 14px;
line-height: 36px;
margin-left: 62px;
font-weight: 500;
}
.projecttime {
margin-left: 221px;
.timeti {
color: rgba(153, 155, 163, 1);
font-size: 14px;
line-height: 36px;
}
.timeme {
color: rgba(79, 81, 86, 1);
font-size: 14px;
line-height: 36px;
}
}
.projectbox {
margin-top: 26px;
display: flex;
justify-content: center;
.promessage {
width: 280px;
height: 110px;
background: linear-gradient(
180deg,
rgba(254, 243, 221, 1),
rgba(255, 250, 240, 1)
);
border-radius: 10px;
margin-right: 7px;
.messageme {
color: rgba(255, 182, 78, 1);
font-size: 14px;
line-height: 36px;
margin-top: 17px;
margin-left: 30px;
}
.messagege {
color: rgba(153, 155, 163, 1);
font-size: 14px;
margin-left: 30px;
}
}
.stumessage {
width: 280px;
height: 110px;
background: linear-gradient(
180deg,
rgba(221, 234, 255, 1),
rgba(240, 248, 254, 1)
);
border-radius: 10px;
.messageme1 {
color: rgba(78, 166, 255, 1);
font-size: 14px;
line-height: 36px;
margin-top: 17px;
margin-left: 30px;
}
.messagege1 {
color: rgba(153, 155, 163, 1);
font-size: 14px;
margin-left: 30px;
}
}
}
.send {
margin-top: 30px;
margin-left: 61px;
.sendtext {
margin-left: 11px;
color: rgba(109, 117, 132, 1);
font-size: 14px;
}
}
.ckb {
margin-top: 20px;
margin-left: 62px;
.sendpeo {
color: rgba(109, 117, 132, 1);
font-size: 14px;
}
.ant-checkbox-inner {
border-radius: 4px;
}
}
.pubtn {
display: flex;
justify-content: center;
margin-top: 25px;
//margin-bottom: 29px;
.pubtn1 {
width: 100px;
height: 40px;
margin-right: 16px;
margin-bottom: 29px;
border: 1px solid #409eff;
border-radius: 4px;
color: rgba(78, 166, 255, 1);
font-size: 14px;
//line-height: 36px;
align-items: center;
background: rgba(255, 255, 255, 1);
}
.pubtn2 {
width: 100px;
height: 40px;
margin-bottom: 29px;
border: 1px solid #409eff;
border-radius: 4px;
color: #ffffff;
font-size: 14px;
align-items: center;
//line-height: 36px;
background: #409eff;
}
}
}
}
}
}
.clearfix:before,
.clearfix:after {
content: " ";
@@ -1931,7 +2472,8 @@ export default {
}
.moreItems {
width: 110px;
height: 80px;
// height: 80px;
padding-bottom: 12px;
display: none;
background: #ffffff;
box-shadow: 2px 3px 9px 3px rgba(0, 0, 0, 0.05);

View File

@@ -210,9 +210,15 @@
</div>
<!-- 添加在线侧弹窗 -->
<div>
<add-online v-model:addonlineVisible="addonlinevisible" @changeData="updateTableData" v-model:edit="edit"
v-model:projectId="projectId" v-model:chooseStageId="chooseStageId" v-model:projectTaskId="projectTaskId"
v-model:EditOnlineId="EditOnlineId" />
<add-online
v-model:addonlineVisible="addonlinevisible"
@changeData="updateTableData"
v-model:edit="edit"
v-model:projectId="projectId"
v-model:chooseStageId="chooseStageId"
v-model:projectTaskId="projectTaskId"
v-model:EditOnlineId="EditOnlineId"
/>
</div>
<!-- 添加在线侧弹窗 -->
<div class="lin"></div>
@@ -235,11 +241,17 @@
</div>
<!-- 添加案例侧弹窗 -->
<div>
<add-case v-model:addcaseVisible="addcasevisible" @changeData="updateTableData" v-model:edit="edit"
v-model:projectId="projectId" v-model:chooseStageId="chooseStageId" v-model:projectTaskId="projectTaskId"
v-model:EditCaseId="EditCaseId" />
</div>
<!-- 添加案例侧弹窗 -->
<add-case
v-model:addcaseVisible="addcasevisible"
@changeData="updateTableData"
v-model:edit="edit"
v-model:projectId="projectId"
v-model:chooseStageId="chooseStageId"
v-model:projectTaskId="projectTaskId"
v-model:EditCaseId="EditCaseId"
/>
</div>
<!-- 添加案例侧弹窗 -->
<div class="lin"></div>
</div>
<div class="item">
@@ -963,8 +975,8 @@
import { reactive, toRefs, onMounted, onUnmounted } from "vue";
import AddStu from "../../components/drawers/AddLevelAddStu";
import ImpStu from "../../components/drawers/AddLevelImportStu";
import AddOnline from "../../components/drawers/AddOnline.vue"
import AddCase from "../../components/drawers/AddCase.vue"
import AddOnline from "../../components/drawers/AddOnline.vue";
import AddCase from "../../components/drawers/AddCase.vue";
import AddHomework from "../../components/drawers/AddHomework.vue";
import AddTest from "../../components/drawers/AddTest.vue";
import AddDiscuss from "../../components/drawers/AddDiscuss.vue";
@@ -1218,8 +1230,8 @@ export default {
deleteModal: false, // 删除弹窗
deleteID: "", // 要删除的任务的id
editID: "", // 要编辑的任务id
EditOnlineId:"", // 要编辑的 workid
EditCaseId:"",
EditOnlineId: "", // 要编辑的 workid
EditCaseId: "",
EditWorkId: "",
EditTestId: "",
EditRefId: "",
@@ -1246,8 +1258,8 @@ export default {
adddiscussvisible: false, //讨论抽屉
isStudiscuss: false,
addactivevisible: false, //活动抽屉
addonlinevisible:false,
addcasevisible:false,
addonlinevisible: false,
addcasevisible: false,
addhomeworkvisible: false,
addtestvisible: false,
addevalvisible: false,
@@ -1269,6 +1281,7 @@ export default {
projectId: null,
projectTaskId: null,
chooseStageId: null,
chooseChapterId: null,
});
//新建关卡
@@ -1324,17 +1337,17 @@ export default {
state.addprojvisible = false;
};
//在线抽屉
const showDrawerAddOnline = (id,eleId)=>{
const showDrawerAddOnline = (id, eleId) => {
state.addonlinevisible = true;
state.EditWorkId = id;
state.routerTaskId = eleId;
}
};
//案例抽屉
const showDrawerAddCase = (id,eleId)=>{
const showDrawerAddCase = (id, eleId) => {
state.addcasevisible = true;
state.EditWorkId = id;
state.routerTaskId = eleId;
}
};
// 作业和考试的抽屉
const showDrawerAddHomework = (id, eleId) => {
console.log("homework==============", id, state.isactive);
@@ -1430,6 +1443,7 @@ export default {
GetRouterDetail(state.routerId)
.then((res) => {
console.log("res.data.data.chapterList", res.data.data.chapterList);
//给level赋初始值
state.level = res.data.data.chapterList;
state.styTitle = res.data.data.routerInfo.name;
state.creTime = toDate(
@@ -1444,8 +1458,14 @@ export default {
item["label"] = item.name;
});
if (state.level.length > 0) {
dataAssignment(state.level[0].chapterId);
state.isactive = state.level[0].chapterId;
let chapter = localStorage.getItem("chapterId");
if (chapter !== null) {
dataAssignment(chapter);//用哪个的任务表
state.isactive = chapter;//哪个亮
} else {
dataAssignment(state.level[0].chapterId);
state.isactive = state.level[0].chapterId;
}
}
state.deleteModal = false;
})
@@ -1670,6 +1690,7 @@ export default {
state.selectRow = []; //选择行
state.selectAll = 0; //0未选择1全选2部分选择
dataAssignment(chapterId);
state.chooseChapterId = chapterId;
};
const gqxy_hShow = () => {
state.gqxy_hs = !state.gqxy_hs;
@@ -1807,6 +1828,8 @@ export default {
console.log("移动成功", res);
message.destroy();
message.success("移动成功");
localStorage.setItem("chapterId", state.chooseChapterId);
getDetail();
})
.catch((err) => {
console.log("移动失败", err);
@@ -1906,7 +1929,13 @@ export default {
const rowSelection = {
onSelect: (selectedRows, selected, selectedRowKeys) => {
console.log(
"selectedRowKeys", selectedRowKeys, "selectedRows", selectedRows, "selected", selected);
"selectedRowKeys",
selectedRowKeys,
"selectedRows",
selectedRows,
"selected",
selected
);
console.log(selectedRows.assessmentId);
state.assessmentId = selectedRows.assessmentId;
state.assessmentName = selectedRows.name;
@@ -1942,36 +1971,38 @@ export default {
"status": 0
})
.then((res) => {
let arr = res.data.data.rows;
if (res.status === 200) {
let arr = res.data.data.rows;
console.log(arr,'-------------------------------');
getTableDate(arr);
console.log("---------------项目信息---------------------------");
}
})
.catch((err) => {
console.log("获取全部项目信息接口失败", err);
console.log('+++++++++++++++++++++++++++++++++++++++++++++++');
// state.createLoading = false;
});
};
const updateTask = () => {
RouterEditTask({
chapterId: state.isactive,
courseId: state.assessmentId,
name: state.assessmentName,
routerId: state.routerId,
routerTaskId: state.routerTaskId || 0,
type: 13,
RouterEditTask({
chapterId: state.isactive,
courseId: state.assessmentId,
name: state.assessmentName,
routerId: state.routerId,
routerTaskId: state.routerTaskId || 0,
type: 13,
})
.then((res) => {
console.log(res, 11111);
message.success(`${state.editproj ? "编辑" : "新增"}关卡任务成功`);
// ctx.emit("changeData", false);
closeDrawer();
state.addLoading = false;
})
.then((res) => {
console.log(res, 11111);
message.success(`${state.editproj ? '编辑' : '新增'}关卡任务成功`)
// ctx.emit("changeData", false);
closeDrawer();
state.addLoading = false;
})
.catch((err) => {
console.log(err, 1111);
});
}
.catch((err) => {
console.log(err, 1111);
});
};
onMounted(() => {
// createCase();
getAllProjText();

View File

@@ -1395,6 +1395,7 @@ export default {
//获取任务列表
const getTask = () => {
// console.log("state.projectId", state.projectId);
let obj = {
projectId: state.projectId,
// projectId: 28,
@@ -1409,28 +1410,30 @@ export default {
state.picUrl = res.data.data.projectInfo.picUrl;
let leng = res.data.data.stageList.length;
if (leng > 0) {
// let stage = localStorage.getItem("stageId")
// ? localStorage.getItem("stageId")
// : null;
// if (stage !== null) {
// // console.log("找到了origin", originStageList);
// let originStageList = res.data.data.stageList.find((item) => {
// item.stageId == stage;
// });
// getTableData(originStageList.taskList);
// console.log("找到了origin", originStageList);
// } else {
// let arr = res.data.data.stageList[0].taskList;
// console.log("任务列表", arr);
// getTableData(arr);
// }
let stage = localStorage.getItem("stageId")
? localStorage.getItem("stageId")
: null;
let arr = res.data.data.stageList[0].taskList;
console.log("任务列表", stage, arr);
getTableData(arr);
console.log("zhaodaole", stage);
if (stage !== null) {
let stageList = res.data.data.stageList; //阶段数组
let result = stageList.find((item) => item.stageId == stage);
console.log("又找到了", result);
getTableData(result.taskList);
} else {
let arr = res.data.data.stageList[0].taskList;
console.log("任务列表", arr);
getTableData(arr);
}
// let stageList = res.data.data.stageList; //阶段数组
// let result = stageList.find((item) => item.stageId == stage);
// console.log("又找到了", result);
// getTableData(result.taskList);
// 每次都获取了第一条taskList
// let arr = res.data.data.stageList[0].taskList;
// console.log("任务列表", stage, arr);
// getTableData(arr);
}
let stagearr = res.data.data.stageList;

View File

@@ -12,22 +12,78 @@
</div>
<div class="right">
<img class="img1" src="../../assets/images/leveladd/ma.png" />
<div class="line"></div>
<img class="img2" src="../../assets/images/leveladd/pub.png" />
<div class="pub">发布</div>
<div class="line" v-if="action == 1 || action == 0"></div>
<img
v-if="action == 1 || action == 0"
class="img2"
src="../../assets/images/leveladd/pub.png"
/>
<!-- <div class="pub">发布</div> -->
<!-- 已发布的显示 -->
<div
class="pub"
style="width: 28px"
v-if="action == 1"
@click="showBackModal"
>
{{ act }}
</div>
<!-- 未发布/草稿的显示 -->
<div
class="pub"
style="width: 28px"
v-if="action == 0"
@click="showProjectPub"
>
{{ act }}
</div>
<!-- 已结束的显示 -->
<!-- <div class="pub" style="width: 28px" v-if="action == -1">
{{ act }}
</div> -->
<div class="line"></div>
<img
style="margin-right: 15px"
class="img2"
src="../../assets/images/leveladd/more.png"
/>
<div class="more">
<!-- <div class="more">
<span style="color: #7096e3; cursor: pointer">更多</span>
<div class="moreArrow"></div>
<div class="moreItems">
<div class="sammo">撤回</div>
<div class="sammo">复制</div>
</div>
</div> -->
<!-- 草稿/未发布的显示 -->
<div class="more" v-if="action == 0">
<span style="color: #7096e3; cursor: pointer">更多</span>
<div class="moreArrow"></div>
<div class="moreItems">
<!-- <div class="sammo">撤回</div> -->
<div class="sammo">复制</div>
<div class="sammo" @click="showStartModal">存为模板</div>
</div>
</div>
<!-- 已发布的显示 -->
<div class="more" v-if="action == 1">
<span style="color: #7096e3; cursor: pointer">更多</span>
<div class="moreArrow"></div>
<div class="moreItems">
<div class="sammo" @click="showStopModal">结束</div>
<div class="sammo">复制</div>
<div class="sammo" @click="showStartModal">存为模板</div>
</div>
</div>
<!-- 已结束的显示 -->
<div class="more" v-if="action == -1">
<span style="color: #7096e3; cursor: pointer">更多</span>
<div class="moreArrow"></div>
<div class="moreItems">
<!-- <div class="sammo">结束</div> -->
<div class="sammo">复制</div>
<div class="sammo" @click="showStartModal">存为模板</div>
</div>
</div>
<div class="line"></div>
<router-link to="/projectmanage">
@@ -1352,6 +1408,178 @@
type="课程二维码"
/>
<!-- 二维码弹窗 -->
<!-- 发布弹窗 -->
<a-modal
v-model:visible="projectPub"
:title="null"
:footer="null"
:closable="false"
wrapClassName="projectPub"
width="679px"
height="437px"
>
<div
class="modalHeader"
style="
width: 100%;
height: 68px;
display: flex;
align-items: center;
justify-content: space-between;
"
>
<div class="headerLeft" style="margin-left: 32px">
<span style="width: 15px; height: 15px"
><img src="../../assets/images/taskpage/pub.png"
/></span>
<span
class="headerLeftText"
style="font-size: 16px; margin-left: 10px"
>项目发布</span
>
</div>
<div
style="cursor: pointer; margin-right: 32px"
@click="closeProjectPub"
>
<img
style="width: 22px; height: 22px"
src="../../assets/images/basicinfo/close22.png"
/>
</div>
</div>
<div class="modalMain">
<div class="projectname">{{ releaseProjectName }}</div>
<div class="projecttime" v-if="startTime">
<span class="timeti">项目时间</span
><span class="timeme">{{ startTime }}~{{ endTime }}</span>
</div>
<div class="projectbox">
<div class="promessage">
<div class="messageme">项目信息</div>
<div class="messagege">当前项目共0个阶段0个任务</div>
</div>
<div class="stumessage">
<div class="messageme1">学员信息</div>
<div class="messagege1">项目共{{ projectStudentsNum }}名学员</div>
</div>
</div>
<!-- <div class="send">
<a-switch v-model:checked="checked" size="small" />
<span class="sendtext">发送路径通知</span>
</div>
<div class="ckb">
<a-checkbox v-model:checked="checkedTeacher"
><span class="sendpeo">发给老师</span></a-checkbox
>
<a-checkbox v-model:checked="checkStu"
><span class="sendpeo">发给学员</span></a-checkbox
>
</div> -->
<div class="pubtn">
<a-button class="pubtn1" @click="closeProjectPub">取消</a-button>
<a-button class="pubtn2" @click="releaseProject">发布</a-button>
</div>
</div>
</a-modal>
<!-- 撤回弹窗 -->
<a-modal
v-model:visible="backModal"
:footer="null"
:closable="closeBack"
wrapClassName="CopyModal"
centered="true"
>
<div class="delete">
<div class="del_header"></div>
<div class="del_main">
<div class="header">
<div class="icon"></div>
<span>提示</span>
<div class="close_exit" @click="closeBackModal"></div>
</div>
<div class="body">
<span>是否撤回项目</span>
<div class="back">项目撤回后学员进度保留发布后可继续学习</div>
</div>
<div class="del_btnbox">
<div class="del_btn btn1" @click="closeBackModal">
<div class="btnText">取消</div>
</div>
<div class="del_btn btn2" @click="recallProject">
<div class="btnText">确定</div>
</div>
</div>
</div>
</div>
</a-modal>
<!-- 结束项目弹窗 -->
<a-modal
v-model:visible="stopModal"
:footer="null"
:closable="closeStop"
wrapClassName="CopyModal"
centered="true"
>
<div class="delete">
<div class="del_header"></div>
<div class="del_main">
<div class="header">
<div class="icon"></div>
<span>提示</span>
<div class="close_exit" @click="closeStopModal"></div>
</div>
<div class="body">
<span>是否结束项目</span>
<div class="back">
项目结束后学员将无法继续学习此操作不可逆
</div>
</div>
<div class="del_btnbox">
<div class="del_btn btn1" @click="closeStopModal">
<div class="btnText">取消</div>
</div>
<div class="del_btn btn2" @click="finishProject">
<div class="btnText">确定</div>
</div>
</div>
</div>
</div>
</a-modal>
<!-- 存为模版弹窗 -->
<a-modal
v-model:visible="startModal"
:footer="null"
:closable="closeStart"
wrapClassName="CopyModal"
centered="true"
>
<div class="delete">
<div class="del_header"></div>
<div class="del_main">
<div class="header">
<div class="icon"></div>
<span>提示</span>
<div class="close_exit" @click="closeStartModal"></div>
</div>
<div class="body">
<span>您确定要存为模版吗</span>
</div>
<div class="del_btnbox">
<div class="del_btn btn1" @click="closeStartModal">
<div class="btnText">取消</div>
</div>
<div class="del_btn btn2" @click="templateProject">
<div class="btnText">确定</div>
</div>
</div>
</div>
</div>
</a-modal>
</div>
</template>
<script>
@@ -1377,6 +1605,7 @@ import ProjectScore from "../../components/drawers/ProjectScore";
import TaskImpStu from "../../components/drawers/TaskFaceIn";
import { storage } from "../../api/storage";
import * as api from "../../api/index1";
import * as apiproj from "../../api/index";
import {
getProjStu,
deleteStu,
@@ -1566,6 +1795,19 @@ export default {
chooseGroupId: null,
morFaceT: false, //批量面授报名按钮
faceArr: [], //任务大纲列表所有name
action: null,
act: null,
projectPub: false, //发布弹窗
projectStudentsNum: 0, //发布弹窗-学员人数
releaseProjectId: null, //发布的项目id
releaseProjectName: null, //发布的项目名称
releaseProjectTime: null, //发布的项目时间
backModal: false, //撤回弹窗
closeBack: false,
stopModal: false,
closeStop: false,
startModal: false,
closeStart: false,
//进度排行表
jindutabledata: [
{
@@ -3062,12 +3304,160 @@ export default {
}
}
};
const reget = () => {
getTask({
projectId: state.projectId,
}).then((res) => {
state.action = res.data.data.projectInfo.status;
state.act =
state.action == 0
? "发布"
: state.action == 1
? "撤回"
: state.action == -1
? ""
: "-";
});
};
//打开发布弹窗
const showProjectPub = () => {
state.projectPub = true;
state.releaseProjectId = state.projectId;
state.releaseProjectName = state.name;
// state.releaseProjectTime = state.startTime;
// console.log("object", object);
//获取学员总数
let obj = {
pageNo: 0,
pageSize: 0,
projectId: state.projectId,
};
apiproj
.projectStudent(obj)
.then((res) => {
if (res.status === 200) {
// console.log("res", res.data);
state.projectStudentsNum = res.data.data.total
? res.data.data.total
: 0;
}
})
.catch((err) => {
console.log("获取学员人数失败", err);
});
//获取阶段及任务总数
};
//关闭发布弹窗
const closeProjectPub = () => {
state.projectPub = false;
};
//确认发布项目
const releaseProject = () => {
console.log("点击发布");
let obj = {
projectId: state.releaseProjectId,
};
apiproj
.releaseProject(obj)
.then((res) => {
console.log("发布成功", res);
message.destroy();
message.success("发布成功");
state.projectPub = false;
reget();
})
.catch((err) => {
console.log("发布失败", err);
});
};
//打开撤回弹窗
const showBackModal = () => {
state.backModal = true;
};
//关闭撤回弹窗
const closeBackModal = () => {
state.backModal = false;
};
const recallProject = () => {
let obj = {
projectId: state.projectId,
type: 0,
};
apiproj
.handleProject(obj)
.then((res) => {
console.log("撤回成功", res);
message.destroy();
message.success("撤回成功");
state.backModal = false;
reget();
})
.catch((err) => {
console.log("撤回失败", err);
});
};
//关闭结束弹窗
const closeStopModal = () => {
state.stopModal = false;
};
//确认结束
const finishProject = () => {
let obj = {
projectId: state.projectId,
type: -1,
};
apiproj
.handleProject(obj)
.then((res) => {
console.log("结束成功", res);
message.destroy();
message.success("已结束");
state.stopModal = false;
reget();
})
.catch((err) => {
console.log("结束失败", err);
});
};
//打开结束弹窗
const showStopModal = () => {
state.stopModal = true;
};
//打开存为模版弹窗
const showStartModal = () => {
state.startModal = true;
};
//关闭存为模版弹窗
const closeStartModal = () => {
state.startModal = false;
};
//确认存为模版
const templateProject = () => {
let obj = {
projectId: state.projectId,
type: 1,
};
apiproj
.handleProject(obj)
.then((res) => {
console.log("模版保存成功", res);
message.destroy();
message.success("模版保存成功");
state.startModal = false;
reget();
})
.catch((err) => {
console.log("模版保存失败", err);
});
};
onMounted(() => {
getStu();
getTaskList();
getTaskInfo();
getGroup();
getOverview();
reget();
});
return {
...toRefs(state),
@@ -3147,6 +3537,19 @@ export default {
changePaginationStu,
handleChange,
toEdit,
reget,
showProjectPub,
closeProjectPub,
releaseProject,
showBackModal,
closeBackModal,
recallProject,
closeStopModal,
finishProject,
showStopModal,
showStartModal,
closeStartModal,
templateProject,
};
},
};
@@ -3456,6 +3859,133 @@ export default {
}
}
.CopyModal {
.ant-modal {
width: 424px !important;
height: 258px !important;
.ant-modal-content {
width: 424px !important;
height: 258px !important;
.ant-modal-body {
width: 424px !important;
height: 258px !important;
padding: 0 !important;
.delete {
z-index: 999;
width: 424px;
height: 258px;
background: #ffffff;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.21);
border-radius: 4px;
// position: absolute;
// left: 50%;
// top: 10%;
// transform: translate(-50%, -50%);
.del_header {
position: absolute;
width: calc(100%);
height: 68px;
background: linear-gradient(
rgba(78, 166, 255, 0.2) 0%,
rgba(78, 166, 255, 0) 100%
);
}
.del_main {
width: 100%;
position: relative;
.header {
display: flex;
align-items: center;
padding-top: 20px;
padding-left: 26px;
font-size: 16px;
.icon {
width: 16px;
height: 16px;
margin-right: 10px;
background-image: url(@/assets/images/coursewareManage/QR.png);
background-size: 100% 100%;
}
.close_exit {
position: absolute;
right: 42px;
cursor: pointer;
width: 20px;
height: 20px;
background-image: url(@/assets/images/coursewareManage/close.png);
background-size: 100% 100%;
}
}
.body {
width: 100%;
margin: 34px auto 56px auto;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
// background-color: red;
position: relative;
.back {
position: absolute;
top: 30px;
font-size: 12px;
font-weight: 400;
color: #666666;
}
}
.del_btnbox {
display: flex;
margin: 30px auto;
justify-content: center;
.del_btn {
width: 100px;
height: 40px;
background: rgba(64, 158, 255, 0);
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
cursor: pointer;
.btnText {
font-size: 14px;
font-weight: 400;
line-height: 40px;
}
}
.btn1 {
border: 1px solid rgba(64, 158, 255, 1);
color: #4ea6ff;
margin-right: 14px;
}
.btn2 {
background-color: #4ea6ff;
color: #ffffff;
}
}
}
}
}
}
}
}
.canclestu1 {
.ant-modal {
width: 424px !important;
@@ -3687,6 +4217,144 @@ export default {
}
}
.projectPub {
.ant-modal {
.ant-modal-body {
padding: 0;
.modalHeader {
background: linear-gradient(
rgba(78, 166, 255, 0.2) 0%,
rgba(78, 166, 255, 0) 100%
);
}
.modalMain {
.projectname {
color: rgba(79, 81, 86, 1);
font-size: 14px;
line-height: 36px;
// margin-left: 62px;
font-weight: 500;
text-align: center;
}
.projecttime {
margin-left: 221px;
.timeti {
color: rgba(153, 155, 163, 1);
font-size: 14px;
line-height: 36px;
}
.timeme {
color: rgba(79, 81, 86, 1);
font-size: 14px;
line-height: 36px;
}
}
.projectbox {
margin-top: 26px;
display: flex;
justify-content: center;
.promessage {
width: 280px;
height: 110px;
background: linear-gradient(
180deg,
rgba(254, 243, 221, 1),
rgba(255, 250, 240, 1)
);
border-radius: 10px;
margin-right: 7px;
.messageme {
color: rgba(255, 182, 78, 1);
font-size: 14px;
line-height: 36px;
margin-top: 17px;
margin-left: 30px;
}
.messagege {
color: rgba(153, 155, 163, 1);
font-size: 14px;
margin-left: 30px;
}
}
.stumessage {
width: 280px;
height: 110px;
background: linear-gradient(
180deg,
rgba(221, 234, 255, 1),
rgba(240, 248, 254, 1)
);
border-radius: 10px;
.messageme1 {
color: rgba(78, 166, 255, 1);
font-size: 14px;
line-height: 36px;
margin-top: 17px;
margin-left: 30px;
}
.messagege1 {
color: rgba(153, 155, 163, 1);
font-size: 14px;
margin-left: 30px;
}
}
}
.send {
margin-top: 30px;
margin-left: 61px;
.sendtext {
margin-left: 11px;
color: rgba(109, 117, 132, 1);
font-size: 14px;
}
}
.ckb {
margin-top: 20px;
margin-left: 62px;
.sendpeo {
color: rgba(109, 117, 132, 1);
font-size: 14px;
}
.ant-checkbox-inner {
border-radius: 4px;
}
}
.pubtn {
display: flex;
justify-content: center;
margin-top: 25px;
//margin-bottom: 29px;
.pubtn1 {
width: 100px;
height: 40px;
margin-right: 16px;
margin-bottom: 29px;
border: 1px solid #409eff;
border-radius: 4px;
color: rgba(78, 166, 255, 1);
font-size: 14px;
//line-height: 36px;
align-items: center;
background: rgba(255, 255, 255, 1);
}
.pubtn2 {
width: 100px;
height: 40px;
margin-bottom: 29px;
border: 1px solid #409eff;
border-radius: 4px;
color: #ffffff;
font-size: 14px;
align-items: center;
//line-height: 36px;
background: #409eff;
}
}
}
}
}
}
.facemanageModal {
.ant-modal {
width: 532px !important;
@@ -3919,7 +4587,8 @@ export default {
.moreItems {
width: 110px;
height: 80px;
// height: 80px;
padding-bottom: 12px;
display: none;
background: #ffffff;
box-shadow: 2px 3px 9px 3px rgba(0, 0, 0, 0.05);

View File

@@ -34,11 +34,11 @@
</div>
</div>
<div class="tmplh_btn">
<div class="btn btn1">
<div class="btn btn1" @click="searchLevel">
<div class="search"></div>
<div class="btnText btnText1">搜索</div>
</div>
<div class="btn btn2">
<div class="btn btn2" @click="resetLevel">
<div class="search"></div>
<div class="btnText btnText2">重置</div>
</div>
@@ -106,6 +106,7 @@ export default defineComponent({
name: "TemplateLibrary",
setup() {
const state = reactive({
value1:null,
tableData1: [
{
key: "1",
@@ -232,12 +233,39 @@ export default defineComponent({
message.error(`模板操作失败`+error)
})
}
const searchLevel = () => {
const result = state.tableData1.filter(item => item.name == state.value1)
state.tableData1 = result;
};
const resetLevel = () => {
state.value1 = '';
// getLibraryList();
state.tableData1 = [
{
key: "1",
name: "测试模板1",
status: "已发布",
creator: "李部长",
stutime: "2022-10-31 23:12:00",
operation: "operation",
},
{
key: "2",
name: "测试模板2",
status: "未发布",
creator: "李部长",
stutime: "2022-10-31 23:12:00",
operation: "operation",
}
]
};
return {
...toRefs(state),
columns1,
templateHadler,
searchLevel,
resetLevel,
};
},
});