讲师体系管理页面调整

This commit is contained in:
wangxuemei
2024-08-01 17:54:39 +08:00
parent d0c738380e
commit 95895d1d5a
5 changed files with 428 additions and 60 deletions

View File

@@ -613,26 +613,26 @@
<a-menu-item key="sub24-1">
<span
:class="{
circleActive: selectedKeys[0] === 'sub27-1' ? true : false,
circle: selectedKeys[0] === 'sub27-1' ? false : true,
circleActive: selectedKeys[0] === 'sub24-1' ? true : false,
circle: selectedKeys[0] === 'sub24-1' ? false : true,
}"
></span>
<router-link to="/lecturerList">讲师列表</router-link>
<router-link to="/lecturerlist">讲师列表</router-link>
</a-menu-item>
<a-menu-item key="sub24-2">
<span
:class="{
circleActive: selectedKeys[0] === 'sub27-2' ? true : false,
circle: selectedKeys[0] === 'sub27-2' ? false : true,
circleActive: selectedKeys[0] === 'sub24-2' ? true : false,
circle: selectedKeys[0] === 'sub24-2' ? false : true,
}"
></span>
<router-link to="/teachingRecord">授课记录</router-link>
<router-link to="/teachingrecord">授课记录</router-link>
</a-menu-item>
<a-menu-item key="sub24-3">
<span
:class="{
circleActive: selectedKeys[0] === 'sub27-3' ? true : false,
circle: selectedKeys[0] === 'sub27-3' ? false : true,
circleActive: selectedKeys[0] === 'sub24-3' ? true : false,
circle: selectedKeys[0] === 'sub24-3' ? false : true,
}"
></span>
<router-link to="/lecturerfeemanagement">讲师费管理</router-link>
@@ -640,12 +640,30 @@
<a-menu-item key="sub24-4">
<span
:class="{
circleActive: selectedKeys[0] === 'sub27-4' ? true : false,
circle: selectedKeys[0] === 'sub27-4' ? false : true,
circleActive: selectedKeys[0] === 'sub24-4' ? true : false,
circle: selectedKeys[0] === 'sub24-4' ? false : true,
}"
></span>
<router-link to="/lecturerfeestatistics">讲师费统计</router-link>
</a-menu-item>
<a-menu-item key="sub24-5">
<span
:class="{
circleActive: selectedKeys[0] === 'sub24-5' ? true : false,
circle: selectedKeys[0] === 'sub24-5' ? false : true,
}"
></span>
<router-link to="/organization">归属组织管理</router-link>
</a-menu-item>
<a-menu-item key="sub24-6">
<span
:class="{
circleActive: selectedKeys[0] === 'sub24-6' ? true : false,
circle: selectedKeys[0] === 'sub24-6' ? false : true,
}"
></span>
<router-link to="/lecturerSystem">讲师体系管理</router-link>
</a-menu-item>
</a-sub-menu>
</a-menu>
</div>
@@ -663,10 +681,10 @@
@click="handleClick"
>
<a-menu-item key="sub24" @titleClick="titleClick">
<router-link to="/lecturerList">讲师列表</router-link>
<router-link to="/lecturerlist">讲师列表</router-link>
</a-menu-item>
<a-menu-item key="sub25" @titleClick="titleClick">
<router-link to="/teachingRecord">授课记录</router-link>
<router-link to="/teachingrecord">授课记录</router-link>
</a-menu-item>
<a-menu-item key="sub26" @titleClick="titleClick">
<router-link to="/lecturerfeemanagement">讲师费管理</router-link>
@@ -674,6 +692,12 @@
<a-menu-item key="sub27" @titleClick="titleClick">
<router-link to="/lecturerfeestatistics">讲师费统计</router-link>
</a-menu-item>
<a-menu-item key="sub28" @titleClick="titleClick">
<router-link to="/organization">归属组织管理</router-link>
</a-menu-item>
<a-menu-item key="sub29" @titleClick="titleClick">
<router-link to="/lecturerSystem">讲师体系管理</router-link>
</a-menu-item>
<a-menu-item key="sub10" @titleClick="titleClick">
<router-link to="/coursereviewedn">审核</router-link>
</a-menu-item>
@@ -1026,7 +1050,7 @@ export default {
{
href: "/externalteaching",
openKeys: "sub27",
selectedKeys: "ssub27",
selectedKeys: "sub27",
pagename: "外部授课",
},
{

View File

@@ -154,11 +154,10 @@
</a-col>
<a-col :span="12">
<a-form-item label="初始授课时长" name="defaultTeachingTime">
<a-input v-model:value="formParam.defaultTeachingTime" style="width:80%; height: 40px; " placeholder="0"
<a-input v-model:value="formParam.defaultTeachingTime" style="width:80%; height: 40px; border-radius: 8px; " placeholder="0"
allowClear showSearch suffix="分钟">
</a-input>
<span v-if="formParam.defaultTeachingTime" style="margin-left: 5px ;">{{ (formParam.defaultTeachingTime / 60
).toFixed(2) }}小时</span>
<span style="margin-left: 5px ;">{{ (formParam.defaultTeachingTime /60 ).toFixed(2)}}小时</span>
</a-form-item>
</a-col>
</a-row>
@@ -310,6 +309,7 @@ export default {
formParam: {
status: 1,
entryType:1,
defaultTeachingTime:0
},
searchParam: {
pageNo: 1,
@@ -662,6 +662,7 @@ export default {
duration: null,
score: null,
remark: null,
defaultTeachingTime:0
}
}

View File

@@ -200,10 +200,10 @@
<a-row :gutter="16">
<a-col :span="12">
<a-form-item label="初始授课时长" name="defaultTeachingTime">
<a-input v-model:value="formParam.defaultTeachingTime" style="width:80%; height: 40px; " placeholder="0"
<a-input v-model:value="formParam.defaultTeachingTime" style="width:80%; height: 40px; border-radius: 8px ; " placeholder="0"
allowClear showSearch suffix="分钟">
</a-input>
<span v-if="formParam.defaultTeachingTime" style="margin-left: 5px ;">{{ (formParam.defaultTeachingTime /60 ).toFixed(2)}}小时</span>
<span style="margin-left: 5px ;">{{ (formParam.defaultTeachingTime /60 ).toFixed(2)}}小时</span>
</a-form-item>
</a-col>
<a-col :span="12">
@@ -345,7 +345,7 @@ import dayjs from "dayjs";
import ProjectManager from "@/components/project/ProjectManagerNew";
import { message } from "ant-design-vue";
import { getTeacherSystemList, infoteacher, getTeacherExpertise, deleteInTeacherCourse } from "../../api/Lecturer";
import { getNewInTeacherCourseList, getOrganization, getTeacherCourseList, insertInTeacherCourse, updateInTeacherCourse } from "../../api/Teaching";
import { getNewInTeacherCourseList, getOrganization, getTeacherCourseList, insertInTeacherCourse, updateInTeacherCourse ,getCharges} from "../../api/Teaching";
// import AddTeacher from "../../components/drawers/project/AddTeacher"
export default {
name: "InsideTeaching",
@@ -363,6 +363,7 @@ export default {
setup() {
const router = useRouter();
const state = reactive({
tableLoadings:false,
moreid: 1,
currentPage1: 1,
pageSize1: 10,
@@ -384,6 +385,7 @@ export default {
formParam: {
status: 1,
entryType:1,
defaultTeachingTime:0
},
searchParam: {
userNo: null,//工号姓名
@@ -786,7 +788,7 @@ export default {
systemId:null,
levelId: null,
teacherNo:null,
defaultTeachingTime: null,
defaultTeachingTime: 0,
beginTime: null,
studys: null,
score: null,
@@ -817,6 +819,7 @@ export default {
state.lookTeacherId = record.teacherId
// // alert(record.grade)
TeacherSystem(record)
gettableDatas(record)
// let id = record.userNo
// router.push({ path: '/insideteachingdetail', query: { id } })
// router.push({ path: '/InsideTeachingDetail' })
@@ -857,8 +860,8 @@ export default {
}
const column = ref([ {
title: '基准课酬 ',
dataIndex: 'teacherlevelPay',
key: 'teacherlevelPay',
dataIndex: 'levelPay',
key: 'levelPay',
elipsis: true, align: "center",
width: 120,
}, {
@@ -869,9 +872,9 @@ export default {
width: 120,
},
{
title: '应发费用(未命名) ',
dataIndex: 'expense',
key: 'expense',
title: '应发费用 ',
dataIndex: 'payableExpense',
key: 'payableExpense',
elipsis: true, align: "center",
width: 120,
},
@@ -906,6 +909,29 @@ export default {
scopedSlots: { customRender: "action" },
},
])
const gettableDatas =(record)=>{
state.tableLoadings = true
getCharges({kid:record.kid})
.then((res) => {
console.log(res)
tableDatas.value = res.data.data.records
state.tableDataTotal = Number(res.data.data.total);
state.tableLoadings = false
})
}
const tableDatas = ref([])
const rules = {
teacher: [{ required: true, message: '讲师不能为空' }],
departId: [{ required: true, message: '讲师组织不能为空' }],
levelId: [{ required: true, message: '讲师级别不能为空' }],
systemId: [{ required: true, message: '讲师体系不能为空' }],
tlevelName: [{ required: true, message: '内容分类不能为空' }],
teacherNo: [{ required: true, message: '课程名称不能为空' }],
beginTime: [{ required: true, message: '授课/课程日期不能为空' }],
defaultTeachingTime: [{ required: true, message: '授课时长不能为空' }],
certStatus: [{ required: true, message: '认证状态不能为空' }],
}
//导出功能
const handleExport = () => {
window.open(
@@ -923,7 +949,10 @@ export default {
}
return {
...toRefs(state),
rules,
column,
tableDatas,
gettableDatas,
handlemoreid,
infoteacherList,
getinfoteacher,

View File

@@ -27,6 +27,7 @@
<template #bodyCell="{ record, column }">
<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))">编辑</a-button>
<a-button type="link" @click="() => deleteModal(record, String(record.courseform))">删除</a-button>
</a-space>
@@ -85,14 +86,14 @@
</a-row>
<a-row :gutter="16">
<a-col :span="12">
<a-form-item label="归属组织编号" name="trainorgId">
<a-input disabled v-model:value="formParam.trainorgId" class="draitem" placeholder="" allowClear showSearch>
<a-form-item label="讲师体系编号" name="systemCode">
<a-input disabled v-model:value="formParam.systemCode" class="draitem" placeholder="" allowClear showSearch>
</a-input>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="归属组织名称" name="trainorgName">
<a-input v-model:value="formParam.trainorgName" class="draitem" placeholder="" allowClear showSearch>
<a-form-item label="讲师体系名称" name="systemName">
<a-input v-model:value="formParam.systemName" class="draitem" placeholder="" allowClear showSearch>
</a-input>
</a-form-item>
</a-col>
@@ -112,39 +113,49 @@
</a-col>
</a-row>
<a-row :gutter="16">
<a-col :span="20">
<div style="display: flex;justify-content:space-around; margin-bottom: 10px;">
<div >等级名称 </div>
<div> 等级课时 </div>
<div >排序 </div>
<div> 等级课酬 </div>
<div> 上线课时 </div>
</div>
</a-col>
</a-row>
<div v-for="(item,index) in formParam.levelList " :key="index">
<a-row :gutter="16">
<a-col :span="4">
<a-form-item label="等级名称" name="sysName">
<a-input v-model:value="formParam.sysName" class="draitem" placeholder="" allowClear showSearch>
<a-input v-model:value="item.levelName" class="draitem" placeholder="" allowClear showSearch>
</a-input>
</a-form-item>
</a-col>
<a-col :span="4">
<a-form-item label="等级课时" name="sysTime">
<a-input v-model:value="formParam.sysTime " class="draitem"
<a-col :span="4" style="height: 5px;">
<a-input v-model:value="item.levelTime " class="draitem"
placeholder="" allowClear showSearch>
</a-input>
</a-form-item>
</a-col>
<a-col :span="4">
<a-form-item label="排序" name="sysNum">
<a-input-number id="inputNumber" v-model:value="formParam.sysNum" :min="1" :max="999" class="draitem" />
</a-form-item>
<a-input-number id="inputNumber" v-model:value="item.sort" :min="1" :max="999" class="draitem" />
</a-col>
<a-col :span="4">
<a-form-item label="等级课酬" name="sysRmb">
<a-input v-model:value="formParam.sysRmb" class="draitem"
<a-input v-model:value="item.levelPay" class="draitem"
placeholder="" allowClear showSearch>
</a-input>
</a-form-item>
</a-col>
<a-col :span="4">
<a-form-item label="上线课时" name ="sysTimeB" >
<a-input v-model:value="formParam.sysTimeB" class="draitem"
<a-input v-model:value="item.upperLimit" class="draitem"
placeholder="" allowClear showSearch>
</a-input>
</a-form-item>
</a-col>
<a-col :span="4">
<div style="display: flex;">
<!-- <a-button v-if="index===0" shape="circle" class="btn-circle btn-add" @click="inputAdd">+</a-button> -->
<a-button shape="circle" class="btn-circle" @click="inputRemove(index)" :disabled="formParam.levelList.length == 1">-</a-button>
</div>
<a-button shape="circle" class="btn-circle btn-add" @click="inputAdd">+</a-button>
</a-col>
</a-row>
</div>
</a-form>
<!-- 交互按钮 -->
<div :style="{
@@ -168,9 +179,12 @@
</template>
<script lang="jsx">
import { reactive, toRefs, ref, watch } from "vue";
import { useRouter } from "vue-router";
import {
FolderAddOutlined
} from '@ant-design/icons-vue';
import dialog from "@/utils/dialog";
import { message } from "ant-design-vue";
import ProjectManager from "@/components/project/ProjectManagerNew";
import { systemList, deleteTrainOrg } from "../../api/organization";
export default {
@@ -180,7 +194,9 @@ export default {
FolderAddOutlined,//图标--新增
},
setup() {
const router = useRouter();
const state = reactive({
tableLoading: false,
deleteInTeacherdialog: false,
@@ -195,10 +211,24 @@ export default {
pageSize: "10"
},
formParam: {
trainorgId: null,
trainorgName: null,
systemCode: null,
systemName: null,
remark: null,
sysNum:1
levelList:[{
levelName:null,
levelTime:null,
sort:1,
levelPay:null,
upperLimit:null
},
{
levelName:null,
levelTime:null,
sort:1,
levelPay:null,
upperLimit:null
},
]
}
})
function managerChange(e, l, d, t, orgName) {
@@ -210,16 +240,16 @@ export default {
const columns = ref([
{
title: '讲师体系编号 ',
dataIndex: 'trainorgId',
key: 'trainorgId',
dataIndex: 'kid',
key: 'kid',
elipsis: true,
align: "center",
width: 200,
},
{
title: '归属组织名称 ',
dataIndex: 'trainorgName',
key: 'trainorgName',
title: '讲师体系名称 ',
dataIndex: 'systemName',
key: 'systemName',
elipsis: true, align: "center",
width: 600,
},
@@ -312,10 +342,18 @@ export default {
}
const cancel = () => {
state.formParam = {
trainorgId: null,
trainorgName: null,
remark: null
systemCode: null,
systemName: null,
remark: null,
levelList:[{
levelName:null,
levelTime:null,
sort:1,
levelPay:null,
upperLimit:null
}
]
}
}
//保存
const createTeacherDialog = () => {
@@ -339,12 +377,34 @@ export default {
const rules = {
trainorgId: [{ required: true, message: '讲师体系编号不能为空' }],
trainorgName: [{ required: true, message: '讲师体系名称不能为空' }],
}
const handleLook =(record)=>{
let id = record.kid
router.push({ path: '/LookLecturerSystem', query: { id } })
}
const inputAdd = ()=>{
state.formParam.levelList.push({
levelName:null,
levelTime:null,
sort:1,
levelPay:null,
upperLimit:null
});
}
const inputRemove=(index)=>{
dialog({
content: "确定删除此等级信息吗?",
ok: async () => {
state.formParam.levelList.splice(index, 1);
message.success("删除成功");
},
});
}
return {
...toRefs(state),
rules,
inputRemove,
inputAdd,
managerChange,
columns,
tableData,
@@ -356,7 +416,8 @@ export default {
addTeacher,
handleModify,
closeDeleteTeacher,
changePagination
changePagination,
handleLook
}
}
}
@@ -729,4 +790,20 @@ export default {
.ant-upload.ant-upload-select-picture-card {
border: 0px !important;
border-radius: 50% !important;
}</style>
}
.btn-circle{
text-align: center;
line-height: 100%;
margin-top: 5px;
.custom-icon{
font-size: 20px;
svg{
margin: auto;
}
}
span{
width: 100%;
height: 100%;
font-size: 33px;
}
}</style>

View File

@@ -0,0 +1,237 @@
ExternalLecturer
<template>
<!-- 讲师体系查看详情 -->
<div class="LookLecturerSystem">
<a-layout-header style="background: white;color: black; font-size: 20px ;">
<span>讲师体系管理</span>
<router-link to="/lecturerSystem" class="goback">
<span class="return"></span>
<router-link class="returntext" to="/lecturerSystem" style="line-height:47px ">
返回
</router-link>
</router-link>
</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>
<span>讲师信息</span>
<a-descriptions title="" bordered :column="2" :contentStyle="rowCenter" :labelStyle="rowCenter">
<a-descriptions-item label="讲师体系编号">{{formParam.kid}}</a-descriptions-item>
<a-descriptions-item label="讲师体系名称">{{formParam.systemName}}</a-descriptions-item>
<a-descriptions-item label="备注" :span="2">{{formParam.remark}}</a-descriptions-item>
</a-descriptions>
<!-- 记录 -->
<div style="margin-top: 10px;"></div>
<span class="line"></span>
<span>讲师等级</span>
<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 === 'remark'">
<a-space style="display:flex ;justify-content: space-around; ">
<a-popover>
<template #content>
<p>{{ record.remark }}</p>
</template>
<span>{{ record.remark }}</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>
</div>
</a-layout-content>
</div>
</template>
<script lang ="jsx">
import { useRouter,useRoute } from "vue-router";
import { reactive, toRefs, ref } from "vue"
import { querySystemLevelByKid ,systemList} from "../../api/organization";
export default{
name :"LookLecturerSystem",
components:{
},
setup(){
const router=useRouter();
const { query: { id }} = useRoute();
const state = reactive({
activeKey:'1',
id,
formParam: {
},
teacherrecordsLoading: false,// 遮罩层
teacherrecordstableDataTotal: -1,//授课记录列表总条数\
});
//详情
const TeacherSystem = () => {
let obj = {
kid :state.id,
pageNo:1,
pageSize:1
}
systemList(obj).then((res) => {
state.formParam = res.data.data.records[0]
})
.catch((err) => {
});
}
TeacherSystem()
//返回上一层
const handleBack=()=>{
router.back()
};
//列表
const teacherrecordsColumns = ref([
{
title: '等级名称',
dataIndex: 'levelName',
key: 'levelName',
elipsis: true, align: "center",
width: 120,
},
{
title: '等级课时',
dataIndex: 'levelTime',
key: 'levelTime',
elipsis: true, align: "center",
width: 120,
},
{
title: '排序',
dataIndex: 'sort',
key: 'sort',
elipsis: true, align: "center",
width: 120,
},
{
title: '等级课酬',
dataIndex: 'levelPay',
key: 'levelPay',
elipsis: true, align: "center",
width: 120,
},
{
title: '上线课时',
dataIndex: 'upperLimit',
key: 'upperLimit',
elipsis: true, align: "center",
width: 120,
},
{
title: '讲师数量',
dataIndex: 'teacherCount',
key: 'teacherCount',
elipsis: true, align: "center",
width: 120,
},
])
//列表数据
const teacherrecordstableData = ref([
])
const getteacherrecordstableData = () => {
// api接口
querySystemLevelByKid({systemId: state.id}).then((res) => {
teacherrecordstableData.value = res.data.data
state.teacherrecordstableDataTotal = Number(res.data.data.total);
state.teacherrecordsLoading = false
})
};
getteacherrecordstableData()
//翻页
const teacherchangePagination = (page) => {
state.teacherrecords.pageNo = page;
getteacherrecordstableData();
};
return{
...toRefs(state),
router,
TeacherSystem,
handleBack,
rowCenter:{"text-align":"center"},
teacherrecordstableData,
teacherrecordsColumns,
getteacherrecordstableData,
teacherchangePagination,
}
}
}
</script>
<style lang="scss" scoped>
.LookLecturerSystem {
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 ;
}
.goback {
float: right;
padding-right: 70px;
//padding-top: 37px;
position: relative;
.return {
display: inline-block;
width: 42px;
height: 42px;
margin-top: 17px;
margin-right: 10px;
background-image: url("../../assets/images/projectadd/return.png");
}
.returntext {
display: inline-block;
position: absolute;
top: 12px;
color: #4ea6ff;
font-size: 14px;
}
}
</style>