Files
fe-manage/src/views/learningpath/LevelAdd.vue

5058 lines
143 KiB
Vue
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="addwrapper">
<div class="addhead">
<div class="leftimg">
<!-- <img class="img" :src="picUrl" /> -->
<img class="img" :src="picUrl" />
</div>
<div class="imgfor">
<div class="forz">{{ styTitle }}</div>
<div class="fort">创建时间{{ cretime }}</div>
</div>
<div class="right">
<img
class="img1"
src="../../assets/images/leveladd/ma.png"
@click="showCodeModel2()"
v-if="action == 1"
/>
<div v-if="action == 1" class="line"></div>
<div
class="pubIcon"
v-if="(action == 1 || action == 0) && checkPer(permissions, createId)"
@click="pubIcon(action)"
>
<img class="img2" src="../../assets/images/leveladd/pub.png" />
<!-- 已发布的显示 -->
<div class="pub" style="width: 28px">
{{ act }}
</div>
</div>
<div class="line"></div>
<router-link to="/learningpath"
><div style="display: flex">
<img class="img2" src="../../assets/images/leveladd/back.png" />
<div class="return">返回</div>
</div>
</router-link>
</div>
</div>
<div class="split"></div>
<div class="bom clearfix">
<a-tabs
class="tab"
v-model:activeKey="activeKey"
size="large"
@change="changeTabs"
:tabBarStyle="{ marginLeft: '10px' }"
>
<a-tab-pane key="1" tab="概览">
<div class="split"></div>
<!-- 概览无数据 -->
<div v-if="!hasTask">
<div class="onerow">
<div class="taskmain">快速创建路径图详情</div>
</div>
<div class="second" v-if="checkPer(permissions, createId)">
<div @click="totask">
<div
class="taskbox"
style="background: linear-gradient(180deg, #fef3dd, #fffaf0)"
>
<div class="leftt">
<img src="../../assets/images/taskpage/left1.png" />
</div>
<div class="photo">
<img src="../../assets/images/taskpage/picture1.png" />
</div>
<div class="rightt">
<img src="../../assets/images/taskpage/right1.png" />
</div>
<div class="centerbox" style="color: rgba(255, 182, 78, 1)">
添加任务
</div>
<div class="centermain">快速添加任务/关卡</div>
</div>
</div>
<div
class="taskbox"
@click="tostudent"
style="background: linear-gradient(180deg, #ddeaff, #f0f8fe)"
>
<div class="leftt">
<img src="../../assets/images/taskpage/left2.png" />
</div>
<div class="photo">
<img src="../../assets/images/taskpage/picture2.png" />
</div>
<div class="rightt">
<img src="../../assets/images/taskpage/right2.png" />
</div>
<div class="centerbox" style="color: rgba(78, 166, 255, 1)">
添加学员
</div>
<div class="centermain">快速添加学员</div>
</div>
<!-- 2022-12-2注释 后面放开 -->
<div
class="taskbox"
@click="showPub"
style="background: linear-gradient(180deg, #e5f6ec, #eef9f3)"
v-if="action === 0"
>
<div class="leftt">
<img src="../../assets/images/taskpage/left3.png" />
</div>
<div class="photo">
<img src="../../assets/images/taskpage/picture3.png" />
</div>
<div class="rightt">
<img src="../../assets/images/taskpage/right3.png" />
</div>
<div class="centerbox" style="color: rgba(93, 201, 136, 1)">
发布
</div>
<div class="centermain">快速发布项目</div>
</div>
</div>
</div>
<!-- 概览有数据 -->
<div v-else>
<div class="onerow">
<div class="taskmain">关卡概览</div>
</div>
<div class="second" style="margin-top: 0">
<div class="nubbox">
<span class="nub1">{{
routerInfoOverview.totalStudentCnt
}}</span>
<div class="nub2">总人数</div>
</div>
<div class="nubbox">
<span class="nub1" style="color: #ff90ae">{{
routerInfoOverview.studyStudentCnt
}}</span>
<div class="nub2">学习人数</div>
</div>
<div class="nubbox">
<span class="nub1" style="color: #a497ff">{{
routerInfoOverview.completeStudentCnt
}}</span>
<div class="nub2">完成人数</div>
</div>
<div class="nubbox">
<div>
<span class="nub1" style="color: #5dc988">{{
routerInfoOverview.onlineCourseCnt
}}</span>
<!-- <span style="color: #5dc988; font-size: 14px"></span> -->
</div>
<div class="nub2">在线课程数</div>
</div>
<div class="nubbox">
<div>
<span class="nub1" style="color: #ff90ae">{{
routerInfoOverview.offLineCourseCnt
}}</span>
<!-- <span style="color: #ff90ae; font-size: 14px">%</span> -->
</div>
<div class="nub2">面授课程数</div>
</div>
<div class="nubbox">
<div>
<span class="nub1" style="color: #a497ff">{{
routerInfoOverview.completeRatio
}}</span
><span style="color: #a497ff; font-size: 14px">%</span>
</div>
<div class="nub2">总完成率</div>
</div>
</div>
<div class="onerow">
<div class="taskmain">关卡信息</div>
</div>
<div class="stagemess">
<div
v-for="(item, index) in stageList"
:class="{
stage1: item.stageId == choosedStageId,
stage2: item.stageId != choosedStageId,
}"
:key="item.stageId"
@click="stageChange(item.name, item.stageId, index)"
>
关卡{{ item.stageId }}
</div>
<!-- <div class="stage1">阶段1</div>
<div class="stage2">阶段2</div> -->
</div>
<div class="stagesecond">
<div class="staname">关卡名称</div>
<div class="stamess">{{ stateName }}</div>
</div>
<div class="stagelast">
<div class="stagepro">
<a-progress
type="dashboard"
gapDegree="0"
:percent="
chapterOverviewList[choosedStageIndex]?.completeCourseRatio
"
:width="140"
/>
<div class="protext">课程完成率</div>
</div>
<div class="stagepro">
<a-progress
type="dashboard"
gapDegree="0"
:percent="
chapterOverviewList[choosedStageIndex]?.completeExamRatio
"
:width="140"
/>
<div class="protext">考试通过率</div>
</div>
<div class="stagepro" style="margin-right: 0">
<a-progress
type="dashboard"
gapDegree="0"
:percent="
chapterOverviewList[choosedStageIndex]?.completeRatio
"
:width="140"
/>
<div class="protext">作业完成率</div>
</div>
<div class="proright">
<div class="pronub" style="margin-left: 142px">
{{
chapterOverviewList[choosedStageIndex]
? chapterOverviewList[choosedStageIndex].totalTaskCnt
: 0
}}
</div>
<div class="proright1">
<span class="textpro">关卡任务总数</span>
<a-progress
:percent="
chapterOverviewList[choosedStageIndex]
? chapterOverviewList[choosedStageIndex].totalTaskCnt
: 0
"
style="width: 369px"
/>
</div>
<div class="pronub" style="margin-left: 142px">
{{
chapterOverviewList[choosedStageIndex]
? chapterOverviewList[choosedStageIndex].totalReqCnt
: 0
}}
</div>
<div class="proright1">
<span class="textpro">必修课</span>
<a-progress
:percent="
chapterOverviewList[choosedStageIndex]
? chapterOverviewList[choosedStageIndex].totalReqCnt
: 0
"
style="width: 369px"
/>
</div>
<div class="pronub" style="margin-left: 142px">
{{
chapterOverviewList[choosedStageIndex]
? chapterOverviewList[choosedStageIndex].totalOptCnt
: 0
}}
</div>
<div class="proright1">
<span class="textpro">选修课</span>
<a-progress
:percent="
chapterOverviewList[choosedStageIndex]
? chapterOverviewList[choosedStageIndex].totalOptCnt
: 0
"
style="width: 369px"
/>
</div>
</div>
</div>
</div>
<!-- 概览有数据 -->
</a-tab-pane>
<a-tab-pane key="2" tab="路径管理">
<div class="split"></div>
<!-- <div class="cont">
<div class="pad"></div>
<div class="sametab">
<div class="Lhead">
<a-input
v-model:value="gatename"
style="width: 270px; height: 40px; border-radius: 8px"
placeholder="关卡名称"
/>
<div class="btns">
<div class="btn btn1">
<div class="search"></div>
<div class="btnText">搜索</div>
</div>
<div class="btn btn2">
<div class="search"></div>
<div class="btnText">重置</div>
</div>
<router-link to="/leveladddetail">
<div class="btn btn3" @click="handleOut">
<div class="search"></div>
<div class="btnText">创建关卡</div>
</div>
</router-link>
</div>
</div>
<div class="Lbom">
<div>
<div class="create"></div>
</div>
</div>
</div>
<div class="pad"></div>
</div> -->
<!-- 路径管理 -->
<div style="flex: 1">
<div class="onerow">
<div class="taskmain">任务大纲</div>
<ImpoterGroupLeader :downloadType="1" title="批量面授报名" :data="{targetId:routerId,type:2}" :url="`/admin/offcourse/importCourse`" :template-url="`/admin/router/exportTaskCoursePlan/${routerId}?type=1&taskType=2&thirdType=3`">
<button class="btn">批量面授报名</button>
</ImpoterGroupLeader>
<router-link
:to="{ path: '/leveladddetail', query: { routerId: routerId } }"
class="editright"
v-if="checkPer(permissions, createId)"
>
<img
class="editimg"
src="../../assets/images/leveladd/edit.png"
/>
<span class="editextb">编辑</span>
</router-link>
</div>
<!-- 无数据显示快速创建 -->
<div v-show="!taskSyllabus.length">
<router-link
:to="{ path: '/leveladddetail', query: { routerId: routerId } }"
>
<div
class="taskbox"
style="background: linear-gradient(180deg, #fef3dd, #fffaf0)"
>
<div class="leftt">
<img src="../../assets/images/taskpage/left1.png" />
</div>
<div class="photo">
<img src="../../assets/images/taskpage/picture1.png" />
</div>
<div class="rightt">
<img src="../../assets/images/taskpage/right1.png" />
</div>
<div class="centerbox" style="color: rgba(255, 182, 78, 1)">
添加关卡
</div>
<div class="centermain">快速创建关卡任务</div>
</div>
</router-link>
</div>
<!-- 无数据显示快速创建 -->
<!-- 有数据-->
<div class="taskSyllabus">
<a-collapse v-model:activeKey="taskSyllabusActive" accordion>
<template #expandIcon="{ isActive }">
<img
:style="{
width: isActive ? 9.1 : 8.1,
height: isActive ? 8.1 : 9.1,
'margin-right': isActive ? '12px' : '13px',
}"
:src="
isActive
? require('../../assets/images/projectadd/open.png')
: require('../../assets/images/projectadd/close.png')
"
/>
<div></div>
</template>
<a-collapse-panel
v-for="(value, index) in taskSyllabus"
:key="index"
:header="value.name"
>
<div
class="course"
v-for="(item, key) in value.taskList"
:key="key"
>
<!-- :style="{width:item.course==='在线'?'28px':
height:item.course==='在线'?'27px':}" -->
<div class="first">
<div class="icon">
<div
style="
width: 31px;
height: 28px;
display: flex;
align-items: center;
justify-content: center;
"
>
<img
:src="
item.type == 1
? require('../../assets/images/leveladd/zai.png')
: item.type == 2
? require('../../assets/images/leveladd/mian.png')
: item.type == 3
? require('../../assets/images/leveladd/an.png')
: item.type == 4
? require('../../assets/images/leveladd/zuo.png')
: item.type == 5
? require('../../assets/images/leveladd/kao.png')
: item.type == 6
? require('../../assets/images/leveladd/zhi.png')
: item.type == 7
? require('../../assets/images/leveladd/wai.png')
: item.type == 8
? require('../../assets/images/leveladd/tao.png')
: item.type == 9
? require('../../assets/images/leveladd/huo.png')
: item.type == 10
? require('../../assets/images/leveladd/ce.png')
: item.type == 11
? require('../../assets/images/leveladd/pinggu.png')
: item.type == 12
? require('../../assets/images/leveladd/tou.png')
: item.type == 13
? require('../../assets/images/leveladd/xiangmu.png')
: require('../../assets/images/leveladd/tou.png')
"
/>
</div>
</div>
<div>
<div class="iconame">
{{ checkType(item.type) }}
</div>
<div class="icontext" :title="item.name">
{{ item.name }}
</div>
</div>
</div>
<div class="type">
<div :class="item.flag ? 'typename1' : 'typename'">
{{ item.flag ? "必修" : "选修" }}
</div>
</div>
<div class="time">
<div class="timetext">开始时间</div>
<div class="timetext">
{{ item.type==2 ? item.createTime !== null ? item.createTime : "-" : item.startTime !== null ? item.startTime : "-" }}
</div>
</div>
<div class="progress">
<div class="progresstext">
{{ item.finishStuNum }}/{{ item.totalStuNum }}
</div>
<div style="display: flex">
<a-progress
:showInfo="false"
:percent="
parseInt(
(item.finishStuNum / item.totalStuNum) * 100
)
"
strokeColor="#FFC067"
trailColor="rgba(253, 209, 98, 0.2)"
/>
<span class="progresstext" style="margin-left: 10px"
>{{
parseInt(
(item.finishStuNum / item.totalStuNum) * 100
) || 0
}}%</span
>
</div>
</div>
<div class="operations">
<div
class="operation"
style="cursor: pointer"
:style="{
display: item.type === 2 ? 'flex' : 'none',
}"
@click="showFS(item)"
>
学员
</div>
<div
class="operation"
style="cursor: pointer"
@click="showAA(item.type, item.name, item)"
:style="{
display:
item.type === 6 || item.type === 9
? 'flex'
: 'none',
}"
>
考勤
</div>
<div
class="operation"
v-if="
item.type != 2 && item.type != 6 && item.type != 9
"
></div>
<div
class="operation"
style="cursor: pointer"
@click="showCodeModel(item)"
>
二维码
</div>
<div
class="operation"
style="cursor: pointer; margin-right: 35px"
@click="
item.type === 1 ||
item.type === 3 ||
item.type === 7 ||
item.type === 8 ||
item.type === 6 ||
item.type === 11 ||
item.type === 9
? commonModel(item, value.name, value.chapterId)
: item.type === 2
? faceTeachModel(item)
: item.type === 4
? homeworkModel(item)
: item.type === 5
? examinationModel(
item,
value.name,
value.chapterId
)
: item.type === 10
? evaluationModel(item, value.name)
: item.type === 12
? voteModel(item, value.name, value.chapterId)
: item.type === 13
? projectModel(item, value.name)
: null
"
>
管理
</div>
</div>
</div>
</a-collapse-panel>
</a-collapse>
</div>
<!-- 有数据-->
<div style="display: flex; height: 20px"></div>
</div>
</a-tab-pane>
<a-tab-pane key="3" tab="学员管理" force-render>
<TableStudent
:permissions="permissions"
ref="stuRef"
:type="2"
:id="routerId"
:stage="stage"
:columns="tableDataFunc()"
>
<template #extension="{ data: { record } }">
<a-button type="link" @click="showStudent(record)">查看</a-button>
<a-button
type="link"
@click="setLevels(record)"
v-if="checkPer(permissions, createId)"
>调整</a-button
>
</template>
</TableStudent>
</a-tab-pane>
<a-tab-pane key="4" tab="设置">
<div class="split"></div>
<a-tabs>
<!-- 2023-1-12 隐藏 后面放开 -->
<a-tab-pane key="1" tab="基本信息">
<div class="sametab">
<div class="Gcon">
<div class="pad"></div>
<div class="Gin">
<div class="headone">
<div class="box"></div>
<div class="onetitle">关卡内容可见可学设置</div>
<div
class="oneedi"
@click="showbtn"
v-show="twobtn"
v-if="checkPer(permissions, createId)"
>
编辑
</div>
<div v-show="twobtnn" class="twobtn">
<div class="btnone" @click="closebtn">取消</div>
<div class="btntwo" @click="editLearnInfo">确定</div>
</div>
</div>
<div class="onemain clearfix">
<div class="checkcon">
<a-checkbox
class="in"
:disabled="number"
v-model:checked="previewSelect"
></a-checkbox>
<span class="yulan">预览其他关卡</span><br />
<div style="width: 10px; height: 4px"></div>
<div style="display: flex; align-items: center">
<span class="yulan2">学员可预览第</span>
<span style="color: #4ea6ff" v-show="number">{{
previewStartNum
}}</span>
<a-input-number
v-model:value="previewStartNum"
v-show="inputbox"
:controls="false"
:autofocus="true"
:min="0"
:precision="0"
/>
<span>关-第</span
><span style="color: #4ea6ff" v-show="number">{{
previewEndNum
}}</span>
<a-input-number
v-model:value="previewEndNum"
v-show="inputbox"
:controls="false"
:autofocus="true"
:min="0"
:precision="0"
/>
<span>关内容</span>
</div>
</div>
<div class="checkcon" style="margin-top: 20px">
<a-checkbox
class="in"
:disabled="number"
v-model:checked="studySelect"
></a-checkbox>
<span class="yulan">学习其他关卡</span><br />
<div style="width: 10px; height: 4px"></div>
<div style="display: flex; align-items: center">
<span class="yulan2">学员可学习第</span>
<span style="color: #4ea6ff" v-show="number">{{
studyStartNum
}}</span>
<a-input-number
v-model:value="studyStartNum"
v-show="inputbox"
:controls="false"
:autofocus="true"
:min="0"
:precision="0"
/>
<span>关-第</span
><span style="color: #4ea6ff" v-show="number">{{
studyEndNum
}}</span>
<a-input-number
v-model:value="studyEndNum"
v-show="inputbox"
:controls="false"
:autofocus="true"
:min="0"
:precision="0"
/>
<span>关内容</span>
</div>
</div>
<br />
</div>
</div>
</div>
</div>
</a-tab-pane>
<a-tab-pane
key="2"
tab="共享文档"
v-if="checkPer(permissions, createId)"
>
<div class="sametab">
<div class="Gcon">
<div class="pad"></div>
<div class="Gin">
<div class="headone">
<div class="box"></div>
<div class="onetitle">上传共享文档</div>
<div class="oneedi">
<a-switch
size="small"
v-model:checked="docChecked"
@change="checkedClose"
></a-switch>
</div>
</div>
<div class="btnbox" style="margin: 20px">
<a-upload
v-if="docChecked == true"
v-model:file-list="fileList"
name="file"
:action="uploadAction"
@change="handleChange"
>
<span
class="xkbtn"
style="cursor: pointer; font-size: 17px"
>上传</span
>
<img
src="@/assets/images/basicinfo/cloud.png"
style="
cursor: pointer;
width: 24px;
height: 24px;
margin-left: 8px;
margin-bottom: 3px;
"
alt=""
/>
</a-upload>
<div
v-if="docChecked == true"
class="btnbox"
style="margin: 20px"
>
<span style="color: #999999">
支持pdf.ppt.pptx.doc.docx.xls.xlsx.jpeg.png.gif.zip
</span>
</div>
<div
v-for="item in fileList"
:key="item.uid"
style="
width: 500px;
display: flex;
margin-bottom: 30px;
justify-content: space-between;
align-items: center;
"
class="docListStyle"
>
<!-- <img
src="@/assets/images/basicinfo/download.png"
style="
cursor: pointer;
width: 40px;
height: 40px;
margin-right: 40px;
"
alt=""
/> -->
<img
v-if="
item.name.indexOf('jpg') !== -1 ||
item.name.indexOf('jpeg') !== -1 ||
item.name.indexOf('png') !== -1
"
style="width: 27px; height: 32px; margin-right: 40px"
src="@/assets/images/coursewareManage/pngpic.png"
/>
<div v-else>
<img
v-if="item.name.indexOf('doc') !== -1"
style="
width: 27px;
height: 32px;
margin-right: 40px;
"
src="@/assets/images/coursewareManage/docpic.png"
/>
<div v-else>
<img
v-if="item.name.indexOf('xls') !== -1"
style="
width: 27px;
height: 32px;
margin-right: 40px;
"
src="@/assets/images/coursewareManage/xlspic.png"
/>
<div v-else>
<img
v-if="item.name.indexOf('ppt') !== -1"
style="
width: 27px;
height: 32px;
margin-right: 40px;
"
src="@/assets/images/coursewareManage/pptpic.png"
/>
<div v-else>
<img
v-if="item.name.indexOf('pdf') !== -1"
style="
width: 27px;
height: 32px;
margin-right: 40px;
"
src="@/assets/images/coursewareManage/pdfpic.png"
/>
<div v-else>
<img
v-if="item.name.indexOf('zip') !== -1"
style="
width: 27px;
height: 32px;
margin-right: 40px;
"
src="@/assets/images/coursewareManage/zippic.png"
/>
<img
v-else
style="
width: 27px;
height: 32px;
margin-right: 40px;
"
src="@/assets/images/coursewareManage/docpic.png"
/>
</div>
</div>
</div>
</div>
</div>
<span
style="
font: oblique bold 16px Sans-serif;
width: 300px;
display: block;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
"
:title="item.name"
>{{ item.name }}</span
>
<a
href="javascript:void(0);"
@click="
downloadFile(
item.response ? item.response.data : ''
)
"
style="margin-left: 5px"
>下载</a
>
<span
style="color: #4ea6ff; cursor: pointer"
@click="deFile(item.uid)"
>删除</span
>
</div>
</div>
</div>
</div>
</div>
</a-tab-pane>
</a-tabs>
</a-tab-pane>
</a-tabs>
<a-modal
style="padding: 0"
:closable="sh"
v-model:visible="visiblene"
:footer="null"
centered="true"
wrapClassName="changeModal"
>
<div class="con">
<div class="header">
<div class="inhe">
<div class="mod"></div>
<div class="tz">调整关卡</div>
<div class="mg" @click="closeChangeModal"></div>
</div>
</div>
<div class="mid">
<div class="inher">
<div class="cur">当前关卡:{{ curLevelName }}</div>
<div class="select">
<a-select
v-model:value="curLevel"
style="width: 100%"
placeholder="请选择关卡"
:options="statess"
@change="selectProjectName4"
allowClear
></a-select>
</div>
<div class="btn">
<button
class="sameb btn2"
style="cursor: pointer; margin-right: 32px"
@click="closeChangeModal"
>
取消
</button>
<button
class="sameb btn2"
style="cursor: pointer"
@click="changeLevel"
>
确定
</button>
</div>
</div>
</div>
</div>
</a-modal>
<!-- 查看学员 传入查看学员的id-->
<see-stu
v-model:Seevisible="Seevisible"
v-model:checkStuId="checkStuId"
v-model:projectId="routerId"
/>
<!-- 批量删除学员弹窗 -->
<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="closeDeleteALLModal"></div>
</div>
<div class="body">
<span>请确认是否批量删除学员</span>
</div>
<div class="del_btnbox">
<div class="del_btn btn2" style="margin-right: 32px">
<div class="btnText" @click="delete_exit">取消</div>
</div>
<div class="del_btn btn2">
<div class="btnText" @click="delete_exit">确定</div>
</div>
</div>
</div>
</div>
</a-modal>
<!-- 面授管理二维码 -->
<a-modal
v-model:visible="copyModal"
:footer="null"
:closable="closeCopy"
wrapClassName="facemanageModal"
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="closeCopyModal"></div>
</div>
<div class="body">
<div><img src="../../assets/images/taskpage/erweima.png" /></div>
</div>
<div class="footerr">
<div class="onload">下载二维码</div>
<div class="onloadpx">200*200</div>
<!-- <div class="onloadpx">400*400</div>
<div class="onloadpx">800*800</div> -->
</div>
</div>
</div>
</a-modal>
<!-- 直播管理二维码 -->
<a-modal
v-model:visible="zhibModal"
:footer="null"
:closable="closeCopy"
wrapClassName="facemanageModal"
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="closezhibModal"></div>
</div>
<div class="body">
<div><img src="../../assets/images/taskpage/erweima.png" /></div>
</div>
<div class="footerr">
<div class="onload">下载二维码</div>
<div class="onloadpx">200*200</div>
<!-- <div class="onloadpx">400*400</div>
<div class="onloadpx">800*800</div> -->
</div>
</div>
</div>
</a-modal>
<!-- 活动管理二维码 -->
<a-modal
v-model:visible="huodModal"
:footer="null"
:closable="closeCopy"
wrapClassName="facemanageModal"
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="closehuodModal"></div> -->
</div>
<div class="body">
<div><img src="../../assets/images/taskpage/erweima.png" /></div>
</div>
<div class="footerr">
<div class="onload">下载二维码</div>
<div class="onloadpx">200*200</div>
<!-- <div class="onloadpx">400*400</div>
<div class="onloadpx">800*800</div> -->
</div>
</div>
</div>
</a-modal>
<!-- 添加学员抽屉 -->
<!-- <path-add-stu v-model:Stuvisible="Stuvisible" /> -->
<!-- 添加学员抽屉 -->
<proj-check-ship
v-model:ProjCheckvisible="Stuvisible"
:selectProjectId="routerId"
v-model:addAuthList="addAuthList"
:authClassify="authClassify"
classify="learnPath"
:type="2"
/>
<!-- 导入学员抽屉 -->
<imp-stu v-model:AddImpStuvisible="AddImpStuvisible" />
<!-- 学员管理查看抽屉 -->
<check-stu
v-model:CheckStuvisible="CheckStuvisible"
v-model:routerId="routerId"
v-model:studentId="studentId"
/>
<!-- 面授学员抽屉 -->
<RouterFaceStu
:permissions="permissions"
:createId="createId"
v-model:FSvisible="FSvisible"
:datasource="facestudent"
:type="2"
:routerId="routerId"
/>
<!-- 活动考勤抽屉 -->
<active-attendance
:permissions="permissions"
:createId="createId"
v-model:AAvisible="AAvisible"
:datasource="liveData"
:title="showKaoqinText"
types="2"
classify="2"
/>
<!-- 时间管理抽屉 -->
<time-manage
:permissions="permissions"
:createId="createId"
v-model:Tvisible="visible"
:title="showTimeText"
/>
<!-- 考试管理抽屉 -->
<test-manage
:permissions="permissions"
:createId="createId"
v-model:TMvisible="TMvisible"
:title="showTestText"
/>
<!-- 面授管理抽屉 -->
<face-manage
:permissions="permissions"
:createId="createId"
v-model:Fvisible="FaceVisivle"
/>
<!-- 作业管理抽屉 -->
<work-manage
:permissions="permissions"
:createId="createId"
v-model:Wvisible="Wvisible"
/>
</div>
<!-- 加载动画 -->
<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">{{ styTitle }}</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">
当前路径共{{ routeChapters }}个关卡,{{ routeTasks }}个任务
</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="pubtn2" @click="closePub" style="margin-right: 32px"
>取消</a-button
>
<a-button class="pubtn2" @click="releaseLearnPath">发布</a-button>
</div>
</div>
<!-- 加载动画 -->
<div class="aeLoading" :style="{ display: pubLoading ? 'flex' : 'none' }">
<a-spin :spinning="pubLoading" />
</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 btn2"
@click="closeBackModal"
style="margin-right: 32px"
>
<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 btn2"
@click="closeCopy"
style="margin-right: 32px"
>
<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 btn2"
@click="closeStopModal"
style="margin-right: 32px"
>
<div class="btnText">取消</div>
</div>
<div class="del_btn btn2" @click="stopLearnPath">
<div class="btnText">确定</div>
</div>
</div>
</div>
</div>
</a-modal>
<!-- 二维码弹窗 -->
<two-dimensional-code
v-model:codevisible="codevisible"
:codeInfo="codeInfo"
index="0"
type="课程二维码"
/>
<!-- 二维码弹窗 -->
<!-- 面授管理抽屉 开始 -->
<ProjectFaceTaskManage
:permissions="permissions"
:createId="createId"
:type="2"
v-model:visible="faceTeachModelVisible"
:datasource="faceData"
/>
<!-- 面授管理抽屉 结束-->
<!-- 系统考试管理抽屉 开始-->
<router-examination-manage
:permissions="permissions"
:createId="createId"
v-model:ExaminationModelVisible="examinationModelVisible"
:title="examinationModelVisibleTitle"
:datasource="examinationData"
:levelName="examLevelName"
/>
<!-- 系统考试管理抽屉 结束-->
<!-- 外部考试管理抽屉 开始-->
<router-examination-external-manage
:permissions="permissions"
:createId="createId"
v-model:ExaminationExaminaModelVisible="examinationExaminaModelVisible"
:title="examinationModelVisibleTitle"
:datasource="examinationData"
:outchapter="outchapter"
:levelName="examLevelName"
/>
<!-- 外部考试管理抽屉 结束-->
<!-- 测评管理抽屉 开始-->
<router-evaluation-manage
:permissions="permissions"
:createId="createId"
v-model:EvaluationModelVisible="evaluationModelVisible"
:title="evaluationModelVisibleTitle"
:datasource="evaluationData"
:levelName="evaluationLevelName"
/>
<!-- 测评管理抽屉 结束-->
<!-- 作业管理抽屉 开始-->
<router-homework-manage
:permissions="permissions"
:createId="createId"
v-model:HomeworkModelVisible="homeworkModelVisible"
:title="homeworkModelVisibleTitle"
:datasource="homeworkData"
/>
<!-- 作业管理抽屉 结束-->
<!-- 公共管理抽屉 开始-->
<router-common-manage
:permissions="permissions"
:createId="createId"
v-model:CommonModelVisible="commonModelVisible"
:title="commonModelVisibleTitle"
:datasource="commonData"
:outchapter="outchapter"
:levelName="commonLevelName"
/>
<!-- 公共管理抽屉 结束-->
<!-- 投票管理抽屉 开始-->
<router-vote-manage
:permissions="permissions"
:createId="createId"
v-model:VoteModelVisible="voteModelVisible"
:title="voteModelVisibleTitle"
:datasource="voteData"
:outchapter="outchapter"
:levelName="voteLevelName"
/>
<!-- 投票管理抽屉 结束-->
<!-- 项目管理抽屉 开始-->
<router-project-manage
:permissions="permissions"
:createId="createId"
v-model:PjModelVisible="pjModelVisible"
:title="pjModelVisibleTitle"
:datasource="pjData"
:levelName="pjLevelName"
/>
<!-- 项目管理抽屉 结束-->
<!-- 批量面授报名 -->
<task-imp-stu
v-model:TaskFaceImpStuvisible="TaskFaceImpStuvisible"
:type="2"
:routerId="routerId"
/>
</div>
</template>
<script>
import { ref, reactive, toRefs, onMounted, createVNode, watch } from "vue";
import { ExclamationCircleOutlined } from "@ant-design/icons-vue";
import { message, Modal } from "ant-design-vue";
import ProjCheckShip from "../../components/drawers/ProjCheckPower";
import ImpStu from "../../components/drawers/AddLevelImportStu";
import CheckStu from "../../components/drawers/CheckStu";
import RouterFaceStu from "../../components/drawers/router/RouterFaceStu";
import ActiveAttendance from "../../components/drawers/ActiveAttendance";
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 { useRouter, useRoute } from "vue-router";
import { getRouterOverview } from "@/api/indexLearningPath";
import { handleLearnPath } from "../../api/index1";
import { GetRouterDetail } from "@/api/indexTask";
import * as api from "../../api/index1";
import { editRouteredDoc } from "../../api/indexLearningPath";
import TwoDimensionalCode from "../../components/TwoDimensionalCode.vue";
import TableStudent from "@/components/student/TableStudent";
import { getStuPage, moveStudent } from "@/api/index1";
import RouterExaminationManage from "../../components/drawers/router/RouterExaminationManage";
import RouterExaminationExternalManage from "../../components/drawers/router/RouterExaminationExternalManage";
import RouterEvaluationManage from "../../components/drawers/router/RouterEvaluationManage";
import ProjectFaceTaskManage from "../../components/drawers/project/ProjectFaceTaskManage";
import RouterHomeworkManage from "../../components/drawers/router/RouterHomeworkManage";
import RouterCommonManage from "../../components/drawers/router/RouterCommonManage";
import RouterVoteManage from "../../components/drawers/router/RouterVoteManage";
import RouterProjectManage from "../../components/drawers/router/RouterProjectManage";
import ImpoterGroupLeader from "@/components/drawers/project/ImpoterGroupLeader.vue";
import TaskImpStu from "../../components/drawers/TaskFaceIn";
import { checkPer } from "@/utils/utils";
export default {
name: "LevelAdd",
components: {
ImpoterGroupLeader,
ProjectFaceTaskManage,
ProjCheckShip,
ImpStu,
CheckStu,
RouterFaceStu,
ActiveAttendance,
TimeManage,
TestManage,
FaceManage,
WorkManage,
SeeStu,
TwoDimensionalCode,
TableStudent,
TaskImpStu,
RouterExaminationManage,
RouterExaminationExternalManage,
RouterEvaluationManage,
RouterHomeworkManage,
RouterCommonManage,
RouterVoteManage,
RouterProjectManage,
},
setup() {
const router = useRouter();
const route = useRoute();
const stuRef = ref();
// const store = useStore();
const state = reactive({
createId: null,
permissions: "",
hasTask: false,
stage: [],
statess: [],
routerId: route.query.routerId
? route.query.routerId
: localStorage.getItem("routerId"), //学习路径页面传的学习路径id
gatename: null, //关卡名称
gatenamee: null, //学员管理关卡名称
action: null,
act: null,
pub: false, //发布弹窗
pubLoading: false, //发布loading
backModal: false, //撤回弹窗
dcopyModal: false, //复制弹窗
closeBack: false,
routeStudentsNum: null,
routeChapters: null,
routeTasks: null,
dcloseCopy: false,
dicloseCopy: false,
stopModal: false, //结束弹窗
deleteAll: false, //批量删除学员弹窗
Stuvisible: false, //添加学员抽屉
AddImpStuvisible: false, //导入学员抽屉
CheckStuvisible: false, //学员管理的查看抽屉
addLoading: false, // 加载动画
choosedStageId: 1, // 选择的阶段id
choosedStageIndex: 0, // 选择的阶段ID
selectedRowKeys: [],
twobtn: true,
number: true,
twobtnn: false,
Seevisible: false,
checkStuId: null,
inputbox: false,
Wvisible: false, //作业管理
studentId: null,
styTitle: null,
cretime: null,
picUrl: null,
remark: null,
projectNameList: [
// 2022-11-30注释 后面放开
// {
// value: "1",
// label: "导出信息",
// },
// {
// value: "2",
// label: "批量调整关卡",
// },
{
value: "3",
label: "批量删除",
},
],
// 共享文档列表
docList: [
// {
// name: "测试文档1.doc",
// src: "",
// },
// {
// name: "测试文档2.doc",
// src: "",
// },
// {
// name: "测试文档3.doc",
// src: "",
// },
],
huodModal: false,
zhibModal: false,
//任务大纲列表
taskSyllabus: [
// {
// name: "关卡1 初级产品经理",
// taskList: [
// {
// course: "在线",
// name: "时间管理",
// classify: "选修",
// beginTime: "2022-09-10 14:03",
// total: 50, //总人数
// complete: 20, //完成人数
// percent: 40,
// routerTaskId: 0,
// },
// ],
// },
],
activeKey: ref("1"),
value: ref(" "),
nubvalue: ref("1"),
nubvalue2: ref("1"),
nubvalue3: ref("4"),
nubvalue1: ref("4"),
fileList: [],
docChecked: true,
currentPage: 1,
tableDataTotal: -1,
stuTotal: 0,
pageSize: 10,
visiblene: false,
sh: false,
nodata: true,
closeDeleteAll: false,
curLevel: undefined,
curLevelName: "",
curStuID: "",
taskSyllabusActive: 0,
//在线管理等页面传递参数
showTimeText: "",
//考试、测评页面传递参数
showTestText: "",
//直播、活动页面传递参数
showKaoqinText: "",
FSvisible: false, //面授学员
AAvisible: false, //活动/直播考勤
copyModal: false, //面授二维码弹窗
closeCopy: false, //面授二维码关闭图标
visible: false, //时间管理
TMvisible: false, //考试管理
FaceVisivle: false, //面授管理
stateName: null, // 关卡名称
//关卡的数据
level: [
// {
// id: 1,
// lev: "关卡2",
// name: "中级产品经理",
// count: 3,
// online: 5,
// homework: 1,
// juan: 1,
// ballot: 1,
// test: 1,
// },
// {
// id: 2,
// lev: "关卡2",
// name: "初级产品经理",
// count: 3,
// online: 5,
// homework: 1,
// juan: 1,
// ballot: 1,
// test: 1,
// },
],
tableData: [],
authClassify: 3,
addAuthList: [],
codevisible: false, //二维码是否显示
codeInfo: null, //二维码内容
levelTotal: 0, //设置基本信息需判断的关卡总数
previewSelect: 0,
studySelect: 0,
previewStartNum: 0,
previewEndNum: 0,
studyStartNum: 0,
studyEndNum: 0,
pjModelVisible: false,
faceTeachModelVisible: false,
examinationModelVisible: false,
examinationExaminaModelVisible: false,
evaluationModelVisible: false,
homeworkModelVisible: false,
commonModelVisible: false,
voteModelVisible: false,
projectModelVisible: false,
faceTeachModelVisibleTitle: "",
examinationModelVisibleTitle: "",
outchapter: "",
evaluationModelVisibleTitle: "",
homeworkModelVisibleTitle: "",
commonModelVisibleTitle: "",
voteModelVisibleTitle: "",
projectModelVisibleTitle: "",
pjModelVisibleTitle: "",
faceData: "",
examinationData: "",
evaluationData: "",
homeworkData: "",
commonData: "",
liveData: "",
voteData: "",
projectData: "",
pjData: "",
commonLevelName: "",
examLevelName: "",
evaluationLevelName: "",
voteLevelName: "",
projectLevelName: "",
pjLevelName: "",
facestudent: "",
locationHref:
location.href.indexOf("http://") !== -1
? "http://43.143.139.204:12016/"
: location.href.slice(0, location.href.indexOf("/m")) +
process.env.VUE_APP_FILE_PATH,
isreload: true,
TaskFaceImpStuvisible: false,
uploadAction: process.env.VUE_APP_BASE_API + "/file/uploadunlimit",
});
const levelList = reactive({
routerInfoOverview: {
// 路径图整体数据概览
totalStudentCnt: 0,
studyStudentCnt: 0,
completeStudentCnt: 0,
onlineCourseCnt: 0,
offLineCourseCnt: 0,
completeRatio: 0,
},
chapterOverviewList: {
// 路径图阶段数据概览
completeCourseRatio: 0,
completeExamRatio: 0,
completeRatio: 0,
totalTaskCnt: 0,
totalReqCnt: 0,
totalOptCnt: 0,
},
stageList: [
// 阶段列表
{
stageId: 1,
name: "关卡一xx",
},
{
stageId: 2,
name: "关卡二xx",
},
],
});
const tableDataFunc = () => {
const columns = [
// {
// title: "姓名",
// dataIndex: "name",
// // width: "30%",
// key: "name",
// width: 110,
// align: "left",
// className: "classify",
// scopedSlots: { customRender: "action" }, //引入的插槽
// customRender: (text) => {
// // console.log(text.record.checked1);
// return (
// <div class="racona">
// <span> {text.record.name}</span>
// {/**
// <div class="img"></div>
// <a-checkbox class="ch" checked={text.record.checkedd}>
// {text.record.lei}
// </a-checkbox>
// */}
// </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: "currentStageName",
key: "currentStageName",
width: 110,
align: "center",
className: "h",
},
{
title: "进度",
dataIndex: "jin",
key: "jin",
width: 110,
align: "center",
className: "h",
customRender: ({ record }) => (
<div>
{record.finishTaskNum || 0}/{record.totalTaskNum || 0}
</div>
),
},
// {
// title: "开始时间",
// dataIndex: "time",
// key: "time",
// width: 120,
// align: "center",
// className: "h",
// },
// {
// title: "操作",
// className: "h",
// dataIndex: "opacation",
// key: "opacation",
// width: 140,
// align: "center",
// fixed: "right",
// scopedSlots: { customRender: "action" }, //引入的插槽
// customRender: (text) => {
// return (
// <div class="opa">
// <div class="opacation">
// {/**
// 2022-11-30注释 后面放开
// <span
// onClick={() => {
// showCheckStu(text.record.studentId);
// state.Seevisible = true;
// }}
// style="color:#4EA6FF;margin-right:25px;cursor:pointer"
// >
// 查看
// </span>
// */}
// {/**
// 2022-11-30注释 后面放开
// <span
// onClick={() => {
// state.visiblene = true;
// console.log(text.record.cur);
// }}
// style="color:#4EA6FF;margin-right:25px;cursor:pointer"
// >
// 调整
// </span>
// */}
// <span
// style="color:#4EA6FF;cursor:pointer"
// onClick={() => {
// delConfirm(text.record.studentId);
// }}
// >
// 删除
// </span>
// </div>
// </div>
// );
// },
// },
];
return columns;
};
const onSelectChange = (selectedRowKeys) => {
console.log("selectedRowKeys changed: ", selectedRowKeys);
state.selectedRowKeys = selectedRowKeys;
};
const showDeleteALLModal = () => {
state.deleteAll = true;
};
const closeDeleteALLModal = () => {
state.deleteAll = false;
};
const showModal = () => {
state.visible = true;
};
const closeChangeModal = () => {
state.curLevel = undefined;
state.curStuID = "";
state.curLevelName = "";
state.visiblene = false;
};
const showAddStu = () => {
state.Stuvisible = true;
};
const showImpStu = () => {
state.AddImpStuvisible = true;
};
const showCheckStu = (id) => {
state.CheckStuvisible = true;
state.studentId = id;
};
const showbtn = () => {
state.twobtn = false;
state.twobtnn = true;
state.number = false;
state.inputbox = true;
};
const closebtn = () => {
state.twobtnn = false;
state.twobtn = true;
state.number = true;
state.inputbox = false;
myGetRouterDetail();
};
const showCopyModal = () => {
state.copyModal = true;
};
const closeCopyModal = () => {
state.copyModal = false;
};
//面授学员的弹窗
const showFS = (item) => {
state.FSvisible = true;
state.facestudent = item;
console.log("facestudent", state.facestudent);
};
//考勤的抽屉
const showAA = (course, a, data) => {
console.log("直播管理", data);
state.AAvisible = true;
state.liveData = data;
state.showKaoqinText = "直播";
console.log(state.showKaoqinText, 1111, data);
};
// 时间管理
const showTime = (course) => {
console.log("点击管理", course);
state.visible = true;
state.showTimeText = "【" + course + "】" + "管理";
// console.log("state.showTimeText", state.showTimeText);
};
//考试管理的抽屉
const showTest = (course, name) => {
state.TMvisible = true;
state.showTestText = "【" + course + "】" + name;
};
//新增
const showFace = () => {
//面授管理的抽屉
// console.log("点击管理");
state.FaceVisivle = true;
};
//作业管理的抽屉
const showWork = () => {
state.Wvisible = true;
};
const showzhibModal = () => {
state.zhibModal = true;
};
const showhuodModal = () => {
state.huodModal = true;
};
const closezhibModal = () => {
state.zhibModal = false;
};
const closehuodModal = () => {
state.huodModal = false;
};
const stageChange = (name, id, index) => {
state.choosedStageId = id;
state.stateName = name;
state.choosedStageIndex = index;
};
const changeTabs = (e) => {
console.log("切换tabs", e, state.routerId);
if (e == 2) {
myGetRouterDetail();
}
//学员管理
if (e == 3) {
getStudent();
}
};
// 面授课点击管理弹框
const faceTeachModel = (data) => {
console.log(data);
state.faceTeachModelVisible = true;
state.faceTeachModelVisibleTitle = data.name;
state.faceData = data;
// 面授课弹框名称 RouterFaceTeachManage
};
// 考试点击管理弹框
const examinationModel = (data, levelname, outchapterid) => {
console.log(data);
if (data.examType == 2) {
// 外部考试
state.examinationExaminaModelVisible = true;
state.outchapter = outchapterid;
} else {
// 系统考试
state.examinationModelVisible = true;
}
state.examLevelName = levelname;
state.examinationModelVisibleTitle = data.name;
state.examinationData = data;
// 考试弹框名称 RouterExaminationManage
};
// 测评点击管理弹框
const evaluationModel = (data, levelname) => {
console.log(data);
state.evaluationLevelName = levelname;
state.evaluationModelVisible = true;
state.evaluationModelVisibleTitle = data.name;
state.evaluationData = data;
// 测评弹框名称 RouterEvaluationManage
};
// 投票点击管理弹框
const voteModel = (data, levelname, outchapterid) => {
console.log(data);
state.voteLevelName = levelname;
state.voteModelVisible = true;
state.voteModelVisibleTitle = data.name;
state.voteData = data;
state.outchapter = outchapterid;
// 投票弹框名称 RouterVoteManage
};
// 项目点击管理弹框
const projectModel = (data, levelsName) => {
console.log(data, levelsName);
state.pjModelVisible = true;
state.pjLevelName = levelsName;
state.pjModelVisibleTitle = data.name;
state.pjData = data;
// 项目弹框名称 RouterProjectManage
};
// 作业点击管理弹框
const homeworkModel = (data) => {
console.log(data);
state.homeworkModelVisible = true;
state.homeworkModelVisibleTitle = data.name;
state.homeworkData = data;
// 作业弹框名称 RouterHomeworkManage
};
// 在线、案例、外链、评估、直播、活动点击管理弹框
const commonModel = (data, levelname, outchapterid) => {
state.commonLevelName = levelname;
console.log(data);
state.commonModelVisible = true;
state.commonModelVisibleTitle = data.name;
state.commonData = data;
state.outchapter = outchapterid;
// 公共模块弹框名称 RouterCommonManage
};
//学员管理------------------------------------------------
//获取学员列表
const getStudent = () => {
let obj = {
name: state.gatenamee,
pageNo: state.currentPage,
pageSize: 10,
routerId: state.routerId,
};
api
.getStuPage(obj)
.then((res) => {
console.log("获取学员列表", res);
let data = res.data.data.rows || null;
state.tableDataTotal = res.data.data.total;
state.stuTotal = res.data.data.total;
state.tableData = [];
if (data.length) {
for (let i in data) {
let _time = new Date(data[i].beginStudyTime * 1000);
state.tableData.push({
key: data[i].studentId,
com: data[i].userInfoBo.deptName,
name: data[i].name,
gang: data[i].userInfoBo.jobName,
cur: data[i].currentChapterName || "0",
jin: data[i].completeChapterCnt + "/" + data[i].totalChapterCnt,
time: _time.toLocaleDateString(),
studentId: data[i].studentId,
});
// state.tableData[i].key = i+1;
// state.tableData[i].com = data[i].userInfoBo.deptName;
// state.tableData[i].name = data[i].userInfoBo.userName
// state.tableData[i].gang = data[i].userInfoBo.jobName
// state.tableData[i].cur = data[i].currentChapterName || '0'
// state.tableData[i].jin = data[i].completeChapterCnt+'/'+ data[i].totalChapterCnt
// state.tableData[i].time = _time.toLocaleDateString()
}
}
})
.catch((err) => {
console.log("获取学员列表失败", err);
});
};
const checkType = (type) => {
let typeRules = [
"",
"在线",
"面授",
"案例",
"作业",
"考试",
"直播",
"外链",
"讨论",
"活动",
"测评",
"评估",
"投票",
"项目",
];
return typeRules[type];
};
//学员管理------------------------------------------------
onMounted(() => {
state.addLoading = true;
getOverview();
myGetRouterDetail();
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) => {
if (res.data.code === 200) {
console.log("发布成功", res);
message.destroy();
message.success("发布成功");
state.pub = false;
state.nodata = false;
// getLearnPath();
}
if (res.data.code === -1) {
message.warning(res.data.msg);
}
reget();
})
.catch((err) => {
console.log("发布失败", err);
});
};
//显示发布弹窗
const showPub = () => {
state.pub = true;
state.pubLoading = true;
// state.releasePathId = routerId;
api
.getLearnCount(state.routerId)
.then((res) => {
if (res.status === 200) {
// console.log("获取关卡、任务、学员统计数据", res.data);
// state.routeStudentsNum = res.data.students;
state.routeChapters = res.data.data.chapters;
state.routeTasks = res.data.data.tasks;
}
})
.catch((err) => {
console.log("err", err);
});
//获取学员列表
let stuobj = {
pageNo: 1,
pageSize: 10,
pid: state.routerId,
type: 2,
};
getStuPage(stuobj)
.then((res) => {
console.log("获取学员列表", res.data.data.total);
if (res.data.code === 200) {
state.routeStudentsNum = res.data.data.total;
state.pubLoading = false;
}
})
.catch((err) => {
console.log("获取学员列表失败", err);
});
};
const pubIcon = (action) => {
if (action == 1) {
showBackModal();
} else {
showPub();
}
};
//显示撤回弹窗
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();
state.nodata = true;
})
.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) => {
console.log("获取路径图详情", res);
state.styTitle = res.data.data.routerInfo.name;
state.cretime = res.data.data.routerInfo.createTime;
state.picUrl = res.data.data.routerInfo.picUrl;
state.action = res.data.data.routerInfo.status;
state.remark = res.data.data.routerInfo.remark;
state.hasTask = !!res.data.data?.chapterList?.some(
({ taskList }) => taskList.length
);
state.act =
state.action == 0
? "发布"
: state.action == 1
? "撤回"
: state.action == -1
? ""
: "-";
});
};
// 获取项目概览
const getOverview = () => {
getRouterOverview(state.routerId)
.then((res) => {
console.log("学习路径图概览数据获取", res);
Object.keys(res.data.data.routerInfoOverview).forEach((item) => {
levelList.routerInfoOverview[item] =
res.data.data.routerInfoOverview[item] || 0;
});
console.log("学习路径图概览数据获取1", levelList);
Object.keys(res.data.data.chapterOverviewList).forEach((item) => {
levelList.chapterOverviewList[item] =
res.data.data.chapterOverviewList[item] || 0;
});
// res.data.data.routerInfoOverview.forEach((r) => {
// console.log(r)
// })
state.addLoading = false;
// console.log("项目概览--", res);
})
.catch((err) => {
state.addLoading = false;
message.error("概览获取失败");
console.log("获取失败" + err);
});
};
// 设置上传图片开关
const checkedClose = (data, a) => {
console.log(data, a);
state.docChecked = data;
console.log({
routerId: state.routerId,
status: state.action,
attachSwitch: data ? 1 : -1,
});
// 更新开关状态
editRouteredDoc({
attach: JSON.stringify(state.fileList),
name: state.styTitle,
picUrl: state.picUrl,
remark: state.remark,
id: state.routerId,
status: state.action,
attachSwitch: data ? 1 : -1,
})
.then((res) => {
console.log(res);
})
.catch((err) => {
console.log(err);
});
};
// 获取路径列表
const myGetRouterDetail = () => {
console.log("执行-------myGetRouterDetail");
GetRouterDetail(state.routerId)
.then((res) => {
console.log("router-list", res);
state.fileList = JSON.parse(res.data.data.routerInfo.attach);
state.createId = res.data.data.routerInfo.createId;
state.permissions = res.data.data.routerInfo.permissions;
console.log("asdasdasd-------->", state.fileList);
state.docChecked =
res.data.data.routerInfo.attachSwitch == 1 ? true : false;
if (res.data.data.routerInfo.status == 1) {
state.nodata = false;
}
let data = res.data.data.chapterList;
console.log(
"----------------111111111111111-----------------2222222222",
res.data.data.chapterList
);
state.stage = res.data.data.chapterList.map((e) => ({
id: e.id,
name: e.name,
}));
state.statess = res.data.data.chapterList.map((e) => ({
value: e.id,
label: e.name,
}));
state.taskSyllabus = data;
// for(let i in data) {
// state.taskSyllabus[i].name = data[i].name
// if(data[i].taskList.length > 0) {
// for(let j in data[i].taskList) {
// Object.keys(data[i].taskList[j]).forEach(item => {
// state.taskSyllabus[i].taskList[j][item] = data[i].taskList[j][item] || 0
// })
// }
// }
levelList.stageList = [];
for (let i in data) {
if (i == 0) {
state.stateName = data[0].name;
}
levelList.stageList.push({
stageId: Number(i) + 1,
name: data[i].name,
});
}
//获取设置信息
if (res.data.code === 200) {
//previewSetting studySetting
if (res.data.data.chapterList) {
state.levelTotal = res.data.data.chapterList.length;
}
state.previewSelect = res.data.data.routerInfo.enablePreview;
state.studySelect = res.data.data.routerInfo.enableStudy;
if (res.data.data.routerInfo.previewSetting) {
let arr = res.data.data.routerInfo.previewSetting.split(",");
if (arr.length === 2) {
state.previewStartNum = arr[0];
state.previewEndNum = arr[1];
}
}
if (res.data.data.routerInfo.studySetting) {
let arr = res.data.data.routerInfo.studySetting.split(",");
if (arr.length === 2) {
state.studyStartNum = arr[0];
state.studyEndNum = arr[1];
}
}
}
})
.catch((err) => {
console.log(err);
// message.error("获取路径列表失败" + err);
});
};
const handleChange = (info) => {
if (info.file.status !== "uploading") {
console.log(info.file, info.fileList);
let list = state.fileList;
let str = JSON.stringify(list);
console.log(str);
//要编辑路径图
editRouteredDoc({
attach: str,
name: state.styTitle,
picUrl: state.picUrl,
remark: state.remark,
id: state.routerId,
status: state.action,
attachSwitch: state.docChecked ? 1 : -1,
})
.then((res) => {
console.log(res);
})
.catch((err) => {
console.log(err);
});
}
if (info.file.status === "done") {
message.success(`${info.file.name} 文件上传成功`);
} else if (info.file.status === "error") {
message.error(`${info.file.name} 文件上传失败.`);
}
};
const delConfirm = (id) => {
Modal.confirm({
title: "是否确认删除",
icon: createVNode(ExclamationCircleOutlined),
content: "",
okText: "确认",
cancelText: "取消",
onOk() {
api
.delStudent({ routerId: state.routerId, studentIds: [id] })
.then((res) => {
message.success("删除成功");
getStudent();
console.log(res);
})
.catch((err) => {
message.error("删除失败" + err);
console.log(err);
});
},
});
};
const searchLevel = () => {
// const result = state.tableData.filter(
// (item) => item.cur == state.gatenamee
// );
// state.tableData = result;
state.currentPage = 1;
getStudent();
};
const resetLevel = () => {
state.gatenamee = "";
getStudent();
};
const handleStuChange = (value) => {
console.log(value);
if (value == 2) {
state.visiblene = true;
}
if (value == 3) {
deleteStu();
}
};
const deleteStu = () => {
if (state.selectedRowKeys.length == 0) {
message.warning("请选择成员");
return;
}
let obj = {
routerId: state.routerId,
studentIds: state.selectedRowKeys,
};
api
.delStudent(obj)
.then((res) => {
console.log(res);
getStudent();
message.success("批量删除成功");
})
.catch((err) => {
message.error("批量删除失败" + err);
console.log(err);
});
};
const pageChange = (value) => {
state.currentPage = value;
getStudent();
};
const setconfig = () => {
let obj = {
autoJoinFlag: 0,
deptBoList: [
{
deptId: 0,
deptName: "",
},
],
preLearnFlag: 0,
previewFlag: 0,
routerId: 0,
showFlag: 0,
};
api
.setConfig(obj)
.then((res) => {
message.success("编辑成功");
console.log(res);
})
.catch((err) => {
console.log(err);
message.error("编辑失败");
});
};
const deFile = (id) => {
console.log(id);
let index = state.fileList.findIndex((item) => {
item.uid == id;
});
state.fileList.splice(index, 1);
let str = JSON.stringify(state.fileList);
//要编辑路径图
editRouteredDoc({
attach: str,
name: state.styTitle,
picUrl: state.picUrl,
remark: state.remark,
id: state.routerId,
status: state.action,
})
.then((res) => {
console.log(res);
message.destroy();
return message.success("删除成功");
})
.catch((err) => {
console.log(err);
message.warning("删除失败");
});
};
// 设置start------------------------------------------------------
//编辑基本信息
const editLearnInfo = () => {
let obj = {
id: state.routerId,
enablePreview: state.previewSelect ? 1 : 0,
enableStudy: state.studySelect ? 1 : 0,
previewSetting: state.previewStartNum + "," + state.previewEndNum,
studySetting: state.studyStartNum + "," + state.studyEndNum,
};
if (
state.previewStartNum > state.levelTotal ||
state.previewEndNum > state.levelTotal ||
state.studyStartNum > state.levelTotal ||
state.studyEndNum > state.levelTotal
)
return message.warning("关卡数超过范围");
console.log("编辑设置基本信息obj", obj);
api
.editLearnInfo(obj)
.then((res) => {
console.log("编辑设置基本信息成功", res);
if (res.data.code === 200) {
message.success("修改成功");
closebtn();
}
})
.catch((err) => {
console.log("编辑设置基本信息失败", err);
});
};
// 设置end-----------------------------------------------------
//添加学员
watch(
() => state.addAuthList,
(res) => {
console.log("res", res, state.addAuthList);
let obj = {
deptList: res[1],
groupList: res[2],
routerId: state.routerId,
studentList: res[0],
};
console.log("obj", obj);
api
.addStudent(obj)
.then((res) => {
console.log("添加学员成功", res);
message.success("添加学员成功");
getStudent();
})
.catch((err) => {
console.log("添加学员失败", err);
});
}
);
const totask = () => {
// console.log("state.taskSyllabus", state.taskSyllabus);
router.push({
path: "/leveladddetail",
query: { routerId: state.routerId },
});
// if (state.taskSyllabus.length===1) {
// if(state.taskSyllabus[0].taskList.length===0){
// // /leveladddetail
// }
// }
// state.activeKey = "2";
};
const tostudent = () => {
state.activeKey = "3";
getStudent();
// state.activeKey1 = "8";
};
//显示二维码弹窗
const showCodeModel = (item) => {
console.log("二维码任务信息", item);
let codeUrl = "";
// 在线课 停用 -- 暂时没有在线课停用标记
if (item.type == 1) {
// if (item.taskStatus == 1 || item.taskStatus == 2)
// return message.error("该任务无法学习,请联系管理员进行替换。");
codeUrl =
window.location.protocol +
process.env.VUE_APP_ONLINE_CLASS_URL +
item.courseId;
}
if (item.type == 2) {
// let date1 = new Date(item.endTime).getTime();
// let date2 = new Date().getTime();
// if (date1 < date2) return message.warning("当前面授课已结束");
// if (item.taskStatus == 1 || item.taskStatus == 2)
// return message.error("该任务无法学习,请联系管理员进行替换。");
// codeUrl =
// window.location.protocol +
// process.env.VUE_APP_H5 +
// "/faceteach?type=2&courseId=" +
// item.courseId +
// "&id=" +
// item.id; pathmappage?routerId=513&chapterId=730&isStudy=true
// codeUrl = window.location.protocol + process.env.VUE_APP_H5 + "/pathdetails?routerId=" + state.routerId;
codeUrl = window.location.protocol + process.env.VUE_APP_H5 + "/pathmappage?routerId=" + state.routerId + "&chapterId=" + item.chapterId + "&isStudy=true";
}
if (item.type == 3) return message.error("请在pc端完成");
if (item.type == 4) {
let date1 = new Date(item.endTime).getTime();
let date2 = new Date().getTime();
if (date1 < date2) return message.warning("当前作业已结束");
codeUrl =
window.location.protocol +
process.env.VUE_APP_H5 +
"/homeworkpage?courseId=" +
item.courseId +
"&type=2&id=" +
item.id +
"&chapterOrStageId=" +
item.chapterId +
"&infoId=" +
state.routerId;
}
// 考试 停用
if (item.type == 5) {
// if (item.taskStatus == 1 || item.taskStatus == 2)
// return message.error("该任务无法学习,请联系管理员进行替换。");
// 此处判断外部考试跳转
if (item.startTime == null || item.endTime == null) {
codeUrl =
window.location.protocol +
process.env.VUE_APP_H5 +
"/externalexam?type=2&courseId=" +
item.courseId +
"&id=" +
item.id +
"&chapterOrStageId=" +
item.chapterId +
"&infoId=" +
state.routerId;
} else {
codeUrl =
window.location.protocol +
process.env.VUE_APP_EXAM_DETAIL_URL +
item.targetId;
}
}
// 直播结束时间
if (item.type == 6) {
let date1 = new Date(item.endTime).getTime();
let date2 = new Date().getTime();
if (date1 < date2) return message.warning("当前直播已结束");
codeUrl =
window.location.protocol +
process.env.VUE_APP_H5 +
"/liveboradcast?courseId=" +
item.courseId +
"&type=2&id=" +
item.id +
"&chapterOrStageId=" +
item.chapterId +
"&infoId=" +
state.routerId;
}
// 外链
if (item.type == 7) {
codeUrl =
window.location.protocol +
process.env.VUE_APP_H5 +
"/outerchain?courseId=" +
item.courseId +
"&type=2&id=" +
item.id +
"&chapterOrStageId=" +
item.chapterId +
"&infoId=" +
state.routerId;
}
//讨论
if (item.type == 8) {
codeUrl =
window.location.protocol +
process.env.VUE_APP_H5 +
"/discusspage?courseId=" +
item.courseId +
"&type=2&id=" +
item.id +
"&chapterOrStageId=" +
item.chapterId +
"&infoId=" +
state.routerId;
}
//活动
if (item.type == 9) {
let date1 = new Date(item.endTime).getTime();
let date2 = new Date().getTime();
if (date1 < date2) return message.warning("当前活动已结束");
codeUrl =
window.location.protocol +
process.env.VUE_APP_H5 +
"/activitiespage?courseId=" +
item.courseId +
"&type=2&id=" +
item.id +
"&chapterOrStageId=" +
item.chapterId +
"&infoId=" +
state.routerId;
}
//活动
if (item.type == 10) {
codeUrl =
window.location.protocol +
process.env.VUE_APP_H5 +
"/evaluation?courseId=" +
item.courseId +
"&evaType=" +
item.evaType +
"&type=2&targetId=" +
item.targetId +
"&id=" +
item.id +
"&chapterOrStageId=" +
item.chapterId +
"&infoId=" +
state.routerId;
}
// 评估 停用
if (item.type == 11) {
// if (item.taskStatus == 1 || item.taskStatus == 2)
// return message.error("该任务无法学习,请联系管理员进行替换。");
console.log("item", item);
codeUrl =
window.location.protocol +
process.env.VUE_APP_H5 +
"/investigatpage?courseId=" +
item.courseId +
"&type=2&id=" +
item.id +
"&chapterOrStageId=" +
item.chapterId +
"&infoId=" +
state.routerId;
}
// 投票
if (item.type == 12) {
codeUrl =
window.location.protocol +
process.env.VUE_APP_H5 +
"/ballotpage?courseId=" +
item.courseId +
"&btype=2&id=" +
item.id +
"&chapterOrStageId=" +
item.chapterId +
"&type=2&infoId=" +
state.routerId;
}
// 项目
if (item.type == 13) {
codeUrl =
window.location.protocol +
process.env.VUE_APP_H5 +
"/projectdetails?type=2&projectId=" +
item.courseId +
"&id=" +
item.id +
"&chapterOrStageId=" +
item.chapterId +
"&type=2&infoId=" +
state.routerId;
}
state.codevisible = true;
let obj = {
title: "[" + checkType(item.type) + "]二维码",
name: item.name,
url: codeUrl,
};
state.codeInfo = obj;
};
//显示二维码弹窗
const showCodeModel2 = () => {
state.codevisible = true;
let obj = {
title: "[学习路径]二维码",
name: state.styTitle,
url:
window.location.protocol +
process.env.VUE_APP_H5 +
"/pathdetails?routerId=" +
state.routerId,
};
state.codeInfo = obj;
};
//清空所选的学员
const clearChooseStu = () => {
Modal.confirm({
title: "确定清空所有学员吗?",
onOk: async () => {
state.addAuthList = [];
// student.studentDelAll({id: state.routerId, type: 2})
// state.tabledata = []
// state.tableDataTotal = 0;
},
bodyStyle: "margin-top:70%",
});
};
// 共享文档文件下载
const downloadFile = (url) => {
console.log(url);
window.open(
window.location.protocol +
process.env.VUE_APP_BOE_API_URL +
process.env.VUE_APP_FILE_PATH +
url
);
// if(url){
// const filename = '操作指南'
// const x = new XMLHttpRequest()
// x.open('GET', url, true)
// x.responseType = 'blob'
// x.onload = () => {
// // 会创建一个 DOMString其中包含一个表示参数中给出的对象的URL。这个 URL 的生命周期和创建它的窗口中的 document 绑定。这个新的URL 对象表示指定的 File 对象或 Blob 对象。
// const url = window.URL.createObjectURL(x.response)
// const a = document.createElement('a')
// a.href = url
// a.download = filename
// a.click()
// }
// x.send()
// }
};
// 点击学员管理-查看学员操作
function showStudent(record) {
console.log(record);
state.CheckStuvisible = true;
state.studentId = record.studentId;
}
// 调整关卡
function setLevels(record) {
console.log(record);
state.curLevelName = record.currentStageName;
state.curStuID = record.id;
state.visiblene = true;
}
// 选择要调整的关卡
function selectProjectName4(e) {
console.log(e);
state.curLevel = e;
}
// 点击确定 调整关卡
async function changeLevel() {
if (!state.curLevel) {
message.error("请选择关卡");
return;
}
state.visiblene = false;
message.success("调整关卡成功");
stuRef.value.startLoading();
await moveStudent({ targetId: state.curLevel, ids: [state.curStuID] });
state.curLevel = undefined;
state.curStuID = "";
state.curLevelName = "";
stuRef.value.getStuList();
}
// 面授课学员报名弹框
const showFaceStuSignUp = () => {
console.log("我点击了- 批量面授报名");
state.TaskFaceImpStuvisible = true;
};
return {
...toRefs(state),
...toRefs(levelList),
stuRef,
clearChooseStu,
showDeleteALLModal,
closeDeleteALLModal,
tableDataFunc,
onSelectChange,
showModal,
closeChangeModal,
showAddStu,
showImpStu,
showCheckStu,
showbtn, //设置-编辑
closebtn,
showFS,
showAA,
showCopyModal,
closeCopyModal,
showTime,
showTest,
showFace,
showWork,
showzhibModal,
showhuodModal,
closehuodModal,
closezhibModal,
changeTabs,
checkType,
handleChange,
handleStuChange,
delConfirm,
searchLevel,
resetLevel,
closePub,
releaseLearnPath,
showPub,
showBackModal,
closeBackModal,
recallPath,
showCopy,
closeCopy,
sureCopy,
closeStopModal,
stopLearnPath,
showStop,
reget,
stageChange,
pageChange,
setconfig,
deFile,
deleteStu,
totask,
tostudent,
checkedClose,
showCodeModel,
showCodeModel2,
editLearnInfo,
pubIcon,
faceTeachModel,
examinationModel,
evaluationModel,
voteModel,
projectModel,
homeworkModel,
commonModel,
downloadFile,
showStudent,
setLevels,
selectProjectName4,
changeLevel,
checkPer,
showFaceStuSignUp,
};
},
};
</script>
<style lang="scss">
.clear {
cursor: pointer;
font-size: 14px;
color: #387df7;
line-height: 24px;
position: absolute;
right: 60px;
}
.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 #4ea6ff;
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 #4ea6ff;
border-radius: 4px;
color: #ffffff;
font-size: 14px;
align-items: center;
//line-height: 36px;
background: #4ea6ff;
}
}
}
}
}
}
.clearfix:before,
.clearfix:after {
content: " ";
display: block;
clear: both;
}
.CopyModal {
.ant-modal {
width: 424px !important;
height: 258px !important;
.ant-modal-close-x {
display: none;
}
.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;
}
}
.docListStyle {
display: flex;
width: 500px !important;
align-items: center;
justify-content: space-between;
}
.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;
}
}
}
}
}
}
}
}
.facemanageModal {
.ant-modal {
width: 532px !important;
height: 428px !important;
.ant-modal-content {
width: 532px !important;
height: 428px !important;
.ant-modal-body {
width: 532px !important;
height: 428px !important;
padding: 0 !important;
.delete {
z-index: 999;
width: 532px;
height: 428px;
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;
}
}
.footerr {
display: flex;
justify-content: center;
align-items: center;
.onload {
color: rgba(51, 51, 51, 1);
font-size: 14px;
}
.onloadpx {
width: 80px;
height: 32px;
border: 1px solid rgba(56, 125, 247, 1);
border-radius: 4px;
color: rgba(56, 125, 247, 1);
margin-left: 20px;
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
}
}
}
}
}
}
}
}
.changeModal {
.ant-modal {
width: 549px !important;
height: 245px !important;
.ant-modal-close-x {
display: none;
}
.ant-modal-content {
width: 549px !important;
height: 245px !important;
.ant-modal-body {
padding: 0 !important;
width: 549px !important;
height: 245px !important;
.con {
// background-color: #bfa;
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;
}
}
}
}
}
}
}
}
}
.addwrapper {
width: 100%;
height: 100%;
.addhead {
width: 100%;
height: 130px;
// background-color: lightgreen;
display: flex;
align-items: center;
position: relative;
.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;
}
}
@media screen and (max-width: 1030px) {
.imgfor {
margin-left: 20px;
}
}
.right {
// width: 500px;
height: 100%;
// background-color: red;
position: absolute;
right: 0;
display: flex;
align-items: center;
.img1 {
width: 24px;
height: 24px;
margin-right: 50px;
}
.line {
height: 65%;
width: 1px;
background-color: #e8effa;
margin-right: 28px;
}
.pubIcon {
display: flex;
align-items: center;
.img2 {
width: 42px;
height: 42px;
margin-right: 22px;
}
.pub {
color: #ffb64e;
font-size: 14px;
margin-top: 5px;
margin-right: 30px;
cursor: pointer;
}
}
.img2 {
width: 42px;
height: 42px;
margin-right: 22px;
}
.return {
color: #4ea6ff;
font-size: 14px;
margin-top: 10px;
margin-right: 60px;
}
.more {
position: relative;
margin-right: 30px;
height: 30px;
display: flex;
align-items: center;
.moreArrow {
width: 13px;
height: 7px;
display: inline-block;
background-image: url("../../assets/images/navtop/down.png");
background-size: 100%;
margin: 2px;
margin-left: 15px;
}
.moreItems {
width: 110px;
// height: 80px;
padding-bottom: 12px;
display: none;
background: #ffffff;
box-shadow: 2px 3px 9px 3px rgba(0, 0, 0, 0.05);
// border-radius: 3px;
border: 0px solid #dcdcdc;
position: absolute;
left: -48px;
top: 30px;
z-index: 100;
cursor: pointer;
.sammo {
text-align: center;
margin-top: 12px;
cursor: pointer;
}
.sammo:hover {
color: #4ea6ff;
}
}
.moreItems:hover {
display: block;
}
}
@media screen and (max-width: 1240px) {
.line {
margin-right: 10px;
}
.img1 {
margin-right: 15px;
}
.img2 {
margin-right: 10px;
}
.return {
margin-right: 10px;
}
.pub {
margin-right: 10px;
}
.more {
margin-right: 10px;
}
}
.more:hover .moreArrow {
background-image: url("../../assets/images/navtop/up.png");
}
.more:hover .moreItems {
display: block;
}
}
}
.split {
width: 100%;
height: 20px;
background-color: #edf0f5;
}
.bom {
.tab {
margin-top: 10px;
// margin-left: 10px;
}
.ant-tabs > .ant-tabs-nav,
.ant-tabs > div > .ant-tabs-nav {
margin-left: 0px !important;
padding-left: 32px !important;
}
.onerow {
//width: 100%;
display: flex;
height: 40px;
position: relative;
margin-top: 15px;
margin-left: 38px;
//margin-right: 38px;
.taskmain {
font-size: 18px;
padding-top: 7px;
color: #000000;
}
.btn {
position: absolute;
top: 0;
right: 168px;
background-color: #4ea6ff;
width: 130px;
height: 40px;
border-radius: 8px;
border: 1px solid #4ea6ff;
color: #ffffff;
cursor: pointer;
}
.editright {
position: absolute;
right: 38px;
top: 0;
width: 110px;
height: 40px;
background: #4ea6ff;
border-radius: 8px;
display: flex;
justify-content: center;
align-items: center;
.editimg {
width: 15px;
height: 15px;
}
.editextb {
color: #fff;
margin-left: 10px;
}
}
// .edit:hover {
// color: #ffffff;
// background-color: #4ea6ff;
// cursor: pointer;
// .editimg {
// background-image: url("../../assets/images/projectadd/edit1.png");
// }
// }
}
.second {
display: flex;
justify-content: left;
flex-wrap: wrap;
margin-top: 40px;
margin-left: 20px;
.nubbox {
width: 253px;
height: 116px;
margin-top: 20px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
background: #fafbfc;
border-radius: 10px;
margin-left: 15px;
.nub1 {
color: #ffb54a;
font-size: 30px;
font-weight: 700;
}
.nub2 {
color: #6d7584;
font-size: 14px;
}
}
.taskbox {
width: 412px;
height: 160px;
border-radius: 10px;
position: relative;
margin-left: 68px;
margin-bottom: 40px;
cursor: pointer;
.leftt {
position: absolute;
top: 18px;
left: 0;
}
.photo {
position: absolute;
top: 42px;
left: 37px;
}
.rightt {
position: absolute;
top: 69px;
right: 26px;
}
.centerbox {
position: absolute;
top: 52px;
left: 145px;
font-size: 20px;
font-weight: 700;
//line-height: 36px;
}
.centermain {
color: rgba(135, 139, 146, 1);
font-size: 14px;
position: absolute;
left: 144px;
bottom: 49px;
}
}
}
.stagemess {
display: flex;
margin-left: 38px;
.stage1 {
width: 100px;
height: 33px;
text-align: center;
line-height: 34px;
border-radius: 6px;
color: #ffffff;
font-size: 16px;
background: #4ea6ff;
margin-right: 10px;
margin-top: 19px;
cursor: pointer;
}
.stage2 {
width: 100px;
height: 33px;
text-align: center;
line-height: 34px;
border-radius: 6px;
border: 1px solid #ebeef3;
color: #000000;
font-size: 16px;
background: #ffffff;
margin-right: 10px;
margin-top: 19px;
cursor: pointer;
}
}
.stagesecond {
display: flex;
margin-left: 39px;
margin-top: 29px;
.staname {
color: #999ba3;
font-size: 14px;
}
.stamess {
color: #4f5156;
font-size: 14px;
}
}
.stagelast {
display: flex;
flex-wrap: wrap;
justify-content: center;
margin-bottom: 55px;
.stagepro {
display: flex;
flex-direction: column;
align-items: center;
margin-top: 55px;
margin-right: 120px;
.ant-progress-circle-path {
stroke: #4ea6ff;
}
.ant-progress-text {
color: #4ea6ff;
font-weight: 700;
}
.protext {
color: #6d7584;
font-size: 14px;
margin-top: 25px;
}
}
.proright {
width: 500px;
margin-top: 55px;
margin-left: 50px;
.ant-progress-bg {
height: 24px !important;
background: #4ea6ff;
}
.ant-progress-inner {
height: 24px;
}
.pronub {
color: #4ea6ff;
font-size: 14px;
margin: 5px 0;
}
.proright1 {
display: flex;
justify-content: right;
.textpro {
color: #6d7584;
font-size: 14px;
margin-right: 20px;
}
.ant-progress-text {
color: #4ea6ff;
font-size: 14px;
font-weight: 700;
}
}
}
}
.sametab {
// margin-left: 30px;
// margin-right: 30px;
margin-top: 30px;
width: 100%;
// background-color: green;
.Lhead {
display: flex;
.btns {
display: flex;
margin-left: 20px;
// flex-wrap: wrap;
.btn {
padding: 0px 26px 0px 26px;
height: 38px;
background: rgba(64, 158, 255, 0);
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 {
background-size: 100%;
}
.btnText {
font-size: 14px;
font-weight: 400;
color: rgba(64, 158, 255, 1);
line-height: 36px;
margin-left: 5px;
}
}
.btn1 {
.search {
width: 15px;
height: 17px;
background-image: url("../../assets/images/courseManage/search1.png");
}
}
.btn2 {
.search {
width: 16px;
height: 18px;
background-image: url("../../assets/images/courseManage/reset1.png");
}
}
.btn3 {
margin-right: 0px;
.search {
width: 17px;
height: 18px;
background-image: url("../../assets/images/courseManage/add1.png");
}
}
.btn1:hover {
background: rgba(64, 158, 255, 1);
.search {
background-image: url("../../assets/images/courseManage/search0.png");
}
.btnText {
color: #ffffff;
}
}
.btn2:hover {
background: rgba(64, 158, 255, 1);
.search {
background-image: url("../../assets/images/courseManage/reset0.png");
}
.btnText {
color: #ffffff;
}
}
.btn3:hover {
background: rgba(64, 158, 255, 1);
.search {
background-image: url("../../assets/images/courseManage/add0.png");
}
.btnText {
color: #ffffff;
}
}
}
}
.Lbom {
position: relative;
margin-bottom: 20px;
.item {
width: 100%;
height: 200px;
// background-color: green;
margin-top: 40px;
border-radius: 8px;
border: 1px solid #f0f4fe;
.itemhead {
height: 50px;
width: 100%;
background-color: #f0f4fe;
display: flex;
align-items: center;
position: relative;
.lev {
margin-left: 27px;
margin-right: 16px;
line-height: 100%;
color: #4ea6ff;
font-size: 16px;
}
.lin {
width: 1px;
height: 35%;
background-color: #c7cbd2;
}
.nam {
margin-left: 16px;
color: #4f5156;
line-height: 100%;
font-size: 16px;
}
.count {
position: absolute;
line-height: 100%;
color: #4f5156;
font-size: 14px;
right: 40px;
span:nth-child(2) {
color: #63ca8c;
}
}
}
.itembomm {
display: flex;
align-items: center;
height: 150px;
.it {
// margin-left: 110px;
// margin-right: 110px;
width: 13%;
text-align: center;
.on {
font-size: 30px;
}
.ittext {
color: #4f5156;
margin-top: 16px;
margin-left: -5px;
}
}
.linee {
background-color: #ecf2fb;
width: 1px;
height: 55%;
}
.itright {
position: absolute;
right: 45px;
display: flex;
.te {
color: #4ea6ff;
font-size: 14px;
cursor: pointer;
}
.more {
position: relative;
height: 30px;
display: flex;
.moreArrow {
width: 13px;
height: 7px;
display: inline-block;
background-image: url("../../assets/images/navtop/down.png");
background-size: 100%;
margin: 2px;
margin-left: 7px;
margin-top: 6px;
}
.moreItems {
width: 80px;
height: 70px;
display: none;
background: #ffffff;
box-shadow: 2px 3px 9px 3px rgba(0, 0, 0, 0.05);
border-radius: 3px;
border: 0px solid #dcdcdc;
position: absolute;
left: 0px;
top: 20px;
z-index: 100;
.roleItem {
font-size: 14px;
font-weight: 400;
color: rgba(79, 81, 86, 1);
line-height: 36px;
display: flex;
justify-content: center;
cursor: pointer;
}
.roleItem:hover {
color: #4ea6ff;
}
}
}
.more:hover .moreArrow {
background-image: url("../../assets/images/navtop/up.png");
}
.more:hover .moreItems {
display: block;
}
}
}
.show {
color: blue;
}
.noshow {
display: none;
}
}
.create {
margin-top: 40px;
.taskbox {
width: 412px;
height: 160px;
border-radius: 10px;
position: relative;
// margin-left: 68px;
margin-bottom: 40px;
cursor: pointer;
.leftt {
position: absolute;
top: 18px;
left: 0;
}
.photo {
position: absolute;
top: 42px;
left: 37px;
}
.rightt {
position: absolute;
top: 69px;
right: 26px;
}
.centerbox {
position: absolute;
top: 52px;
left: 145px;
font-size: 20px;
font-weight: 700;
//line-height: 36px;
}
.centermain {
color: rgba(135, 139, 146, 1);
font-size: 14px;
position: absolute;
left: 144px;
bottom: 49px;
}
}
}
}
}
.cont {
display: flex;
.pad {
height: 100%;
width: 40px;
// background-color: red;
}
}
.onerow {
//width: 100%;
display: flex;
height: 40px;
position: relative;
margin-top: 15px;
margin-left: 38px;
//margin-right: 38px;
.taskmain {
font-size: 18px;
padding-top: 7px;
color: #000000;
}
.btn {
position: absolute;
top: 0;
right: 168px;
background-color: #4ea6ff;
width: 130px;
height: 40px;
border-radius: 8px;
border: 1px solid #4ea6ff;
color: #ffffff;
cursor: pointer;
}
.edit {
position: absolute;
right: 38px;
top: 0;
color: #4ea6ff;
width: 100px;
height: 40px;
border: 1px solid #4ea6ff;
border-radius: 8px;
.editimg {
width: 15px;
height: 15px;
margin-top: -2px;
margin-left: 25px;
margin-right: 5px;
}
.editext {
line-height: 40px;
}
}
.edit:hover {
color: #ffffff;
background-color: #4ea6ff;
cursor: pointer;
.editimg {
background-image: url("../../assets/images/projectadd/edit1.png");
}
}
}
.taskbox {
width: 412px;
height: 160px;
border-radius: 10px;
position: relative;
margin-left: 40px;
margin-bottom: 10px;
margin-top: 10px;
cursor: pointer;
.leftt {
position: absolute;
top: 18px;
left: 0;
}
.photo {
position: absolute;
top: 42px;
left: 37px;
}
.rightt {
position: absolute;
top: 69px;
right: 26px;
}
.centerbox {
position: absolute;
top: 52px;
left: 145px;
font-size: 20px;
font-weight: 700;
//line-height: 36px;
}
.centermain {
color: rgba(135, 139, 146, 1);
font-size: 14px;
position: absolute;
left: 144px;
bottom: 49px;
}
}
.taskSyllabus {
// flex: 1;
overflow-x: auto;
.ant-collapse {
border: 0px;
background-color: rgba(255, 255, 255, 0);
min-width: 1040px;
}
.ant-collapse-content > .ant-collapse-content-box {
padding-top: 0px;
padding-bottom: 0px;
}
.ant-collapse > .ant-collapse-item {
border: 0px;
}
.ant-collapse-header {
display: flex;
height: 49px;
background-color: #eff4fc;
align-items: center;
margin-top: 20px;
margin-left: 38px;
margin-right: 40px;
font-size: 16px;
font-weight: 400;
color: #4ea6ff;
line-height: 36px;
.ant-collapse-arrow {
margin-left: 15px !important;
}
}
.ant-collapse-content {
border-top: 0px;
}
}
.course {
//width: 100%;
flex-shrink: 0;
margin-right: 24px;
display: flex;
flex-wrap: wrap;
align-items: center;
padding: 25px 0px;
margin-left: 22px;
//margin: 0 12px;
border: 1px solid #f2f6fc;
border-top: 0px;
.first {
//position: relative;
display: flex;
flex-grow: 1;
align-items: center;
//height: 71px;
margin-left: 12px;
margin-right: 50px;
width: 120px;
.iconame {
//position: absolute;
color: #4f5156;
font-size: 16px;
margin-left: 4px;
}
.icontext {
//positipn: absolute;
color: #999ba3;
font-size: 14px;
margin-left: 12px;
width: 120px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
.type {
//height: 71px;
display: flex;
flex-grow: 1;
align-items: center;
margin-right: 50px;
.typename {
width: 63px;
height: 23px;
color: #5dc988;
font-size: 14px;
background-color: #f2f6fc;
border-radius: 4px;
text-align: center;
}
.typename1 {
width: 63px;
height: 23px;
color: #f0f4fe;
font-size: 14px;
background-color: #5dc988;
border-radius: 4px;
text-align: center;
}
}
.time {
//height: 71px;
flex-grow: 1;
margin-right: 50px;
width: 100px;
.timetext {
font-size: 14px;
color: #999ba3;
}
}
.progress {
width: 168px;
margin-left: 10px;
margin-right: 50px;
flex-grow: 1;
.progresstext {
color: #ffc067;
font-size: 14px;
}
}
.operations {
display: flex;
width: 240px;
//flex-grow: 1;
.operation {
color: #4ea6ff;
font-size: 14px;
padding: 10px;
margin-left: auto;
width: 63px;
text-align: center;
}
}
}
.xwid {
// width: 100%;
// height: 100%;
// background-color: #bfa;
position: relative;
margin-top: 30px;
display: flex;
margin-bottom: 20px;
// overflow-x: auto;
.pad {
height: 100%;
width: 40px;
flex-shrink: 0;
}
.xin {
width: 100%;
.xhead {
display: flex;
.btns {
display: flex;
margin-left: 20px;
// flex-wrap: wrap;
.btn {
padding: 0px 26px 0px 26px;
height: 38px;
background: rgba(64, 158, 255, 0);
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 {
background-size: 100%;
}
.btnText {
font-size: 14px;
font-weight: 400;
color: rgba(64, 158, 255, 1);
line-height: 36px;
margin-left: 5px;
}
}
.btn1 {
.search {
width: 15px;
height: 17px;
background-image: url("../../assets/images/courseManage/search1.png");
}
}
.btn2 {
.search {
width: 16px;
height: 18px;
background-image: url("../../assets/images/courseManage/reset1.png");
}
}
.btn3 {
margin-right: 0px;
.search {
width: 17px;
height: 18px;
background-image: url("../../assets/images/courseManage/add1.png");
}
}
.btn1:hover {
background: rgba(64, 158, 255, 1);
.search {
background-image: url("../../assets/images/courseManage/search0.png");
}
.btnText {
color: #ffffff;
}
}
.btn2:hover {
background: rgba(64, 158, 255, 1);
.search {
background-image: url("../../assets/images/courseManage/reset0.png");
}
.btnText {
color: #ffffff;
}
}
.btn3:hover {
background: rgba(64, 158, 255, 1);
.search {
background-image: url("../../assets/images/courseManage/add0.png");
}
.btnText {
color: #ffffff;
}
}
}
}
.xheadb {
display: flex;
margin-top: 30px;
.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;
}
}
}
.ant-select-selection-item {
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-bottom: 80px;
.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;
}
}
}
}
.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;
}
}
}
.btnbox {
.ant-upload-list {
display: none !important;
}
}
.onemain {
margin-top: 20px;
margin-left: 55px;
color: #6f6f6f;
font-size: 14px;
.checkcon {
position: relative;
.in {
position: absolute;
// margin-top: 10px;
left: 0;
top: 0px;
}
.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;
}
}
}
}
}
}
}
}
}
</style>