Files
fe-manage/test.html
2023-06-13 13:31:01 +08:00

3346 lines
123 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<div class="leveladddetail">
<div style="display: flex">
<div class="left clearfix">
<div class="leftmain">
<div class="tit" style="margin-left: 18px">关卡</div>
<div class="btn btn3" @click="showModal()" style="margin-left: 19px">
<div class="search"></div>
<div class="btnText">添加关卡</div>
</div>
<div class="maincon" style="background-color: #fff">
<draggable v-model="routerDetail.chapterList" chosenClass="chosen" ghostClass="ghost" forceFallback="true"
group="stage"
animation="500" @end="changeSort">
<template #item="{ element,index }">
<div class="items" :class="activeIndex === index ? 'active' : ''"
@click="changebgc(index)">
<div class="items1">
<div class="boxs_left">
<a-popover placement="topLeft" trigger="click">
<template #content>
<div style="width: 130px">
<div>
{{ element.remark ? element.remark : "暂无说明" }}
</div>
</div>
</template>
<template #title>
<span>关卡说明</span>
<!-- <span style="float:right">
{{ element.status === 0 ? '草稿' : element.status === 1 ? '已发布' : '' }}
</span> -->
</template>
<div style="display:flex;justify-content: flex-start;margin-right: 8px;">
<div class="script">
<span style="font-size: 12px; color: #ffffff">说明</span>
</div>
<!-- <div class="script">
<span style="font-size: 12px; color: #ffffff">{{
element.status === 0 ? '草稿' : element.status
=== 1 ? '已发布' : ''
}}</span>
</div> -->
</div>
</a-popover>
<div class="imgIcon" @click="showModal(element)"></div>
</div>
<div class="boxs_right">
<div class="imgIcon" @click="showDeleteChapter()"></div>
</div>
</div>
<div class="items2">
<a-popover placement="topLeft" v-if="element.name?.length > 10">
<template #content>
<div style="width: 130px">
{{ element.name }}
</div>
</template>
<div class="nname">
{{ element.name }}
</div>
</a-popover>
<div class="nname" v-if="element.name?.length <= 10">
{{ element.name }}
</div>
</div>
</div>
</template>
</draggable>
</div>
</div>
</div>
<a-modal v-model:visible="modal" :centered="true" :footer="null" :closable="clos" wrapClassName="AddLevell"
@cancel="closeModal">
<div class="header">
<div class="headmain">
<div class="add">编辑/添加关卡</div>
<div class="img" style="cursor: pointer" @click="closeModal"></div>
</div>
</div>
<div class="main">
<div class="inma">
<div class="name">
<div class="d" style="margin-top: 2px; margin-right: 2px">
<img style="width: 10px; height: 10px" src="../../assets/images/basicinfo/asterisk.png"/>
</div>
<div class="fir">关卡名称:</div>
<div class="input">
<a-input style="width: 100%" v-model:value="routerDetail.chapterList[activeIndex].name" :maxlength="20"
placeholder="请输入关卡名称"/>
</div>
<div class="co">{{ routerDetail.chapterList[activeIndex].name || 0 }}/20</div>
</div>
<div class="name">
<div
class="d"
style="width: 10px;
height: 10px;
margin-top: 2px;
margin-right: 2px;"></div>
<div class="fir">关卡说明:</div>
<div class="input">
<a-textarea style="width: 100%" v-model:value="routerDetail.chapterList[activeIndex].remark"
:maxlength="100" placeholder="请输入关卡说明"
:rows="5"/>
</div>
<div class="co1">{{ routerDetail.chapterList[activeIndex].remark || 0 }}/100</div>
</div>
<div class="btn">
<button class="btn1" @click="closeModal">取消</button>
<button class="btn2" @click="editChapter">确定</button>
</div>
</div>
</div>
<div class="aeLoading" :style="{ display: addLoading ? 'flex' : 'none' }">
<a-spin :spinning="addLoading" :tip="updateChapterID ? '修改中...' : ''"/>
</div>
</a-modal>
<div class="right" :style="{ display: gqxy_hs ? 'block' : 'none' }">
<div class="addhead">
<div class="filt">
<div class="le">
<div class="leftimg">
<img class="img" :src="routerDetail?.routerInfo?.picUrl"/>
</div>
<div class="imgfor">
<div class="forz">{{ routerDetail?.routerInfo?.name }}</div>
<div class="fort">创建时间:{{ routerDetail?.routerInfo?.createTime }}</div>
</div>
</div>
<div class="rightt">
<div class="select" style="margin-right:90px;">
<span>学习模式:</span>
<a-select v-model:value="routerDetail.routerInfo.unlockMode" ref="select" size="small"
style="width: 150px" disabled>
<a-select-option :value="1">自由学习模式</a-select-option>
<a-select-option :value="2">闯关模式</a-select-option>
<a-select-option :value="3">闯关模式</a-select-option>
</a-select>
<a-button type="primary" size="large" style="border-radius: 8px;margin-left: 24px;"
@click="showModeVisible">切换模式
</a-button>
<!-- <div class="bottonbox" @click="showModeVisible">
<div class="btnText">切换模式</div>
</div> -->
<!-- </div> -->
<unlock-mode ref="unlockModeModal" v-model:unlockModeVisible="unlockModeVisible"
:objData="routerInfo" @saveUnlock="saveUnlock" @closeUnlockModal="closeUnlockModal"/>
</div>
<div class="line"></div>
<router-link :to="{ path: '/leveladd', query:{ routerId: routerId } }">
<div style="display: flex">
<img class="img2" style="margin-right: 22px" src="../../assets/images/leveladd/back.png"/>
<div class="return">返回</div>
</div>
</router-link>
</div>
</div>
</div>
<div class="mid">
<div class="item">
<div class="itcon" @click="showDrawerAddOnline()">
<div class="img">
<img src="../../assets/images/leveladd/zai.png"/>
</div>
<div class="text">在线</div>
</div>
<!-- 添加在线侧弹窗 -->
<div>
<add-online v-model:addonlineVisible="addonlinevisible" @changeData="updateTableData"
v-model:isactive="isactive" v-model:routerId="routerId" v-model:routerTaskId="routerTaskId"
v-model:projectId="projectId" v-model:chooseStageId="chooseStageId"
v-model:projectTaskId="projectTaskId" v-model:edit="edit" v-model:EditOnlineId="EditOnlineId"
:isLevel="isLevel" v-model:taskIdDraft="taskIdDraft" v-model:taskCourseID="taskCourseID"/>
</div>
<!-- 添加在线侧弹窗 -->
<div class="lin"></div>
</div>
<div class="item">
<div class="itcon" @click="showAddface()">
<div class="img">
<img src="../../assets/images/leveladd/mian.png"/>
</div>
<div class="text">面授</div>
</div>
<!-- 添加面授 -->
<add-faceteach @changeData="updateTableData" v-model:edit="edit" v-model:isactive="isactive"
v-model:routerId="routerId" v-model:chooseStageId="chooseStageId"
v-model:routerTaskId="routerTaskId"
v-model:addfaceteachVisible="addfaceteachVisible" v-model:EditFaceId="EditFaceId"
v-model:taskIdDraft="taskIdDraft" v-model:taskCourseID="taskCourseID" :isLevel="isLevel"/>
<!-- 添加面授 -->
<div class="lin"></div>
</div>
<div class="item">
<div class="itcon" @click="showDrawerAddCase()">
<div class="img">
<img src="../../assets/images/leveladd/an.png"/>
</div>
<div class="text">案例</div>
</div>
<!-- 添加案例侧弹窗 -->
<div>
<add-case v-model:addcaseVisible="addcasevisible" @changeData="updateTableData"
v-model:isactive="isactive" v-model:routerId="routerId" v-model:routerTaskId="routerTaskId"
v-model:projectId="projectId" v-model:chooseStageId="chooseStageId"
v-model:projectTaskId="projectTaskId" v-model:edit="edit" v-model:EditCaseId="EditCaseId"
:isLevel="isLevel" v-model:taskIdDraft="taskIdDraft" v-model:taskCourseID="taskCourseID"/>
</div>
<!-- 添加案例侧弹窗 -->
<div class="lin"></div>
</div>
<div class="item">
<div class="itcon">
<div class="img" @click="showDrawerAddHomework">
<img src="../../assets/images/leveladd/zuo.png"/>
</div>
<div class="text">作业</div>
</div>
<!-- 添加作业侧弹窗 -->
<div>
<add-homework v-model:addhomeworkVisible="addhomeworkvisible" :isLevel="isLevel"
@changeData="updateTableData" v-model:isactive="isactive" v-model:edit="edit"
v-model:routerId="routerId" v-model:chooseStageId="chooseStageId"
v-model:EditWorkId="EditWorkId"
v-model:routerTaskId="routerTaskId" v-model:taskIdDraft="taskIdDraft"
v-model:taskCourseID="taskCourseID"/>
</div>
<div class="lin"></div>
</div>
<div class="item">
<div class="itcon">
<div class="img" @click="() => showDrawerAddTest()">
<img src="../../assets/images/leveladd/kao.png"/>
</div>
<div class="text">考试</div>
</div>
<!-- 添加考试侧弹窗 -->
<div>
<add-test v-model:addtestVisible="addtestvisible" :isLevel="isLevel" @changeData="updateTableData"
v-model:isactive="isactive" v-model:edit="edit" v-model:routerId="routerId"
v-model:chooseStageId="chooseStageId" v-model:EditTestId="EditTestId"
v-model:routerTaskId="routerTaskId" v-model:taskIdDraft="taskIdDraft"
v-model:taskCourseID="taskCourseID"/>
</div>
<div class="lin"></div>
</div>
<div class="item">
<div class="itcon" @click="showDrawerAddLive">
<div class="img">
<img src="../../assets/images/leveladd/zhi.png"/>
</div>
<div class="text">直播</div>
</div>
<div>
<add-live v-model:addliveVisible="addlivevisible" :isLevel="isLevel" @changeData="updateTableData"
v-model:isactive="isactive" v-model:routerId="routerId" v-model:chooseStageId="chooseStageId"
v-model:routerTaskId="routerTaskId" v-model:edit="edit" v-model:EditLiveId="EditLiveId"
v-model:taskIdDraft="taskIdDraft" v-model:taskCourseID="taskCourseID"/>
</div>
<div class="lin"></div>
</div>
<div class="item">
<div class="itcon" @click="showDrawerAddRef">
<div class="img">
<img src="../../assets/images/leveladd/wai.png"/>
</div>
<div class="text">外链</div>
</div>
<div>
<add-ref v-model:addrefVisible="addrefvisible" :isLevel="isLevel" @changeData="updateTableData"
v-model:isactive="isactive" v-model:routerId="routerId" v-model:chooseStageId="chooseStageId"
v-model:routerTaskId="routerTaskId" v-model:edit="edit" v-model:EditRefId="EditRefId"
v-model:taskIdDraft="taskIdDraft" v-model:taskCourseID="taskCourseID"/>
</div>
<div class="lin"></div>
</div>
<!-- TODO1216 -->
<div class="item" @click="showDrawerAddDiscuss">
<div class="itcon">
<div class="img">
<img src="../../assets/images/leveladd/tao.png"/>
</div>
<div class="text">讨论</div>
</div>
<div>
<add-discuss v-model:adddiscussVisible="adddiscussvisible" @changeData="updateTableData"
:isLevel="isLevel" v-model:isactive="isactive" v-model:edit="edit"
v-model:routerId="routerId"
v-model:chooseStageId="chooseStageId" v-model:routerTaskId="routerTaskId"
v-model:EditDiscussId="EditDiscussId" v-model:taskIdDraft="taskIdDraft"
v-model:taskCourseID="taskCourseID"/>
</div>
<div class="lin"></div>
</div>
<div class="item" @click="showDrawerAddActive">
<div class="itcon">
<div class="img">
<img src="../../assets/images/leveladd/huo.png"/>
</div>
<div class="text">活动</div>
</div>
<div>
<add-active v-model:addactiveVisible="addactivevisible" :isLevel="isLevel" v-model:edit="edit"
v-model:isactive="isactive" @changeData="updateTableData" v-model:routerId="routerId"
v-model:chooseStageId="chooseStageId" v-model:routerTaskId="routerTaskId"
v-model:EditActiveId="EditActiveId" v-model:taskIdDraft="taskIdDraft"
v-model:taskCourseID="taskCourseID"/>
</div>
<div class="lin"></div>
</div>
<div class="item" @click="showDrawerAddEval">
<div class="itcon">
<div class="img">
<img src="../../assets/images/leveladd/ce.png"/>
</div>
<div class="text">测评</div>
<!-- 添加测评侧弹窗 -->
<div>
<add-eval v-model:addevalVisible="addevalvisible" @changeData="updateTableData"
v-model:isactive="isactive" v-model:routerId="routerId" v-model:routerTaskId="routerTaskId"
v-model:projectId="projectId" v-model:chooseStageId="chooseStageId"
v-model:projectTaskId="projectTaskId" v-model:edit="edit" v-model:EditEvalId="EditEvalId"
:isLevel="isLevel" v-model:taskIdDraft="taskIdDraft" v-model:taskCourseID="taskCourseID"/>
</div>
<!-- 添加测评侧弹窗 -->
</div>
<div class="lin"></div>
</div>
<div class="item" @click="showDrawerAddInvist">
<div class="itcon">
<div class="img">
<img src="../../assets/images/leveladd/diao.png"/>
</div>
<div class="text">评估</div>
<!-- 添加评估侧弹窗 -->
<div>
<add-invist v-model:addinvistVisible="addinvistvisible" :isLevel="isLevel" @changeData="updateTableData"
v-model:isactive="isactive" v-model:edit="edit" v-model:routerId="routerId"
v-model:chooseStageId="chooseStageId" v-model:EditInvistId="EditInvistId"
v-model:routerTaskId="routerTaskId" v-model:taskIdDraft="taskIdDraft"
v-model:taskCourseID="taskCourseID"/>
</div>
<!-- 添加评估侧弹窗 -->
</div>
<div class="lin"></div>
</div>
<!-- TODO1216 -->
<div class="item" @click="showDrawerAddVote">
<div class="itcon">
<div class="img">
<img src="../../assets/images/leveladd/tou.png"/>
</div>
<div class="text">投票</div>
<div>
<add-vote v-model:addvoteVisible="addvotevisible" :isLevel="isLevel" @changeData="updateTableData"
v-model:isactive="isactive" v-model:edit="edit" v-model:routerId="routerId"
v-model:chooseStageId="chooseStageId" v-model:EditVoteId="EditVoteId"
v-model:routerTaskId="routerTaskId" v-model:taskIdDraft="taskIdDraft"
v-model:taskCourseID="taskCourseID"/>
</div>
</div>
<div class="lin"></div>
</div>
<div class="item" @click="showDrawerAddProj">
<div class="itcon">
<div class="img">
<img src="../../assets/images/leveladd/xiang.png"/>
</div>
<div class="text">项目</div>
<div>
<add-project v-model:addprojvisible="addprojvisible" :isLevel="isLevel" @changeData="updateTableData"
v-model:isactive="isactive" v-model:edit="edit" v-model:routerId="routerId"
v-model:chooseStageId="chooseStageId" v-model:EditProjectId="EditProjectId"
v-model:routerTaskId="routerTaskId" v-model:chooseProjectList="chooseProjectList"
v-model:taskIdDraft="taskIdDraft" v-model:taskCourseID="taskCourseID"/>
</div>
</div>
</div>
</div>
<div class="boom"
:style="{ minHeight: level.length > 6 ? ((level.length - 6) * 106 + 512) + 'px' : 512 + 'px' }">
<div class="boomcen">
<div class="title">
<div class="tit_left">
<span>任务列表</span>
</div>
<div class="tit_right">
<div class="btn btn1" @click="showChangeModal">
<div class="btnText">移动任务到关卡</div>
</div>
<div class="btn btn2" @click="showDeleteALLModal(1)">
<div class="imgIcon"></div>
<div class="btnText">批量删除</div>
</div>
</div>
</div>
<div class="tableBox">
<div style="
height: 50px;
display: flex;
justify-content: space-between;
align-items: center;
background-color: #eff4fc;
font-size: 14px;
font-weight: 400;
color: #999ba3;
line-height: 36px;
border-bottom: 1px solid #f2f6fc;
">
<div style="
width: 87px;
text-align: center;
display: flex;
margin-left: 46px;
">
<img style="
width: 16px;
height: 16px;
cursor: pointer;
margin-top: 12px;
" :src="
selectAll === 0
? require('../../assets/images/notSelect.png')
: selectAll === 1
? require('../../assets/images/selectAll.png')
: require('../../assets/images/select.png')
" @click="selectRowAll"/>
<!-- <a-checkbox
v-model:checked="selectAll"
@change="selectRowAll"
>
</a-checkbox> -->
<div style="margin-top: 2px; margin-left: 8px">类型</div>
</div>
<div style="width: 120px; text-align: center">任务名称</div>
<div style="width: 120px; text-align: center">必修/选修</div>
<div style="width: 87px; text-align: center">时长</div>
<div style="width: 87px; text-align: center">状态</div>
<div style="width: 120px; text-align: center; margin-right: 20px">
操作
</div>
</div>
<draggable v-model="routerDetail.chapterList[activeIndex].taskList" chosenClass="chosen"
ghostClass="ghost" forceFallback="true" group="task"
animation="500" @end="onEnd">
<template #item="{ element }">
<div style="
height: 50px;
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 1px solid #f2f6fc;
font-size: 14px;
font-weight: 400;
color: #4f5156;
line-height: 36px;" class="tableRow">
<div style="
width: 87px;
text-align: center;
margin-left: 46px;
position: relative;">
<div class="racona">
<div class="img" style="
cursor: pointer;
margin-top: 2px;
margin-right: 9px;
position: absolute;
left: -25px;"></div>
<a-checkbox :id="element.routerTaskId" v-model:checked="element.checked" @change="changeRow">
</a-checkbox>
<div style="margin-top: 2px; margin-left: 8px">
{{ checkType(element.type) }}
</div>
</div>
</div>
<div style="
width: 120px;
text-align: center;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
" :title="element.creater">
{{ element.name }}
</div>
<div style="width: 120px; text-align: center">
<div class="opat">
<div class="opacationt clearfix">
<a-switch style="margin-left: -50px; margin-top: 3px" v-model:checked="element.flag"
size="small" active-color="red" @click="changeCourseType(element)"/>
<div class="showt clearfix">
<div class="bi" :style="{
'z-index': element.checked1 ? 999 : 998,
}">
必修
</div>
<div class="xuan">选修</div>
</div>
</div>
</div>
</div>
<div style="width: 87px; text-align: center">
{{ element.duration ? element.duration + "分钟" : "-" }}
</div>
<div style="width: 87px; text-align: center">
{{ element.status === 0 ? '草稿' : element.status === 1 ? '已发布' : '' }}
</div>
<div style="
width: 120px;
text-align: center;
margin-right: 20px;">
<div class="opa">
<div class="opacation">
<span
style="color: #4ea6ff;
margin-right: 25px;
cursor: pointer;"
@click="
decideType(
element.lei,
element.courseId,
element.id,
element.routerTaskId,
element.courseId
)">
编辑
</span>
<span style="color: #4ea6ff; cursor: pointer" @click="showDeleteModal(element.id)">
删除
</span>
</div>
</div>
</div>
</div>
</template>
</draggable>
</div>
<!-- 无数据样式 -->
<div class="notable" :style="{ display: stm_hs ? 'block' : 'none' }">
<div class="notablebox">
<div class="boxbody">
<div class="boximg"></div>
<div class="boxtitle">
<span style="color: #ffb64e; font-size: 20px">无任务</span>
</div>
<div class="boxtitle2">
<span style="color: #878b92">请点击上方,创建任务</span>
</div>
</div>
<div class="smallleft"></div>
<div class="smallright"></div>
</div>
</div>
<!-- 无数据样式 -->
</div>
</div>
</div>
<div class="right" :style="{ display: gqxy_hs ? 'none' : 'block' }">
<div class="addhead">
<div class="filt">
<div class="le">
<div class="leftimg">
<img class="img" src="../../assets/px.jpg"/>
</div>
<div class="imgfor">
<div class="forz">产品经理进阶路径</div>
<div class="fort">创建时间2022-07-21 00:00</div>
</div>
</div>
<div class="rightt">
<!-- 2022-11-30注释 后面放开 -->
<div class="select">
<span>学习模式:</span>
<!-- <div class="inputbox"> -->
<!-- <input type="text" :placeholder="unlockMode === 1?'自由学习模式':unlockMode === 2?'闯关模式':''" /> -->
<a-select v-model:value="unlockMode" ref="select" size="small" style="width: 150px" disabled>
<a-select-option :value="1">自由学习模式</a-select-option>
<a-select-option :value="2">闯关模式</a-select-option>
<a-select-option :value="3">闯关模式</a-select-option>
</a-select>
<a-button type="primary" size="large" style="border-radius: 8px;margin-left: 24px;"
@click="showModeVisible">切换模式
</a-button>
<!-- <div class="bottonbox" @click="showModeVisible">
<div class="btnText">切换模式</div>
</div> -->
<!-- </div> -->
<unlock-mode ref="unlockModeModal" :unlockModeVisible="unlockModeVisible"
:objData="routerInfo" @saveUnlock="saveUnlock" @closeUnlockModal="closeUnlockModal"/>
</div>
<div class="line"></div>
<router-link :to="{ path: '/leveladd', query:{ routerId: routerId } }">
<div style="display: flex">
<img class="img2" src="../../assets/images/leveladd/back.png"/>
<div class="return">返回</div>
</div>
</router-link>
</div>
</div>
</div>
<div class="boom">
<div class="boomcen">
<div class="xwid">
<div class="xin">
<div class="xheadb">
<button class="addx" @click="showAddStu">添加学员</button>
<button class="addd" @click="showImpStu">导入学员</button>
<button class="addd" @click="showDeleteALLModal(2)">
批量删除
</button>
</div>
<div class="tablebox1" style="margin-top: 20px">
<a-table style="border: 1px solid #f2f6fe" :columns="tableDataFunc2()" :data-source="tableData2"
:expandRowByClick="true" :pagination="false"
:row-selection="{
columnWidth: 30,
selectedRowKeys: selectedRowKeys,
onChange: onSelectChange,
}"/>
</div>
<!-- 无数据样式 -->
<div class="notable" :style="{ display: stm_hs ? 'block' : 'none' }">
<div class="notablebox">
<div class="boxbody">
<div class="boximg"></div>
<div class="boxtitle">
<span style="color: #ffb64e; font-size: 20px">无学员</span>
</div>
<div class="boxtitle2">
<span style="color: #878b92">请添加学员或导入学员</span>
</div>
</div>
<div class="smallleft"></div>
<div class="smallright"></div>
</div>
</div>
<!-- 无数据样式 -->
</div>
</div>
<div class="pad"></div>
</div>
</div>
</div>
<div class="footbtn">
<div class="btnbox">
<div class="btn btn1" @click="gqxy_hShow">
<div class="btnText">上一步</div>
</div>
<div class="btn btn2">
<div class="btnText">保存</div>
</div>
</div>
</div>
</div>
<div class="footbtn">
<div class="btnbox">
<div class="btn btn2" @click="temporaryStorage">
<div class="btnText">暂存</div>
</div>
<div class="btn btn2" @click="submitStorage">
<div class="btnText">确定</div>
</div>
<div class="btn btn1" @click="cancelStorage">
<div class="btnText">取消</div>
</div>
</div>
</div>
<!-- 添加学员抽屉 -->
<add-stu v-model:AddSvisible="AddSvisible"/>
<!-- 导入学员抽屉 -->
<imp-stu v-model:AddImpStuvisible="AddImpStuvisible"/>
<!-- 添加讨论侧弹窗 -->
<!-- 添加活动侧弹窗 -->
<!-- 批量删除学员弹窗 -->
<a-modal v-model:visible="deleteAll" :footer="null" :closable="closeDeleteAll" 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="closedeleteAll"></div>
</div>
<div class="body">
<span>请确认是否批量删除任务</span>
</div>
<div class="del_btnbox">
<div class="del_btn btn1" @click="closedeleteAll">
<div class="btnText">取消</div>
</div>
<div class="del_btn btn2" @click="subdeleteAll">
<div class="btnText">确定</div>
</div>
</div>
</div>
</div>
</a-modal>
<!-- 是否确认删除任务弹窗 -->
<!-- 确认删除阶段弹窗 -->
<a-modal v-model:visible="deleteModal" :footer="null" :closable="cC" wrapClassName="ConfirmModal" 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="closeConfirm"></div>
</div>
<div class="body">
<span>您确定要删除此任务吗</span>
</div>
<div class="del_btnbox">
<div class="del_btn btn1" @click="closeConfirm">
<div class="btnText">取消</div>
</div>
<div class="del_btn btn2" @click="deleteLevelTask">
<div class="btnText">确定</div>
</div>
</div>
</div>
</div>
</a-modal>
<!-- 移动任务到阶段 -->
<a-modal style="padding: 0" :closable="sh" v-model:visible="visiblene" :footer="null" centered="true"
wrapClassName="moveModal">
<div class="con">
<div class="header">
<div class="inhe">
<div class="mod"></div>
<div class="tz">选择任务移动到关卡</div>
</div>
</div>
<div class="mid">
<div class="inher">
<div class="cur">已选中{{ selectRow.length }}个任务</div>
<div class="select">
<a-select v-model:value="curLevel" style="width: 100%" placeholder="请选择阶段" :options="level"
@change="handleChangeStage" allowClear></a-select>
</div>
<div class="btn">
<button style="cursor: pointer" class="sameb btn1" @click="closeChangeModal">
取消
</button>
<button style="cursor: pointer" class="sameb btn2" @click="moveTask">
确定
</button>
</div>
</div>
</div>
</div>
</a-modal>
<!-- 是否删除关卡弹窗 -->
<a-modal v-model:visible="deleteChapterModal" :footer="null" :closable="cC" wrapClassName="ConfirmModal"
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="closeDeleteChapter"></div>
</div>
<div class="body">
<span>您确定要删除此关卡</span>
</div>
<div class="del_btnbox">
<div class="del_btn btn1" @click="closeDeleteChapter">
<div class="btnText">取消</div>
</div>
<div class="del_btn btn2" @click="deleteChapter">
<div class="btnText">确定</div>
</div>
</div>
</div>
</div>
</a-modal>
</div>
</template>
<script>
import {reactive, toRefs, onMounted, onUnmounted, ref} 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 AddHomework from "../../components/drawers/AddHomework.vue";
import AddTest from "../../components/drawers/AddTest.vue";
import AddDiscuss from "../../components/drawers/AddDiscuss.vue";
import AddActive from "../../components/drawers/AddActive.vue";
import AddEval from "../../components/drawers/AddEval.vue";
import AddInvist from "../../components/drawers/AddInvist.vue";
import AddVote from "../../components/vote/AddVote.vue";
import AddLive from "../../components/drawers/AddLive.vue";
import AddRef from "../../components/drawers/AddRef.vue";
import AddProject from "../../components/drawers/AddProject.vue";
import AddFaceteach from "../../components/drawers/AddFaceteach.vue";
import * as api from "../../api/indexLevel";
import {
GetRouterDetail,
changeChapterSort,
changeTasklistSort,
releaseRouter,
cancelRouterTask
} from "@/api/indexTask";
import {message, Modal} from "ant-design-vue";
import {deleteStudyTask} from "@/api/indexStudy";
import draggable from "vuedraggable";
import {editTask} from "@/api/indexTaskadd";
import {editRoutered} from '@/api/indexLearningPath'
import {useRouter, useRoute} from "vue-router";
import UnlockMode from "../../components/drawers/UnlockMode.vue";
export default {
name: "LevelAddDetail",
components: {
AddStu,
ImpStu,
AddOnline,
AddCase,
AddHomework,
AddDiscuss,
AddActive,
AddTest,
AddEval,
AddInvist,
AddVote,
AddLive,
AddRef,
draggable,
UnlockMode,
AddFaceteach,
AddProject,
},
setup() {
const router = useRouter();
const route = useRoute();
const unlockModeModal = ref()
const state = reactive({
routerId: route.query.routerId,
routerDetail: {routerInfo: {}, chapterList: [{taskList: []}]},
level: [],
unlockMode: 1, // 学习模式
tableData: [],
tableData2: [],
addprojvisible: false,
addfaceteachVisible: false,
AddSvisible: false, //添加学员抽屉
AddImpStuvisible: false, //导入学员抽屉
addlivevisible: false, //添加直播抽屉
addrefvisible: false, //添加外链抽屉
modal: false,
clos: false,
stm_hs: false,
deleteAll: false,
closeDeleteAll: false,
deleteModal: false, // 删除弹窗
deleteID: "", // 要删除的任务的id
editID: "", // 要编辑的任务id
EditOnlineId: "", // 要编辑的 workid
EditCaseId: "",
EditWorkId: "",
EditTestId: "",
EditRefId: "",
EditLiveId: "",
EditDiscussId: "",
EditActiveId: "",
EditEvalId: "",
EditInvistId: "",
EditVoteId: "",
EditFaceId: "",
//项目
EditProjectId: "",
routerTaskId: "",
taskIdDraft: "",
taskCourseID: "",
chapterId: "",
stageId: "",
cC: false,
value1: "",
value2: "",
selectedRowKeys: [],
edit: false, //是否点击编辑
isLevel: 1, //学习路径1项目2模板库3
gqxy_hs: true,
isactive: 0,
activeIndex: 0,
adddiscussvisible: false, //讨论抽屉
isStudiscuss: false,
addactivevisible: false, //活动抽屉
addonlinevisible: false,
addcasevisible: false,
addhomeworkvisible: false,
addtestvisible: false,
addevalvisible: false,
addinvistvisible: false,
addvotevisible: false,
// 表示当前触发列表的id,用来发送编辑和删除
ListChoosedId: 0,
selectRow: [], //选择行
selectAll: 0, //0未选择1全选2部分选择
visiblene: false, //移动任务弹窗
removeStageId: null,
styTitle: null,
creTime: null,
picUrl: null,
routerInfo: {},
//项目抽屉参数
time: undefined,
projId: null, //选项选到的id
projName: "", //选项选到的name
projectId: null,
projectTaskId: null,
chooseStageId: null,
chooseChapterId: null,
updateChapterID: null, //编辑关卡id
updateID: null, //编辑关卡id
deleteChapterModal: false, //删除关卡弹窗
deleteChapterId: null, //删除关卡id
unlockModeVisible: false, //切换模式抽屉
chooseProjectList: null, //选择的阶段下的任务列表
curLevel: null, //选择移动到的关卡名称
deleteType: null, //批量删除学员/任务 1任务 2学员
addLoading: false, //添加编辑关卡动画
});
const showModal = () => {
state.modal = true;
};
const closeModal = () => {
state.modal = false;
state.value1 = "";
state.value2 = "";
state.updateChapterID = null;
};
// 关闭模式弹框
const closeUnlockModal = () => {
state.unlockModeVisible = false;
}
const saveUnlock = (num) => {
state.routerInfo.unlockMode = num
editRoutered(state.routerInfo).then(res => {
if (res.data.code == 200) {
message.success(res.data.msg)
getDetail()
state.unlockModeVisible = false
} else {
message.error(res.data.msg)
}
}).catch(e => {
console.log(e)
message.error(e.data.msg)
})
}
//新建关卡
const editChapter = () => {
if (!state.value1) return message.warning("请输入关卡名称");
state.addLoading = true;
if (state.updateChapterID) {
let obj = {
name: state.value1,
remark: state.value2,
routerId: state.routerId,
id: state.updateID,
chapterId: state.updateChapterID,
};
api.updateChapter(obj)
.then((res) => {
console.log("修改成功", res);
message.success("修改成功");
state.addLoading = false;
localStorage.setItem("chapterId", res.data.data.chapterId);
getDetail();
closeModal();
})
.catch((err) => {
console.log("修改失败", err);
});
} else {
let obj = {
name: state.value1,
remark: state.value2,
routerId: state.routerId,
};
api.editChapter(obj)
.then((res) => {
console.log("创建成功", res);
// setTimeout(() => {
// console.log("创建成功", res);
// }, 1000);
message.success("创建成功");
state.value1 = "";
state.value2 = "";
state.modal = false;
state.addLoading = false;
localStorage.setItem("chapterId", res.data.data.chapterId);
getDetail();
closeModal();
})
.catch((err) => {
console.log("创建失败", err);
});
}
};
//打开删除关卡弹窗
const showDeleteChapter = () => {
state.deleteChapterModal = true;
};
//关闭删除关卡弹窗
const closeDeleteChapter = () => {
state.deleteChapterId = null;
state.deleteChapterModal = false;
};
//删除关卡
const deleteChapter = () => {
console.log("chapterId", state.deleteChapterId);
let obj = {
id: state.deleteChapterId,
};
api
.deleteChapter(obj)
.then((res) => {
if (res.data.code == 200) {
console.log("删除关卡成功", res);
message.destroy();
message.success("删除关卡成功");
let chapter = localStorage.getItem("chapterId");
if (state.deleteChapterId == chapter) {
localStorage.removeItem("chapterId");
}
closeDeleteChapter();
getDetail();
} else if (res.data.code == -1) {
message.destroy();
message.success("至少保留一个关卡");
closeDeleteChapter();
}
})
.catch((err) => {
console.log("删除关卡失败", err);
});
};
// 关卡拖动排序
const changeSort = () => {
const sortArr = state.level.map(s => s.sort).sort((a, b) => Number(a) - Number(b))
state.level.map((s, i) => {
s.sort = sortArr[i]
return s
})
changeChapterSort(state.level).then((res) => {
console.log(res)
if (res.data.code === 200) {
message.success('关卡顺序已修改')
getDetail()
}
// getDetail()
})
}
// 任务拖动排序
const onEnd = () => {
const sortArr = state.tableData.map(s => s.sort).sort((a, b) => Number(a) - Number(b))
state.tableData.map((s, i) => {
s.sort = sortArr[i]
return s
})
changeTasklistSort(state.tableData).then(res => {
console.log(res)
if (res.data.code === 200) {
message.success('任务顺序已修改')
getDetail()
}
})
}
//在线抽屉
const showDrawerAddOnline = (id, eleId, routerTaskId, courseId) => {
state.addonlinevisible = true;
state.EditOnlineId = id;
state.routerTaskId = routerTaskId;
state.taskIdDraft = eleId;
state.taskCourseID = courseId;
};
//面授抽屉
const showAddface = (id, eleId, routerTaskId, courseId) => {
state.addfaceteachVisible = true;
state.EditFaceId = id;
state.routerTaskId = routerTaskId;
state.taskIdDraft = eleId;
state.taskCourseID = courseId;
};
//案例抽屉
const showDrawerAddCase = (id, eleId, routerTaskId, courseId) => {
state.addcasevisible = true;
state.EditCaseId = id;
state.routerTaskId = routerTaskId;
state.taskIdDraft = eleId;
state.taskCourseID = courseId;
};
// 作业抽屉
const showDrawerAddHomework = (id, eleId, routerTaskId, courseId) => {
state.addhomeworkvisible = true;
state.EditWorkId = id;
state.routerTaskId = routerTaskId;
state.taskIdDraft = eleId;
state.taskCourseID = courseId;
};
//考试抽屉
const showDrawerAddTest = (id, eleId, routerTaskId, courseId) => {
state.addtestvisible = true;
state.EditTestId = id;
state.routerTaskId = routerTaskId;
state.taskIdDraft = eleId;
state.taskCourseID = courseId;
};
//测试抽屉
const showDrawerAddEval = (id, eleId, routerTaskId, courseId) => {
state.addevalvisible = true;
state.EditEvalId = id;
state.routerTaskId = routerTaskId;
state.taskIdDraft = eleId;
state.taskCourseID = courseId;
};
//评估抽屉
const showDrawerAddInvist = (id, eleId, routerTaskId, courseId) => {
state.addinvistvisible = true;
state.routerTaskId = routerTaskId;
state.EditInvistId = id;
state.taskIdDraft = eleId;
state.taskCourseID = courseId;
};
//投票抽屉
const showDrawerAddVote = (id, eleId, routerTaskId, courseId) => {
state.addvotevisible = true;
state.EditVoteId = id;
state.routerTaskId = routerTaskId;
state.taskIdDraft = eleId;
state.taskCourseID = courseId;
};
//直播抽屉
const showDrawerAddLive = (id, eleId, routerTaskId, courseId) => {
state.addlivevisible = true;
state.EditLiveId = id;
state.routerTaskId = routerTaskId;
state.taskIdDraft = eleId;
state.taskCourseID = courseId;
};
//外链抽屉
const showDrawerAddRef = (id, eleId, routerTaskId, courseId) => {
state.addrefvisible = true;
state.EditRefId = id;
state.routerTaskId = routerTaskId;
state.taskIdDraft = eleId;
state.taskCourseID = courseId;
};
//讨论抽屉
const showDrawerAddDiscuss = (id, eleId, routerTaskId, courseId) => {
state.adddiscussvisible = true;
state.EditDiscussId = id;
state.routerTaskId = routerTaskId;
state.taskIdDraft = eleId;
state.taskCourseID = courseId;
};
//活动抽屉
const showDrawerAddActive = (id, eleId, routerTaskId, courseId) => {
state.addactivevisible = true;
state.EditActiveId = id;
state.routerTaskId = routerTaskId;
state.taskIdDraft = eleId;
state.taskCourseID = courseId;
};
//打开项目抽屉
const showDrawerAddProj = (id, eleId, routerTaskId, courseId) => {
state.addprojvisible = true;
state.EditProjectId = id;
state.routerTaskId = routerTaskId;
state.taskIdDraft = eleId;
state.taskCourseID = courseId;
};
//数据变化
const updateTableData = (data) => {
console.log("添加数据", data);
getDetail();
};
const getDetail = () => {
GetRouterDetail(state.routerId)
.then((res) => {
//给level赋初始值
state.level = res.data.data.chapterList;
state.styTitle = res.data.data.routerInfo.name;
state.creTime = res.data.data.routerInfo.createTime;
state.picUrl = res.data.data.routerInfo.picUrl;
state.unlockMode = res.data.data.routerInfo.unlockMode
state.unlockMode = state.unlockMode ? state.unlockMode : 1
// console.log('学习模式', state.unlockMode)
state.routerInfo = res.data.data.routerInfo
//增加两个字段
state.level.forEach((item) => {
item["value"] = item.chapterId;
item["label"] = item.name;
});
console.log("路径图详情", res.data.data);
state.routerDetail = res.data.data
state.isactive = state.routerDetail.chapterList.length ? state.routerDetail.chapterList[0].id : ''
})
};
const showAddStu = () => {
state.AddSvisible = true;
};
const showImpStu = () => {
state.AddImpStuvisible = true;
};
const checkType = (index) => {
let typeRules = [
"",
"在线",
"面授",
"案例",
"作业",
"考试",
"直播",
"外链",
"讨论",
"活动",
"测评",
"评估",
"投票",
"项目",
];
return typeRules[index];
};
const tableDataFunc2 = () => {
const columns = [
{
title: "姓名",
dataIndex: "name",
key: "name",
width: 160,
align: "left",
ellipsis: true,
className: "classify",
scopedSlots: {customRender: "action"}, //引入的插槽
customRender: (text) => {
return (
<div class="racona">
<span> {text.record.name}</span>
</div>
);
},
},
{
title: "部门",
dataIndex: "com",
// width: "30%",
key: "com",
width: 110,
align: "center",
className: "h",
},
// {
// title: "岗位",
// dataIndex: "gang",
// key: "gang",
// width: 110,
// align: "center",
// className: "h",
// },
{
title: "当前关卡",
dataIndex: "cur",
key: "cur",
width: 110,
align: "center",
className: "h",
},
{
title: "进度",
dataIndex: "jin",
key: "jin",
width: 110,
align: "center",
className: "h",
},
{
title: "开始时间",
dataIndex: "time",
key: "time",
width: 120,
align: "center",
className: "h",
},
{
title: "操作",
className: "h",
dataIndex: "opacation",
key: "opacation",
width: 140,
align: "center",
scopedSlots: {customRender: "action"}, //引入的插槽
customRender: () => {
return (
<div class="opa">
<div class="opacation">
<span style="color:#4EA6FF;cursor:pointer">删除</span>
</div>
</div>
);
},
},
];
return columns;
};
const onSelectChange = (selectedRowKeys) => {
console.log("selectedRowKeys changed: ", selectedRowKeys);
state.selectedRowKeys = selectedRowKeys;
};
const drawertableColumns = () => {
const drawercolumns = [
{
title: "项目名称",
dataIndex: "name",
key: "projectName",
width: 200,
ellipsis: true,
},
{
title: "项目经理",
dataIndex: "manager",
key: "manager",
width: 100,
align: "center",
},
{
title: "创建人",
dataIndex: "creator",
key: "creater",
width: 100,
align: "center",
},
{
title: "创建时间",
dataIndex: "time",
key: "time",
width: 180,
align: "center",
},
];
return drawercolumns;
};
// const getClientHeight = () => {
// state.rightheight =
// document.getElementsByClassName("addhead")[0].offsetHeight +
// document.getElementsByClassName("mid")[0].offsetHeight +
// document.getElementsByClassName("boom")[0].offsetHeight +
// 40 +
// "px";
// };
onMounted(() => {
document.getElementsByTagName("main")[0].style.background =
"rgb(245, 247, 250,1)";
document.getElementsByTagName("main")[0].style.boxShadow = "none";
getDetail();
});
onUnmounted(() => {
document.getElementsByTagName("main")[0].style.background = "#ffffff";
document.getElementsByTagName("main")[0].style.boxShadow =
"0px 1px 35px 0px rgba(118, 136, 166, 0.07)";
localStorage.removeItem("chapterId");
});
const changebgc = (index) => {
state.activeIndex = index
};
const gqxy_hShow = () => {
state.gqxy_hs = !state.gqxy_hs;
};
const showDeleteALLModal = (type) => {
if (state.selectRow.length === 0) {
message.destroy();
return message.warning("请选择要删除的任务");
}
state.deleteAll = true;
state.deleteType = type;
};
const closedeleteAll = () => {
state.deleteAll = false;
state.deleteType = null;
};
const subdeleteAll = () => {
deletecTaskAll();
state.deleteType = null;
};
const showDeleteModal = (id) => {
state.deleteID = id;
console.log(id);
state.deleteModal = true;
};
const closeConfirm = () => {
state.deleteModal = false;
state.deleteID = "";
state.editID = "";
};
const deleteLevelTask = () => {
deleteStudyTask({routerTaskIds: state.deleteID})
.then((res) => {
state.deleteModal = false;
message.destroy();
message.success("删除成功");
state.selectRow = []; //选择行
state.selectAll = 0; //0未选择1全选2部分选择
getDetail();
console.log("删除成功", res);
})
.catch((err) => {
message.destroy();
message.error("删除失败");
console.log(err);
});
};
const closeDeleteModel = () => {
state.deleteModal = false;
state.deleteID = "";
};
// 子组件触发的清空 editid 事件
const clearEditData = () => {
state.editID = "";
getDetail();
};
//选择单个任务
const changeRow = (e) => {
//selectRow:已经选择的任务的id数组
let arr = state.selectRow;
if (e.target.checked) {
arr.push(e.target.id);
} else {
arr.map((value, index) => {
if (value == e.target.id) {
arr.splice(index, 1);
}
});
}
state.selectRow = arr;
//判断是否是全部选择或者是全部未选择来修改selectAll框的样式
if (arr.length !== 0) {
if (arr.length === state.tableData.length) {
state.selectAll = 1;
} else {
state.selectAll = 2;
}
} else {
state.selectAll = 0;
}
console.log("state.selectRow", state.selectRow, state.selectAll);
};
//全选任务或全不选任务
const selectRowAll = () => {
let arr = state.tableData;
let array = [];
if (state.selectAll === 0 || state.selectAll === 2) {
arr.map((value) => {
// console.log("value", value, index);
value.checked = true;
array.push(value.id);
// if (value == e.target.id) {
// arr.splice(index, 1);
// }
state.selectAll = 1;
});
} else {
array = [];
arr.map((value) => {
// console.log("value", value, index);
value.checked = false;
state.selectAll = 0;
});
}
state.tableData = arr;
state.selectRow = array;
};
//批量删除任务
const deletecTaskAll = () => {
let arr = state.selectRow;
console.log("选择的行信息", arr);
arr.map((value) => {
let obj = {
routerTaskIds: value,
};
console.log("value", value);
api
.deleteTask(obj)
.then((res) => {
console.log(res);
state.deleteAll = false;
// state.deleteType = null;
message.destroy();
state.selectRow = []; //选择行
state.selectAll = 0; //0未选择1全选2部分选择
message.success("批量删除成功");
getDetail();
})
.catch((err) => {
console.log(err);
});
});
};
//移动任务到关卡
const moveTask = () => {
if (state.isactive == state.removeStageId) {
message.destroy();
message.warning("选择的任务已在当前关卡");
} else if (state.removeStageId == null) {
message.destroy();
message.warning("请选择关卡");
} else {
let obj = {
chapterId: state.removeStageId,
routerTaskIdList: state.selectRow,
};
console.log("移动关卡obj", obj);
api
.moveTask(obj)
.then((res) => {
console.log("移动成功", res);
message.destroy();
message.success("移动成功");
localStorage.setItem("chapterId", state.chooseChapterId);
state.selectRow = []; //选择行
state.selectAll = 0; //0未选择1全选2部分选择
getDetail();
})
.catch((err) => {
console.log("移动失败", err);
});
state.visiblene = false;
state.curLevel = null;
}
};
//编辑的按钮
const decideType = (type, id, eleId, routerTaskId, courseId) => {
state.edit = true;
console.log(type, id);
if (type == "外链") {
showDrawerAddRef(id, eleId, routerTaskId, courseId);
} else if (type == "直播") {
showDrawerAddLive(id, eleId, routerTaskId, courseId);
} else if (type == "作业") {
showDrawerAddHomework(id, eleId, routerTaskId, courseId);
} else if (type == "考试") {
showDrawerAddTest(id, eleId, routerTaskId, courseId);
} else if (type == "讨论") {
showDrawerAddDiscuss(id, eleId, routerTaskId, courseId);
} else if (type == "活动") {
showDrawerAddActive(id, eleId, routerTaskId, courseId);
} else if (type == "测评") {
showDrawerAddEval(id, eleId, routerTaskId, courseId);
} else if (type == "评估") {
showDrawerAddInvist(id, eleId, routerTaskId, courseId);
} else if (type == "投票") {
showDrawerAddVote(id, eleId, routerTaskId, courseId);
} else if (type == "项目") {
showDrawerAddProj(id, eleId, routerTaskId, courseId);
} else if (type == "在线") {
showDrawerAddOnline(id, eleId, routerTaskId, courseId);
} else if (type == "案例") {
showDrawerAddCase(id, eleId, routerTaskId, courseId);
} else if (type == "面授") {
showAddface(id, eleId, routerTaskId, courseId);
}
};
const changeCourseType = (ele) => {
console.log("任务id", ele.id);
console.log("flag", ele.checked1);
let obj = {
chapterId: ele.chapterId,
courseId: ele.courseId,
duration: ele.cretime == "-" ? 0 : ele.cretime,
flag: ele.checked1,
name: ele.creater,
routerId: ele.routerId,
routerTaskId: ele.routerTaskId,
type: ele.type,
};
editTask(obj)
.then((res) => {
console.log(`修改状态成功${res.data}`);
message.destroy();
message.success("修改成功");
})
.catch((err) => {
console.log(`修改状态失败${err.data}`);
message.destroy();
message.warning("修改失败");
});
};
const showChangeModal = () => {
if (state.selectRow.length == 0) {
message.destroy();
return message.warning("请选择要移动的任务");
} else {
state.visiblene = true;
}
};
const closeChangeModal = () => {
state.visiblene = false;
state.curLevel = null;
};
const handleChangeStage = (value, option) => {
console.log("阶段改变", value, option);
state.removeStageId = option.chapterId;
state.curLevel = option.name;
};
//显示切换模式抽屉
const showModeVisible = () => {
state.unlockModeVisible = true;
};
//暂存
const temporaryStorage = () => {
message.success("暂存成功");
};
//确定
// 确定,将当前暂存的草稿发布
//
const submitStorage = () => {
// 发布'
// let obj = {}
console.log(state.routerDetail, state.routerId)
// state.routerDetail
releaseRouter(state.routerId).then(res => {
// console.log("发布",res.data.data)
if (res.data.code === 200) {
message.success("关卡和任务数据已保存,将返回上一页")
setTimeout(() => {
router.push({
path: "/leveladd",
query: {routerId: state.routerId}
});
}, 3000);
}
})
};
//取消
const cancelStorage = () => {
// 查询所有数据中是否有status===0的有的话说明数据未保存
let bool = state.routerDetail.chapterList.some(s => s.status === 0 || s.taskList.some(t => t.status === 0))
if (bool) {
Modal.confirm({
content: () => "有未保存的草稿,确定舍弃草稿吗?",
onOk() {
cancelRouterTask(state.routerId).then(res => {
if (res.data.code === 200) {
message.success("取消草稿")
setTimeout(() => {
router.push({
path: "/leveladd",
query: {routerId: state.routerId}
});
}, 5000)
}
})
}
})
} else {
router.push({
path: "/leveladd",
query: {routerId: state.routerId}
});
}
};
return {
...toRefs(state),
unlockModeModal,
// tableDataFunc,
checkType,
tableDataFunc2,
showModal,
closeModal,
showAddStu,
showImpStu,
onEnd,
// drawercolumns,
onSelectChange,
changebgc,
gqxy_hShow,
showDeleteALLModal,
// delete_exit,
closeConfirm,
drawertableColumns,
changeSort,
editChapter,
// updateChapter,
showDrawerAddOnline,
showDrawerAddCase,
showDrawerAddHomework,
showDrawerAddTest,
showDrawerAddEval,
showDrawerAddInvist,
showDrawerAddVote,
deleteLevelTask,
showDrawerAddLive,
showDrawerAddRef,
showDrawerAddProj,
closeDeleteModel,
clearEditData,
showDrawerAddDiscuss,
showDrawerAddActive,
selectRowAll,
changeRow,
deletecTaskAll,
moveTask,
showDeleteModal,
decideType,
updateTableData,
changeCourseType,
showChangeModal,
closeChangeModal,
handleChangeStage,
showDeleteChapter,
closeDeleteChapter,
deleteChapter,
showModeVisible,
showAddface,
temporaryStorage,
submitStorage,
cancelStorage,
closedeleteAll,
subdeleteAll,
saveUnlock,
closeUnlockModal
};
},
};
</script>
<style lang="scss">
.ConfirmModal {
.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;
.del_header {
position: absolute;
width: calc(100%);
height: 40px;
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;
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;
}
}
}
}
}
}
}
}
.moveModal {
.ant-modal {
width: 549px !important;
height: 245px !important;
.ant-modal-content {
width: 549px !important;
height: 245px !important;
.ant-modal-body {
padding: 0 !important;
width: 549px !important;
height: 245px !important;
.con {
width: 100%;
height: 100%;
.header {
width: 100%;
display: flex;
height: 68px;
position: relative;
justify-content: center;
background: linear-gradient(rgba(78, 166, 255, 0.2) 0%,
rgba(78, 166, 255, 0) 100%);
.inhe {
width: 80%;
height: 100%;
display: flex;
justify-content: space-between;
align-items: center;
.mod {
left: 30px;
top: 27px;
position: absolute;
width: 18px;
height: 17px;
background-image: url(../../assets/images/leveladd/mod.png);
}
.tz {
color: #000000;
font-weight: 400;
font-size: 16px;
}
.mg {
width: 20px;
height: 20px;
background-image: url(../../assets/images/basicinfo/close22.png);
background-size: 100% 100%;
cursor: pointer;
}
}
}
.mid {
width: 100%;
display: flex;
height: 100%;
justify-content: center;
.inher {
width: 80%;
height: 100%;
.cur {
color: #6f6f6f;
font-size: 14px;
}
.select {
margin-top: 10px;
}
.btn {
width: 100%;
display: flex;
justify-content: center;
margin-top: 30px;
.sameb {
width: 100px;
height: 40px;
font-size: 14px;
border-radius: 8px;
}
.btn1 {
color: #4ea6ff;
background: #ffffff;
border: 1px solid #4ea6ff;
}
.btn2 {
margin-left: 16px;
border: 0;
color: #ffffff;
background: #4ea6ff;
}
}
}
}
}
}
}
}
}
.clearfix:after,
.clearfix:before {
content: " ";
display: block;
clear: both;
}
.AddLevell {
.ant-modal {
width: 624px !important;
height: 388px !important;
.ant-modal-content {
width: 624px !important;
height: 388px !important;
border-radius: 4px !important;
.ant-modal-body {
width: 100% !important;
height: 100% !important;
padding: 0 !important;
.header {
width: 624px;
height: 68px;
background: linear-gradient(180deg,
rgba(78, 166, 255, 0.2) 0%,
rgba(78, 166, 255, 0) 100%);
display: flex;
justify-content: center;
.headmain {
width: 90%;
height: 100%;
display: flex;
align-items: center;
justify-content: space-between;
.add {
font-size: 16px;
font-weight: 600;
color: #333333;
}
.img {
width: 20px;
height: 20px;
background-image: url(../../assets/images/basicinfo/close22.png);
background-size: 100% 100%;
}
}
}
.main {
width: 100%;
height: calc(100% - 68px);
display: flex;
justify-content: center;
.inma {
width: 75%;
height: 100%;
.name {
display: flex;
position: relative;
margin-top: 30px;
.fir {
font-size: 14px;
font-weight: 400;
color: rgba(0, 0, 0, 0.85);
white-space: nowrap;
margin-top: 3px;
}
.input {
width: 100%;
.ant-input {
border-radius: 8px;
border: 1px solid #c7cbd2;
&::placeholder {
font-size: 12px;
position: absolute;
top: 5px;
}
}
.ant-textarea {
border-radius: 8px;
border: 1px solid #c7cbd2;
&::placeholder {
font-size: 12px;
position: absolute;
top: 5px;
}
}
}
.co {
position: absolute;
right: 10px;
top: 4px;
font-size: 14px;
font-weight: 400;
color: #c7cbd2;
}
.co1 {
position: absolute;
right: 10px;
bottom: 8px;
font-size: 14px;
font-weight: 400;
color: #c7cbd2;
}
}
.btn {
margin-top: 40px;
width: 100%;
display: flex;
justify-content: center;
.btn1 {
width: 100px;
height: 40px;
border-radius: 4px;
border: 1px solid #4ea6ff;
font-size: 14px;
color: #4ea6ff;
cursor: pointer;
background: #ffffff;
margin-right: 20px;
}
.btn2 {
width: 100px;
height: 40px;
border-radius: 4px;
font-size: 14px;
color: #fff;
cursor: pointer;
border: 0;
background: #4ea6ff;
}
}
}
}
}
}
}
}
.ProjectDrawer {
.drawerMain {
min-width: 600px;
margin: 0px 32px 0px 32px;
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;
}
}
.drawerbox {
overflow-y: auto;
th {
background-color: #eff4fc !important;
}
.ant-table-tbody > tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected) > td {
background: #f6f9fd;
}
}
.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;
}
}
}
}
.leveladddetail {
width: 100%;
min-height: 800px;
display: flex;
flex-direction: column;
min-width: 933px;
background-color: rgba(245, 247, 250, 1);
.left {
margin-right: 20px;
width: 208px;
background: #ffffff;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.21);
display: flex;
justify-content: center;
.leftmain {
// width: 86%;
margin-top: 20px;
.tit {
font-size: 18px;
color: #363636;
}
.btn {
margin-top: 20px;
height: 38px;
background: #fff6e8;
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
cursor: pointer;
.search {
background-size: 100%;
}
.btnText {
font-size: 14px;
font-weight: 400;
color: #ffb64e;
margin-top: 4px;
margin-left: 5px;
}
}
.btn3 {
width: 171px;
margin-right: 0px;
.search {
width: 17px;
height: 18px;
background-image: url("../../assets/images/leveladd/add.png");
background-size: 100% 100%;
}
}
.maincon {
margin-top: 17px;
width: 208px;
display: flex;
flex-direction: column;
align-items: center;
.ghost {
// background-color: red;
opacity: 0 !important;
}
.items {
width: 171px;
// height: 83px;
background: rgba(255, 182, 78, 0.1);
border: 1px solid #ffb64e;
opacity: 0.45;
border-radius: 8px;
margin-bottom: 16px;
align-items: center;
padding: 16px;
opacity: 0.5;
cursor: pointer;
.items1 {
margin-bottom: 12px;
display: flex;
justify-content: space-between;
align-items: center;
.boxs_left {
display: flex;
align-items: center;
.script {
display: flex;
justify-content: center;
align-items: center;
width: 46px;
height: 24px;
background: #ffb64e;
border-radius: 6px;
margin-right: 5px;
white-space: nowrap;
}
.imgIcon {
width: 16px;
height: 16px;
background-image: url(@/assets/images/leveladd/edit1.png);
background-size: 100% 100%;
}
}
.boxs_right {
.imgIcon {
width: 16px;
height: 16px;
background-image: url(@/assets/images/leveladd/delete.png);
background-size: 100% 100%;
}
}
}
.items2 {
.nname {
width: 140px;
// overflow: hidden;
// text-overflow: ellipsis;
// white-space: nowrap;
font-weight: bold;
overflow: hidden;
text-overflow: ellipsis;
-webkit-line-clamp: 2;
display: -webkit-box;
-webkit-box-orient: vertical;
}
}
}
.active {
opacity: 1;
// transition: all 0.5s;
}
}
}
}
.right {
flex: 1;
// background-color: #fff;
display: flex;
flex-direction: column;
.addhead {
width: 100%;
// min-width: 500px;
// height: 130px;
// flex: 1;
background-color: #fff;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.07);
display: flex;
align-items: center;
position: relative;
.filt {
margin: 16px 30px 16px 22px;
display: flex;
justify-content: space-between;
width: 100%;
align-items: center;
flex-wrap: wrap;
.le {
display: flex;
align-items: center;
// margin-bottom: 10px;
.leftimg {
width: 151px;
height: 100px;
border: 10px solid #e7f2ff;
border-radius: 8px;
margin-left: 20px;
.img {
width: 100%;
height: 100%;
}
}
.imgfor {
margin-left: 32px;
.forz {
color: #363636;
font-size: 16px;
}
.fort {
color: #878b92;
font-size: 14px;
margin-top: 20px;
}
}
}
.rightt {
height: 100%;
display: flex;
align-items: center;
.select {
display: flex;
align-items: center;
white-space: nowrap;
margin-right: 56px;
.inputbox {
display: flex;
align-items: center;
border: 1px solid #c7cbd2;
width: 238px;
height: 40px;
border-radius: 8px;
padding-left: 12px;
input {
border: none;
outline: none;
}
.bottonbox {
width: 100px;
height: 40px;
background: #4ea6ff;
border-radius: 8px;
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
flex-shrink: 0;
.btnText {
font-size: 14px;
font-weight: 400;
color: #ffffff;
line-height: 36px;
margin-left: 5px;
}
}
}
}
.line {
height: 60px;
width: 1px;
background-color: #e8effa;
margin-right: 18px;
}
.return {
color: #4ea6ff;
font-size: 14px;
margin-top: 13px;
margin-right: 20px;
white-space: nowrap;
}
}
}
}
.mid {
width: 100%;
// height: 130px;
margin-top: 20px;
background-color: #fff;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.07);
display: flex;
align-items: center;
flex-wrap: wrap;
.item {
height: 115px;
// width: 7.7%;
display: flex;
align-items: center;
.itcon {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100%;
width: 100%;
margin-left: 38px;
margin-right: 38px;
.img {
cursor: pointer;
}
.text {
font-size: 16px;
color: #363636;
margin-top: 5px;
white-space: nowrap;
}
}
.lin {
width: 1px;
height: 60%;
background-color: #e8effa;
}
.no {
display: none;
}
}
}
.boom {
width: 100%;
margin-top: 20px;
flex: 1;
background-color: #fff;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.07);
display: flex;
justify-content: center;
min-height: 512px;
.boomcen {
width: 95%;
// height: 100%;
// background-color: #bfa;
.title {
display: flex;
align-items: center;
justify-content: space-between;
.tit_left {
font-size: 16px;
font-weight: 500;
color: #363636;
line-height: 36px;
margin-top: 30px;
}
.tit_right {
display: flex;
align-items: center;
margin-top: 30px;
.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-right: 14px;
flex-shrink: 0;
cursor: pointer;
white-space: nowrap;
.btnText {
font-size: 14px;
font-weight: 400;
line-height: 36px;
margin-left: 5px;
}
}
.btn1 {
background-color: #4ea6ff;
.btnText {
color: #ffffff;
}
}
.btn2 {
background-color: #ffffff;
.imgIcon {
width: 16px;
height: 16px;
background-image: url(@/assets/images/projectadd/delete.png);
background-size: 100%;
}
.btnText {
color: #4ea6ff;
}
}
}
}
.tableBox {
margin-top: 21px;
margin-bottom: 20px;
.chosen {
background-color: #f2f6fc;
opacity: 1;
}
.ghost {
// background-color: red;
opacity: 0;
}
.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;
}
}
.xwid {
position: relative;
margin-top: 30px;
display: flex;
margin-bottom: 20px;
.xin {
width: 100%;
.xheadb {
display: flex;
.addx {
width: 130px;
height: 40px;
background: #4ea6ff;
border-radius: 8px;
color: #fff;
border: 0;
cursor: pointer;
margin-right: 20px;
}
.addd {
width: 130px;
height: 40px;
background: #fff;
border-radius: 8px;
border: 1px solid #4ea6ff;
color: #4ea6ff;
cursor: pointer;
margin-right: 20px;
}
.select {
.ant-select {
//
// border: 0 !important;
border-radius: 11px;
.ant-select-selector {
border: 1px solid #4ea6ff !important;
.ant-select-selection-placeholder {
padding-left: 15px;
color: #4ea6ff;
}
}
}
}
}
.talk {
margin-top: 24px;
margin-bottom: 11px;
width: 100%;
height: 50px;
background: #f5faff;
border: 1px solid #4ea6ff;
// opacity: 0.22;
display: flex;
align-items: center;
.im {
width: 14px;
height: 15px;
margin-left: 27px;
margin-top: -3px;
}
.xu {
height: 100%;
line-height: 50px;
margin-left: 13px;
.yi {
color: #4f5156;
font-size: 14px;
}
.zon {
color: #999ba3;
font-size: 14px;
margin-left: 34px;
}
.th {
color: #4ea6ff;
}
}
}
.tableBox {
margin-block-end: 20px;
.classify {
margin-left: 11px !important;
padding-left: 9px !important;
}
.ant-checkbox-wrapper {
align-items: center;
margin-top: -2px;
}
.ant-table-selection-column {
padding: 0px !important;
padding-left: 38px !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: 0px;
}
}
.tablebox1 {
margin-bottom: 80px;
.pa {
left: 0;
width: 100%;
// height: 20px;
// background-color: red;
display: flex;
justify-content: center;
position: absolute;
bottom: 0px;
}
}
}
}
.Gcon {
display: flex;
.pad {
height: 100%;
width: 40px;
}
.Gin {
// background-color: #bfa;
margin-top: 30px;
.headone {
// background-color: red;
display: flex;
text-align: center;
.box {
width: 4px;
height: 20px;
background-color: #4ea6ff;
border-radius: 2px;
}
.onetitle {
margin-left: 15px;
color: #333333;
font-size: 14px;
}
.oneedi {
margin-left: 15px;
color: #4ea6ff;
cursor: pointer;
}
.twobtn {
display: flex;
.btnone {
width: 42px;
height: 24px;
border: 1px solid rgba(64, 158, 255, 1);
border-radius: 4px;
color: rgba(64, 158, 255, 1);
margin-left: 20px;
cursor: pointer;
}
.btntwo {
width: 42px;
height: 24px;
border: 1px solid rgba(64, 158, 255, 1);
border-radius: 4px;
color: #ffffff;
margin-left: 20px;
background: #4ea6ff;
cursor: pointer;
}
}
}
.onemain {
margin-top: 20px;
margin-left: 55px;
color: #6f6f6f;
font-size: 14px;
.checkcon {
position: relative;
.in {
position: absolute;
// margin-top: 10px;
left: 0;
top: 3px;
}
.yulan {
// color: yellow;
margin-left: 22px;
// display: inline-block;
}
.yulan2 {
margin-left: 22px;
}
.ant-input-number {
height: 24px;
width: 24px;
margin: 10px;
border-radius: 4px;
border: 1px solid #6d7584;
.ant-input-number-input {
width: 100%;
height: 100%;
font-size: 14px;
padding: 0;
color: #4ea6ff;
text-align: center;
}
}
}
}
.twomain {
margin-left: 20px;
margin-top: 20px;
.ant-switch-checked {
background-color: #5dc988;
}
.info {
margin-left: 10px;
color: #6f6f6f;
font-size: 14px;
// margin-top: 10px;
}
.infor {
margin-left: 38px;
margin-top: 10px;
color: #c7cbd2;
font-size: 14px;
}
.chooseshow {
// background-color: red;
margin-left: 38px;
margin-top: 12px;
.fane {
color: #6f6f6f;
font-size: 14px;
}
}
.choo {
display: none;
}
.btm {
margin-left: 38px;
margin-top: 20px;
.bmo {
color: #6f6f6f;
font-size: 14px;
}
.bmt {
color: #c7cbd2;
font-size: 14px;
margin-top: 3px;
}
.chosecon {
display: flex;
margin-top: 6px;
margin-bottom: 20px;
.chose {
position: relative;
.inl {
position: absolute;
top: 2px;
}
.sh {
margin-left: 23px;
color: #6f6f6f;
}
}
}
}
}
}
}
.notable {
width: 100%;
height: 100%;
.notablebox {
width: 412px;
height: 212px;
background: linear-gradient(180deg, #fef3dd 0%, #fffaf0 100%);
border-radius: 10px;
display: flex;
justify-content: center;
text-align: center;
margin: 77px auto 109px auto;
cursor: pointer;
position: relative;
.smallleft {
position: absolute;
top: 18px;
left: 0px;
width: 8px;
height: 21px;
border-radius: 0px 4px 4px 0px;
background-color: #ffb64e;
}
.smallright {
position: absolute;
bottom: 18px;
right: 0px;
width: 8px;
height: 21px;
border-radius: 4px 0px 0px 4px;
background-color: #ffb64e;
}
.boxbody {
.boximg {
width: 72px;
height: 72px;
margin: 32px auto 20px auto;
background-image: url(@/assets/images/coursewareManage/nostate.png);
background-size: 100% 100%;
}
.boxtitle {
margin-bottom: 4px;
}
}
}
}
}
}
// .footbtn {
// width: 100%;
// flex: 1;
// background-color: #fff;
// box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.07);
// display: flex;
// justify-content: end;
// .btnbox {
// display: flex;
// margin-right: 36px;
// .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;
// flex-shrink: 0;
// margin: 21px 0px 19px 14px;
// cursor: pointer;
// white-space: nowrap;
// .btnText {
// font-size: 14px;
// font-weight: 400;
// line-height: 36px;
// margin-left: 5px;
// }
// }
// .btn1 {
// background-color: #4ea6ff;
// .btnText {
// color: #ffffff;
// }
// }
// .btn2 {
// background-color: #ffffff;
// .btnText {
// color: #4ea6ff;
// }
// }
// }
// }
}
.opat {
.opacationt {
display: flex;
align-items: center;
justify-content: center;
.ant-switch-checked {
background-color: #5dc988;
}
.showt {
// margin-top: 10px;
display: flex;
margin-left: 10px;
height: 23px;
position: relative;
.bi {
// margin-top: 10px;
width: 63px;
height: 23;
background-color: #5dc988;
line-height: 23px;
position: absolute;
z-index: 998;
color: #ffffff;
border-radius: 4px;
}
.xuan {
width: 63px;
height: 23px;
background-color: #f2f6fc;
line-height: 23px;
// display: none;
position: absolute;
z-index: 998;
color: #5dc988;
border-radius: 4px;
}
}
}
}
.racona {
// background-color: #bfa;
display: flex;
align-items: center;
// justify-content: center;
height: 100%;
.img {
// margin-left: -40px;
// margin-top: -2px;
width: 17px;
height: 14px;
background-image: url("../../assets/images/leveladd/z1.png");
position: absolute;
left: -40px;
}
.ch {
margin-left: 10px;
}
}
.footbtn {
width: 100%;
height: 80px;
margin-top: 16px;
// flex: 1;
background-color: #fff;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.07);
display: flex;
justify-content: end;
.btnbox {
display: flex;
margin-right: 36px;
height: 80px;
.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;
flex-shrink: 0;
margin: 21px 0px 19px 14px;
cursor: pointer;
white-space: nowrap;
.btnText {
font-size: 14px;
font-weight: 400;
line-height: 36px;
margin-left: 5px;
}
}
.btn1 {
background-color: #4ea6ff;
.btnText {
color: #ffffff;
}
}
.btn2 {
background-color: #ffffff;
.btnText {
color: #4ea6ff;
}
}
}
}
}
.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: 40px;
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;
}
}
}
}
}
}
}
}
</style>