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

@@ -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);