新增讲师 ,讲师样式修改。

This commit is contained in:
gengxin
2025-02-13 14:19:35 +08:00
parent 50152f8984
commit 908f814fbc
3 changed files with 896 additions and 852 deletions

View File

@@ -1,16 +1,13 @@
<template>
<a-drawer class="largeDrawerInside" :visible="visible" placement="right" :closable="false"
width="80%" :title="false" @close="handleClose">
<a-drawer class="largeDrawerInside" :visible="visible" placement="right" :closable="false" width="80%" :title="false"
@close="handleClose">
<!-- 内部讲师查看详情 -->
<div class="LookInsideLecturer">
<div class="header" style="margin-top: -24px;margin-left: -24px;">
<div class="headerTitle">查看讲师</div>
<!-- <router-link :to="{ path: '/lecturerList', query: { activeKey: '1', } }"> -->
<img
@click="handleClose"
style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png"
/>
<img @click="handleClose" style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png" />
<!-- </router-link> -->
</div>
<a-layout-content>
@@ -22,45 +19,57 @@
<a-descriptions-item label="讲师头像">
<a-image :width="55" style="border-radius: 50%;width:55px;height:55px;" :src=formParam.photo />
</a-descriptions-item>
<a-descriptions-item label="讲师姓名"><div style="user-select:text">{{formParam.name}} / {{formParam.userNo}}</div></a-descriptions-item>
<a-descriptions-item label="讲师体系"><div style="user-select:text">{{formParam.tsystemName || '-'}}</div></a-descriptions-item>
<a-descriptions-item label="讲师姓名">
<div style="user-select:text">{{ formParam.name }} / {{ formParam.userNo }}</div>
</a-descriptions-item>
<a-descriptions-item label="讲师体系">
<div style="user-select:text">{{ formParam.tsystemName || '-' }}</div>
</a-descriptions-item>
<!-- 二层 -->
<a-descriptions-item label="讲师级别">{{formParam.tlevelName||'-'}}</a-descriptions-item>
<a-descriptions-item label="认证状态">{{ formParam.certStatus==0?'未认证' :formParam.certStatus==1 ?'已认证':'-'}}
<a-descriptions-item label="讲师级别">{{ formParam.tlevelName || '-' }}</a-descriptions-item>
<a-descriptions-item label="认证状态">{{ formParam.certStatus == 0 ? '未认证' : formParam.certStatus == 1 ? '已认证' : '-' }}
<span>
<a-button type="text" class="moreidbtn" v-if="formParam.certStatus == 1"
@click="handleup">查看认证资料</a-button>
</span>
</a-descriptions-item>
<a-descriptions-item label="授课时长"> <span v-if="formParam.teaching!= null" >{{formParam.teaching}}分钟({{ (Number(formParam.teaching) /60 ).toFixed(2)}}小时)</span><span v-else>-</span>
<a-descriptions-item label="授课时长"> <span v-if="formParam.teaching != null">{{ formParam.teaching }}分钟({{
(Number(formParam.teaching) / 60).toFixed(2)}}小时)</span><span v-else>-</span>
</a-descriptions-item>
<a-descriptions-item label="发薪地 ">{{formParam.salaryName||'-'}}</a-descriptions-item>
<a-descriptions-item label="发薪地 ">{{ formParam.salaryName || '-' }}</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==2 ?'停用':'-'}}</a-descriptions-item>
<a-descriptions-item label="录入方式">{{formParam.createFrom=='0'?'自动录入' :formParam.createFrom=='1'?'手动录入':'-'}}</a-descriptions-item>
<a-descriptions-item style="max-width: 400px;" label="所属组织" >
<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 == 2 ?'停用':'-'}}</a-descriptions-item>
<a-descriptions-item label="录入方式">{{ formParam.createFrom == '0' ? '自动录入'
: formParam.createFrom == '1' ? '手动录入':'-'}}</a-descriptions-item>
<a-descriptions-item style="max-width: 400px;" label="所属组织">
<span :title="formParam.orgName" style="user-select:text">{{ formParam.orgName || '-' }}</span>
</a-descriptions-item>
</a-descriptions>
<div style="margin-top: 10px;"></div>
<span class="line" ></span>
<a-descriptions title="其他信息" bordered :column="4" :contentStyle="rowCenter" :labelStyle="rowCenters" >
<span class="line"></span>
<a-descriptions title="其他信息" bordered :column="4" :contentStyle="rowCenter" :labelStyle="rowCenters">
<!-- 一层 -->
<a-descriptions-item style="max-width: 200px;" label="讲师介绍" :span="4" >
<div v-if="formParam.description !=null&&resp(formParam.description)" style="min-width: 500px;" v-html="formParam.description" ></div>
<a-descriptions-item style="max-width: 200px;" label="讲师介绍" :span="4">
<div v-if="formParam.description != null && resp(formParam.description)" style="min-width: 500px;"
v-html="formParam.description"></div>
<div v-else>-</div>
</a-descriptions-item>
<a-descriptions-item label="工作职责" :span="4">
<div v-if="formParam.workExperience !=null&&resp(formParam.workExperience)" style="min-width: 500px;" v-html="formParam.workExperience" ></div>
<div v-if="formParam.workExperience != null && resp(formParam.workExperience)" style="min-width: 500px;"
v-html="formParam.workExperience"></div>
<div v-else>-</div>
</a-descriptions-item>
<a-descriptions-item label="擅长课程" :span="4">
<div v-if="formParam.courses !=null&&resp(formParam.courses)" style="min-width: 500px;" v-html="formParam.courses" ></div>
<div v-if="formParam.courses != null && resp(formParam.courses)" style="min-width: 500px;"
v-html="formParam.courses"></div>
<div v-else>-</div>
</a-descriptions-item>
<a-descriptions-item label="教师专长" :span="4">
<a-tag v-if="formParam.expertiseNames" color="blue" style="margin-right:10px" v-for="item in formParam.expertiseNames?.split(',')">{{item}}</a-tag>
<a-tag v-if="formParam.expertiseNames" color="blue" style="margin-right:10px"
v-for="item in formParam.expertiseNames?.split(',')">{{ item }}</a-tag>
<span v-else>-</span>
</a-descriptions-item>
</a-descriptions>
@@ -69,79 +78,63 @@
<a-tabs v-model:activeKey="activeKey">
<a-tab-pane key="1" tab="授课记录">
<a-table :header-cell-style="{ 'text-align': 'center' }" :columns="teacherrecordsColumns"
:data-source="teacherrecordstableData" :loading="teacherrecordsLoading" :scroll="{ x: '1000' }" :pagination="pagination">
:data-source="teacherrecordstableData" :loading="teacherrecordsLoading" :scroll="{ x: '1000' }"
:pagination="pagination">
</a-table>
<div style="float: right;">
<a-pagination
v-if="tableDataTotal > 10"
:showSizeChanger="true"
:showQuickJumper="false"
:hideOnSinglePage="false"
:pageSize="searchParam.pageSize"
:current="searchParam.pageNo"
:total="tableDataTotal"
class="pagination"
@change="changePagination"
/>
<a-pagination v-if="tableDataTotal > 10" :showSizeChanger="true" :showQuickJumper="false"
:hideOnSinglePage="false" :pageSize="searchParam.pageSize" :current="searchParam.pageNo"
:total="tableDataTotal" class="pagination" @change="changePagination" />
</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,index }" >
<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, index }">
</template>
</a-table>
<div style="float: right;">
<a-pagination
v-if="teacherrepromotableDataTotal > 10"
:showSizeChanger="true"
:showQuickJumper="false"
:hideOnSinglePage="true"
:pageSize="teacherrepromo.pageSize"
:current="teacherrepromo.pageNo"
:total="teacherrepromotableDataTotal"
class="pagination"
@change="teacherrepromoPagination"
/>
<a-pagination v-if="teacherrepromotableDataTotal > 10" :showSizeChanger="true" :showQuickJumper="false"
:hideOnSinglePage="true" :pageSize="teacherrepromo.pageSize" :current="teacherrepromo.pageNo"
:total="teacherrepromotableDataTotal" class="pagination" @change="teacherrepromoPagination" />
</div>
</a-tab-pane>
</a-tabs>
</div>
</div>
</a-layout-content>
</div>
</a-drawer>
</template>
<script lang ="jsx">
import { useRouter,useRoute } from "vue-router";
import { reactive, toRefs, ref, computed,watch } from "vue"
<script lang="jsx">
import { useRouter, useRoute } from "vue-router";
import { reactive, toRefs, ref, computed, watch } from "vue"
import { useStore } from "vuex";
import {getTeacherById ,getTeacherLogList} from "../../api/Lecturer";
import { getTeacherById, getTeacherLogList } from "../../api/Lecturer";
import { getNewInTeacherCourseList } from "../../api/Teaching";
import avatar from '@/assets/avatar.png'
import Avatarman from '@/assets/Avatarman.png'
import Avatarwoman from '@/assets/Avatarwoman.png'
import dayjs from "dayjs";
export default{
name :"LookInsideLecturer",
components:{
export default {
name: "LookInsideLecturer",
components: {
},
props:{
visible:{
props: {
visible: {
type: Boolean,
default: false,
},
id:{
id: {
type: String,
default: ""
}
},
setup(props,emits){
const router=useRouter();
setup(props, emits) {
const router = useRouter();
const state = reactive({
activeKey:'1',
activeKey: '1',
formParam: {
},
promotionrecordsLoading: false, //晋级记录遮罩层
@@ -149,46 +142,46 @@ export default{
teacherrecordstableDataTotal: 0,//授课记录列表总条数
teacherrepromotableDataTotal: -1,//晋级记录总条数
teacherrecords: {
recordType:1,
recordType: 1,
pageNo: "1",
pageSize: "10",
id: null
},
teacherrepromo:{
userId:null,
teacherrepromo: {
userId: null,
pageNo: "1",
pageSize: "10",
}
});
watch(() => props.visible, (val) => {
console.log(val,'xixixiixix')
if(val){
console.log(val, 'xixixiixix')
if (val) {
const id = props.id
TeacherSystem(id)
}else{
} else {
state.formParam = {}
}
})
const isOrgNames = (val) => {
if(val){
if (val) {
const parts = val.split('/');
const reversedParts = parts.reverse();
state.formParam.orgNames = reversedParts.join('/');
}
}
const handleClose = () => {
emits.emit('update:visible',false)
emits.emit('update:visible', false)
}
//内部讲师详情
const TeacherSystem = (id) => {
getTeacherById({id,}).then((res) => {
let objA= res.data.data
console.log(objA ,'11111111111')
getTeacherById({ id, }).then((res) => {
let objA = res.data.data
console.log(objA, '11111111111')
state.formParam = objA
state.formParam.photo = state.formParam.photo ==null ?
state.formParam.photo = state.formParam.photo == null ?
state.formParam.gender == 1 ? Avatarman :
state.formParam.gender ==2 ? Avatarwoman : Avatarman : (state.formParam.photo.includes('upload')?state.formParam.photo:'/upload'+state.formParam.photo)
state.teacherrepromo.userId=res.data.data.id
state.formParam.gender == 2 ? Avatarwoman : Avatarman : (state.formParam.photo.includes('upload') ? state.formParam.photo : '/upload' + state.formParam.photo)
state.teacherrepromo.userId = res.data.data.id
console.log(state.teacherrepromo.id);
isOrgNames(state.formParam.orgName)
getteacherrecordstableData()
@@ -199,7 +192,7 @@ export default{
});
}
const resp = (val) => {
if(val){
if (val) {
const reg = /<[^<>]+>/g;
const value = val.replace(reg, "");
return value
@@ -225,7 +218,7 @@ export default{
ellipsis: true,
align: "center",
width: 180,
customCell:()=>{return{style:{userSelect: 'text'}}},
customCell: () => { return { style: { userSelect: 'text' } } },
},
{
title: '课程日期',
@@ -236,7 +229,7 @@ export default{
customRender: (value) => {
return (
<div style="user-select: text">
{value.record?.teachingDate?dayjs(value.record?.teachingDate).format("YYYY-MM-DD HH:mm"):'-'}
{ value.record?.teachingDate ? dayjs(value.record?.teachingDate).format("YYYY-MM-DD HH:mm") : '-' }
</div>
);
},
@@ -258,7 +251,7 @@ export default{
customRender: (value) => {
return (
<div>
{String(value.record.type)
{ String(value.record.type)
? {
"0": "在线课",
"1": "面授课",
@@ -266,7 +259,7 @@ export default{
"3": "作业员入模培训",
"4": "其他",
}[value.record.type + ""]
: "-"}
: "-" }
</div>
)
}
@@ -277,8 +270,8 @@ export default{
key: 'studys',
ellipsis: true, align: "center",
width: 120,
customRender: ({text})=>{
return text ? text+'人' : '-'
customRender: ({ text }) => {
return text ? text + '人' : '-'
}
},
{
@@ -287,8 +280,8 @@ export default{
key: 'teaching',
ellipsis: true, align: "center",
width: 130,
customRender: ({text})=>{
return text ? text+'分钟' : '-'
customRender: ({ text }) => {
return text ? text + '分钟' : '-'
}
},
{
@@ -300,7 +293,7 @@ export default{
customRender: (value) => {
return (
<div>
{value.record.score?Number(value.record.score).toFixed(0)==0?'-':Number(value.record.score).toFixed(2)+'分' : '-'}
{ value.record.score ? Number(value.record.score).toFixed(0) == 0 ? '-' : Number(value.record.score).toFixed(2) + '分' : '-' }
</div>
)
}
@@ -314,12 +307,12 @@ export default{
customRender: (value) => {
return (
<div>
{value.record.courseStatus == 0 || value.record.courseStatus == 1
{ value.record.courseStatus == 0 || value.record.courseStatus == 1
? {
"0": "未开课",
"1": "已开课",
}[value.record.courseStatus + ""] || ""
: "-"}
: "-" }
</div>
)
}
@@ -333,7 +326,7 @@ export default{
width: 200,
customRender: (value) => {
return (
<div>{value.record.remark || '-'}</div>
<div>{ value.record.remark || '-' }</div>
)
}
},
@@ -358,12 +351,12 @@ export default{
const pagination = computed(() => ({
total: state.teacherrecordstableDataTotal,
showSizeChanger: true,
showQuickJumper:true,
showQuickJumper: true,
current: state.teacherrecords.pageNo,
pageSize: state.teacherrecords.pageSize,
onChange: paginationChange,
}));
const paginationChange = (e,pageSize) => {
const paginationChange = (e, pageSize) => {
state.teacherrecords.pageNo = e;
state.teacherrecords.pageSize = pageSize
getteacherrecordstableData();
@@ -398,7 +391,7 @@ export default{
customRender: (value) => {
return (
<div>
{value.record.type == 1 ? "自动" : value.record.type == 0 ? '手动':"-"}
{ value.record.type == 1 ? "自动" : value.record.type == 0 ? '手动' : "-" }
</div>
)
}
@@ -430,7 +423,7 @@ export default{
// })
// state.promotionrecordsLoading = false
// };
const goback = ()=>{
const goback = () => {
router.back()
}
const store = useStore();
@@ -443,12 +436,12 @@ export default{
// return store.state.sysTypeMap.get(code)
// }
// getSysTypeMap()
const handleup = ()=>{
window.open (
const handleup = () => {
window.open(
`${process.env.VUE_APP_BOE_API_URL}/upload${state.formParam.certification}`
);
}
return{
);
}
return {
...toRefs(state),
router,
goback,
@@ -458,8 +451,8 @@ window.open (
TeacherSystem,
handleClose,
isOrgNames,
rowCenter:{"text-align":"left",'min-width':'176px'},
rowCenters:{"text-align":"center",'width':'160px','min-width':'110px'},
rowCenter: { "text-align": "left", 'min-width': '176px' },
rowCenters: { "text-align": "center", 'width': '160px', 'min-width': '110px' },
teacherrecordstableData,
teacherrecordsColumns,
resp,
@@ -477,8 +470,9 @@ window.open (
</script>
<style lang="scss" scoped>
.LookInsideLecturer {
padding:24px;
.header {
padding: 24px;
.header {
padding: 0px 32px;
height: 73px;
border-bottom: 1px solid #e8e8e8;
@@ -496,46 +490,52 @@ padding:24px;
line-height: 25px;
// margin-left: 24px;
}
}
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
}
.filter {
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{
.backbtn {
float: right;
margin-right: 20px;
border: none;
color: #4ea6ff;
width: 80px;
height:64px
border: none;
color: #4ea6ff;
width: 80px;
height: 64px
}
//小竖线
.line{
float:left;
width: 3px;
height: 16px;
background: #4ea6ff;
border-radius: 30%;
margin-left: -10px;
margin-top: 5px;
.line {
float: left;
width: 3px;
height: 16px;
background: #4ea6ff;
border-radius: 30%;
margin-left: -10px;
margin-top: 5px;
}
::v-deep .ant-descriptions-header{
margin-bottom: 18px ;
::v-deep .ant-descriptions-header {
margin-bottom: 18px;
}
.goback {
float: right;
padding-right: 70px;
@@ -558,36 +558,42 @@ margin-top: 5px;
color: #4ea6ff;
font-size: 14px;
}
}
.moreidbtn {
border: none;
color: #4ea6ff;
width: 80px
}
.moreidbtn {
border: none;
color: #4ea6ff;
width: 80px
}
::v-deep .ant-select-selection-overflow-item {
margin-top: -2px;
margin-top: -2px;
}
::v-deep .ant-select-multiple .ant-select-selection-item {
height: 34px
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;
}
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;
}
}
</style>

File diff suppressed because it is too large Load Diff

View File

@@ -1,25 +1,25 @@
<!-- 讲师列表 -->
<template>
<div class="LecturerList">
<div style="margin: 20px;margin-top:0;" >
<div style="margin: 20px;margin-top:0;">
<a-tabs v-model:activeKey="activeKey">
<a-tab-pane key="1" tab="内部讲师">
<InsideLecturer/>
<InsideLecturer />
</a-tab-pane>
<a-tab-pane key="2" tab="外部讲师">
<ExternalLecturer/>
<ExternalLecturer />
</a-tab-pane>
</a-tabs>
</div>
</div>
</template>
<script lang="jsx">
import { reactive, toRefs, ref, watch,onMounted,nextTick } from "vue";
import InsideLecturer from "../lecturer/InsideLecturer.vue"
import ExternalLecturer from "../lecturer/ExternalLecturer.vue"
import { useRoute } from 'vue-router'
import { useStore } from 'vuex'
export default {
</template>
<script lang="jsx">
import { reactive, toRefs, ref, watch, onMounted, nextTick } from "vue";
import InsideLecturer from "../lecturer/InsideLecturer.vue"
import ExternalLecturer from "../lecturer/ExternalLecturer.vue"
import { useRoute } from 'vue-router'
import { useStore } from 'vuex'
export default {
name: "LecturerList",
components: {
InsideLecturer,
@@ -29,12 +29,12 @@
const route = useRoute()
const store = useStore()
const state = reactive({
activeKey:'1'
activeKey: '1'
})
watch(
)
onMounted(() => {
if(route.query.activeKey){
if (route.query.activeKey) {
state.activeKey = route.query.activeKey
}
})
@@ -42,13 +42,14 @@
...toRefs(state),
}
},
};
</script>
<style lang="scss" scoped>
::v-deep .ant-tabs-tab{
};
</script>
<style lang="scss" scoped>
::v-deep .ant-tabs-tab {
font-weight: 600;
}
.LecturerList {
}
.LecturerList {
width: 100%;
height: 100%;
display: flex;
@@ -321,4 +322,3 @@
}
}
</style>