Files
fe-manage/src/views/lecturer/InsideTeaching.vue
2025-05-09 09:47:24 +08:00

2023 lines
67 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>
<!-- 搜索框及按钮 -->
<div class="filter">
<a-form layout="inline" style="min-width: 1056px;">
<a-form-item class="select">
<a-input v-model:value="searchParam.name" style="width: 235px; margin-bottom:20px;height: 40px; border-radius: 8px"
placeholder="请输入工号/讲师姓名进行检索" allowClear showSearch v-on:keydown.enter="enterPressHadlerSearch">
</a-input>
</a-form-item>
<a-form-item class="select">
<a-input v-model:value="searchParam.courseName" style="width: 235px; margin-bottom:20px;height: 40px; border-radius: 8px"
placeholder="请输入课程名称进行搜索" allowClear showSearch v-on:keydown.enter="enterPressHadlerSearch">
</a-input>
</a-form-item>
<!-- <a-form-item class="select ">
<a-range-picker style="width: 276px; height: 40px; border-radius: 8px" v-model:value="searchdate" separator="至"
:placeholder="[' 开始时间', ' 结束时间']" @change="searchTimeChange" />
</a-form-item> -->
<a-form-item class="select ">
<!-- <div class="select addTimeBox"> -->
<!-- <div class="addTime">授课日期</div> -->
<a-range-picker v-model:value="searchdate" style="width: 380px !important;" format="YYYY-MM-DD" valueFormat="YYYY-MM-DD"
separator="至" :placeholder="['授课/开发日期开始时间', '授课/开发日期结束时间']" v-on:keydown.enter="enterPressHadlerSearch" />
<!-- @change="searchTimeChange" -->
<!-- </div> -->
</a-form-item>
<!-- <div style="width:100%"></div> -->
<a-form-item class="select">
<a-select style="width: 200px ;margin-bottom:20px" v-model:value="searchParam.type" placeholder="课程类型"
:options="entryTypeList" allowClear v-on:keydown.enter="enterPressHadlerSearch">
</a-select>
</a-form-item>
<a-form-item class="select">
<a-select style="width: 200px;margin-bottom:20px" v-model:value="searchParam.courseStatus" placeholder="开课状态"
:options="AuthenticationStatusList" allowClear v-on:keydown.enter="enterPressHadlerSearch">
</a-select>
</a-form-item>
<!-- <a-form-item class="select" v-if="moreid == 2">
<a-select style="width: 235px;margin-bottom:20px" placeholder="请选择讲师体系" v-model:value="searchParam.tSystemId"
:options="LecturerSystemList" allowClear showSearch @change="changetlevel"
v-on:keydown.enter="enterPressHadlerSearch">
</a-select>
</a-form-item> -->
<a-form-item class="select" v-if="moreid == 2">
<!-- <a-select style="width: 235px" placeholder="请选择所属组织" v-model:value="searchParam.sourceBelongId"
:options="getOrganizationList" allowClear showSearch v-on:keydown.enter="enterPressHadlerSearch">
</a-select> -->
<!-- <OrgClass @enter="searchSubmit()" v-model:value="searchParam.orgId" :placeholder="'请选择讲师组织'"
style="width: 235px"
></OrgClass> -->
<!-- TODO GX02-->
<a-select
style="width: 235px ;
margin-bottom:20px"
v-model:value="searchParam.trainOrgId"
placeholder="请选择培训发生组织"
allowClear
showSearch
:filter-option="false"
:options="filterOrgListSearch"
@search="handleOrgSearch"
@change="changeOrg"
v-on:keydown.enter="enterPressHadlerSearch">
</a-select>
</a-form-item>
<a-form-item class="select" v-if="moreid == 2">
<a-select style="width: 200px;margin-bottom:20px" placeholder="是否生成讲师费" v-model:value="searchParam.createdFee"
:options="LecturerLevelList" allowClear v-on:keydown.enter="enterPressHadlerSearch">
</a-select>
</a-form-item>
<!-- <a-form-item class="select" v-if="moreid == 2">
<a-tree-select style="width: 235px;margin-bottom:20px" :fieldNames="{
children: 'children',
label: 'name',
value: 'code',
}" allow-clear :getPopupContainer="triggerNode => triggerNode.parentNode || document.body"
v-model:value="searchParam.courseTypeId" show-search
:dropdown-style="{ maxHeight: '400px', overflow: 'auto' }" placeholder="请选择内容分类" tree-default-expand-all
:tree-data="sysTypeOptions" v-on:keydown.enter="enterPressHadlerSearch">
</a-tree-select>
</a-form-item> -->
<!-- <div style="width: 100%;"></div> -->
<a-form-item class="select" v-if="moreid == 2">
<a-select style="min-width: 200px ; height: auto ;margin-bottom:20px" v-model:value="score" placeholder="请选择评分"
:options="scoreList" allowClear mode="multiple" @change="scoreChange" :showSearch="false"
v-on:keydown.enter="enterPressHadlerSearch">
</a-select>
</a-form-item>
<a-form-item class="select" v-if="moreid == 2">
<a-select style="width: 200px" v-model:value="searchParam.studys" placeholder="授课人数" :options="studysList"
allowClear v-on:keydown.enter="enterPressHadlerSearch">
</a-select>
<!-- <a-input v-model:value="searchParam.name" style="width: 276px; height: 40px; border-radius: 8px"
placeholder="授课人数" allowClear showSearch>
</a-input> -->
</a-form-item>
<div style="display: flex; margin-bottom: 20px">
<a-button @click="searchSubmit()" type="primary" class="resetbtn">查询 </a-button>
<a-button class="resetbtn " @click="searchReset">重置</a-button>
<div v-if="moreid == 1">
<a-button style="line-height:40px;" @click="handlemoreid()" class="moreidbtn" type="text"> 展开
<DownOutlined />
</a-button>
</div>
<div v-if="moreid == 2">
<a-button style="line-height:40px;" @click="handlemoreid()" class="moreidbtn"> 收起
<UpOutlined />
</a-button>
</div>
</div>
</a-form>
<div style="width: 100%;"></div>
<div style="display: flex; margin-bottom: 20px">
<a-button v-if="checkMenu('lecturerRecordsAdd')" @click="addTeacher()" type="primary" class="langbtn">
<div class="search"></div> 添加授课记录
</a-button>
<!-- <a-upload multiple :headers="headers" :show-upload-list="false" :before-upload="beforeUpload2"> -->
<a-button v-if="checkMenu('lecturerRecordsImport')" class="resetbtn" @click="handleImport()">
<DownloadOutlined /> 导入
</a-button>
<!-- </a-upload> -->
<a-button v-if="checkMenu('lecturerRecordsExport')" @click="handleExport()" class="resetbtn">
<UploadOutlined /> 导出
</a-button>
</div>
<!-- 表格 -->
<div>
<a-table :header-cell-style="{ 'text-align': 'center' }" style="border: 1px solid #f2f6fe" :columns="columns"
:scroll="{ x: 1500 }" :data-source="tableData" :loading="tableLoading" @expand="expandTable"
:pagination="false">
<template #bodyCell="{ record, column }">
<template v-if="column.key === 'teaching'">
<a-space style="display:flex ;justify-content: space-around; ">
<span>{{ record?.teaching ?record?.teaching+'分钟': '-' }}</span>
</a-space>
</template>
<template v-if="column.key === 'operation'">
<a-space>
<a-button type="link" @click="() => handleLook(record, String(record.courseform))">查看</a-button>
<a-button type="link" @click="() => handleModify(record, String(record.courseform))"
v-if="record.createFrom == 1&&checkMenu('lecturerRecordsEdit')">编辑 </a-button>
<a-button type="link" v-if="record.createFrom == 1 && (record.isSuperPermission === 'true' || checkMenu('lecturerRecordsDel'))"
@click="() => deleteModal(record, String(record.courseform))">删除</a-button>
<!-- <a-button type="link" @click="() => deleteModal(record, String(record.courseform))">删除</a-button> -->
</a-space>
</template>
</template>
</a-table>
</div>
</div>
<div class="tableBox ">
<div class="pa">
<a-pagination v-if="tableDataTotal > 10" :showSizeChanger="true" :showQuickJumper="true"
:hideOnSinglePage="false" :pageSize="searchParam.pageSize" :current="searchParam.pageNo" :total="tableDataTotal"
class="pagination" @change="changePagination" />
<!-- :show-total="total => `共 ${total} 条数据`" -->
</div>
</div>
<!-- 弹窗组件 -->
<a-drawer class="largeDrawerInside" v-model:visible="teacherdialog" :closable="false" placement="right" :maskClosable="false"
width="60%" :title="false">
<div style="padding:24px;">
<div class="headers" style="margin-top:-24px;">
<div class="headerTitle">{{ teacherdialogtitle }}</div>
<img
style="width: 29px; height: 29px; cursor: pointer"
src="@/assets/images/basicinfo/close.png"
@click="cancelTeacherDialog"
/>
</div>
<a-form :model="formParam" layout="vertical" ref="formRef">
<!-- 讲师姓名 teacher 组织 orgName-->
<a-row :gutter="16">
<a-col :span="12">
<a-form-item name="name">
<template v-slot:label>
<img
style="margin-right:4px;width: 7px;height: 7px"
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
讲师名称
</template>
<SearchTeacher @tlevel="tlevelChange" v-model:value="formParam.name" v-model:lable="formParam.orgNames"
v-model:id="formParam.teacherId" v-model:system="tSystemNames" v-model:level="formParam.tlevelId">
</SearchTeacher>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item name="orgName">
<template v-slot:label>
<img
style="margin-right:4px;width: 7px;height: 7px"
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
讲师组织
</template>
<a-popover>
<!-- <template #content>
{{ formParam.orgNames }}
</template> -->
<a-input :title="formParam.orgNames" disabled v-model:value="formParam.orgName" class="draitem"
placeholder="自动带出讲师的组织,展示主要部分,鼠标浮上去展示所有" allowClear showSearch>
</a-input>
</a-popover>
</a-form-item>
</a-col>
</a-row>
<!-- 讲师体系 tsystemName 级别 tlevelId -->
<a-row :gutter="16">
<a-col :span="12">
<a-form-item name="tsystemName">
<template v-slot:label>
<img
style="margin-right:4px;width: 7px;height: 7px"
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
讲师体系
</template>
<a-input disabled v-model:value="tSystemNames.systemName" class="draitem" placeholder="自动带出讲师的体系" allowClear
showSearch>
</a-input>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item name="tlevelName">
<template v-slot:label>
<img
style="margin-right:4px;width: 7px;height: 7px"
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
讲师级别
</template>
<a-input disabled v-model:value="formParam.tlevelName" class="draitem" placeholder="自动带出讲师级别" allowClear
showSearch>
</a-input>
</a-form-item>
</a-col>
</a-row>
<!-- 内容分类 courseTypeId 课程名称 name -->
<a-row :gutter="16">
<a-col :span="12">
<a-form-item name="courseTypeId">
<template v-slot:label>
<img
style="margin-right:4px;width: 7px;height: 7px"
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
内容分类
</template>
<a-tree-select :fieldNames="{
children: 'children',
label: 'name',
value: 'code',
}" allow-clear :getPopupContainer="triggerNode => triggerNode.parentNode || document.body"
v-model:value="formParam.courseTypeId" show-search
:dropdown-style="{ maxHeight: '400px', overflow: 'auto' }" placeholder="请选择内容分类" tree-default-expand-all
:tree-data="sysTypeOptions" @change="treetype">
</a-tree-select>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item name="courseName">
<template v-slot:label>
<img
style="margin-right:4px;width: 7px;height: 7px"
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
课程名称
</template>
<a-input class="draitem" v-model:value="formParam.courseName" placeholder="请输入课程名称" allowClear showSearch
:maxlength="20" showCount @blur="sendName">
</a-input>
</a-form-item>
</a-col>
</a-row>
<!-- 授课日期 teachingDate 开课状态 courseStatus -->
<a-row :gutter="16">
<a-col :span="12">
<a-form-item name="trainOrgId">
<template v-slot:label>
<img
style="margin-right:4px;width: 7px;height: 7px"
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
培训发生组织
</template>
<!-- TODO5 授课讲师 -->
<a-select v-model:value="formParam.trainOrgId" placeholder="请选择培训发生组织"
allowClear
showSearch
:filter-option="false"
:options="filterOrgListSearch2"
@search="handleOrgSearch2"
@change="changeOrg">
</a-select>
<!-- <OrgClass v-model:value="formParam.sourceBelongId" v-model:name="formParam.sourceBelongFullName"></OrgClass> -->
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item name="teachingDate">
<template v-slot:label>
<img
style="margin-right:4px;width: 7px;height: 7px"
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
授课/课程日期 :
</template>
<a-date-picker :locale="locale" class="draitem" v-model:value="teachingDate" style="width:100%" format="YYYY-MM-DD HH:mm"
:show-time="{ format: 'HH:mm' }" type="datetime" placeholder="请选择课程日期" />
</a-form-item>
</a-col>
</a-row>
<!-- 授课时长 teaching 评分 score-->
<a-row :gutter="16">
<!-- <a-col :span="12">
<a-form-item label="开课状态">
<a-radio-group v-model:value="formParam.courseStatus" class="draitem">
<a-radio :value="'0'">未开课</a-radio>
<a-radio :value="'1'">已开课</a-radio>
</a-radio-group>
</a-form-item>
</a-col> -->
<a-col :span="12">
<a-form-item name="teaching">
<template v-slot:label>
<img
style="margin-right:4px;width: 7px;height: 7px"
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
授课时长
</template>
<a-input v-model:value="formParam.teaching" style="width:100%; height: 40px; border-radius: 8px ; "
placeholder="请输入授课时长" allowClear showSearch suffix="分钟" :maxLength="8" @blur="clearNonNumber">
</a-input>
<!-- <span style="margin-left: 5px ;" v-if="formParam.teaching != null">{{ (formParam.teaching / 60
).toFixed(2) }}小时</span>
<span style="margin-left: 5px ;" v-if="formParam.teaching == null">0.00小时</span> -->
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item name="score">
<template v-slot:label>
<img
style="margin-right:4px;width: 7px;height: 7px"
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
评分
</template>
<!-- <a-input class="draitem" v-model:value="formParam.score" @blur="clearscoreNumber" placeholder="" allowClear showSearch>
</a-input> -->
<a-input-number @blur="blurScore" @focus="focusScore" v-model:value="formParam.score" :precision="2" :min="1" :max="100"
style="width:100%; height: 40px; border-radius: 8px ; " placeholder="请输入评分" />
</a-form-item>
</a-col>
</a-row>
<!-- 参训人数 studys-->
<a-row :gutter="16">
<a-col :span="12">
<a-form-item name="studys">
<template v-slot:label>
<img
style="margin-right:4px;width: 7px;height: 7px"
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
参训人数
</template>
<a-input v-model:value="formParam.studys" class="draitem" placeholder="请输入参训人数" :maxLength="8"
@blur="clearstudysNumber" allowClear showSearch>
</a-input>
</a-form-item>
</a-col>
</a-row>
<!-- 备注 remark -->
<a-row :gutter="16">
<a-col :span="24">
<a-form-item label="备注">
<a-textarea v-model:value="formParam.remark" showCount :maxlength="200" @blur="sendRemark"
style="width: 100%; height: 100px; border-radius: 8px;margin-bottom:62px;" placeholder="请输入" />
</a-form-item>
</a-col>
</a-row>
</a-form>
<div :style="{
position: 'absolute',
right: 0,
bottom: 0,
width: '100%',
borderTop: '1px solid #e9e9e9',
padding: '10px 16px',
background: '#fff',
textAlign: 'right',
zIndex: 1,
}">
<a-button class="drabtn" @click="cancelTeacherDialog">取消</a-button>
<a-button class="drabtn" type="primary" @click="createTeacherDialog" :loading="buttonLoading">保存
</a-button>
</div>
</div>
</a-drawer>
<!--查看授课详情 -->
<a-drawer class="largeDrawerInside" v-model:visible="teachingdialog" :closable="false" placement="right" :maskClosable="true"
width="60%" :title="false">
<div style="padding:24px;">
<div class="headers" style="margin-top:-24px;">
<div class="headerTitle">查看讲师授课记录</div>
<img
style="width: 29px; height: 29px; cursor: pointer"
src="@/assets/images/basicinfo/close.png"
@click="cancelTeachingDialog"
/>
</div>
<span class="line"></span>
<span style="font-weight:600;">讲师信息</span>
<a-descriptions style="margin-top:15px;" bordered :column="2" :contentStyle="{'maxWidth':'300px'}" :labelStyle="{'width':'160px'}">
<a-descriptions-item label="讲师名称"><div style="user-select: text">{{ formParam.teacherName ||'-'}}/{{ formParam.userNo||'-' }}</div></a-descriptions-item>
<a-descriptions-item label="课程名称"><div style="user-select: text">{{ formParam.courseName||'-' }}</div></a-descriptions-item>
<a-descriptions-item label="课程类型">
{{ formParam.type == 0 ? '在线课' : formParam.type == 1 ? '面授课' : formParam.type == 5 ? '手动录入' : '-'}}</a-descriptions-item>
<a-descriptions-item label="授课/课程日期"><div style="user-select: text">{{ formParam.teachingDate||'-' }}</div></a-descriptions-item>
<a-descriptions-item label="开课状态">{{ formParam.courseStatus == 0 ? '未开课' : formParam.courseStatus == 1
? '已开课' : '-' }}</a-descriptions-item>
<a-descriptions-item label="授课/课程时长(分钟)">
<span> {{ formParam.teaching }} 分钟</span>
<span style="margin-left: 10px ;" v-if="formParam.teaching != '0'">({{ (formParam.teaching / 60
).toFixed(2) }}小时)</span> </a-descriptions-item>
<a-descriptions-item label="参训人数 ">{{ formParam.studys?formParam.studys+'人':'-' }}</a-descriptions-item>
<a-descriptions-item label="评分 ">{{ formParam.score?Number(formParam.score).toFixed(0)==0?'-':Number(formParam.score).toFixed(2)+'分':'-' }}</a-descriptions-item>
<!-- <a-descriptions-item label="讲师组织">{{ formParam.orgName||'-' }}</a-descriptions-item> -->
<a-descriptions-item label="培训发生组织">{{ formParam.trainOrgName||'-' }}</a-descriptions-item>
<a-descriptions-item label="是否生成讲师费">{{{0:'否',1:'是'}[formParam.createdFee]}}</a-descriptions-item>
<!-- <a-descriptions-item label="讲师体系">{{ formParam.tsystemName||'-' }}</a-descriptions-item> -->
<!-- <a-descriptions-item label="讲师级别">{{ formParam.tlevelName||'-'}}</a-descriptions-item> -->
<!-- <a-descriptions-item label="数据来源">
{{ formParam.createFrom == 0 ? '系统生成' : formParam.createFrom == 1 ? '手动录入' : '-' }}</a-descriptions-item> -->
<!-- <a-descriptions-item label="内容分类">{{ formParam.courseTypeName||'-' }}</a-descriptions-item> -->
<a-descriptions-item label="备注 ">{{ formParam.remark||'-' }}</a-descriptions-item>
</a-descriptions>
<div v-if="formParam.createFrom == '0'">
<div style="margin-top:20px ;line-height: 24px;margin-bottom: 15px;">
<span class="line"></span>
<span style="font-weight:600;">讲师费发放情况</span>
</div>
<a-table :header-cell-style="{ 'text-align': 'center' }" style="border: 1px solid #f2f6fe;margin-bottom: 60px;" :columns="column"
:data-source="tableDatas" :pagination="false">
<template #bodyCell="{ record, column }">
<template v-if="column.key === 'operation'">
<a-space>
<!-- <a-button type="link" @click="() => handleLooka(record, String(record.courseform))">查看</a-button> -->
</a-space>
</template>
</template>
</a-table>
</div>
<!-- <div :style="{
position: 'absolute',
right: 0,
bottom: 0,
width: '100%',
borderTop: '1px solid #e9e9e9',
padding: '10px 16px',
background: '#fff',
textAlign: 'right',
zIndex: 1,
}">
<a-button class="drabtn" @click="cancelTeachingDialog">取消</a-button>
<a-button class="drabtn" type="primary" @click="cancelTeachingDialog" :loading="buttonLoading">返回
</a-button>
</div> -->
</div>
</a-drawer>
<!-- 删除功能弹窗 -->
<div>
<a-modal v-model:visible="deleteTeacherdialog" :footer="null" :closable="close" wrapClassName="canclestu1"
centered="true">
<div class="delete">
<div class="del_header"></div>
<div class="del_main">
<div class="header">
<img src="@/assets/images/coursewareManage/QR.png" alt="" style="margin-right:10px" />
<span>提示</span>
</div>
<div class="body">
<span>您确定要删除此条记录吗</span>
</div>
<div class="del_btnbox">
<div class="del_btn btn2" @click="cancelTeacherDialog1" style="margin-right: 32px">
<div class="btnText">取消</div>
</div>
<div class="del_btn btn2" @click="closeDeleteTeacher">
<div class="btnText">确定</div>
</div>
</div>
</div>
</div>
</a-modal>
</div>
<!-- 导入01 -->
<ImportWork v-model:showWork="showWork" :template="'/admin/export/exportRecordTemplate'" :url="'/admin/export/importInTeacherRecord'" :title="title"></ImportWork>
<!-- <div> <Upload/> </div> -->
</div>
</template>
<script lang="jsx">
import { reactive, toRefs, ref, computed, watch, onMounted } from "vue";
import moment, { Moment } from 'moment';
import { useRouter, useRoute } from "vue-router";
import {
DownOutlined,
UpOutlined,
UploadOutlined,
FolderAddOutlined,
DownloadOutlined
} from '@ant-design/icons-vue';
import dayjs from "dayjs";
import locale from 'ant-design-vue/es/date-picker/locale/zh_CN';
import 'dayjs/locale/zh-cn';
// import Editor from "@/components/project/Editor";
import ProjectManager from "@/components/project/ProjectManagerNew";
import { message } from "ant-design-vue";
import { getTeacherSystemList, infoteacher, getTeacherExpertise } from "../../api/Lecturer";
import { getNewInTeacherCourseList, getOrganization, getTeacherCourseList, insertInTeacherCourse, updateInTeacherCourse, deleteInTeacherCourse } from "../../api/Teaching";
import { getExpenseByCourseId } from "../../api/lecturerFeeManagement";
// import AddTeacher from "../../components/drawers/project/AddTeacher"
import ImportWork from "../../components/lecturer/ImportWork.vue";
import { fileUp } from "../../api/Lecturer";
import SearchTeacher from "@/components/project/SearchTeacher";
import { useStore } from "vuex";
import OrgClass from "@/components/project/OrgClass";
import { queryTrainOrgPor,} from "../../api/organization";
import { checkMenu } from '@/utils/utils'
export default {
name: "InsideTeaching",
components: {
// AddTeacher,
// Editor,
// Upload,
ImportWork,
SearchTeacher,
// Editor,
// ImageUpload
ProjectManager,
DownOutlined, //图标--展开
UpOutlined,//图标--收起
UploadOutlined,//图标--导出
DownloadOutlined,//图标-导入
FolderAddOutlined,//图标--新增
OrgClass,
},
setup() {
onMounted(() => {
const search = sessionStorage.getItem('searchLecturer')
if (route.query.activeKey == 1) {
state.moreid = 2
state.searchParam = JSON.parse(search)
}
searchSubmit()
orgListDatas()
})
const route = useRoute()
const formRef = ref();
const router = useRouter();
const state = reactive({
orgListSearch: [],
filterOrgListSearch: [],
filterOrgListSearch2: [],
moreid: 1,
title: '导入内部授课记录',
vf: false,
log: false,
close: false,
showWork: false,
currentPage1: 1,
pageSize1: 10,
tableLoading: false,
delTeacherId: null, //删除id确认
userNoid: null, //详情工号确认
lookTeacherId: null, //详情id确认
deleteTeacherdialog: false, //删除弹窗
teacherdialog1: null,
teacherdialog: false, //控制讲师弹窗
teacherdialogtitle: '',//讲师弹框title内容
teachingdialog: false,//控制查看抽屉
pageSizeOptions: ['10', '20', '30', '50'], //下拉选择每页显示多少条
pageSize: 10,
tableDataTotal: -1,//table列表总条数
searchdate: undefined, //选择时间
teachingDate: undefined, //选择时间
beginTime: null, //开始时间
endTime: null, //结束时间
tSystemNames: {
systemName: null,
levelVoList: []
},
score: undefined,
formParam: {
courseStatus: '1',
createFrom: 1,
teaching: null,
name: null,
teacherName: null,
teachingDate: null,
trainOrgId: null,
sourceBelongFullName: null,
score: 0,
},
orgList: [],
startTime: null,
searchParam:
{
recordType: 1,
pageNo: 1,
pageSize: 10,
managerId: null,
name: null,
type: null,
courseStatus: null,
orgId: null,
sourceBelongFullName:null,
tSystemId: null,
endTime: null,
beginTime: null,
studys: [],
score: undefined
}
})
// watch(()=>state.formParam.name,(val)=>{
// state.formParam.teacherName = val?.split('/')[1]
// }
// )
//获取所属组织
const getOrganizationList = ref([
// { value: 0, systemName: "讲师体系" },
]);
//获取所属组织
const getOrganizationLista = () => {
// console.log('getOrganizationList')
let obj = {
pageNo: 1,
pageSize: 1000
}
getOrganization(obj).then ((res) => {
if (res.data.code === 200) {
let arr = res.data.data.records;
let array = [];
arr.map((value) => {
let obj = {
value: value.id,
label: value.affiliationName,
};
array.push(obj);
});
getOrganizationList.value = array;
}
})
}
getOrganizationLista()
const LecturerSystemList = ref([
// { value: 0, systemName: "讲师体系" },
]);
const LecturerLevelList = ref([
{value:'',label:'全部'},
{value:'0',label:'否'},
{value:'1',label:'是'}
])
//获取讲师体系列表
const LecturerSystemLista = () => {
let obj = {
pageNo: 1,
pageSize: 1000,
}
getTeacherSystemList(obj).then((res) => {
if (res.data.code === 200) {
let arr = res.data.data.records;
let array = [];
arr.map((value) => {
let obj = {
value: value.id,
label: value.systemName,
};
array.push(obj);
});
LecturerSystemList.value = array;
LecturerSystemList.value.unshift({
value: '',
label: '全部'
})
}
})
}
LecturerSystemLista()
//获取内容分类
const store = useStore();
const sysTypeOptions = computed(() => store.state.content_type);
const treetype = (val, lab) => {
state.formParam.courseTypeName = lab.toString()
}
const OnTheJobStatusList = ref([
{ value: 1, label: "项目开课" },
{ value: 2, label: "路径开课" },
{ value: 3, label: "面授开课" },
])
const AuthenticationStatusList = ref([
{ value: '', label: "全部" },
{ value: '0', label: "未开课" },
{ value: '1', label: "已开课" },
])
const entryTypeList = ref([
{ value: '', label: "全部" },
{ value: '0', label: "在线课" },
{ value: '1', label: "面授课" },
{ value: '2', label: "训练班" },
{ value: '5', label: "手动录入" },
])
const scoreList = ref([
{ value: '', label: "全部" },
{ value: '90-100', label: "90-100" },
{ value: '80-90', label: "80-90" },
{ value: '70-80', label: "70-80" },
{ value: '60-70', label: "60-70" },
{ value: '50-60', label: "50-60" },
{ value: '40-50', label: "40-50" },
{ value: '30-40', label: "30-40" },
{ value: '20-30', label: "20-30" },
{ value: '10~20', label: "10~20" },
])
const studysList = ref([
{ value: '', label: "全部" },
{ value: '0-30', label: "0~30" },
{ value: '0-50', label: "0~50" },
{ value: '0-70', label: "0~70" },
{ value: '0-100', label: "0~100" },
// { value: '0-150', label: "0~150" },
{ value: '0-200', label: "0~200" },
{ value: '0-300', label: "0~300 " },
{ value: '300以上', label: "300以上" },
])
const scoreChange = (e) => {
if (e.length !== 0) {
e.map((item) => {
if (item !== '') {
scoreList.value.map((item) => {
item.disabled = false
})
}
else {
scoreList.value.map((item) => {
if (item.value !== '') {
item.disabled = true
}
})
e=''
state.score = ''
}
}
)
}
else {
scoreList.value.map((item) => {
item.disabled = false
})
}
// console.log(e)
state.searchParam.score = e.toString()
}
const columns = ref([
{
title: '讲师姓名 ',
dataIndex: 'teacherName',
key: 'teacherName',
ellipsis: true, align: "center",
width: 180,
customRender: (value, record) => {
return (
<div style="user-select: text">
{value.record.teacherName||'-'} / {value.record.userNo||'-'}
</div>
)
}
},
// {
// title: '讲师工号 ',
// dataIndex: 'userNo',
// key: 'userNo',
// ellipsis: true, align: "center",
// width: 120,
// },
{
title: '课程名称 ',
dataIndex: 'courseName',
key: 'courseName ',
ellipsis: true, align: "left",
width: 200,
customCell:()=>{return{style:{userSelect: 'text'}}},
},
{
title: '课程类型 ',
dataIndex: 'type',
key: 'type',
ellipsis: true, align: "center",
width: 120,
customRender: (value) => {
return (
<div>
{String(value.record.type)
? {
"0": "在线课",
"1": "面授课",
"2": "训练班",
"5": "手动录入",
}[value.record.type + ""]
: "-"}
</div>
)
}
},
{
title: '授课/课程日期',
dataIndex: 'teachingDate',
key: 'teachingDate',
ellipsis: true, align: "center",
width: 160,
customRender: (value) => {
return (
<div style="user-select: text">
{value.record?.teachingDate?dayjs(value.record?.teachingDate).format("YYYY-MM-DD HH:mm"):'-'}
</div>
);
},
},
// {
// title: '讲师体系 ',
// dataIndex: 'tsystemName',
// key: 'tsystemName',
// ellipsis: true, align: "left",
// width: 200,
// },
{
title: '开课状态 ',
dataIndex: 'courseStatus',
key: 'courseStatus',
ellipsis: true, align: "center",
width: 120,
customRender: (value) => {
return (
<div>
{value.record.courseStatus == 0 || value.record.courseStatus == 1
? {
"0": "未开课",
"1": "已开课",
}[value.record.courseStatus + ""] || ""
: "-"}
</div>
)
}
},
// {
// title: '内容分类',
// dataIndex: 'courseTypeName',
// key: 'courseTypeName',
// ellipsis: true, align: "center",
// width: 120,
// },
{
title: '授课/课程时长(分钟)',
dataIndex: 'teaching',
key: 'teaching',
ellipsis: true, align: "center",
scopedSlots: { customRender: "teaching" },
width: 160,
},
{
title: '参训人数',
dataIndex: 'studys',
key: 'studys',
ellipsis: true, align: "center",
width: 120,
customRender: ({text})=>{
return text ? text+'人' : '-'
}
},
{
title: '评分',
dataIndex: 'score',
key: 'score',
ellipsis: true, align: "center",
width: 120,
customRender: (value) => {
return (
<div>
{value.record.score?Number(value.record.score).toFixed(0)==0?'-':Number(value.record.score).toFixed(2)+'分' : '-'}
</div>
)
}
},
// {
// title: '数据来源',
// dataIndex: 'createFrom',
// key: 'createFrom',
// ellipsis: true, align: "center",
// width: 120,
// customRender: (value) => {
// return (
// <div>
// {value.record.createFrom == "0" || value.record.createFrom == "1"
// ? {
// "0": "系统生成",
// "1": "手动录入",
// }[value.record.createFrom + ""] || ""
// : "-"}
// </div>
// )
// }
// },
{
title: '培训发生组织 ',
dataIndex: 'trainOrgName',
key: 'trainOrgName',
ellipsis: true, align: "left",
width: 200,
customRender: (value) => {
const orgName = value.record.trainOrgName ? value.record.trainOrgName.split('/').reverse().join('/') : '-';
return (
<div>
{orgName}
</div>
)
}
},
{
title: '是否生成讲师费 ',
dataIndex: 'createdFee',
key: 'createdFee',
ellipsis: true, align: "center",
width: 150,
customRender: (value) => {
return (
<div>
{value.record.createdFee == 0 || value.record.createdFee == 1
? {
"0": "否",
"1": "是",
}[value.record.createdFee + ""] || ""
: "-"}
</div>
)
}
},
{
title: '操作 ',
dataIndex: 'operation',
key: 'operation',
// ellipsis: true,
align: "center",
width: 100,
fixed: "right",
scopedSlots: { customRender: "action" },
},
])
//列表数据
const tableData = ref([
])
const orgListDatas = () => {
const obj = {
pageNo:1,
pageSize:50
}
queryTrainOrgPor(obj).then((res) => {
state.orgList = res.data.data?.map(item=>{
return{
label: item.affiliationName,
value: item.id
}
})
state.orgListSearch = res.data.data?.map(item=>{
return{
label: item.affiliationName,
value: item.id
}
})
state.orgListSearch.unshift({
label: '全部', value: ''
})
state.filterOrgListSearch = state.orgListSearch;
// 移除filterOrgListSearch2头部的全部选项
state.filterOrgListSearch2 = state.orgListSearch.filter(item => item.value !== ''); // 移除“全部”选项
})
}
//TODO5
const changeOrg = (e,l) => {
console.log("changeOrg e",e);
console.log("changeOrg l",l);
if(l == undefined || l == null){
state.filterOrgListSearch = state.orgListSearch;
}
state.formParam.trainOrgName = l?.label
}
const rules = {
name: [{ required: true, message: '', log: '讲师不能为空' }],
orgName: [{ required: true, message: '', log: '讲师组织不能为空' }],
tlevelName: [{ required: true, message: '', log: '讲师级别不能为空' }],
tsystemName: [{ required: true, message: '', log: '讲师体系不能为空' }],
courseTypeId: [{ required: true, message: '', log: '内容分类不能为空' }],
courseName: [{ required: true, message: '', log: '课程名称不能为空' }],
trainOrgId: [{ required: true, message: '', log: '培训发生组织不能为空' }],
teachingDate: [{ required: true, message: '', log: '授课日期不能为空' }],
teaching: [{ required: true, message: '', log: '授课时长不能为空' }],
// courseStatus: [{ required: true, message: '', log: '开课状态不能为空' }],
score: [{ required: true, message: '', log: '评分不能为空' }],
studys: [{ required: true, message: '', log: '参训人数不能为空' }],
}
//展开切换
const handlemoreid = () => {
if (state.moreid == 1) {
state.moreid = 2
}
else if (state.moreid == 2) {
state.moreid = 1
// state.searchParam.type = null
// state.searchParam.courseStatus = null
state.searchParam.trainOrgId = null
state.searchParam.createdFee = null
state.searchParam.orgId = null
state.searchParam.sourceBelongFullName = null
state.searchParam.tSystemId = null
state.searchParam.id = null
state.searchParam.score = undefined
state.searchParam.studys = []
state.score = undefined
}
}
// 搜索
const searchSubmit = () => {
state.searchParam.pageNo = 1
getTableDate();
};
//修改时间
// function searchTimeChange(time, timeStr) {
// // let startTime = timeStr[0]
// // let endTime = timeStr[1] ;
// // state.startTime = new Date(startTime).getTime();
// // state.endTime = new Date(endTime).getTime();
// // // state.searchParam.beginTime = new Date(beginTime).getTime() ;
// // // state.searchParam.endTime = new Date(endTime).getTime() ;
// // state.searchParam.beginTime = state.startTime ? state.startTime : null,
// // state.searchParam.endTime = state.endTime ? state.endTime : null
// }
// const editTimeChange = (e, date) => {
// console.log(date);
// state.beginTime = date;
// // console.log(date, state.searchParam.beginTime, state.searchParam.endTime);
// };
//重置
const searchReset = () => {
state.searchdate = undefined,
state.score = undefined
state.searchParam = {
recordType: 1,
pageNo: 1,
pageSize: 10,
managerId: null,
name: null,
courseName: null,
type: null,
courseStatus: null,
orgId: null,
sourceBelongFullName :null,
tSystemId: null,
endTime: null,
beginTime: null,
studys: undefined,
score: undefined,
status: null,
};
getTableDate();
};
// List接口数据
const getTableDate = (obj) => {
state.tableLoading = true
let objA = { ...state.searchParam };
objA.beginTime = state.searchdate ? dayjs(state.searchdate[0]).format("YYYY-MM-DD") : "",
objA.endTime = state.searchdate ? dayjs(state.searchdate[1]).format("YYYY-MM-DD") : "",
// objA.beginTime = state.searchParam.beginTime !== null ? dayjs(new Date(state.searchParam.beginTime).getTime()).format("YYYY-MM-DD") : "",
// objA.endTime = state.searchParam.endTime !== null ? dayjs(new Date(state.searchParam.endTime).getTime()).format("YYYY-MM-DD") : "",
getNewInTeacherCourseList(objA)
.then((res) => {
tableData.value = res.data.data.records
state.tableDataTotal = Number(res.data.data.total);
state.tableLoading = false
// console.log("获取tableData", tableData);
let findValue = false;
tableData.value.some(item=>{
if(item.createFrom == 1 && item.isSuperPermission === 'true'){
columns.value[columns.value.length-1].width = 160
findValue = true
return true
}
})
if(!findValue){
const text = tableData.value.find(item=>item.createFrom == 1)
if(text){
columns.value[columns.value.length-1].width = 120
}else{
columns.value[columns.value.length-1].width = 100
}
}
})
.catch(err => {
state.tableLoading = false
// message.error(err.data.msg)
})
};
getTableDate()
// // 翻页
const changePagination = (page, pageSize) => {
state.searchParam.pageNo = page;
// state.pageNo = page;
state.searchParam.pageSize = pageSize;
getTableDate();
};
// 新增授课
const addTeacher = () => {
cancel()
state.teacherdialog1 = 0
state.teacherdialog = true;
state.teacherdialogtitle = '添加授课记录'
state.vf = true
}
//修改信息弹窗
const handleModify = (record) => {
state.teacherdialog = true;
state.teacherdialogtitle = '编辑授课记录'
state.lookTeacherId = record.teacherId
state.vf = false
TeacherSystem1(record)
}
async function validateField(name) {
return new Promise((resolve) => {
formRef.value.validateFields([name])
.then(() => {
resolve(false);
})
.catch(() => {
resolve(true);
});
});
}
const tlevelChange = (e) => {
state.formParam.tlevelName = e?.tlevelName
state.formParam.tlevelId = e?.tlevelId
}
watch(() => state.formParam.orgNames, (val) => {
if (val) {
const parts = val.split('/');
const reversedParts = parts.reverse();
state.formParam.orgName = reversedParts.join('/');
}
})
//保存
const createTeacherDialog = async () => {
state.formParam.teachingDate = state.teachingDate ? dayjs(state.teachingDate).format("YYYY-MM-DD HH:mm").toString() : ""
state.formParam.teacherName = state.formParam.name?.split('/')[0]
state.formParam.userNo = state.formParam.name?.split('/')[1]
state.formParam.tsystemName = state.tSystemNames.systemName
state.formParam.tsystemId = state.tSystemNames?.systemId
if(state.formParam.score||state.formParam.score==0){
state.formParam.score = String(state.formParam.score)
}else{
state.formParam.score = null
}
if(state.formParam.studys==0){
state.formParam.studys = null
}
state.formParam.courseStatus = String(state.formParam.courseStatus)
const formItemNames = Object.keys(rules);
for (let i = 0; i < formItemNames.length; i++) {
// const result = await validateField(formItemNames[i]);
const result = state.formParam[formItemNames[i]]
if (!result) {
return message.error(rules[formItemNames[i]][0].log)
}
}
state.formParam.orgName = state.formParam.orgNames
state.formParam = { ...state.formParam, ...state.tSystemNames }
if (state.vf == false) {
updateInTeacherCourse(state.formParam).then(response => {
message.success("编辑成功");
state.teacherdialog = false;
cancel()
getTableDate();
});
}
else {
insertInTeacherCourse(state.formParam)
.then((res) => {
message.success("添加成功");
state.teacherdialog = false;
cancel()
getTableDate();
}).catch((err) => {
console.log(err);
});
}
};
//删除弹窗
const deleteModal = (record) => {
state.deleteTeacherdialog = true
state.delTeacherId = record.id
};
//确认删除
const closeDeleteTeacher = () => {
//调用删除接口
// let obj = {
// offcourseId: state.delTeacherId,
// recordType: 1
// }
deleteInTeacherCourse(state.delTeacherId).then((res) => {
if (res.data.code == 200) {
message.success("删除成功");
state.deleteTeacherdialog = false
getTableDate();
}
})
}
//取消按钮 清空输入的数据
const cancelTeacherDialog = () => {
if (state.teacherdialog = true) {
formRef.value.resetFields();
state.teacherdialog = false
cancel()
}
// state.deleteTeacherdialog = false
};
const cancelTeacherDialog1 = () => {
state.deleteTeacherdialog = false
};
//清空数据
const cancel = () => {
state.formParam = {
recordType: 1,
courseStatus: '1',
teacher: null,
orgName: null,
tsystemName: null,
tlevelId: null,
courseName: null,
teaching: null,
studys: null,
score: null,
type: null,
remark: null,
trainOrgId: null,
sourceBelongFullName: null,
offcourseId: null,
createFrom: null,
teachingDate: null,
}
state.teachingDate = null
state.tSystemNames = {
systemName: null,
levelVoList: []
}
}
// //页面内部姓名
// const infoteacherList = ref([
// ]);
// const getinfoteacher = (obj) => {
// state.tableLoading = true
// infoteacher()
// .then((res) => {
// infoteacherList.value = res.data.data.records
// })
// };
function managerChange(e, l, d, t, orgName) {
console.log(e, l);
state.searchParam.userNo = d;
state.searchParam.name = t;
// state.searchParam.trainorgName=orgName
}
//表格内查看数据操作
const handleLook = (record) => {
// state.teacherdialog1 = 1
state.teachingdialog = true;
state.teacherdialogtitle = '查看详情'
state.lookTeacherId = record.teacherId
TeacherSystem1(record)
gettableDatas(record)
// let id = record.userNo
// router.push({ path: '/insideteachingdetail', query: { id } })
// router.push({ path: '/InsideTeachingDetail' })
}
const cancelTeachingDialog = () => {
state.teachingdialog = false;
}
//内部授课详情
// const TeacherSystem = (record) => {
// state.formParam = {
// recordType: 1,
// name: record.name,
// userNo: record.userNo,
// orgName: record.orgName,
// tsystemName: record.tsystemName,
// tlevelId: record.tlevelId,
// type: record.type,
// courseName: record.courseName,
// courseStatus:record.courseStatus,
// beginTime: dayjs(record.beginTime, 'YYYY-MM-DD'),
// // ref< moment.Moment >(moment(record.beginTime,'YYYY-MM-DD')),
// // record.beginTime,
// teaching: record.teaching,
// score: record.score,
// studys: record.studys,
// remark: record.remark,
// createFrom: record.createFrom
// }
// console.log(state.formParam)
// }
//内部授课详情
const TeacherSystem1 = (record) => {
getTeacherCourseList({ id: record.id }).then((res) => {
state.formParam = res.data.data
state.tSystemNames.systemName = res.data.data.tsystemName
state.tSystemNames.systemId = res.data.data.tsystemId
state.tSystemNames.systemCode = res.data.data.systemCode
state.tSystemNames.systemId = res.data.data.systemId
state.tSystemNames.levelVoList = res.data.data.levelVoList
state.formParam.tlevelName = res.data.data.tlevelName
state.formParam.tlevelId = res.data.data.tlevelId
state.formParam.name = res.data.data.teacherName + '/' + res.data.data.userNo
state.formParam.orgLists = res.data.data.expertiseNames?.split(',').map(item => ({ name: item }))
state.teachingDate = dayjs(res.data.data.teachingDate, 'YYYY-MM-DD HH:mm'),
state.formParam.orgNames = state.formParam.orgName
state.formParam.teachingDate = res.data.data.teachingDate ? dayjs(res.data.data.teachingDate).format("YYYY-MM-DD HH:mm").toString() : "-"
state.formParam.courseStatus = String(state.formParam.courseStatus)
})
.catch((err) => {
});
// state.formParam = {
// recordType: 1,
// name: record.name,
// userNo: record.userNo,
// organizationName: record.organizationName,
// systemName: record.systemName,
// sLevelName: record.sLevelName,
// type: record.type,
// courseName: record.courseName,
// courseStatus:record.courseStatus,
// beginTime:record.beginTime,
// // ref< moment.Moment >(moment(record.beginTime,'YYYY-MM-DD')),
// // record.beginTime,
// teaching: record.teaching,
// score: record.score,
// studys: record.studys,
// remark: record.remark,
// createFrom: record.createFrom
// }
}
const column = ref([{
title: '基准课酬 ',
dataIndex: 'levelPay',
key: 'levelPay',
ellipsis: true, align: "center",
width: 120,
customRender: ({text})=>{
return text||text==0 ? text+'元' : '-'
}
}, {
title: '计划费用 ',
dataIndex: 'expense',
key: 'expense',
ellipsis: true, align: "center",
width: 120,
customRender: ({text})=>{
return text ? text+'元' : '-'
}
},
// {
// title: '应发费用 ',
// dataIndex: 'payableExpense',
// key: 'payableExpense',
// ellipsis: true, align: "center",
// width: 120,
// },
{
title: '状态 ',
dataIndex: 'status',
key: 'status',
ellipsis: true, align: "center",
width: 120,
customRender: (value) => {
return (
<div>
{String(value.record.status)
? {
"0": "待确认",
"1": "待提交",
"2": "审核中",
"3": "审核通过",
'4': '审核拒绝',
'5': '待提交',
}[value.record.status + ""] || ""
: "-"}
</div>
)
}
},
// {
// title: '操作 ',
// dataIndex: 'operation',
// key: 'operation',
// ellipsis: true, align: "right",
// width: 400,
// scopedSlots: { customRender: "action" },
// },
])
const gettableDatas = (record) => {
getExpenseByCourseId({ courseId: record.courseId,teacherId:record.teacherId })
.then((res) => {
tableDatas.value = res.data.data
// state.tableDataTotal = Number(res.data.data.total);
}).catch(err => {
message.destroy()
})
}
const tableDatas = ref([])
// function managerChange(e, l, d, t, orgName) {
// console.log(e, l);
// state.searchParam.userNo = d;
// state.searchParam.name = t;
// // state.searchParam.trainorgName=orgName
// }
//导出功能
const handleExport = () => {
window.open(
`${process.env.VUE_APP_BASE_API}/admin/export/exportInTeacherRecord?recordType=1&name=${state.searchParam.name || ''}&courseName=${state.searchParam.courseName || ''}&type=${state.searchParam.type || ''}&courseStatus=${state.searchParam.courseStatus || ''}&createdFee=${state.searchParam.createdFee || ''}&beginTime=${state.searchParam.beginTime || ''}&endTime=${state.searchParam.endTime || ''}&trainOrgId=${state.searchParam.trainOrgId || ''}&score=${state.searchParam.score || ''}&studys=${state.searchParam.studys || ''}
`)
}
const handleImport = () => {
state.showWork = true
}
const beforeUpload2 = (file) => {
const fileType = [
"xls",
"xlsx",
"zip",
];
if (!fileType.includes(file.name.split(".")[1])) {
message.error(
"仅支持.xls,.xlsx,.zip格式!"
);
return false;
}
const formData = new FormData();
formData.append("file", file);
fileUp(formData).then((res) => {
if (res.data.code === 200) {
state.imgList.push({
img: res.data.data,
name: file.name,
size: file.size,
});
// state.hasImgName = res.data.data;
}
});
return false;
};
const clearNonNumber = () => {
state.formParam.teaching = state.formParam.teaching.replace(/\D/g, '');
// state.formParam.teaching
}
const clearscoreNumber = () => {
state.formParam.score = state.formParam.score.replace(/\D/g, '');
}
const blurScore = () => {
// !state.formParam.score && (state.formParam.score = '0')
}
const focusScore = () => {
// state.formParam.score == 0 && (state.formParam.score = null)
}
const clearstudysNumber = () => {
state.formParam.studys = state.formParam.studys.replace(/\D/g, '');
}
//回车
const enterPressHadlerSearch = e => {
if (e.keyCode === 13) {
searchSubmit()
}
};
const sendName = () => {
state.formParam.courseName = state.formParam.courseName.replace(/\s/g, '');
}
const sendRemark = () => {
state.formParam.remark = state.formParam.remark.replace(/\s/g, '');
}
//TODO5
const handleOrgSearch = (value) => {
let temp = JSON.parse(JSON.stringify(state.orgListSearch));
//选择数据
state.filterOrgListSearch = temp.filter(item => item.label.includes(value))
}
const handleOrgSearch2 = (value) => {
let temp = JSON.parse(JSON.stringify(state.orgListSearch.filter(item => item.value !== '')));
//选择数据
state.filterOrgListSearch2 = temp.filter(item => item.label.includes(value))
}
return {
...toRefs(state),
sendName,
sendRemark,
sysTypeOptions,
enterPressHadlerSearch,
treetype,
validateField,
// managerChange,
clearNonNumber,
clearscoreNumber,
clearstudysNumber,
blurScore,
focusScore,
beforeUpload2,
rules,
orgListDatas,
changeOrg,
formRef,
column,
tableDatas,
gettableDatas,
handlemoreid,
handleExport,
handleImport,
LecturerSystemList,
LecturerLevelList,
scoreList,
studysList,
OnTheJobStatusList,
AuthenticationStatusList,
entryTypeList,
searchSubmit,
searchReset,
columns,
tableData,
changePagination,
addTeacher,
cancelTeacherDialog,
cancelTeacherDialog1,
handleLook,
cancel,
deleteModal,
handleModify,
closeDeleteTeacher,
createTeacherDialog,
tlevelChange,
getTableDate, //list接口数据调用
// getStu
LecturerSystemLista,
// TeacherSystem,
TeacherSystem1,
getOrganizationLista,
getOrganizationList,
// searchTimeChange,
cancelTeachingDialog,
// editTimeChange,
scoreChange,
locale,
checkMenu,
handleOrgSearch,
handleOrgSearch2
}
},
};
</script>
<style lang="scss" scoped >
.select .ant-picker {
width: 410px !important;
}
.headers {
height: 73px;
border-bottom: 1px solid #e8e8e8;
display: flex;
justify-content: space-between;
align-items: center;
// background-color: red;
margin-bottom: 20px;
flex-shrink: 0;
.headerTitle {
font-size: 18px;
font-weight: 600;
color: #333333;
line-height: 25px;
// margin-left: 24px;
}
}
.addTimeBox {
position: relative;
display: flex;
align-items: center;
.addTime {
position: absolute;
z-index: 1;
margin-left: 10px;
color: rgba(0, 0, 0, 0.4);
}
.ant-picker {
padding-left: 85px;
}
::v-deep .ant-picker-range .ant-picker-active-bar {
margin-left: 85px !important;
}
}
.addTimeBox .ant-picker {
padding-left: 85px;
}
//导出按钮icon
.daochu {
width: 16px;
height: 18px;
background-image: url("../../assets/images/coursewareManage/export1.png");
}
//弹窗内详情样式
.display1 {
display: inline-block;
width: 200px;
}
// .display0{
// display:inline-block ;
// width:200px ;
// text-align: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;
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;
}
}
.ant-table-cell-fix-right {
width: 300px !important;
}
.ant-table-tbody>tr>td {
text-align: center;
}
.InsideTeaching {
width: 100%;
height: 100%;
.filter {
margin-left: 38px;
margin-right: 38px;
margin-top: 30px;
display: flex;
justify-content: space-between;
flex-wrap: wrap;
.select {
margin-right: 20px;
margin-bottom: 20px;
}
}
}
.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;
}
}
}
}
}
}
}
.CreatePath {
.out {
z-index: 9999;
display: block;
position: absolute;
top: 90px;
width: 1080px !important;
height: 650px;
overflow: auto;
background-color: #fff;
box-shadow: 0 0 10px rgba(118, 136, 166, 0.21);
left: 50%;
top: 300px;
transform: translate(-50%, -50%);
.top {
width: 100%;
height: 68px;
background: linear-gradient(rgba(78, 166, 255, 0.2) 0%,
rgba(78, 166, 255, 0) 100%);
display: flex;
align-items: center;
.topimg {
width: 18px;
height: 18px;
margin-left: 27px;
margin-top: -2px;
}
.topc {
color: #000000;
font-size: 16px;
margin-left: 8px;
}
}
.mid {
width: 100%;
height: 100%;
background-color: #fff;
display: flex;
flex-direction: column;
align-items: center;
.d {
// margin-top: 8px;
// color: #ff4e4e;
margin-left: -5px;
}
}
}
}
//添加样式
.langbtn {
height: 40px;
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
margin-right: 14px;
flex-shrink: 0;
cursor: pointer;
.search {
width: 15px;
height: 16px;
margin-right: 5px;
background: url("../../assets/images/courseManage/add0.png") no-repeat;
background-size: 100% 100%;
}
}
// 重置样式
.resetbtn {
width: 100px;
height: 40px;
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
margin-right: 14px;
flex-shrink: 0;
cursor: pointer;
}
//展开收起样式
.moreidbtn {
border: none;
color: #4ea6ff;
// width: 80px
padding: 0;
}
//小竖线
.line {
float: left;
width: 3px;
height: 17px;
background: #4ea6ff;
border-radius: 30%;
margin-right: 5px;
margin-top: 3px;
}
//抽屉功能
.drawaer // /* 改变所有 a-tree-select 输入框的高度 */
// ::v-deep .ant-select:not(.ant-select-customize-input) .ant-select-selector{
// height: 40px;
// line-height: 40px;
// border-radius: 8px
// /* 确保文字垂直居中 */
// }
::v-deep .ant-select-single:not(.ant-select-customize-input) .ant-select-selector {
height: 40px !important;
line-height: 40px;
border-radius: 8px
}
// 抽屉内样式
.draitem {
width: 100%;
height: 40px !important;
border-radius: 8px;
line-height: 40px;
}
.drabtn {
height: 40px;
width: 80px;
border-radius: 8px;
margin-right: 20px
}
::v-deep .ant-select:not(.ant-select-customize-input) .ant-select-selector {
border-radius: 8px;
height: 40px;
}
.ant-col-12 {
height: 90px;
}
::v-deep .ant-select-selection-overflow-item {
margin-top: -2px;
}
::v-deep .ant-select-multiple .ant-select-selection-item {
height: 34px
}
.tableBox {
padding-bottom: 20px;
margin: 20px 38px 30px;
::v-deep .ant-select-dropdown {
display: inline-block;
}
::v-deep .ant-select-selection-item {
margin-left: 3px;
}
::v-deep .ant-pagination-options-size-changer.ant-select {
width: 84px;
}
.pa {
width: 100%;
display: flex;
justify-content: right;
}
}
.item_inp .i_upload_img[data-v-6b882d01] {
border-radius: 50%
}
</style>