Merge branch 'zcwy-teacher-manage' into master_1202

This commit is contained in:
joshen
2024-12-26 18:20:03 +08:00
20 changed files with 564 additions and 225 deletions

View File

@@ -71,6 +71,8 @@ export const getApprovalResultByApprovalIdList = (approvalId) => http.post(`/adm
export const recovery = (id) => http.post(`/admin/affiliation/recovery?id=${id}`) export const recovery = (id) => http.post(`/admin/affiliation/recovery?id=${id}`)
//删除培训发生组织 //删除培训发生组织
export const affiliationDelById = (id)=>http.post(`/admin/affiliation/delById?id=${id}`) export const affiliationDelById = (id)=>http.post(`/admin/affiliation/delById?id=${id}`)
//停用启用培训发生组织
export const isEnable = (obj) => http.post(`/admin/affiliation/isEnable`,obj)
//撤回培训发生组织 //撤回培训发生组织
export const affiliatIsConfirm = (id) => http.post(`/admin/affiliation/isConfirm?id=${id}`) export const affiliatIsConfirm = (id) => http.post(`/admin/affiliation/isConfirm?id=${id}`)
//讲师费统计详情 //讲师费统计详情

View File

@@ -43,6 +43,8 @@ export const queryTeacherFeeTotalList= (obj) => http.post('/teacher/fee/queryTea
export const getPreviousTeacherFee= (obj) => http.post('/teacher/fee/getPreviousTeacherFee',obj) export const getPreviousTeacherFee= (obj) => http.post('/teacher/fee/getPreviousTeacherFee',obj)
//汇总上月讲师费月度数据 //汇总上月讲师费月度数据
export const CreateMonthSummary= (obj) => http.post('/admin/expenseSummary/createMonthSummary',obj) export const CreateMonthSummary= (obj) => http.post('/admin/expenseSummary/createMonthSummary',obj)
//是否显示重汇按钮
export const isShowReimport= () => http.get('/admin/expenseSummary/isAdmin')
//讲师费统计列表 //讲师费统计列表
export const expenseSummaryList= (obj) => http.get('/admin/expenseSummary/list',{params:obj}) export const expenseSummaryList= (obj) => http.get('/admin/expenseSummary/list',{params:obj})
//提交/撤回 //提交/撤回

View File

@@ -295,7 +295,7 @@ import {getCookieForName} from "@/api/method";
} }
}; };
function downTemplate() { function downTemplate() {
window.open(`${process.env.VUE_APP_BASE}/template/${props.template}.xlsx`); window.open(`${process.env.VUE_APP_BOE_API_URL}/upload/template/${props.template}`);
} }
return { return {

View File

@@ -93,7 +93,7 @@ import * as lecturerApi from "@/api/Lecturer.js";
notLists?.value?.some(i=>{ notLists?.value?.some(i=>{
if(i.orgId == item.id){ if(i.orgId == item.id){
item.disabled = true item.disabled = true
item.name = item.name + '(' + i.orgName + ')' item.name = item.name + '(' + i.affiliationName + ')'
return true return true
} }
}) })
@@ -129,7 +129,7 @@ import * as lecturerApi from "@/api/Lecturer.js";
notLists.value.some(i=>{ notLists.value.some(i=>{
if(i.orgId == item.id){ if(i.orgId == item.id){
item.disabled = true item.disabled = true
item.name = item.name + '(' + i.orgName + ')' item.name = item.name + '(' + i.affiliationName + ')'
return true return true
} }
}) })

View File

@@ -4,7 +4,7 @@
:closable="false" :closable="false"
class="largeDrawerInside" class="largeDrawerInside"
placement="right" placement="right"
width="70%" width="80%"
> >
<div class="drawerMains"> <div class="drawerMains">
<div class="headers" style="margin-top:-24px;"> <div class="headers" style="margin-top:-24px;">
@@ -22,9 +22,9 @@
<div class="item"> <div class="item">
<a-input @pressEnter="searchData(true)" style="border-radius: 8px;width:240px;height: 40px;" v-model:value="nameUserNo" placeholder="请输入工号/讲师名称进行搜索" allowClear /> <a-input @pressEnter="searchData(true)" style="border-radius: 8px;width:240px;height: 40px;" v-model:value="nameUserNo" placeholder="请输入工号/讲师名称进行搜索" allowClear />
</div> </div>
<div class="item"> <!-- <div class="item">
<a-range-picker format="YYYY-MM-DD" valueFormat="YYYY-MM-DD" style="border-radius: 8px;width:360px;height: 40px;" v-model:value="dateValue" /> <a-range-picker format="YYYY-MM-DD" valueFormat="YYYY-MM-DD" style="border-radius: 8px;width:360px;height: 40px;" v-model:value="dateValue" />
</div> </div> -->
<div class="item"> <div class="item">
<a-button type="primary" @click="searchData(true)" style="margin-right:20px;border-radius:8px;width: 100px;height: 40px;">搜索</a-button> <a-button type="primary" @click="searchData(true)" style="margin-right:20px;border-radius:8px;width: 100px;height: 40px;">搜索</a-button>
<a-button type="primary" @click="resetData()" style="border-radius:8px;width: 100px;height: 40px;">重置</a-button> <a-button type="primary" @click="resetData()" style="border-radius:8px;width: 100px;height: 40px;">重置</a-button>
@@ -32,13 +32,15 @@
</div> </div>
<div class="table" style="padding-bottom:72px;"> <div class="table" style="padding-bottom:72px;">
<a-table <a-table
ref="drawerContent"
:columns="columns" :columns="columns"
:data-source="searchTrue?searchList:tableData" :data-source="tableData"
:pagination="false" :pagination="false"
:scroll="{ x: 'max-content' }" :scroll="{ x: 'max-content',y:tableData.length? pageHeight : null }"
row-key="id" row-key="id"
:loading="loading" :loading="loading"
:row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }" :row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
:custom-row="customRow"
> >
<template #action="{ record }"> <template #action="{ record }">
<div class="action"> <div class="action">
@@ -71,6 +73,17 @@ const props = defineProps({
default: "" default: ""
} }
}); });
const drawerContent = ref(null)
const customRow = (record) => {
return {
style:{
backgroundColor: searchTrue.value && searchList.value.some(item => item.id === record.id) ? '#a6dff9' : '',
},
};
};
const pageHeight = computed(() => {
return window.innerHeight - 360
});
watch(()=>props.visible,(val)=>{ watch(()=>props.visible,(val)=>{
if(val){ if(val){
loading.value = true loading.value = true
@@ -82,12 +95,15 @@ watch(()=>props.visible,(val)=>{
} }
loading.value = false loading.value = false
}).catch(err=>{ }).catch(err=>{
message.error(err.data.msg)
loading.value = false loading.value = false
tableData.value = []
message.error(err.data.msg)
}) })
}else{ }else{
selectedRowKeys.value = [] selectedRowKeys.value = []
selectsData.value = [] selectsData.value = []
drawerContent.value?.$el.querySelector('.ant-table-body')?.scrollTo({top:0,behavior: 'smooth'})
resetData()
} }
}) })
const nameUserNo = ref(null) const nameUserNo = ref(null)
@@ -100,9 +116,10 @@ const resetData = () => {
searchData(false) searchData(false)
} }
const searchData = (val) => { const searchData = (val) => {
// drawerContent.value.scrollTo({top:200,behavior: 'smooth'})
searchTrue.value = val searchTrue.value = val
if(!nameUserNo.value&&!dateValue.value){ if(!nameUserNo.value&&!dateValue.value){
searchList.value = tableData.value; searchList.value = [];
return return
} }
//搜索 数组expenseList.value 参数名字或者工号nameUserNo.value 日期dateValue.value //搜索 数组expenseList.value 参数名字或者工号nameUserNo.value 日期dateValue.value
@@ -121,6 +138,11 @@ const searchData = (val) => {
return isNameMatch || isDateInRange; return isNameMatch || isDateInRange;
}); });
searchList.value = filteredList; searchList.value = filteredList;
let scrollHeight = null
filteredList.length && (scrollHeight = tableData.value.findIndex(item => item.id === filteredList[0].id))
if(scrollHeight||scrollHeight==0){
drawerContent.value?.$el.querySelector('.ant-table-body')?.scrollTo({top:scrollHeight*55,behavior: 'smooth'})
}
} }
const loading = ref(false) const loading = ref(false)
const selectedRowKeys = ref([]) const selectedRowKeys = ref([])
@@ -154,19 +176,30 @@ const columns = [
dataIndex: 'name', dataIndex: 'name',
key: 'name', key: 'name',
align: 'center', align: 'center',
width:100,
}, },
{ {
title: '讲师工号', title: '讲师工号',
dataIndex: 'userNo', dataIndex: 'userNo',
key: 'userNo', key: 'userNo',
align: 'center', align: 'center',
width:100
},
{
title: '课程名称',
dataIndex: 'courseName',
key: 'courseName',
align: 'left',
width:160,
customCell :() => {return {style: {maxWidth: '200px',overflow: 'hidden',whiteSpace: 'nowrap',textOverflow:'ellipsis',cursor:'pointer'}}},
}, },
{ {
title: '所属组织', title: '所属组织',
dataIndex: 'orgName', dataIndex: 'orgName',
key: 'orgName', key: 'orgName',
align: 'center', align: 'left',
ellipsis: true, ellipsis: true,
width:100,
customCell :() => {return {style: {maxWidth: '200px',overflow: 'hidden',whiteSpace: 'nowrap',textOverflow:'ellipsis',cursor:'pointer'}}}, customCell :() => {return {style: {maxWidth: '200px',overflow: 'hidden',whiteSpace: 'nowrap',textOverflow:'ellipsis',cursor:'pointer'}}},
}, },
@@ -174,13 +207,16 @@ const columns = [
title: '讲师体系', title: '讲师体系',
dataIndex: 'tsystemName', dataIndex: 'tsystemName',
key: 'tsystemName', key: 'tsystemName',
align: 'center', align: 'left',
width:100,
customCell :() => {return {style: {maxWidth: '200px',overflow: 'hidden',whiteSpace: 'nowrap',textOverflow:'ellipsis',cursor:'pointer'}}},
}, },
{ {
title: '讲师等级', title: '讲师等级',
dataIndex: 'tlevelName', dataIndex: 'tlevelName',
key: 'tlevelName', key: 'tlevelName',
align: 'center', align: 'center',
width:100,
customRender: ({ text })=>{ customRender: ({ text })=>{
return text||'-' return text||'-'
} }
@@ -190,6 +226,7 @@ const columns = [
dataIndex: 'payrollPlace', dataIndex: 'payrollPlace',
key: 'payrollPlace', key: 'payrollPlace',
align: 'center', align: 'center',
width:120,
customRender: ({ text })=>{ customRender: ({ text })=>{
return text||'-' return text||'-'
} }
@@ -200,6 +237,7 @@ const columns = [
dataIndex: 'courseType', dataIndex: 'courseType',
key: 'courseType', key: 'courseType',
align: 'center', align: 'center',
width:120,
customRender: ({ text,record })=>{ customRender: ({ text,record })=>{
switch (text) { switch (text) {
case 0: case 0:
@@ -217,23 +255,19 @@ const columns = [
} }
} }
}, },
{
title: '课程名称',
dataIndex: 'courseName',
key: 'courseName',
align: 'center',
},
{ {
title: '授课/开发课程日期', title: '授课/开发课程日期',
dataIndex: 'teachingDate', dataIndex: 'teachingDate',
key: 'teachingDate', key: 'teachingDate',
align: 'center', align: 'center',
width:150
}, },
{ {
title: '授课/开发课程时长', title: '授课/开发课程时长',
dataIndex: 'teachingTime', dataIndex: 'teachingTime',
key: 'teachingTime', key: 'teachingTime',
align: 'center', align: 'center',
width:150,
customRender: ({ text,record })=>{ customRender: ({ text,record })=>{
return (text/60).toFixed(2)+'小时' return (text/60).toFixed(2)+'小时'
} }
@@ -243,6 +277,7 @@ const columns = [
dataIndex: 'studys', dataIndex: 'studys',
key: 'studys', key: 'studys',
align: 'center', align: 'center',
width:100,
customRender: ({ text })=>{ customRender: ({ text })=>{
return text||'0' return text||'0'
} }
@@ -252,21 +287,28 @@ const columns = [
dataIndex: 'score', dataIndex: 'score',
key: 'score', key: 'score',
align: 'center', align: 'center',
customRender: ({ text })=>{ width:100,
return text||'-' customRender: (value) => {
} return (
<div>
{value.record.score?Number(value.record.score).toFixed(0)==0?'-':Number(value.record.score).toFixed(0) : '-'}
</div>
)
}
}, },
{ {
title: '课酬基准', title: '课酬基准',
dataIndex: 'levelPay', dataIndex: 'levelPay',
key: 'levelPay', key: 'levelPay',
align: 'center', align: 'center',
width:100
}, },
{ {
title: '计划费用', title: '计划费用',
dataIndex: 'expense', dataIndex: 'expense',
key: 'expense', key: 'expense',
align: 'center', align: 'center',
width:100
}, },
// { // {
// title: '应发费用', // title: '应发费用',
@@ -279,6 +321,7 @@ const columns = [
align: 'center', align: 'center',
fixed: 'right', fixed: 'right',
width: 100, width: 100,
customCell:()=>{return {style:{background:'#fff'}}},
slots: { customRender: "action" }, slots: { customRender: "action" },
}, },
] ]
@@ -299,13 +342,44 @@ const queryDrawer = () => {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.ant-table-wrapper{
border-right: 1px solid #ecf5ff;
}
/* 重置表格行的悬停效果 */
::v-deep .ant-table-tbody > tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected) > td {
background: none;
}
// 选中鼠标划入
::v-deep .ant-table-tbody > tr.ant-table-row-selected:hover > td{
background: none ;
}
/* 未选中行的鼠标划入样式 */
::v-deep .ant-table-tbody > tr:not(.ant-table-row-selected):hover > td {
background: none;
}
/* 未选中行的鼠标划出样式 */
::v-deep .ant-table-tbody > tr:not(.ant-table-row-selected):not(:hover) > td {
background: none;
}
// 选中
::v-deep .ant-table-tbody > tr.ant-table-row-selected > td{
background: none ;
}
/* 重置表格行的选中效果 */
::v-deep .ant-table-row-selected td {
// background: none !important;
}
::v-deep .ant-table-thead > tr > th {
background-color: #eff4fc !important;
text-align: center !important;
}
.largeDrawerInside { .largeDrawerInside {
.drawerMains { .drawerMains {
min-width: 600px; min-width: 600px;
// margin: 0px 32px 0px 32px; // margin: 0px 32px 0px 32px;
overflow-x: auto; height:100%;
overflow: auto;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
padding:24px; padding:24px;
@@ -319,6 +393,7 @@ const queryDrawer = () => {
margin-bottom: 20px; margin-bottom: 20px;
.headerTitle { .headerTitle {
margin: 24px 0;
font-size: 18px; font-size: 18px;
font-weight: 600; font-weight: 600;
color: #333333; color: #333333;
@@ -373,7 +448,7 @@ const queryDrawer = () => {
} }
.table{ .table{
::v-deep .ant-table-cell-fix-right { ::v-deep .ant-table-cell-fix-right {
width: 160px !important; width: 120px !important;
} }
} }
} }

View File

@@ -4,7 +4,7 @@
:closable="false" :closable="false"
class="largeDrawerInside" class="largeDrawerInside"
placement="right" placement="right"
width="64%" width="76%"
:zIndex="1001" :zIndex="1001"
> >
<div class="drawerMains"> <div class="drawerMains">
@@ -30,25 +30,27 @@
</div> </div>
</div> </div>
<div class="box"> <div class="box">
<!-- <div class="top"> <div class="top">
<div class="item"> <div class="item">
<a-input @pressEnter="searchData(true)" style="border-radius: 8px;width:240px;height: 40px;" v-model:value="nameUserNo" placeholder="请输入工号/讲师名称进行搜索" allowClear /> <a-input @pressEnter="searchData(true)" style="border-radius: 8px;width:240px;height: 40px;" v-model:value="nameUserNo" placeholder="请输入工号/讲师名称进行搜索" allowClear />
</div> </div>
<div class="item"> <!-- <div class="item">
<a-range-picker format="YYYY-MM-DD" valueFormat="YYYY-MM-DD" style="border-radius: 8px;width:360px;height: 40px;" v-model:value="dateValue" /> <a-range-picker format="YYYY-MM-DD" valueFormat="YYYY-MM-DD" style="border-radius: 8px;width:360px;height: 40px;" v-model:value="dateValue" />
</div> </div> -->
<div class="item"> <div class="item">
<a-button type="primary" @click="searchData(true)" style="margin-right:20px;border-radius:8px;width: 100px;height: 40px;">搜索</a-button> <a-button type="primary" @click="searchData(true)" style="margin-right:20px;border-radius:8px;width: 100px;height: 40px;">搜索</a-button>
<a-button type="primary" @click="resetData()" style="border-radius:8px;width: 100px;height: 40px;">重置</a-button> <a-button type="primary" @click="resetData()" style="border-radius:8px;width: 100px;height: 40px;">重置</a-button>
</div> </div>
</div> --> </div>
<div class="table"> <div class="table">
<a-table <a-table
ref="drawerContent"
:columns="columns" :columns="columns"
:data-source="searchTrue?searchList:expenseList" :data-source="expenseList"
:pagination="false" :pagination="false"
:scroll="{ x: 'max-content' }" :scroll="{ x: 'max-content',y:expenseList.length? pageHeight : null }"
:loading="loadingData" :loading="loadingData"
:custom-row="customRow"
> >
<template #action="{ record,index }"> <template #action="{ record,index }">
<div class="action"> <div class="action">
@@ -60,8 +62,8 @@
</div> </div>
</div> </div>
<div class="btnn"> <div class="btnn">
<button class="btn1" @click="config">确认提交审批</button> <button class="btn1" @click="config">提交审批</button>
<button class="btn1" @click="qureyDrawer">确认至审批中心</button> <button class="btn1" @click="qureyDrawer">保存至审批中心</button>
<button class="btn2" @click="closeDrawer">取消</button> <button class="btn2" @click="closeDrawer">取消</button>
</div> </div>
</div> </div>
@@ -174,6 +176,9 @@ const clickItem = (item,i) => {
indexList.value = i indexList.value = i
resetData() resetData()
} }
const pageHeight = computed(() => {
return window.innerHeight - 450
});
watch(()=>props.visible,(val)=>{ watch(()=>props.visible,(val)=>{
if(val){ if(val){
loadingData.value = true loadingData.value = true
@@ -195,10 +200,14 @@ watch(()=>props.visible,(val)=>{
}).catch(()=>{ }).catch(()=>{
message.error('获取数据失败,请重新尝试') message.error('获取数据失败,请重新尝试')
loadingData.value = false loadingData.value = false
forData.value = []
expenseList.value = []
}) })
}else{ }else{
nameUserNo.value = null nameUserNo.value = null
dateValue.value = null dateValue.value = null
indexList.value = 0
drawerContent.value?.$el.querySelector('.ant-table-body')?.scrollTo({top:0,behavior: 'smooth'})
} }
}) })
const removeId = (e,i) =>{ const removeId = (e,i) =>{
@@ -218,7 +227,7 @@ const removeId = (e,i) =>{
}else{ }else{
expenseList.value = expenseList.value.filter(item=>item.id !== e.id) expenseList.value = expenseList.value.filter(item=>item.id !== e.id)
} }
forData.value[indexList.value].summaryTotal = forData.value[indexList.value]?.summaryTotal - e.payableExpense forData.value[indexList.value].summaryTotal = (forData.value[indexList.value]?.summaryTotal - e.expense).toFixed(2)
if(!forData.value[indexList.value].expenseList.length){ if(!forData.value[indexList.value].expenseList.length){
forData.value.splice(indexList.value,1) forData.value.splice(indexList.value,1)
forData.value.length > 0 && clickItem(forData.value[0],0) forData.value.length > 0 && clickItem(forData.value[0],0)
@@ -229,10 +238,18 @@ const removeId = (e,i) =>{
const nameUserNo = ref(null) const nameUserNo = ref(null)
const dateValue = ref(null) const dateValue = ref(null)
const searchTrue = ref(false) const searchTrue = ref(false)
const drawerContent = ref(null)
const customRow = (record) => {
return {
style:{
backgroundColor: searchTrue.value && searchList.value.some(item => item.id === record.id) ? '#a6dff9' : '',
}
};
};
const searchData = (val) => { const searchData = (val) => {
searchTrue.value = val searchTrue.value = val
if(!nameUserNo.value&&!dateValue.value){ if(!nameUserNo.value&&!dateValue.value){
searchList.value = expenseList.value; searchList.value = [];
return return
} }
//搜索 数组expenseList.value 参数名字或者工号nameUserNo.value 日期dateValue.value //搜索 数组expenseList.value 参数名字或者工号nameUserNo.value 日期dateValue.value
@@ -251,6 +268,11 @@ const searchData = (val) => {
return isNameMatch || isDateInRange; return isNameMatch || isDateInRange;
}); });
searchList.value = filteredList; searchList.value = filteredList;
let scrollHeight = null
filteredList.length && (scrollHeight = expenseList.value.findIndex(item => item.id === filteredList[0].id))
if(scrollHeight||scrollHeight==0){
drawerContent.value?.$el.querySelector('.ant-table-body')?.scrollTo({top:scrollHeight*55,behavior: 'smooth'})
}
} }
const resetData = () => { const resetData = () => {
nameUserNo.value = null nameUserNo.value = null
@@ -264,19 +286,30 @@ const columns = [
dataIndex: 'name', dataIndex: 'name',
key: 'name', key: 'name',
align: 'center', align: 'center',
width:100,
}, },
{ {
title: '讲师工号', title: '讲师工号',
dataIndex: 'userNo', dataIndex: 'userNo',
key: 'userNo', key: 'userNo',
align: 'center', align: 'center',
width:100,
},
{
title: '课程名称',
dataIndex: 'courseName',
key: 'courseName',
align: 'left',
width:160,
customCell :() => {return {style: {maxWidth: '200px',overflow: 'hidden',whiteSpace: 'nowrap',textOverflow:'ellipsis',cursor:'pointer'}}},
}, },
{ {
title: '所属组织', title: '所属组织',
dataIndex: 'orgName', dataIndex: 'orgName',
key: 'orgName', key: 'orgName',
align: 'center', align: 'left',
ellipsis: true, ellipsis: true,
width:100,
customCell :() => {return {style: {maxWidth: '200px',overflow: 'hidden',whiteSpace: 'nowrap',textOverflow:'ellipsis',cursor:'pointer'}}}, customCell :() => {return {style: {maxWidth: '200px',overflow: 'hidden',whiteSpace: 'nowrap',textOverflow:'ellipsis',cursor:'pointer'}}},
}, },
@@ -284,13 +317,16 @@ const columns = [
title: '讲师体系', title: '讲师体系',
dataIndex: 'tsystemName', dataIndex: 'tsystemName',
key: 'tsystemName', key: 'tsystemName',
align: 'center', align: 'left',
width:100,
customCell :() => {return {style: {maxWidth: '200px',overflow: 'hidden',whiteSpace: 'nowrap',textOverflow:'ellipsis',cursor:'pointer'}}},
}, },
{ {
title: '讲师等级', title: '讲师等级',
dataIndex: 'tlevelName', dataIndex: 'tlevelName',
key: 'tlevelName', key: 'tlevelName',
align: 'center', align: 'center',
width:100,
customRender: ({ text })=>{ customRender: ({ text })=>{
return text||'-' return text||'-'
} }
@@ -300,6 +336,7 @@ const columns = [
dataIndex: 'payrollPlace', dataIndex: 'payrollPlace',
key: 'payrollPlace', key: 'payrollPlace',
align: 'center', align: 'center',
width:120,
customRender: ({ text })=>{ customRender: ({ text })=>{
return text||'-' return text||'-'
} }
@@ -310,6 +347,7 @@ const columns = [
dataIndex: 'courseType', dataIndex: 'courseType',
key: 'courseType', key: 'courseType',
align: 'center', align: 'center',
width:120,
customRender: ({ text,record })=>{ customRender: ({ text,record })=>{
switch (text) { switch (text) {
case 0: case 0:
@@ -327,23 +365,19 @@ const columns = [
} }
} }
}, },
{
title: '课程名称',
dataIndex: 'courseName',
key: 'courseName',
align: 'center',
},
{ {
title: '授课/开发课程日期', title: '授课/开发课程日期',
dataIndex: 'teachingDate', dataIndex: 'teachingDate',
key: 'teachingDate', key: 'teachingDate',
align: 'center', align: 'center',
width:150,
}, },
{ {
title: '授课/开发课程时长', title: '授课/开发课程时长',
dataIndex: 'teachingTime', dataIndex: 'teachingTime',
key: 'teachingTime', key: 'teachingTime',
align: 'center', align: 'center',
width:150,
customRender: ({ text,record })=>{ customRender: ({ text,record })=>{
return (text/60).toFixed(2)+'小时' return (text/60).toFixed(2)+'小时'
} }
@@ -353,6 +387,7 @@ const columns = [
dataIndex: 'studys', dataIndex: 'studys',
key: 'studys', key: 'studys',
align: 'center', align: 'center',
width:100,
customRender: ({ text })=>{ customRender: ({ text })=>{
return text||'0' return text||'0'
} }
@@ -362,21 +397,28 @@ const columns = [
dataIndex: 'score', dataIndex: 'score',
key: 'score', key: 'score',
align: 'center', align: 'center',
customRender: ({ text })=>{ width:100,
return text||'-' customRender: (value) => {
} return (
<div>
{value.record.score?Number(value.record.score).toFixed(0)==0?'-':Number(value.record.score).toFixed(0) : '-'}
</div>
)
}
}, },
{ {
title: '课酬基准', title: '课酬基准',
dataIndex: 'levelPay', dataIndex: 'levelPay',
key: 'levelPay', key: 'levelPay',
align: 'center', align: 'center',
width:100,
}, },
{ {
title: '计划费用', title: '计划费用',
dataIndex: 'expense', dataIndex: 'expense',
key: 'expense', key: 'expense',
align: 'center', align: 'center',
width:100,
}, },
// { // {
// title: '应发费用', // title: '应发费用',
@@ -388,6 +430,8 @@ const columns = [
title: '操作', title: '操作',
align: 'center', align: 'center',
fixed: 'right', fixed: 'right',
width:100,
customCell:()=>{return {style:{background:'#fff'}}},
slots: { customRender: "action" }, slots: { customRender: "action" },
}, },
] ]
@@ -424,6 +468,23 @@ const config = () => {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
/* 重置表格行的悬停效果 */
::v-deep .ant-table-tbody > tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected) > td {
background: none;
}
/* 未选中行的鼠标划入样式 */
::v-deep .ant-table-tbody > tr:not(.ant-table-row-selected):hover > td {
background: none;
}
/* 未选中行的鼠标划出样式 */
::v-deep .ant-table-tbody > tr:not(.ant-table-row-selected):not(:hover) > td {
background: none;
}
::v-deep .ant-table-thead > tr > th {
background-color: #eff4fc !important;
text-align: center !important;
}
.delete { .delete {
min-width: 424px; min-width: 424px;
background: #ffffff; background: #ffffff;
@@ -541,7 +602,8 @@ const config = () => {
.drawerMains { .drawerMains {
min-width: 600px; min-width: 600px;
// margin: 0px 32px 0px 32px; // margin: 0px 32px 0px 32px;
overflow-x: auto; height:100%;
overflow: auto;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
padding:24px; padding:24px;
@@ -555,6 +617,7 @@ const config = () => {
margin-bottom: 20px; margin-bottom: 20px;
.headerTitle { .headerTitle {
margin: 24px 0;
font-size: 18px; font-size: 18px;
font-weight: 600; font-weight: 600;
color: #333333; color: #333333;
@@ -624,7 +687,7 @@ const config = () => {
} }
.table{ .table{
::v-deep .ant-table-cell-fix-right { ::v-deep .ant-table-cell-fix-right {
width: 160px !important; width: 120px !important;
} }
} }
} }

View File

@@ -227,6 +227,13 @@ export default{
key: 'score', key: 'score',
ellipsis: true, align: "center", ellipsis: true, align: "center",
width: 120, width: 120,
customRender: (value) => {
return (
<div>
{value.record.score?Number(value.record.score).toFixed(0)==0?'-':Number(value.record.score).toFixed(0) : '-'}
</div>
)
}
}, },
{ {
title: '开课状态', title: '开课状态',
@@ -240,7 +247,7 @@ export default{
{value.record.courseStatus == 0 || value.record.courseStatus == 1 {value.record.courseStatus == 0 || value.record.courseStatus == 1
? { ? {
"0": "未开课", "0": "未开课",
"1": "开课", "1": "开课",
}[value.record.courseStatus + ""] || "" }[value.record.courseStatus + ""] || ""
: "-"} : "-"}
</div> </div>

View File

@@ -290,6 +290,13 @@ export default{
key: 'score', key: 'score',
ellipsis: true, align: "center", ellipsis: true, align: "center",
width: 120, width: 120,
customRender: (value) => {
return (
<div>
{value.record.score?Number(value.record.score).toFixed(0)==0?'-':Number(value.record.score).toFixed(0) : '-'}
</div>
)
}
}, },
{ {
title: '开课状态', title: '开课状态',
@@ -303,7 +310,7 @@ export default{
{value.record.courseStatus == 0 || value.record.courseStatus == 1 {value.record.courseStatus == 0 || value.record.courseStatus == 1
? { ? {
"0": "未开课", "0": "未开课",
"1": "开课", "1": "开课",
}[value.record.courseStatus + ""] || "" }[value.record.courseStatus + ""] || ""
: "-"} : "-"}
</div> </div>

View File

@@ -64,11 +64,11 @@
<a-tab-pane key="2" tab="审批记录" force-render> <a-tab-pane key="2" tab="审批记录" force-render>
<div style="margin-bottom: 20px"> <div style="margin-bottom: 20px">
<a-table :columns="columnsTwo" :loading="formData?.loadingTwo" :data-source="formData?.tableDataTwo" :pagination="pagination"> <a-table :columns="columnsTwo" :loading="formData?.loadingTwo" :data-source="formData?.tableDataTwo" :pagination="pagination">
<template #action="{ record }"> <!-- <template #action="{ record }">
<div class="action"> <div class="action">
<div style="color: #1890ff;cursor: pointer;" class="btn" @click="lookList(record)">查看</div> <div style="color: #1890ff;cursor: pointer;" class="btn" @click="lookList(record)">查看</div>
</div> </div>
</template> </template> -->
</a-table> </a-table>
</div> </div>
<!-- <div style="margin-bottom: 100px"> <!-- <div style="margin-bottom: 100px">
@@ -244,18 +244,18 @@ const columnsTwo = ref([
} }
}, },
{ {
title: '审批人', title: '提交人',
dataIndex: 'employeeName', dataIndex: 'employeeName',
key: 'employeeName', key: 'employeeName',
align: 'center', align: 'center',
}, },
{ // {
title: '操作', // title: '操作',
dataIndex: 'address', // dataIndex: 'address',
key:'age', // key:'age',
align: 'center', // align: 'center',
slots: { customRender: "action" }, // slots: { customRender: "action" },
} // }
]) ])
const approvalData = ref(null) const approvalData = ref(null)
const threeList = ref(false) const threeList = ref(false)

View File

@@ -4080,7 +4080,7 @@ function onFocusEnd(){
editPlan(postData) editPlan(postData)
.then((res) => { .then((res) => {
if(res.data.code == 200){ if(res.data.code == 200){
getTableDate3(); handleSearchTable();
handleCancelStu(); handleCancelStu();
rest(); rest();
}else{ }else{
@@ -4089,6 +4089,7 @@ function onFocusEnd(){
state.addLoading = false; state.addLoading = false;
}) })
.catch((err) => { .catch((err) => {
handleSearchTable();
message.destroy() message.destroy()
message.error(err.data.msg) message.error(err.data.msg)
state.addLoading = false; state.addLoading = false;
@@ -4474,9 +4475,13 @@ function onFocusEnd(){
dialog({ dialog({
content: "确定撤回吗?", content: "确定撤回吗?",
ok: () => { ok: () => {
message.success("撤回成功"); handle({ offcourseId: id, type: 0 }).then(res=>{
record.publishStatus ? (state.tableData1[index].publishStatus = 0) : (state.tableData1[index].auditStatus = 0); message.success("撤回成功");
handle({ offcourseId: id, type: 0 }); record.publishStatus ? (state.tableData1[index].publishStatus = 0) : (state.tableData1[index].auditStatus = 0);
}).catch(err=>{
message.destroy();
message.error(err.data.msg);
})
}, },
}); });
}; };
@@ -4860,10 +4865,14 @@ function onFocusEnd(){
dialog({ dialog({
content: "确定删除该课程吗?", content: "确定删除该课程吗?",
ok: async () => { ok: async () => {
message.success("删除成功"); await handle({ offcourseId: id, type: -1 }).then(res=>{
state.tableLoading = true; message.success("删除成功");
await handle({ offcourseId: id, type: -1 }); state.tableLoading = true;
getTableDate(); getTableDate();
}).catch(err=>{
message.destroy()
message.error(err.data.msg)
})
}, },
}); });
}; };
@@ -4912,9 +4921,14 @@ function onFocusEnd(){
dialog({ dialog({
content: "确定停用该课程吗?", content: "确定停用该课程吗?",
ok: () => { ok: () => {
message.success("停用成功"); handle({ offcourseId: record.id, type: -2 }).then(res=>{
record.status = 0; console.log(res,'handleStop')
handle({ offcourseId: record.id, type: -2 }); message.success("停用成功");
record.status = 0;
}).catch(err=>{
message.destroy()
message.error(err.data.msg)
})
}, },
}); });
}; };

View File

@@ -142,7 +142,7 @@
<a-row :gutter="16"> <a-row :gutter="16">
<a-col :span="24"> <a-col :span="24">
<a-form-item label="手机号码" name="mobile" prop="mobile"> <a-form-item label="手机号码" name="mobile" prop="mobile">
<a-input v-model:value.trim="formParam.mobile" class="draitem" <a-input type="number" v-model:value.trim="formParam.mobile" class="draitem"
placeholder="请输入手机号码" allowClear showSearch :maxLength="11" @blur="sendPhone"> placeholder="请输入手机号码" allowClear showSearch :maxLength="11" @blur="sendPhone">
</a-input> </a-input>
</a-form-item> </a-form-item>
@@ -155,8 +155,16 @@
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
<a-form-item label="初始授课时长" name="teaching"> <a-form-item name="defaultTeachingTime">
<a-input v-model:value="formParam.teaching" style="width:100%; height: 40px; border-radius: 8px ; " <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.defaultTeachingTime" style="width:100%; height: 40px; border-radius: 8px ; "
placeholder="0" allowClear showSearch suffix="分钟" @blur="clearNonNumber" @focus="focusTeaching"> placeholder="0" allowClear showSearch suffix="分钟" @blur="clearNonNumber" @focus="focusTeaching">
</a-input> </a-input>
<!-- <span style="margin-left: 5px ;" v-if="formParam.teaching !== null">{{ (formParam.teaching / 60 <!-- <span style="margin-left: 5px ;" v-if="formParam.teaching !== null">{{ (formParam.teaching / 60
@@ -316,6 +324,8 @@ export default {
const router = useRouter(); const router = useRouter();
const userInfo = computed(() => store.state.userInfo); const userInfo = computed(() => store.state.userInfo);
const state = reactive({ const state = reactive({
phoneEmil: 0,
phoneEmilTwo: 0,
lookExternalVisi:false, lookExternalVisi:false,
lookExterId: null, lookExterId: null,
currentPage1: 1, currentPage1: 1,
@@ -348,7 +358,7 @@ export default {
teacherType:'2', teacherType:'2',
photo:null, photo:null,
status:1, status:1,
teaching:0, defaultTeachingTime:0,
}, },
vf:true, vf:true,
searchParam: { searchParam: {
@@ -397,8 +407,8 @@ export default {
}; };
const AccountStatusList = ref([ const AccountStatusList = ref([
{ value: '', label: "全部" }, { value: '', label: "全部" },
{ value: 1, label: "启用" }, { value: '1', label: "启用" },
{ value: 2, label: "停用" }, { value: '2', label: "停用" },
]) ])
const columns = ref([ const columns = ref([
{ {
@@ -527,6 +537,8 @@ export default {
// 新增讲师 // 新增讲师
const addTeacher = () => { const addTeacher = () => {
cancel() cancel()
state.phoneEmil = 0
state.phoneEmilTwo = 0
state.teacherdialog = true; state.teacherdialog = true;
state.teacherdialogtitle = '新增讲师' state.teacherdialogtitle = '新增讲师'
// state.formParam.photo =userInfo.value?.avatar // state.formParam.photo =userInfo.value?.avatar
@@ -538,6 +550,8 @@ export default {
//修改讲师信息弹窗 //修改讲师信息弹窗
const handleModify = (record) => { const handleModify = (record) => {
state.phoneEmil = 0
state.phoneEmilTwo = 0
state.teacherdialog = true; state.teacherdialog = true;
state.teacherdialogtitle = '编辑讲师' state.teacherdialogtitle = '编辑讲师'
state.id = record.id state.id = record.id
@@ -558,6 +572,9 @@ export default {
//保存 //保存
const createTeacherDialog = async () => { const createTeacherDialog = async () => {
state.formParam.supplier = state.formParam?.supplier?.trim() state.formParam.supplier = state.formParam?.supplier?.trim()
if(state.formParam.defaultTeachingTime||state.formParam.defaultTeachingTime==0){
state.formParam.defaultTeachingTime = String(state.formParam.defaultTeachingTime)
}
const formItemNames = Object.keys(rules); const formItemNames = Object.keys(rules);
for(let i=0;i<formItemNames.length;i++){ for(let i=0;i<formItemNames.length;i++){
// const result = await validateField(formItemNames[i]); // const result = await validateField(formItemNames[i]);
@@ -566,6 +583,14 @@ export default {
return message.error(rules[formItemNames[i]][0].log) return message.error(rules[formItemNames[i]][0].log)
} }
} }
if(state.phoneEmil){
message.destroy()
return message.warning( '手机号格式不正确')
}
if(state.phoneEmilTwo){
message.destroy()
return message.warning( '邮箱格式不正确')
}
state.formParam.description = repl(state.formParam.description) state.formParam.description = repl(state.formParam.description)
state.formParam = {...state.formParam} state.formParam = {...state.formParam}
if (state.vf == false) { if (state.vf == false) {
@@ -624,6 +649,7 @@ export default {
} }
}) })
.catch((err) => { .catch((err) => {
message.error(err.data.msg)
state.deleteTeacherdialog = false state.deleteTeacherdialog = false
}); });
} }
@@ -669,7 +695,7 @@ export default {
status:1, status:1,
teacherType:2, teacherType:2,
photo:null, photo:null,
teaching:0, defaultTeachingTime:0,
name: null, name: null,
mobile: null, mobile: null,
email: null, email: null,
@@ -684,6 +710,7 @@ export default {
const rules = { const rules = {
name: [{ required: true, message: '',log: '讲师不能为空' }], name: [{ required: true, message: '',log: '讲师不能为空' }],
supplier:[{ required: true, message: '',log:'供应商不能为空' }], supplier:[{ required: true, message: '',log:'供应商不能为空' }],
defaultTeachingTime:[{ required: true, message: '',log:'初始授课时长不能为空' }],
// email:[ // email:[
// { // {
// type: "email", // type: "email",
@@ -745,34 +772,38 @@ export default {
state.formParam.name = state.formParam?.name?.replace(/\s/g, ''); state.formParam.name = state.formParam?.name?.replace(/\s/g, '');
} }
const sendPhone=()=>{ const sendPhone=()=>{
state.phoneEmil = 0
console.log(state.formParam.mobile) console.log(state.formParam.mobile)
const reg = /^1[3|4|5|6|7|8|9][0-9]\d{8}$/; const reg = /^1[3|4|5|6|7|8|9][0-9]\d{8}$/;
if (!state.formParam.mobile) { if (!state.formParam.mobile) {
} else if (!reg.test(state.formParam.mobile)) { } else if (!reg.test(state.formParam.mobile)) {
message.warning( '手机号格式不正确') message.warning( '手机号格式不正确')
state.formParam.mobile='' // state.formParam.mobile=''
state.phoneEmil = 1
// state.formParam.mobile = state.formParam.mobile.replace(/\D/g, ''); // state.formParam.mobile = state.formParam.mobile.replace(/\D/g, '');
} }
} }
const sendEmail=()=>{ const sendEmail=()=>{
state.phoneEmilTwo = 0
const reg = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.\w{2,}$/; const reg = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.\w{2,}$/;
if(!state.formParam.email){ if(!state.formParam.email){
return return
} }
if (!reg.test(state.formParam.email)) { if (!reg.test(state.formParam.email)) {
message.warning( '邮箱格式不正确') message.warning( '邮箱格式不正确')
state.formParam.email='' // state.formParam.email=''
state.phoneEmilTwo = 2
// state.formParam.email = state.formParam.email.replace( /[\u4e00-\u9fa5]/g, ''); // state.formParam.email = state.formParam.email.replace( /[\u4e00-\u9fa5]/g, '');
} }
} }
const clearNonNumber = () => { const clearNonNumber = () => {
state.formParam.teaching = state.formParam.teaching?.replace(/\D/g, ''); state.formParam.defaultTeachingTime = state.formParam.defaultTeachingTime?.replace(/\D/g, '');
state.formParam.teaching = state.formParam.teaching?.slice(0,8) state.formParam.defaultTeachingTime = state.formParam.defaultTeachingTime?.slice(0,8)
!state.formParam.teaching && (state.formParam.teaching = 0) !state.formParam.defaultTeachingTime && (state.formParam.defaultTeachingTime = 0)
} }
const focusTeaching = () => { const focusTeaching = () => {
state.formParam.teaching == 0 && (state.formParam.teaching = null) state.formParam.defaultTeachingTime == 0 && (state.formParam.defaultTeachingTime = null)
} }
const sendRemark=()=>{ const sendRemark=()=>{
state.formParam.remark = state.formParam.remark?.replace(/\s/g, ''); state.formParam.remark = state.formParam.remark?.replace(/\s/g, '');
@@ -788,8 +819,7 @@ export default {
//导出功能 //导出功能
const handleExport = () => { const handleExport = () => {
window.open( window.open(
`${process.env.VUE_APP_BASE_API}/admin/export/exportOutTeacher?pageNo=${state.searchParam.pageNo `${process.env.VUE_APP_BASE_API}/admin/export/exportOutTeacher?name=${state.searchParam.name || ""}&status=${state.searchParam.status || ""}`
}&pageSize=${state.searchParam.pageSize}&name=${state.searchParam.name ? state.searchParam.name : ""}&status=${state.searchParam.status ? state.searchParam.status : ""}`
); );
// this.download('lesson_records/export', { // this.download('lesson_records/export', {
// ...state.searchParam // ...state.searchParam

View File

@@ -341,7 +341,7 @@
<span style="margin-left: 10px ;" v-if="formParam.teaching != '0'">({{ (formParam.teaching / 60 <span style="margin-left: 10px ;" v-if="formParam.teaching != '0'">({{ (formParam.teaching / 60
).toFixed(2) }}小时)</span> ).toFixed(2) }}小时)</span>
</a-descriptions-item> </a-descriptions-item>
<a-descriptions-item label="评分 ">{{ formParam.score ||'-'}}</a-descriptions-item> <a-descriptions-item label="评分 ">{{ formParam.score?Number(formParam.score).toFixed(0)==0?'-':Number(formParam.score).toFixed(0):'-'}}</a-descriptions-item>
<a-descriptions-item label="参训人数 ">{{ formParam.studys ||'-'}}</a-descriptions-item> <a-descriptions-item label="参训人数 ">{{ formParam.studys ||'-'}}</a-descriptions-item>
<a-descriptions-item label="备注 " :span="2">{{ formParam.remark ||'-' }}</a-descriptions-item> <a-descriptions-item label="备注 " :span="2">{{ formParam.remark ||'-' }}</a-descriptions-item>
</a-descriptions> </a-descriptions>
@@ -520,18 +520,22 @@ export default {
label:item label:item
} }
}) })
supperList.value.unshift({
value: '',
label: '全部'
})
} }
}) })
} }
const AuthenticationStatusList = ref([ const AuthenticationStatusList = ref([
{ value: '', label: "全部" }, { value: '', label: "全部" },
{ value: 0, label: "未开课" }, { value: '0', label: "未开课" },
{ value: 1, label: "已开课" }, { value: '1', label: "已开课" },
]) ])
const entryTypeList = ref([ const entryTypeList = ref([
{ value: '', label: "全部" }, { value: '', label: "全部" },
{ value: 0, label: "系统生成" }, { value: '0', label: "系统生成" },
{ value: 1, label: "手动录入" }, { value: '1', label: "手动录入" },
]) ])
const columns = ref([ const columns = ref([
@@ -700,6 +704,13 @@ export default {
key: 'score', key: 'score',
ellipsis: true, align: "center", ellipsis: true, align: "center",
width: 120, width: 120,
customRender: (value) => {
return (
<div>
{value.record.score?Number(value.record.score).toFixed(0)==0?'-':Number(value.record.score).toFixed(0) : '-'}
</div>
)
}
}, },
{ {
@@ -963,7 +974,7 @@ export default {
//导出功能 //导出功能
const handleExport = () => { const handleExport = () => {
window.open( window.open(
`${process.env.VUE_APP_BASE_API}/admin/export/exportOutTeacherRecord?pageNo=${state.searchParam.pageNo}&pageSize=${state.searchParam.pageSize}&recordType=2&name=${state.searchParam.name ? state.searchParam.name : ""}&courseName=${state.searchParam.courseName ? state.searchParam.courseName : ""}&createFrom=${state.searchParam.createFrom ? state.searchParam.createFrom : ""}&beginTime=${state.searchParam.beginTime ? state.searchParam.beginTime : ""}&endTime=${state.searchParam.endTime ? state.searchParam.endTime : ""}&courseTypeId=${state.searchParam.courseTypeId ? state.searchParam.courseTypeId : ""}&courseStatus=${state.searchParam.courseStatus ? state.searchParam.courseStatus : ""}` `${process.env.VUE_APP_BASE_API}/admin/export/exportOutTeacherRecord?recordType=2&name=${state.searchParam.name || ""}&courseName=${state.searchParam.courseName || ""}&createFrom=${state.searchParam.createFrom || ""}&beginTime=${state.searchParam.beginTime|| ""}&endTime=${state.searchParam.endTime || ""}&courseTypeId=${state.searchParam.courseTypeId || ""}&courseStatus=${state.searchParam.courseStatus || ""}&supplier=${state.searchParam.supplier || ""}`
); );
} }
const clearstudysNumber = () => { const clearstudysNumber = () => {

View File

@@ -77,7 +77,7 @@
<template #bodyCell="{ record, column }"> <template #bodyCell="{ record, column }">
<template v-if="column.key === 'orgName'"> <template v-if="column.key === 'orgName'">
<a-space style="display:flex ;justify-content: space-around; "> <a-space style="display:flex ;justify-content: left; ">
<!-- <a-popover> <!-- <a-popover>
<template #content> <template #content>
<p>{{ record.orgName}}</p> <p>{{ record.orgName}}</p>
@@ -674,6 +674,10 @@ export default {
array.push(obj); array.push(obj);
}); });
LecturerSystemList.value = array; LecturerSystemList.value = array;
LecturerSystemList.value.unshift({
value: "",
label: "全部"
})
} }
}) })
} }
@@ -706,19 +710,23 @@ export default {
array.push(obj); array.push(obj);
}); });
getLevelList.value = array; getLevelList.value = array;
getLevelList.value.unshift({
value: "",
label: "全部"
})
} }
}) })
} }
changetlevel() changetlevel()
const OnTheJobStatusList = ref([ const OnTheJobStatusList = ref([
{ value:"", label: "全部" }, { value:"", label: "全部" },
{ value: 0, label: "在职" }, { value: '0', label: "在职" },
{ value: 1, label: "离职" }, { value: '1', label: "离职" },
]) ])
const AuthenticationStatusList = ref([ const AuthenticationStatusList = ref([
{ value: "", label: "全部" }, { value: "", label: "全部" },
{ value: 0, label: "未认证" }, { value: '0', label: "未认证" },
{ value: 1, label: "已认证" }, { value: '1', label: "已认证" },
]) ])
// const PlaceOfPayList = ref([ // const PlaceOfPayList = ref([
// // { value: 0, label: "发薪地B1" }, // // { value: 0, label: "发薪地B1" },
@@ -783,7 +791,7 @@ export default {
title: '所属组织 ', title: '所属组织 ',
dataIndex: 'orgName', dataIndex: 'orgName',
key: 'orgName', key: 'orgName',
ellipsis: true, align: "center", ellipsis: true, align: "left",
scopedSlots: { customRender: "orgName" }, scopedSlots: { customRender: "orgName" },
width: 200, width: 200,
// customRender: (value, record) => { // customRender: (value, record) => {
@@ -798,7 +806,7 @@ export default {
title: '讲师体系 ', title: '讲师体系 ',
dataIndex: 'tsystemName', dataIndex: 'tsystemName',
key: 'tsystemName', key: 'tsystemName',
ellipsis: true, align: "center", ellipsis: true, align: "left",
width: 200, width: 200,
}, },
{ {
@@ -1343,7 +1351,7 @@ export default {
//导出功能 //导出功能
const handleExport = () => { const handleExport = () => {
window.open( window.open(
`${process.env.VUE_APP_BASE_API}/admin/export/exportInTeacher?pageNo=${state.searchParam.pageNo}&pageSize=${state.searchParam.pageSize}&name=${state.searchParam.name ? state.searchParam.name : ""}&tsystemId=${state.searchParam.tsystemId ? state.searchParam.tsystemId : ""}&tLevelName=${state.searchParam.tLevelName ? state.searchParam.tLevelName : "" }&waitStatus=${state.searchParam.waitStatus ? state.searchParam.waitStatus : ""}&certStatus=${state.searchParam.certStatus ? state.searchParam.certStatus : ""}&courses=${state.searchParam.courses ? state.searchParam.courses : ""}` `${process.env.VUE_APP_BASE_API}/admin/export/exportInTeacher?name=${state.searchParam.name || ""}&tSystemId=${state.searchParam.tSystemId || ""}&tLevelName=${state.searchParam.tLevelName || "" }&waitStatus=${state.searchParam.waitStatus || ""}&certStatus=${state.searchParam.certStatus || ""}&courses=${state.searchParam.courses || ""}`
); );
// this.download('lesson_records/export', { // this.download('lesson_records/export', {
// ...state.searchParam // ...state.searchParam

View File

@@ -64,7 +64,7 @@
</a-form-item> </a-form-item>
<!-- <div style="width: 100%;"></div> --> <!-- <div style="width: 100%;"></div> -->
<a-form-item class="select" v-if="moreid == 2"> <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="请选择评分" <a-select style="min-width: 200px ; height: auto ;margin-bottom:20px" v-model:value="score" placeholder="请选择评分" showArrow
:options="scoreList" allowClear showSearch mode="multiple" @change="scoreChange" :options="scoreList" allowClear showSearch mode="multiple" @change="scoreChange"
v-on:keydown.enter="enterPressHadlerSearch"> v-on:keydown.enter="enterPressHadlerSearch">
</a-select> </a-select>
@@ -423,7 +423,7 @@
).toFixed(2) }}小时)</span> </a-descriptions-item> ).toFixed(2) }}小时)</span> </a-descriptions-item>
<a-descriptions-item label="授课/课程日期 ">{{ formParam.teachingDate||'-' }}</a-descriptions-item> <a-descriptions-item label="授课/课程日期 ">{{ formParam.teachingDate||'-' }}</a-descriptions-item>
<a-descriptions-item label="参训人数 ">{{ formParam.studys||'-' }}</a-descriptions-item> <a-descriptions-item label="参训人数 ">{{ formParam.studys||'-' }}</a-descriptions-item>
<a-descriptions-item label="评分 ">{{ formParam.score||'-' }}</a-descriptions-item> <a-descriptions-item label="评分 ">{{ formParam.score?Number(formParam.score).toFixed(0)==0?'-':Number(formParam.score).toFixed(0):'-' }}</a-descriptions-item>
<a-descriptions-item label="内容分类">{{ formParam.courseTypeName||'-' }}</a-descriptions-item> <a-descriptions-item label="内容分类">{{ formParam.courseTypeName||'-' }}</a-descriptions-item>
<a-descriptions-item label="备注 ">{{ formParam.remark||'-' }}</a-descriptions-item> <a-descriptions-item label="备注 ">{{ formParam.remark||'-' }}</a-descriptions-item>
</a-descriptions> </a-descriptions>
@@ -486,7 +486,7 @@
</div> </div>
</a-modal> </a-modal>
</div> </div>
<ImportWork v-model:showWork="showWork" :template="'内部授课记录导入模板'" :url="'/admin/export/importInTeacherRecord'" :title="title"></ImportWork> <ImportWork v-model:showWork="showWork" :template="'内部讲师授课记录导入模板-20241220.xlsx'" :url="'/admin/export/importInTeacherRecord'" :title="title"></ImportWork>
<!-- <div> <Upload/> </div> --> <!-- <div> <Upload/> </div> -->
</div> </div>
</template> </template>
@@ -659,6 +659,10 @@ export default {
array.push(obj); array.push(obj);
}); });
LecturerSystemList.value = array; LecturerSystemList.value = array;
LecturerSystemList.value.unshift({
value: '',
label: '全部'
})
} }
console.log("获取讲师", LecturerSystemList); console.log("获取讲师", LecturerSystemList);
}) })
@@ -678,13 +682,13 @@ export default {
]) ])
const AuthenticationStatusList = ref([ const AuthenticationStatusList = ref([
{ value: '', label: "全部" }, { value: '', label: "全部" },
{ value: 0, label: "未开课" }, { value: '0', label: "未开课" },
{ value: 1, label: "已开课" }, { value: '1', label: "已开课" },
]) ])
const entryTypeList = ref([ const entryTypeList = ref([
{ value: '', label: "全部" }, { value: '', label: "全部" },
{ value: 0, label: "系统生成" }, { value: '0', label: "系统生成" },
{ value: 1, label: "手动录入" }, { value: '1', label: "手动录入" },
]) ])
const scoreList = ref([ const scoreList = ref([
{ value: '', label: "全部" }, { value: '', label: "全部" },
@@ -699,13 +703,15 @@ export default {
{ value: '10~20', label: "10~20" }, { value: '10~20', label: "10~20" },
]) ])
const studysList = ref([ const studysList = ref([
{ value: '', label: "全部" },
{ value: '0-30', label: "0~30" }, { value: '0-30', label: "0~30" },
{ value: '0-50', label: "0~50" }, { value: '0-50', label: "0~50" },
{ value: '0-70', label: "0~70" }, { value: '0-70', label: "0~70" },
{ value: '0-100', label: "0~100" }, { value: '0-100', label: "0~100" },
{ value: '0-150', label: "0~150" }, // { value: '0-150', label: "0~150" },
{ value: '0-200', label: "0~200" }, { value: '0-200', label: "0~200" },
{ value: '0-300', label: "0~300 " }, { value: '0-300', label: "0~300 " },
{ value: '300以上', label: "300以上" },
]) ])
const scoreChange = (e) => { const scoreChange = (e) => {
if (e.length !== 0) { if (e.length !== 0) {
@@ -751,18 +757,25 @@ export default {
ellipsis: true, align: "center", ellipsis: true, align: "center",
width: 120, width: 120,
}, },
{
title: '课程名称 ',
dataIndex: 'courseName',
key: 'courseName ',
ellipsis: true, align: "left",
width: 200,
},
{ {
title: '讲师体系 ', title: '讲师体系 ',
dataIndex: 'tsystemName', dataIndex: 'tsystemName',
key: 'tsystemName', key: 'tsystemName',
ellipsis: true, align: "center", ellipsis: true, align: "left",
width: 200, width: 200,
}, },
{ {
title: '培训发生组织 ', title: '培训发生组织 ',
dataIndex: 'trainOrgName', dataIndex: 'trainOrgName',
key: 'trainOrgName', key: 'trainOrgName',
ellipsis: true, align: "center", ellipsis: true, align: "left",
width: 200, width: 200,
customRender: (value, record) => { customRender: (value, record) => {
return ( return (
@@ -791,13 +804,7 @@ export default {
) )
} }
}, },
{
title: '课程名称 ',
dataIndex: 'courseName',
key: 'courseName ',
ellipsis: true, align: "center",
width: 120,
},
{ {
title: '课程类型 ', title: '课程类型 ',
dataIndex: 'type', dataIndex: 'type',
@@ -881,6 +888,13 @@ export default {
key: 'score', key: 'score',
ellipsis: true, align: "center", ellipsis: true, align: "center",
width: 120, width: 120,
customRender: (value) => {
return (
<div>
{value.record.score?Number(value.record.score).toFixed(0)==0?'-':Number(value.record.score).toFixed(0) : '-'}
</div>
)
}
}, },
{ {
title: '是否生成课时费 ', title: '是否生成课时费 ',
@@ -905,8 +919,9 @@ export default {
title: '操作 ', title: '操作 ',
dataIndex: 'operation', dataIndex: 'operation',
key: 'operation', key: 'operation',
ellipsis: true, align: "right", // ellipsis: true,
width: 200, align: "center",
width: 100,
fixed: "right", fixed: "right",
scopedSlots: { customRender: "action" }, scopedSlots: { customRender: "action" },
}, },
@@ -1024,7 +1039,23 @@ export default {
tableData.value = res.data.data.records tableData.value = res.data.data.records
state.tableDataTotal = Number(res.data.data.total); state.tableDataTotal = Number(res.data.data.total);
state.tableLoading = false state.tableLoading = false
console.log("获取tableData", tableData); // console.log("获取tableData", tableData);
let findValue = false;
tableData.value.some(item=>{
if(item.createFrom == 1 && item.isSuperPermission === 'true'){
columns.value[14].width = 160
findValue = true
return true
}
})
if(!findValue){
const text = tableData.value.find(item=>item.createFrom == 1)
if(text){
columns.value[14].width = 120
}else{
columns.value[14].width = 100
}
}
}) })
.catch(err => { .catch(err => {
state.tableLoading = false state.tableLoading = false
@@ -1298,13 +1329,13 @@ export default {
ellipsis: true, align: "center", ellipsis: true, align: "center",
width: 120, width: 120,
}, },
{ // {
title: '应发费用 ', // title: '应发费用 ',
dataIndex: 'payableExpense', // dataIndex: 'payableExpense',
key: 'payableExpense', // key: 'payableExpense',
ellipsis: true, align: "center", // ellipsis: true, align: "center",
width: 120, // width: 120,
}, // },
{ {
title: '状态 ', title: '状态 ',
dataIndex: 'status', dataIndex: 'status',
@@ -1313,14 +1344,15 @@ export default {
width: 120, width: 120,
customRender: (value) => { customRender: (value) => {
return ( return (
<div > <div>
{value.record.status == "A10" || value.record.status == "A20" || value.record.status == "A30" || value.record.status == "E10" || value.record.status == "S20" {String(value.record.status)
? { ? {
"A10": "待审核", "0": "待确认",
"A20": "提交", "1": "提交",
"A30": "审核中", "2": "审核中",
"E10": "审核打回", "3": "审核通过",
"S20": "审核通过", '4': '审核拒绝',
'5': '待提交',
}[value.record.status + ""] || "" }[value.record.status + ""] || ""
: "-"} : "-"}
</div> </div>
@@ -1337,11 +1369,11 @@ export default {
// }, // },
]) ])
const gettableDatas = (record) => { const gettableDatas = (record) => {
getExpenseByCourseId({ courseId: record.courseId }) getExpenseByCourseId({ courseId: record.courseId,teacherId:record.teacherId })
.then((res) => { .then((res) => {
console.log(res) console.log(res)
tableDatas.value = res.data.data.records tableDatas.value = res.data.data
state.tableDataTotal = Number(res.data.data.total); // state.tableDataTotal = Number(res.data.data.total);
}).catch(err => { }).catch(err => {
message.destroy() message.destroy()
}) })
@@ -1357,7 +1389,7 @@ export default {
//导出功能 //导出功能
const handleExport = () => { const handleExport = () => {
window.open( window.open(
`${process.env.VUE_APP_BASE_API}/admin/export/exportInTeacherRecord?pageNo=${state.searchParam.pageNo}&pageSize=${state.searchParam.pageSize}&recordType=1&name=${state.searchParam.name ? state.searchParam.name : ''}&courseName=${state.searchParam.courseName ? state.searchParam.courseName : ''}&createFrom=${state.searchParam.createFrom ? state.searchParam.createFrom : ''}&courseStatus=${state.searchParam.courseStatus ? state.searchParam.courseStatus : ''}&tSystemId=${state.searchParam.tSystemId ? state.searchParam.tSystemId : ''}&beginTime=${state.searchParam.beginTime ? state.searchParam.beginTime : ''}&endTime=${state.searchParam.endTime ? state.searchParam.endTime : ''}&orgId=${state.searchParam.orgId ? state.searchParam.orgId : ''}&courseTypeId=${state.searchParam.courseTypeId ? state.searchParam.courseTypeId : ''}&score=${state.searchParam.score ? state.searchParam.score : ''}&studys=${state.searchParam.studys ? state.searchParam.studys : ' '} `${process.env.VUE_APP_BASE_API}/admin/export/exportInTeacherRecord?recordType=1&name=${state.searchParam.name || ''}&courseName=${state.searchParam.courseName || ''}&createFrom=${state.searchParam.createFrom || ''}&courseStatus=${state.searchParam.courseStatus || ''}&tSystemId=${state.searchParam.tSystemId || ''}&beginTime=${state.searchParam.beginTime || ''}&endTime=${state.searchParam.endTime || ''}&orgId=${state.searchParam.orgId || ''}&courseTypeId=${state.searchParam.courseTypeId || ''}&score=${state.searchParam.score || ''}&studys=${state.searchParam.studys || ''}
`) `)
console.log(state.searchParam.name, state.searchParam, '参数') console.log(state.searchParam.name, state.searchParam, '参数')
} }

View File

@@ -62,7 +62,7 @@
text-overflow: ellipsis;">{{flipData(record.orgName)||'-'}}</div> text-overflow: ellipsis;">{{flipData(record.orgName)||'-'}}</div>
</template> </template>
<template #appEdit="{ record }"> <template #appEdit="{ record }">
<a-button type="link" :disabled="record.createFrom==1 ?false :true" @click="edit(record)">编辑</a-button> <a-button type="link" v-if="record.createFrom" @click="edit(record)">编辑</a-button>
<a-button type="link" @click="recome(record)">移除</a-button> <a-button type="link" @click="recome(record)">移除</a-button>
</template> </template>
</a-table> </a-table>
@@ -837,7 +837,7 @@ export default {
}).then(res=>{ }).then(res=>{
message.success('移除成功') message.success('移除成功')
search() search()
state.formData.summaryTotal = Number(state.formData.summaryTotal) - Number(record.expense) state.formData.summaryTotal = (Number(state.formData.summaryTotal) - Number(record.expense)).toFixed(2)
}).catch(err=>{ }).catch(err=>{
message.error(err.msg) message.error(err.msg)
}) })
@@ -851,7 +851,7 @@ export default {
key: 'name', key: 'name',
ellipsis: true, ellipsis: true,
align: "center", align: "center",
width: 160, width: 120,
}, },
{ {
title: '讲师工号', title: '讲师工号',
@@ -859,7 +859,7 @@ export default {
key: 'userNo', key: 'userNo',
align: "center", align: "center",
ellipsis: true, ellipsis: true,
width: 160, width: 120,
}, },
{ {
title: '所属组织 ', title: '所属组织 ',
@@ -867,7 +867,7 @@ export default {
key: 'orgName', key: 'orgName',
ellipsis: true, ellipsis: true,
align: "center", align: "center",
width: 200, width: 160,
slots: { customRender: "orgName" }, slots: { customRender: "orgName" },
}, },
{ {
@@ -876,7 +876,7 @@ export default {
key: 'tsystemName', key: 'tsystemName',
ellipsis: true, ellipsis: true,
align: "center", align: "center",
width: 160, width: 120,
}, },
{ {
title: '讲师级别', title: '讲师级别',
@@ -884,7 +884,7 @@ export default {
key: 'tlevelName', key: 'tlevelName',
ellipsis: true, ellipsis: true,
align: "center", align: "center",
width: 160, width: 100,
}, },
{ {
title: '发薪地', title: '发薪地',
@@ -892,7 +892,10 @@ export default {
key: 'payrollPlace', key: 'payrollPlace',
ellipsis: true, ellipsis: true,
align: "center", align: "center",
width: 160, width: 100,
customRender: ({text}) => {
return text || '-'
}
}, },
{ {
title: '课程类型', title: '课程类型',
@@ -900,7 +903,7 @@ export default {
key: 'courseType', key: 'courseType',
ellipsis: true, ellipsis: true,
align: "center", align: "center",
width: 160, width: 100,
customRender: (value) => { customRender: (value) => {
return ( return (
<div> <div>
@@ -923,7 +926,7 @@ export default {
key: 'courseName', key: 'courseName',
ellipsis: true, ellipsis: true,
align: "center", align: "center",
width: 200, width: 160,
}, },
{ {
title: '授课/开发课程日期', title: '授课/开发课程日期',
@@ -931,7 +934,7 @@ export default {
key: 'teachingDate', key: 'teachingDate',
ellipsis: true, ellipsis: true,
align: "center", align: "center",
width: 200, width: 160,
}, },
{ {
title: '授课/开发课程时长 ', title: '授课/开发课程时长 ',
@@ -954,7 +957,7 @@ export default {
key: 'studys', key: 'studys',
ellipsis: true, ellipsis: true,
align: "center", align: "center",
width: 160, width: 100,
customRender: ({text}) => { customRender: ({text}) => {
return text || "0"; return text || "0";
} }
@@ -965,9 +968,13 @@ export default {
key: 'score', key: 'score',
ellipsis: true, ellipsis: true,
align: "center", align: "center",
width: 160, width: 100,
customRender: ({text}) => { customRender: (value) => {
return text || "-"; return (
<div>
{value.record.score?Number(value.record.score).toFixed(0)==0?'-':Number(value.record.score).toFixed(0) : '-'}
</div>
)
} }
}, },
{ {
@@ -976,7 +983,7 @@ export default {
key: 'levelPay', key: 'levelPay',
ellipsis: true, ellipsis: true,
align: "center", align: "center",
width: 160, width: 120,
}, },
{ {
title: '计划费用 ', title: '计划费用 ',
@@ -984,7 +991,7 @@ export default {
key: 'expense', key: 'expense',
ellipsis: true, ellipsis: true,
align: "center", align: "center",
width: 160, width: 120,
}, },
// { // {
// title: '应发费用 ', // title: '应发费用 ',
@@ -1001,7 +1008,7 @@ export default {
ellipsis: true, ellipsis: true,
align: "center", align: "center",
fixed: "right", fixed: "right",
width: 160, width: 120,
slots: { customRender: "appEdit" }, slots: { customRender: "appEdit" },
}, },
]) ])
@@ -1252,7 +1259,7 @@ export default {
.table{ .table{
padding-bottom: 70px; padding-bottom: 70px;
::v-deep .ant-table-cell-fix-right { ::v-deep .ant-table-cell-fix-right {
width: 160px !important; width: 120px !important;
} }
} }
} }

View File

@@ -95,7 +95,7 @@
<!-- <a-button type="link" @click="() => handleOperate(record, String(record.courseform))">审批</a-button> --> <!-- <a-button type="link" @click="() => handleOperate(record, String(record.courseform))">审批</a-button> -->
<!-- <a-button type="link" @click="() => deleteModal(record, String(record.courseform))">删除</a-button> --> <!-- <a-button type="link" @click="() => deleteModal(record, String(record.courseform))">删除</a-button> -->
<!-- <a-button v-if="record.status == 4" type="link" @click="submit(record)">提交</a-button> --> <!-- <a-button v-if="record.status == 4" type="link" @click="submit(record)">提交</a-button> -->
<a-button v-if="record.status == 2" type="link" @click="withdraw(record)">撤回</a-button> <a-button v-if="record.status == 2&&false" type="link" @click="withdraw(record)">撤回</a-button>
</a-space> </a-space>
</template> </template>
</template> </template>
@@ -136,9 +136,9 @@
<a-descriptions style="margin-top:16px" bordered :column="2" :contentStyle="rowCenter" :labelStyle="rowCenter"> <a-descriptions style="margin-top:16px" bordered :column="2" :contentStyle="rowCenter" :labelStyle="rowCenter">
<a-descriptions-item label="审批编号">{{formParam?.approvalNumber||'-'}}</a-descriptions-item> <a-descriptions-item label="审批编号">{{formParam?.approvalNumber||'-'}}</a-descriptions-item>
<a-descriptions-item label="培训发生组织">{{formParam?.trainOrgName||'-'}}</a-descriptions-item> <a-descriptions-item label="培训发生组织">{{formParam?.trainOrgName||'-'}}</a-descriptions-item>
<a-descriptions-item v-if="activeKey==2" label="汇总周期" >{{formParam?.summaryDate||'-'}}</a-descriptions-item> <a-descriptions-item label="汇总时间" >{{formParam?.summaryTime||'-'}}</a-descriptions-item>
<a-descriptions-item label="提交时间">{{formParam?.approvalSubmitTime||'-'}}</a-descriptions-item>
<a-descriptions-item label="汇总金额">{{formParam?.summaryTotal||'-'}}</a-descriptions-item> <a-descriptions-item label="汇总金额">{{formParam?.summaryTotal||'-'}}</a-descriptions-item>
<a-descriptions-item label="提交时间">{{formParam?.approvalSubmitTime||'-'}}</a-descriptions-item>
<a-descriptions-item label="状态">{{{0:'待确认' ,1:'待提交' ,2:'审核中', 3:'已完成', 4:'审核拒绝',5:'待提交'}[formParam?.status]}}</a-descriptions-item> <a-descriptions-item label="状态">{{{0:'待确认' ,1:'待提交' ,2:'审核中', 3:'已完成', 4:'审核拒绝',5:'待提交'}[formParam?.status]}}</a-descriptions-item>
</a-descriptions> </a-descriptions>
<!-- <span>审批详情</span> --> <!-- <span>审批详情</span> -->
@@ -165,7 +165,7 @@
</div> </div>
</div> </div>
</a-tab-pane> </a-tab-pane>
<a-tab-pane key="2" tab="讲师费审批记录" force-render> <a-tab-pane key="2" tab="讲师费审批记录" force-render v-if="false">
<div style="padding-bottom:70px"> <div style="padding-bottom:70px">
<a-table :header-cell-style="{ 'text-align': 'center' }" style="border: 1px solid #f2f6fe" :columns="columnsExamineTwo" <a-table :header-cell-style="{ 'text-align': 'center' }" style="border: 1px solid #f2f6fe" :columns="columnsExamineTwo"
:data-source="tableDataExamineTwo" :loading="tableDataExamineLoading" @expand="expandTable" :pagination="false"> :data-source="tableDataExamineTwo" :loading="tableDataExamineLoading" @expand="expandTable" :pagination="false">
@@ -387,6 +387,10 @@
array.push(obj); array.push(obj);
}); });
trainOrglist.value = array; trainOrglist.value = array;
trainOrglist.value.unshift({
value: '',
label: "全部"
})
} }
}) })
} }
@@ -400,7 +404,7 @@
]) ])
//认证状态0待确认 1待提交 2审核中 3审核通过 4.审核拒绝 //认证状态0待确认 1待提交 2审核中 3审核通过 4.审核拒绝
const AuthenticationStatusList = ref([ const AuthenticationStatusList = ref([
// { value: 0, label: "待确认" }, { value: '', label: "全部" },
{ value: 1, label: "待提交" }, { value: 1, label: "待提交" },
{ value: 2, label: "审核中" }, { value: 2, label: "审核中" },
{ value: 4, label: "审核拒绝" }, { value: 4, label: "审核拒绝" },
@@ -448,7 +452,7 @@
dataIndex: 'trainOrgName', dataIndex: 'trainOrgName',
key: 'trainOrgName', key: 'trainOrgName',
ellipsis: true, align: "center", ellipsis: true, align: "center",
width: 120, width: 200,
}, },
{ {
title: '汇总时间 ', title: '汇总时间 ',
@@ -507,9 +511,9 @@
title: '操作 ', title: '操作 ',
dataIndex: 'operation', dataIndex: 'operation',
key: 'operation', key: 'operation',
ellipsis: true, align: "right", ellipsis: true, align: "center",
fixed: "right", fixed: "right",
width: 200, width: 120,
scopedSlots: { customRender: "action" }, scopedSlots: { customRender: "action" },
}, },
@@ -959,6 +963,9 @@
ellipsis: true, ellipsis: true,
align: "center", align: "center",
width: 120, width: 120,
customRender: ({text}) => {
return text || '-'
}
}, },
{ {
title: '基准课酬 ', title: '基准课酬 ',
@@ -994,9 +1001,13 @@
ellipsis: true, ellipsis: true,
align: "center", align: "center",
width: 120, width: 120,
customRender: ({text}) => { customRender: (value) => {
return text || "-"; return (
} <div>
{value.record.score?Number(value.record.score).toFixed(0)==0?'-':Number(value.record.score).toFixed(0) : '-'}
</div>
)
}
}, },
{ {
title: '课程类型 ', title: '课程类型 ',

View File

@@ -18,7 +18,7 @@
</a-form-item> </a-form-item>
<a-form-item class="select"> <a-form-item class="select">
<a-select style="width: 235px ;margin-bottom:20px" v-model:value="searchParam.trainOrgId" placeholder="请选择培训发生组织" allowClear <a-select style="width: 235px ;margin-bottom:20px" v-model:value="searchParam.trainOrgId" placeholder="请选择培训发生组织" allowClear
:options="orgList" :options="orgListSearch"
v-on:keydown.enter="enterPressHadlerSearch"> v-on:keydown.enter="enterPressHadlerSearch">
</a-select> </a-select>
</a-form-item> </a-form-item>
@@ -528,7 +528,7 @@
<a-descriptions-item label="授课时间 ">{{(formParam.teachingDate) || '-'}}</a-descriptions-item> <a-descriptions-item label="授课时间 ">{{(formParam.teachingDate) || '-'}}</a-descriptions-item>
<a-descriptions-item label="授课时长 ">{{formParam.teachingTime || '-'}} <span v-if="formParam.teachingTime">({{(formParam.teachingTime/60).toFixed(2)}}小时)</span></a-descriptions-item> <a-descriptions-item label="授课时长 ">{{formParam.teachingTime || '-'}} <span v-if="formParam.teachingTime">({{(formParam.teachingTime/60).toFixed(2)}}小时)</span></a-descriptions-item>
<a-descriptions-item label="参训人数 ">{{formParam.studys || '-'}}</a-descriptions-item> <a-descriptions-item label="参训人数 ">{{formParam.studys || '-'}}</a-descriptions-item>
<a-descriptions-item label="评分 ">{{formParam.score || '-'}}</a-descriptions-item> <a-descriptions-item label="评分 ">{{formParam.score?Number(formParam.score).toFixed(0)==0?'-':Number(formParam.score).toFixed(0):'-' }}</a-descriptions-item>
<a-descriptions-item label="课酬基准 ">{{formParam.levelPay || '-'}}</a-descriptions-item> <a-descriptions-item label="课酬基准 ">{{formParam.levelPay || '-'}}</a-descriptions-item>
<a-descriptions-item label="计划费用 ">{{formParam.expense || '-'}}</a-descriptions-item> <a-descriptions-item label="计划费用 ">{{formParam.expense || '-'}}</a-descriptions-item>
<!-- <a-descriptions-item label="应发费用 ">{{formParam.payableExpense || '-'}}</a-descriptions-item> --> <!-- <a-descriptions-item label="应发费用 ">{{formParam.payableExpense || '-'}}</a-descriptions-item> -->
@@ -536,11 +536,11 @@
<a-descriptions-item label="状态">{{{0:'待确认' ,1:'待提交' ,2:'审核中', 3:'已完成', 4:'拒绝',5:'待提交'}[formParam?.status]}}</a-descriptions-item> <a-descriptions-item label="状态">{{{0:'待确认' ,1:'待提交' ,2:'审核中', 3:'已完成', 4:'拒绝',5:'待提交'}[formParam?.status]}}</a-descriptions-item>
<a-descriptions-item label="备注 ">{{formParam.remark || '-'}}</a-descriptions-item> <a-descriptions-item label="备注 ">{{formParam.remark || '-'}}</a-descriptions-item>
</a-descriptions> </a-descriptions>
<div style="margin-bottom: 20px;"> <div style="margin-bottom: 20px;" v-if="false">
<span class="line"></span> <span class="line"></span>
<span style="font-weight: 600;">讲师费审批</span> <span style="font-weight: 600;">讲师费审批</span>
</div> </div>
<div style="margin-bottom:32px;"> <div style="margin-bottom:32px;" v-if="false">
<a-table :columns="columnSee" :loading="SeeLoading" :data-source="tableDataSee" :pagination="false" /> <a-table :columns="columnSee" :loading="SeeLoading" :data-source="tableDataSee" :pagination="false" />
</div> </div>
<!-- <span class="line"></span> --> <!-- <span class="line"></span> -->
@@ -561,7 +561,7 @@
</div> --> </div> -->
</div> </div>
</a-drawer> </a-drawer>
<ImportWork v-model:showWork="showWork" :template="'讲师费导入模板'" :url="'/admin/export/importTeacherExpense'" :fileName="uploadFile" :title="title"></ImportWork> <ImportWork v-model:showWork="showWork" :template="'讲师费导入模板-20241220.xlsx'" :url="'/admin/export/importTeacherExpense'" :fileName="uploadFile" :title="title"></ImportWork>
</div> </div>
<!-- 一键确认讲师费 --> <!-- 一键确认讲师费 -->
<ConfirmLecturer @visibleFalse="visibleAll" :ids="selectsIds" v-model:visible="visibleConfirm" :name="'确认讲师费'" /> <ConfirmLecturer @visibleFalse="visibleAll" :ids="selectsIds" v-model:visible="visibleConfirm" :name="'确认讲师费'" />
@@ -611,6 +611,7 @@
tableDataSee: [], tableDataSee: [],
SeeLoading: false, SeeLoading: false,
orgList: [], orgList: [],
orgListSearch: [],
selectsIds: '', selectsIds: '',
visibleConfirm: false, visibleConfirm: false,
title:'导入讲师费记录', title:'导入讲师费记录',
@@ -699,6 +700,15 @@
value: item.id value: item.id
} }
}) })
state.orgListSearch = res.data.data?.map(item=>{
return{
label: item.affiliationName,
value: item.id
}
})
state.orgListSearch.unshift({
label: '全部', value: ''
})
}) })
} }
//费用类型 //费用类型
@@ -717,15 +727,16 @@
{ value: '0', label: "在线课" }, { value: '0', label: "在线课" },
{ value: '2', label: "课程开发" }, { value: '2', label: "课程开发" },
{ value: '3', label: "作业员入模培训" }, { value: '3', label: "作业员入模培训" },
{ value: '4', label: "其他" }, // { value: '4', label: "其他" },
]) ])
//认证状态 //认证状态
const AuthenticationStatusList = ref([ const AuthenticationStatusList = ref([
{ value: 0, label: "待确认" }, { value: '', label: "全部" },
{ value: 1, label: "待审核" }, { value: '0', label: "待确认" },
{ value: 2, label: "审核中" }, { value: '1', label: "待提交" },
{ value: 4, label: "审核拒绝" }, { value: '2', label: "审核" },
{ value: 3, label: "审核通过" }, { value: '4', label: "审核拒绝" },
{ value: '3', label: "审核通过" },
]) ])
const lecturerSystemList = ref([ const lecturerSystemList = ref([
@@ -748,6 +759,10 @@
array.push(obj); array.push(obj);
}); });
lecturerSystemList.value = array; lecturerSystemList.value = array;
lecturerSystemList.value.unshift({
value: '',
label: '全部'
})
} }
}) })
} }
@@ -768,6 +783,10 @@ getAllLevelList().then((res) => {
array.push(obj); array.push(obj);
}); });
getLevelList.value = array; getLevelList.value = array;
getLevelList.value.unshift({
value: "",
label: "全部"
})
} }
}) })
} }
@@ -904,14 +923,14 @@ getAllLevelList().then((res) => {
dataIndex: 'courseName', dataIndex: 'courseName',
key: 'courseName', key: 'courseName',
ellipsis: true, ellipsis: true,
align: "center", align: "left",
width: 200, width: 200,
}, },
{ {
title: '培训发生组织', title: '培训发生组织',
dataIndex: 'trainOrgName', dataIndex: 'trainOrgName',
key: 'trainOrgName', key: 'trainOrgName',
ellipsis: true, align: "center", ellipsis: true, align: "left",
width: 200, width: 200,
}, },
@@ -941,8 +960,8 @@ getAllLevelList().then((res) => {
title: '讲师体系', title: '讲师体系',
dataIndex: 'tsystemName', dataIndex: 'tsystemName',
key: 'tsystemName', key: 'tsystemName',
ellipsis: true, align: "center", ellipsis: true, align: "left",
width: 120, width: 200,
customRender: ({ text })=>{ customRender: ({ text })=>{
return text||'-' return text||'-'
} }
@@ -997,9 +1016,13 @@ getAllLevelList().then((res) => {
key: 'score', key: 'score',
ellipsis: true, align: "center", ellipsis: true, align: "center",
width: 120, width: 120,
customRender: ({ text })=>{ customRender: (value) => {
return text||'-' return (
} <div>
{value.record.score?Number(value.record.score).toFixed(0)==0?'-':Number(value.record.score).toFixed(0) : '-'}
</div>
)
}
}, },
{ {
title: '课程类型 ', title: '课程类型 ',
@@ -1640,9 +1663,13 @@ const column = ref([
key: 'courseAssess', key: 'courseAssess',
ellipsis: true, align: "center", ellipsis: true, align: "center",
width: 120, width: 120,
customRender: ({ text })=>{ customRender: (value) => {
return text||'-' return (
} <div>
{value.record.score?Number(value.record.score).toFixed(0)==0?'-':Number(value.record.score).toFixed(0) : '-'}
</div>
)
}
}, },
{ {
title: '课程类型 ', title: '课程类型 ',
@@ -1726,8 +1753,8 @@ const column = ref([
//导出功能 //导出功能
const handleExport = ()=>{ const handleExport = ()=>{
window.open ( window.open (
`${process.env.VUE_APP_BASE_API}/admin/export/exportTeacherExpense?pageNo=${state.searchParam.pageNo}&pageSize=${state.searchParam.pageSize}&name=${state.searchParam.name ? state.searchParam.name : "" `${process.env.VUE_APP_BASE_API}/admin/export/exportTeacherExpense?name=${state.searchParam.name || ""
}&trainOrgId=${ state.searchParam.trainOrgId ? state.searchParam.trainOrgId : ""}&type=${state.searchParam.type ? state.searchParam.type : ""}&tsystemId=${ state.searchParam.tSystemId ? state.searchParam.tSystemId : ""}&tLevelName=${ state.searchParam.tLevelName ? state.searchParam.tLevelName : ""}&beginTime=${state.searchParam.beginTime ? state.searchParam.beginTime : ""}&endTime=${state.searchParam.endTime ? state.searchParam.endTime : ""}` }&status=${ state.searchParam.status || ""}&trainOrgId=${ state.searchParam.trainOrgId || ""}&type=${state.searchParam.type || ""}&tSystemId=${ state.searchParam.tSystemId || ""}&tLevelName=${ state.searchParam.tLevelName || ""}&beginTime=${state.searchParam.beginTime || ""}&endTime=${state.searchParam.endTime || ""}`
); );
// this.download('lesson_records/export', { // this.download('lesson_records/export', {
// ...state.searchParam // ...state.searchParam

View File

@@ -25,7 +25,7 @@
</div> </div>
</a-form> </a-form>
<div style="width: 100%;"></div> <div style="width: 100%;"></div>
<div style="display: flex; margin-bottom: 20px"> <div v-if="isAdmin" style="display: flex; margin-bottom: 20px">
<a-button @click="searchResetPrevious()" type="primary" class="langbtn" style="width: 150px; height: 40px; border-radius: 8px" > <a-button @click="searchResetPrevious()" type="primary" class="langbtn" style="width: 150px; height: 40px; border-radius: 8px" >
<FolderAddOutlined /> 重新汇总上月讲师费 <FolderAddOutlined /> 重新汇总上月讲师费
</a-button> </a-button>
@@ -171,7 +171,7 @@
<MonthlyStatistics v-model:visible="opendrawer" :id="drawerId" ></MonthlyStatistics> <MonthlyStatistics v-model:visible="opendrawer" :id="drawerId" ></MonthlyStatistics>
</template> </template>
<script lang="jsx"> <script lang="jsx">
import { reactive, toRefs, ref, watch } from "vue"; import { reactive, toRefs, ref, watch,onMounted } from "vue";
import { message } from "ant-design-vue"; import { message } from "ant-design-vue";
import dayjs from "dayjs"; import dayjs from "dayjs";
import { useStore } from "vuex"; import { useStore } from "vuex";
@@ -179,7 +179,7 @@ import { useRouter } from "vue-router";
import { getOrganization } from "../../api/Teaching"; import { getOrganization } from "../../api/Teaching";
import { queryTeacherFeeMonthly, getTeacherFeeDetailListByTeacherNo, getTeacherFeeListByTeacherNo,TeacherFeeTotalList,createMonthSummary} from "../../api/lecturerFeeStatistics" import { queryTeacherFeeMonthly, getTeacherFeeDetailListByTeacherNo, getTeacherFeeListByTeacherNo,TeacherFeeTotalList,createMonthSummary} from "../../api/lecturerFeeStatistics"
; ;
import {expenseSummaryList,getTrainOrg,CreateMonthSummary} from "../../api/lecturerFeeManagement"; import {expenseSummaryList,getTrainOrg,CreateMonthSummary,isShowReimport} from "../../api/lecturerFeeManagement";
import dialog from '@/utils/dialog' import dialog from '@/utils/dialog'
import MonthlyStatistics from './MonthlyStatistics' import MonthlyStatistics from './MonthlyStatistics'
export default { export default {
@@ -188,9 +188,22 @@ export default {
MonthlyStatistics, MonthlyStatistics,
}, },
setup() { setup() {
onMounted(() => {
isShowReimport().then(res=>{
if(res.data.code == 200){
state.isAdmin = res.data.data
}else{
state.isAdmin = false
}
}).catch(err=>{
state.isAdmin = false
message.error(err.data.msg)
})
})
const store = useStore(); const store = useStore();
const router = useRouter(); const router = useRouter();
const state = reactive({ const state = reactive({
isAdmin: false,
opendrawer: false, opendrawer: false,
drawerId: '', drawerId: '',
summaryDate: null, summaryDate: null,
@@ -243,11 +256,11 @@ export default {
width:'100px', width:'100px',
}, },
{ {
title: '资源归属 ', title: '培训发生组织 ',
dataIndex: 'trainOrgName', dataIndex: 'trainOrgName',
key: 'trainOrgName', key: 'trainOrgName',
ellipsis: true, ellipsis: true,
align: "center", align: "left",
width: '200px', width: '200px',
}, },
{ {
@@ -378,6 +391,10 @@ export default {
array.push(obj); array.push(obj);
}); });
TrainOrglist.value = array; TrainOrglist.value = array;
TrainOrglist.value.unshift({
value: '',
label: "全部"
})
} }
console.log("获取发薪地",TrainOrglist); console.log("获取发薪地",TrainOrglist);
}) })

View File

@@ -258,7 +258,7 @@ export default {
key: 'name', key: 'name',
ellipsis: true, ellipsis: true,
align: "center", align: "center",
width: 160, width: 120,
}, },
{ {
title: '讲师工号', title: '讲师工号',
@@ -266,7 +266,7 @@ export default {
key: 'userNo', key: 'userNo',
align: "center", align: "center",
ellipsis: true, ellipsis: true,
width: 160, width: 120,
}, },
{ {
title: '所属组织 ', title: '所属组织 ',
@@ -274,7 +274,7 @@ export default {
key: 'orgName', key: 'orgName',
ellipsis: true, ellipsis: true,
align: "center", align: "center",
width: 200, width: 160,
customRender: ({text})=>{ customRender: ({text})=>{
return endOrg(text) return endOrg(text)
} }
@@ -285,7 +285,7 @@ export default {
key: 'payrollPlace', key: 'payrollPlace',
ellipsis: true, ellipsis: true,
align: "center", align: "center",
width: 160, width: 120,
}, },
{ {
title: '授课时长(系统 ) ', title: '授课时长(系统 ) ',
@@ -293,7 +293,7 @@ export default {
key: 'teachingSystem', key: 'teachingSystem',
ellipsis: true, ellipsis: true,
align: "center", align: "center",
width: 160, width: 140,
}, },
{ {
title: '授课时长(录入) ', title: '授课时长(录入) ',
@@ -301,15 +301,15 @@ export default {
key: 'teachingEnter', key: 'teachingEnter',
ellipsis: true, ellipsis: true,
align: "center", align: "center",
width: 160, width: 140,
}, },
{ {
title: '开发课程时长 ', title: '开发课程时长 ',
dataIndex: 'expense', dataIndex: 'teachingDevelop',
key: 'expense', key: 'teachingDevelop',
ellipsis: true, ellipsis: true,
align: "center", align: "center",
width: 160, width: 120,
}, },
{ {
title: '计划费用 ', title: '计划费用 ',
@@ -317,7 +317,7 @@ export default {
key: 'expense', key: 'expense',
ellipsis: true, ellipsis: true,
align: "center", align: "center",
width: 160, width: 120,
}, },
{ {
title: '应发费用 ', title: '应发费用 ',
@@ -325,7 +325,7 @@ export default {
key: 'payableExpense', key: 'payableExpense',
ellipsis: true, ellipsis: true,
align: "center", align: "center",
width: 160, width: 120,
}, },
{ {
title: '操作 ', title: '操作 ',
@@ -334,7 +334,7 @@ export default {
ellipsis: true, ellipsis: true,
align: "center", align: "center",
fixed: "right", fixed: "right",
width: 160, width: 100,
scopedSlots: { customRender: "action" }, scopedSlots: { customRender: "action" },
}, },
]) ])

View File

@@ -39,8 +39,10 @@
<div style="color: #1890ff;cursor: pointer;">查看</div> <div style="color: #1890ff;cursor: pointer;">查看</div>
</lockLecturer> </lockLecturer>
<a-button v-if="record.status!=2" type="link" @click="() => handleModify(record, String(record.courseform))">编辑</a-button> <a-button v-if="record.status!=2" type="link" @click="() => handleModify(record, String(record.courseform))">编辑</a-button>
<a-button v-if="record.status==2" type="link" @click="() => updateModal(record)">撤回</a-button> <a-button v-if="record.status==2&&false" type="link" @click="() => updateModal(record)">撤回</a-button>
<a-button type="link" @click="() => deleteModal(record, String(record.courseform))">删除</a-button> <!-- <a-button type="link" @click="() => deleteModal(record, String(record.courseform))">删除</a-button> -->
<a-button @click="isEnablePost(record,0)" v-if="record.enable" type="link" >启用</a-button>
<a-button @click="isEnablePost(record,1)" v-if="!record.enable" type="link" >停用</a-button>
</a-space> </a-space>
</template> </template>
</template> </template>
@@ -148,11 +150,11 @@
是否为根节点 是否为根节点
</template> </template>
<div style="display: flex;align-items: center;"> <div style="display: flex;align-items: center;">
<a-radio-group style="min-width:126px;" @change="selectRadio" v-model:value="formParam.isParent" name="radioGroup"> <a-radio-group :disabled="!formParam.locking" style="min-width:126px;" @change="selectRadio" v-model:value="formParam.isParent" name="radioGroup">
<a-radio :value="1"></a-radio> <a-radio :value="1"></a-radio>
<a-radio :value="0"></a-radio> <a-radio :value="0"></a-radio>
</a-radio-group> </a-radio-group>
<a-select v-model:value="formParam.code" :placeholder="!formParam.isParent?'请选择审批层级':'请选择根节点'" <a-select :disabled="!formParam.locking" v-model:value="formParam.code" :placeholder="!formParam.isParent?'请选择审批层级':'请选择根节点'"
:options="!formParam.isParent?PlaceOfPayList:PlaceOfPayListTwo" allowClear showSearch/> :options="!formParam.isParent?PlaceOfPayList:PlaceOfPayListTwo" allowClear showSearch/>
</div> </div>
</a-form-item> </a-form-item>
@@ -348,6 +350,7 @@ export default{
code: null, code: null,
isContains: '0', isContains: '0',
affiliationOrgList: [], affiliationOrgList: [],
locking: 1,
}, },
}) })
const PlaceOfPayList = ref([ const PlaceOfPayList = ref([
@@ -385,19 +388,19 @@ export default{
state.formParam.code = null state.formParam.code = null
} }
const columns = ref([ const columns = ref([
{ // {
title: '培训发生组织编号 ', // title: '培训发生组织编号 ',
dataIndex: 'affiliationCode', // dataIndex: 'affiliationCode',
key: 'affiliationCode', // key: 'affiliationCode',
ellipsis: true, // ellipsis: true,
align: "center", // align: "center",
width: '100px', // width: '100px',
}, // },
{ {
title: '培训发生组织名称 ', title: '培训发生组织名称 ',
dataIndex: 'affiliationName', dataIndex: 'affiliationName',
key: 'affiliationName', key: 'affiliationName',
ellipsis: true, align: "center", ellipsis: true, align: "left",
width: '200px', width: '200px',
}, },
{ {
@@ -427,7 +430,7 @@ export default{
title: '是否为根节点名称', title: '是否为根节点名称',
dataIndex: 'parentName', dataIndex: 'parentName',
key: 'parentName', key: 'parentName',
align: "center", align: "left",
width: '200px', width: '200px',
customRender: ({text,record})=>{ customRender: ({text,record})=>{
return ( return (
@@ -440,7 +443,7 @@ export default{
dataIndex: 'leaderName', dataIndex: 'leaderName',
key: 'leaderName', key: 'leaderName',
ellipsis: true, ellipsis: true,
align: "center", align: "left",
width: '200px', width: '200px',
}, },
@@ -581,6 +584,24 @@ const getTableDate = (obj) => {
} }
}) })
}; };
const isEnablePost = (record,status) => {
dialog({
content: `是否确认${!status?'启用':'停用'}该培训发生组织?`,
ok: () => {
lecturer.isEnable({id:record.id,status}).then(res=>{
if(typeof (res.data.data) != 'object'){
message.error(res.data.data)
return
}
message.success(`${!status?'启用':'停用'}成功`)
searchSubmit();
}).catch(err=>{
message.destroy()
message.error(err.data.msg)
})
}
})
}
//确认删除 //确认删除
const closeDeleteTeacher = () => { const closeDeleteTeacher = () => {
//调用删除接口 //调用删除接口
@@ -689,7 +710,7 @@ const getTableDate = (obj) => {
...item ...item
}; };
}); });
state.formParam.leveTwoValue = state.formParam.leveTwoArray.map(item => item.label).join(','); state.formParam.leveTwoValue = state.formParam.leveTwoArray.map(item => item.label).join(',')||null;
state.formParam.leveThreeArray = leveThreeArray.map(item => { state.formParam.leveThreeArray = leveThreeArray.map(item => {
return { return {
label: item.userName + item.userNo, label: item.userName + item.userNo,
@@ -698,7 +719,7 @@ const getTableDate = (obj) => {
...item ...item
}; };
}); });
state.formParam.leveThreeValue = state.formParam.leveThreeArray.map(item => item.label).join(','); state.formParam.leveThreeValue = state.formParam.leveThreeArray.map(item => item.label).join(',')||null;
state.formParam.orglistName = state.formParam.affiliationOrgList?.map(item=>item.id).join(',') state.formParam.orglistName = state.formParam.affiliationOrgList?.map(item=>item.id).join(',')
state.formParam.selectOrgList?.map(item=>{ state.formParam.selectOrgList?.map(item=>{
state.formParam.affiliationOrgList.some(item2=>{ state.formParam.affiliationOrgList.some(item2=>{
@@ -739,6 +760,7 @@ const getTableDate = (obj) => {
code: null, code: null,
isContains: '0', isContains: '0',
affiliationOrgList: [], affiliationOrgList: [],
locking: 1,
} }
} }
async function validateField(name) { async function validateField(name) {
@@ -786,6 +808,9 @@ const getTableDate = (obj) => {
} }
} }
} }
if(!state.formParam.leveTwoValue&&state.formParam.leveThreeValue&&state.formParam.isParent){
return message.error('请选择二级审批人')
}
state.formParam.remark = state.formParam?.remark?.trim() state.formParam.remark = state.formParam?.remark?.trim()
state.formParam.submitStatus = val state.formParam.submitStatus = val
dialog({ dialog({
@@ -859,6 +884,7 @@ const getTableDate = (obj) => {
searchReset, searchReset,
searchList, searchList,
deleteModal, deleteModal,
isEnablePost,
updateModal, updateModal,
cancelTeacherDialog, cancelTeacherDialog,
addTeacher, addTeacher,