讲师列表页面调整

This commit is contained in:
wangxuemei
2024-07-24 17:45:12 +08:00
parent 950e0d3d6a
commit 7c3ac81e66
12 changed files with 1455 additions and 1320 deletions

8
.env
View File

@@ -2,6 +2,7 @@
VUE_APP_BASE=/manage
# api项目基础url
VUE_APP_BASE_API=/manageApi
VUE_APP_BASE_API1=https://pretest.zcwytd.com/
# systemApi
VUE_APP_SYS_API=/systemapi
# activityApi
@@ -13,11 +14,12 @@ VUE_APP_TOOL_FOLDERID=1147577145918910464
#文件路径
VUE_APP_FILE_PATH=/upload/
# 代理url 本地调试,不可以用在其他地方
VUE_APP_PROXY_URL=//u-pre.boe.com/manageApi
VUE_APP_PROXY_URL=//47.97.44.123:30001/
# VUE APP PROXY URL=//u-pre.boe.com/manageApi
# 登录url
VUE_APP_LOGIN_URL=//u-pre.boe.com/web?returnUrl=
VUE_APP_LOGIN_URL=//pretest.zcwytd.com/web?returnUrl=
# boe域名
VUE_APP_BOE_API_URL=//u-pre.boe.com
VUE_APP_BOE_API_URL=//47.97.44.123:30001
#打包路径
VUE_APP_OUTPUT_DIR=./dist

View File

@@ -13,7 +13,7 @@ export const getTeacherSystemList = (obj) => http.post('/admin/teacher/getSystem
// 获取内部讲师列表
export const getTeacherList = (obj) => http.post('/admin/teacher/getInTeacherList', obj)
//获取内部讲师发薪地
export const getTeacherPayRollPriceList = (obj) => http.post('/admin/teacher/getPayRollPlace', obj)
export const getPayRollPlace = (obj) => http.post('/admin/teacher/getPayRollPlace', obj)
//获取内部讲师级别
export const getLevel = (obj) => http.post('/admin/teacher/getLevel', obj)
//新增内部讲师
@@ -21,7 +21,7 @@ export const insertTeacher = (obj) => http.post('/admin/teacher/insertInTeacher'
//修改 内部讲师
export const updateInTeacher = (obj) => http.post('/admin/teacher/updateInTeacher' ,obj)
//内部讲师详情
export const getTeacherById= (obj) => http.post(`/admin/teacher/getTeacherById?userNo=${obj}`)
export const getTeacherById= (obj) => http.post(`/admin/teacher/getTeacherById?id=${obj}`)
//删除内部讲师
export const deleteInTeacher= (obj) => http.post(`/admin/teacher/deleteInTeacher?id=${obj}`)
//修改内部讲师状态

View File

@@ -613,69 +613,35 @@
<a-menu-item key="sub24-1">
<span
:class="{
circleActive: selectedKeys[0] === 'sub24-1' ? true : false,
circle: selectedKeys[0] === 'sub24-1' ? false : true,
circleActive: selectedKeys[0] === 'sub27-1' ? true : false,
circle: selectedKeys[0] === 'sub27-1' ? false : true,
}"
></span>
<router-link to="/insidelecturer">内部讲师</router-link>
<router-link to="/lecturerList">讲师列表</router-link>
</a-menu-item>
<a-menu-item key="sub24-2">
<span
:class="{
circleActive: selectedKeys[0] === 'sub24-2' ? true : false,
circle: selectedKeys[0] === 'sub24-2' ? false : true,
circleActive: selectedKeys[0] === 'sub27-2' ? true : false,
circle: selectedKeys[0] === 'sub27-2' ? false : true,
}"
></span>
<router-link to="/externallecturer">外部讲师</router-link>
<router-link to="/teachingRecord">授课记录</router-link>
</a-menu-item>
</a-sub-menu>
<a-sub-menu key="sub25" @titleClick="titleClick">
<template #icon>
<div class="imgBox">
<img style="width: 15px; height: 15px" src="../assets/images/navleft/project.png" />
</div>
</template>
<template #title>授课记录</template>
<a-menu-item key="sub25-1">
<a-menu-item key="sub24-3">
<span
:class="{
circleActive: selectedKeys[0] === 'sub25-1' ? true : false,
circle: selectedKeys[0] === 'sub25-1' ? false : true,
}"
></span>
<router-link to="/insideteaching">内部授课</router-link>
</a-menu-item>
<a-menu-item key="sub25-2">
<span
:class="{
circleActive: selectedKeys[0] === 'sub25-2' ? true : false,
circle: selectedKeys[0] === 'sub25-2' ? false : true,
}"
></span>
<router-link to="/externalteaching">外部授课</router-link>
</a-menu-item>
</a-sub-menu>
<a-sub-menu key="sub26" @titleClick="titleClick">
<template #icon>
<div class="imgBox">
<img style="width: 15px; height: 15px" src="../assets/images/navleft/project.png" />
</div>
</template>
<template #title>讲师费</template>
<a-menu-item key="sub26-1">
<span
:class="{
circleActive: selectedKeys[0] === 'sub26-1' ? true : false,
circle: selectedKeys[0] === 'sub26-1' ? false : true,
circleActive: selectedKeys[0] === 'sub27-3' ? true : false,
circle: selectedKeys[0] === 'sub27-3' ? false : true,
}"
></span>
<router-link to="/lecturerfeemanagement">讲师费管理</router-link>
</a-menu-item>
<a-menu-item key="sub26-2">
<a-menu-item key="sub24-4">
<span
:class="{
circleActive: selectedKeys[0] === 'sub26-2' ? true : false,
circle: selectedKeys[0] === 'sub26-2' ? false : true,
circleActive: selectedKeys[0] === 'sub27-4' ? true : false,
circle: selectedKeys[0] === 'sub27-4' ? false : true,
}"
></span>
<router-link to="/lecturerfeestatistics">讲师费统计</router-link>
@@ -696,20 +662,18 @@
mode="inline"
@click="handleClick"
>
<a-menu-item key="sub24" @titleClick="titleClick">
<router-link to="/insidelecturer">内部讲师</router-link>
<router-link to="/lecturerList">讲师列表</router-link>
</a-menu-item>
<a-menu-item key="sub25" @titleClick="titleClick">
<router-link to="/externallecturer">外部讲师</router-link>
<router-link to="/teachingRecord">授课记录</router-link>
</a-menu-item>
<a-menu-item key="sub26" @titleClick="titleClick">
<router-link to="/insideteaching">内部授课</router-link>
<router-link to="/lecturerfeemanagement">讲师费管理</router-link>
</a-menu-item>
<a-menu-item key="sub27" @titleClick="titleClick">
<router-link to="/externalteaching">外部授课</router-link>
<router-link to="/lecturerfeestatistics">讲师费统计</router-link>
</a-menu-item>
<a-menu-item key="sub10" @titleClick="titleClick">
<router-link to="/coursereviewedn">审核</router-link>
</a-menu-item>

View File

@@ -7,10 +7,11 @@
-->
<template>
<div style="border: 1px solid #ccc; width: 100%; ">
<Toolbar style="border-bottom: 1px solid #ccc ;font-size:4px" :editor="editorRef" :defaultConfig="toolbarConfig" mode="default" />
<Editor style="height: 100px; overflow-y: hidden" v-model="valueHtml" :defaultConfig="editorConfig" mode="default" @onCreated="handleCreated" @customPaste="customPaste" />
<Toolbar style="border-bottom: 1px solid #ccc ;font-size:4px" :editor="editorRef" :defaultConfig="toolbarConfig" mode="simple" />
<Editor style="height: 100px; overflow-y: hidden" v-model="valueHtml" :defaultConfig="editorConfig" mode="simple" @onCreated="handleCreated" @customPaste="customPaste" />
<span>{{ }}</span>
</div>
<!-- <el-button style="margin: 0 auto" @click="getEditorHTML">获取富文本HTML内容</el-button> -->
</template>
<script setup>
// 富文本编辑器文档链接: https://www.wangeditor.com/v5/getting-started.html
@@ -31,12 +32,22 @@
// 自定义图片上传
editorConfig.value.MENU_CONF['uploadImage'] = {
async customUpload(file, insertFn) {
console.log('上传图片', file);
// 将上传的file图片转换为base64
const base64 = URL.createObjectURL(file);
// 这里的file为上传的图片对象,insertFn传入
insertFn(base64, 'img');
const formData = new FormData();
formData.append("file", file);
fileUp(formData).then((res) => {
if (res.data.code === 200) {
// 最后插入图片 url alt href
console.log(
"上传图片结果",
process.env.VUE_APP_FILE_PATH + res.data.data
);
insertFn(
process.env.VUE_APP_FILE_PATH + res.data.data,
file.name,
res.data.data
);
}
});
},
};
@@ -63,12 +74,6 @@
callback(false);
}
};
// // 获取富文本html内容
// const getEditorHTML = () => {
// console.log(editorRef.value.getHtml());
// };
// 组件销毁时,也及时销毁编辑器
onBeforeUnmount(() => {
const editor = editorRef.value;

View File

@@ -69,112 +69,112 @@
</div>
</div>
<!-- 弹窗组件 -->
<a-modal :visible="teacherdialog" @ok="closeModal2" :footer="null" :closable="false"
wrapClassName="CreatePath" >
<div class="out">
<div class="top">
<div class="topc">{{teacherdialogtitle }}</div>
<div @click="cancelTeacherDialog" style="margin-left: 650px; cursor: pointer">
<img
style="width: 20px; height: 20px"
src="../../assets/images/basicinfo/close.png"
<a-drawer v-model:visible="teacherdialog" placement="right" @closa="cancelTeacherDialog" :maskClosable="true"
width="60%" :title="teacherdialogtitle">
<a-form :model="formParam" :rules="rules" layout="vertical">
<!-- 基本信息 -->
<a-row>
<a-col :span="24">
<span class="line"></span><span>基本信息</span>
</a-col>
<!-- 头像 -->
</a-row>
<a-row :gutter="16">
<a-col :span="24">
<a-upload
v-model:file-list="fileList"
name="avatar"
list-type="picture-card"
class="avatar-uploader"
:show-upload-list="false"
action="https://www.mocky.io/v2/5cc8019d300000980a055e76"
:before-upload="beforeUpload"
@change="handleChange"
/>
</div>
</div>
<div style="padding-bottom: 15px;">
<div class="headerLeft" style="margin-left: 33px">
<a-button @click="particulars" v-if="teacherdialog1 == 1">个人详情</a-button>
<a-button @click="teacherrecords" v-if="teacherdialog1 == 1">授课记录</a-button>
</div>
<!-- 个人详情 -->
<div style=" margin-left: 33px; margin-right: 33px; margin-bottom: 33px;"
v-show="tagsshow == 1">
<div class="ExternalLecturer">
<div class="filter">
<div class="filterItems">
<!-- <div class="select">
<span style="display:inline-block ;width:100px ;text-align:center ">头像 :</span>
</div> -->
<div class="select">
<div style="display:inline-block ;width:5px ;text-align:center ">
<img style="width: 5px; height: 5px" src="../../assets/images/basicinfo/asterisk.png" />
</div>
<!-- v-model:value="searchParam.name" -->
<span style="display:inline-block ;width:80px ;text-align:center ">讲师姓名 :</span>
<a-input v-if="teacherdialog1 == 0" v-model:value="formParam.name" style="width:200px; height: 40px; "
placeholder="请输入讲师姓名" allowClear showSearch>
</a-input>
<span v-if="teacherdialog1 == 1" class=display1>{{ formParam.name }}</span>
</div>
<div class="select">
<div style="display:inline-block ;width:5px ;text-align:center ">
<img style="width: 5px; height: 5px" src="../../assets/images/basicinfo/asterisk.png" />
</div>
<span style="display:inline-block ;width:80px ;text-align:center ">手机号码 :</span>
<a-input v-if="teacherdialog1 == 0" v-model:value="formParam.mobile" style="width:200px; height: 40px; "
placeholder="请输入11位手机号码" allowClear showSearch>
</a-input>
<span v-if="teacherdialog1 == 1" class=display1>{{ formParam.mobile }}</span>
</div>
<div class="select">
<div style="display:inline-block ;width:5px ;text-align:center ">
<img style="width: 5px; height: 5px" src="../../assets/images/basicinfo/asterisk.png" />
</div>
<span style="display:inline-block ;width:80px ;text-align:center ">邮箱:</span>
<a-input v-if="teacherdialog1 == 0" v-model:value="formParam.email" style="width:200px; height: 40px;"
placeholder="" allowClear showSearch>
</a-input>
<span v-if="teacherdialog1 == 1" class=display1>{{ formParam.email }}</span>
</div>
<div class="select">
<!-- <Editor/> -->
<div class="select">
<span style="display:inline-block ;width:80px ; text-align:center ">讲师介绍 :</span>
</div>
<Editor v-if="teacherdialog1 == 0" v-model="formParam.description"
style="width: 500px ;display:inline-block ; margin-top:-50px ;margin-left:80px " />
<span v-if="teacherdialog1 == 1" style="display: block; width: 500px;">{{ formParam.description
}}</span>
</div>
</a-col>
</a-row>
<!-- 讲师名称 ,手机号码-->
<a-row :gutter="16">
<a-col :span="12">
<a-form-item label="讲师名称" name="name">
<a-tree-select v-model:value="formParam.name" tree-data-simple-mode style=" width:276px ;"
:dropdown-style="{ maxHeight: '400px', overflow: 'auto' }" :tree-data="treeData" placeholder="请输入讲师名称" />
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="手机号码" name="mobile">
<a-input v-model:value="formParam.mobile" style="width:276px; height: 40px; "
placeholder="请输入手机号码" allowClear showSearch>
</a-input>
</a-form-item>
</a-col>
</a-row>
<!-- 供应商 ,邮箱-->
<a-row :gutter="16">
<a-col :span="12">
<a-form-item label="供应商" name="levelId">
<a-input v-model:value="formParam.userNo" style="width:276px; height: 40px; "
placeholder="请输入供应商" allowClear showSearch>
</a-input>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="讲师邮箱" name="email">
<a-input v-model:value="formParam.email" style="width:276px; height: 40px; "
placeholder="请输入讲师邮箱" allowClear showSearch>
</a-input>
</a-form-item>
</a-col>
</a-row>
<!-- 其他信息 -->
<a-row>
<a-col :span="24">
<span class="line"></span><span>其他信息</span>
</a-col>
</a-row>
<!-- 讲师介绍 -->
<a-row :gutter="16">
<a-col :span="24">
<a-form-item label="讲师介绍">
<Editor v-model="formParam.description "/>
</a-form-item>
</a-col>
</a-row>
<!-- 备注 -->
<div style="width: 834px;height: 1px;"></div>
<span style="display:inline-block ;width:115px ;text-align:center ">备注 :</span>
<a-row :gutter="16">
<a-col :span="24">
<a-form-item label="备注">
<a-textarea v-if="teacherdialog1 == 0"
v-model:value="formParam.remark"
showCount
:maxlength="200"
style="width: 500px; height: 100px; border-radius: 8px"
style="width: 100%; height: 100px; border-radius: 8px"
placeholder="请输入"/>
<span v-if="teacherdialog1 == 1" class=display1>{{ formParam.remark }}</span>
<div class="del_btnbox" v-if="teacherdialog1 == 0">
<a-button class="del_btn btn1" @click="cancelTeacherDialog" style="margin-right: 32px;">取消</a-button>
<a-button class="del_btn btn2" @click="createTeacherDialog" :loading="buttonLoading">保存
</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 style="margin-right: 8px" @click="cancelTeacherDialog" >取消</a-button>
<a-button type="primary" @click="createTeacherDialog" :loading="buttonLoading">保存
</a-button>
</div>
</div>
</div>
</div>
</div>
<!-- 授课记录 -->
<div class="ExternalLecturer" v-show="tagsshow == 2" style="margin">
<div style="padding: 33px">
<a-table :header-cell-style="{ 'text-align': 'center' }" style="border: 1px solid #f2f6fe"
:columns="teacherrecordsColumns" :data-source="teacherrecordstableData" :loading="teacherrecordsLoading"
@expand="expandTable" :pagination="false">
<template #bodyCell="{ record, column }">
</template>
</a-table>
</div>
<a-pagination v-if="teacherrecordstableDataTotal > 10" :showSizeChanger="true" :hideOnSinglePage="true"
:pageSize="pageSize" v-model:current="searchParam.pageNo" :total="teacherrecordstableDataTotal"
class="pagination" @change="teacherchangePagination" />
</div>
</div>
</div>
</a-modal>
</a-drawer>
<!-- 删除功能弹窗 -->
<div>
<a-modal v-model:visible="deleteTeacherdialog" :footer="null" :closable="close" wrapClassName="canclestu1"
@@ -1217,4 +1217,8 @@ export default {
}
}
}
//小竖线
.line{
float:left; width: 3px; height: 25px; background: #4ea6ff;border-radius: 30%; margin-right: 5px;
}
</style>

View File

@@ -252,7 +252,7 @@
</div>
</a-modal>
</div>
<!-- <div> <Upload/> </div> -->
<!-- <div> <ImageUpload/> </div> -->
</div>
</template>
<script lang="jsx">

File diff suppressed because it is too large Load Diff

View File

@@ -376,15 +376,15 @@
</div>
</a-modal>
</div>
<!-- <div> <Upload/> </div> -->
<!-- <div> <ImageUpload/> </div> -->
</div>
</template>
<script lang="jsx">
import { reactive, toRefs, ref } from "vue";
import moment, { Moment } from 'moment';
import { useRouter } from "vue-router";
import Editor from "@/components/project/Editor";
import Upload from "@/components/project/Upload";
// import Editor from "@/components/project/Editor";
import ImageUpload from "@/components/project/ImageUpload";
import { message } from "ant-design-vue";
import {getTeacherSystemList ,infoteacher, getTeacherExpertise,deleteInTeacherCourse} from "../../api/Lecturer";
import {getNewInTeacherCourseList,getOrganization,getTeacherCourseList,insertInTeacherCourse,updateInTeacherCourse} from "../../api/Teaching";
@@ -393,8 +393,8 @@ export default {
name: "InsideTeaching",
components: {
// AddTeacher,
Editor,
Upload
// Editor,
ImageUpload
},
setup() {
const router = useRouter();

View File

@@ -40,7 +40,7 @@
</div>
<!-- 更多筛选-->
<div v-if="moreid== 1 " style="width: 150px ;">
<div @click="handlemoreid()"> 更多筛选 </div>
<div @click="handlemoreid()">展开</div>
</div>
<div v-if="moreid== 2 " style="width: 150px ;">
<div @click="handlemoreid() "> 返回 </div>
@@ -466,7 +466,7 @@
import { reactive, toRefs, ref ,watch} from "vue";
import { message } from "ant-design-vue";
import dayjs from "dayjs";
import {getTeacherPayRollPriceList} from "../../api/Lecturer";
import {getPayRollPlace} from "../../api/Lecturer";
import {getTeacherFeeList,getTeacherFeeDetail,addTeacherFee ,updateTeacherFee,updateStatusSubmit,updateStatusWithDraw,getTrainOrg,getTeacherLevel} from "../../api/lecturerFeeManagement";
// lecturerFeeManagement
// import {getProjSt} from "../../api/indexProjStu";
@@ -577,7 +577,7 @@ export default {
// { value: 0, label: "发薪地B1" },
])
const PlaceOfPayLista =() => {
getTeacherPayRollPriceList().then((res)=>{
getPayRollPlace().then((res)=>{
if (res.data.code === 200) {
let arr = res.data.data;
let array = [];

View File

@@ -178,7 +178,7 @@
import { reactive, toRefs, ref, watch } from "vue";
import { message } from "ant-design-vue";
import dayjs from "dayjs";
import { getTeacherPayRollPriceList } from "../../api/Lecturer";
import { getPayRollPlace } from "../../api/Lecturer";
import { getOrganization } from "../../api/Teaching";
import { queryTeacherFeeTotalList, queryTeacherFeeMonthly, getTeacherFeeDetailListByTeacherNo, getTeacherFeeListByTeacherNo ,getPreviousTeacherfee} from "../../api/lecturerFeeStatistics";
export default {
@@ -342,7 +342,7 @@ export default {
])
//获取讲师发薪地列表
const PlaceOfPayLista = () => {
getTeacherPayRollPriceList().then((res) => {
getPayRollPlace().then((res) => {
if (res.data.code === 200) {
let arr = res.data.data;
let array = [];

View File

@@ -0,0 +1,371 @@
ExternalLecturer
<template>
<!-- 外部讲师查看详情 -->
<div class="LookExternalLecturer">
<a-layout-header style="background: white;color: black; font-size: 20px ;">
<span>查看讲师</span>
<a-button @click="handleBack" class="backbtn" type="text">返回</a-button>
</a-layout-header>
<a-divider style="height: 1px; background-color: #b7b8b7 ;margin: 0;" />
<a-layout-content>
<!-- 讲师信息 -->
<div style="width: 100%;margin-top: 10px;">
<span class="line"></span>
<a-descriptions title="讲师信息" bordered :column="4" :contentStyle="rowCenter" :labelStyle="rowCenter">
<!-- 一层 -->
<a-descriptions-item label="讲师头像">{{formParam.url }}</a-descriptions-item>
<a-descriptions-item label="讲师工号">{{formParam.userNo}}</a-descriptions-item>
<a-descriptions-item label="讲师姓名">{{formParam.name}}</a-descriptions-item>
<a-descriptions-item label="讲师体系">{{formParam.systemId}}</a-descriptions-item>
<!-- 二层 -->
<a-descriptions-item label="讲师级别">{{formParam.levelId }}</a-descriptions-item>
<a-descriptions-item label="认证状态">{{ formParam.certStatus==0?'未认证' :formParam.certStatus==1 ?'已认证':''}}</a-descriptions-item>
<a-descriptions-item label="授课时长">{{formParam.teaching}}</a-descriptions-item>
<a-descriptions-item label="发薪地 ">{{formParam.payrollPlaceId}}</a-descriptions-item>
<!-- 三层 -->
<a-descriptions-item label="在职">{{formParam.waitStatus==0?'在职' :formParam.waitStatus==1 ?'离职':''}}</a-descriptions-item>
<a-descriptions-item label="账号状态">{{formParam.status==0?'临时' :formParam.status==1 ?'启用':formParam.status==1 ?'停用':''}}</a-descriptions-item>
<a-descriptions-item label="所属组织" :span="2">{{formParam.departId}}</a-descriptions-item>
</a-descriptions>
<div style="margin-top: 10px;"></div>
<span class="line" ></span>
<a-descriptions title="其他信息" bordered :column="4" :contentStyle="rowCenter" :labelStyle="rowCenter" >
<!-- 一层 -->
<a-descriptions-item label="讲师介绍" :span="4"><div style="min-width: 500px;">{{formParam.description}}</div> </a-descriptions-item>
<a-descriptions-item label="工作职责" :span="4">{{formParam.workExperience}}</a-descriptions-item>
<a-descriptions-item label="擅长课程" :span="4">{{formParam.courses}}</a-descriptions-item>
<a-descriptions-item label="教师专长" :span="4">{{formParam.TeacherExpertise}}</a-descriptions-item>
</a-descriptions>
<!-- 记录 -->
<div style="margin-top: 1px;"></div>
<a-tabs v-model:activeKey="activeKey">
<a-tab-pane key="1" tab="授课记录">
<a-table :header-cell-style="{ 'text-align': 'center' }" style="border: 1px solid #f2f6fe" :columns="teacherrecordsColumns"
:data-source="teacherrecordstableData" :loading="teacherrecordsLoading" @expand="expandTable" :pagination="false">
<template #bodyCell="{ record, column }" >
<!-- 鼠标悬停提示 -->
<template v-if="column.key === 'score'">
<a-space style="display:flex ;justify-content: space-around; ">
<a-popover>
<template #content>
<p>{{ record.score }}</p>
</template>
<span>{{ record.score }}</span>
</a-popover>
</a-space>
</template>
</template>
</a-table>
<div style="float: right;">
<a-pagination
v-if="teacherrecordstableDataTotal > 10"
:showSizeChanger="true"
:hideOnSinglePage="true"
:pageSize="pageSize"
v-model:current="teacherrecords.pageNo"
:total="teacherrecordstableDataTotal"
class="pagination"
@change="teacherchangePagination"
/>
</div>
</a-tab-pane>
<a-tab-pane key="2" tab="晋级记录">
<a-table :header-cell-style="{ 'text-align': 'center' }" style="border: 1px solid #f2f6fe" :columns="promotionrecordsColumns"
:data-source="promotionrecordstableData" :loading="promotionrecordsLoading" @expand="expandTable" :pagination="false">
<template #bodyCell="{ record, column }" >
</template>
</a-table>
<div style="float: right;">
<a-pagination
v-if="teacherrepromotableDataTotal > 10"
:showSizeChanger="true"
:hideOnSinglePage="true"
:pageSize="pageSize"
v-model:current="teacherrepromo.pageNo"
:total="teacherrepromotableDataTotal"
class="pagination"
@change="teacherrepromoPagination"
/>
</div>
</a-tab-pane>
</a-tabs>
</div>
</a-layout-content>
</div>
</template>
<script lang ="jsx">
import { useRouter,useRoute } from "vue-router";
import { reactive, toRefs, ref } from "vue"
import {getTeacherById,getTeacherCourseList ,getTeacherLogList} from "../../api/Lecturer";
export default{
name :"LookExternalLecturer",
components:{
},
setup(){
const router=useRouter();
const { query: { id }} = useRoute();
const state = reactive({
activeKey:'1',
id,
formParam: {
},
promotionrecordsLoading: false, //晋级记录遮罩层
teacherrecordsLoading: false,// 授课记录遮罩层
teacherrecordstableDataTotal: -1,//授课记录列表总条数
teacherrepromotableDataTotal: -1,//晋级记录总条数
teacherrecords: {
pageNo: "1",
pageSize: "10",
id: null
},
teacherrepromo:{
id:null,
pageNo: "1",
pageSize: "10",
}
});
//内部讲师详情
const TeacherSystem = () => {
getTeacherById(state.id).then((res) => {
console.log("内部讲师详情", res.data);
state.formParam = res.data.data
})
.catch((err) => {
console.log("内部讲师详情", err);
});
}
TeacherSystem()
//返回上一层
const handleBack=()=>{
router.back()
};
//授课记录列表
const teacherrecordsColumns = ref([
{
title: '课程编号',
dataIndex: 'offcourseId',
key: 'offcourseId',
elipsis: true, align: "center",
width: 120,
},
{
title: '课程名称',
dataIndex: 'name',
key: 'name',
elipsis: true, align: "center",
width: 120,
},
{
title: '课程日期',
dataIndex: 'beginTime',
key: 'beginTime',
elipsis: true, align: "center",
width: 120,
},
{
title: '内容分类',
dataIndex: 'nrfl',
key: 'nrfl',
elipsis: true, align: "center",
width: 120,
},
{
title: '课程类型',
dataIndex: 'type',
key: 'type',
elipsis: true, align: "center",
width: 120,
customRender: (value) => {
return (
<div>
{value.record.type == 1 || value.record.type == 2 || value.record.type == 3
? {
"1": "项目开课",
"2": "路径开课",
"3": "面授开课",
}[value.record.type + ""] || ""
: "-"}
</div>
)
}
},
{
title: '学习总人数',
dataIndex: 'projectMember',
key: 'projectMember',
elipsis: true, align: "center",
width: 120,
},
{
title: '授课时长',
dataIndex: 'duration',
key: 'duration',
elipsis: true, align: "center",
width: 120,
},
{
title: '评分',
dataIndex: 'score ',
key: 'score ',
elipsis: true, align: "center",
width: 120,
},
{
title: '开课状态',
dataIndex: 'status ',
key: 'status ',
elipsis: true, align: "center",
width: 120,
customRender: (value) => {
return (
<div>
{value.record.status == 0 || value.record.status == 1
? {
"0": "未开课",
"1": "已开课",
}[value.record.status + ""] || ""
: "-"}
</div>
)
}
},
{
title: '备注',
dataIndex: 'score ',
key: 'score ',
elipsis: true, align: "center",
width: 120,
scopedSlots: { customRender: "score" },
},
])
//授课记录列表数据
const teacherrecordstableData = ref([
])
const getteacherrecordstableData = () => {
state.teacherrecordsLoading = true
state.teacherrecords.id = state.id
let obj = { ...state.teacherrecords }
// api接口
getTeacherCourseList(obj).then((res) => {
teacherrecordstableData.value = res.data.data.records
state.teacherrecordstableDataTotal = Number(res.data.data.total);
state.teacherrecordsLoading = false
})
};
getteacherrecordstableData()
//授课翻页
const teacherchangePagination = (page) => {
state.teacherrecords.pageNo = page;
getteacherrecordstableData();
};
//晋级记录翻页
const teacherrepromoPagination = (page) => {
state.teacherrecords.pageNo = page;
getpromotionrecordstableData();
};
//晋级记录列表
const promotionrecordsColumns = ref([
{
title: '变更时间',
dataIndex: 'operatorTime',
key: 'operatorTime',
elipsis: true, align: "center",
width: 120,
},
{
title: '变更方式',
dataIndex: 'operatorType',
key: 'operatorType',
elipsis: true, align: "center",
width: 120,
},
{
title: '变更结果',
dataIndex: 'afterInfo',
key: 'afterInfo',
elipsis: true, align: "center",
width: 120,
},
{
title: '操作人',
dataIndex: 'operatorId',
key: 'operatorId',
elipsis: true, align: "center",
width: 120,
},
])
//晋级记录列表数据
const promotionrecordstableData = ref([
])
const getpromotionrecordstableData = () => {
state.promotionrecordsLoading = true
state.teacherrepromo.id = state.id
getTeacherLogList(state.teacherrepromo).then((res) => {
promotionrecordstableData.value = res.data.data.records
state.teacherrepromotableDataTotal = Number(res.data.data.total);
})
state.promotionrecordsLoading = false
};
getpromotionrecordstableData()
return{
...toRefs(state),
router,
TeacherSystem,
handleBack,
rowCenter:{"text-align":"center"},
teacherrecordstableData,
teacherrecordsColumns,
getteacherrecordstableData,
teacherchangePagination,
teacherrepromoPagination,
promotionrecordsColumns,
promotionrecordstableData,
getpromotionrecordstableData
}
}
}
</script>
<style lang="scss" scoped>
.LookExternalLecturer {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
.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;
}
}
}
.backbtn{
float: right;
margin-right: 20px;
border: none;
color: #4ea6ff;
width: 80px;
height:64px
}
//小竖线
.line{
float:left; width: 3px; height: 25px; background: #4ea6ff;border-radius: 30%; margin-right: 5px;
}
::v-deep .ant-descriptions-header{
margin-bottom: 10px ;
}
</style>

View File

@@ -0,0 +1,369 @@
<template>
<!-- 内部讲师查看详情 -->
<div class="LookInsideLecturer">
<a-layout-header style="background: white;color: black; font-size: 20px ;">
<span>查看讲师</span>
<a-button @click="handleBack" class="backbtn" type="text">返回</a-button>
</a-layout-header>
<a-divider style="height: 1px; background-color: #b7b8b7 ;margin: 0;" />
<a-layout-content>
<!-- 讲师信息 -->
<div style="width: 100%;margin-top: 10px;">
<span class="line"></span>
<a-descriptions title="讲师信息" bordered :column="4" :contentStyle="rowCenter" :labelStyle="rowCenter">
<!-- 一层 -->
<a-descriptions-item label="讲师头像">{{formParam.url}}</a-descriptions-item>
<a-descriptions-item label="讲师工号">{{formParam.userNo}}</a-descriptions-item>
<a-descriptions-item label="讲师姓名">{{formParam.name}}</a-descriptions-item>
<a-descriptions-item label="讲师体系">{{formParam.systemId}}</a-descriptions-item>
<!-- 二层 -->
<a-descriptions-item label="讲师级别">{{formParam.levelId }}</a-descriptions-item>
<a-descriptions-item label="认证状态">{{ formParam.certStatus==0?'未认证' :formParam.certStatus==1 ?'已认证':''}}</a-descriptions-item>
<a-descriptions-item label="授课时长">{{formParam.teaching}}</a-descriptions-item>
<a-descriptions-item label="发薪地 ">{{formParam.payrollPlaceId}}</a-descriptions-item>
<!-- 三层 -->
<a-descriptions-item label="在职">{{formParam.waitStatus==0?'在职' :formParam.waitStatus==1 ?'离职':''}}</a-descriptions-item>
<a-descriptions-item label="账号状态">{{formParam.status==0?'临时' :formParam.status==1 ?'启用':formParam.status==1 ?'停用':''}}</a-descriptions-item>
<a-descriptions-item label="所属组织" :span="2">{{formParam.departId}}</a-descriptions-item>
</a-descriptions>
<div style="margin-top: 10px;"></div>
<span class="line" ></span>
<a-descriptions title="其他信息" bordered :column="4" :contentStyle="rowCenter" :labelStyle="rowCenter" >
<!-- 一层 -->
<a-descriptions-item label="讲师介绍" :span="4"><div style="min-width: 500px;">{{formParam.description}}</div> </a-descriptions-item>
<a-descriptions-item label="工作职责" :span="4">{{formParam.workExperience}}</a-descriptions-item>
<a-descriptions-item label="擅长课程" :span="4">{{formParam.courses}}</a-descriptions-item>
<a-descriptions-item label="教师专长" :span="4">{{formParam.TeacherExpertise}}</a-descriptions-item>
</a-descriptions>
<!-- 记录 -->
<div style="margin-top: 1px;"></div>
<a-tabs v-model:activeKey="activeKey">
<a-tab-pane key="1" tab="授课记录">
<a-table :header-cell-style="{ 'text-align': 'center' }" style="border: 1px solid #f2f6fe" :columns="teacherrecordsColumns"
:data-source="teacherrecordstableData" :loading="teacherrecordsLoading" @expand="expandTable" :pagination="false">
<template #bodyCell="{ record, column }" >
<!-- 鼠标悬停提示 -->
<template v-if="column.key === 'score'">
<a-space style="display:flex ;justify-content: space-around; ">
<a-popover>
<template #content>
<p>{{ record.score }}</p>
</template>
<span>{{ record.score }}</span>
</a-popover>
</a-space>
</template>
</template>
</a-table>
<div style="float: right;">
<a-pagination
v-if="teacherrecordstableDataTotal > 10"
:showSizeChanger="true"
:hideOnSinglePage="true"
:pageSize="pageSize"
v-model:current="teacherrecords.pageNo"
:total="teacherrecordstableDataTotal"
class="pagination"
@change="teacherchangePagination"
/>
</div>
</a-tab-pane>
<a-tab-pane key="2" tab="晋级记录">
<a-table :header-cell-style="{ 'text-align': 'center' }" style="border: 1px solid #f2f6fe" :columns="promotionrecordsColumns"
:data-source="promotionrecordstableData" :loading="promotionrecordsLoading" @expand="expandTable" :pagination="false">
<template #bodyCell="{ record, column }" >
</template>
</a-table>
<div style="float: right;">
<a-pagination
v-if="teacherrepromotableDataTotal > 10"
:showSizeChanger="true"
:hideOnSinglePage="true"
:pageSize="pageSize"
v-model:current="teacherrepromo.pageNo"
:total="teacherrepromotableDataTotal"
class="pagination"
@change="teacherrepromoPagination"
/>
</div>
</a-tab-pane>
</a-tabs>
</div>
</a-layout-content>
</div>
</template>
<script lang ="jsx">
import { useRouter,useRoute } from "vue-router";
import { reactive, toRefs, ref } from "vue"
import {getTeacherById,getTeacherCourseList ,getTeacherLogList} from "../../api/Lecturer";
export default{
name :"LookInsideLecturer",
components:{
},
setup(){
const router=useRouter();
const { query: { id }} = useRoute();
const state = reactive({
activeKey:'1',
id,
formParam: {
},
promotionrecordsLoading: false, //晋级记录遮罩层
teacherrecordsLoading: false,// 授课记录遮罩层
teacherrecordstableDataTotal: -1,//授课记录列表总条数
teacherrepromotableDataTotal: -1,//晋级记录总条数
teacherrecords: {
pageNo: "1",
pageSize: "10",
id: null
},
teacherrepromo:{
id:null,
pageNo: "1",
pageSize: "10",
}
});
//内部讲师详情
const TeacherSystem = () => {
getTeacherById(state.id).then((res) => {
console.log("内部讲师详情", res.data);
state.formParam = res.data.data
})
.catch((err) => {
console.log("内部讲师详情", err);
});
}
TeacherSystem()
//返回上一层
const handleBack=()=>{
router.back()
};
//授课记录列表
const teacherrecordsColumns = ref([
{
title: '课程编号',
dataIndex: 'offcourseId',
key: 'offcourseId',
elipsis: true, align: "center",
width: 120,
},
{
title: '课程名称',
dataIndex: 'name',
key: 'name',
elipsis: true, align: "center",
width: 120,
},
{
title: '课程日期',
dataIndex: 'beginTime',
key: 'beginTime',
elipsis: true, align: "center",
width: 120,
},
{
title: '内容分类',
dataIndex: 'nrfl',
key: 'nrfl',
elipsis: true, align: "center",
width: 120,
},
{
title: '课程类型',
dataIndex: 'type',
key: 'type',
elipsis: true, align: "center",
width: 120,
customRender: (value) => {
return (
<div>
{value.record.type == 1 || value.record.type == 2 || value.record.type == 3
? {
"1": "项目开课",
"2": "路径开课",
"3": "面授开课",
}[value.record.type + ""] || ""
: "-"}
</div>
)
}
},
{
title: '学习总人数',
dataIndex: 'projectMember',
key: 'projectMember',
elipsis: true, align: "center",
width: 120,
},
{
title: '授课时长',
dataIndex: 'duration',
key: 'duration',
elipsis: true, align: "center",
width: 120,
},
{
title: '评分',
dataIndex: 'score ',
key: 'score ',
elipsis: true, align: "center",
width: 120,
},
{
title: '开课状态',
dataIndex: 'status ',
key: 'status ',
elipsis: true, align: "center",
width: 120,
customRender: (value) => {
return (
<div>
{value.record.status == 0 || value.record.status == 1
? {
"0": "未开课",
"1": "已开课",
}[value.record.status + ""] || ""
: "-"}
</div>
)
}
},
{
title: '备注',
dataIndex: 'score ',
key: 'score ',
elipsis: true, align: "center",
width: 120,
scopedSlots: { customRender: "score" },
},
])
//授课记录列表数据
const teacherrecordstableData = ref([
])
const getteacherrecordstableData = () => {
state.teacherrecordsLoading = true
state.teacherrecords.id = state.id
let obj = { ...state.teacherrecords }
// api接口
getTeacherCourseList(obj).then((res) => {
teacherrecordstableData.value = res.data.data.records
state.teacherrecordstableDataTotal = Number(res.data.data.total);
state.teacherrecordsLoading = false
})
};
getteacherrecordstableData()
//授课翻页
const teacherchangePagination = (page) => {
state.teacherrecords.pageNo = page;
getteacherrecordstableData();
};
//晋级记录翻页
const teacherrepromoPagination = (page) => {
state.teacherrecords.pageNo = page;
getpromotionrecordstableData();
};
//晋级记录列表
const promotionrecordsColumns = ref([
{
title: '变更时间',
dataIndex: 'operatorTime',
key: 'operatorTime',
elipsis: true, align: "center",
width: 120,
},
{
title: '变更方式',
dataIndex: 'operatorType',
key: 'operatorType',
elipsis: true, align: "center",
width: 120,
},
{
title: '变更结果',
dataIndex: 'afterInfo',
key: 'afterInfo',
elipsis: true, align: "center",
width: 120,
},
{
title: '操作人',
dataIndex: 'operatorId',
key: 'operatorId',
elipsis: true, align: "center",
width: 120,
},
])
//晋级记录列表数据
const promotionrecordstableData = ref([
])
const getpromotionrecordstableData = () => {
state.promotionrecordsLoading = true
state.teacherrepromo.id = state.id
getTeacherLogList(state.teacherrepromo).then((res) => {
promotionrecordstableData.value = res.data.data.records
state.teacherrepromotableDataTotal = Number(res.data.data.total);
})
state.promotionrecordsLoading = false
};
getpromotionrecordstableData()
return{
...toRefs(state),
router,
TeacherSystem,
handleBack,
rowCenter:{"text-align":"center"},
teacherrecordstableData,
teacherrecordsColumns,
getteacherrecordstableData,
teacherchangePagination,
teacherrepromoPagination,
promotionrecordsColumns,
promotionrecordstableData,
getpromotionrecordstableData
}
}
}
</script>
<style lang="scss" scoped>
.LookInsideLecturer {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
.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;
}
}
}
.backbtn{
float: right;
margin-right: 20px;
border: none;
color: #4ea6ff;
width: 80px;
height:64px
}
//小竖线
.line{
float:left; width: 3px; height: 25px; background: #4ea6ff;border-radius: 30%; margin-right: 5px;
}
::v-deep .ant-descriptions-header{
margin-bottom: 10px ;
}
</style>