Files
fe-manage/src/views/courselibrary/CoursewareManage.vue
2025-03-19 19:04:51 +08:00

8060 lines
224 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!-- 课件管理页面 -->
<template>
<div class="courseManage">
<div class="headerf">
<!-- 搜索框及按钮 -->
<div class="filter">
<div class="filterItems">
<div class="pathnameInp">
<a-input
v-model:value="createName"
style="width: 200px; height: 40px; border-radius: 8px"
placeholder="请输入创建人"
@pressEnter="handleSearch1"
/>
</div>
<div class="pathnameInp">
<a-input
v-model:value="name"
style="width: 200px; height: 40px; border-radius: 8px"
placeholder="请输入名称"
@pressEnter="handleSearch1"
/>
</div>
<div class="pathnameInp">
<a-input
v-model:value="projectName"
style="width: 200px; height: 40px; border-radius: 8px"
placeholder="请输入所属项目"
@pressEnter="handleSearch1"
/>
</div>
<div class="select">
<a-select
v-model:value="auditStatus"
dropdownClassName="dropdown-style"
style="width: 200px"
placeholder="请选择状态"
:options="options1"
allowClear
>
</a-select>
</div>
<div class="select">
<a-tree-select
:getPopupContainer="
(triggerNode) => triggerNode.parentNode || document.body
"
v-model:value="sysTypeId"
show-search
style="width: 200px"
:dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
placeholder="请选择内容分类"
allow-clear
tree-default-expand-all
:fieldNames="{
children: 'children',
label: 'name',
value: 'code',
}"
:tree-data="sysTypeOptions"
>
</a-tree-select>
</div>
<div class="select">
<div class="select addTimeBox">
<div class="addTime">创建时间</div>
<a-range-picker
v-model:value="projectTime"
style="width: 420px"
format="YYYY-MM-DD"
separator="至"
:placeholder="[' 开始时间', ' 结束时间']"
/>
</div>
</div>
<div style="display: flex; margin-bottom: 20px" class="courseBtn">
<div class="btn btn1" @click="handleSearch1">
<div class="search"></div>
<div class="btnText">搜索</div>
</div>
<div class="btnn btn2" @click="handleRest1" style="width: 110px">
<div class="search"></div>
<div class="btnText">重置</div>
</div>
</div>
<div class="btns">
<!-- 2022-11-30注释 后面放开 -->
<div
class="btnn btn2"
@click="openMessage"
style="margin-right: 14px"
>
<div class="daochu"></div>
<div class="btnText">导出</div>
</div>
<div class="btn btn3" @click="of_hShow">
<div class="search"></div>
<div class="btnText">新建课程</div>
</div>
</div>
</div>
</div>
<!-- 搜索框及按钮 -->
</div>
<!-- 选择线上还是面授课弹窗 -->
<a-modal
v-model:visible="of_hs"
:closable="closableQR"
wrapClassName="sofModal"
:footer="null"
style="margin-top: 400px"
@cancel="of_exit"
>
<div
class="selectonlineface"
:style="{ display: of_hs ? 'block' : 'none' }"
>
<div class="of_header"></div>
<div class="of_main">
<div class="ofm_header">
<div class="add_icon"></div>
<span>请选择课程类型</span>
<div class="close_exit" @click="of_exit"></div>
</div>
<div class="ofm_body">
<div class="ofmb_items">
<div class="signbox">
<div class="sign">
<img
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div>
<span style="margin-right: 3px">课程名称</span>
</div>
<div class="in b_input">
<NameInput
placeholder="请输入课程名称"
v-model:value="xzinputV1"
v-model:validated="validated"
:id="offcourseId"
:maxlength="50"
show-count
:type="2"
></NameInput>
<!-- <a-input-->
<!-- v-model:value="xzinputV1"-->
<!-- maxlength="20"-->
<!-- style="width: 440px; height: 40px; border-radius: 8px"-->
<!-- placeholder="请输入课程名称"-->
<!-- />-->
<!-- <div class="inp_num">-->
<!-- <span style="color: #c7cbd2">{{ xzinputV1.length }}/20</span>-->
<!-- </div>-->
</div>
</div>
<div class="b_sub">
<div class="bs_header">
<div class="b_left">
<span style="color: #999ba3">课程命名规则</span>
</div>
<div class="b_right" @click="hideShow" style="cursor: pointer">
<div
class="b_zk"
:style="{ display: hideshow ? 'block' : 'none' }"
>
<div class="zksqbox" style="display: flex">
<span style="color: #4ea6ff; margin-right: 5px">
收起
</span>
<div class="b_icon">
<img
src="@/assets/images/coursewareManage/up.png"
alt=""
/>
</div>
</div>
</div>
<div
class="b_sq"
:style="{ display: hideshow ? 'none' : 'block' }"
>
<div class="zksqbox" style="display: flex">
<span style="color: #4ea6ff; margin-right: 5px">
展开
</span>
<div class="b_icon">
<img
src="@/assets/images/coursewareManage/down.png"
alt=""
/>
</div>
</div>
</div>
</div>
</div>
<div
class="bl_detail"
:style="{ display: hideshow ? 'block' : 'none' }"
>
<span style="color: #999ba3">
1课程名称统一不加书名号<br />
2项目名称属地等信息如需体现在课程名称中请放在课程名称信息
之后时间管理GROW180项目时间管理B*确保首先
看到的是课程内容主题<br />
3同一课程如先后有多个版本原则上仅开放最新版本旧版本应停用
版本如必须以年份标明请以沟通技巧2022的方式呈现
</span>
</div>
</div>
<div class="ofmb_items">
<div class="signbox">
<div class="sign">
<img
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div>
<span>授课形式</span>
</div>
<a-radio-group v-model:value="valueE1">
<div class="bc_box">
<!-- 2022-12-21 隐藏 后面放开 lixiaoge -->
<!-- <div class="bc_boxl">
<div class="ol_checkbox" @click="expectOnline">
<a-radio
v-model:checked="checked"
:value="1"
disabled="true"
@click="bs_hShow"
>
线上
</a-radio>
</div>
</div> -->
<div class="bc_boxr">
<div class="ol_checkbox">
<a-radio
v-model:checked="checked"
:value="2"
@click="clear_valueE1"
>
面授
</a-radio>
</div>
</div>
</div>
</a-radio-group>
</div>
<div class="b_sup" :style="{ display: bs_hs ? 'block' : 'none' }">
<div class="ofmb_items">
<div class="signbox">
<div class="sign">
<img
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div>
<span>是否设置目录</span>
</div>
<a-radio-group v-model:value="valueE2">
<div class="bc_box">
<div class="ol_checkbox">
<a-radio
v-model:checked="checked"
:value="3"
@click="clear_valueE2"
>
</a-radio>
</div>
<div class="ol_checkbox">
<a-radio
v-model:checked="checked"
:value="4"
@click="clear_valueE2"
>
</a-radio>
</div>
</div>
</a-radio-group>
</div>
</div>
<div class="b_footer">
<div class="btn btn6" @click="of_exit1">
<div class="btnText">取消</div>
</div>
<a-button
class="btn btn6"
@click="createft"
:loading="validated === 1"
>
确定
</a-button>
</div>
</div>
</div>
</div>
</a-modal>
<!-- 选择线上还是面授课弹窗 -->
<!-- 确定新建面授课弹窗 -->
<CourseModal
ref="CourseModalRef"
v-model:xzinputV1="xzinputV1"
@visibleClose="closeOnlineCoursevisible"
/>
<!-- 查看面授课弹框 end -->
<!-- 确定新建面授课弹窗 -->
<!-- 表格 -->
<div style="padding: 10px 35px">
<a-table
:header-cell-style="{ 'text-align': 'center' }"
style="border: 1px solid #f2f6fe"
:columns="columns1"
:data-source="tableData1"
:loading="tableLoading"
:pagination="false"
:scroll="{ x: 'max-content' }"
>
<template #action="{ text, record, index }">
<a-space :key="record.id">
<a-button
v-if="(record.auditStatus === 2 || record.auditStatus === 3) && !record.publishStatus && checkPer(record.permissions,createId)"
@click="() => handlePush(text, index)"
type="link"
>发布
</a-button>
<a-button
v-if="record.auditStatus === 0 && checkPer(record.permissions,createId)"
@click="() => handleSubmit(text, index)"
type="link"
>提交审核
</a-button>
<a-button
v-if="(record.auditStatus === -1 || record.auditStatus === 2 || record.auditStatus === 3) && !record.publishStatus && checkPer(record.permissions,createId)"
@click="() => handleEdit(record, String(record.courseform))"
type="link"
>编辑
</a-button>
<!-- <a-button
@click="() => handleEdit(record, String(record.courseform))"
type="link"
>编辑
</a-button> -->
<a-button
v-if="
(record.publishStatus === 1)
"
@click="() => handleStart(record, String(record.courseform))"
type="link"
>开课
</a-button>
<a-button
@click="() => handleLook(record, String(record.courseform))"
type="link"
>查看
</a-button>
<a-button
v-if="
(record.auditStatus === 2 || record.publishStatus)
"
@click="() => handleGuan22(record, String(record.courseform))"
type="link"
>管理
</a-button>
<DropDown
v-if="checkOwner(record.permissions)"
value="授权"
>
<OwnerTableModelStudent :types="[10, 11, 12]" :id="record.id" :type="12"
>权限名单</OwnerTableModelStudent
>
<CommonStudent :type="10" :id="record.id" title="查看权"
>查看权</CommonStudent
>
<CommonStudent :type="11" :id="record.id" title="管理权"
>管理权</CommonStudent
>
</DropDown>
<DropDown v-if="checkPer(record.permissions,createId)" value="更多">
<a-button @click="() => handleCopy(text)" type="link" block>复制</a-button>
<a-button
v-if="
(record.auditStatus === 1 || record.auditStatus === 2 || record.publishStatus) &&
record.status &&
checkPer(record.permissions,createId)
"
@click="() => handleRejectExit(text, index, record)"
type="link"
block
>撤回</a-button
>
<a-button
v-if="
record.publishStatus&&
record.status &&
checkPer(record.permissions,createId)
"
@click="() => handleStop(record)"
type="link"
block
>停用</a-button
>
<a-button
v-if="
record.publishStatus&&
!record.status &&
checkPer(record.permissions,createId)
"
@click="() => handleOpen(record)"
type="link"
block
>启用</a-button
>
<a-button
v-if="record.publishStatus!==1 || !record.status"
@click="() => handleDelete(text, index, record)"
type="link"
block
danger
>删除
</a-button>
</DropDown>
</a-space>
</template>
</a-table>
</div>
<div class="pa">
<a-pagination
v-if="tableDataTotal1 > 10"
:showSizeChanger="false"
:showQuickJumper="true"
:hideOnSinglePage="true"
:pageSize="pageSize1"
:current="currentPage1"
:total="tableDataTotal1"
class="pagination"
@change="handelChangePage1"
/>
</div>
<!-- 表格 -->
<!-- 操作 在线面授课程管理 页面 -->
<a-modal
v-model:visible="om_1"
title="Title"
@ok="closeModal"
:footer="null"
:closable="false"
wrapClassName="modalStyle onlmanageModal"
width="80%"
@cancel="om_exit"
>
<div class="modalHeader">
<div class="headerLeft">
<img
style="width: 17px; height: 18px; margin-right: 8px"
src="@/assets/images/coursewareManage/pc.png"
/>
<div :style="{ display: ft_1 ? 'none' : 'block' }">
<span class="headerLeftText">在线课程管理</span>
</div>
<div :style="{ display: ft_1 ? 'block' : 'none' }">
<span class="headerLeftText">面授课程管理</span>
</div>
</div>
<div style="margin-right: 57px; cursor: pointer">
<img
@click="om_exit"
style="width: 22px; height: 22px"
src="../../assets/images/basicinfo/close22.png"
/>
</div>
</div>
<div class="modalMain">
<div class="onlinemanage" :style="{ display: om_1 ? 'block' : 'none' }">
<div class="om_main">
<div class="om_body">
<div class="b_sub">
<div class="b_title">课程:{{ newCourseName }}</div>
<div class="bs_type" style="margin-left: 20px">类型:</div>
<div class="bs_right">{{ faceType }}</div>
<div class="bs_left">内容分类:</div>
<div class="bs_right">{{ faceClassification }}</div>
<div class="bs_left">状态:</div>
<div class="bs_right">
{{ faceStatus == 1 ? "已启用" : "已停用" }}
</div>
</div>
<a-tabs
class="b_menu"
v-model:activeKey="faceManageTab"
size="large"
:tabBarStyle="{ marginLeft: '10px' }"
@change="faceManageChange"
>
<!-- <a-tab-pane key="1" tab="报名管理">
<div class="b_menunav">
<div class="bm_select">
<a-select
class="select"
ref="select"
placeholder="请选择状态"
v-model:value="gl_selectV1"
style="width: 200px"
:options="options1"
allowClear
showSearch
@focus="focus"
@change="handleChange"
>
</a-select>
</div>
<div class="bm_input">
<a-input
v-model:value="gl_inputv1"
style="width: 200px; height: 40px; border-radius: 8px"
placeholder="姓名"
/>
</div>
<div class="bm_btn">
<div class="btn btn1" @click="handleSearchTable2">
<div class="search"></div>
<div class="btnText">搜索</div>
</div>
</div>
</div>
<div class="bm_table" style="margin-bottom: 20px">
<a-table
:columns="columns2"
:data-source="tableData2"
:loading="tableDataTotal22 === -1 ? true : false"
:pagination="false"
/>
<div class="tableBox" style="margin-top: 50px">
<div class="pa">
<a-pagination
:showSizeChanger="false"
showQuickJumper="true"
hideOnSinglePage="true"
:pageSize="pageSize22"
:current="currentPage22"
:total="tableDataTotal22"
class="pagination"
@change="handelChangePage22"
/>
</div>
</div>
</div>
</a-tab-pane> -->
<a-tab-pane key="1" tab="学习记录">
<div class="b_menunav">
<div class="bm_select">
<a-select
class="select"
ref="select"
placeholder="请选择状态"
v-model:value="gl_selectV2"
style="width: 200px"
:options="options11"
allowClear
@focus="focus"
@change="handleChange"
>
<!-- <a-select-option value="status">状态</a-select-option>
<a-select-option value="passed">已通过</a-select-option>
<a-select-option value="weishenhe">
未审核
</a-select-option>
<a-select-option value="reject">
管理员拒绝
</a-select-option> -->
</a-select>
</div>
<div class="bm_input">
<a-input
v-model:value="gl_inputV2"
style="width: 200px; height: 40px; border-radius: 8px"
placeholder="姓名"
/>
</div>
<div class="bm_btn">
<div class="btn btn1" @click="handleSearchTable3">
<div class="search"></div>
<div class="btnText">搜索</div>
</div>
<div class="btn btn2" @click="reseatSearchTable3">
<div class="search"></div>
<div class="btnText">重置</div>
</div>
</div>
</div>
<div class="bm_table" style="margin-bottom: 20px">
<a-table
:columns="columns2"
:data-source="tableData3"
:loading="manageStuLoading"
:pagination="false"
>
<template #bodyCell="{ column }">
<template v-if="column.key === 'opacation'">
<a @click="ckxq_hs">查看详情</a>
</template>
</template>
</a-table>
<div class="tableBox" style="margin-top: 50px">
<div class="pa">
<a-pagination
:showSizeChanger="false"
showQuickJumper="true"
hideOnSinglePage="true"
:pageSize="pageSize222"
:current="currentPage222"
:total="tableDataTotal222"
class="pagination"
@change="handelChangePage222"
/>
</div>
</div>
</div>
</a-tab-pane>
</a-tabs>
</div>
</div>
</div>
</div>
</a-modal>
<!-- 操作 在线面授课程管理 页面 -->
<!-- 面授课程管理查看详情 页面 -->
<a-modal
v-model:visible="om_ckxq"
title="Title"
@ok="closeModal"
:footer="null"
:closable="false"
wrapClassName="modalStyle coursewareDetail"
width="80%"
>
<div class="modalHeader">
<div class="headerLeft">
<img
style="width: 17px; height: 18px; margin-right: 8px"
src="@/assets/images/coursewareManage/detail.png"
/>
<span class="headerLeftText">查看详情</span>
</div>
<div style="margin-right: 57px; cursor: pointer">
<img
@click="ftsr_exit"
style="width: 22px; height: 22px"
src="../../assets/images/basicinfo/close22.png"
/>
</div>
</div>
<div class="modalMain">
<div
class="ftsturecord"
:style="{ display: om_ckxq ? 'block' : 'none' }"
>
<div class="ftsr_main">
<div class="ftsr_table">
<a-table
:columns="columns4"
:data-source="tableData4"
:loading="tableDataTotal === -1 ? true : false"
:pagination="false"
>
</a-table>
</div>
<div class="ftsr_btn" @click="ftsr_exit">
<div class="btnText">取消</div>
</div>
</div>
</div>
</div>
</a-modal>
<!-- 面授 课程管理查看详情 页面 -->
<!--开课页面 -->
<a-drawer
v-model:visible="stm_hs"
@ok="stm_exit"
:footer="null"
:closable="false"
wrapClassName="modalStyle schtimeModal"
width="80%"
@cancel="stm_exit"
>
<div class="modalHeader">
<div class="headerLeft">
<img
style="width: 17px; height: 18px; margin-right: 8px"
src="@/assets/images/coursewareManage/scht.png"
/>
<span class="headerLeftText">开课</span>
</div>
<div style="margin-right: 57px; cursor: pointer">
<img
@click="stm_exit"
style="width: 22px; height: 22px"
src="../../assets/images/basicinfo/close22.png"
/>
</div>
</div>
<div class="modalMain">
<div class="schooltime" :style="{ display: stm_hs ? 'block' : 'none' }">
<div class="st_main">
<div class="stm_inputbtn">
<a-input
v-model:value="kk_inputV0"
style="
width: 270px;
height: 40px;
border-radius: 8px;
margin-right: 14px;
"
placeholder="请输入开课名称"
@pressEnter="handleSearchTable"
/>
<a-input
v-model:value="kk_inputV2"
style="
width: 270px;
height: 40px;
border-radius: 8px;
margin-right: 14px;
"
placeholder="请输入授课教师姓名/工号"
@pressEnter="handleSearchTable"
/>
<a-input
v-model:value="kk_inputV1"
style="
width: 270px;
height: 40px;
border-radius: 8px;
margin-right: 14px;
"
placeholder="请输入创建人姓名/工号"
@pressEnter="handleSearchTable"
/>
<div class="select">
<!-- <a-date-picker
v-model:value="selectTime"
type="date"
placeholder="创建时间"
style="width: 270px; margin-right: 14px"
/> -->
<a-range-picker
v-model:value="selectTime"
type="date"
style="width: 300px; margin-right: 14px"
:placeholder="[' 面授开始时间', ' 面授结束时间']"
format="YYYY/MM/DD"
/>
</div>
<div class="btn btn1" @click="handleSearchTable">
<div class="search"></div>
<div class="btnText">搜索</div>
</div>
<div
class="btnn btn2"
@click="handleRestTable"
style="width: 110px"
>
<div class="search"></div>
<div class="btnText">重置</div>
</div>
</div>
<div class="stm_inputbtn">
<div class="btns" v-if="checkPer(permissions,createId)">
<div class="btn btn3" @click="createkk">
<div class="search"></div>
<div class="btnText">
<span style="color: #ffffff">新建开课</span>
</div>
</div>
</div>
</div>
<!-- 无数据样式 -->
<div class="notable" v-if="tableData6.length === 0">
<div class="notablebox">
<div class="boxbody">
<div class="boximg"></div>
<div class="boxtitle">
<span style="color: #ffb64e; font-size: 20px">无课程</span>
</div>
<div class="boxtitle2">
<span style="color: #878b92">请点击新建开课,创建课程</span>
</div>
</div>
<div class="smallleft"></div>
<div class="smallright"></div>
</div>
</div>
<!-- 无数据样式 -->
<!-- 有数据表格 -->
<div class="tableBox" v-else style="margin-left: 58px;">
<a-table
:columns="columns6"
:data-source="tableData6"
:loading="tableCoursePlanLoading"
:scroll="{ x: 'max-content' }"
expandRowByClick="true"
@expand="expandTable"
:pagination="false"
>
<template #action="{ record, column }">
<div class="operation">
<div class="fb">
<div class="jc" @click="qrcodeVisible(record, 3)" v-if="checkPer(permissions,createId)&&record.evalFlag">
评估码
</div>
<!--新加 签到 -->
<div class="jc" @click="qrcodeVisible(record, 2)" v-if="checkPer(permissions,createId)">
签到码
</div>
<div
class="jc"
v-if="checkPer(permissions,createId)"
@click="
() => {
handelEditStu(record);
}
"
>
编辑
</div>
<div
class="jc"
@click="
() => {
handelGuan(record);
}
"
>
管理
</div>
</div>
<a-dropdown v-if="checkPer(permissions,createId)">
<template #overlay>
<a-menu style="margin-left: 20px">
<a-menu-item
@click="
() => {
handleCopyP(record);
}
"
>
复制
</a-menu-item>
<a-menu-item
@click="
() => {
handleDeleteKaike(record);
}
"
>
删除
</a-menu-item>
<!-- 新加 二维码 -->
<a-menu-item @click="qrcodeVisible(record, 1)">
二维码
</a-menu-item>
</a-menu>
</template>
<div class="fb" style="margin-left: -20px">
<div class="jc">
更多
<DownOutlined style="color: #000"/>
</div>
</div>
</a-dropdown>
</div>
</template>
<template #teacherName="{record}">
<div :title="moreLine(record.offteachers)">
{{record.offteachers.map(item=>item.teacherName).length > 3 ? record.offteachers.map(item=>item.teacherName).slice(0,3).join(',')+'...':record.offteachers.map(item=>item.teacherName).join(',') }}
</div>
</template>
</a-table>
<div class="tableBox" style="margin-top: 50px">
<div class="pa">
<a-pagination
:showSizeChanger="false"
showQuickJumper="true"
hideOnSinglePage="true"
:pageSize="pageSize2"
:current="currentPage2"
:total="tableDataTotal2"
class="pagination"
@change="handelChangePage2"
/>
</div>
</div>
</div>
<!-- 有数据表格 -->
</div>
</div>
</div>
</a-drawer>
<!--开课页面 -->
<!--新建开课页面 -->
<a-modal
v-model:visible="cstm_hs"
style="margin-top: 400px"
@cancel="handleCancelStu"
>
<div
class="createschooltime"
:style="{ display: cstm_hs ? 'block' : 'none' }"
>
<div class="cst_header"></div>
<div class="cst_main">
<div class="cstm_header">
<div class="add_icon"></div>
<span v-if="kk_eidt">编辑开课</span>
<span v-else>新建开课</span>
<div class="close_exit" @click="handleCancelStu"></div>
</div>
<div class="cstm_title">
<span>面授名称:{{ newCourseName }}</span>
</div>
<div class="cstm_items" style="align-items: flex-start;">
<div class="signbox" style="position: relative;top: 11px;">
<div class="sign">
<img
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div>
<span style="margin-right: 3px">开课名称</span>
</div>
<div class="b_input">
<NameInputNew
maxlength="30"
v-model:value="xjkkinputV1"
v-model:validated="validated"
show-count
:id="offcoursePlanId"
:onceName="onceName"
:type="5"
style="width: 440px; height: 40px; border-radius: 8px"
placeholder="请输入开课名称"
:disabled="editBeginClass"
:changeName="changeName"
></NameInputNew>
</div>
</div>
<div class="cstm_items">
<div class="signbox">
<div class="sign">
<img
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div>
<span style="margin-right: 3px">面授时间</span>
</div>
<div class="select fitems" style="width: 84%">
<!-- <a-range-picker
style="width: 440px; height: 40px; border-radius: 8px"
:show-time="{ format: 'HH:mm' }"
format="YYYY-MM-DD HH:mm"
v-model:value="xjkkinputV3"
@change="timeChange"
separator="至"
:placeholder="[' 开始时间', ' 结束时间']"
:disabled="editBeginClass"
/> -->
<a-date-picker
style="width: 45%; height: 40px; border-radius: 8px"
:show-time="{ format: 'HH:mm' }"
:format="['YYYY-MM-DD HH:mm','YYYY/MM/DD HH:mm']"
valueFormat="YYYY-MM-DD HH:mm"
v-model:value="xjkkinputV3[0]"
@change="timeChange"
:placeholder="' 开始时间'"
:disabled="editBeginClass"
@blur="onBlurStart"
@focus="onFocusStart"
@select="onDateSelect"
:open="openStart"
@ok="onOkStart"
/>
<span style="margin: 0 10px;">至</span>
<a-date-picker
style="width: 45%; height: 40px; border-radius: 8px"
:show-time="{ format: 'HH:mm' }"
:format="['YYYY-MM-DD HH:mm','YYYY/MM/DD HH:mm']"
valueFormat="YYYY-MM-DD HH:mm"
v-model:value="xjkkinputV3[1]"
@change="timeChangeEnd"
:placeholder="' 结束时间'"
:disabled="editBeginClass"
@focus="onFocusEnd"
@blur="onBlurEnd"
@select="onDateEnd"
:open="openEnd"
@ok="onOkEnd"
:disabled-date="disabledDate"
:disabled-time="disabledDateTime"
/>
</div>
</div>
<div class="cstm_items">
<div class="signbox">
<!-- <div class="sign">-->
<!-- <img-->
<!-- src="@/assets/images/coursewareManage/asterisk.png"-->
<!-- alt=""-->
<!-- />-->
<!-- </div>-->
<span style="margin-right: 3px">持续时间</span>
</div>
<div class="b_input">
<a-input-number
:min="0"
:max="999999"
:precision="0"
:placeholder="durationText"
style="
width: 88%;
height: 32px;
border-radius: 8px;
overflow: hidden;"
v-model:value="duration"
></a-input-number>
<div class="inp_num">
<span style="color: #c7cbd2">分钟</span>
</div>
</div>
</div>
<div class="cstm_items" style="align-items: flex-start;">
<div class="signbox" style="position: relative;top: 11px">
<div class="sign">
<img
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div>
<span style="margin-right: 3px">授课教师</span>
</div>
<div class="select teacher_input" style="display: flex; flex-wrap: wrap;width: 74.5%">
<!-- <ProjectManager
v-model:value="member.value"
v-model:name="member.name"
:disabled="editBeginClass"
></ProjectManager> -->
<div v-for="(item, index) in offteachers"
:key="index" style="display: flex;margin-bottom: 10px;width: 100%;">
<ProjectManager
v-model:value="item.teacherId"
v-model:name="item.teacherName"
:disabled="editBeginClass"
></ProjectManager>
<a-input-number :min="0" @change="inputWeightChange(index)" v-model:value="item.weight" placeholder="%"/>
<span style="margin-top: 10px;width: 34px;">权重</span>
<div style="display: flex;">
<!-- <a-button v-if="index===0" shape="circle" class="btn-circle btn-add" @click="inputAdd">+</a-button> -->
<a-button shape="circle" class="btn-circle" @click="inputRemove(index)" :disabled="offteachers.length == 1"><delete-outlined class="custom-icon"/></a-button>
</div>
</div>
<a-button shape="circle" class="btn-circle btn-add" @click="inputAdd">+</a-button>
</div>
</div>
<div class="cstm_items">
<div class="signbox">
<div class="sign">
<!-- <img
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/> -->
</div>
<span style="margin-right: 3px">地点</span>
</div>
<div class="b_input">
<a-input
v-model:value="xjkkinputV2"
maxlength="50"
style="width: 440px; height: 40px; border-radius: 8px"
placeholder="请输入详细地点"
/>
<div class="inp_num" style="right: 164px">
<span style="color: #c7cbd2">{{ xjkkinputV2.length }}/50</span>
</div>
</div>
</div>
<div class="cstm_items">
<div class="signbox">
<span style="margin-right: 3px">签到时间</span>
</div>
<div style="display: flex; align-items: center">
<div
style="display: flex; align-items: center; margin-right: 20px"
>
<span style="color: #6d7584;margin-right:8px;">开始前</span>
<a-input-number
:min="0"
:max="999999"
:precision="0"
style="
width: 100px;
height: 32px;
border-radius: 8px;
overflow: hidden;
"
v-model:value="beforeValue"
></a-input-number>
<span style="color: #999999; margin-left: 8px">分钟</span>
</div>
<div style="display: flex; align-items: center">
<span style="color: #6d7584;margin-right:8px;">开始后</span>
<a-input-number
:min="0"
:max="999999"
:precision="0"
style="
width: 100px;
height: 32px;
border-radius: 8px;
overflow: hidden;
"
v-model:value="afterStartValue"
></a-input-number>
<span style="color: #999999; margin-left: 8px">分钟</span>
</div>
</div>
</div>
<div class="cstm_items">
<div class="signbox">
<span style="margin-right: 3px">签到设置</span>
</div>
<div class="b_input">
<a-checkbox v-model:checked="xjkkradioV1" :disabled = "itemType!=3">
<span style="color: #6d7584">是否允许未报名的学员签到、评估</span>
</a-checkbox>
</div>
</div>
<div class="cstm_items">
<div class="signbox">
<span style="margin-right: 3px">报名设置</span>
</div>
<div class="b_input">
<a-checkbox v-model:checked="checked1" :disabled = "itemType!=3">
<span style="color: #6d7584">是否允许未报名的学员扫码签到、扫码评估</span>
</a-checkbox>
</div>
</div>
<div class="cstm_items">
<div class="signbox">
<span style="margin-right: 3px">结业设置</span>
</div>
<div class="b_input">
<a-checkbox v-model:checked="xjkkradioVEnd" :disabled = "itemType!=3">
<span style="color: #6d7584;margin-right:16px;">是否允许自动结业</span>
</a-checkbox>
<span style="color: #6d7584" v-if="xjkkradioVEnd">面授时间结束后</span>
<a-input-number v-if="xjkkradioVEnd" :precision="0" :min="0" v-model:value="xjkkradioVEndTime" style="
width: 60px;
height: 32px;
border-radius: 8px;
margin: 0 10px;"
/>
<span v-if="xjkkradioVEnd" style="color: #6d7584">天</span>
</div>
</div>
<div class="cstm_items">
<div class="signbox">
<span style="margin-right: 3px">评估设置</span>
</div>
<div class="b_input">
<a-checkbox v-model:checked="checked4" :disabled="editBeginClass">
<span style="color: #6d7584">是否需要评估</span>
</a-checkbox>
</div>
</div>
<div v-if="checked4" class="cstm_items main_item">
<div class="signbox"></div>
<div class="btnbox">
<AssessmentList
v-model:assessmentName="assessmentName"
v-model:assessmentId="assessmentId"
:disabled="editBeginClass"
>
<button
class="xkbtn"
@click="showAssessment"
style="margin-bottom: 0; margin-top: 0"
>
选择评估
</button>
</AssessmentList>
<div v-if="assessmentId > 0">
<a-tag :closable="!editBeginClass" @close="removePG" color="processing">
<span style="font-size: 14px; line-height: 33px">
{{ assessmentName }}
</span>
</a-tag>
</div>
</div>
</div>
<div class="cstm_items main_item">
<div class="signbox"></div>
<div class="btnbox">
<add-homework v-model:info="workInfo">
<button class="xkbtn" style="margin-bottom: 0; margin-top: 0">
配置作业
</button>
</add-homework>
<div v-if="workInfo.workName">
<a-tag closable @close="logW" color="processing">
<span style="font-size: 14px; line-height: 33px">
{{ workInfo.workName }}
</span>
</a-tag>
</div>
</div>
</div>
<div class="cstm_items main_item" style="margin-bottom: 0px">
<div class="signbox"></div>
<div class="btnbox">
<add-test v-model:info="examInfo">
<button class="xkbtn" style="margin-bottom: 0; margin-top: 0">
配置考试
</button>
</add-test>
<div v-if="examInfo.examinationName">
<a-tag closable @close="logT" color="processing">
<span style="font-size: 14px; line-height: 33px">
{{ examInfo.examinationName }}
</span>
</a-tag>
</div>
</div>
</div>
<!--
<div class="cstm_items">
<div class="signbox">
<span style="margin-right: 3px">完成规则</span>
</div>
<div class="b_input">
<a-checkbox
v-model:checked="regisCom"
@click="regisCom = !regisCom"
>
<span style="color: #6d7584">报名即完成</span>
</a-checkbox> -->
<!--
<a-checkbox v-model:checked="signCom" @click="signCom = !signCom">
<span style="color: #6d7584">签到即完成</span>
</a-checkbox>
<a-checkbox
v-model:checked="comLeave"
@click="comLeave = !comLeave"
>
<span style="color: #6d7584">请假算完成</span>
</a-checkbox>
</div>
</div> -->
<div class="cstm_items items_fj">
<div class="signbox">
<span style="margin-right: 3px"></span>
</div>
<div class="b_input">
<FJUpload v-model:value="attach" @changevalue="changevalue" />
</div>
</div>
<div class="items_btn">
<div class="cstm_btn btn6" @click="handleCancelStu">
<div class="btnText">取消</div>
</div>
<a-button
class="cstm_btn btn6"
@click="handleSureStu"
:loading="validated === 1"
>
确定
</a-button>
</div>
</div>
</div>
</a-modal>
<!--新建开课页面 -->
<!--开课学员管理页面 -->
<a-modal
v-model:visible="sm_hs"
title="Title"
@ok="closeModal"
:footer="null"
:closable="false"
wrapClassName="modalStyle stusmanageModal"
width="90%"
@cancel="sm_exit"
>
<div class="modalHeader">
<div class="headerLeft">
<img
style="width: 17px; height: 18px; margin-right: 8px"
src="@/assets/images/coursewareManage/stum.png"
/>
<span class="headerLeftText">学员管理</span>
</div>
<div style="margin-right: 57px; cursor: pointer">
<img
@click="sm_exit"
style="width: 22px; height: 22px"
src="../../assets/images/basicinfo/close22.png"
/>
</div>
</div>
<div class="modalMain">
<div
class="studentsmanage"
:style="{ display: sm_hs ? 'block' : 'none' }"
>
<div class="stm_main">
<div class="stmmitems">
<div class="stmm_i1">
<span style="margin-right: 52px">
{{ currentPlanItem.name }}课程-第1期
</span>
<span style="color: #ffb751"
>已开课
{{
(currentPlanItem?.score !== 0&& currentPlanItem?.score!==-1)
? currentPlanItem.score?.toFixed(2)
: "-"
}}</span>
</div>
<div class="stmm_i2">
<span style="color: #999ba3">时间:</span>
<span>{{currentPlanItem.beginTime}} ~ {{ currentPlanItem.endTime }}</span>
</div>
<div class="stmm_i3">
<span style="color: #999ba3">地点:</span>
<span>{{ currentPlanItem.address }}</span>
</div>
<div class="stmm_i4">
<span style="color: #999ba3">授课教师:</span>
<span>{{ currentPlanItem.offteachers.map(item=>item.teacherName).join(',') }}</span>
</div>
<div class="stmm_i5">
<TableStudent
:type="3"
:id="offcoursePlanId"
:params="{status:1}"
:columns="stuColumns"
:visable="sm_hs"
:permissions="permissions"
:isgetStudent="isgetStudent"
ref="tableStudentChange"
>
<!-- <template #extension="{ data: { record } }">
<a-button
v-if="record.source === 4 && record.status === 1 && checkPer(permissions,createId)"
@click="
() => {
record.status = 0;
auditStudent(record);
}
"
type="link"
>审核通过
</a-button>
<a-button
v-if="record.source === 4 && record.status === 1 && checkPer(permissions,createId)"
@click="
() => {
record.status = 2;
auditStudent(record);
}
"
type="link"
>拒绝
</a-button>
<a-button
v-if="
record.source === 4 &&
(record.status === 0 || record.status === 2)
&& checkPer(permissions,createId)
"
@click="
() => {
record.status = 1;
auditStudent(record);
}
"
type="link"
>撤回
</a-button>
</template> -->
</TableStudent>
</div>
</div>
</div>
</div>
</div>
</a-modal>
<!--开课学员管理页面 -->
<!--二维码页面 -->
<a-modal
v-model:visible="QR_hs"
:footer="null"
:closable="closableQR"
wrapClassName="QRModal"
style="margin-top: 400px"
:zIndex="9999"
@cancel="qr_exit"
>
<div class="QR" :style="{ display: QR_hs ? 'block' : 'none' }">
<div class="qr_header"></div>
<div class="qr_main">
<div class="qrm_header">
<div class="qr_icon"></div>
<div :style="{ display: qrQR_hs ? 'block' : 'none' }">
<span>二维码</span>
</div>
<div :style="{ display: olQR_hs ? 'block' : 'none' }">
<span>在线课</span>
</div>
<div :style="{ display: ftQR_hs ? 'block' : 'none' }">
<span>面授课</span>
</div>
<div :style="{ display: ftsQR_hs ? 'block' : 'none' }">
<span>面授课签到</span>
</div>
<div :style="{ display: vipftQR_hs ? 'block' : 'none' }">
<span>管理者面授课</span>
</div>
<div class="close_exit" @click="qr_exit"></div>
</div>
<div class="qrm_body">
<div class="QR_img"></div>
</div>
<div class="qrm_footer">
<span style="margin-left: 52px">下载二维码</span>
<div class="qrmbtn">
<div class="btntext">200*200</div>
</div>
<!-- <div class="qrmbtn">
<div class="btntext">400*400</div>
</div>
<div class="qrmbtn">
<div class="btntext">800*800</div>
</div> -->
</div>
</div>
</div>
</a-modal>
<!--二维码页面 -->
<!--录入成绩页面 -->
<a-modal
v-model:visible="rg_hs"
:footer="null"
:closable="closableQR"
wrapClassName="recgradeModal"
style="margin-top: 400px"
:zIndex="9999"
@cancel="rg_exit"
>
<div class="recordgrade" :style="{ display: rg_hs ? 'block' : 'none' }">
<div class="rg_header"></div>
<div class="rg_main">
<div class="rgm_header">
<div class="rg_icon"></div>
<span>录入成绩</span>
<div class="close_exit" @click="rg_exit"></div>
</div>
<div class="rgm_body">
<div class="rgmb_items">
<div class="items_left">
<div class="sign">
<img
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div>
<span>得分</span>
</div>
<div class="rgmb_input">
<a-input
v-model:value="lrcj_inputV1"
maxlength="20"
style="width: 440px; height: 40px; border-radius: 8px"
placeholder=""
/>
</div>
</div>
</div>
<div class="qrm_btnbox">
<div class="qrm_btn btn1" @click="rg_exit">
<div class="btnText">取消</div>
</div>
<div
class="qrm_btn btn2"
style="background-color: #4ea6ff; color: #ffffff"
@click="handleJoin"
>
<div class="btnText">确定</div>
</div>
</div>
</div>
</div>
</a-modal>
<!--录入成绩页面 -->
<!--结业页面 -->
<a-modal
v-model:visible="graduate_hs"
:footer="null"
:closable="closableQR"
wrapClassName="graModal"
style="margin-top: 400px"
:zIndex="9999"
@cancel="graduate_exit"
>
<div
class="graduate"
:style="{ display: graduate_hs ? 'block' : 'none' }"
>
<div class="gra_header"></div>
<div class="gra_main">
<div class="gram_header">
<div class="gra_icon"></div>
<span>结业</span>
<div class="close_exit" @click="graduate_exit"></div>
</div>
<div class="gram_body">
<div class="gramb_items">
<div class="items_left">
<div class="sign">
<img
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div>
<span>结业</span>
</div>
<div class="gramb_input">
<a-radio-group v-model:value="jyradioV1">
<div class="bc_box">
<div class="ol_checkbox">
<a-radio
:value="1"
>结业
</a-radio>
</div>
<div class="ol_checkbox">
<a-radio
:value="2"
>不结业
</a-radio>
</div>
</div>
</a-radio-group>
</div>
</div>
</div>
<div class="qrm_btnbox">
<div class="qrm_btn btn1" @click="graduate_exit">
<div class="btnText">取消</div>
</div>
<div class="qrm_btn btn2" @click="handleJie">
<div class="btnText">确定</div>
</div>
</div>
</div>
</div>
</a-modal>
<!--结业页面 -->
<!--请确定是否同意拒绝此学员学习此课程弹窗 -->
<a-modal
v-model:visible="agreereject_hs"
:footer="null"
:closable="closableQR"
wrapClassName="agrstudyModal"
centered="true"
@cancel="agreereject_exit"
>
<div
class="agreestudy"
:style="{ display: agreereject_hs ? 'block' : 'none' }"
>
<div class="agree_header"></div>
<div class="agree_main">
<div class="agreem_header">
<div class="agreem_icon"></div>
<span>提示</span>
<div class="close_exit" @click="agreereject_exit"></div>
</div>
<div class="agreem_body">
<div
class="body_box"
:style="{ display: agreestudy_hs ? 'block' : 'none' }"
>
<div>请确定是否同意此学员学习此课程</div>
</div>
<div
class="body_box"
:style="{ display: rejectstudy_hs ? 'block' : 'none' }"
>
<div>请确定是否拒绝此学员学习此课程</div>
</div>
</div>
<div class="qrm_btnbox">
<div class="qrm_btn btn1">
<div class="btnText" @click="agreereject_exit">取消</div>
</div>
<div class="qrm_btn btn2">
<div class="btnText" @click="handleAgreeTrue">确定</div>
</div>
</div>
</div>
</div>
</a-modal>
<!--请确定是否同意拒绝此学员学习此课程弹窗 -->
<!--删除 复制 停用弹窗 -->
<a-modal
v-model:visible="delete_hs"
:footer="null"
:closable="closableQR"
wrapClassName="DelModal"
style="margin-top: 400px"
:zIndex="9999"
@cancel="delete_exit1"
>
<div
class="delete"
:style="{
display:
del_hs ||
copy_hs ||
nouse_hs ||
back_hs ||
submit_hs ||
useCourse ||
push_hs
? 'block'
: 'none',
}"
>
<div class="del_header"></div>
<div class="del_main">
<div class="header">
<div
class="del-icons"
:style="{ display: del_hs ? 'block' : 'none' }"
>
<img src="@/assets/images/coursewareManage/notice.png" alt="" />
</div>
<div
class="del-icons"
:style="{ display: copy_hs || nouse_hs ? 'block' : 'none' }"
>
<img src="@/assets/images/coursewareManage/QR.png" alt="" />
</div>
<span>提示</span>
<div class="close_exit" @click="delete_exit1"></div>
</div>
<div class="body">
<div :style="{ display: del_hs && !del_hs_stu ? 'block' : 'none' }">
<span>您确定要删除此课程吗</span>
</div>
<div :style="{ display: del_hs && del_hs_stu ? 'block' : 'none' }">
<span>您确定要删除此学员吗</span>
</div>
<div :style="{ display: copy_hs ? 'block' : 'none' }">
<span>您确定要复制此课程吗</span>
</div>
<div :style="{ display: nouse_hs ? 'block' : 'none' }">
<span>您确定要停用此课程吗</span>
</div>
<div :style="{ display: submit_hs ? 'block' : 'none' }">
<span>您确定要提交审核吗</span>
</div>
<div :style="{ display: back_hs ? 'block' : 'none' }">
<span>您确定要撤回吗</span>
</div>
<div :style="{ display: useCourse ? 'block' : 'none' }">
<span>您确定要启用吗</span>
</div>
<div :style="{ display: push_hs ? 'block' : 'none' }">
<span>您确定要发布吗</span>
</div>
</div>
<div class="del_btnbox">
<div class="del_btn btn2" @click="delete_exit1">
<div class="btnText">取消</div>
</div>
<div class="del_btn btn2" @click="handleDeleteExit">
<div class="btnText">确定</div>
</div>
</div>
</div>
</div>
</a-modal>
<!-- 预览弹窗 -->
<SeeModal
:visible="lookCourseModal"
:detail="faceDetailObj"
@cancel="ft_exit_see"
/>
<!--删除 复制 停用弹窗 -->
<!-- 学员管理课程库-归属权抽屉 -->
<!-- <own-power v-model:ownpowervisible="ownpowervisible" /> -->
<!-- 学员管理课程库-归属权抽屉 -->
<!-- 添加授权侧弹窗 -->
<!-- <corpowerlist v-model:corpowerlistVisible="corpowerlistvisible" /> -->
<!-- 添加授权侧弹窗 -->
<!-- 学员管理-添加学员抽屉 -->
<!-- <StuAdd v-model:Stuvisible="Stuvisible" @sure="handlePostSure" /> -->
<!-- 添加学员抽屉 -->
<!-- <proj-check-ship
v-model:ProjCheckvisible="viewpowervisible"
:selectProjectId="offcourseId"
v-model:addStudentList="addStudentList"
:authClassify="authClassify"
classify="addstudent"
/> -->
<!-- 新建在线课弹窗 -->
<addOnlineCourse
v-model:addOnlineCoursevisible="addOnlineCoursevisible"
:closeOnlineModal="closeOnlineCoursevisible"
/>
<!-- 新建在线课弹窗 -->
<!-- 授权名单抽屉 -->
<proj-power-list
v-model:ProjPvisible="corpowerlistvisible"
:selectProjectId="selectCourseId"
classify="course"
/>
<!-- 归属权抽屉 -->
<proj-owner-ship
v-model:ProjOwnervisible="ownpowervisible"
:selectProjectId="selectCourseId"
classify="course"
/>
<!-- 查看权抽屉 -->
<!-- <proj-check-ship
v-model:ProjCheckvisible="viewpowervisible"
:selectProjectId="selectCourseId"
v-model:addAuthList="addAuthList"
:authClassify="authClassify"
classify="course"
/> -->
<!--查看权抽屉 管理权抽屉 添加学员抽屉 -->
<proj-check-ship
v-model:ProjCheckvisible="viewpowervisible"
:selectProjectId="selectCourseId"
v-model:addAuthList="addAuthList"
:authClassify="authClassify"
classify="course"
:type="shipType"
/>
</div>
<div class="aeLoading" :style="{ display: addLoading ? 'flex' : 'none' }">
<a-spin :spinning="addLoading" tip="" />
</div>
<!-- 二维码弹窗 -->
<two-dimensional-code
v-model:codevisible="codevisible"
:codeInfo="codeInfo"
:index="codeIndex"
:type="codeType == 1 ? '课程二维码' : codeType == 2 ? '签到二维码' : '评估二维码'"
/>
<!-- 二维码弹窗 -->
</template>
<script lang="jsx">
import {
reactive,
toRefs,
defineComponent,
ref,
shallowRef,
onMounted,
onBeforeUnmount,
watch,
computed,
} from "vue";
import * as apis from "../../api/indexTaskManage";
import { message } from "ant-design-vue";
import { useRouter, useRoute } from "vue-router";
import CommonStudent from "@/components/student/CommonStudent";
import OwnerTableModelStudent from "@/components/student/OwnerTableModelStudent";
import addOnlineCourse from "../../components/Modals/addOnlineCourse.vue";
import ProjOwnerShip from "../../components/drawers/ProjectOwn";
import NameInput from "../../components/project/NameInput";
import NameInputNew from "../../components/project/NameInputNew";
import ProjPowerList from "../../components/drawers/ProjPowerList";
import ProjCheckShip from "../../components/drawers/ProjCheckPower";
import AssessmentList from "../../components/drawers/AssessmentList.vue";
import dialog from "@/utils/dialog";
// import { queryAssessmentDetailList } from "@/api/indexResearch";
import {
list,
detail,
handle,
deletePlan,
planList,
editPlan,
studentList,
addStudent,
studentExport,
handleStudent,
getMemberInfoApi,
copyCoursePlan,
copyCourse,
} from "@/api/indexCourse";
import {
traverseArr,
getdateToTime,
newFile,
getdateToDate,
} from "../../utils/utils";
import { validateName } from "@/api/index1";
import { fileUp } from "../../api/indexEval";
import * as api1 from "../../api/index1";
import "@wangeditor/editor/dist/css/style.css";
import ProjectManager from "@/components/project/ProjectManagerNewTeacher";
import SeeModal from "./components/seeModal.vue";
import CourseModal from "./courseModal.vue";
import * as moment from "moment";
import TwoDimensionalCode from "../../components/TwoDimensionalCodeNew.vue";
import { codeUrl, toDate } from "@/api/method";
import { queryWorkDetailById } from "@/api/indexWork";
import { queryExaminationDetailById } from "@/api/indexExam";
import AddHomework from "../../components/drawers/CommonHomework.vue";
import AddTest from "../../components/drawers/CommonTest.vue";
import TableStudent from "@/components/student/TableStudent";
import FJUpload from "@/components/common/FJUpload";
import {auditStudentStatus} from "@/api/indexProjStu";
import { useStore } from "vuex";
import DropDown from "@/components/common/DropDown";
import { checkPer, checkOwner } from "@/utils/utils";
import dayjs from "dayjs";
import {duration} from "moment";
import { DeleteOutlined,DownOutlined } from '@ant-design/icons-vue';
//列表表格
const moreLine = (item) => {
item.map(val => {
return (val.line = val.teacherName + " 权重 " + val.weight + '%')
})
return item.map(i => i.line).join('\n')
}
//列表操作在线面授管理
const columns2 = [
{
title: "姓名",
dataIndex: "studentName",
key: "studentName",
width: "6%",
align: "center",
customRender: ({ record: { studentName } }) => studentName || "-",
},
{
title: "工号",
dataIndex: "studentUserNo",
key: "studentUserNo",
width: "12%",
ellipsis: true,
align: "center",
customRender: ({ record: { studentUserNo } }) => studentUserNo || "-",
},
{
title: "开课名称",
dataIndex: "name",
key: "name",
width: "12%",
ellipsis: true,
align: "center",
customRender: ({ record: { name } }) => name || "-",
},
{
title: "地点",
dataIndex: "address",
key: "address",
width: "12%",
ellipsis: true,
align: "center",
customRender: ({ record: { address } }) => address || "-",
},
{
title: "数据来源",
dataIndex: "courseSource",
key: "courseSource",
ellipsis: true,
width: "12%",
align: "center",
customRender: ({ record: { courseName, routerName } }) =>
courseName || routerName || "开课",
},
{
title: "是否开课学员",
dataIndex: "infoType",
key: "infoType",
ellipsis: true,
width: "10%",
align: "center",
customRender: ({ record: { infoType } }) => infoType ===1 ? '是':'否'
},
{
title: "学习时间",
dataIndex: "lastStudyTime",
key: "lastStudyTime",
width: "10%",
align: "center",
ellipsis: true,
customRender: ({ record: { lastStudyTime } }) => lastStudyTime || "-",
},
{
title: "签到时间",
dataIndex: "signTime",
key: "signTime",
width: "10%",
align: "center",
ellipsis: true,
customRender: ({ record: { signTime } }) => signTime || "-",
},
{
title: "状态",
dataIndex: "status",
key: "status",
width: "12%",
align: "center",
customRender: (text) => {
return (
<div class="racona">
<span>
{" "}
{text.record.finishStatus == 0 || text.record.finishStatus == null
? "未开始" :text.record.finishStatus == 1?"已完成"
: '进行中'}
</span>
</div>
);
},
},
// {
// title: "操作",
// dataIndex: "opacation",
// key: "opacation",
// width: "14%",
// align: "center",
// },
];
//管理查看详情
const columns4 = [
{
title: "开课名称",
dataIndex: "projectName",
key: "projectName",
width: "30%",
align: "center",
},
{
title: "地点",
dataIndex: "address",
key: "address",
width: "30%",
align: "center",
},
{
title: "状态",
dataIndex: "status",
key: "status",
width: "40%",
align: "center",
},
];
//开课表格
const columns6 = [
// {
// title: "序号",
// dataIndex: "num",
// key: "num",
// width: "8%",
// align: "center",
// ellipsis: true,
// customRender: ({ index, record }) => {
// const pageNum =
// Number(record.pageNo) - 1 > 0 ? (Number(record.pageNo) - 1) * 10 : 0;
// return index + 1 + pageNum;
// },
// },
{
title: "开课名称",
dataIndex: "organization",
key: "organization",
width: "15%",
align: "center",
customCell:() => {return {style: {maxWidth: '200px',overflow: 'hidden',whiteSpace: 'nowrap',textOverflow:'ellipsis',cursor:'pointer',padding:'0px 10px'}}},
customRender: ({ text }) => {
return <a-tooltip color="white" placement="bottomLeft" title = {text} >{text ? text : "-"}</a-tooltip>
},
},
{
title: "授课教师",
dataIndex: "teacher",
key: "teacher",
width: "30%",
align: "center",
ellipsis: true,
slots: { customRender: "teacherName" },
},
{
title: "面授时间",
dataIndex: "starttime",
key: "starttime",
width: "40%",
ellipsis: true,
align: "center",
customRender: ( text ) => {
return text.record.beginTime + ' ~ ' + text.record.endTime
},
},
{
title: "学员数",
dataIndex: "studentCnt",
key: "studentCnt",
width: 100,
align: "center",
ellipsis: true,
customRender: ( text ) => {
return(
<div style="display:flex;justify-content:center;align-items:center;">
<span>{text.record.studentCnt || '0'}</span>
<div class="daochu" onClick={()=>downStudent(text.record)} title="导出学员信息"></div>
</div>
)
},
},
{
title: "评分",
dataIndex: "studentCnt",
key: "studentCnt",
width: 100,
align: "center",
ellipsis: true,
customRender: ( text ) => {
return(
text.record && text.record?.score != 0 && text.record?.score != -1 ?
<div style="display:flex;justify-content:center;align-items:center;">
<span>{(text.record.score?.toFixed(2) || '0.00')}</span>
<div class="daochu" onClick={()=>downPin(text.record)} title="导出评估信息"></div>
</div>
: '-'
)
},
},
{
title: "时长",
dataIndex: "duration",
key: "duration",
width: "12%",
ellipsis: true,
align: "center",
customRender: ({ text }) => {
return text ? text : "-";
},
},
{
title: "创建人",
dataIndex: "createName",
key: "createName",
width: "10%",
align: "center",
ellipsis: true,
customRender: ( text ) => {
return <a-tooltip color="white" placement="bottom" title = {text.record.createName+text.record.createUserNo} >{text.record.createName}</a-tooltip>
},
},
{
title: "地点",
dataIndex: "address",
key: "saddress",
width: "30%",
align: "center",
customCell:() => {return {style: {maxWidth: '200px',minWidth: '100px',overflow: 'hidden',whiteSpace: 'nowrap',textOverflow:'ellipsis',cursor:'pointer',padding:'0px 10px'}}},
customRender: ( {text} ) => {
return <a-tooltip color="white" placement="bottomLeft" title = {text} >{text ? text : "-"}</a-tooltip>
},
},
{
title: "操作",
width: 300,
dataIndex: "operation",
key: "operation",
align: "center",
fixed: "right",
slots: { customRender: "action" },
},
];
const downStudent = (val) => {
if (val.id != undefined) {
window.open(
`${
process.env.VUE_APP_BASE_API
}/admin/student/exportTaskStudent?type=${3}&pid=${val.id}&thirdType=2`
);
}
}
const downPin = (val) => {
if (val.id != undefined) {
window.open(
`${
process.env.VUE_APP_BASE_API
}/admin/assessment/manage/exportCoursePlanAssessmentMessage?type=3&pid=${val.id}&courseId=${val.assessmentId}&taskId=${val.id}&taskType=11`
);
}
}
//开课学员管理
const columns7 = [
//// {
// title: "序号",
// width: 200,
// dataIndex: "num",
// key: "num",
// align: "center",
// customRender: ({ index, record }) => {
// const pageNum =
// Number(record.pageNo) - 1 > 0 ? (Number(record.pageNo) - 1) * 10 : 0;
// return index + 1 + pageNum;
// },
// },
{
title: "姓名",
width: 200,
dataIndex: "name",
key: "name",
customRender: ({ text }) => {
return text ? text : "-";
},
},
{
title: "工号",
width: 200,
dataIndex: "number",
key: "1",
align: "center",
customRender: ({ text }) => {
return text ? text : "-";
},
},
{
title: "部门",
width: 200,
dataIndex: "department",
key: "2",
align: "center",
customRender: ({ text }) => {
return text ? text : "-";
},
},
// {
// title: "岗位",
// width: 300,
// dataIndex: "postion",
// key: "3",
// align: "center",
// customRender: ({ text }) => {
// return text ? text : "-";
// },
// },
{
title: "Band",
width: 200,
dataIndex: "band",
key: "4",
align: "center",
customRender: ({ text }) => {
return text ? text : "-";
},
},
{
title: "报名状态",
width: 200,
dataIndex: "status",
key: "5",
align: "center",
customRender: ({ record }) => {
switch (String(record.status)) {
case "0":
return "审核通过";
case "1":
return "待审核";
case "2":
return "审核拒绝";
}
},
},
{
title: "加入方式",
width: 200,
dataIndex: "join",
key: "6",
align: "center",
customRender: ({ record }) => {
switch (String(record.source)) {
case "1":
return "导入";
case "2":
return "报名加入";
}
},
},
// {
// title: "签到状态",
// width: 200,
// dataIndex: "signstatus",
// key: "7",
// align: "center",
// customRender: ({ record }) => {
// switch (String(record.signStatus)) {
// case "0":
// return "未签到";
// case "1":
// return "已签到";
// case "2":
// return "请假";
// }
// },
// },
// {
// title: "评估状态",
// width: 200,
// dataIndex: "evastatus",
// key: "8",
// align: "center",
// customRender: ({ record }) => {
// switch (String(record.evalStatus)) {
// case "0":
// return "未评估";
// case "1":
// return "已评估";
// }
// },
// },
// {
// title: "结业状态",
// width: 100,
// className: "h",
// dataIndex: "overstatus",
// key: "overstatus",
// fixed: "right",
// align: "center",
// // key: "9",
// // align: "center",
// // customRender: ({ record }) => {
// // switch (String(record.source)) {
// // case "0":
// // return "未结业";
// // case "1":
// // return "已结业";
// // }
// // },
// },
{
title: "操作",
width: 100,
className: "h",
dataIndex: "operation",
key: "operation",
fixed: "right",
align: "center",
},
];
export default defineComponent({
components: {
// OwnPower,
// Corpowerlist,
CommonStudent,
DropDown,
OwnerTableModelStudent,
SeeModal,
CourseModal,
FJUpload,
// StuAdd,
ProjectManager,
ProjOwnerShip,
ProjPowerList,
ProjCheckShip,
AssessmentList,
AddHomework,
AddTest,
NameInput,
NameInputNew,
TableStudent,
// VNodes: (_, {attrs}) => {
// return attrs.vnodes;
// },
addOnlineCourse,
TwoDimensionalCode,
DeleteOutlined,
DownOutlined
},
setup() {
const CourseModalRef = ref(null);
const store = useStore();
const sysTypeOptions = computed(() => store.state.content_type);
const durationText = computed(() => state.xjkkinputV3?.length==2?dayjs(state.xjkkinputV3[1]).diff(dayjs(state.xjkkinputV3[0]),'minute')|| '请输入持续时间':'请输入持续时间');
const state = reactive({
tableStudentChange: null,
isAssessmentId: null,
isHomeWorkId: null,
tableCoursePlanLoading: false,
permissions:null,
createId:null,
workInfo: {},
examInfo: {},
tableLoading: false,
itemType: null,
columns1: [
{
title: "课程编号",
width: 130,
dataIndex: "offcourseNumber",
key: "offcourseNumber",
align: "center",
},
{
title: "名称",
width: 400,
dataIndex: "name",
key: "name",
ellipsis: true,
align: "left",
customRender: ({ text }) => {
return text ? text : "-";
},
},
{
title: "关键字",
dataIndex: "tips",
key: "tips",
align: "left",
customCell :() => {return {style: {maxWidth: '200px',overflow: 'hidden',whiteSpace: 'nowrap',textOverflow:'ellipsis',cursor:'pointer'}}},
customRender: ({ text }) => {
return <a-tooltip color="white" placement="topLeft" title = {text} >{text ? text : "-"}</a-tooltip>
},
},
{
title: "内容分类",
width: 130,
dataIndex: "contentTxt",
ellipsis: true,
key: "contentTxt",
align: "center",
customRender: ({ record }) =>
findClassFullName(sysTypeOptions.value, record.sysTypeId) || "-",
},
{
title: "课程形式",
width: 130,
dataIndex: "courseform",
key: "2",
align: "center",
customRender: ({ record }) => {
switch (String(record.courseform)) {
case "1":
return "线上";
case "2":
return "面授";
}
},
},
{
title: " 所属项目",
width: 250,
dataIndex: "projectName",
key: "3",
align: "center",
ellipsis: true,
customRender: ({ text }) => {
return text ? text : "-";
},
},
{
title: " 所属路径",
width: 250,
dataIndex: "routerName",
key: "3",
align: "center",
ellipsis: true,
customRender: ({ text }) => {
return text ? text : "-";
},
},
{
title: " 资源归属",
width: 250,
dataIndex: "sourceBelongFullName",
key: "3",
align: "center",
ellipsis: true,
customRender: ({ text }) => {
return text ? text : "-";
},
},
{
title: " 目标人群",
width: 250,
dataIndex: "targetUser",
key: "3",
align: "center",
ellipsis: true,
customRender: ({ text }) => {
return text ? text : "-";
},
},
{
title: "学习人数",
width: 130,
dataIndex: "studentCnt",
key: "4",
align: "center",
customRender: ({ text }) => {
return text ? text : "0";
},
},
// {
// title: "评分",
// width: 130,
// dataIndex: "grade",
// key: "5",
// align: "center",
// customRender: ({ text }) => {
// return text ? text : "0";
// },
// },
{
title: "状态",
width: 130,
dataIndex: "auditStatus",
key: "6",
align: "center",
customRender: ({ record }) => {
switch (String(record.auditStatus)) {
case "0":
return "未提交";
case "1":
return "待审核";
case "2":
return "已审核";
case "3":
return "已审核";
case "-1":
return "审核未通过";
}
},
},
{
title: "是否发布",
width: 100,
dataIndex: "publishStatus",
key: "7",
align: "center",
customRender: ({ record }) =>
record.publishStatus? "已发布" : "未发布",
},
{
title: "创建人",
width: 100,
dataIndex: "createName",
key: "8",
ellipsis: true,
align: "center",
customRender: ({ text }) => {
return text ? text : "-";
},
},
{
title: "创建时间",
width: 100,
dataIndex: "createTime",
key: "9",
ellipsis: true,
align: "center",
customRender: ({ text }) => {
return text ? text : "-";
},
},
{
title: "发布时间",
width: 100,
ellipsis: true,
dataIndex: "publishTime",
key: "10",
align: "center",
customRender: ({ text, publishStatus }) => {
return publishStatus? text || "-" : "-";
},
},
{
title: "是否停用",
width: 100,
key: "status",
dataIndex: "status",
align: "center",
customRender: ({ record }) =>
record.publishStatus? (record.status ? "启用" : "停用") : "-",
},
{
title: "操作",
width: 250,
dataIndex: "id",
key: "id",
fixed: "right",
align: "right",
slots: { customRender: "action" },
},
],
shipType: 1,
addLoading: false,
currentPlanItem: {},
teacherId: null,
// teacher: null,
selectedRowKeys7: [],
auditDescription: "",
isEdit: 0,
member: { name: "", value: "" },
offteachers:[{
teacherId: "",
teacherName: "",
weight: '',
}],
//列表表格
tableData1: [
// {
// key: "1",
// num: 1,
// name: "时间管理",
// content: "领导力",
// courseform: "线上",
// project: "管理者进阶-腾飞班1",
// stunum: "50",
// grade: "5",
// status: "未提交",
// ynpub: "未发布",
// creator: "管理员",
// createtime: "2022-07-20 9:30",
// pubtime: "2022-07-20 9:30",
// kkty: false,
// },
],
//在线面授管理报名管理
tableData2: [
// {
// key: 1,
// projectName: "刘莉",
// numb: "10064511",
// applytime: "2022-07-20 14:00:00",
// signtime: "-",
// status: "已通过",
// },
],
//在线面授管理学习记录
tableData3: [
{
key: 1,
projectName: "刘莉",
numb: "10064511",
applytime: "2022-07-20 14:00:00",
signtime: "-",
status: "已通过",
},
],
//管理查看详情
tableData4: [
{
key: 1,
projectName: "刘莉",
address: "10064511",
status: "已通过",
},
],
//列表表格
tableData5: [
// {
// key: "1",
// num: 1,
// name: "时间管理",
// content: "领导力",
// courseform: "线上",
// project: "管理者进阶-腾飞班1",
// stunum: "50",
// grade: "5",
// status: "未提交",
// ynpub: "未发布",
// creator: "管理员",
// createtime: "2022-07-20 9:30",
// pubtime: "2022-07-20 9:30",
// kkty: false,
// },
],
//开课
tableData6: [
// {
// key: 1,
// num: 1,
// organization: "管理者面授课1",
// address: "核心能力大楼培训",
// starttime: "2022-07-20 14:00:00",
// createtime: "2022-07-14 14:00:00",
// },
],
//开课学员管理
tableData7: [
// {
// key: "1",
// num: 1,
// name: "李梦",
// number: "1000",
// department: "显示事业",
// postion: "产品经理",
// band: "Band9",
// status: "待审核",
// join: "手动加入",
// signstatus: "-",
// evastatus: "-",
// overstatus: "-",
// },
],
stuColumns: [],
currentPage1: 1,
tableDataTotal1: -1,
pageSize1: 10,
currentPageTea1: 1,
tableDataTotalTea1: 0,
pageSizeTea1: 10,
currentPageTea2: 1,
tableDataTotalTea2: 0,
pageSizeTea2: 10,
Stuvisible: false, //添加学员
currentPage: 1,
tableDataTotal: 100,
pageSize: 10,
selectedRowKeys: [],
faceManageTab: "1",
of_hs: false,
hideshow: true,
bs_hs: false,
ft_hs: false,
lookMs: false,
om_1: false,
ft_1: false,
om_ckxq: false,
stm_hs: false,
cstm_hs: false,
sm_hs: false,
QR_hs: false,
closableQR: false,
rg_hs: false,
piliang: false,
graduate_hs: false,
agreereject_hs: false,
agreestudy_hs: false,
rejectstudy_hs: false,
delete_hs: false,
submit_hs: false,
push_hs: false,
back_hs: false,
del_hs: false,
del_hs_stu: false,
copy_hs: false,
nouse_hs: false,
// 二维码标题状态
qrQR_hs: false,
olQR_hs: false,
ftQR_hs: false,
ftsQR_hs: false,
vipftQR_hs: false,
//抽屉状态
ownpowervisible: false,
corpowerlistvisible: false,
lookCourseModal: false,
faceDetailObj: {},
offcourseId: null,
temp: null,
useCourse: false,
stopCourse: false,
projectName: "",
name: "",
createName: "",
auditStatus: null,
categoryId: undefined,
sysTypeId: undefined,
projectTime: "",
//列表
value1: "",
value2: "",
value3: "",
value4: "",
//选择线上还是面授
xzinputV1: "",
valueE1: "",
valueE2: "",
//确定面授
ft_eidt: false,
statusJuJue: 0,
statusTingQi: 1,
qdms_inputV1: "",
qdms_inputV2: "",
qdms_inputV3: "",
qdms_inputV4: [],
tagsOptions: [],
qdms_inputV5: null,
fen_lei: null,
feng_mian_1: null,
feng_mian_2: null,
chang_jin: null,
tags_val_single: "",
tags_val: [],
qdms_inputV6: "",
//在线面授管理
gl_selectV1: undefined,
gl_selectV2: undefined,
gl_inputV1: "",
gl_inputV2: "",
manageStuLoading: true,
currentFaceId: "",
//开课
kk_eidt: false,
kkinputV1: "",
kkinputV2: "",
//新建开课
xjkkradioV1: false,
xjkkradioVEnd: false,
xjkkradioVEndTime: null,
completeType: "",
xjkkinputV1: "",
onceName: "",
scoreParams:'',
changeName:false,
xjkkinputV2: "",
duration: "",
xjkkinputV3: [],
xjkkinputV4: null,
beforeValue: null, //考勤 开始前
afterStartValue: null, //考勤 开始后
//开课学员管理
xygl_inputV1: "",
//录入成绩
lrcj_inputV1: "",
scoreId: null, //录入成绩id
isgetStudent: false, //是否重新获取学员
//结业
jyradioV1: 1,
imageUrl: "",
imgList: [],
validated: 0,
attach: "",
pageSize2: 10,
currentPage2: 1,
tableDataTotal2: 0,
pageSize22: 10,
currentPage22: 1,
tableDataTotal22: 0,
pageSize222: 10,
currentPage222: 1,
tableDataTotal222: 0,
kk_inputV0: '',
kk_inputV1: "",
kk_inputV2: "",
selectTime: "",
pageSize3: 10,
currentPage3: 1,
tableDataTotal3: 0,
checked1: false,
checked4: false,
offcoursePlanId: 0,
filesList: [],
signCom: false,
regisCom: false,
comLeave: false,
studentId: 0,
homeWorkId: null,
studentItem: {},
addOnlineCoursevisible: false, //新建面授弹窗
selectCourseId: null, //授权选择的id
viewpowervisible: false, //查看权抽屉
authClassify: null, //1查看权 2管理权 3学员
addAuthList: null,
addStudentList: null, //选中列表
newCourseName: null, //新建开课名称
EditWorkId: null,
assessment: {},
assessmentId: null,
workName: null,
EditTestId: null,
testName: null,
assessmentName: "",
assessmentVisible: false,
addhomeworkvisible: false,
addtestvisible: false,
codevisible: false, //二维码弹窗
codeIndex: null,
codeInfo: null, //二维码内容
codeUrl: codeUrl,
// 课程三级分类
options2222: [
{
title: "领导力",
value: "100",
children: [
{
title: "管理业务",
value: "1001",
},
{
title: "管理团队",
value: "1002",
},
{
title: "管理自我",
value: "1003",
},
],
},
{
title: "专业力",
value: "200",
children: [
{
title: "研发",
value: "2001",
},
{
title: "系统和解决方案",
value: "2002",
},
{
title: "生产技术与制造",
value: "2003",
},
{
title: "供应链",
value: "2004",
},
{
title: "营销",
value: "2005",
},
{
title: "品质",
value: "2006",
},
{
title: "专业职能",
value: "2007",
children: [
{
title: "战略与企划",
value: "200701",
},
{
title: "流程管理",
value: "200702",
},
{
title: "业绩管理",
value: "200703",
},
{
title: "项目管理",
value: "200704",
},
{
title: "信息技术",
value: "200705",
},
{
title: "环境与安全",
value: "200706",
},
{
title: "人力资源",
value: "200707",
},
{
title: "企业文化",
value: "200708",
},
{
title: "品牌",
value: "200709",
},
{
title: "财务",
value: "200710",
},
{
title: "法务",
value: "200711",
},
{
title: "风险控制",
value: "200712",
},
{
title: "行政",
value: "200713",
},
],
},
{
title: "医工",
value: "2008",
},
],
},
{
title: "通用力",
value: "300",
children: [
{
title: "职业操守与道德",
value: "3001",
},
{
title: "职业素养与技能",
value: "3002",
},
{
title: "规章制度",
value: "3003",
},
],
},
],
// 点击开课管理 -- 显示得信息
faceType: "面授课", // 面授课类型
faceClassification: "", // 课程内容分类
faceStatus: "", // 课程状态
codeType: null, //二维码类型
});
const nums = ref(0)
watch(durationText,(val)=>{
nums.value++
if(nums.value>1){
if(val == '请输入持续时间'){
state.duration = null;
return
}
state.duration = val;
}
})
// function timeChange(time, timeStr) {
// // state.duration || (state.duration = dayjs(timeStr[1]).diff(dayjs(timeStr[0]),'minute'))
// }
// function timeChange(timeStr) {
// console.log(timeStr,'timeStr')
// formData.value.beginTime = timeStr;
// }
function onDateSelect(date) {
const month = String(date.$M+1).padStart(2, '0')
const day = String(date.$D).padStart(2, '0')
const hour = String(date.$H).padStart(2, '0')
const minute = String(date.$m).padStart(2, '0')
state.xjkkinputV3[0]=date.$y+'-'+month+'-'+day+' '+hour+':'+minute
}
const openStart = ref(false)
const onOkStart = ()=>{
openStart.value = false
}
function onBlurStart(e){
state.xjkkinputV3[0]=e.target.value
openStart.value = false
}
function onFocusStart(){
openStart.value = true
// if(!state.xjkkinputV3[0]){
// let now=new Date()
// let start=new Date(now.setFullYear(now.getFullYear(), now.getMonth(), now.getDate(), 0, 0))
// state.xjkkinputV3 = [
// moment(start).format('YYYY-MM-DD HH:mm'),
// state.xjkkinputV3[1]
// ];
// }
}
// function timeChangeEnd(timeStr){
// formData.value.endTime = timeStr;
// }
function onDateEnd(date) {
const month = String(date.$M+1).padStart(2, '0')
const day = String(date.$D).padStart(2, '0')
const hour = String(date.$H).padStart(2, '0')
const minute = String(date.$m).padStart(2, '0')
state.xjkkinputV3[1]=date.$y+'-'+month+'-'+day+' '+hour+':'+minute
if(state.xjkkinputV3[0]==state.xjkkinputV3[1]){
const minute = String(date.$m+1).padStart(2, '0')
state.xjkkinputV3[1]=date.$y+'-'+month+'-'+day+' '+hour+':'+minute
}
}
const openEnd = ref(false)
const onOkEnd = ()=>{
openEnd.value = false
}
function onBlurEnd(e){
state.xjkkinputV3[1]=e.target.value
openEnd.value = false
}
function onFocusEnd(){
openEnd.value = true
// if(!state.xjkkinputV3[1]){
// let now=new Date()
// let start=new Date()
// let end=new Date(now.setFullYear(now.getFullYear()))
// state.xjkkinputV3 = [
// state.xjkkinputV3[0],
// moment(end).format('YYYY-MM-DD HH:mm')
// ];
// }
}
const totalWeightSum = ref(0)
function inputWeightChange(index) {
let totalWeight = 0
state.offteachers.forEach(item => {
totalWeight += Number(item.weight);
});
if (totalWeight > 100) {
message.info("权重值最大为100%");
state.offteachers[index].weight -= totalWeight - 100;
totalWeight = 100;
}
totalWeightSum.value = totalWeight
}
function inputAdd() {
state.offteachers.push({
teacherId: "",
teacherName: "",
weight: '',
});
}
function inputRemove(index) {
dialog({
content: "确定删除此授课教师吗?",
ok: async () => {
state.offteachers.splice(index, 1);
message.success("删除成功");
},
});
}
function findClassFullName(list, classify, name = "") {
return (
(list &&
list.length > 0 &&
list
.map((e) =>
classify == e.code
? name
? name + "-" + e.name
: e.name
: findClassFullName(
e.children,
classify,
name ? name + "-" + e.name : e.name
)
)
.filter((name) => name)
.join("")) ||
""
);
}
const showStuAdd = (record) => {
state.selectCourseId = record.offcoursePlanId;
state.shipType = 2;
state.authClassify = 3;
state.viewpowervisible = true;
};
// 富文本 sssssssssssssss
// 编辑器实例,必须用 shallowRef
const editorRef = shallowRef();
// 内容 HTML
const valueHtml = ref("");
// // 模拟 ajax 异步获取内容
onMounted(() => {});
const toolbarConfig = {
excludeKeys: ["insertVideo", "insertImage"],
};
const editorConfig = { placeholder: "请输入内容...", MENU_CONF: {} };
editorConfig.MENU_CONF["uploadImage"] = {
// 自定义上传
async customUpload(file, insertFn) {
const formData = new FormData();
formData.append("file", file);
fileUp(formData).then((res) => {
if (res.data.code === 200) {
// 最后插入图片
insertFn(res.data.data, file.name, res.data.data);
}
});
},
};
const handleCreated = (editor) => {
console.log("toolbar2222222222333333322222");
console.log(editorRef.value);
editorRef.value = editor; // 记录 editor 实例,重要!
};
// 组件销毁时,也及时销毁编辑器
onBeforeUnmount(() => {
const editor = editorRef.value;
if (editor == null) return;
editor.destroy();
});
// 富文本 eeeeeeeeeeeeee
const route = useRoute();
console.log(route);
const router = useRouter();
console.log(router);
const beforeUpload = (file) => {
return new Promise((resolve, reject) => {
const isJpgOrPng =
file.type === "image/jpg" ||
file.type === "image/jpeg" ||
file.type === "image/png" ||
file.type === "image/svg" ||
file.type === "image/bmp" ||
file.type === "image/gif";
if (!isJpgOrPng) {
message.error("仅支持jpg、gif、png、jpeg、svg、bmp格式!");
return reject(false);
}
console.log(file.size);
let isLt1M = file.size / 10240 / 10240 <= 1;
if (!isLt1M) {
this.$message.error("图片大小超过10MB!");
return reject(false);
}
let w = 0,
h = 0;
let reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => {
const image = new Image();
image.src = reader.result;
image.onload = () => {
w = image.width;
h = image.height;
const ratio = 800 / 450;
if (w / h == ratio) {
// 图片比例为800*450横纵比一致
const formData = new FormData();
formData.append("file", file);
console.log(file);
fileUp(formData).then((res) => {
if (res.data.code === 200) {
state.imageUrl = res.data.data;
// state.hasImgName = file.name;
// emit("src", { id: curItem.value.id, src: res.data.data });
}
});
return resolve(true);
} else {
message.error(
"图片尺寸错误只能上传800*450(高宽比例为169)横纵比一致的图片"
);
return reject(false);
}
};
};
return reject(false);
});
};
const beforeUpload2 = (file) => {
console.log(6765555);
console.log(file);
const fileType = [
"jpg",
"jpeg",
"png",
"gif",
"pdf",
"ppt",
"pptx",
"doc",
"docx",
"xls",
"xlsx",
"zip",
];
if (!fileType.includes(file.name.split(".")[1])) {
message.error(
"仅支持.pdf,.ppt,.pptx,.doc,.docx,.xls,.xlsx,.jpg,.jpeg,.png,.gif,.zip格式!"
);
return false;
}
// let isLt1M = file.size / 10240 / 10240 <= 1;
// if (!isLt1M) {
// this.$message.error("图片大小超过10MB!");
// return false;
// }
const formData = new FormData();
formData.append("file", file);
console.log(file);
fileUp(formData).then((res) => {
if (res.data.code === 200) {
state.imgList.push({
img: res.data.data,
name: file.name,
size: file.size,
});
console.log(state.imgList);
// state.hasImgName = res.data.data;
}
});
return false;
};
const handleDel = (index) => {
state.imgList.splice(index, 1);
};
const handleDel2 = (index) => {
state.filesList.splice(index, 1);
};
// 渲染列表1操作
const getTableDate = async () => {
state.tableLoading = true;
console.log("我是点击搜索的数据", state.sysTypeId);
let startTime = "";
let endTime = "";
if (state.projectTime) {
startTime = toDate(
new Date(state.projectTime[0].$d).getTime() / 1000,
"Y-M-D"
);
endTime = toDate(
new Date(state.projectTime[1].$d).getTime() / 1000,
"Y-M-D"
);
}
await list({
pageNo: state.currentPage1,
pageSize: state.pageSize1,
auditStatus: state.auditStatus,
// categoryId: state.categoryId,
sysTypeId: state.sysTypeId,
projectName: state.projectName,
name: state.name,
createName: state.createName,
endTime: endTime,
beginTime: startTime,
}).then(res=>{
const { rows, total } = res.data.data;
state.tableData1 = rows;
state.tableDataTotal1 = total;
state.tableLoading = false;
}).catch(err=>{
state.tableData1 = [];
state.tableLoading = false;
state.tableDataTotal1 = 0;
message.error(err.message=='timeout of 15000ms exceeded'?'系统超时,请稍后再试':err.data.msg)
})
// itm.pageNo = pageNo;
// itm.contentTxt = findClassFullName(sysTypeOptions.value, itm.sysTypeId) || "-";
console.log("state.tableData1", state.tableData1);
};
getTableDate();
const handelChangePage1 = (page, pageSize) => {
state.currentPage1 = page;
state.pageSize1 = pageSize;
getTableDate();
};
const handleSearch1 = () => {
state.currentPage1 = 1;
getTableDate();
};
const handleRest1 = () => {
state.projectName = "";
state.name = "";
state.createName = "";
state.auditStatus = null;
state.sysTypeId = null;
state.projectTime = "";
state.currentPage1 = 1;
getTableDate();
};
const handleSucessStu = (itm) => {
console.log(itm);
state.studentId = itm.studentId;
state.studentItem = itm;
state.agreereject_hs = true;
state.agreestudy_hs = true;
};
const handleRejectStu = (itm) => {
console.log(itm);
state.studentId = itm.studentId;
state.studentItem = itm;
state.agreereject_hs = true;
state.rejectstudy_hs = true;
};
const handleDeleteStu = (itm) => {
console.log(itm);
state.studentId = itm.studentId;
state.studentItem = itm;
state.delete_hs = true;
state.del_hs = true;
state.del_hs_stu = true;
};
const handlJoinStu = (itm) => {
console.log(itm);
state.studentId = itm.studentId;
state.studentItem = itm;
state.rg_hs = true;
state.scoreId = itm.id;
};
const handleOverStu = (itm) => {
console.log("点击结业", itm);
state.studentId = itm.studentId;
state.studentItem = itm;
state.graduate_hs = true;
};
//快速选人 选中的数组
const onSelectChange7 = (selectedRowKeys, item) => {
console.log("selectedRowKeys changed: ", selectedRowKeys, item);
state.selectedRowKeys7 = selectedRowKeys;
if (selectedRowKeys.length) {
state.piliang = true;
} else {
state.piliang = false;
}
// state.choosepeople = item.reverse();
// console.log(item, "选中你了!", state.choosepeople);
// selectedsHeight();
};
const handleAllJion = () => {
console.log(111);
if (state.piliang) {
state.rg_hs = true;
}
};
const handleAllover = () => {
console.log(111);
if (state.selectedRowKeys7.length === 0) {
return;
}
handleStudent({
offcoursePlanId: state.offcoursePlanId,
score: "",
studentIds: state.selectedRowKeys7,
type: 2,
}).then((res) => {
console.log(res);
getTableDate2();
});
};
const handleAllSuc = () => {
console.log(111);
if (state.selectedRowKeys7.length === 0) {
return;
}
handleStudent({
offcoursePlanId: state.offcoursePlanId,
score: "",
studentIds: state.selectedRowKeys7,
type: 3,
}).then((res) => {
console.log(res);
getTableDate2();
});
};
const handleAllReject = () => {
console.log(111);
if (state.selectedRowKeys7.length === 0) {
return;
}
handleStudent({
offcoursePlanId: state.offcoursePlanId,
score: "",
studentIds: state.selectedRowKeys7,
type: 4,
}).then((res) => {
console.log(res);
getTableDate2();
});
};
const handleExportStu = () => {
console.log(55533);
console.log(state.offcoursePlanId);
studentExport({
pageNo: state.currentPage3,
pageSize: state.pageSize3,
// applyStatus: state.auditStatus,
// evalStatus: state.categoryId,
// name: state.projectName,
// signStatus: state.name,
// status: state.name,
offcoursePlanId: state.offcoursePlanId,
}).then((res) => {
// 流文件???
console.log("res33333");
console.log(res);
newFile(res.data.data);
});
};
const showAssessment = () => {
state.assessmentVisible = true;
};
const showDrawerAddHomework = () => {
state.addhomeworkvisible = true;
};
const showDrawerAddTest = () => {
state.addtestvisible = true;
};
const logW = () => {
state.workInfo = {};
};
const logT = () => {
state.examInfo = {};
};
const removePG = () => {
console.log("11111");
state.changeName = false
state.assessmentId = null;
state.assessmentName = "";
// state.isEvaluate = "0";
};
const getCheckedAss = (ass) => {
console.log("ass");
console.log(ass);
state.assessmentId = ass.assessmentId;
state.assessmentName = ass.name;
state.assessment = ass;
// state.assessment1 = null;
};
const rest = () => {
options4CurName.value = "";
options4CurId.value = "";
// state.teacher = null;
state.teacherId = null;
};
const handleChangeTea1 = (val) => {
console.log(787877);
console.log(val);
rest();
};
const handelChangePageTea1 = (page, pageSize) => {
state.currentPageTea1 = page;
state.pageSizeTea1 = pageSize;
rest();
};
const handleChangeTea2 = (val) => {
console.log(787877);
console.log(val);
options4CurName.value = val;
rest();
};
const handelChangePageTea2 = (page, pageSize) => {
state.currentPageTea2 = page;
state.pageSizeTea2 = pageSize;
rest();
};
//获取分类、场景、封面图、-----------字典配置-------------------------------
const optionsUrl = ref([]);
//获取分类、场景、封面图、----------------字典配置---------------------------
//渲染学员管理操作
const getTableDate2 = async () => {
// let data2 = state.tableData7;
let obj = {
pageNo: state.currentPage3,
pageSize: state.pageSize3,
offcoursePlanId: state.offcoursePlanId,
name: state.xygl_inputV1,
};
console.log("获取学员信息", obj);
let res = await studentList(obj);
console.log("获取学员列表", res);
const { rows, total, pageNo } = res.data.data;
state.tableDataTotal3 = total;
for (let i = 0; i < rows.length; i++) {
rows[i].num = i + 1 + (state.currentPage3 - 1) * 10;
}
rows.forEach((item, index) => {
rows[index] = {
...item,
...item.userInfoBo,
};
});
const data2 = traverseArr(
rows,
{
key: "studentId",
num: "num",
name: "name",
number: "studentId",
department: "deptName",
postion: "jobName",
band: "bandDesc",
status: "applyStatus",
join: "source",
signstatus: "signStatus",
evastatus: "evalStatus",
overstatus: "status",
},
true
);
data2.forEach((itm) => {
itm.pageNo = pageNo;
});
state.tableData7 = data2;
};
getTableDate2();
// 渲染开课操作
const handleSearchTable2 = () => {
console.log(7878);
// getTableDate33();
};
const handleSearchTable3 = () => {
state.manageStuLoading = true;
state.currentPage222 = 1
getCourseStudentList();
};
const reseatSearchTable3 = () => {
state.currentPage222 = 1;
state.gl_inputV2 = "";
state.gl_selectV2 = undefined;
state.manageStuLoading = true;
getCourseStudentList();
};
// const getTableDate33 = async () => {
// let datas = state.tableData2;
// let res = await listReview({
// pageNo: state.currentPage22,
// pageSize: state.pageSize22,
// auditStatus: state.gl_selectV1,
// name: state.gl_inputv1,
// });
// const { rows, total } = res.data.data;
// state.tableDataTotal22 = total;
// const datas = traverseArr(
// rows,
// {
// key: "offcourseId",
// projectName: "projectName",
// numb: "assessmentName",
// applytime: "createTime",
// signtime: "publishTime",
// status: "auditStatus",
// },
// true
// );
// state.tableData2 = datas;
// };
// 渲染开课操作
// const getTableDate333 = async () => {
// let datas = state.tableData2;
// let res = await studyRecordList({
// pageNo: state.currentPage222,
// pageSize: state.pageSize222,
// name: state.gl_selectV1,
// status: state.gl_inputv1,
// });
// const { rows, total } = res.data.data;
// state.tableDataTotal222 = total;
// const datas = traverseArr(
// rows,
// {
// key: "offcourseId",
// projectName: "projectName",
// numb: "assessmentName",
// applytime: "createTime",
// signtime: "publishTime",
// status: "auditStatus",
// },
// true
// );
// state.tableData2 = datas;
// };
// 渲染开课操作
const getTableDate3 = async (type) => {
state.tableData6 = []
state.tableLoading = true;
state.tableCoursePlanLoading = true
// let datas = state.tableData6;
let beginTime = "";
let endTime = "";
if (state.selectTime) {
// beginTime = parseInt(new Date(state.selectTime[0].$d).getTime() / 1000);
// endTime = parseInt(new Date(state.selectTime[1].$d).getTime() / 1000);
beginTime = dayjs(state.selectTime[0]).format("YYYY-MM-DD HH:mm:ss");
// toDate(
// new Date(state.selectTime[0].$d).getTime() / 1000,
// "Y-M-D h:m:s"
// );
endTime = dayjs(state.selectTime[1]).format("YYYY-MM-DD HH:mm:ss");
// toDate(
// new Date(state.selectTime[1].$d).getTime() / 1000,
// "Y-M-D h:m:s"
// );
}
let obj = {
pageNo: type?state.currentPage2:state.currentPage222,
pageSize: state.pageSize222,
createName: state.kk_inputV1,
teacher: state.kk_inputV2,
name: state.kk_inputV0,
beginTime: beginTime,
endTime: endTime,
offcourseId: state.offcourseId,
};
console.log("获取开obj", obj, state.selectTime);
let res = null
await planList(obj).then(rs=>{
res = rs
}).catch(err=>{
message.error(err.message=='timeout of 15000ms exceeded'?'系统超时,请稍后再试':err.data.msg)
state.tableCoursePlanLoading = false
res ={
data:{data:{
"pageNo": "1",
"pageSize": "10",
"total": "0",
"pages": "0",
"rows": []
}}}
})
state.tableLoading = false;
console.log("开课res", res);
const { rows, total, pageNo } = res.data.data;
state.tableDataTotal222 = total;
state.tableDataTotal2 = total;
for (let i = 0; i < rows.length; i++) {
rows[i].num = i + 1 + (state.currentPage222 - 1) * 10;
}
const datas = traverseArr(
rows,
{
key: "offcoursePlanId",
num: "num",
organization: "name",
address: "address",
starttime: "beginTime",
createtime: "createTime",
createName: "createName",
},
true
);
datas.forEach((itm) => {
itm.pageNo = pageNo;
});
state.tableData6 = datas;
state.tableCoursePlanLoading = false
console.log("state.tableData6", state.tableData6);
};
const options1 = ref([
{
value: 0,
label: "未提交",
},
{
value: 1,
label: "待审核",
},
{
value: 2,
label: "已审核",
},
{
value: -1,
label: "审核未通过",
},
]);
const options11 = ref([
{
value: 0,
label: "未开始",
},
{
value: 1,
label: "已完成",
},
]);
const options2 = ref([
// {
// value: "value2",
// label: "请选择内容分类",
// },
// {
// value: "leadership",
// label: "领导力",
// },
// {
// value: "ingeneral",
// label: "通用力",
// },
// {
// value: "profession",
// label: "专业力",
// },
]);
const options3 = ref([]);
const options4 = ref([
// {
// value: "profession",
// label: "专业力",
// },
]);
// 删除文件返回参数
const changevalue = (e) => {
let arr = state.attach.split(",");
let newarr = [];
for (let i = 0; i < arr.length; i++) {
if (i !== e) {
newarr.push(arr[i]);
}
}
if (newarr.length == 0) {
state.attach = "";
} else {
state.attach = newarr.toString();
}
console.log("changevalue", e, newarr, state.attach);
};
const options4CurId = ref("");
const options4CurName = ref("张");
const of_hShow = () => {
state.offcourseId = "";
if (state.of_hs == false) {
state.of_hs = true;
}
};
const of_exit1 = () => {
state.of_hs = false;
state.valueE1 = "";
state.valueE2 = "";
state.xzinputV1 = "";
state.hideshow = true;
rest();
};
const of_exit = () => {
state.of_hs = false;
state.valueE1 = "";
state.valueE2 = "";
state.xzinputV1 = "";
state.hideshow = true;
};
const hideShow = () => {
if (state.hideshow == true) {
state.hideshow = false;
} else {
state.hideshow = true;
}
};
const bs_hShow = (value) => {
state.bs_hs = true;
if (value != "") {
state.valueE1 = "";
}
};
// 弹框提示敬请期待
const expectOnline = () => {
message.destroy();
message.success("功能正在开发中,敬请期待。");
};
//新建面授课
const createft = () => {
if (!state.xzinputV1) {
message.destroy();
return message.warning("请输入课程名称");
}
if (state.validated !== 2) {
message.destroy();
return message.warning("该课程名称已存在");
}
console.log(
"state.bs_hs && state.valueE1 == 2",
state.bs_hs,
state.valueE1 == 2
);
if (!state.valueE1 && !state.valueE2) {
message.destroy();
return message.warning("请选择课程形式");
}
if (state.valueE1 === 2) {
state.of_hs = false;
// state.ft_hs = true;
CourseModalRef.value.visibleOpen(null, state.xzinputV1);
state.valueE1 = "";
state.teacher = "";
state.teacherName = "";
state.qdms_inputV1 = state.xzinputV1;
state.xzinputV1 = "";
}
if (state.bs_hs && state.valueE1 == 1) {
state.addOnlineCoursevisible = true;
}
};
const checkVal = (checkList) => {
let count = 0;
for (const keyName of checkList) {
if (!keyName) {
count++;
}
}
return count ? false : true;
};
const ft_exit_0 = () => {
// state.ft_hs = false;
CourseModalRef.value.visibleClose();
};
const ft_exit_1 = () => {
// state.ft_hs = false;
CourseModalRef.value.visibleClose();
// router.go(0);
};
const ft_exit = () => {
state.ft_eidt = false;
state.hideshow = true;
state.offcourseId = null;
state.statusJuJue = 1;
state.statusTingQi = 1;
state.qdms_inputV1 = "";
state.imageUrl = "";
state.qdms_inputV2 = "";
state.qdms_inputV3 = "";
state.fen_lei = null;
state.feng_mian_1 = null;
state.feng_mian_2 = null;
state.chang_jin = null;
state.tags_val = [];
state.qdms_inputV5 = null;
state.qdms_inputV6 = "";
state.imgList = [];
valueHtml.value = "";
state.fileList = [];
};
// 关闭查看
const handlelookMs = () => {
state.lookMs = false;
};
const om_exit = () => {
state.gl_selectV2 = undefined;
state.gl_inputV2 = "";
state.om_1 = false;
state.faceManageTab = "1";
};
const ckxq_hs = () => {
state.om_ckxq = true;
};
const ftsr_exit = () => {
state.om_ckxq = false;
};
const stm_exit = () => {
state.stm_hs = false;
handleCancelStu();
// handleRestTable();
};
const createkk = () => {
//todo 创建开课
state.xjkkinputV1 = state.newCourseName
state.offcoursePlanId = null;
state.itemType = 3;
state.member = {};
state.offteachers = [{
teacherId: "",
teacherName: "",
weight: '',
}]
state.changeName = true
state.xjkkinputV3 = [moment().format('YYYY-MM-DD HH:mm'),'']
state.examInfo = {};
//清除缓存
state.cstm_hs = true;
};
const handleCancelStu = () => {
editBeginClass.value = false
state.cstm_hs = false;
state.attach = "";
state.kk_eidt = false;
state.xjkkradioV1 = false;
state.xjkkradioVEnd = false;
state.xjkkradioVEndTime = null;
state.completeType = "";
// state.xjkkinputV1 = "";
state.onceName = "";
state.scoreParams = '';
state.xjkkinputV2 = "";
state.duration = "";
// state.xjkkinputV3 = [];
state.xjkkinputV4 = null;
state.checked1 = false;
state.checked4 = false;
state.EditTestId = null;
state.assessmentId = null;
state.assessmentName = "";
state.workInfo = {};
state.examInfo = {};
state.EditWorkId = null;
state.beforeValue = null; //考勤 开始前
state.afterStartValue = null; //考勤 开始后
removePG();
};
//保存开课
const handleSureStu = async () => {
console.log("编辑的状况 state.kk_eidt",state.kk_eidt)
console.log("编辑的状况 state.examInfo",state.examInfo)
if(editBeginClass.value){
message.info('讲师费已进入审批阶段,无法编辑')
return
}
let startTime,
endTime = 0;
if (state.xjkkinputV3.length!=0) {
startTime = dayjs(state.xjkkinputV3[0]).format("YYYY-MM-DD HH:mm"); //parseInt(state.xjkkinputV3[0].$d.getTime() / 1000);
endTime = dayjs(state.xjkkinputV3[1]).format("YYYY-MM-DD HH:mm"); //parseInt(state.xjkkinputV3[1].$d.getTime() / 1000);
}
const offName = await validateName({
name: state.xjkkinputV1,
type: 5,
id: state.offcoursePlanId,
}).then((res) => {
console.log(res, res.data.data);
return res.data.data === 1;
});
console.log("校验重复", offName);
if (offName) {
message.destroy();
return message.warning("开课名称重复,请重新填写");
}
let t = state.signCom ? "1," : "0,";
let p = state.comLeave ? "1" : "0";
let type = t.concat(p);
let postData = {
offcourseId: state.offcourseId,
id: state.offcoursePlanId, //开课ID,不传代表新增
address: state.xjkkinputV2,
// duration: state.duration,
duration:state.duration ? state.duration : durationText.value,
applyFlag: state.checked1 ? 1 : 0,
attach: state.attach,
beginTime: startTime,
completeType: type,
endTime: endTime,
evalFlag: Number(state.assessmentId) > 0 && state.checked4 ? 1 : 0,
assessmentId: state.checked4==1?Number(state.assessmentId):0,
testId: state.examInfo.examinationName ? state.EditTestId : null,
homeWorkId: state.EditWorkId,
name: state.xjkkinputV1,
signFlag: state.xjkkradioV1 ? 1 : 0, //是否允许未报名的签到:1是0否
autoGraduateEnabled: state.xjkkradioVEnd ? 1 : 0,
autoGraduateDays: state.xjkkradioVEndTime,
// signWordFlag: state.xjkkradioV1 === 1 ? 1 : 0, //签到是否需要口令:1是0否
// teacherId: state.member.value,
// teacher: state.member.name,
offteachers: state.offteachers,
workInfo: state.workInfo, //提交的作业信息
//提交的考试信息
beforeStart: state.beforeValue, //考勤 开始前
afterStart: state.afterStartValue, //考勤 开始后
score: state.scoreParams,
};
if(state.kk_eidt){
//编辑
postData.examInfo = state.examInfo;
}else{
//新建
postData.examInfo = state.examInfo;
postData.examInfo.examinationTestId = null;
}
console.log("postData gxdata data" ,postData);
if(!postData.name){
return message.error("请输入开课名称");
}
if(!state.xjkkinputV3[0]){
return message.error("开始时间未填写");
}
if(!state.xjkkinputV3[1]){
return message.error("结束时间未填写");
}
if(durationText.value<0){
return message.error("结束时间不能小于开始时间,请重新填写");
}
if(state.offteachers.some(item => !item.teacherName)){
return message.error("请填写教师名称和设置权重");
}
inputWeightChange()
if(state.offteachers.length==1&& totalWeightSum.value!=100){
message.error('单名教师您设置的权重应该是100%')
return
}else if(state.offteachers.length>1&& totalWeightSum.value!=100){
message.error('多名教师权重合计值为100%')
return
}
const teacherNames = new Set(state.offteachers.map(item => item.teacherName));
if (teacherNames.size !== state.offteachers.length) {
message.error('教师重复,请检查');
return;
}
if(state.offteachers.some(item => item.weight==0)){
message.error('权重值不能为0%')
return
}
if(state.xjkkradioVEnd && (state.xjkkradioVEndTime==null||state.xjkkradioVEndTime==''||state.xjkkradioVEndTime<=0)){
message.error('请填写结业时间')
return
}
if(state.checked4 && (!state.assessmentId || state.assessmentId == '0' || state.assessmentId == 'null')){
return message.error('请选择评估');
}
if(!state.xjkkradioVEnd){
state.xjkkradioVEndTime = null
}
console.log(postData,'传输的数据')
// if(!postData.duration){
// return message.error("请输入持续时间");
// }
state.addLoading = true;
editPlan(postData)
.then((res) => {
if(res.data.code == 200){
handleSearchTable();
handleCancelStu();
rest();
}else{
message.error(res.data.msg)
}
state.addLoading = false;
})
.catch((err) => {
handleSearchTable();
message.destroy()
message.error(err.data.msg)
state.addLoading = false;
console.log(err);
});
state.cstm_hs = false;
};
let editBeginClass = ref(false)
//编辑开课
const handelEditStu = async (item) => {
console.log("gx handelEditStu item",item)
nums.value = 0
editBeginClass.value = false
if (item.expenseStatus && item.expenseStatus !== 'A10' && item.expenseStatus !== 'S00') {
editBeginClass.value = true
console.log(editBeginClass.value);
}
state.offcourseId = item.offcourseId;
state.itemType = item.type;
state.offcoursePlanId = item.id;
if (item.homeWorkId) {
queryWorkDetailById({ workId: item.homeWorkId }).then(
(res) => (state.workInfo = res.data.data)
);
}
if (item.testId) {
queryExaminationDetailById({ examinationId: item.testId }).then(
(res) => (state.examInfo = res.data.data)
);
}
// if(item.evalFlag){
// queryAssessmentDetailList({assessmentId:item.assessmentId }).then(
// (res) => (state.examInfo = res.data.data)
// );
// }
console.log("获取面授课开课详情", item);
state.xjkkinputV2 = item.address;
state.duration = item.duration;
state.checked1 = item.applyFlag === 1 ? true : false;
state.attach = item.attach;
state.xjkkinputV3 = [
dayjs(item.beginTime, "YYYY-MM-DD HH:mm"),
dayjs(item.endTime, "YYYY-MM-DD HH:mm"),
];
options4CurId.value = item.teacherId;
// (state.regisCom = item.completeType.split(",")[0] == "1" ? true : false),
(state.signCom = item.completeType.split(",")[0] == "1" ? true : false),
(state.comLeave =
item.completeType.split(",")[1] == "1" ? true : false),
(state.checked4 = item.evalFlag === 1 ? true : false);
state.assessmentName = item.assessmentName;
state.assessmentId = String(item.assessmentId);
state.EditTestId = Number(item.testId);
state.EditWorkId = String(item.homeWorkId);
state.xjkkinputV1 = item.name;
state.onceName = item.name;
state.scoreParams = item.score;
state.beforeValue = item.beforeStart; //考勤 开始前
state.afterStartValue = item.afterStart; //考勤 开始后
state.xjkkradioVEndTime = item.autoGraduateDays;
if (item.signFlag === 1) {
//是否允许未报名的签到:1是0否
state.xjkkradioV1 = true;
}
if(item.autoGraduateEnabled === 1){
state.xjkkradioVEnd = true;
}
// state.member = { value: item.teacherId, name: item.teacher };
state.offteachers = [...item.offteachers]
state.cstm_hs = true;
state.kk_eidt = true;
};
const columnFun = (itm) => {
console.log("itm", itm);
//新加
state.stuColumns = [
// {
// title: "岗位",
// width: "100px",
// dataIndex: "studentJobName",
// key: "7",
// align: "center",
// customRender: (text) => {
// return (
// <div class="racona">
// <span>
// {text && text.record.studentJobName
// ? text.record.studentJobName
// : "-"}
// </span>
// </div>
// );
// },
// },
// {
// title: "Band",
// width: "80px",
// dataIndex: "studentBandDesc",
// key: "7",
// align: "center",
// ellipsis: true,
// customRender: (text) => {
// return (
// <div class="racona">
// <span>
// {text.record.studentBandDesc ? text.record.studentBandDesc : "-"}
// </span>
// </div>
// );
// },
// },
{
title: "报名状态",
width: "60px",
dataIndex: "status",
key: "5",
align: "center",
customRender: ({ record }) => {
switch (String(record.status)) {
case "0":
return "审核通过";
case "1":
return "待审核";
case "2":
return "审核拒绝";
}
},
},
{
title: "签到状态",
width: "60px",
dataIndex: "signstatus",
key: "7",
align: "center",
customRender: ({ record }) =>
record.signStatus ? "已签到" : "未签到",
},
{
title: "评估状态",
width: "60px",
dataIndex: "evastatus",
key: "8",
align: "center",
customRender: ({ record }) =>
state.isAssessmentId&&state.isAssessmentId!='0' ? record.assessmentStatus?"已评估" : "未评估":'-',
},
{
title: "评分",
width: "60px",
dataIndex: "studentScore",
key: "8",
align: "center",
ellipsis: true,
customRender: ({ record }) => {
return (
<div class="racona">
{record.assessmentScore && record.assessmentScore!=0 && record.assessmentScore!=-1 ? record.assessmentScore?.toFixed(2) : "-"}
</div>
);
// switch (String(record.status)) {
// case "0":
// return (
// <span
// style={{ color: "#4EA6FF", cursor: "pointer" }}
// onClick={() => {
// handlJoinStu(record);
// }}
// >
// 成绩录入
// </span>
// );
// case "1":
// return "-";
// case "2":
// return "-";
// }
},
},
// {
// title: "作业成绩",
// width: "8%",
// dataIndex: "workScore",
// key: "7",
// align: "center",
// customRender: ({ record }) => {
// return (
// <div class="racona">
// {record.workStatus? record.workScore?<span>{record.workScore || '-'}</span>:
// <span style={{ color: "#4EA6FF", cursor: "pointer" }} onClick={() => handlJoinStu(record)}>
// 成绩录入
// </span>
// : <span>-</span>
// }
// </div>
// );
// // switch (String(record.status)) {
// // case "0":
// // return (
// // <span
// // style={{ color: "#4EA6FF", cursor: "pointer" }}
// // onClick={() => {
// // handlJoinStu(record);
// // }}
// // >
// // 成绩录入
// // </span>
// // );
// // case "1":
// // return "-";
// // case "2":
// // return "-";
// // }
// },
// },
{
title: "作业状态",
width: "60px",
dataIndex: "workStatus",
key: "5",
align: "center",
customRender: ({ record }) => {
// switch (String(record.workStatus)) {
// case "null":
// return "未提交";
// case "0":
// return "未提交";
// case "1":
// return "已提交";
// case "2":
// return "未提交";
// }
const status = String(record.workStatus);
if (state.isHomeWorkId) {
return ["null", "0", "2"].includes(status) ? "未提交" : "已提交";
} else {
return '-';
}
},
},
{
title: "考试成绩",
width: "60px",
dataIndex: "examinationScore",
key: "8",
align: "center",
customRender: ({ record }) =>
record.examinationScore ? record.examinationScore : "-",
},
{
title: "结业状态",
width: "60px",
dataIndex: "completionStatus",
key: "8",
align: "center",
customRender: ({ record }) => {
return (
<div>
{
record.signStatus == 1 && record.completionStatus != 1 && record.completionStatus != 2 ? (
<div
style={{ color: "#4EA6FF", cursor: "pointer" }}
onClick={() => {
handleOverStu(record);
}}
>
结业
</div>
) : record.completionStatus == 1 ? (
<div>已结业</div>
) : record.completionStatus == 2 ?(
<div>不结业</div>
) : (
<div>-</div>
)}
</div>
);
},
},
];
// if (itm.courseScore !== -1) {
// let obj = {
// title: "评分",
// width: "8%",
// dataIndex: "studentScore",
// key: "8",
// align: "center",
// };
// state.stuColumns.splice(6, 0, obj);
// }
};
const handelGuan = (itm) => {
console.log("开课信息", itm);
state.offcourseId = itm.offcourseId;
state.offcoursePlanId = itm.id;
state.studentId = itm.studentId;
state.studentItem = itm;
state.currentPlanItem = itm;
state.newCourseName = itm.name;
state.isAssessmentId = itm.assessmentId;
state.isHomeWorkId = itm.homeWorkId;
console.log(89877766666);
console.log(state.currentPlanItem);
state.sm_hs = true;
// getTableDate2();
state.homeWorkId = itm.homeWorkId;
columnFun(itm);
};
const sm_exit = () => {
state.sm_hs = false;
state.hideshow = true;
state.tableData7 = [];
};
const clear_valueE1 = (value) => {
state.bs_hs = false;
if (value != "") {
state.valueE1 = "";
}
};
const clear_valueE2 = () => {
state.valueE2 = "";
};
const clear_xjkkradioV1 = (value) => {
if (value != "") {
state.xjkkradioV1 = false;
}
};
const clear_xjkkradioV2 = (value) => {
if (value != "") {
state.xjkkradioV2 = "";
}
};
const clear_jyradioV1 = (value) => {
if (value != "") {
state.jyradioV1 = "";
}
};
const qr_exit = () => {
state.QR_hs = false;
state.qrQR_hs = false;
state.olQR_hs = false;
state.ftQR_hs = false;
state.ftsQR_hs = false;
state.vipftQR_hs = false;
state.addLoading = false;
};
const rg_exit = () => {
state.rg_hs = false;
state.addLoading = false;
};
const graduate_exit = () => {
state.graduate_hs = false;
state.addLoading = false;
state.jyradioV1 = 1;
};
const agreereject_exit = () => {
state.agreereject_hs = false;
state.agreestudy_hs = false;
state.rejectstudy_hs = false;
state.addLoading = false;
};
const delete_exit1 = () => {
state.delete_hs = false;
state.del_hs = false;
state.del_hs_stu = false;
state.submit_hs = false;
state.back_hs = false;
state.push_hs = false;
state.copy_hs = false;
state.nouse_hs = false;
state.rg_hs = false;
state.graduate_hs = false;
state.addLoading = false;
state.jyradioV1 = 1;
};
const handleRejectExit = (id, index, record) => {
dialog({
content: "确定撤回吗?",
ok: () => {
handle({ offcourseId: id, type: 0 }).then(res=>{
message.success("撤回成功");
record.publishStatus ? (state.tableData1[index].publishStatus = 0) : (state.tableData1[index].auditStatus = 0);
}).catch(err=>{
message.destroy();
message.error(err.data.msg);
})
},
});
};
const handleJoin = async () => {
state.lrcj_inputV1 || message.error("请输入成绩");
if (state.rg_hs) {
if (state.piliang) {
api1.updateStudent({
workScore: state.lrcj_inputV1,
workId: state.homeWorkId,
studentId: state.studentId,
});
getTableDate2();
delete_exit1();
} else {
api1
.updateStudent({
workScore: state.lrcj_inputV1,
workId: state.homeWorkId,
studentId: state.studentId,
})
.then((res) => {
console.log("成绩录入", res);
if (res.data.code === 200) {
// getTableDate2();
state.isgetStudent = true;
delete_exit1();
state.lrcj_inputV1 = "";
state.scoreId = null;
}
})
.catch((err) => {
console.log("录入失败", err);
});
}
}
};
const handleJie = async () => {
if (state.graduate_hs) {
// state.studentItem.id
// console.log("state.studentItem.id", state.studentItem.id);
api1
.batchUpdateStatus({
completionStatus: state.jyradioV1,
ids: [state.studentItem?.id],
// status: 1,
})
.then((res) => {
if (res.data.code === 200) {
// getTableDate2();
state.tableStudentChange.getStuList()
delete_exit1();
}
});
}
};
//确认复制
const handleAgreeTrue = async () => {
if (state.agreestudy_hs) {
handleStudent({
offcoursePlanId: state.offcoursePlanId,
score: "",
studentIds: [state.studentId],
type: 3,
}).then((res) => {
if (res.data.code === 200) {
getTableDate2();
delete_exit1();
state.addLoading = false;
}
});
}
if (state.rejectstudy_hs) {
handleStudent({
offcoursePlanId: state.offcoursePlanId,
score: "",
studentIds: [state.studentId],
type: 4,
}).then((res) => {
if (res.data.code === 200) {
getTableDate2();
delete_exit1();
}
});
}
};
//确认复制课程 操作
const handleDeleteExit = async () => {
if (state.del_hs) {
if (state.offcourseId && state.offcoursePlanId && state.studentId) {
handleStudent({
offcoursePlanId: state.offcoursePlanId,
score: "",
studentIds: [state.studentId],
type: 5,
}).then((res) => {
if (res.data.code === 200) {
getTableDate2();
delete_exit1();
}
});
} else if (state.offcourseId && state.offcoursePlanId) {
deletePlan({
offcoursePlanId: state.offcoursePlanId,
}).then((res) => {
if (res.data.code === 200) {
getTableDate3();
delete_exit1();
}else{
message.error(res.data.msg)
}
}).catch(err=>{
message.destroy()
message.error(err.data.msg)
})
} else if (state.offcourseId) {
handle({
offcourseId: state.offcourseId,
type: -1,
}).then((res) => {
if (res.data.code === 200) {
message.destroy();
message.success("删除成功");
getTableDate();
delete_exit1();
}
});
}
}
if (state.copy_hs) {
state.tableLoading = true;
if (state.offcourseId && state.offcoursePlanId) {
await copyCoursePlan({ offcoursePlanId: state.offcoursePlanId });
getTableDate3();
} else if (state.offcourseId) {
await copyCourse({ courseId: state.offcourseId });
getTableDate();
}
message.success("复制成功");
rest();
}
if (state.nouse_hs) {
state.temp.auditStatus = 0;
message.success("停用成功");
handle({ offcourseId: state.offcourseId, type: -2 });
}
if (state.submit_hs) {
state.tableLoading = true;
message.success("提交审核成功");
handle({ offcourseId: state.offcourseId, type: 1 }).then(() =>
getTableDate()
);
}
if (state.back_hs) {
state.tableLoading = true;
message.success("撤回成功");
handle({ offcourseId: state.offcourseId, type: 0 }).then(() =>
getTableDate()
);
}
if (state.useCourse) {
state.tableLoading = true;
message.success("启用成功");
handle({ offcourseId: state.offcourseId, type: 2 }).then(() =>
getTableDate()
);
}
if (state.push_hs) {
state.tableLoading = true;
message.success("发布成功");
handle({ offcourseId: state.offcourseId, type: 3 }).then(() =>
getTableDate()
);
}
delete_exit1();
};
const handleDeleteKaike = (value) => {
if (value.expenseStatus && value.expenseStatus !== 'A10' && value.expenseStatus !== 'S00') {
return message.warning("该开课已在审批流程中,不可进行删除!");
}
state.offcoursePlanId = value.id;
state.delete_hs = true;
state.del_hs = true;
};
const onSelectChange = (selectedRowKeys) => {
console.log("selectedRowKeys changed: ", selectedRowKeys);
state.selectedRowKeys = selectedRowKeys;
};
const faceManageChange = (e) => {
state.faceManageTab = e;
};
const openMessage = () => {
console.log(122222);
let startTime = "";
let endTime = "";
if (state.projectTime) {
startTime = parseInt(
new Date(state.projectTime[0].$d).getTime() / 1000
);
endTime = parseInt(new Date(state.projectTime[1].$d).getTime() / 1000);
}
console.log(startTime, endTime);
// list({
// pageNo: 1,
// pageSize: 100000,
// auditStatus: state.auditStatus,
// // categoryId: state.categoryId,
// sysTypeId: state.sysTypeId,
// projectName: state.projectName,
// name: state.name,
// createName: state.createName,
// endTime: endTime,
// beginTime: startTime,
// }).then(res=>{
// let list = res.data.data.rows.map(s=>{
// s.contentTxt = findClassFullName(sysTypeOptions.value, s.sysTypeId) || "-";
// s.typeName = '面授'
// s.publishStatusText = s.publishStatus === 0?'未发布':'已发布'
// s.statusText = s.status === 0?'否':'是'
// s.auditStatusText = s.auditStatus === 0?'未提交': s.auditStatus === 1?'待审核':s.auditStatus === 2?'已审核':s.auditStatus === -1?"审核未通过":''
// return s
// })
// console.log(list)
// let heads = [
// { header: '名称', key: 'name', width: 18 },
// { header: '类型', key: 'typeName', width: 10 },
// { header: '归属路径图', key: 'routerName', width: 13 },
// { header: '归属项目', key: 'projectName', width: 13 },
// { header: '内容分类', key: 'contentTxt', width: 20 },
// // { header: '一级分类', key: 'firstLevelCategory', width: 10 },
// // { header: '二级分类', key: 'secondLevelCategory', width: 10 },
// // { header: '三级分类', key: 'thirdLevelCategory', width: 10 },
// { header: '开课次数', key: 'planCnt', width: 10 },
// { header: '学习人数', key: 'studentCnt', width: 10 },
// { header: '评分', key: 'score', width: 10 },
// { header: '状态', key: 'auditStatusText', width: 20 },
// { header: '是否发布', key: 'publishStatusText', width: 10 },
// { header: '创建人', key: 'createName', width: 10 },
// { header: '创建时间', key: 'createTime', width: 22 },
// { header: '上线时间', key: 'publishTime', width: 22 },
// { header: '是否停用', key: 'statusText', width: 10 },
// ]
// commonExport(heads,list,"课程导出")
// })
window.open(
`${process.env.VUE_APP_BASE_API}/admin/offcourse/export?pageNo=${
state.currentPage1
}&pageSize=${state.pageSize1}&auditStatus=${
state.auditStatus ? state.auditStatus : ""
}&sysTypeId=${state.sysTypeId ? state.sysTypeId : ""}&projectName=${
state.projectName ? state.projectName : ""
}&name=${state.name ? state.name : ""}&createName=${
state.createName ? state.createName : ""
}&endTime=${endTime ? dayjs(new Date(state.projectTime[1].$d)).format('YYYY-MM-DD') : ""}&beginTime=${
startTime ? dayjs(new Date(state.projectTime[0].$d)).format('YYYY-MM-DD') : ""
}&type=3`
);
// {
// /* exportP({
// pageNo: state.currentPage1,
// pageSize: state.pageSize1,
// auditStatus: state.auditStatus,
// categoryId: state.categoryId,
// projectName: state.projectName,
// name: state.name,
// createName: state.createName,
// endTime: endTime,
// beginTime: startTime,
// }).then((res) => {
// if (res.data.code === 200) {
// message.success("导出成功");
// }
// }); */
// }
};
//编辑面授课
const handleEdit = async (itm, type) => {
if (type === "1") {
return;
}
// console.log(itm)
state.offcourseId = itm.id;
const item = await detail({
offcourseId: Number(state.offcourseId),
}).then((res) => {
if (res.data.code === 200) return res.data.data;
});
state.statusJuJue = Number(item.auditStatus) === -1 ? 1 : 0;
if (Number(item.auditStatus) === 2 && Number(item.status) === 1) {
state.statusTingQi = 1;
}
if (Number(item.auditStatus) === 2 && Number(item.status) === 0) {
state.statusTingQi = 0;
}
state.qdms_inputV1 = item.name;
// state.imageUrl = item.picUrl;
state.feng_mian_1 = item.picUrl;
state.qdms_inputV2 = item.targetUser;
state.qdms_inputV3 = item.meaning;
state.fen_lei = String(item.categoryId);
state.chang_jin = String(item.sceneId);
state.tags_val = item.tips ? item.tips.split(",") : [];
//state.qdms_inputV5 = item.teacherId;
// state.teacher = item.teacher;
// state.teacherId = item.teacherId;
state.qdms_inputV6 = item.intro;
// state.member = { value: item.teacherId, name: item.teacher };
// state.offteachers = [...item.offteachers]
if (item.attach == "") {
state.imgList = [];
} else {
if (item.attach.indexOf(",")) {
const arr = item.attach.split(",");
arr.forEach((item) => {
state.imgList.push({ img: item });
});
} else {
state.imgList = [{ img: item.attach }];
}
}
valueHtml.value = item.outline;
// state.ft_hs = true;
CourseModalRef.value.visibleOpen(state.offcourseId, null);
state.ft_eidt = true;
};
// handleTagChange
const handleTagChange = () => {
if (state.tags_val_single) {
state.tags_val.push(state.tags_val_single);
}
state.tags_val_single = "";
};
const handleTagClose = (index) => {
state.tags_val.splice(index, 1);
};
// 预览弹框 开启和关闭
const ft_exit_see = () => {
state.lookCourseModal = false;
};
const handleLook = async (itm, type) => {
if (type === "1") {
return;
}
state.offcourseId = itm.id;
const item = await detail({
offcourseId: Number(state.offcourseId),
}).then((res) => {
if (res.data.code === 200) return res.data.data;
});
state.lookCourseModal = true;
item.attach = item.attach == "" ? [] : item.attach.split(",");
state.faceDetailObj = item;
console.log("获取查看信息", item);
};
// const handleTea = async () => {
// console.log("item22224444");
// // const item = await getMemberInfo({
// // pageNo: state.pageSizeTea1,
// // }).then((res) => {
// // if (res.data.code === 200) return res.data.data;
// // console.log("item2222222");
// // console.log(item);
// // });
// };
const handleDelete = (id) => {
dialog({
content: "确定删除该课程吗?",
ok: async () => {
await handle({ offcourseId: id, type: -1 }).then(res=>{
message.success("删除成功");
state.tableLoading = true;
getTableDate();
}).catch(err=>{
message.destroy()
message.error(err.data.msg)
})
},
});
};
const handleCopy = async (id) => {
console.log("复制Id", id);
dialog({
content: "确定复制该课程吗?",
ok: async () => {
message.success("复制成功");
state.tableLoading = true;
await copyCourse({ courseId: id });
getTableDate();
},
});
};
const handleSubmit = (id, index) => {
dialog({
content: "确定提交审核吗?",
ok: () => {
message.success("提交成功");
state.tableData1[index].auditStatus = 1;
handle({ offcourseId: id, type: 1 });
},
});
};
const handlePush = (id, index) => {
dialog({
content: "确定发布该课程吗?",
ok: () => {
message.success("发布成功");
state.tableData1[index].publishStatus = 1;
handle({ offcourseId: id, type: 3 });
},
});
};
const handleCopyP = async (itm) => {
console.log(itm);
state.offcourseId = itm.offcourseId;
state.offcoursePlanId = itm.id;
state.delete_hs = true;
state.copy_hs = true;
};
const handleStop = (record) => {
dialog({
content: "确定停用该课程吗?",
ok: () => {
handle({ offcourseId: record.id, type: -2 }).then(res=>{
console.log(res,'handleStop')
message.success("停用成功");
record.status = 0;
}).catch(err=>{
message.destroy()
message.error(err.data.msg)
})
},
});
};
const handleOpen = (record) => {
dialog({
content: "确定启用该课程吗?",
ok: () => {
message.success("启用成功");
record.status = 1;
handle({ offcourseId: record.id, type: 2 });
},
});
};
const handleStart = (item, type) => {
console.log(item);
if (type === "1") {
return;
}
state.offcourseId = item.id;
state.newCourseName = item.name;
state.permissions = item.permissions;
// getTableDate3(1);
handleRestTable()
state.stm_hs = true;
};
const handelChangePage222 = (page, pageSize) => {
state.currentPage222 = page;
state.pageSize222 = pageSize;
getCourseStudentList();
};
const handelChangePage22 = (page, pageSize) => {
state.currentPage22 = page;
state.pageSize22 = pageSize;
// getTableDate33();
};
const handelChangePage2 = (page, pageSize) => {
state.currentPage2 = page;
state.pageSize2 = pageSize;
getTableDate3(1);
};
const handleSearchTable = () => {
console.log("handleSearchTable");
console.log(state.kk_inputV1);
console.log(state.kk_inputV2);
console.log(state.selectTime);
// state.pageSize222 = 10
// state.currentPage1 = 1
// getTableDate();
state.currentPage2 = 1;
getTableDate3();
};
const handleRestTable = () => {
state.kk_inputV0 = '';
state.kk_inputV1 = "";
state.kk_inputV2 = "";
state.selectTime = "";
state.currentPage2 = 1;
state.tableDataTotal2 = [];
// state.pageSize222 = 10
// state.currentPage1 = 1
// getTableDate();
getTableDate3();
};
const handelChangePage3 = (page, pageSize) => {
state.currentPage3 = page;
state.pageSize3 = pageSize;
getTableDate2();
};
const handleSearchStu = () => {
console.log(state.xygl_inputV1);
getTableDate2();
};
const handleRestStu = () => {
state.xygl_inputV1 = "";
getTableDate2();
};
const beforeUpload3 = (file) => {
const fileType = [
"jpg",
"jpeg",
"png",
"gif",
"pdf",
"ppt",
"pptx",
"doc",
"docx",
"xls",
"xlsx",
"zip",
];
if (!fileType.includes(file.name.split(".")[1])) {
message.error(
"仅支持.pdf,.ppt,.pptx,.doc,.docx,.xls,.xlsx,.jpg,.jpeg,.png,.gif,.zip格式!"
);
return false;
}
const formData = new FormData();
formData.append("file", file);
console.log(file);
fileUp(formData).then((res) => {
if (res.data.code === 200) {
// state.filesList.push({
// img: res.data.data,
// name: file.name,
// size: file.size,
// });
// console.log(state.filesList);
console.log(res.data.data);
state.filesList.push([res.data.data]);
// state.hasImgName = res.data.data;
}
});
return false;
};
// 管理开课
const handleGuan22 = (item) => {
console.log("点击面授课管理", item);
// if (String(item.courseform) === "1") {
// return;
// }
// if (String(item.courseform) === ("1" || "线上")) {
// state.om_1 = true;
// state.ft_1 = false;
// } else if (String(item.courseform) === ("2" || "面授")) {
// state.om_1 = true;
// state.ft_1 = true;
// }
state.om_1 = true;
state.ft_1 = true;
state.manageStuLoading = true;
state.permissions = item.permissions;
state.createId = item.createId;
console.log(787666, item);
state.faceClassification = item.contentTxt;
state.faceStatus = item.status;
state.currentFaceId = item.id;
getCourseStudentList();
state.newCourseName = item.name;
};
// 获取开课管理里的学员
function getCourseStudentList() {
console.log("开课管理学员搜索参数", {
pageNo: state.currentPage222,
pageSize: 10,
status: state.gl_selectV2,
studentName: state.gl_inputV2,
id: state.currentFaceId,
});
apis
.GetCourseStudent({
pageNo: state.currentPage222,
pageSize: 10,
status: state.gl_selectV2,
studentName: state.gl_inputV2,
id: state.currentFaceId,
})
.then((res) => {
console.log("获取开课管理学员信息", res);
// tableData3 tableDataTotal222 currentPage222 handelChangePage222
state.tableData3 = res.data.data.records;
state.tableDataTotal222 = res.data.data.total;
state.manageStuLoading = false;
})
.catch((err) => {
console.log(err);
state.manageStuLoading = false;
});
}
const handlePostSure = (obj) => {
console.log("处理后参数,直接解构使用");
console.log(obj);
addStudent({
offcourseId: Number(state.offcourseId),
offcoursePlanId: Number(state.offcoursePlanId),
...obj,
}).then((res) => {
console.log(res);
if (res.data.code === 200) {
state.viewpowervisible = false;
getTableDate2();
}
});
};
const getdateToDateFn = (val) => {
return getdateToDate(val * 1000);
};
const getdateToTimeFn = (val) => {
return getdateToTime(val * 1000);
};
//提交审核
const reviewClick = () => {
console.log("ft_eidt", state.ft_eidt);
// handlePush("review");
/*
if (state.ft_eidt) {
//编辑面授课
submitReview();
}
if (!state.ft_eidt) {
//shouke
handlePush("review");
}
*/
};
const submitReview = (id) => {
state.addLoading = true;
if (id == "") {
return message.error("请先完成保存");
}
let obj = {
offcourseId: id ? id : state.offcourseId,
type: 1,
};
console.log("提交审核参数", obj);
handle(obj).then((res) => {
console.log("提交审核成功", res.data);
if (res.data.code === 200) {
ft_exit_0();
rest();
getTableDate();
state.addLoading = false;
}
});
};
//授权
//权限名单
const showPrower = (record) => {
console.log("权限名单", record);
state.selectCourseId = record.offcourseId;
state.corpowerlistvisible = true;
};
//归属权
const showOwnPrower = (record) => {
console.log("归属权", record);
state.selectCourseId = record.offcourseId;
state.ownpowervisible = true;
};
//查看权
const showViewPrower = (record) => {
console.log("查看权", record);
state.selectCourseId = record.offcourseId;
state.authClassify = 1;
state.viewpowervisible = true;
};
//管理权
const showManagePrower = (record) => {
console.log("管理权", record);
state.selectCourseId = record.offcourseId;
state.shipType = 1;
state.authClassify = 2;
state.viewpowervisible = true;
};
//添加权限
watch(
() => state.addAuthList,
(res) => {
console.log("res", res, state.addAuthList);
if (state.authClassify === 1 || state.authClassify === 2) {
let obj = {
type: 3,
tag:
state.authClassify === 1
? 3
: state.authClassify === 2
? 4
: null,
opt: 3,
deptList: res[1],
groupList: res[2],
refId: state.selectCourseId,
pageNo: 20,
pageSize: 1,
studentList: res[0],
keyWord: "",
};
console.log("obj", obj);
api1
.optionAuthPerm(obj)
.then((res) => {
console.log("添加授权成功", res);
message.success("添加授权成功");
})
.catch((err) => {
console.log("添加授权失败", err);
});
}
}
);
//添加学员
watch(
() => state.addAuthList,
(res) => {
console.log("res", res, state.addStudentList);
if (state.authClassify === 3) {
let obj = {
deptList: res[1],
groupList: res[2],
offcourseId: state.offcourseId,
offcoursePlanId: state.offcoursePlanId, //开课id
studentList: res[0],
};
console.log("obj", obj);
api1
.addStudentCourse(obj)
.then((res) => {
console.log("添加学员成功", res);
message.success("添加学员成功");
getTableDate2();
})
.catch((err) => {
console.log("添加学员失败", err);
});
}
}
);
const range = (start, end) => {
const result = [];
for (let i = start; i < end; i++) {
result.push(i);
}
return result;
};
const closeOnlineCoursevisible = () => {
console.log("执行");
getTableDate();
};
const disabledDate = (current) => {
// current && current < dayjs(state.xjkkinputV3[0])
};
const disabledDateTime = () => {
// const dateOnlyStart = new Date(state.xjkkinputV3[0].split(' ')[0]);
// const dateOnlyEnd = new Date(state.xjkkinputV3[1].split(' ')[0]);
// if(dateOnlyStart.getTime()==dateOnlyEnd.getTime()){
// const currentMinute = dayjs(state.xjkkinputV3[0]).minute();
// return {
// disabledHours: () => range(0, dayjs(state.xjkkinputV3[0]).hour()).splice(0, dayjs(state.xjkkinputV3[0]).hour()),
// disabledMinutes: () => range(0, currentMinute+1).splice(0, currentMinute+1),
// };
// }
};
function auditStudent(record) {
auditStudentStatus(record);
}
//二维码
const qrcodeVisible = (record, type) => {
// `${location.protocol}//${location.host}${import.meta.env.VUE_APP_BASE_API}/stu/project/redirectDetail?courseId=${record.id}`
state.codevisible = true;
let teacherNames = record.offteachers?.filter(teacher => teacher.teacherName !== null).map(teacher => teacher.teacherName);
state.codeInfo = {
title: type == 1 ? "【课程】二维码" : type == 2 ? "【签到】二维码" : "【评估】二维码",
name: record.name,
teacherName: teacherNames.length > 3 ? teacherNames.slice(0,3).join(',')+'...' : teacherNames.join(','),
url:
type == 1
? process.env.VUE_APP_BASE_API +
`/stu/project/redirectDetail?courseId=${record.id}`
: type == 2 ? process.env.VUE_APP_BASE_API +
`/admin/student/studentSign?taskId=${
record.id
}&taskType=${2}&type=${3}&openCourseId=${
record.id
}` : `${location.protocol}//${location.host}/student-h5/investigatpage?id=${record.id}&type=3&infoId=${record.id}&courseId=${record.assessmentId}&chapterOrStageId=0&level=${record.name}`,
titleTeacherName: moreLine(record.offteachers),
};
console.log("codeInfo", state.codeInfo, record);
state.codeIndex = 0;
state.codeType = type;
};
return {
...toRefs(state),
sysTypeOptions,
findClassFullName,
CourseModalRef,
auditStudent,
getdateToDateFn,
moment,
disabledDate,
disabledDateTime,
getdateToTimeFn,
handlePostSure,
handleDeleteKaike,
handleDel2,
handelEditStu,
handelGuan,
beforeUpload3,
handleSearchStu,
handleRestStu,
handelChangePage2,
handelChangePage22,
handelChangePage222,
handelChangePage3,
handleSearchTable,
handleRestTable,
handleSearchTable2,
handleSearchTable3,
reseatSearchTable3,
handleGuan22,
handleStart,
handleCopyP,
handleCopy,
handleSubmit,
handlePush,
handleStop,
handleOpen,
handleEdit,
handleDelete,
changevalue,
moreLine,
columns2,
columns4,
columns6,
columns7,
options1,
options11,
options2,
options3,
options4,
optionsUrl,
of_hShow,
of_exit1,
of_exit,
hideShow,
bs_hShow,
expectOnline,
createft,
ft_exit,
ft_exit_1,
ft_exit_0,
om_exit,
ckxq_hs,
durationText,
nums,
ftsr_exit,
stm_exit,
ft_exit_see,
handleTagChange,
handleTagClose,
createkk,
handleCancelStu,
handleSureStu,
sm_exit,
clear_valueE1,
clear_valueE2,
clear_xjkkradioV1,
clear_xjkkradioV2,
clear_jyradioV1,
qr_exit,
rg_exit,
graduate_exit,
agreereject_exit,
delete_exit1,
handleRejectExit,
handleAgreeTrue,
handleJoin,
handleJie,
handleDeleteExit,
onSelectChange,
faceManageChange,
openMessage,
showStuAdd,
showDrawerAddTest,
showDrawerAddHomework,
editorRef,
valueHtml,
mode: "simple", // 或 'simple'
toolbarConfig,
editorConfig,
handleCreated,
handelChangePage1,
handleSearch1,
handleRest1,
showAssessment,
removePG,
getCheckedAss,
beforeUpload,
beforeUpload2,
handleDel,
checkPer,
checkOwner,
handleSucessStu,
handleRejectStu,
handleDeleteStu,
handlJoinStu,
handleOverStu,
onSelectChange7,
handleAllJion,
handleAllover,
handleAllSuc,
handleAllReject,
handleExportStu,
handleChangeTea1,
handelChangePageTea1,
handleChangeTea2,
handelChangePageTea2,
submitReview,
reviewClick,
showPrower,
showOwnPrower,
showViewPrower,
showManagePrower,
closeOnlineCoursevisible,
handlelookMs,
handleLook,
logW,
logT,
qrcodeVisible,
// timeChange,
editBeginClass,
onDateSelect,
onOkStart,
openStart,
onBlurStart,
onFocusStart,
// timeChangeEnd,
onDateEnd,
onOkEnd,
onFocusEnd,
openEnd,
onBlurEnd,
inputWeightChange,
totalWeightSum,
inputAdd,
inputRemove,
downStudent,
downPin
};
},
});
</script>
<style lang="scss">
.ant-tooltip-inner{
color: #000 !important;
}
.daochu {
width: 14px;
height: 14px;
background: url("../../assets/images/coursewareManage/export.png") no-repeat;
background-size: 100%;
margin-left: 8px;
cursor: pointer;
}
.ant-drawer-body{
padding: 0;
}
.ant-table-cell-fix-right {
width: 250px !important;
}
.addTimeBox {
position: relative;
display: flex;
align-items: center;
.addTime {
position: absolute;
z-index: 10;
margin-left: 10px;
color: rgba(0, 0, 0, 0.4);
}
.ant-picker {
padding-left: 85px;
}
.ant-picker-range .ant-picker-active-bar {
margin-left: 85px;
}
}
.aeLoading {
z-index: 100000;
}
.courseManage {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
position: relative;
.filter {
margin-left: 35px;
margin-right: 35px;
margin-top: 30px;
display: flex;
justify-content: space-between;
flex-wrap: wrap;
.filterItems {
display: flex;
flex-wrap: wrap;
.pathnameInp {
margin-right: 20px;
margin-bottom: 20px;
}
.select {
margin-right: 20px;
margin-bottom: 20px;
}
.addTimeBox {
position: relative;
display: flex;
align-items: center;
.addTime {
position: absolute;
z-index: 10;
margin-left: 10px;
color: rgba(0, 0, 0, 0.4);
}
.ant-picker {
padding-left: 85px;
}
.ant-picker-range .ant-picker-active-bar {
margin-left: 85px;
}
}
.btn {
padding: 0px 26px 0px 26px;
height: 38px;
background: #4ea6ff;
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: #ffffff;
line-height: 36px;
margin-left: 5px;
}
}
.btnn {
padding: 0px 26px 0px 26px;
height: 38px;
background: #4ea6ff;
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: #fff;
line-height: 36px;
margin-left: 5px;
}
}
.btn1 {
.search {
width: 15px;
height: 17px;
background-image: url("../../assets/images/courseManage/search0.png");
}
}
.btn1:active {
background: #0982ff;
}
.btn2:active {
background: #0982ff;
}
.btn2 {
.search {
width: 16px;
height: 18px;
background-image: url("../../assets/images/courseManage/reset0.png");
}
.daochu {
width: 16px;
height: 18px;
background-image: url("../../assets/images/coursewareManage/export1.png");
}
}
.btn1 {
.search {
background-image: url("../../assets/images/courseManage/search0.png");
}
.btnText {
color: #ffffff;
}
}
/**
.btn1:active {
background: #0982ff;
}
.btn2 {
background: rgba(64, 158, 255, 0.1);
}
.btn2:active {
background: rgba(64, 158, 255, 0.2);
}*/
}
.btns {
display: flex;
// flex-wrap: wrap;
.btn {
padding: 0px 26px 0px 26px;
height: 38px;
background: #4ea6ff;
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: #ffffff;
line-height: 36px;
margin-left: 5px;
}
}
.btn3:active {
background: #0982ff;
}
.btn3 {
.search {
width: 17px;
height: 18px;
background-image: url("../../assets/images/courseManage/add0.png");
}
.btnText {
color: #ffffff;
}
}
}
}
.tableBox {
margin: 20px 38px 30px;
th {
background-color: #eff4fc !important;
text-align: center !important;
}
.ant-table-tbody
> tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)
> td {
background: #f6f9fd;
}
.operation {
display: flex;
justify-content: right;
.fb {
display: flex;
margin-right: 20px;
.jc {
color: #4ea6ff;
font-size: 14px;
margin-left: 20px;
white-space: nowrap;
cursor: pointer;
}
}
}
.ynuse {
display: flex;
justify-content: center;
align-items: center;
.use {
cursor: pointer;
}
}
}
}
.selectonlineface {
z-index: 999;
width: 679px;
background: #ffffff;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.21);
position: absolute;
left: 50%;
top: -100%;
transform: translate(-50%, -50%);
.of_header {
position: absolute;
width: 100%;
height: 40px;
background: linear-gradient(
rgba(78, 166, 255, 0.2) 0%,
rgba(78, 166, 255, 0) 100%
);
}
.of_main {
width: 100%;
position: relative;
.ofm_header {
display: flex;
align-items: center;
padding-top: 20px;
padding-left: 26px;
font-size: 16px;
.add_icon {
width: 16px;
height: 16px;
margin-right: 10px;
background-image: url(@/assets/images/coursewareManage/add1.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%;
}
}
.ofm_body {
width: 80%;
margin: 3px auto;
.ofmb_items {
display: flex;
align-items: center;
justify-content: end;
margin: 14px auto;
.signbox {
width: 110px;
display: flex;
justify-content: end;
.sign {
width: 10px;
height: 10px;
margin-top: -3px;
margin-right: 6px;
background-size: 100% 100%;
}
}
.b_input {
flex: 1;
position: relative;
.inp_num {
position: absolute;
right: 10px;
top: 10px;
}
}
.bc_box {
display: flex;
width: 440px;
flex: 1;
.bc_boxl,
.bc_boxr {
display: flex;
align-items: center;
}
}
}
.ol_checkbox {
display: flex;
align-items: center;
justify-content: center;
margin-left: 6px;
}
.b_sub {
width: 440px;
margin-left: 110px;
.bs_header {
display: flex;
justify-content: space-between;
.b_right {
display: flex;
}
}
}
.bl_detail {
top: 24px;
}
.b_footer {
width: 100%;
margin-left: 212px;
margin-top: 25px;
margin-bottom: 20px;
display: flex;
.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;
}
}
.btn5 {
border: 1px solid rgba(64, 158, 255, 1);
color: #4ea6ff;
}
.btn6 {
background-color: #4ea6ff;
color: #ffffff;
}
}
}
}
}
.createschooltime {
z-index: 999;
width: 879px;
height: 740px;
background: #ffffff;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.21);
position: absolute;
left: 50%;
top: -100%;
transform: translate(-50%, -50%);
.cst_header {
position: absolute;
width: 100%;
height: 40px;
background: linear-gradient(
rgba(78, 166, 255, 0.2) 0%,
rgba(78, 166, 255, 0) 100%
);
}
.cst_main {
width: 100%;
max-height: 700px;
overflow-y: auto;
position: relative;
.cstm_header {
display: flex;
align-items: center;
padding-top: 20px;
padding-left: 26px;
font-size: 16px;
.add_icon {
width: 16px;
height: 16px;
margin-right: 10px;
background-image: url(@/assets/images/coursewareManage/add1.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%;
}
}
.cstm_title {
margin: 10px auto 20px 51px;
font-weight: bold;
}
.cstm_items {
display: flex;
width: 80%;
margin: auto;
align-items: center;
margin-bottom: 23px;
.teacher_input{
.ant-input-number{
width: 15%;
height: 40px !important;
border-radius: 8px !important;
border: 1px solid #C7CBD2 !important;
margin: 0 10px 0 10px;
padding-top: 3px;
}
.btn-add{
margin: 0 10px 0 10px;
}
.btn-circle{
text-align: center;
line-height: 100%;
margin-top: 5px;
.custom-icon{
font-size: 20px;
svg{
margin: auto;
}
}
span{
width: 100%;
height: 100%;
font-size: 33px;
}
}
}
.signbox {
display: flex;
justify-content: end;
width: 100px;
margin-right: 6px;
.sign {
margin-top: -5px;
margin-right: 4px;
}
}
.b_input {
flex: 1;
position: relative;
.upload_box {
display: flex;
cursor: pointer;
.upload_icon {
width: 16px;
height: 16px;
margin-right: 5px;
}
}
.inp_num {
position: absolute;
top: 9px;
right: 10px;
}
}
}
.items_fj {
margin-bottom: 1px;
.fujian {
display: none;
}
.mbl_items12 {
width: 440px;
margin-right: 56px;
.i12_box1 {
display: flex;
align-items: center;
padding: 17px 0px 17px 21px;
border: 1px solid #eff4fc;
border-radius: 8px;
margin-bottom: 10px;
.file_img {
width: 27px;
height: 32px;
background-image: url(@/assets/images/coursewareManage/imgs.png);
margin-right: 22px;
img {
width: 100%;
height: 100%;
}
}
.file_detail {
width: 250px;
margin-right: 21px;
.file_updata {
display: flex;
align-items: center;
.updatabox {
position: relative;
width: 230px;
height: 5px;
background-color: rgba(192, 192, 192, 0.25);
border-radius: 3px;
.updatacolor {
position: absolute;
left: 0;
width: 100%;
height: 5px;
background-color: #57c887;
border-radius: 3px;
}
.updatacolor2 {
position: absolute;
left: 0;
width: 80%;
height: 5px;
background-color: #ff7474;
border-radius: 3px;
}
.updatacolor3 {
position: absolute;
left: 0;
width: 60%;
height: 5px;
background-color: #4ea6ff;
border-radius: 3px;
}
.updataxq {
position: absolute;
right: 2px;
top: -30px;
color: #57c887;
}
.updataxq2 {
position: absolute;
right: 2px;
top: -30px;
color: #ff7474;
}
.updataxq3 {
position: absolute;
right: 2px;
top: -30px;
color: #4ea6ff;
}
}
}
}
.file_operation {
display: flex;
.fobox {
margin-right: 5px;
cursor: pointer;
}
}
}
}
}
.items_btn {
display: flex;
justify-content: center;
margin-top: 20px;
margin-bottom: 20px;
.cstm_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;
}
}
.btn5 {
border: 1px solid rgba(64, 158, 255, 1);
color: #4ea6ff;
}
.btn6 {
background-color: #4ea6ff;
color: #ffffff;
}
}
}
}
.QRModal {
.ant-modal {
.ant-modal-content {
width: 479px !important;
.ant-modal-body {
.QR {
z-index: 9999;
width: 520px;
background: #ffffff;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.21);
position: absolute;
left: 50%;
top: 10%;
transform: translate(-50%, -50%);
.qr_header {
position: absolute;
width: calc(100%);
height: 40px;
background: linear-gradient(
rgba(78, 166, 255, 0.2) 0%,
rgba(78, 166, 255, 0) 100%
);
}
.qr_main {
width: 100%;
position: relative;
.qrm_header {
display: flex;
align-items: center;
padding-top: 20px;
padding-left: 26px;
font-size: 16px;
.qr_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%;
}
}
.qrm_body {
width: 100%;
margin-top: 22px;
margin-bottom: 32px;
.QR_img {
width: 176px;
height: 176px;
margin: 1px auto;
background-image: url(@/assets/images/taskpage/QR.png);
background-size: 100% 100%;
}
}
.qrm_footer {
display: flex;
align-items: center;
margin-bottom: 44px;
.qrmbtn {
width: 80px;
height: 32px;
display: flex;
line-height: 32px;
justify-content: center;
border-radius: 4px;
border: 1px solid #387df7;
margin-left: 16px;
cursor: pointer;
.btntext {
color: #387df7;
}
}
}
}
}
}
}
}
}
.recgradeModal {
.ant-modal {
.ant-modal-content {
// width:679px !important;
.ant-modal-body {
.recordgrade {
z-index: 9999;
width: 679px;
background: #ffffff;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.21);
position: absolute;
left: 50%;
top: 10%;
transform: translate(-50%, -50%);
.rg_header {
position: absolute;
width: calc(100%);
height: 40px;
background: linear-gradient(
rgba(78, 166, 255, 0.2) 0%,
rgba(78, 166, 255, 0) 100%
);
}
.rg_main {
width: 100%;
position: relative;
.rgm_header {
display: flex;
align-items: center;
padding-top: 20px;
padding-left: 26px;
font-size: 16px;
.rg_icon {
width: 16px;
height: 16px;
margin-right: 10px;
background-image: url(@/assets/images/coursewareManage/grade.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%;
}
}
.rgm_body {
width: 100%;
.rgmb_items {
display: flex;
justify-content: center;
align-items: center;
width: 80%;
margin: 21px auto 10px auto;
.items_left {
display: flex;
margin-right: 14px;
.sign {
margin-right: 7px;
}
}
}
}
.qrm_btnbox {
display: flex;
margin: 30px auto;
justify-content: center;
.qrm_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: #ffffff;
color: #4ea6ff;
}
.btn3 {
border: 1px solid rgba(64, 158, 255, 1);
color: #4ea6ff;
}
}
}
}
}
}
}
}
.graModal {
.ant-modal {
.ant-modal-content {
// width:679px !important;
.ant-modal-body {
.graduate {
z-index: 9999;
width: 679px;
background: #ffffff;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.21);
position: absolute;
left: 50%;
top: 10%;
transform: translate(-50%, -50%);
.gra_header {
position: absolute;
width: calc(100%);
height: 40px;
background: linear-gradient(
rgba(78, 166, 255, 0.2) 0%,
rgba(78, 166, 255, 0) 100%
);
}
.gra_main {
width: 100%;
position: relative;
.gram_header {
display: flex;
align-items: center;
padding-top: 20px;
padding-left: 26px;
font-size: 16px;
.gra_icon {
width: 16px;
height: 16px;
margin-right: 10px;
background-image: url(@/assets/images/coursewareManage/graduate.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%;
}
}
.gram_body {
width: 100%;
.gramb_items {
display: flex;
justify-content: center;
align-items: center;
width: 80%;
margin: 21px auto 10px auto;
.items_left {
display: flex;
margin-right: 14px;
.sign {
margin-right: 7px;
}
}
}
.gramb_input {
.bc_box {
display: flex;
}
}
}
.qrm_btnbox {
display: flex;
margin: 30px auto;
justify-content: center;
.qrm_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;
}
}
}
}
}
}
}
}
.agrstudyModal {
.ant-modal {
width: 429px !important;
height: 258px !important;
.ant-modal-content {
width: 429px !important;
height: 258px !important;
.ant-modal-body {
width: 429px !important;
height: 258px !important;
padding: 0px !important;
.agreestudy {
z-index: 9999;
width: 429px;
height: 258px;
background: #ffffff;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.21);
.agree_header {
position: absolute;
width: 100%;
height: 40px;
background: linear-gradient(
rgba(78, 166, 255, 0.2) 0%,
rgba(78, 166, 255, 0) 100%
);
}
.agree_main {
width: 100%;
position: relative;
.agreem_header {
display: flex;
align-items: center;
padding-top: 20px;
padding-left: 26px;
font-size: 16px;
.agreem_icon {
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%;
}
}
.agreem_body {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
margin: 45px auto 62px auto;
}
.qrm_btnbox {
display: flex;
margin: 30px auto;
justify-content: center;
.qrm_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;
}
}
}
}
}
}
}
}
.onlmanageModal {
.ant-modal {
.ant-modal-content {
// width:1358px !important;
.ant-modal-body {
.modalHeader {
display: flex;
align-items: center;
justify-content: space-between;
.headerLeft {
margin-left: 27px;
display: flex;
align-items: center;
.headerLeftText {
font-size: 16px;
font-weight: 400;
color: #000000;
line-height: 36px;
}
}
}
.onlinemanage {
display: none;
min-width: 1000px;
background: #ffffff;
.om_main {
width: 100%;
.om_body {
margin-right: 50px;
.b_title {
color: #4f5156;
font-weight: 500;
margin-bottom: 19px;
}
.b_sub {
display: flex;
margin-bottom: 10px;
.bs_type {
color: #999ba3;
}
.bs_left {
color: #999ba3;
margin-left: 35px;
}
.bs_right {
color: #4f5156;
}
}
.b_menu {
width: calc(100%);
}
.b_menunav {
display: flex;
margin-top: 20px;
margin-bottom: 20px;
.bm_select {
margin-right: 20px;
}
.bm_input {
margin-right: 20px;
}
.bm_btn {
display: flex;
cursor: pointer;
.btn {
padding: 0px 26px 0px 26px;
height: 40px;
background: rgba(64, 158, 255, 1);
border-radius: 8px;
border: 1px solid rgba(64, 158, 255, 1);
color: #fff;
display: flex;
align-items: center;
justify-content: center;
margin-right: 14px;
flex-shrink: 0;
.search {
background-size: 100%;
}
.btnText {
font-size: 14px;
font-weight: 400;
color: #fff;
line-height: 36px;
margin-left: 5px;
}
}
.btn1 {
.search {
width: 15px;
height: 17px;
background-image: url("@/assets/images/coursewareManage/search1.png");
}
}
.btn1 {
background: rgba(64, 158, 255, 1);
.search {
background-image: url("@/assets/images/coursewareManage/search0.png");
}
.btnText {
color: #ffffff;
}
}
.btn2 {
.search {
width: 16px;
height: 18px;
margin-right: 6px;
background-image: url("../../assets/images/courseManage/reset0.png");
}
}
}
}
}
}
}
}
}
}
}
.facteachModal {
.ant-modal {
.ant-modal-content {
// width:1358px !important;
.ant-modal-body {
.modalHeader {
display: flex;
align-items: center;
justify-content: space-between;
.headerLeft {
margin-left: 27px;
display: flex;
align-items: center;
.headerLeftText {
font-size: 16px;
font-weight: 400;
color: #000000;
line-height: 36px;
}
}
}
.modalMain {
.m_title {
margin-bottom: 20px;
}
.m_body {
display: flex;
flex-wrap: wrap;
.mb_left {
width: 50%;
.mbl_items {
display: flex;
align-items: center;
justify-content: flex-end;
margin-bottom: 10px;
.item_nam {
width: 100px;
display: flex;
align-items: center;
justify-content: flex-end;
white-space: nowrap;
.asterisk_icon {
width: 10px;
height: 10px;
margin-right: 5px;
margin-top: -15px;
}
}
.item_inp {
flex: 1;
position: relative;
.inp_num {
position: absolute;
left: 398px;
top: 10px;
}
}
}
.mbl_items2 {
display: flex;
align-items: start;
margin-top: 10px;
margin-bottom: 10px;
.item_nam {
width: 100px;
display: flex;
align-items: center;
justify-content: flex-end;
white-space: nowrap;
.asterisk_icon {
width: 10px;
height: 10px;
margin-right: 5px;
margin-top: -15px;
}
}
.item_inp {
flex: 1;
.i_upload_img {
margin-top: 10px;
width: 100px;
height: 100px;
border-radius: 8px;
}
.i_upload {
width: 100px;
height: 100px;
border: 1px solid #4ea6ff;
border-radius: 8px;
text-align: center;
align-items: center;
cursor: pointer;
.addimg {
position: relative;
.heng {
position: absolute;
top: 50px;
left: 25px;
width: 50px;
border: 1px solid #4ea6ff;
}
.shu {
position: absolute;
top: 25px;
left: 50px;
height: 50px;
border: 1px solid #4ea6ff;
}
}
}
}
}
.i2_cz {
width: 440px;
margin-left: 100px;
.i2_top {
display: flex;
justify-content: space-between;
}
}
.i8_bottom {
display: flex;
width: 440px;
margin-left: 100px;
}
}
.mb_right {
width: 50%;
.mbl_items {
display: flex;
align-items: flex-start;
justify-content: flex-end;
margin-bottom: 10px;
.item_nam {
width: 100px;
display: flex;
align-items: center;
justify-content: flex-end;
white-space: nowrap;
.asterisk_icon {
width: 10px;
height: 10px;
margin-top: -15px;
margin-right: 5px;
}
}
.item_inp {
flex: 1;
}
.accessory {
display: flex;
align-items: center;
.accessory_icon {
width: 16px;
height: 16px;
margin-top: -8px;
margin-right: 5px;
}
}
}
.mbl_items2 {
display: flex;
align-items: start;
margin-bottom: 10px;
.item_nam {
width: 100px;
display: flex;
align-items: center;
justify-content: flex-end;
white-space: nowrap;
.asterisk_icon {
width: 10px;
height: 10px;
margin-right: 5px;
margin-top: -15px;
}
}
.item_inp {
flex: 1;
position: relative;
.inp_num {
position: absolute;
left: 395px;
bottom: 10px;
}
}
}
}
}
.m_footer {
display: flex;
margin: 20px 0;
.fotnam {
width: 100px;
display: flex;
justify-content: end;
padding-right: 15px;
}
.fotarea {
width: calc(100% - 150px);
position: relative;
.fuwenben {
width: 90%;
height: 20px;
background-color: rgb(95, 95, 95);
position: absolute;
left: 50%;
transform: translate(-50%, 0);
top: 3px;
z-index: 9999;
}
}
}
.m_btn {
width: 100%;
margin-top: 25px;
margin-bottom: 20px;
display: flex;
justify-content: center;
align-content: center;
.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;
}
}
.btn5 {
border: 1px solid rgba(64, 158, 255, 1);
color: #4ea6ff;
}
.btn6 {
background-color: #4ea6ff;
color: #ffffff;
}
}
}
}
}
}
}
.givpowerModal {
.ant-modal {
.ant-modal-content {
// width:1358px !important;
.ant-modal-body {
.modalHeader {
display: flex;
align-items: center;
justify-content: space-between;
.headerLeft {
margin-left: 27px;
display: flex;
align-items: center;
.headerLeftText {
font-size: 16px;
font-weight: 400;
color: #000000;
line-height: 36px;
}
}
}
.givepower {
min-width: 1000px;
background: #ffffff;
.gp_main {
width: 100%;
position: relative;
.gpm_inputbtn {
width: 90%;
margin: 20px auto;
display: flex;
.gpm_btn {
width: 100px;
height: 40px;
margin-right: 14px;
background: #ffffff;
border: 1px solid #4ea6ff;
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
cursor: pointer;
.btnText {
color: #4ea6ff;
font-size: 14px;
font-weight: 400;
line-height: 40px;
}
}
.btn1 {
.search {
width: 15px;
height: 17px;
margin-right: 6px;
background-image: url("../../assets/images/courseManage/search1.png");
}
}
.btn2 {
.reset {
width: 16px;
height: 18px;
margin-right: 6px;
background-image: url("../../assets/images/courseManage/reset1.png");
}
}
.btn1 {
background: #4ea6ff;
.search {
background-image: url("@/assets/images/coursewareManage/search0.png");
}
.btnText {
color: #ffffff;
}
}
.btn2 {
background: #4ea6ff;
.reset {
background-image: url("@/assets/images/coursewareManage/reset0.png");
}
.btnText {
color: #ffffff;
}
}
}
.gpm_notice {
display: flex;
background: rgba(78, 166, 255, 0.25);
border: 1px solid #4ea6ff;
width: 90%;
height: 62px;
margin: 20px auto;
align-items: center;
line-height: 64px;
.th_icon {
width: 16px;
height: 16px;
background-image: url(@/assets/images/coursewareManage/gan.png);
background-size: 100% 100%;
margin: auto 13px auto 37px;
}
.textarea {
margin-right: 33px;
}
}
.gpm_table {
width: 90%;
margin: 30px auto;
border: 1px solid #f0f4fe;
}
}
}
}
}
}
}
.schtimeModal {
.modalHeader {
display: flex;
align-items: center;
justify-content: space-between;
padding-top: 10px;
background: linear-gradient(180deg, rgba(103, 64, 255, 0.2) 0%, rgba(166, 168, 255, 0) 100%) !important;
.headerLeft {
margin-left: 27px;
display: flex;
align-items: center;
.headerLeftText {
font-size: 16px;
font-weight: 400;
color: #000000;
line-height: 36px;
}
}
}
.schooltime {
min-width: 1000px;
background: #ffffff;
.st_main {
width: 100%;
.tableBox {
margin: 20px 38px 30px;
th {
background-color: #eff4fc !important;
text-align: center !important;
}
.ant-table-tbody
> tr:hover:not(.ant-table-expanded-row):not(
.ant-table-row-selected
)
> td {
background: #f6f9fd;
}
.operation {
display: flex;
justify-content: right;
.fb {
display: flex;
margin-right: 20px;
.jc {
color: #4ea6ff;
font-size: 14px;
margin-left: 20px;
white-space: nowrap;
cursor: pointer;
}
}
}
.ynuse {
display: flex;
justify-content: center;
align-items: center;
.use {
cursor: pointer;
}
}
}
.stm_inputbtn {
display: flex;
width: 90%;
margin: 20px auto;
.stm_btn {
width: 100px;
height: 40px;
margin-right: 14px;
background: #ffffff;
border: 1px solid #4ea6ff;
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
cursor: pointer;
.btnText {
color: #4ea6ff;
font-size: 14px;
font-weight: 400;
line-height: 40px;
}
}
.btn {
padding: 0px 26px 0px 26px;
height: 38px;
background: #4ea6ff;
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: #ffffff;
line-height: 36px;
margin-left: 5px;
}
}
.btnn {
padding: 0px 26px 0px 26px;
height: 38px;
background: #4ea6ff;
border-radius: 8px;
border: 1px solid rgba(64, 158, 255, 1);
color: #fff;
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: #fff;
line-height: 36px;
margin-left: 5px;
}
}
.btn1 {
.search {
width: 15px;
height: 17px;
background-image: url("../../assets/images/courseManage/search0.png");
}
}
.btn2 {
.search {
width: 16px;
height: 18px;
background-image: url("../../assets/images/courseManage/reset0.png");
}
}
.btn1 {
.search {
background-image: url("../../assets/images/courseManage/search0.png");
}
.btnText {
color: #ffffff;
}
}
.btns {
display: flex;
// flex-wrap: wrap;
.btn {
padding: 0px 21px 0px 21px;
height: 38px;
background: #4ea6ff;
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: #ffffff;
line-height: 36px;
margin-left: 5px;
}
.btn2 {
margin-right: 0px;
.img2 {
width: 17px;
height: 18px;
background-image: url(../../assets/images/coursewareManage/export1.png);
}
}
}
.btn3 {
.search {
width: 17px;
height: 18px;
background-image: url("../../assets/images/courseManage/add0.png");
}
.btnText {
color: #ffffff;
}
}
}
}
/**
.btn3 {
width: 130px;
height: 40px;
border: 1px solid #4ea6ff;
background-color: #4ea6ff;
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;
}
.btn3 {
.add {
width: 17px;
height: 18px;
background-image: url("@/assets/images/coursewareManage/add0.png");
background-size: 100% 100%;
margin-right: 6px;
}
}
} */
.notable {
width: 100%;
height: 100%;
.notablebox {
width: 412px;
height: 212px;
background: linear-gradient(180deg, #fef3dd 0%, #fffaf0 100%);
border-radius: 10px;
display: flex;
justify-content: center;
text-align: center;
margin: 77px auto 109px auto;
position: relative;
.smallleft {
position: absolute;
top: 18px;
left: 0px;
width: 8px;
height: 21px;
border-radius: 0px 4px 4px 0px;
background-color: #ffb64e;
}
.smallright {
position: absolute;
bottom: 18px;
right: 0px;
width: 8px;
height: 21px;
border-radius: 4px 0px 0px 4px;
background-color: #ffb64e;
}
.boxbody {
.boximg {
width: 72px;
height: 72px;
margin: 32px auto 20px auto;
background-image: url(@/assets/images/coursewareManage/nostate.png);
background-size: 100% 100%;
}
.boxtitle {
margin-bottom: 4px;
}
}
}
}
.tableBox {
position: relative;
padding-bottom: 80px;
.classify {
margin-left: 10px !important;
padding-left: 9px !important;
}
.ant-checkbox-wrapper {
align-items: center;
margin-top: -2px;
}
.ant-table-selection-column {
padding: 0px !important;
padding-left: 60px !important;
}
.ant-table-thead > tr > th {
background-color: #eff4fc !important;
}
th.h {
background-color: #eff4fc !important;
}
.ant-table-tbody
> tr:hover:not(.ant-table-expanded-row):not(
.ant-table-row-selected
)
> td {
background: #f6f9fd;
}
.operation {
display: flex;
justify-content: right;
.fb {
display: flex;
margin-right: 20px;
.jc {
color: #4ea6ff;
font-size: 14px;
margin-left: 20px;
white-space: nowrap;
cursor: pointer;
}
}
}
.tableBox {
.pa {
left: 0;
width: 100%;
// height: 20px;
// background-color: red;
display: flex;
justify-content: center;
position: absolute;
bottom: 20px;
}
}
}
}
}
}
.stusmanageModal {
.ant-modal {
max-width: 1800px;
.ant-modal-content {
// width:1358px !important;
.ant-modal-body {
.modalHeader {
display: flex;
align-items: center;
justify-content: space-between;
.headerLeft {
margin-left: 27px;
display: flex;
align-items: center;
.headerLeftText {
font-size: 16px;
font-weight: 400;
color: #000000;
line-height: 36px;
}
}
}
.studentsmanage {
min-width: 1000px;
background: #ffffff;
.stm_main {
width: 100%;
.stmmitems {
margin: auto 40px;
.stmm_i1,
.stmm_i2,
.stmm_i3,
.stmm_i4 {
margin: 19px 0;
}
.stmm_i5 {
// display: flex;
// justify-content: space-between;
// margin-right: 6px;
}
.stmm_i6 {
position: relative;
padding-top: 15px;
padding-bottom: 80px;
.classify {
margin-left: 10px !important;
padding-left: 9px !important;
}
.ant-checkbox-wrapper {
align-items: center;
margin-top: -2px;
}
.ant-table-selection-column {
padding: 0px !important;
padding-left: 60px !important;
}
.ant-table-thead > tr > th {
font-size: 14px;
font-weight: 400;
color: #999ba3;
line-height: 36px;
padding: 5px 16px;
background-color: #eff4fc !important;
}
th.h {
background-color: #eff4fc !important;
}
.ant-table-tbody
> tr:hover:not(.ant-table-expanded-row):not(
.ant-table-row-selected
)
> td {
background: #f6f9fd;
}
.operation,
.nselect {
display: flex;
justify-content: center;
color: #4ea6ff;
font-size: 14px;
.ops1,
.ops2 {
margin-right: 10px;
cursor: pointer;
}
}
.tableBox {
.pa {
left: 0;
width: 100%;
// height: 20px;
// background-color: red;
display: flex;
justify-content: center;
position: absolute;
bottom: 20px;
}
}
}
}
}
}
}
}
}
.tableShow2 {
display: inline-block;
}
.tableHiddle2 {
display: none;
}
}
.tag-content {
.ant-tag {
margin-top: 10px;
}
}
.coursewareDetail {
.ant-modal {
height: 320px;
margin-top: 100px;
.ant-modal-content {
// width:1358px !important;
.ant-modal-body {
.modalHeader {
display: flex;
align-items: center;
justify-content: space-between;
.headerLeft {
margin-left: 27px;
display: flex;
align-items: center;
.headerLeftText {
font-size: 16px;
font-weight: 400;
color: #000000;
line-height: 36px;
}
}
}
.modalMain {
.ftsturecord {
min-width: 1000px;
background: #ffffff;
.ftsr_main {
width: 100%;
.ftsr_table {
width: 90%;
margin: 30px auto;
border: 1px solid #f0f4fe;
}
.ftsr_btn {
width: 100px;
height: 40px;
background: #ffffff;
border: 1px solid #4ea6ff;
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
margin: 30px auto;
flex-shrink: 0;
cursor: pointer;
.btnText {
color: #4ea6ff;
font-size: 14px;
font-weight: 400;
line-height: 40px;
}
}
}
}
}
}
}
}
}
// 选择评估
.main_item {
display: flex;
align-items: center;
margin-top: 32px;
margin-bottom: 32px;
.signbox {
width: 120px;
display: flex;
justify-content: end;
align-items: center;
.sign {
margin-right: 5px;
}
}
.btnbox {
display: flex;
flex: 1;
align-items: center;
.xkbtn {
cursor: pointer;
width: 130px;
height: 40px;
background: #4ea6ff;
border-radius: 8px;
border: 0;
margin-right: 8px;
color: #fff;
}
}
}
.DelModal {
.ant-modal {
.ant-modal-content {
width: 424px !important;
.ant-modal-body {
.delete {
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-icons {
width: 16px;
height: 16px;
position: relative;
margin-right: 10px;
img {
width: 100%;
height: 100%;
position: absolute;
top: 0px;
left: 0px;
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;
}
}
}
}
}
}
}
}
.disabled {
a {
color: #999ba3;
cursor: not-allowed;
}
}
.pa {
width: 100%;
display: flex;
justify-content: center;
margin-bottom: 20px;
.pagination {
margin-bottom: 20px;
}
.ant-pagination-item-link,
.ant-pagination-item,
.ant-select-selector,
.ant-pagination-options-quick-jumper input {
border-radius: 8px;
}
}
.ant-select-selector {
height: 100%;
border-radius: 8px;
}
.ant-upload.ant-upload-select-picture-card {
border: none;
}
// statusJuJue
.statusJuJue {
margin-bottom: 20px;
}
.tableSelect {
position: relative;
.hoverList {
display: none;
}
&:hover {
.hoverList {
display: block;
position: absolute;
top: 20px;
left: -20px;
background: #fff;
box-sizing: border-box;
// padding: 20px;
color: #000000;
}
}
}
// ::v-deep .w-e-toolbar {
// .w-e-bar-item {
// &:nth-child(23) {
// display: none !important;
// }
// }
// }
</style>