Files
fe-manage/src/views/projectcenter/TaskPage.vue
2023-01-05 11:07:40 +08:00

7165 lines
197 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.
<!-- eslint-disable vue/valid-v-model -->
<!-- eslint-disable vue/no-parsing-error -->
<!-- 任务页面 -->img
<template>
<div class="taskpage">
<div class="addhead" style="flex-shrink: 0">
<div class="leftimg">
<img class="img" :src="picUrl" />
</div>
<div class="imgfor">
<div class="forz">{{ name }}</div>
<div class="fort">项目经理{{ manager }}</div>
<div class="fort">起止时间{{ startTime }}{{ endTime }}</div>
</div>
<div class="right">
<!-- 2022-12-10注释 后面放开 -->
<!-- <img
class="img1"
src="../../assets/images/leveladd/ma.png"
@click="showCodeModel2()"
/>
<div
class="line"
v-if="
action == 1 ||
action == 2 ||
action == 0 ||
action == 3 ||
action == -2
"
></div>-->
<!-- 显示发布图标 -->
<img
v-if="action == 2"
class="img2"
src="../../assets/images/leveladd/pub.png"
/>
<!-- 显示撤回发布图标 -->
<img
v-if="action == 3"
class="img2"
src="../../assets/images/project/finish.png"
/>
<!-- 显示审核图标 -->
<img
v-if="action == 0 || action == -2"
class="img2"
src="../../assets/images/project/reviewsubmit.png"
/>
<!-- 显示撤回审核图标 -->
<img
v-if="action == 1"
class="img2"
src="../../assets/images/project/reviewrecall.png"
/>
<!-- <div class="pub">发布</div> -->
<!-- 显示提交审核 -->
<div
class="pub"
style="width: 56px; color: #a497ff"
v-if="action == 0 || action == -2"
@click="submitExamine"
>
{{ act }}
</div>
<!-- 显示撤回审核 -->
<div
class="pub"
style="width: 56px; color: #a497ff"
v-if="action == 1"
@click="showRecallReviewModal"
>
{{ act }}
</div>
<!-- 显示发布 -->
<div
class="pub"
style="width: 28px"
v-if="action == 2"
@click="showProjectPub"
>
{{ act }}
</div>
<!-- 显示撤回发布 -->
<div
class="pub"
style="width: 56px; color: #57c887"
v-if="action == 3"
@click="showBackModal"
>
{{ act }}
</div>
<!-- 项目提交审核弹窗 -->
<a-modal
v-model:visible="reviewModal"
:footer="null"
:closable="false"
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="closeReviewModal"></div>
</div>
<div class="body">
<span>您确定要提交审核吗</span>
<div class="back"></div>
</div>
<div class="del_btnbox">
<div class="del_btn btn1" @click="closeReviewModal">
<div class="btnText">取消</div>
</div>
<div class="del_btn btn2" @click="submitReviewProject">
<div class="btnText">确定</div>
</div>
</div>
</div>
</div>
</a-modal>
<!-- 已结束的显示 -->
<!-- <div class="pub" style="width: 28px" v-if="action == -1">
{{ act }}
</div>
<div class="line"></div>
<img
style="margin-right: 15px"
class="img2"
src="../../assets/images/leveladd/more.png"
/>-->
<!-- <div class="more">
<span style="color: #7096e3; cursor: pointer">更多</span>
<div class="moreArrow"></div>
<div class="moreItems">
<div class="sammo">撤回</div>
<div class="sammo">复制</div>
</div>
</div> -->
<!-- 草稿/未发布的显示
<div class="more" v-if="action == 0">
<span style="color: #7096e3; cursor: pointer">更多</span>
<div class="moreArrow"></div>
<div class="moreItems">
<div class="sammo">复制</div>
<div class="sammo" @click="showStartModal">存为模板</div>
</div>
</div>-->
<!-- 已发布的显示
<div class="more" v-if="action == 1">
<span style="color: #7096e3; cursor: pointer">更多</span>
<div class="moreArrow"></div>
<div class="moreItems">
<div class="sammo" @click="showStopModal">结束</div>
<div class="sammo">复制</div>
<div class="sammo" @click="showStartModal">存为模板</div>
</div>
</div>-->
<!-- 已结束的显示
<div class="more" v-if="action == -1">
<span style="color: #7096e3; cursor: pointer">更多</span>
<div class="moreArrow"></div>
<div class="moreItems">-->
<!-- <div class="sammo">结束</div>
<div class="sammo">复制</div>
<div class="sammo" @click="showStartModal">存为模板</div>
</div>
</div> -->
<div class="line"></div>
<router-link to="/projectmanage">
<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" style="flex-shrink: 0"></div>
<div class="content">
<a-tabs
class="tab"
v-model:activeKey="activeKey"
size="large"
:tabBarStyle="{ marginLeft: '10px', marginTop: '5px' }"
@change="tabsChange"
>
<a-tab-pane key="1" tab="概览">
<div class="split"></div>
<!-- 概览(无数据) -->
<div>
<div class="onerow">
<div class="taskmain">快速创建项目详情</div>
</div>
<div class="second">
<!-- @click="totask" -->
<div
class="taskbox"
@click="
() => {
routered.push({
path: `/taskadd`,
query: { projectId: projectId },
});
}
"
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
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="showModal"
style="background: linear-gradient(180deg, #e5f6ec, #eef9f3)"
>
<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 style="display: none">
<div class="onerow">
<div class="taskmain">项目概览</div>
</div>
<div class="second" style="margin-top: 0">
<div class="nubbox">
<span class="nub1">{{
projectInfoOverview.totalStudentCnt
}}</span>
<div class="nub2">总人数</div>
</div>
<div class="nubbox">
<span class="nub1" style="color: #ff90ae">{{
projectInfoOverview.studyStudentCnt
}}</span>
<div class="nub2">学习人数</div>
</div>
<div class="nubbox">
<span class="nub1" style="color: #a497ff">{{
projectInfoOverview.completeStudentCnt
}}</span>
<div class="nub2">完成人数</div>
</div>
<div class="nubbox">
<div>
<span class="nub1" style="color: #5dc988">{{
projectInfoOverview.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">{{
projectInfoOverview.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">{{
projectInfoOverview.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 class="stage1">阶段1</div>
<div class="stage2">阶段2</div>
</div> -->
<div class="stagemess">
<div
v-for="item in stageList"
:class="{
stage1: item.stageId == choosedStageId,
stage2: item.stageId != choosedStageId,
}"
:key="item.stageId"
@click="choosedStageId = item.stageId"
>
{{ item.stage }}
</div>
<!-- <div class="stage1">阶段1</div>
<div class="stage2">阶段2</div> -->
</div>
<div class="stagesecond">
<div class="staname">阶段名称:</div>
<div class="stamess">管理者进阶-腾飞班1第一阶段</div>
</div>
<div class="stagelast">
<div class="stagepro">
<a-progress
type="dashboard"
gapDegree="0"
:percent="stageOverviewList.completeCourseRatio"
:width="140"
/>
<div class="protext">课程完成率</div>
</div>
<div class="stagepro">
<a-progress
type="dashboard"
gapDegree="0"
:percent="stageOverviewList.completeExamRatio"
:width="140"
/>
<div class="protext">考试通过率</div>
</div>
<div class="stagepro" style="margin-right: 0">
<a-progress
type="dashboard"
gapDegree="0"
:percent="stageOverviewList.completeRatio"
:width="140"
/>
<div class="protext">作业完成率</div>
</div>
<div class="proright">
<div class="pronub" style="margin-left: 280px">
{{ stageOverviewList.totalTaskCnt }}
</div>
<div class="proright1">
<span class="textpro">阶段任务总数</span>
<a-progress
:percent="stageOverviewList.totalTaskCnt"
style="width: 369px"
/>
</div>
<div class="pronub" style="margin-left: 206px">
{{ stageOverviewList.totalReqCnt }}
</div>
<div class="proright1">
<span class="textpro">必修课</span>
<a-progress
:percent="stageOverviewList.totalReqCnt"
style="width: 369px"
/>
</div>
<div class="pronub" style="margin-left: 142px">
{{ stageOverviewList.totalOptCnt }}
</div>
<div class="proright1">
<span class="textpro">选修课</span>
<a-progress
:percent="stageOverviewList.totalOptCnt"
style="width: 369px"
/>
</div>
</div>
</div>
</div>
<!-- 概览(有数据) -->
</a-tab-pane>
<a-tab-pane key="2" tab="任务" force-render>
<div style="flex: 1">
<div class="split"></div>
<div class="onerow">
<div class="taskmain">任务大纲</div>
<!-- 2022-11-30注释 后面放开 -->
<!-- <button class="btn" @click="showFaceIn" v-if="morFaceT">
批量面授报名
</button> -->
<router-link
:to="{ path: `/taskadd`, query: { projectId: projectId } }"
>
<button class="edit">
<img
class="editimg"
src="../../assets/images/projectadd/edit.png"
/>
<span class="editext">编辑</span>
</button>
</router-link>
</div>
<!-- <div class="taskSyllabus">
<a-collapse v-model:activeKey="taskSyllabusActive" accordion>
<template #expandIcon="{ isActive }">
<img
class="editimg"
src="../../assets/images/projectadd/edit.png"
/>
<span class="editext">编辑</span>
</router-link>
</div> -->
<div
class="taskSyllabus"
v-if="
taskSyllabus &&
taskSyllabus.length &&
(taskSyllabus.length > 1 || taskSyllabus[0].name)
"
>
<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>
<template v-for="(value, index) in taskSyllabus">
<a-collapse-panel
:key="index"
v-if="value.name"
:header="value.name"
>
<div
class="course"
v-for="(item, key) in value.taskList"
:key="key"
>
<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/tou.png')
: require('../../assets/images/leveladd/xiangmu.png')
"
/>
</div>
</div>
<div>
<div class="iconame">
「{{ checkType(item.type) }}」
</div>
<div class="icontext">{{ item.name }}</div>
</div>
</div>
<div class="type">
<div
:class="item.flag == true ? 'typename1' : 'typename'"
>
<span v-if="item.flag">必修</span>
<span v-else>选修</span>
</div>
</div>
<div class="time">
<div class="timetext">开始时间</div>
<div class="timetext">
{{ item.startTime !== null ? item.startTime : "-" }}
</div>
</div>
<div class="progress">
<div class="progresstext">
{{
item.finishStuCnt && item.finishStuCnt !== null
? item.finishStuCnt
: 0
}}/{{
item.totalStuCnt && item.totalStuCnt !== null
? item.totalStuCnt
: 0
}}人
</div>
<div style="display: flex">
<a-progress
:showInfo="false"
:percent="item.percent"
strokeColor="#FFC067"
trailColor="rgba(253, 209, 98, 0.2)"
/>
<span class="progresstext" style="margin-left: 10px"
>{{
(item.finishStuCnt && item.finishStuCnt !== null
? item.finishStuCnt
: 0 / item.totalStuCnt &&
item.totalStuCnt !== null
? item.totalStuCnt
: 0) * 100
}}%</span
>
</div>
</div>
<div class="operations">
<div
class="operation"
style="cursor: pointer"
@click="showFS"
v-if="item.type == 2"
>
学员
</div>
<div
class="operation"
style="cursor: pointer"
@click="showAA(item.name)"
v-if="item.type == 6 || item.type == 9"
>
考勤
</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: 10px"
@click="
item.type == '1' ||
item.type == '3' ||
item.type == '6' ||
item.type == '7' ||
item.type == '8' ||
item.type == '9' ||
item.type == '11'
? showOnline(
item.name,
item.projectTaskId,
item.type,
item,
value.name
)
: item.type == '2'
? showFace(item.name, item.projectTaskId, item)
: item.type == '4'
? showWork(item.name, item.projectTaskId, item)
: item.type == '5'
? showTest(item.name, item.projectTaskId, item)
: item.type == '10'
? showEval(item.name, item.projectTaskId, item.type, item)
: item.type == '12'
? showWork(item.name, item.projectTaskId)
: item.type == '13'
? showWork(item.name, item.projectTaskId)
: null
"
>
管理
</div>
</div>
</div>
</a-collapse-panel>
</template>
</a-collapse>
<!-- 无数据创建任务 v-if="taskSyllabus.length == 0"-->
<router-link
:to="{ path: `/taskadd`, query: { projectId: projectId } }"
class="taskbox"
style="
background: linear-gradient(180deg, #ddeaff, #f0f8fe);
display: block;
"
v-if="taskSyllabus.length == 0"
>
<div class="leftt">
<img src="../../assets/images/taskpage/left2.png" />
</div>
<div class="photo">
<img src="../../assets/images/taskpage/picture8.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>
</router-link>
<!-- 无数据创建任务 -->
</div>
<div v-else>
<div
class="taskbox"
@click="
() => {
routered.push({
path: `/taskadd`,
query: { projectId: projectId },
});
}
"
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 style="display: flex; height: 20px"></div>
</div>
</a-tab-pane>
<a-tab-pane key="3" tab="学员">
<div class="split"></div>
<div class="content3">
<a-tabs v-model:activeKey="activeKey1">
<a-tab-pane key="8" tab="学员管理">
<TableStudent
:type="1"
:id="projectId"
:columns="stuColumns"
:stage="stage"
:visable="tabFlag"
>
<template #extension="{ data: { record } }">
<div style="display: flex">
<div
@click="showStudent(record)"
style="
color: #4ea6ff;
font-size: 14px;
text-align: center;
margin-left: 20px;
cursor: pointer;
"
>
查看
</div>
<div
@click="settingTopFlag(record)"
style="
color: #4ea6ff;
font-size: 14px;
text-align: center;
margin-left: 20px;
cursor: pointer;
"
>
{{ record.topFlag ? "取消优秀" : "优秀学员" }}
</div>
</div>
</template>
</TableStudent>
</a-tab-pane>
</a-tabs>
</div>
</a-tab-pane>
<a-tab-pane key="4" tab="公告">
<div class="split"></div>
<a-tabs v-model:activeKey="activeKeyNotice">
<a-tab-pane key="11" tab="公告">
<NoticePub v-model:projectId="projectId"></NoticePub>
</a-tab-pane>
<a-tab-pane key="12" tab="历史公告" force-render>
<NoticeHis
v-model:projectId="projectId"
:show="activeKeyNotice"
></NoticeHis>
</a-tab-pane>
</a-tabs>
</a-tab-pane>
<!-- 2022-11-30注释 后面放开 -->
<!-- <a-tab-pane key="5" tab="项目积分" disabled>
<ProjectScore :projectId="projectId"></ProjectScore>
</a-tab-pane> -->
<!-- 2022-11-30注释 后面放开 -->
<!-- <a-tab-pane key="6" tab="排行榜" disabled>
<div class="split"></div>
<div class="content6">
<div class="title">排行榜</div>
<div class="line"></div>
<div class="search">
<div class="left">
<div class="time">
<div class="text">选择时间:</div>
<a-range-picker
v-model:value="valueDate"
style="border-radius: 8px; height: 40px; margin-left: 5px"
:placeholder="[' 开始时间', ' 结束时间']"
@change="rankTimeChange"
/>
</div>
</div>
<div class="right">
<div class="btn btn1" @click="rankSearch">
<div class="img1"></div>
<div class="te">搜索</div>
</div>
<div class="btn btn2" @click="rankReset">
<div class="img2"></div>
<div class="te">重置</div>
</div>
</div>
</div>
<div class="main">
<div class="rank">
<div class="rankhead">
<div class="inhead">
<div class="left">进度排行 Top10</div>
<div class="icon"></div>
<div class="right">
<a-select
v-model:value="valuestu1"
style="width: 80px; margin-right: 16px"
:options="rankjindu"
>
</a-select>
<a-select
v-model:value="valuestu2"
style="width: 112px"
:options="rankjieduan"
></a-select>
</div>
</div>
</div>
<div class="tab">
<a-table
:columns="jindutablecolumns"
:data-source="jindutabledata"
:loading="tableDataTotal === -1 ? true : false"
expandRowByClick="true"
:scroll="{ y: 330 }"
@expand="expandTable"
:pagination="false"
/>
</div>
</div>
<div class="rank">
<div class="rankhead">
<div class="inhead">
<div class="left">积分排行 Top10</div>
<div class="right">
<a-select
v-model:value="valuestu3"
style="width: 80px"
:options="rankxuefen"
></a-select>
</div>
</div>
</div>
<div class="tab">
<a-table
:columns="xuefentablecolumns"
:data-source="xuefentabledata"
:loading="tableDataTotal === -1 ? true : false"
expandRowByClick="true"
:scroll="{ y: 330 }"
@expand="expandTable"
:pagination="false"
/>
</div>
</div>
<div class="rank">
<div class="rankhead">
<div class="inhead">
<div class="left">学时排行 Top10</div>
<div class="right">
<a-select
v-model:value="valuestu4"
style="width: 80px"
:options="rankxueshi"
></a-select>
</div>
</div>
</div>
<div class="tab">
<a-table
:columns="xueshitablecolumns"
:data-source="xueshitabledata"
:loading="tableDataTotal === -1 ? true : false"
expandRowByClick="true"
:scroll="{ y: 330 }"
@expand="expandTable"
:pagination="false"
/>
</div>
</div>
</div>
</div>
</a-tab-pane> -->
<a-tab-pane key="7" tab="设置">
<div class="split"></div>
<a-tabs v-model:activeKey="activeSetKey">
<a-tab-pane key="12" tab="基本信息">
<div class="content7">
<!-- <div class="set_tit">
<span>基本信息</span>
</div> -->
<!-- <div class="line"></div> -->
<div class="set_body">
<!-- <div class="edit" @click="showEditProj">
<div class="img"></div>
<div class="ed">编辑</div>
</div> -->
<div class="edit" v-if="status != 3" @click="toEdit">
<div class="img"></div>
<div class="ed">编辑</div>
</div>
<div class="set_content">
<div class="setc_name"><span>项目名称:</span></div>
<div class="setc_main">
<span style="color: #999999">{{ name }}</span>
</div>
</div>
<div class="set_content">
<div class="setc_name"><span>封面图:</span></div>
<div class="setc_main">
<img
style="width: 151px; height: 84px"
:src="picUrl"
alt=""
/>
</div>
</div>
<div class="set_content">
<div class="setc_name"><span>项目时间:</span></div>
<div class="setc_main">
<span style="color: #999999"
>{{ startTime }} {{ endTime }}</span
>
</div>
</div>
<div class="set_content">
<div class="setc_name"><span>项目经理:</span></div>
<div class="setc_main">
<span style="color: #999999">{{ manager }}</span>
</div>
</div>
<div class="set_content">
<div class="setc_name"><span>资源归属:</span></div>
<div class="setc_main">
<span style="color: #999999">{{ sourceBelong }}</span>
</div>
</div>
<div class="set_content">
<div class="setc_name"><span>项目级别:</span></div>
<div class="setc_main">
<span style="color: #999999"
><ProjectLevel
v-model:value="level"
:tag="true"
></ProjectLevel
></span>
</div>
</div>
<div class="set_content">
<div class="setc_name"><span>培训体系:</span></div>
<div class="setc_main">
<span style="color: #999999"
><TrainClass
v-model:value="systemId"
:tag="true"
></TrainClass
></span>
</div>
</div>
<div class="set_content">
<div class="setc_name"><span>同步学习记录:</span></div>
<div class="setc_main">
<a-radio v-model:checked="checkedSty" :disabled="true"
><span style="color: #333333"
>同步课程学习记录(如学员在课程库中拥有课程的学习记录,自动免修该课程)</span
></a-radio
>
</div>
</div>
<div class="set_content">
<div class="setc_name"><span>是否BOEU实施</span></div>
<div class="setc_main">
<a-radio v-model:checked="checkedBOEU" :disabled="true"
><span style="color: #333333">BOEU实施</span></a-radio
>
</div>
</div>
<div class="set_content" v-if="remark">
<div class="setc_name"><span>项目说明:</span></div>
<div class="setc_main">
<span style="color: #999999">{{ remark }}</span>
</div>
</div>
<div class="set_content" v-if="passInfo">
<div class="setc_name"><span>审核意见:</span></div>
<div class="setc_main">
<span style="color: #333333">{{ passInfo }}</span>
</div>
</div>
</div>
</div>
</a-tab-pane>
<!--
<a-tab-pane key="13" 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">
<a-switch
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="/manageApi/file/upload"
@change="handleChange"
>
<span
class="xkbtn"
style="cursor: pointer; font-size: 17px"
>上传</span
>
<img
src="@/assets/images/basicinfo/cloud.png"
style="cursor: pointer; width: 34px; height: 34px"
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;
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=""
/>
<span
style="
font: oblique bold 16px Sans-serif;
width: 300px;
display: block;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
"
>{{ item.name }}</span
>
<span
style="color: #4ea6ff; float: right; cursor: pointer"
@click="deFile(item.uid)"
>删除</span
>
</div>
</div>
</div>
</div>
</div>
</a-tab-pane>
-->
</a-tabs>
</a-tab-pane>
</a-tabs>
</div>
<!-- 时间管理抽屉 -->
<time-manage
v-model:Tvisible="visible"
:projectTaskId="projectTaskId"
:title="showTimeText"
:itemsType="itemstype"
/>
<!-- 在线、案例等管理抽屉 -->
<ProjectOnlineManage
v-model:Tvisible="onlineVisible"
:projectTaskId="projectTaskId"
:title="showTimeText"
:itemsType="itemstype"
:datasource="commonData"
:levelName="commonLevelName"
/>
<!-- 面授管理抽屉 -->
<ProjectFaceTaskManage
v-model:Fvisible="FaceVisivle"
:projectTaskId="projectTaskId"
:title="showFaceText"
:projectTaskInfo="projectTaskInfo"
/>
<!-- 作业管理抽屉 -->
<ProjectHomeWorkManage
v-model:Wvisible="Wvisible"
:projectTaskId="projectTaskId"
:title="showWorkText"
:projectTaskInfo="projectTaskInfo"
/>
<!-- 考试管理抽屉 -->
<ProjectExamManage
v-model:TMvisible="TMvisible"
:title="showTestText"
:projectTaskId="projectTaskId"
:datasource="examData"
/>
<!-- 测评抽屉 -->
<ProjectEvalManage
v-model:Evalvisible="Evalvisible"
:title="showTestText"
:projectTaskId="projectTaskId"
:itemsType="evaltype"
:datasource="evalData"
/>
<!-- 学员(小组管理)创建小组抽屉 -->
<subset-manage v-model:Svisible="subsetVisivle" />
<!-- 学员管理-添加学员抽屉 -->
<!-- <stu-add v-model:Stuvisible="Stuvisible" /> -->
<!-- 添加学员抽屉 -->
<proj-check-ship
v-model:ProjCheckvisible="Stuvisible"
:selectProjectId="projectId"
v-model:addAuthList="addAuthList"
:authClassify="authClassify"
classify="project"
:type="2"
/>
<!-- 学员管理-导入学员抽屉 -->
<import-stu v-model:Importvisible="Importvisible" />
<!-- 查看学员 传入查看学员的id-->
<see-stu
v-model:Seevisible="Seevisible"
v-model:checkStuId="checkStuId"
v-model:projectId="projectId"
/>
<!-- 学员换组 -->
<change-group
v-model:Changevisible="Changevisible"
v-model:projectId="projectId"
v-model:ChangeGroupStuId="ChangeGroupStuId"
v-model:ChangeGroupStuName="ChangeGroupStuName"
v-model:ChangeGroupId="ChangeGroupId"
@changeD="changeGrouped"
/>
<!-- 组员名单抽屉 -->
<member-list
v-model:Lvisible="Lvisible"
v-model:chooseGroupId="chooseGroupId"
v-model:projectId="projectId"
/>
<!-- 面授学员抽屉 -->
<face-stu v-model:FSvisible="FSvisible" />
<!-- 活动考勤抽屉 -->
<active-attendance v-model:AAvisible="AAvisible" :title="showkaoqinText" />
<!-- 批量面授报名 -->
<task-imp-stu v-model:TaskFaceImpStuvisible="TaskFaceImpStuvisible" />
<!-- 概览(无数据)-项目发布弹窗 -->
<div>
<a-modal
v-model:visible="pubproject"
:title="null"
@ok="closeModal"
:footer="null"
:closable="false"
:centered="true"
wrapClassName="pubproject"
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="closeModal">
<img
style="width: 22px; height: 22px"
src="../../assets/images/basicinfo/close22.png"
/>
</div>
</div>
<div class="modalMain">
<div class="projectname">管理者进阶-腾飞班1</div>
<div class="projecttime">
<span class="timeti">项目时间:</span
><span class="timeme">2022/08/01-2022/08/30</span>
</div>
<div class="projectbox">
<div class="promessage">
<div class="messageme">项目信息</div>
<div class="messagege">当前项目共0个阶段0个任务</div>
</div>
<div class="stumessage">
<div class="messageme1">学员信息</div>
<div class="messagege1">项目共0名学员</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="checked1"
><span class="sendpeo">发给老师</span></a-checkbox
>
<a-checkbox v-model:checked="checked2"
><span class="sendpeo">发给学员</span></a-checkbox
>
</div>
<div class="pubtn">
<a-button class="pubtn1" @click="closeModal">取消</a-button>
<a-button class="pubtn2" @click="closeModal">发布</a-button>
</div>
</div>
</a-modal>
</div>
<!-- 概览(无数据)-项目发布弹窗 -->
<!-- 学员-创建小组弹窗 -->
<div>
<a-modal
v-model:visible="stugroup"
:title="null"
@ok="closeModal2"
:footer="null"
:closable="false"
:centered="true"
wrapClassName="doublepro"
width="624px"
height="332px"
>
<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 class="headerLeftText" style="font-size: 16px">{{
stuMemberClassify === 1 ? "创建小组" : "编辑小组"
}}</span>
</div>
<div style="cursor: pointer; margin-right: 32px" @click="closeModal2">
<img
style="width: 22px; height: 22px"
src="../../assets/images/basicinfo/close22.png"
/>
</div>
</div>
<div class="modalMain">
<div class="name">
<div class="star" style="margin-top: -4px">
<img
style="width: 10px; height: 10px"
src="../../assets/images/basicinfo/asterisk.png"
/>
</div>
<div class="inname">小组名称:</div>
<div class="in">
<a-input
v-model:value="valueaddg"
placeholder="请输入小组名称"
style="border-radius: 8px; height: 40px"
/>
</div>
</div>
<div class="name">
<div class="star" style="margin-top: -4px">
<img
style="width: 10px; height: 10px; margin-left: 15px"
src="../../assets/images/basicinfo/asterisk.png"
/>
</div>
<div class="inname">小组长:</div>
<div class="in">
<ProjectManager
v-model:value="stuGroupId"
v-model:name="stuGroupName"
></ProjectManager>
<!-- <a-input
v-model:value="valueaddm"
placeholder="请输入小组长"
style="border-radius: 8px; height: 40px"
/> -->
</div>
</div>
<div class="pubtn">
<a-button class="pubtn1" @click="closeModal2">取消</a-button>
<a-button class="pubtn2" @click="createG">确定</a-button>
</div>
</div>
</a-modal>
</div>
<!-- 学员-创建小组弹窗 -->
<!-- 取消学员弹窗 -->
<div>
<a-modal
v-model:visible="canclestu"
:footer="null"
:closable="close"
wrapClassName="canclestu"
centered="true"
@cancel="cancelyou"
>
<div class="delete">
<div class="del_header"></div>
<div class="del_main">
<div class="header">
<div class="icon1"></div>
<span>提示</span>
</div>
<div class="body">
<span>您是否授予此学员优秀学员称号?</span>
</div>
<div class="del_btnbox">
<div class="del_btn btn1" @click="cancelyou">
<div class="btnText">取消</div>
</div>
<div class="del_btn btn2" @click="closeModal1">
<div class="btnText">确定</div>
</div>
</div>
</div>
</div>
</a-modal>
</div>
<!-- 取消学员弹窗 -->
<!-- 优秀学员弹窗 -->
<div>
<a-modal
v-model:visible="canclestu1"
:footer="null"
:closable="close"
wrapClassName="canclestu1"
centered="true"
>
<div class="delete">
<div class="del_header"></div>
<div class="del_main">
<div class="header">
<div class="icon1"></div>
<span>提示</span>
</div>
<div class="body">
<span>您是否取消此学员优学员称号?</span>
</div>
<div class="del_btnbox">
<div class="del_btn btn1" @click="cancelcanyou">
<div class="btnText">取消</div>
</div>
<div class="del_btn btn2" @click="closeModal3">
<div class="btnText">确定</div>
</div>
</div>
</div>
</div>
</a-modal>
</div>
<!-- 取消学员弹窗 -->
<!-- 删除学员弹窗 -->
<div>
<a-modal
v-model:visible="deleteOneStu"
:footer="null"
:closable="close"
wrapClassName="canclestu1"
centered="true"
>
<div class="delete">
<div class="del_header"></div>
<div class="del_main">
<div class="header">
<div class="icon1"></div>
<span>提示</span>
</div>
<div class="body">
<span>您确定要删除此学员吗</span>
</div>
<div class="del_btnbox">
<div class="del_btn btn1" @click="closeDeleteOne">
<div class="btnText">取消</div>
</div>
<div class="del_btn btn2" @click="closeDeleteOneConfirm">
<div class="btnText">确定</div>
</div>
</div>
</div>
</div>
</a-modal>
</div>
<!-- 删除学员弹窗 -->
<!-- 删除弹窗 -->
<div>
<a-modal
v-model:visible="delete_hs"
:footer="null"
:closable="closableQR"
wrapClassName="DelModal"
style="margin-top: 400px"
@cancel="delete_exit"
>
<div class="delete" :style="{ display: delete_hs ? 'block' : 'none' }">
<div class="del_header"></div>
<div class="del_main">
<div class="header">
<div class="del-icon"></div>
<span>提示</span>
<div class="close_exit" @click="delete_exit"></div>
</div>
<div class="body">
<span>您确定要删除此课程吗</span>
</div>
<div class="del_btnbox">
<div class="del_btn btn1">
<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>
</div>
<!-- 删除弹窗 -->
<!-- 批量删除弹窗 -->
<div>
<a-modal
v-model:visible="allDelete"
:footer="null"
:closable="close"
wrapClassName="canclestu1"
centered="true"
>
<div class="delete">
<div class="del_header"></div>
<div class="del_main">
<div class="header">
<div class="icon1"></div>
<span>提示</span>
</div>
<div class="body">
<span>您确定批量删除吗?</span>
</div>
<div class="del_btnbox">
<div class="del_btn btn1" @click="closeCancelDelete">
<div class="btnText">取消</div>
</div>
<div class="del_btn btn2" @click="closeAllDelete">
<div class="btnText">确定</div>
</div>
</div>
</div>
</div>
</a-modal>
</div>
<!-- 编辑项目弹窗 -->
<proj-set v-model:editHs="editHs" v-model:projectId="projectId" />
<!-- 发布弹窗 -->
<a-modal
v-model:visible="projectPub"
:title="null"
:footer="null"
:closable="false"
wrapClassName="projectPub"
width="679px"
height="437px"
>
<div
class="modalHeader"
style="
width: 100%;
height: 68px;
display: flex;
align-items: center;
justify-content: space-between;
"
>
<div class="headerLeft" style="margin-left: 32px">
<span style="width: 15px; height: 15px"
><img src="../../assets/images/taskpage/pub.png"
/></span>
<span
class="headerLeftText"
style="font-size: 16px; margin-left: 10px"
>项目发布</span
>
</div>
<div
style="cursor: pointer; margin-right: 32px"
@click="closeProjectPub"
>
<img
style="width: 22px; height: 22px"
src="../../assets/images/basicinfo/close22.png"
/>
</div>
</div>
<div class="modalMain">
<div class="projectname">{{ releaseProjectName }}</div>
<div class="projecttime" v-if="startTime">
<span class="timeti">项目时间:</span
><span class="timeme">{{ startTime }}~{{ endTime }}</span>
</div>
<div class="projectbox">
<div class="promessage">
<div class="messageme">项目信息</div>
<div class="messagege">
当前项目共{{ projectStages }}个阶段,{{ projectTasks }}个任务
</div>
</div>
<div class="stumessage">
<div class="messageme1">学员信息</div>
<div class="messagege1">项目共{{ projectStudentsNum }}名学员</div>
</div>
</div>
<!-- <div class="send">
<a-switch v-model:checked="checked" size="small" />
<span class="sendtext">发送路径通知</span>
</div>
<div class="ckb">
<a-checkbox v-model:checked="checkedTeacher"
><span class="sendpeo">发给老师</span></a-checkbox
>
<a-checkbox v-model:checked="checkStu"
><span class="sendpeo">发给学员</span></a-checkbox
>
</div> -->
<div class="pubtn">
<a-button class="pubtn1" @click="closeProjectPub">取消</a-button>
<a-button class="pubtn2" @click="releaseProject">发布</a-button>
</div>
</div>
<!-- 加载动画 -->
<div
class="aeLoading"
:style="{ display: projectPubLoading ? 'flex' : 'none' }"
>
<a-spin :spinning="projectPubLoading" />
</div>
</a-modal>
<!-- 撤回弹窗 -->
<a-modal
v-model:visible="backModal"
:footer="null"
:closable="closeBack"
wrapClassName="CopyModal"
centered="true"
>
<div class="delete">
<div class="del_header"></div>
<div class="del_main">
<div class="header">
<div class="icon"></div>
<span>提示</span>
<div class="close_exit" @click="closeBackModal"></div>
</div>
<div class="body">
<span>是否撤回项目</span>
<div class="back">(项目撤回后学员进度保留,发布后可继续学习)</div>
</div>
<div class="del_btnbox">
<div class="del_btn btn1" @click="closeBackModal">
<div class="btnText">取消</div>
</div>
<div class="del_btn btn2" @click="recallProject">
<div class="btnText">确定</div>
</div>
</div>
</div>
</div>
</a-modal>
<!-- 项目撤回审核弹窗 -->
<a-modal
v-model:visible="recallReviewModal"
:footer="null"
:closable="false"
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="closeRecallReviewModal"></div>
</div>
<div class="body">
<span>您确定要撤回审核吗</span>
<div class="back"></div>
</div>
<div class="del_btnbox">
<div class="del_btn btn1" @click="closeRecallReviewModal">
<div class="btnText">取消</div>
</div>
<div class="del_btn btn2" @click="recallReviewProject">
<div class="btnText">确定</div>
</div>
</div>
</div>
</div>
</a-modal>
<!-- 结束项目弹窗 -->
<a-modal
v-model:visible="stopModal"
:footer="null"
:closable="closeStop"
wrapClassName="CopyModal"
centered="true"
>
<div class="delete">
<div class="del_header"></div>
<div class="del_main">
<div class="header">
<div class="icon"></div>
<span>提示</span>
<div class="close_exit" @click="closeStopModal"></div>
</div>
<div class="body">
<span>是否结束项目</span>
<div class="back">
(项目结束后学员将无法继续学习,此操作不可逆)
</div>
</div>
<div class="del_btnbox">
<div class="del_btn btn1" @click="closeStopModal">
<div class="btnText">取消</div>
</div>
<div class="del_btn btn2" @click="finishProject">
<div class="btnText">确定</div>
</div>
</div>
</div>
</div>
</a-modal>
<!-- 存为模版弹窗 -->
<a-modal
v-model:visible="startModal"
:footer="null"
:closable="closeStart"
wrapClassName="CopyModal"
centered="true"
>
<div class="delete">
<div class="del_header"></div>
<div class="del_main">
<div class="header">
<div class="icon"></div>
<span>提示</span>
<div class="close_exit" @click="closeStartModal"></div>
</div>
<div class="body">
<span>您确定要存为模版吗</span>
</div>
<div class="del_btnbox">
<div class="del_btn btn1" @click="closeStartModal">
<div class="btnText">取消</div>
</div>
<div class="del_btn btn2" @click="templateProject">
<div class="btnText">确定</div>
</div>
</div>
</div>
</div>
</a-modal>
<!-- 二维码弹窗 -->
<two-dimensional-code
v-model:codevisible="codevisible"
:codeInfo="codeInfo"
index="0"
type="课程二维码"
/>
<!-- 二维码弹窗 -->
</div>
</template>
<script>
import { reactive, toRefs, onMounted, watch, computed } from "vue";
import { useRoute } from "vue-router";
import { useRouter } from "vue-router";
import TimeManage from "../../components/drawers/TimeManage";
import ProjectFaceTaskManage from "../../components/drawers/project/ProjectFaceTaskManage";
import ProjectOnlineManage from "../../components/drawers/project/ProjectOnlineManage";
import ProjectHomeWorkManage from "../../components/drawers/project/ProjectHomeWorkManage";
import ProjectExamManage from "../../components/drawers/project/ProjectExamManage";
import ProjectEvalManage from "../../components/drawers/project/ProjectEvalManage";
import SubsetManage from "../../components/drawers/SubsetManage";
import MemberList from "../../components/drawers/MemberList";
import ActiveAttendance from "../../components/drawers/ActiveAttendance";
import FaceStu from "../../components/drawers/FaceStu";
import ProjCheckShip from "../../components/drawers/ProjCheckPower";
import ImportStu from "../../components/drawers/ImportStu";
import SeeStu from "../../components/drawers/SeeStu";
import ChangeGroup from "../../components/drawers/ChangeGroup";
import NoticePub from "../../components/drawers/NoticePub";
import NoticeHis from "../../components/drawers/NoticeHis";
import TaskImpStu from "../../components/drawers/TaskFaceIn";
import { storage } from "../../api/storage";
import * as api from "../../api/index1";
import * as apis from "../../api/index";
import * as apiproj from "../../api/index";
import * as student from "../../api/student";
import {
getProjStu,
deleteStu,
getGroupList,
deleteGroup,
editGroup,
updateStudent,
} from "../../api/indexProjStu";
import { message, Modal } from "ant-design-vue";
import * as apitl from "../../api/index";
import { getTask } from "../../api/indexTaskadd";
import { editProj } from "../../api/indexTaskadd";
import { toDate, codeUrl } from "../../api/method";
import projSet from "../../components/Modals/projSet";
import { overview } from "../../api/indexProjStu";
import TwoDimensionalCode from "../../components/TwoDimensionalCode.vue";
import { useStore } from "vuex";
import ProjectLevel from "@/components/project/ProjectLevel";
import TrainClass from "@/components/project/TrainClass";
import ProjectManager from "@/components/project/ProjectManagerNew";
import TableStudent from "@/components/student/TableStudent";
import { getStuPage } from "@/api/index1";
export default {
name: "taskPage",
components: {
ProjectLevel,
TrainClass,
TimeManage,
ProjectFaceTaskManage,
ProjectOnlineManage,
ProjectHomeWorkManage,
ProjectExamManage,
ProjectEvalManage,
SubsetManage,
MemberList,
FaceStu,
ActiveAttendance,
// StuAdd,
ProjCheckShip,
ImportStu,
SeeStu,
ChangeGroup,
NoticePub,
// ProjectScore,
TaskImpStu,
projSet,
NoticeHis,
TwoDimensionalCode,
ProjectManager,
TableStudent,
},
setup() {
const store = useStore();
const route = useRoute();
const state = reactive({
editRecord: {},
tabFlag: true,
stage: [],
stuColumns: [
{
title: "进度",
dataIndex: "progress",
key: "progress",
width: 80,
align: "center",
className: "h",
ellipsis: true,
customRender: ({ record }) => (
<div>
{record.finishTaskNum}/{record.totalTaskNum}
</div>
),
},
{
title: "最近学习时间",
dataIndex: "lastStudyTime",
key: "lastStudyTime",
width: 80,
align: "center",
className: "h",
},
],
loading: false,
projectId: route.query.projectId,
isbj: storage.get("isbj") ? JSON.parse(storage.get("isbj")) : null,
// pN: storage.get("pN") ? JSON.parse(storage.get("pN")) : null,
pN: storage.get("pN"),
goodstuList: [
{
id: 1,
value: "全部",
label: "全部",
},
{
id: 2,
value: "普通学员",
label: "普通学员",
},
{
id: 3,
value: "优秀学员",
label: "优秀学员",
},
],
bum: [
// {
// id: 1,
// value: "",
// label: "",
// },
],
changeGoods: [], //更改是否优秀的id数组
choosedStageId: 1, // 选择的阶段id
activeSetKey: "12", //12-基础信息 13-共享文档
docChecked: true,
//学员信息列表
tabledata: [
// {
// key: 1,
// name: "sss",
// bum: "c",
// gangw: "ss",
// group: "sss",
// progress: "sss",
// diploma: "0",
// stutime: "20202",
// putin: "shs",
// excellent: true,
// studentId: 22,
// },
],
//小组信息列表
groupList: [],
// stuName: "", //搜索的学员姓名
// stuGroup: "", //搜索的学员小组名称
// stuBum: "", //搜索的学员小组部门
// stuGood: "", //搜索的学员是否优秀
total: 0, //学员列表数据总条数
stupageSize: 10,
currentPageStu: 1, //当前页
choosed: 0, //勾选的学员总数
selectedRowKeys: [], //选择的学员
selectedRows: [], //选择的学员的id值
chooseDeleteOne: [], //删除的单个学员id
// projectId:"", //项目任务id
projectTaskId: "", //项目任务任务id
//进度排行学员
rankjindu: [
{ value: "学员", label: "学员" },
{ value: "小组", label: "小组" },
],
valuestu1: "学员",
//进度排行阶段
rankjieduan: [{ value: "第一阶段", label: "第一阶段" }],
valuestu2: "第一阶段",
//积分排行
rankxuefen: [
{ value: "学员", label: "学员" },
{ value: "小组", label: "小组" },
],
valuestu3: "学员",
//学时排行
rankxueshi: [
{ value: "学员", label: "学员" },
{ value: "小组", label: "小组" },
],
valuestu4: "学员",
visible: false, //时间管理
onlineVisible: false, //在线管理
FaceVisivle: false, //面授管理
subsetVisivle: false, //随机小组
Lvisible: false, //组员名单
FSvisible: false, //面授学员
AAvisible: false, //活动考勤
Wvisible: false, //作业管理
TMvisible: false, //考试管理
Evalvisible: false, //测评管理
Stuvisible: false, //添加学员
Importvisible: false, //导入学员
Seevisible: false, //查看学员
Changevisible: false, //学员换组
editHs: false, //编辑弹窗
delete_hs: false, //删除弹窗
closeCopy: false, //面授二维码关闭图标
zhibModal: false, //直播二维码弹窗
huodModal: false, //活动二维码弹窗
allDelete: false, //批量删除弹窗
pubproject: false,
stugroup: false,
canclestu: false,
canclestu1: false,
deleteOneStu: false, //删除单个学员弹窗
checked: false,
checked1: true,
checked2: false,
checkedSty: false, //同步学习记录
checkedBOEU: false, //是否BOEU实施
radioV1: "",
radioV2: "",
activeKey: "1", //1:概览 2.任务...
activeKey1: "8", //8:学员管理 9小组管理
activeKey2: "3",
activeKeyNotice: "11",
inputValue: 5,
inputValue2: 5,
inputValue3: 5,
valueaddm: "", //创建小组输入小组长
valueaddg: "", //创建小组输入名称
valuestun: "", //学员管理姓名
valuegood: "",
valuestub: "", //学员管理部门
valuestug: "", //学员小组管理名称
valuestugroup: "", //学员管理小组名称
projectGroupId: null, //是编辑小组id
stuMemberClassify: null, //1新建小组 2编辑小组
stuGroupId: null, //选择的小组长id
stuGroupName: null, //选择的小组长名字
valueDate: "", //排行榜输入日期
noticeChecked: true,
noticeContent: "",
TaskFaceImpStuvisible: false, //批量面授报名
valuestugn: "", //小组管理的输入的小组名称
checkStuId: null, //要查看的学员id
chooseGroupId: null,
morFaceT: false, //批量面授报名按钮
faceArr: [], //任务大纲列表所有name
action: null,
act: null,
projectPub: false, //发布弹窗
projectPubLoading: false, //发布loading
projectStudentsNum: 0, //发布弹窗-学员人数
projectStages: 0, //发布弹窗-阶段数
projectTasks: 0, //任务数
releaseProjectId: null, //发布的项目id
releaseProjectName: null, //发布的项目名称
releaseProjectTime: null, //发布的项目时间
backModal: false, //撤回弹窗
recallReviewModal: false, //撤回审核
closeBack: false,
stopModal: false,
closeStop: false,
startModal: false,
closeStart: false,
ChangeGroupStuId: null, //要换组的学生id
ChangeGroupStuName: null, //要换组的学生name
ChangeGroupId: null, //要换组的学生的小组id
fileList: [], //文件列表
//进度排行表
jindutabledata: [
{
rank: "1",
name: "哈哈",
jd: "80%",
},
{
rank: "2",
name: "哈哈",
jd: "70%",
},
{
rank: "3",
name: "哈哈",
jd: "70%",
},
{
rank: "4",
name: "哈哈",
jd: "70%",
},
{
rank: "5",
name: "哈哈",
jd: "70%",
},
{
rank: "6",
name: "哈哈",
jd: "70%",
},
{
rank: "7",
name: "哈哈",
jd: "70%",
},
{
rank: "8",
name: "哈哈",
jd: "70%",
},
{
rank: "9",
name: "哈哈",
jd: "70%",
},
{
rank: "10",
name: "哈哈",
jd: "70%",
},
],
jindutablecolumns: [
{
title: "排名",
dataIndex: "rank",
key: "rank",
width: 50,
align: "center",
className: "h",
customRender: (text) => {
if (text.record.rank == "1") {
return (
<img
style={{ width: 24, height: 24 }}
src={require("../../assets/images/taskpage/one.png")}
/>
);
} else if (text.record.rank == "2") {
return (
<img
style={{ width: 24, height: 24 }}
src={require("../../assets/images/taskpage/two.png")}
/>
);
} else if (text.record.rank == "3") {
return (
<img
style={{ width: 24, height: 24 }}
src={require("../../assets/images/taskpage/three.png")}
/>
);
} else {
return <div>{text.record.rank}</div>;
}
},
},
{
title: "名称",
dataIndex: "name",
key: "name",
width: 50,
align: "center",
className: "h",
},
{
title: "进度",
dataIndex: "jd",
key: "jd",
width: 50,
align: "center",
className: "h",
},
],
//学分排行表
xuefentabledata: [
{
rank: "1",
name: "哈哈",
jd: "80",
},
{
rank: "2",
name: "哈哈",
jd: "70",
},
{
rank: "3",
name: "哈哈",
jd: "70",
},
{
rank: "4",
name: "哈哈",
jd: "70",
},
{
rank: "5",
name: "哈哈",
jd: "70",
},
{
rank: "6",
name: "哈哈",
jd: "70",
},
{
rank: "7",
name: "哈哈",
jd: "70",
},
{
rank: "8",
name: "哈哈",
jd: "70",
},
{
rank: "9",
name: "哈哈",
jd: "70",
},
{
rank: "10",
name: "哈哈",
jd: "7",
},
],
xuefentablecolumns: [
{
title: "排名",
dataIndex: "rank",
key: "rank",
width: 50,
align: "center",
className: "h",
customRender: (text) => {
if (text.record.rank == "1") {
return (
<img
style={{ width: 24, height: 24 }}
src={require("../../assets/images/taskpage/one.png")}
/>
);
} else if (text.record.rank == "2") {
return (
<img
style={{ width: 24, height: 24 }}
src={require("../../assets/images/taskpage/two.png")}
/>
);
} else if (text.record.rank == "3") {
return (
<img
style={{ width: 24, height: 24 }}
src={require("../../assets/images/taskpage/three.png")}
/>
);
} else {
return <div>{text.record.rank}</div>;
}
},
},
{
title: "名称",
dataIndex: "name",
key: "name",
width: 50,
align: "center",
className: "h",
},
{
title: "积分",
dataIndex: "jd",
key: "jd",
width: 50,
align: "center",
className: "h",
},
],
//学时排行表
xueshitabledata: [
{
rank: "1",
name: "哈哈",
jd: "8",
},
{
rank: "2",
name: "哈哈",
jd: "70",
},
{
rank: "3",
name: "哈哈",
jd: "70",
},
{
rank: "4",
name: "哈哈",
jd: "70",
},
{
rank: "5",
name: "哈哈",
jd: "70",
},
{
rank: "6",
name: "哈哈",
jd: "70",
},
{
rank: "7",
name: "哈哈",
jd: "70",
},
{
rank: "8",
name: "哈哈",
jd: "70",
},
{
rank: "9",
name: "哈哈",
jd: "70",
},
{
rank: "10",
name: "哈哈",
jd: "70",
},
],
xueshitablecolumns: [
{
title: "排名",
dataIndex: "rank",
key: "rank",
width: 50,
align: "center",
className: "h",
customRender: (text) => {
if (text.record.rank == "1") {
return (
<img
style={{ width: 24, height: 24 }}
src={require("../../assets/images/taskpage/one.png")}
/>
);
} else if (text.record.rank == "2") {
return (
<img
style={{ width: 24, height: 24 }}
src={require("../../assets/images/taskpage/two.png")}
/>
);
} else if (text.record.rank == "3") {
return (
<img
style={{ width: 24, height: 24 }}
src={require("../../assets/images/taskpage/three.png")}
/>
);
} else {
return <div>{text.record.rank}</div>;
}
},
},
{
title: "名称",
dataIndex: "name",
key: "name",
width: 50,
align: "center",
className: "h",
},
{
title: "时长",
dataIndex: "jd",
key: "jd",
width: 50,
align: "center",
className: "h",
},
],
//任务大纲列表
taskSyllabus: [
// {
// text: "阶段1腾飞班阶段1",
// children: [
// {
// course: "在线",
// name: "时间管理",
// classify: "选修",
// beginTime: "2022-09-10 14:03",
// total: 50, //总人数
// complete: 20, //完成人数
// percent: 40,
// },
// {
// course: "直播",
// name: "管理直播间",
// classify: "必修",
// beginTime: "2022-09-12 14:03",
// total: 50, //总人数
// complete: 10, //完成人数
// percent: 20,
// },
// {
// course: "面授",
// name: "管理面授课",
// classify: "必修",
// beginTime: "2022-09-16 14:03",
// total: 80, //总人数
// complete: 0, //完成人数
// percent: 0,
// },
// {
// course: "活动",
// name: "管理活动",
// classify: "必修",
// beginTime: "2022-09-16 14:03",
// total: 50, //总人数
// complete: 40, //完成人数
// percent: 80,
// },
// {
// course: "作业",
// name: "管理者作业",
// classify: "选修",
// beginTime: "2022-09-16 14:03",
// total: 50, //总人数
// complete: 30, //完成人数
// percent: 60,
// },
// {
// course: "考试",
// name: "管理者考试",
// classify: "必修",
// beginTime: "2022-09-16 14:03",
// total: 50, //总人数
// complete: 50, //完成人数
// percent: 100,
// },
// {
// course: "案例",
// name: "管理直播间",
// classify: "必修",
// beginTime: "2022-09-16 14:03",
// total: 50, //总人数
// complete: 10, //完成人数
// percent: 20,
// },
// {
// course: "外链",
// name: "管理直播间",
// classify: "必修",
// beginTime: "2022-09-16 14:03",
// total: 50, //总人数
// complete: 10, //完成人数
// percent: 20,
// },
// ],
// },
// ],
// },
],
taskSyllabusActive: 0,
//在线管理等页面传递参数title
showTimeText: "",
//考试、测评页面传递参数title
showTestText: "",
//面授传递title
showFaceText: "",
projectTaskInfo: null, //任务信息
//直播、面授传递title
showWorkText: "",
//直播、活动页面传递参数
showkaoqinText: "",
//所有抽屉的传过去的type
itemstype: null,
//排行榜时间
rankStartTime: null,
rankEndTime: null,
valueName: "", //排行榜输入姓名
//设置
name: null, //项目名称 未改
startTime: null, //开始时间 已改
tstartTime: null, //开始事件 未改
endTime: null, //结束时间 已改
tendTime: null, //结束时间 未改
manager: null, //项目经理 未改
sourceBelong: null, //资源归属 已改
tsourceBelong: null, //资源归属 未改
remark: null, //项目说明 未改
level: null, //项目级别 已改
tlevel: null, //项目级别 未改
systemId: null, //培训分类
tsystemId: null, //培训分类 未改
picUrl: null, //未改
parentId: null, //未改
courseSyncFlag: null, //未改
boeFlag: null, //未改
managerId: null, //未改
notice: null, //未改
status: null, //未改
type: null, //未改
category: null, //未改
noticeFlag: null, //未改
templateId: null, //未改
attach: null,
authClassify: 3,
addAuthList: [],
switchopen: true,
isPass: false, // 是否审核未通过
passInfo: null, // 审核未通过原因说明
reviewModal: false,
codevisible: false, //二维码是否显示
codeInfo: null, //二维码标题
examData: "",
commonData: "",
commonLevelName: "",
evaltype: "",
evalData: ""
});
const levelList = reactive({
projectInfoOverview: {
// 整体数据概览
totalStudentCnt: 0,
studyStudentCnt: 0,
completeStudentCnt: 0,
onlineCourseCnt: 0,
offLineCourseCnt: 0,
completeRatio: 0,
},
stageOverviewList: {
// 阶段数据概览
completeCourseRatio: 0,
completeExamRatio: 0,
completeRatio: 0,
totalTaskCnt: 0,
totalReqCnt: 0,
totalOptCnt: 0,
},
stageList: [
// 阶段列表
{
stageId: 1,
stage: "阶段一",
},
{
stageId: 2,
stage: "阶段二",
},
],
});
// 输入接入 -- start --
const router = useRoute();
const routered = useRouter();
console.log("route:", router.query.id);
// 输入接入 -- start --
// 资源归属 sourceBelongId 后续给接口
state.bum = computed(() => {
console.log("基础信息 store.state.orgtreeList", store.state.orgtreeList);
return store.state.orgtreeList ? store.state.orgtreeList : [];
});
//任务大纲渲染
const getTaskList = () => {
let objtl = {
projectId: state.projectId,
};
apitl
.getProjectDetail(objtl)
.then((res) => {
if (res.status == 200) {
console.log("阶段列表", res);
for (let i = 0; i < res.data.data.stageList.length; i++) {
for (
let k = 0;
k < res.data.data.stageList[i].taskList.length;
k++
) {
if (res.data.data.stageList[i].taskList[k].name == "面授") {
state.morFaceT = true;
break;
}
}
}
//暂时传个固定的id用 到时候看数据里面是否有在更换
// state.projectTaskId = res.data.data.stageList[0].taskList[0].projectTaskId
let leng = res.data.data.stageList.length;
if (leng > 0) {
let taskarr = res.data.data.stageList;
console.log("11-22-33", taskarr);
if (taskarr.length == 1) {
if (taskarr[0].stageId == "0") {
taskarr[0].name = "无阶段任务";
}
}
state.taskSyllabus = taskarr;
}
}
})
.catch((err) => {
console.log("获取任务列表失败", err);
});
};
//学员学员管理渲染
// const getTableDate = () => {
// let datas = state.tabledata;
// datas.map((value) => {
// {
// //单层项目
// value.operations = (
// <div class="operation">
// <div class="nSelect">
// <div class="nselect">
// <div
// class="jc"
// onClick={() => {
// // state.QR_hs = true;
// // state.ftsQR_hs = true;
// state.canclestu = true;
// }}
// >
// 优秀学员
// </div>
// <div
// class="jc"
// onClick={() => {
// state.Seevisible = true;
// }}
// >
// 查看
// </div>
// <div class="tableSelect">
// <a-select
// style="width: 50px;margin-top:2px;margin-left:25px"
// value="更多"
// // options={state.projectNameList}
// dropdownClassName="tabledropdown"
// >
// <a-select-option
// value="换组"
// label="换组"
// style="padding-left:35px"
// >
// <div
// onClick={() => {
// // state.copy_hs = true;
// }}
// >
// 复制
// </div>
// </a-select-option>
// <a-select-option
// value="删除"
// label="删除"
// style="padding-left:35px"
// >
// <div
// onClick={() => {
// state.delete_hs = true;
// }}
// >
// 删除
// </div>
// </a-select-option>
// </a-select>
// </div>
// </div>
// </div>
// </div>
// );
// }
// });
// state.tableData = datas;
// };
// getTableDate();
const totask = () => {
// state.activeKey = "2";
routered.push({
path: `/taskadd`,
query: { projectId: state.projectId },
});
};
const tostudent = () => {
state.activeKey = "3";
state.activeKey1 = "8";
};
const showModal = () => {
state.pubproject = true;
};
const closeModal = () => {
state.pubproject = false;
};
const showModal1 = () => {
state.canclestu = true;
};
//点击确定授予优秀学员后
const closeModal1 = () => {
state.editRecord.topFlag = 1;
updateStudent(state.editRecord);
state.canclestu = false;
message.success("优秀学员称号授予成功");
};
//点击取消授予优秀学员后
const cancelyou = () => {
state.changeGoods = [];
state.canclestu = false;
};
const showModal3 = () => {
state.canclestu1 = true;
};
//点击确定取消优秀学员称号
const closeModal3 = () => {
state.editRecord.topFlag = 0;
updateStudent(state.editRecord);
state.canclestu1 = false;
message.success("优秀学员称号取消成功");
};
//点击取消取消授予优秀学员后
const cancelcanyou = () => {
state.changeGoods = [];
state.canclestu1 = false;
};
const showModal2 = (classify, item) => {
state.stuMemberClassify = classify;
state.projectGroupId =
item && item.projectGroupId ? item.projectGroupId : null;
state.stugroup = true;
console.log("item", item);
if (item) {
state.valueaddg = item.groupName;
state.stuGroupName = item.leaderName;
state.stuGroupId = item.leaderId;
}
console.log("编辑小组item", item);
};
const closeModal2 = () => {
state.stugroup = false;
state.valueaddg = null;
state.stuGroupName = null;
state.stuGroupId = null;
state.projectGroupId = null;
state.stuMemberClassify = null;
};
//点击确定创建小组
const createG = () => {
if (state.stuGroupName == "" || state.valueaddg == "") {
message.destroy();
return message.warning("请输入必填项");
} else {
createGroup();
closeModal2();
}
};
const showFaceIn = () => {
state.TaskFaceImpStuvisible = true;
};
//在线、案例、外链、讨论、评估、直播、活动管理页面
const showOnline = (name, id, type, datasource, levelname) => {
console.log("点击管理并传了id", datasource);
state.commonLevelName = levelname;
state.commonData = datasource;
state.onlineVisible = true;
state.showTimeText = name;
state.projectTaskId = id;
state.itemstype = Number(type);
};
//面授管理的抽屉
const showFace = (name, id, item) => {
// console.log("点击管理");
state.FaceVisivle = true;
state.showFaceText = name;
state.projectTaskId = id;
state.projectTaskInfo = item;
console.log("projectTaskInfo", item);
};
const showSubset = () => {
// 随机分组
state.subsetVisivle = true;
};
//面授学员的弹窗
const showFS = () => {
state.FSvisible = true;
};
//面授学员的弹窗
const showMemberList = (id) => {
state.Lvisible = true;
console.log("ssdsdsdsd", id);
state.chooseGroupId = id;
};
//活动考勤的抽屉
const showAA = (title) => {
state.AAvisible = true;
state.showkaoqinText = title;
};
//作业管理的抽屉
const showWork = (name, id, item) => {
state.Wvisible = true;
state.showWorkText = name;
state.projectTaskId = id;
state.projectTaskInfo = item;
};
//考试管理的抽屉
const showTest = (name, id, data) => {
state.examData = data;
state.TMvisible = true;
state.showTestText = name;
state.projectTaskId = id;
};
//测评抽屉
const showEval = (name, id, type, datasource) => {
console.log("点击测评");
state.evaltype = type;
state.evalData = datasource;
state.Evalvisible = true;
state.showTestText = name;
state.projectTaskId = id;
};
const showStuAdd = () => {
state.Stuvisible = true;
};
const showSeeStu = () => {
state.Seevisible = true;
};
const showImportStu = () => {
state.Importvisible = true;
};
const showChangeGroup = () => {
state.Changevisible = true;
};
const edit_hShow = () => {
state.edit_hs = true;
};
const edit_exit = () => {
state.edit_hs = false;
state.radioV1 = "";
state.radioV2 = "";
};
const cloradio1 = (value) => {
if (value != "") {
state.radioV1 = "";
}
};
const cloradio2 = (value) => {
if (value != "") {
state.radioV2 = "";
}
};
const showzhibModal = () => {
state.zhibModal = true;
};
const showhuodModal = () => {
state.huodModal = true;
};
const closezhibModal = () => {
state.zhibModal = false;
};
const closehuodModal = () => {
state.huodModal = false;
};
const showEditProj = () => {
state.editHs = true;
};
//显示二维码弹窗
const showCodeModal = () => {
state.codevisible = true;
state.codeInfo = {
title: "课程二维码",
name: "管理者进阶面授课程",
url: "https://www.baidu.com/https://www.baidu.com/https://www.baidu.com/https://www.baidu.com/https://www.baidu.com/",
};
};
// 提交审核
const submitExamine = () => {
state.reviewModal = true;
};
const submitReviewProject = () => {
let obj = {
projectId: state.projectId,
type: 3,
};
console.log("提交审核obj", obj);
apis
.handleProject(obj)
.then((res) => {
console.log("提交成功", res);
message.destroy();
message.success("提交成功");
state.reviewModal = false;
getTaskInfo();
// getTask();
reget();
})
.catch((err) => {
console.log("提交失败", err);
});
};
//关闭提交审核弹窗
const closeReviewModal = () => {
state.reviewModal = false;
};
//学员管理列表操作
// const studentData = () => {
// let arr = state.tabledata;
// console.log(arr, "学员管理");
// arr.map((value) => {
// value.operation = (
// <div
// style={{
// display: "flex",
// alignItems: "center",
// justifyContent: "center",
// }}
// >
// <div
// class="studentopea1"
// onClick={() => {
// if (value.excellent === false) {
// state.canclestu = true;
// console.log("youxiu", value.studentId);
// state.changeGoods.push(value.studentId);
// } else if (value.excellent === true) {
// state.canclestu1 = true;
// console.log("youxiu", value.studentId);
// state.changeGoods.push(value.studentId);
// }
// }}
// >
// {value.excellent ? "取消优秀" : "优秀学员"}
// </div>
// <div
// class="studentopea2"
// onClick={() => {
// state.Seevisible = true;
// console.log(value.studentId, "点击了查看");
// state.checkStuId = value.studentId;
// }}
// >
// 查看
// </div>
// <div class="studentSelect">
// <a-select
// style="width: 50px"
// value="更多"
// // options={state.projectNameList}
// dropdownClassName="tabledropdown"
// >
// <a-select-option value="换组" label="换组">
// <div
// style="cursor:pointer"
// onClick={() => {
// state.Changevisible = true;
// console.log(value, "xixixixix");
// state.ChangeGroupStuId = value.studentId;
// state.ChangeGroupStuName = value.name;
// state.ChangeGroupId = value.groupId;
// }}
// >
// 换组
// </div>
// </a-select-option>
// <a-select-option value="删除" label="删除">
// <div
// style="cursor:pointer"
// onClick={() => {
// console.log("点击了111", value.studentId);
// showDeleteOne(value.studentId);
// }}
// >
// 删除
// </div>
// </a-select-option>
// </a-select>
// </div>
// </div>
// );
// });
// state.tabledata = arr;
// };
// studentData();
// const studentData = () => {
// let arr = state.tabledata;
// console.log(arr, "学员管理");
// arr.map((value) => {
// value.operation = (
// );
// });
// state.tabledata = arr;
// };
// studentData();
const studentColumns = () => {
const tablecolumns = [
{
title: "姓名",
dataIndex: "name",
key: "name",
width: "20%",
align: "left",
className: "h",
// scopedSlots: { customRender: "action" }, //引入的插槽
customRender: (text) => {
console.log(text.excellent);
return (
<div>
{text.record.excellent ? (
<div
style={{
display: "flex",
alignItems: "center",
}}
>
<span class="stydentName">{text.value}</span>
<div class="studentExcellent">
<img
class="studentExcellentImg"
src={require("../../assets/images/taskpage/excellent.png")}
/>
<span class="studentExcellentT">优秀</span>
</div>
</div>
) : (
<div>
<span>{text.value}</span>
</div>
)}
</div>
);
},
},
{
title: "部门",
dataIndex: "bum",
key: "bum",
width: "10%",
align: "center",
className: "h",
ellipsis: true,
},
// {
// title: "岗位",
// dataIndex: "gangw",
// key: "gangw",
// width: 50,
// align: "center",
// className: "h",
// },
// {
// title: "所属小组",
// dataIndex: "group",
// key: "group",
// width: 50,
// align: "center",
// className: "h",
// },
{
title: "进度",
dataIndex: "progress",
key: "progress",
width: "10%",
align: "center",
className: "h",
ellipsis: true,
},
// {
// title: "证书",
// dataIndex: "diploma",
// key: "diploma",
// width: 30,
// align: "center",
// className: "h",
// },
{
title: "最近学习时间",
dataIndex: "stutime",
key: "stutime",
width: "20%",
align: "center",
className: "h",
// sorter: {
// compare: (a, b) => a.stutime - b.stutime,
// multiple: 3,
// },
},
{
title: "加入方式",
dataIndex: "putin",
key: "putin",
width: "10%",
align: "center",
className: "h",
ellipsis: true,
},
{
title: "操作",
dataIndex: "operation",
key: "operation",
width: "20%",
align: "center",
className: "h",
scopedSlots: { customRender: "action" }, //引入的插槽
customRender: (text) => {
// console.log(text);
return (
<div
style={{
display: "flex",
alignItems: "center",
justifyContent: "center",
}}
>
<div
class="studentopea1"
onClick={() => {
if (text.record.excellent === false) {
state.canclestu = true;
console.log("youxiu", text.record.studentId);
state.changeGoods.push(text.record.studentId);
} else if (text.record.excellent === true) {
state.canclestu1 = true;
console.log("youxiu", text.record.studentId);
state.changeGoods.push(text.record.studentId);
}
}}
>
{text.record.excellent ? "取消优秀" : "优秀学员"}
</div>
{/**
2022-11-30注释 后面放开
<div
class="studentopea2"
onClick={() => {
state.Seevisible = true;
console.log(text.record.studentId, "点击了查看");
state.checkStuId = text.record.studentId;
}}
>
查看
</div>
*/}
<div class="studentSelect">
<a-select
style="width: 50px"
value="更多"
// options={state.projectNameList}
dropdownClassName="tabledropdown"
>
{/**
<a-select-option value="换组" label="换组">
<div
onClick={() => {
state.Changevisible = true;
console.log(text, "xixixixix");
state.ChangeGroupStuId = text.record.studentId;
state.ChangeGroupStuName = text.record.name;
state.ChangeGroupId = text.record.groupId;
}}
>
换组
</div>
</a-select-option>
*/}
<a-select-option value="删除" label="删除">
<div
onClick={() => {
// console.log("点击了111", text);
showDeleteOne(text.record.studentId);
}}
>
删除
</div>
</a-select-option>
</a-select>
</div>
</div>
);
},
},
];
return tablecolumns;
};
const delete_exit = () => {
state.delete_hs = false;
};
//tabs切换
const tabsChange = (e) => {
//排行榜
if (e == 6) {
//获取进度榜
getbillboard(1, 1);
//获取学分榜
getbillboard(2, 1);
//获取学时榜
getbillboard(3, 1);
} else if (e == 3) {
state.tabFlag = true;
} else {
rankReset();
state.tabFlag = false;
}
console.log("切换了", state.tabFlag);
};
// start -------排行榜---------------排行榜------------排行榜------------------排行榜---------
//选择搜索时间
const rankTimeChange = (e, date) => {
let startTime = date[0] + " 00:00:00";
let endTime = date[1] + " 23:59:59";
state.rankStartTime = new Date(startTime).getTime() / 1000;
state.rankEndTime = new Date(endTime).getTime() / 1000;
console.log("e", state.rankStartTime, state.rankEndTime);
};
//获取排行榜 category:榜单类别参数 type:人员类别参数
const getbillboard = (category, type) => {
let obj = {
beginTime: state.rankStartTime,
category: category,
endTime: state.rankEndTime,
name: state.valueName,
projectId: state.projectId,
stageId: 0,
type: type,
};
api
.billboard(obj)
.then((res) => {
console.log("获取成功", res);
})
.catch((err) => {
console.log("获取失败", err);
});
};
//搜索
const rankSearch = () => {
//获取进度榜
getbillboard(1, 1);
//获取学分榜
getbillboard(2, 1);
//获取学时榜
getbillboard(3, 1);
};
//重置
const rankReset = () => {
state.rankStartTime = null;
state.rankEndTime = null;
state.valueDate = null;
state.valueName = null;
};
// end -----排行榜----------------排行榜----------------------排行榜-----------排行榜----------
//start---------学员------
//删除单个学员
const showDeleteOne = (id) => {
state.deleteOneStu = true;
state.chooseDeleteOne.push(id);
};
//点击取消删除单个学员
const closeDeleteOne = () => {
state.deleteOneStu = false;
state.chooseDeleteOne = [];
};
//点击确认删除单个学员
const closeDeleteOneConfirm = () => {
state.deleteOneStu = false;
state.loading = true;
deleteStu({
projectId: state.projectId,
studentIds: state.chooseDeleteOne,
})
.then((res) => {
console.log(res, "单个删除成功");
message.success("删除成功");
getStu();
})
.catch((err) => {
console.log(err, "单个删除失败");
message.warning("删除失败");
});
state.chooseDeleteOne = [];
};
//批量删除学员弹窗
const showAllDelete = () => {
if (state.selectedRows.length == 0) {
message.destroy();
return message.warning("请选择要删除的学员");
} else {
state.allDelete = true;
}
};
//点击取消的批量删除弹窗
const closeCancelDelete = () => {
state.allDelete = false;
};
//点击确定的批量删除弹窗
const closeAllDelete = () => {
state.loading = true;
deleteStu({
projectId: state.projectId,
studentIds: state.selectedRows,
})
.then((res) => {
console.log(res, "删除成功");
message.success("删除成功");
state.selectedRows = [];
getStu();
})
.catch((err) => {
console.log(err, "删除失败");
message.warning("删除失败");
});
state.allDelete = false;
};
const handleChangeGood = (value) => {
console.log(value, state.valuegood, 11111);
};
const handleChangeBum = (value) => {
console.log(value, 22222);
};
//把数据放到state里
const getTableDataList = (tableData) => {
let data = tableData;
let array = [];
data.map((value) => {
let obj = {
key: value.studentId,
projectId: value.projectId, //项目id
groupId: value.groupId, //小组id
group: value.groupName, //小组名
studentId: value.studentId, //学生id
currentStageId: value.currentStageId, //当前关卡id
name: value.name, //用户名
bum: value.userInfoBo.deptName, //部门
gangw: value.userInfoBo.jobName, //岗位
completeStageCnt: value.completeStageCnt, //当前完成阶段数
totalStageCnt: value.totalStageCnt, //总阶段数
excellent: value.topFlag == 1 ? true : false, //是否优秀学员
progress: value.completeStageCnt + "/" + value.totalStageCnt,
putin:
value.source == 0
? "报名加入"
: value.source == 1
? "指定添加"
: value.source == 2
? "组织添加"
: value.source == 3
? "受众添加"
: "-", //加入方式
stutime: toDate(value.beginStudyTime, "Y-M-D"), //开始学习时间
};
array.push(obj);
console.log("stutime", obj.stutime);
});
state.tabledata = array;
};
//把小组列表信息放到state里
const setGroupList = (tableData) => {
console.log("tableDatatableDatatableData", tableData);
let data = tableData;
let array = [];
data.map((value) => {
let obj = {
projectId: value.projectId, //项目id
projectGroupId: value.projectGroupId, //小组id
groupName: value.groupName, //小组名称
leaderId: value.leaderId, //组长id
leaderName: value.leaderName, //组长名称
source: value.source == 1 ? "指定添加" : "随机分组",
completeTaskCnt: value.completeTaskCnt, //完成任务数
totalTaskCnt: value.totalTaskCnt, //累计任务数
completeRatio: value.completeRatio ? value.completeRatio : 0, //完成比例
};
array.push(obj);
});
state.groupList = array;
console.log("编辑小组", state.groupList);
};
//学员搜索
const searchStu = () => {
let obj = {
deptIds: [], //部门
groupName: state.valuestugroup,
name: state.valuestun,
pageNo: state.currentPageStu,
pageSize: 10,
projectId: state.projectId,
topFlag:
state.valuegood == "优秀学员"
? 1
: state.valuegood == "普通学员"
? 0
: state.valuegood == "全部"
? ""
: "",
};
//重新获取列表
getStu(obj);
};
//勾选学员
const onSelectChange = (selectedRowKeys, selectedRows) => {
console.log("selectedRowKeys changed: ", selectedRowKeys);
state.selectedRowKeys = selectedRowKeys;
state.choosed = state.selectedRowKeys.length;
console.log("ssss", selectedRows);
state.selectedRows = [];
console.log("before", state.selectedRows);
// let arr = [];
//遍历 插入到state.selectedRows里
selectedRows.map((item) => {
console.log(item.studentId);
state.selectedRows.push(item.studentId);
// arr.push(item.studentId);
// console.log("asdfasdf", arr);
});
// state.selectedRows = arr;
console.log("after", state.selectedRows);
// console.log(state.selectedRows[0]);
// console.log("dddd",selectedRows.)
//判断是否为数组
// console.log("wwwwww", Object.prototype.toString.call(state.selectedRows));
};
//清空所选的学员
const clearChooseStu = () => {
Modal.confirm({
title: "确定清空所有学员吗?",
onOk: async () => {
state.tabledata = [];
student.studentDelAll({ id: state.projectId, type: 1 });
},
bodyStyle: "margin-top:70%",
});
};
//学员重置
const resetCancel = () => {
(state.valuestun = null),
(state.valuestugroup = null),
(state.valuestub = null),
(state.valuegood = null);
getStu();
};
//获取学员列表
const getStu = (obj) => {
state.loading = true;
let objf = obj || {
deptIds: [], //部门
groupId: 0,
groupName: "",
name: "",
pageNo: state.currentPageStu,
pageSize: 10,
projectId: state.projectId,
topFlag: "",
};
getProjStu(objf)
.then((res) => {
console.log("获取学员列表", res.data);
state.total = res.data.data.total;
let arr = res.data.data.rows;
getTableDataList(arr);
state.loading = false;
})
.catch((err) => {
console.log("获取学员列表失败", err);
});
};
//获取项目信息
const getTaskInfo = () => {
getTask({
projectId: state.projectId,
useTask: "N",
}).then((res) => {
console.log("get task", res.data.data);
if (res.data.code === 200) {
// 判断当前审核是否通过
if (
res.data.data.projectAuditLogDtoList &&
res.data.data.projectAuditLogDtoList.length
) {
console.log("审核信息是什么", res.data.data.projectAuditLogDtoList);
let dataset = res.data.data.projectAuditLogDtoList;
state.passInfo = dataset[dataset.length - 1].description;
/**
for (let i = 0; i < dataset.length; i++) {
if (dataset[i].status == -5) {
state.isPass = true;
state.passInfo = dataset[i].description;
}
// isPass passInfo
}
*/
}
state.stage = res.data.data.stageList.map((e) => ({
id: e.stageId,
name: e.name,
}));
let info = res.data.data.projectInfo;
// let start = toDate(info.beginTime / 1000, "Y-M-D h:m");
let start = info.beginTime;
// let end = toDate(info.endTime / 1000, "Y-M-D h:m");
let end = info.endTime;
state.tstartTime = info.beginTime;
state.tendTime = info.endTime;
state.tsourceBelong =
(info.sourceBelongFullName || "") + info.sourceBelongName;
state.parentId = info.parentId;
state.name = info.name;
state.startTime = start;
state.endTime = end;
state.manager = info.manager;
state.remark = info.remark;
state.level = info.level;
state.tlevel = info.level;
state.systemId = info.systemId;
state.tsystemId = info.systemId;
state.checkedSty = info.courseSyncFlag == 1 ? true : false;
state.courseSyncFlag = info.courseSyncFlag;
state.checkedBOEU = info.boeFlag == 1 ? true : false;
state.boeFlag = info.boeFlag;
state.picUrl = info.picUrl;
state.managerId = info.managerId;
state.notice = info.notice;
state.status = info.status;
state.type = info.type;
state.category = info.category;
state.noticeFlag = info.noticeFlag;
state.switchopen = info.attachSwitch == 1 ? true : false;
state.docChecked = info.attachSwitch == 1 ? true : false;
// state.attach = info.attach;
// state.templateId = info.templateId;
state.sourceBelong =
(info.sourceBelongFullName || "") + info.sourceBelongName;
// state.fileList=info.attach.split(",")
let d = info.attach.indexOf(",");
// console.log(info.attach, "xgo", info.attach.length);
if (info.attach.length == 0) {
return;
} else if (info.attach.length !== 0 && d == -1) {
return;
} else {
// console.log(info.attach, "xgo");
// let str = JSON.parse(info.attach)
// console.log("赚回来",str)
// let luj = info.attach.split(",")
let luj = info.attach;
// console.log("lulj", luj);
console.log("赚回来", JSON.parse(luj));
state.fileList = JSON.parse(luj);
// state.fileList = luj
}
}
});
};
//获取小组列表
const getGroup = (obj) => {
let objf = obj || {
name: "",
pageNo: state.currentPageStu,
pageSize: 10,
projectId: state.projectId,
};
getGroupList(objf)
.then((res) => {
console.log(res.data.data.rows, "获取小组列表成功");
if (res.data.code === 200) {
let arr = res.data.data.rows;
setGroupList(arr);
}
// let leng = res.data.data.rows.length;
// if (leng > 0) {
// }
})
.catch((err) => {
console.log(err, "获取列表失败");
});
};
//删除小组
const deleteGroupBtn = (projectGroupId) => {
deleteGroup({
projectGroupId: projectGroupId,
}).then((res) => {
console.log("删除小组成功", res);
message.success("删除小组成功");
getGroup();
});
};
//创建小组
const createGroup = () => {
//新建
if (state.stuMemberClassify === 1) {
let obj = {
groupName: state.valueaddg,
leaderId: state.stuGroupId,
leaderName: state.stuGroupName,
// projectGroupId: 0,
projectId: state.projectId,
};
console.log("小组创建obj", obj);
editGroup(obj)
.then((res) => {
console.log("小组创建成功", res);
message.success("小组创建成功");
getGroup();
getStu();
})
.catch((err) => {
console.log("小组创建失败", err);
message.warning("小组创建失败");
});
}
//编辑
if (state.stuMemberClassify === 2) {
let obj = {
groupName: state.valueaddg,
leaderId: state.stuGroupId,
leaderName: state.stuGroupName,
projectGroupId: state.projectGroupId,
projectId: state.projectId,
};
console.log("编辑小组obj", obj);
editGroup(obj)
.then((res) => {
console.log("小组编辑成功", res);
message.success("小组编辑成功");
getGroup();
})
.catch((err) => {
console.log("小组编辑失败", err);
message.warning("小组编辑失败");
});
}
};
//搜索小组重置
const resetGroupName = () => {
state.valuestugn = null;
getGroup();
};
//小组搜索
const searchGroup = () => {
let obj = {
name: state.valuestugn,
pageNo: 1,
pageSize: 10,
projectId: state.projectId,
};
getGroup(obj);
};
//分页
const changePaginationStu = (page) => {
state.currentPageStu = page;
getStu();
};
const changeGrouped = (data) => {
console.log(data);
getStu();
};
//end---------学员------
//start---------项目概览
// 获取项目概览
const getOverview = () => {
overview({ projectId: state.projectId })
.then((res) => {
Object.keys(res.data.data.projectInfoOverview).forEach((item) => {
levelList.projectInfoOverview[item] =
res.data.data.projectInfoOverview[item] || 0;
});
Object.keys(res.data.data.stageOverviewList).forEach((item) => {
levelList.stageOverviewList[item] =
res.data.data.stageOverviewList[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);
});
};
//end---------项目概览
// 设置上传图片开关
const checkedClose = (data, a) => {
console.log(data, a);
state.docChecked = data;
state.switchopen = data;
// 更新开关状态
editProj({
attachSwitch: state.switchopen ? 1 : -1,
boeFlag: state.boeFlag,
category: state.category,
courseSyncFlag: state.courseSyncFlag,
level: state.tlevel,
manager: state.manager,
managerId: state.managerId,
name: state.name,
notice: state.notice,
noticeFlag: state.noticeFlag,
parentId: state.parentId,
picUrl: state.picUrl,
projectId: Number(state.projectId),
remark: state.remark,
sourceBelongId: Number(state.tsourceBelong),
status: state.status,
systemId: state.tsystemId,
templateId: state.templateId || 0,
type: state.type,
})
.then((res) => {
console.log("上传成功", res);
})
.catch((err) => {
console.log("上传失败了", err);
});
};
const handleChange = ({ file, fileList }) => {
let list = [];
if (file.status !== "uploading") {
console.log("上传的list", fileList);
console.log(file);
list = state.fileList;
console.log("list", list);
let str = JSON.stringify(list);
console.log("str", str);
//要编辑项目
console.log("编辑的项目信息", {
attach: str,
// beginTime: state.tstartTime.slice(0, 10),
boeFlag: state.boeFlag,
category: state.category,
courseSyncFlag: state.courseSyncFlag,
// endTime: state.tendTime.slice(0, 10),
level: state.tlevel,
manager: state.manager,
managerId: state.managerId,
name: state.name,
notice: state.notice,
noticeFlag: state.noticeFlag,
parentId: state.parentId,
picUrl: state.picUrl,
projectId: Number(state.projectId),
remark: state.remark,
sourceBelongId: Number(state.tsourceBelong),
status: state.status,
systemId: state.tsystemId,
templateId: state.templateId || 0,
type: state.type,
});
editProj({
attachSwitch: state.switchopen ? 1 : -1,
attach: str,
boeFlag: state.boeFlag,
category: state.category,
courseSyncFlag: state.courseSyncFlag,
level: state.tlevel,
manager: state.manager,
managerId: state.managerId,
name: state.name,
notice: state.notice,
noticeFlag: state.noticeFlag,
parentId: state.parentId,
picUrl: state.picUrl,
projectId: Number(state.projectId),
remark: state.remark,
sourceBelongId: Number(state.tsourceBelong),
status: state.status,
systemId: state.tsystemId,
templateId: state.templateId || 0,
type: state.type,
})
.then((res) => {
console.log("上传成功", res);
})
.catch((err) => {
console.log("上传失败了", err);
});
}
if (file.status === "done") {
message.success(`${file.name} 文件上传成功`);
} else if (file.status === "error") {
message.error(`${file.name} 文件上传失败.`);
}
};
//设置里的编辑按钮
const toEdit = () => {
if (state.parentId == "0") {
routered.push({
path: "/projectadd",
query: {
projectId: state.projectId,
name: state.name,
},
});
} else {
if (state.isbj !== null) {
routered.push({
path: "/classadd",
query: {
projectId: state.projectId,
// name: state.paraentName,
name: state.pN,
edit: 0,
},
});
} else {
routered.push({
path: "/sonproject",
query: {
projectId: state.projectId,
name: state.name,
edit: 0,
},
});
}
}
};
const reget = () => {
console.log("state.projectId", state.projectId);
getTask({
projectId: state.projectId,
useTask: "N",
}).then((res) => {
console.log("获取项目状态", res);
state.action = res.data.data.projectInfo.status;
state.act =
state.action == 2
? "发布"
: state.action == 0
? "提交审核"
: state.action == 1
? "撤回审核"
: state.action == 3
? "撤回发布"
: state.action == -1
? ""
: "-";
});
};
//打开发布弹窗
const showProjectPub = () => {
state.projectPub = true;
state.projectPubLoading = true;
state.releaseProjectId = state.projectId;
state.releaseProjectName = state.name;
// state.releaseProjectTime = state.startTime;
// console.log("object", object);
apiproj.getProjectCount(state.projectId).then((res) => {
console.log("获取关卡、任务、学员统计数据", res.data);
// state.projectStudentsNum = res.data.students;
// state.projectStages = res.data.stages;
// state.projectTasks = res.data.tasks;
state.projectStages = res.data.data.stages;
state.projectTasks = res.data.data.tasks;
});
//获取学员总数
let obj = {
pageNo: 0,
pageSize: 0,
pid: state.projectId,
type: 1,
};
getStuPage(obj)
.then((res) => {
if (res.data.code === 200) {
// console.log("res", res.data);
state.projectStudentsNum = res.data.data.total
? res.data.data.total
: 0;
state.projectPubLoading = false;
}
})
.catch((err) => {
console.log("获取学员人数失败", err);
});
//获取阶段及任务总数
};
//关闭发布弹窗
const closeProjectPub = () => {
state.projectPub = false;
};
//确认发布项目
const releaseProject = () => {
console.log("点击发布");
let obj = {
projectId: state.releaseProjectId,
type: 4,
};
apiproj
.handleProject(obj)
.then((res) => {
console.log("发布成功", res);
message.destroy();
message.success("发布成功");
state.projectPub = false;
reget();
})
.catch((err) => {
console.log("发布失败", err);
});
};
//打开撤回弹窗
const showBackModal = () => {
state.backModal = true;
};
//关闭撤回弹窗
const closeBackModal = () => {
state.backModal = false;
};
const recallProject = () => {
let obj = {
projectId: state.projectId,
type: -4,
};
apiproj
.handleProject(obj)
.then((res) => {
console.log("撤回成功", res);
message.destroy();
message.success("撤回成功");
state.backModal = false;
reget();
})
.catch((err) => {
console.log("撤回失败", err);
});
};
//打开撤回审核弹窗
const showRecallReviewModal = () => {
state.recallReviewModal = true;
};
//确认撤回审核
const recallReviewProject = () => {
let obj = {
projectId: state.projectId,
type: -3,
};
console.log("撤回成功obj", obj);
apiproj
.handleProject(obj)
.then((res) => {
console.log("撤回成功", res);
message.destroy();
message.success("撤回成功");
state.recallReviewModal = false;
reget();
})
.catch((err) => {
console.log("撤回成功", err);
});
};
//关闭提交审核弹窗
const closeRecallReviewModal = () => {
state.recallReviewModal = false;
};
//关闭结束弹窗
const closeStopModal = () => {
state.stopModal = false;
};
//确认结束
const finishProject = () => {
let obj = {
projectId: state.projectId,
type: -1,
};
apiproj
.handleProject(obj)
.then((res) => {
console.log("结束成功", res);
message.destroy();
message.success("已结束");
state.stopModal = false;
reget();
})
.catch((err) => {
console.log("结束失败", err);
});
};
//打开结束弹窗
const showStopModal = () => {
state.stopModal = true;
};
//打开存为模版弹窗
const showStartModal = () => {
state.startModal = true;
};
//关闭存为模版弹窗
const closeStartModal = () => {
state.startModal = false;
};
//确认存为模版
const templateProject = () => {
let obj = {
projectId: state.projectId,
type: 1,
};
apiproj
.handleProject(obj)
.then((res) => {
console.log("模版保存成功", res);
message.destroy();
message.success("模版保存成功");
state.startModal = false;
reget();
})
.catch((err) => {
console.log("模版保存失败", err);
});
};
//删除文件
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);
editProj({
attach: str,
beginTime: state.tstartTime.slice(0, 10),
// beginTime:1668643200,
boeFlag: state.boeFlag,
category: state.category,
courseSyncFlag: state.courseSyncFlag,
endTime: state.tendTime.slice(0, 10),
// endTime: 1668816000,
level: state.tlevel,
manager: state.manager,
managerId: state.managerId,
name: state.name,
notice: state.notice,
noticeFlag: state.noticeFlag,
parentId: state.parentId,
picUrl: state.picUrl,
projectId: state.projectId,
remark: state.remark,
sourceBelongId: Number(state.tsourceBelong),
status: state.status,
systemId: state.tsystemId,
templateId: state.templateId || 0,
type: state.type,
})
.then((res) => {
console.log("上传成功", res);
message.destroy();
return message.success("删除成功");
})
.catch((err) => {
console.log("上传失败了", err);
message.warning("删除失败");
});
};
//添加学员
watch(
() => state.addAuthList,
(res) => {
console.log("res", res, state.addAuthList);
let obj = {
deptList: res[1],
groupList: res[2],
projectId: state.projectId,
studentList: res[0],
projectGroupId: 0,
};
console.log("obj", obj);
state.loading = true;
api
.addStudentProject(obj)
.then((res) => {
console.log("添加学员成功", res);
message.success("添加学员成功");
getStu();
})
.catch((err) => {
console.log("添加学员失败", err);
});
}
);
onMounted(() => {
// getStu();
getTaskList();
getTaskInfo();
getGroup();
getOverview();
reget();
// let a = state.attach.split(",")
// state.fileList = a
});
const checkType = (type) => {
let typeRules = [
"",
"在线",
"面授",
"案例",
"作业",
"考试",
"直播",
"外链",
"讨论",
"活动",
"测评",
"评估",
"投票",
"项目",
];
return typeRules[type];
};
//显示二维码弹窗
const showCodeModel = (item) => {
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.name,
url: codeUrl,
};
state.codeInfo = obj;
};
function settingTopFlag(record) {
record.topFlag ? (state.canclestu1 = true) : (state.canclestu = true);
state.editRecord = record;
}
function showStudent(record) {
state.Seevisible = true;
state.checkStuId = record.studentId;
}
return {
...toRefs(state),
...toRefs(levelList),
showStudent,
settingTopFlag,
totask,
tostudent,
showModal,
closeModal,
showModal1,
closeModal1,
showModal2,
closeModal2,
showModal3,
closeModal3,
showDeleteOne,
closeDeleteOne,
showOnline,
showFace,
showSubset,
showMemberList,
showFS,
showAA,
showWork,
showTest,
showEval,
showStuAdd,
showImportStu,
showSeeStu,
showChangeGroup,
showFaceIn,
edit_hShow,
edit_exit,
cloradio1,
cloradio2,
studentColumns,
delete_exit,
showzhibModal,
showhuodModal,
closehuodModal,
closezhibModal,
showCodeModal,
tabsChange,
getTaskList,
rankTimeChange,
getbillboard,
rankSearch,
rankReset,
handleChangeGood,
getStu,
getTableDataList,
searchStu,
handleChangeBum,
resetCancel,
showAllDelete,
closeAllDelete,
onSelectChange,
closeCancelDelete,
clearChooseStu,
closeDeleteOneConfirm,
showEditProj,
getTaskInfo,
getGroup,
getGroupList,
setGroupList,
deleteGroupBtn,
createGroup,
createG,
resetGroupName,
searchGroup,
cancelyou,
cancelcanyou,
changePaginationStu,
handleChange,
toEdit,
reget,
showProjectPub,
closeProjectPub,
releaseProject,
showBackModal,
closeBackModal,
recallProject,
closeStopModal,
finishProject,
showStopModal,
showStartModal,
closeStartModal,
templateProject,
changeGrouped,
deFile,
toDate,
routered,
checkedClose,
submitExamine,
closeReviewModal,
showRecallReviewModal,
recallReviewProject,
closeRecallReviewModal,
submitReviewProject,
showCodeModel,
showCodeModel2,
checkType,
};
},
};
</script>
<style lang="scss">
.clearfix:before,
.clearfix:after {
content: " ";
display: table;
clear: both;
}
.pubproject {
.ant-modal {
.ant-modal-body {
.modalHeader {
background: linear-gradient(
rgba(78, 166, 255, 0.2) 0%,
rgba(78, 166, 255, 0) 100%
);
}
padding: 0;
.modalHeader {
background: linear-gradient(
0deg,
rgba(78, 166, 255, 0) 0%,
rgba(78, 166, 255, 0.2) 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;
}
}
}
}
}
}
.canclestu {
.ant-modal {
width: 424px !important;
height: 258px !important;
.ant-modal-content {
width: 424px !important;
height: 258px !important;
.ant-modal-close {
margin-right: 18px;
margin-top: 5px;
}
.ant-modal-body {
width: 424px !important;
height: 258px !important;
padding: 0 !important;
.delete {
z-index: 999;
width: 424px;
height: 258px;
background: #ffffff;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.21);
border-radius: 4px;
// position: absolute;
// left: 50%;
// top: 10%;
// transform: translate(-50%, -50%);
.del_header {
position: absolute;
width: calc(100%);
height: 68px;
background: linear-gradient(
rgba(78, 166, 255, 0.2) 0%,
rgba(78, 166, 255, 0) 100%
);
}
.del_main {
width: 100%;
position: relative;
.header {
display: flex;
align-items: center;
padding-top: 20px;
padding-left: 26px;
font-size: 16px;
.icon1 {
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;
}
}
}
}
}
}
}
}
.CopyModal {
.ant-modal {
width: 424px !important;
height: 258px !important;
.ant-modal-content {
width: 424px !important;
height: 258px !important;
.ant-modal-body {
width: 424px !important;
height: 258px !important;
padding: 0 !important;
.delete {
z-index: 999;
width: 424px;
height: 258px;
background: #ffffff;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.21);
border-radius: 4px;
// position: absolute;
// left: 50%;
// top: 10%;
// transform: translate(-50%, -50%);
.del_header {
position: absolute;
width: calc(100%);
height: 68px;
background: linear-gradient(
rgba(78, 166, 255, 0.2) 0%,
rgba(78, 166, 255, 0) 100%
);
}
.del_main {
width: 100%;
position: relative;
.header {
display: flex;
align-items: center;
padding-top: 20px;
padding-left: 26px;
font-size: 16px;
.icon {
width: 16px;
height: 16px;
margin-right: 10px;
background-image: url(@/assets/images/coursewareManage/QR.png);
background-size: 100% 100%;
}
.close_exit {
position: absolute;
right: 42px;
cursor: pointer;
width: 20px;
height: 20px;
background-image: url(@/assets/images/coursewareManage/close.png);
background-size: 100% 100%;
}
}
.body {
width: 100%;
margin: 34px auto 56px auto;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
// background-color: red;
position: relative;
.back {
position: absolute;
top: 30px;
font-size: 12px;
font-weight: 400;
color: #666666;
}
}
.del_btnbox {
display: flex;
margin: 30px auto;
justify-content: center;
.del_btn {
width: 100px;
height: 40px;
background: rgba(64, 158, 255, 0);
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
cursor: pointer;
.btnText {
font-size: 14px;
font-weight: 400;
line-height: 40px;
}
}
.btn1 {
border: 1px solid rgba(64, 158, 255, 1);
color: #4ea6ff;
margin-right: 14px;
}
.btn2 {
background-color: #4ea6ff;
color: #ffffff;
}
}
}
}
}
}
}
}
.canclestu1 {
.ant-modal {
width: 424px !important;
height: 258px !important;
.ant-modal-content {
width: 424px !important;
height: 258px !important;
.ant-modal-close {
margin-right: 18px;
margin-top: 5px;
}
.ant-modal-body {
width: 424px !important;
height: 258px !important;
padding: 0 !important;
.delete {
z-index: 999;
width: 424px;
height: 258px;
background: #ffffff;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.21);
border-radius: 4px;
// position: absolute;
// left: 50%;
// top: 10%;
// transform: translate(-50%, -50%);
.del_header {
position: absolute;
width: calc(100%);
height: 68px;
background: linear-gradient(
rgba(78, 166, 255, 0.2) 0%,
rgba(78, 166, 255, 0) 100%
);
}
.del_main {
width: 100%;
position: relative;
.header {
display: flex;
align-items: center;
padding-top: 20px;
padding-left: 26px;
font-size: 16px;
.icon1 {
width: 16px;
height: 16px;
margin-right: 10px;
background-image: url(@/assets/images/coursewareManage/notice.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;
}
}
}
}
}
}
}
}
.doublepro {
.ant-modal {
.ant-modal-body {
.modalHeader {
background: linear-gradient(
0deg,
rgba(78, 166, 255, 0) 0%,
rgba(78, 166, 255, 0.2) 100%
);
}
padding: 0;
.modalMain {
display: flex;
flex-direction: column;
align-items: center;
.name {
width: 78%;
// background-color: lightcoral;
display: flex;
justify-content: right;
margin-top: 32px;
align-items: center;
height: 40px;
// border: 1px solid black;
.inname {
color: #000000;
font-size: 14px;
margin-left: 7px;
}
.in {
margin-left: 14px;
width: 81%;
.ant-input {
border-radius: 5px;
// height: 120%;
width: 100%;
height: 30px;
}
.ant-select {
border-radius: 5px;
// height: 120%;
width: 100%;
height: 40px;
.ant-select-selector {
border-radius: 8px;
// height: 120%;
width: 100%;
height: 40px;
}
}
}
}
.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;
}
}
}
}
}
}
.projectPub {
.ant-modal {
.ant-modal-body {
padding: 0;
.modalHeader {
background: linear-gradient(
rgba(78, 166, 255, 0.2) 0%,
rgba(78, 166, 255, 0) 100%
);
}
.modalMain {
.projectname {
color: rgba(79, 81, 86, 1);
font-size: 14px;
line-height: 36px;
// margin-left: 62px;
font-weight: 500;
text-align: center;
}
.projecttime {
margin-left: 221px;
.timeti {
color: rgba(153, 155, 163, 1);
font-size: 14px;
line-height: 36px;
}
.timeme {
color: rgba(79, 81, 86, 1);
font-size: 14px;
line-height: 36px;
}
}
.projectbox {
margin-top: 26px;
display: flex;
justify-content: center;
.promessage {
width: 280px;
height: 110px;
background: linear-gradient(
180deg,
rgba(254, 243, 221, 1),
rgba(255, 250, 240, 1)
);
border-radius: 10px;
margin-right: 7px;
.messageme {
color: rgba(255, 182, 78, 1);
font-size: 14px;
line-height: 36px;
margin-top: 17px;
margin-left: 30px;
}
.messagege {
color: rgba(153, 155, 163, 1);
font-size: 14px;
margin-left: 30px;
}
}
.stumessage {
width: 280px;
height: 110px;
background: linear-gradient(
180deg,
rgba(221, 234, 255, 1),
rgba(240, 248, 254, 1)
);
border-radius: 10px;
.messageme1 {
color: rgba(78, 166, 255, 1);
font-size: 14px;
line-height: 36px;
margin-top: 17px;
margin-left: 30px;
}
.messagege1 {
color: rgba(153, 155, 163, 1);
font-size: 14px;
margin-left: 30px;
}
}
}
.send {
margin-top: 30px;
margin-left: 61px;
.sendtext {
margin-left: 11px;
color: rgba(109, 117, 132, 1);
font-size: 14px;
}
}
.ckb {
margin-top: 20px;
margin-left: 62px;
.sendpeo {
color: rgba(109, 117, 132, 1);
font-size: 14px;
}
.ant-checkbox-inner {
border-radius: 4px;
}
}
.pubtn {
display: flex;
justify-content: center;
margin-top: 25px;
//margin-bottom: 29px;
.pubtn1 {
width: 100px;
height: 40px;
margin-right: 16px;
margin-bottom: 29px;
border: 1px solid #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;
}
}
}
}
}
}
.taskpage {
width: 100%;
display: flex;
flex-direction: column;
//position: relative;
.addhead {
width: 100%;
height: 130px;
// background-color: lightgreen;
display: flex;
justify-content: space-between;
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;
display: flex;
flex: 1;
flex-direction: column;
.forz {
color: #363636;
font-weight: 600;
font-size: 16px;
}
.fort {
display: flex;
flex-wrap: wrap;
color: #878b92;
font-size: 14px;
margin-top: 2px;
}
}
@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;
}
.img2 {
width: 42px;
height: 42px;
margin-right: 10px;
}
.pub {
color: #ffb64e;
font-size: 14px;
margin-top: 5px;
margin-right: 30px;
cursor: pointer;
}
.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;
}
}
}
.tableBox {
margin: 20px 38px 30px;
.ant-table-thead > tr > th {
font-size: 14px;
font-weight: 400;
color: #999ba3;
line-height: 36px;
padding: 5px 16px;
background-color: #eff4fc;
}
}
.split {
width: 100%;
height: 20px;
background-color: #edf0f5;
}
.content {
//margin: 0 37px;
.ant-tabs-top > .ant-tabs-nav::before,
.ant-tabs-bottom > .ant-tabs-nav::before,
.ant-tabs-top > div > .ant-tabs-nav::before,
.ant-tabs-bottom > div > .ant-tabs-nav::before {
border-bottom: 0px;
}
.ant-tabs-nav-wrap {
margin-left: 30px;
margin-top: 10px;
}
.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;
background: #ffffff;
width: 100px;
height: 40px;
border: 1px solid #4ea6ff;
border-radius: 8px;
.editimg {
width: 15px;
height: 15px;
margin-top: -2px;
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");
}
}
}
.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;
}
}
}
}
.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;
}
}
.taskbox {
width: 412px;
height: 160px;
border-radius: 10px;
position: relative;
margin-left: 68px;
margin-bottom: 40px;
margin-top: 32px;
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;
}
}
.stage {
display: flex;
height: 49px;
background-color: #eff4fc;
align-items: center;
margin-top: 20px;
margin-left: 38px;
margin-right: 38px;
.stageimg {
margin-left: 31px;
}
.stagename {
color: #4ea6ff;
font-size: 16px;
padding-left: 9px;
line-height: 36px;
}
}
.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;
}
}
}
}
.content3 {
margin-top: 20px;
.ant-tabs-tab-btn {
font-size: 18px;
font-weight: 700;
}
.group {
display: flex;
.groupleft {
display: flex;
flex-wrap: wrap;
align-items: center;
margin-left: 32px;
.groupname {
height: 22px;
width: 70px;
color: #000000;
font-size: 14px;
}
.ant-input {
border-radius: 8px;
width: 264px;
height: 40px;
}
.ant-select-selector {
border-radius: 8px;
width: 264px;
height: 40px;
padding-top: 5px;
}
}
.groupright {
display: flex;
.btn1 {
width: 100px;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
margin-right: 16px;
border: 1px solid #4ea6ff;
border-radius: 8px;
background: #4ea6ff;
cursor: pointer;
.btn1text {
color: #ffffff;
margin-left: 5px;
font-size: 14px;
}
}
.btn2 {
width: 100px;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
margin-right: 32px;
border: 1px solid #4ea6ff;
border-radius: 8px;
cursor: pointer;
background: #ffffff;
.btn2text {
color: #4ea6ff;
margin-left: 5px;
font-size: 14px;
}
}
}
}
.second2 {
display: flex;
margin: 30px 0 0 32px;
.btn1 {
width: 130px;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
margin-right: 16px;
border: 1px solid #4ea6ff;
border-radius: 8px;
background: #4ea6ff;
cursor: pointer;
.btn1text {
color: #ffffff;
margin-left: 5px;
font-size: 14px;
}
}
.btn2 {
width: 130px;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
margin-right: 16px;
border: 1px solid #4ea6ff;
border-radius: 8px;
cursor: pointer;
background: #ffffff;
.btn2text {
color: #4ea6ff;
margin-left: 5px;
font-size: 14px;
}
}
}
.talk {
margin-top: 24px;
margin-left: 32px;
margin-right: 32px;
margin-bottom: 11px;
position: relative;
//width: 90%;
height: 40px;
background: #f5faff;
border: 1px solid #4ea6ff;
// opacity: 0.22;
display: flex;
align-items: center;
.im {
width: 14px;
height: 15px;
margin-left: 17px;
}
.xu {
height: 100%;
line-height: 40px;
margin-left: 13px;
.yi {
color: #4f5156;
font-size: 14px;
}
.zon {
color: #999ba3;
font-size: 14px;
margin-left: 34px;
}
.th {
color: #4ea6ff;
}
}
.clear {
cursor: pointer;
font-size: 14px;
color: #387df7;
line-height: 24px;
position: absolute;
right: 20px;
}
}
.tab {
.ant-table-thead > tr > th {
background-color: rgba(239, 244, 252, 1);
color: rgba(0, 0, 0, 0.85);
}
.ant-table-tbody > tr > td {
border-bottom: 1px solid #f0f6fc;
color: rgba(0, 0, 0, 0.65);
}
th.h {
background-color: #eff4fc !important;
}
.ant-table-tbody
> tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)
> td {
background: rgba(250, 250, 250, 1);
}
.nostu {
width: 100%;
.nostuimg {
margin: 75px auto;
width: 412px;
height: 212px;
background-image: url(@/assets/images/taskpage/nostu.png);
background-size: 100% 100%;
}
}
.pa {
// left: 0;
margin-top: 15px;
width: 100%;
// height: 20px;
// background-color: red;
display: flex;
justify-content: right;
// position: absolute;
// bottom: 20px;
}
.operation {
display: flex;
justify-content: center;
align-items: center;
color: #4ea6ff;
.nselect {
justify-content: center;
align-items: center;
display: flex;
.jc {
margin-left: 20px;
cursor: pointer;
white-space: nowrap;
}
}
.tableSelect {
// margin-right: 10px;
margin-left: -5px;
display: flex;
align-items: center;
justify-content: right;
white-space: nowrap;
}
}
.studentName {
font-size: 14px;
font-weight: 400;
color: rgba(0, 0, 0, 0.65);
line-height: 22px;
}
.studentExcellent {
width: 64px;
height: 24px;
border-radius: 2px;
border: 1px solid #ffb64e;
background-color: rgba(255, 182, 78, 0.1);
margin-left: 24px;
display: flex;
align-items: center;
.studentExcellentImg {
width: 16px;
height: 16px;
margin-left: 7px;
}
.studentExcellentT {
font-size: 12px;
font-weight: 400;
color: #ffb64e;
line-height: 17px;
margin-left: 3px;
}
}
.studentopea1 {
font-size: 14px;
font-weight: 400;
color: #387df7;
line-height: 22px;
padding-right: 8px;
border-right: 1px solid #e9e9e9;
cursor: pointer;
}
.studentopea2 {
font-size: 14px;
font-weight: 400;
color: #387df7;
line-height: 22px;
padding-right: 8px;
padding-left: 8px;
border-right: 1px solid #e9e9e9;
cursor: pointer;
}
.studentSelect {
margin-left: 8px;
display: inline-block;
.ant-select:not(.ant-select-customize-input)
.ant-select-selector
.ant-select-selection-search-input {
background-color: rgba(255, 255, 255, 0);
border: none;
}
.ant-select:not(.ant-select-customize-input) .ant-select-selector {
background-color: rgba(255, 255, 255, 0);
border: none;
}
.ant-select-single:not(.ant-select-customize-input)
.ant-select-selector {
padding: 0;
}
.ant-select-focused:not(.ant-select-disabled).ant-select:not(.ant-select-customize-input)
.ant-select-selector {
box-shadow: none;
}
.ant-select-arrow {
right: 0px;
color: rgba(56, 125, 247, 1);
font-size: 14px;
line-height: 36px;
// top: 17px;
top: 15px;
}
.ant-select-selection-item {
font-size: 14px;
font-weight: 400;
color: rgba(56, 125, 247, 1);
line-height: 33px;
}
.ant-select-single.ant-select-open .ant-select-selection-item {
color: rgba(56, 125, 247, 1);
}
}
}
.groupmain {
display: flex;
flex-wrap: wrap;
margin-left: 32px;
.groupbox {
width: 264px;
height: 181px;
display: flex;
justify-content: center;
border: 1px solid #e9e9e9;
box-shadow: 1px 1px 18px 1px rgba(0, 0, 0, 0.05);
margin-top: 16px;
margin-right: 20px;
.grouptitle {
display: flex;
justify-content: space-between;
margin-top: 5px;
border-bottom: 1px solid rgba(232, 232, 232, 1);
.goodgruop {
color: rgba(0, 0, 0, 0.85);
font-size: 16px;
line-height: 36px;
font-weight: 600;
}
.more {
position: relative;
//margin-right: 30px;
height: 30px;
display: flex;
align-items: center;
.moreItems {
width: 76px;
height: 80px;
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;
}
}
.leader {
color: rgba(0, 0, 0, 1);
font-size: 14px;
margin-top: 16px;
//margin-left: 24px;
}
.grocenter {
display: flex;
margin-top: 14px;
.leader1 {
color: rgba(0, 0, 0, 1);
font-size: 14px;
width: 51px;
}
.ant-progress-outer {
width: 170px;
}
}
.grofooter {
display: flex;
justify-content: space-between;
cursor: pointer;
margin-top: 30px;
.ftext {
color: rgba(56, 139, 225, 1);
font-size: 14px;
}
.peoples {
display: flex;
position: relative;
.people1 {
position: absolute;
right: 22px;
}
.people2 {
position: absolute;
right: 31px;
}
.people3 {
position: absolute;
right: 40px;
}
.people4 {
position: absolute;
right: 49px;
}
}
}
}
}
.projectscore {
.pjc_body {
margin-left: 34px;
margin-right: 34px;
.pjcb_header {
display: flex;
justify-content: space-between;
align-items: center;
margin: 24px auto;
.edit_btn {
width: 100px;
// padding: 0px 26px 0px 26px;
height: 38px;
background: rgb(64, 158, 255);
border-radius: 8px;
border: 1px solid rgba(64, 158, 255, 1);
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
cursor: pointer;
.edit {
width: 15px;
height: 15px;
background-image: url(@/assets/images/coursewareManage/export1.png);
background-size: 100% 100%;
}
.btnText {
font-size: 14px;
font-weight: 400;
color: rgb(255, 255, 255);
line-height: 36px;
margin-left: 5px;
}
}
}
.pjcb_content {
border: 1px solid #4ea6ff;
padding: 32px;
.pjcb_content :last-child {
margin-bottom: 0px;
}
.content {
margin-bottom: 24px;
}
}
}
}
}
.content6 {
margin-top: 20px;
width: 100%;
height: 100%;
// background-color: #bfa;
.title {
font-size: 18px;
font-weight: 500;
color: #333333;
margin-left: 34px;
}
.line {
width: 100%;
height: 1px;
margin-top: 10px;
background: #e8e8e8;
}
.search {
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
margin: 30px 34px 0 34px;
.left {
display: flex;
align-items: center;
flex-wrap: wrap;
margin-right: 10px;
.text {
font-size: 14px;
font-weight: 400;
color: rgba(0, 0, 0, 0.85);
white-space: nowrap;
}
.name {
display: flex;
align-items: center;
margin-bottom: 10px;
margin-right: 56px;
}
.time {
display: flex;
align-items: center;
// margin-left: 56px;
margin-bottom: 10px;
}
}
.right {
display: flex;
.btn {
display: flex;
width: 100px;
height: 40px;
border-radius: 8px;
justify-content: center;
align-items: center;
margin-bottom: 10px;
.img1 {
width: 15px;
height: 17px;
background-image: url(../../assets/images/coursewareManage/search0.png);
background-size: 100%;
margin-right: 5px;
}
.img2 {
width: 16px;
height: 18px;
background-image: url(../../assets/images/coursewareManage/reset1.png);
background-size: 100%;
margin-right: 5px;
}
}
.btn1 {
background: #4ea6ff;
color: #fff;
margin-right: 16px;
}
.btn2 {
border: 1px solid #4ea6ff;
background: #ffffff;
color: #4ea6ff;
}
}
}
.main {
margin-top: 10px;
display: flex;
flex-wrap: wrap;
margin-left: 34px;
margin-bottom: 20px;
.rank {
width: 422px;
height: 506px;
margin-right: 80px;
background: #ffffff;
border-radius: 2px;
border: 1px solid rgba(125, 125, 125, 0.39);
margin-bottom: 20px;
.rankhead {
height: 75px;
width: 100%;
border-bottom: 1px solid #e9e9e9;
// background-color: #bfa;
display: flex;
justify-content: center;
align-items: center;
.ant-select-selector {
color: #4ea6ff !important;
}
.inhead {
width: 374px;
// background-color: lightblue;
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 10px;
position: relative;
.icon {
position: absolute;
width: 14px;
height: 14px;
background-image: url(../../assets/images/leveladd/info.png);
background-size: 100%;
left: 120px;
}
.left {
font-size: 16px;
font-weight: 500;
color: rgba(0, 0, 0, 0.85);
}
.right {
.ant-select {
.ant-select-selector {
border-radius: 4px !important;
border: 1px solid #4ea6ff;
}
}
}
}
}
.tab {
// margin-top: 20px;
// margin-left: 24px;
border-radius: 4px 4px 0px 0px;
border: 1px solid #e9e9e9;
margin: 20px 24px 0 24px;
th.h {
background-color: #eff4fc !important;
}
.ant-table-tbody
> tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)
> td {
background: #f6f9fd;
}
}
}
}
}
//设置的基本信息
.content7 {
margin-top: 20px;
.set_tit {
margin-left: 34px;
font-size: 18px;
font-weight: 500;
color: #232425;
}
.line {
width: 100%;
height: 1px;
background-color: #e8e8e8;
margin-top: 10px;
}
.set_body {
margin-left: 34px;
margin-right: 34px;
position: relative;
.edit {
position: absolute;
width: 100px;
height: 40px;
background: #4ea6ff;
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
right: 0;
cursor: pointer;
.img {
width: 18px;
height: 18px;
background-image: url(../../assets/images/basicinfo/edit.png);
background-size: 100%;
margin-right: 7px;
}
.ed {
font-size: 14px;
font-weight: 400;
color: #ffffff;
}
}
.set_content {
margin: 32px auto;
display: flex;
// justify-content: end;
.setc_name {
width: 150px;
display: flex;
justify-content: end;
}
.setc_main {
flex: 1;
margin-left: 12px;
}
}
}
}
//设置的共享文档
.sametab {
// margin-left: 30px;
// margin-right: 30px;
margin-top: 30px;
width: 100%;
// background-color: green;
.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: 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;
}
}
}
}
}
}
}
.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;
}
}
}
}
}
}
.DelModal {
.ant-modal {
.ant-modal-content {
width: 424px !important;
.ant-modal-body {
.delete {
z-index: 9999;
width: 424px;
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;
.del-icon {
width: 16px;
height: 16px;
margin-right: 10px;
background-image: url(@/assets/images/coursewareManage/notice.png);
background-size: 100% 100%;
}
.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;
}
.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;
margin-right: 14px;
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;
}
.btn2 {
background-color: #4ea6ff;
color: #ffffff;
}
}
}
}
}
}
}
}
</style>