讲师管理bug

This commit is contained in:
zhangsir
2024-11-13 16:41:26 +08:00
parent 5c76f6411f
commit 0c0dfff74b
10 changed files with 188 additions and 78 deletions

View File

@@ -74,7 +74,9 @@ export const getListByStatus = (obj) => http.get(`/admin/teacherExpense/getListB
//根据发生组织查询汇总的数据(一键确认弹框使用)
export const getListByAffiliation = (obj) => http.get(`/admin/teacherExpense/getListByAffiliation?ids=${obj.ids}&beginTime=${obj.beginTime}&endTime=${obj.endTime}&name=${obj.name}&`)
//确认/一键确认
export const teacherExpenseConfirm = (obj) => http.post('/admin/teacherExpense/confirm',obj)
export const teacherExpenseConfirm = (obj) => http.post('/admin/expenseBill/createSummary',obj)
//确认审批
export const submitApproval = (obj) => http.post('/admin/expenseBill/submitApproval',obj)
//提交/撤回
export const isConfirm = (obj) => http.post('/admin/expenseBill/isConfirm',obj)
//培训发生组织根节点列表

View File

@@ -1,6 +1,6 @@
<template>
<div class="CommonStudent">
<a-drawer :visible="visiable" class="drawerStyle ProjCheckship CommonStudent" placement="right" width="40%">
<a-drawer destroyOnClose :visible="visiable" class="drawerStyle ProjCheckship CommonStudent" placement="right" width="40%">
<div class="drawerMain" id="ProjCheckship" style="">
<div class="header">
<div class="headerTitle">
@@ -217,7 +217,6 @@ const stuColumns = ref([
ellipsis: true,
},
]);
const auditTableRef = ref();
const screenHeight = ref(document.body.clientHeight);
const closeDrawer = () => {
@@ -282,8 +281,6 @@ watch(visiable, () => {
audienceName.value.keyword = "";
if (!visiable.value) {
auditTableRef.value && auditTableRef.value.clear();
auditTableRef.value && auditTableRef.value.reset({ keyword: "" });
stuTableRef.value && stuTableRef.value.clear();
stuTableRef.value && stuTableRef.value.reset({ keyword: "", departId: '' });
}

View File

@@ -81,7 +81,7 @@ const onSelectChange = (e, l) => {
selectedRowKeys.value = e
selectsData.value = l
}
const emit = defineEmits({})
const emit = defineEmits(['selectedRowKeys','update:visible'])
const addList = (item) => {
selectedRowKeys.value.push(item.id)
selectsData.value.push(item)

View File

@@ -136,16 +136,13 @@ const handleConfirm = () => {
}
numTime.value+=1
localStorage.setItem('numTime',numTime.value)
const ids = expenseList.value?.map(item=>item.id)
api.teacherExpenseConfirm(ids).then(res=>{
console.log(res,'resssss')
const obj = ids?.map(item=>{
return {
id: item,
status: 1
const ids = forData.value.flatMap(item => item.expenseList.map(item => item.id));
if(!ids.length){
return message.error('暂无可提交的数据')
}
})
api.isConfirm(obj).then(res=>{
api.teacherExpenseConfirm({ids:ids?.join(',')}).then(res=>{
console.log(res,'resssss')
api.submitApproval({ids:ids?.join(',')}).then(res=>{
console.log(res,'resssss')
message.success('提交成功')
close()
@@ -189,6 +186,13 @@ watch(()=>props.visible,(val)=>{
}
})
const removeId = (e,i) =>{
forData.value?.forEach(item=>{
item.expenseList?.some((i,l)=>{
if(i.id == e.id){
return item.expenseList.splice(l,1)
}
})
})
if(searchTrue.value){
searchList.value = searchList.value.filter(item=>item.id !== e.id)
expenseList.value = expenseList.value.filter(item=>item.id !== e.id)
@@ -209,6 +213,9 @@ const searchData = (val) => {
const filteredList = expenseList.value.filter(item => {
const isNameMatch = (item.name + item.userNo).includes(nameUserNo.value);
const teachingDateTimestamp = new Date(item.teachingDate).getTime();
if(dateValue.value==null){
return isNameMatch
}
const startDateTimestamp = new Date(dateValue.value[0]).getTime();
const endDateTimestamp = new Date(dateValue.value[1]).getTime();
const isDateInRange = teachingDateTimestamp >= startDateTimestamp && teachingDateTimestamp <= endDateTimestamp;
@@ -221,7 +228,7 @@ const resetData = () => {
dateValue.value = null
searchData(false)
}
const emit = defineEmits({})
const emit = defineEmits(['update:visible'])
const columns = [
{
title: '讲师名称',
@@ -340,15 +347,14 @@ const columns = [
]
const closeDrawer = () => emit("update:visible", false);
const qureyDrawer = () => {
if(!expenseList.value.length){
const ids = forData.value.flatMap(item => item.expenseList.map(item => item.id));
if(!ids.length){
return message.error('暂无可提交的数据')
return
}
dialog({
content: '是否确认讲师费信息无误?提交后按“培训发生组织”汇总至审批中心,等待验证后“提交”进入审批流程。',
ok: () => {
const ids = expenseList.value.map(item=>item.id)
api.teacherExpenseConfirm(ids).then(res=>{
api.teacherExpenseConfirm({ids:ids?.join(',')}).then(res=>{
console.log(res,'resssss')
message.success('提交成功')
closeDrawer()

View File

@@ -89,12 +89,12 @@
<a-space>
<a-button type="link" @click="() => handleLook(record, String(record.courseform))">查看</a-button>
<a-button v-if="record.isPermission" type="link" @click="() => handleModify(record, String(record.courseform))">编辑</a-button>
<a-button v-if="record.status == '1'&&record.isPermission" type="link"
<a-button v-if="record.isPermission==='true'" type="link" @click="() => handleModify(record, String(record.courseform))">编辑</a-button>
<a-button v-if="record.status == '1'&&record.isPermission==='true'" type="link"
@click="() => handleOperate(record, String(record.courseform))">停用</a-button>
<a-button v-if="record.status == '2'&&record.isPermission" type="link"
<a-button v-if="record.status == '2'&&record.isPermission==='true'" type="link"
@click="() => handleOperate(record, String(record.courseform))">启用</a-button>
<a-button v-if="record.isSuperPermission" type="link" @click="() => deleteModal(record, String(record.courseform))">删除</a-button>
<a-button v-if="record.isSuperPermission==='true'" type="link" @click="() => deleteModal(record, String(record.courseform))">删除</a-button>
<!-- <a-button type="link" @click="() => deleteModal(record, String(record.courseform))"
 v-if="lecturerAdmin('Lecturer-admin')">删除</a-button> -->
</a-space>

View File

@@ -331,7 +331,7 @@ export default {
const getTableList = () => {
state.loading = true
queryExpnseByBillId({
id: state.paramsId,
billld: state.paramsId,
pageNo: state.params.pageNo,
pageSize: state.params.pageSize,
name: state.params.userNoName,
@@ -387,6 +387,7 @@ export default {
CreateSummaryAgain().then(res=>{
search();
}).catch(err=>{
message.destroy()
message.error(err.data.msg)
})
}

View File

@@ -94,8 +94,8 @@
<a-button type="link" @click="() => handleLook(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="submit(record)">提交</a-button>
<a-button type="link" @click="withdraw(record)">撤回</a-button>
<a-button v-if="record.status == 1" type="link" @click="submit(record)">提交</a-button>
<a-button v-if="record.status == 2" type="link" @click="withdraw(record)">撤回</a-button>
</a-space>
</template>
</template>
@@ -130,7 +130,7 @@
<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?.summaryTotal}}</a-descriptions-item>
<a-descriptions-item label="状态">{{{0:'待确认' ,1:'待提交' ,2:'审核中', 3:'审核通过', 4:'审核拒绝'}[formParam?.status]}}</a-descriptions-item>
<a-descriptions-item label="状态">{{{0:'待确认' ,1:'待提交' ,2:'审核中', 3:'审核通过', 4:'拒绝',5:'撤回'}[formParam?.status]}}</a-descriptions-item>
</a-descriptions>
<!-- <span>审批详情</span> -->
<span class="line" style="margin-top:12px;"></span>
@@ -463,6 +463,8 @@
return "审核通过"
case 4:
return "审核拒绝"
case 5:
return "撤回"
default:
return "-"
}
@@ -612,10 +614,16 @@
ok: () => {
isConfirm({
id: record.id,
status: 1
status: 2
}).then(res=>{
if(res.data.code == 200){
message.success('提交成功')
getTableDate();
}
}).catch(err=>{
message.destroy()
message.error(err.data.msg)
})
}
})
@@ -627,10 +635,16 @@
ok: () => {
isConfirm({
id: record.id,
status: 0
status: 1
}).then(res=>{
if(res.data.code == 200){
message.success('撤回成功')
getTableDate();
}
}).catch(err=>{
message.destroy()
message.error(err.data.msg)
})
}
})
@@ -670,7 +684,7 @@
const tableDataExamine = ref([])
const gettableDataExamine = () => {
queryExpnseByBillId({
id : state.id,
billld : state.id,
pageNo: state.tableDataParams.pageNo,
pageSize: state.tableDataParams.pageSize,
name: state.userNoOrName,

View File

@@ -17,8 +17,8 @@
</div>
</a-form-item>
<a-form-item class="select">
<a-select style="width: 235px ;margin-bottom:20px" v-model:value="searchParam.trainOrgId" placeholder="请输入培训发生组织进行搜索" allowClear
:options="orgList" showSearch
<a-select style="width: 235px ;margin-bottom:20px" v-model:value="searchParam.trainOrgId" placeholder="请选择培训发生组织" allowClear
:options="orgList"
v-on:keydown.enter="enterPressHadlerSearch">
</a-select>
</a-form-item>
@@ -118,7 +118,7 @@
<a-space >
<a-button type="link" @click="() => handleLook(record, String(record.courseform))">查看</a-button>
<!-- :disabled="record.createFrom==1 ?false :true" -->
<a-button type="link" @click="() => handleModify(record, String(record.courseform))">编辑</a-button>
<a-button type="link" :disabled="record.createFrom==1 ?false :true" @click="() => handleModify(record, String(record.courseform))">编辑</a-button>
<!-- <a-button :disabled="record.status==='A20' || record.status==='A30'||record.status==='S20' ?true :false" type="link" @click="() => handleOperate(record, String(record.courseform))">提交</a-button>
<a-button :disabled="record.status==='A10' && record.status!=='A20' || record.status==='A30'||record.status==='S20' ||record.status==='E10' ?true :false" type="link" @click="() => handleOperate(record, String(record.courseform))">撤回</a-button> -->
<!-- <a-button type="link" @click="() => deleteModal(record, String(record.courseform))">删除</a-button> -->
@@ -162,7 +162,7 @@
<a-row :gutter="16">
<a-col :span="12">
<a-form-item label="讲师名称" name="name">
<SearchTeacher @tlevel="tlevelChange" v-model:id="formParam.teacherId" v-model:value="formParam.name" v-model:orgId="formParam.orgId" v-model:lable="formParam.orgNames" v-model:user="formParam.userNo"
<SearchTeacher :disabled="!!id" @tlevel="tlevelChange" v-model:id="formParam.teacherId" v-model:value="formParam.name" v-model:orgId="formParam.orgId" v-model:lable="formParam.orgNames" v-model:user="formParam.userNo"
v-model:system="tSystemNames" v-model:payrollPlaceCode="formParam.payrollPlaceId"
v-model:payrollPlaceName="formParam.payrollPlace" v-model:level="formParam.tlevelId" ></SearchTeacher>
</a-form-item>
@@ -361,30 +361,45 @@
</div>
<!-- <div> <Upload/> </div> -->
<a-drawer v-model:visible="teachingdialog" placement="right"
@closa="cancelTeachingDialog" :maskClosable="true" width="60%" title="查看讲师费用">
<span class="line"></span>
<span>讲师费用详情</span>
<a-descriptions style="padding-bottom: 35px;" bordered :column="2" :contentStyle="rowCenter" :labelStyle="{width:'160px'}">
:closable="false" width="60%" :title="false">
<div class="headers">
<div class="headerTitle">查看讲师费用</div>
<img
style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png"
@click="cancelTeachingDialog(false)"
/>
</div>
<span class="line"></span>
<span>讲师费用详情</span>
<a-descriptions style="padding-bottom: 35px;margin-top:20px;" bordered :column="2" :contentStyle="{width:'300px',}" :labelStyle="{width:'160px'}">
<a-descriptions-item label="讲师名称">{{formParam.name}}</a-descriptions-item>
<a-descriptions-item label="讲师工号">{{formParam.userNo}}</a-descriptions-item>
<a-descriptions-item label="讲师组织" :span="2">{{formParam.orgName}}</a-descriptions-item>
<a-descriptions-item label="讲师体系">{{formParam.tsystemName}}</a-descriptions-item>
<a-descriptions-item label="讲师级别">{{formParam.tlevelName }}</a-descriptions-item>
<a-descriptions-item label="发薪地">{{formParam?.payrollPlace || '-'}}</a-descriptions-item>
<a-descriptions-item label="费用类型">{{{1:'在线',2:'面授',3:'课程'}[formParam?.courseType]}}</a-descriptions-item>
<a-descriptions-item label="讲师组织">{{formParam.orgName}}</a-descriptions-item>
<a-descriptions-item label="讲师发薪地">{{formParam?.payrollPlace || '-'}}</a-descriptions-item>
<a-descriptions-item label="费用类型">{{{1:'面授',2:'课程开发',3:'作业员入模培训',4:'其他'}[formParam?.courseType]}}</a-descriptions-item>
<a-descriptions-item label="课程类型">{{formParam.courseType==1?'项目开课' :formParam.courseType==2 ?'路径开课':formParam.courseType==3 ?'面授开课':'-'}}</a-descriptions-item>
<a-descriptions-item label="课程名称">{{formParam.courseName || '-'}}</a-descriptions-item>
<a-descriptions-item label="授课时长 ">{{formParam.teachingTime || '-'}}</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.score || '-'}}</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.payableExpense || '-'}}</a-descriptions-item>
<a-descriptions-item label="费用发放时间">{{formParam.payableExpenseTime || '-'}}</a-descriptions-item>
<!-- <a-descriptions-item label="费用发放时间">{{formParam.payableExpenseTime || '-'}}</a-descriptions-item> -->
<a-descriptions-item label="状态">{{formParam.status=="0"?'待确认' :formParam.status=="1"?'待提交':formParam.status== "2" ?'审核中':formParam.status== "3"?'审核通过':'-'}}</a-descriptions-item>
<a-descriptions-item label="备注 ">{{formParam.remark || '-'}}</a-descriptions-item>
</a-descriptions>
<div style="margin-bottom: 20px;">
<span class="line"></span>
<span>讲师费审批</span>
</div>
<div style="margin-bottom:32px;">
<a-table :columns="columnSee" :data-source="tableDataSee" :pagination="false" />
</div>
<span class="line"></span>
<div :style="{
position: 'absolute',
@@ -397,8 +412,8 @@
textAlign: 'right',
zIndex: 1,
}">
<a-button class="drabtn" @click="cancelTeachingDialog">取消</a-button>
<a-button class="drabtn" type="primary" @click="cancelTeachingDialog" :loading="buttonLoading">返回
<a-button class="drabtn" type="primary" @click="cancelTeachingDialog(true)">提交</a-button>
<a-button class="drabtn" @click="cancelTeachingDialog(false)" :loading="buttonLoading">取消
</a-button>
</div>
</a-drawer>
@@ -407,7 +422,7 @@
<!-- 一键确认讲师费 -->
<ConfirmLecturer :ids="selectsIds" v-model:visible="visibleConfirm" :name="'确认讲师费'" />
<!-- 批量确认讲师费 -->
<BatchLecturer @selectedRowKeys="selectedRowKeys" v-model:visible="allFeedialog" :name="'批量审批'" />
<BatchLecturer @selectedRowKeys="selectedRowKey" v-model:visible="allFeedialog" :name="'批量审批'" />
</template>
<script lang="jsx">
import { reactive, toRefs, ref ,watch,onMounted} from "vue";
@@ -423,13 +438,14 @@
import ImportWork from "../../components/project/ImportWork.vue";
import SearchTeacher from "@/components/project/SearchTeacher";
import {getTeacherFeeList,getTeacherFeeDetail,addTeacherFee ,getListByIds,updateTeacherFee,updateStatusSubmit,approveTeacherFee,getTeacherLevel,deleteInTeacher,confirm} from "../../api/lecturerFeeManagement";
import {getTeacherSystemList, getLevel,getPayRollPlace,fileUp } from "../../api/Lecturer";
import {getTeacherSystemList, getLevel,getPayRollPlace,fileUp,teacherExpenseConfirm } from "../../api/Lecturer";
// lecturerFeeManagement
// import {getProjSt} from "../../api/indexProjStu";
// import AddTeacher from "../../components/drawers/project/AddTeacher"
import ConfirmLecturer from "@/components/project/ConfirmLecturer"
import BatchLecturer from "@/components/project/BatchLecturer"
import { queryTrainOrg,} from "../../api/organization";
import dialog from '@/utils/dialog'
export default {
name: "LecturerFee",
components: {
@@ -446,6 +462,7 @@
setup() {
const formRef = ref();
const state = reactive({
tableDataSee: [],
orgList: [],
selectsIds: '',
visibleConfirm: false,
@@ -540,9 +557,9 @@
// { value: '0', label: "在线" },
// { value: '1', label: "面授 " },
// { value: '2', label: "授课 " },
{ value: '0', label: "课程开发" },
{ value: '1', label: "作业员入模培训" },
{ value: '2', label: "其他" },
{ value: '2', label: "课程开发" },
{ value: '3', label: "作业员入模培训" },
{ value: '4', label: "其他" },
])
//课程类型
const OnTheJobStatusList = ref([
@@ -648,6 +665,36 @@ console.log( "讲师体系id" +val);
state.searchParam.status=null
}
}
const columnSee = ref([
{
title: '审批人 ',
dataIndex: 'name',
key: 'name',
elipsis: true,
align: "center",
},
{
title: '审批状态 ',
dataIndex: 'name',
key: 'name',
elipsis: true,
align: "center",
},
{
title: '审批时间 ',
dataIndex: 'name',
key: 'name',
elipsis: true,
align: "center",
},
{
title: '备注 ',
dataIndex: 'name',
key: 'name',
elipsis: true,
align: "center",
},
])
const columns = ref([
{
title: '讲师姓名 ',
@@ -940,7 +987,10 @@ console.log( "讲师体系id" +val);
state.teacherdialog = false;
cancel()
getTableDate();
});
}).catch(err=>{
message.destroy()
message.error(err.data.msg)
})
}
else {
addTeacherFee(state.formParam)
@@ -949,9 +999,10 @@ console.log( "讲师体系id" +val);
state.teacherdialog = false;
cancel()
getTableDate();
}).catch((err) => {
console.log(err);
});
}).catch(err=>{
message.destroy()
message.error(err.data.msg)
})
}
};
//删除弹窗
@@ -1037,6 +1088,7 @@ console.log( "讲师体系id" +val);
expense:null,
remark:null,
}
state.id = null
state.teachingDate=null
state.tSystemNames = {
systemName:null,
@@ -1119,8 +1171,28 @@ console.log( "讲师体系id" +val);
} ,
])
//取消按钮 清空输入的数据
const cancelTeachingDialog = () => {
const cancelTeachingDialog = (val) => {
if(val){
dialog({
content: '是否确认讲师费信息无误?提交后按“培训发生组织”汇总至审批中心,等待验证后“提交”进入审批流程。',
ok: () => {
teacherExpenseConfirm({ids:state.formParam.id}).then(res=>{
console.log(res,'resssss')
if(res.data.code == 200){
message.success('提交成功')
state.teachingdialog = false
searchSubmit()
}
}).catch(err=>{
message.destroy()
message.error(err.data.msg)
state.teachingdialog = false
})
}
})
}else{
state.teachingdialog = false
}
};
const clearNonNumber = () => {
state.formParam.teachingTime = state.formParam.teachingTime.replace(/\D/g, '');
@@ -1160,7 +1232,7 @@ console.log( "讲师体系id" +val);
const allFee=()=>{
state.allFeedialog=true
}
const selectedRowKeys = (val) => {
const selectedRowKey = (val) => {
state.selectsIds = val?.join(',');
state.visibleConfirm = true;
}
@@ -1423,6 +1495,7 @@ const column = ref([
searchSubmit,
searchReset,
columns,
columnSee,
columnsFeeDetail,
tableData,
changePagination,
@@ -1443,7 +1516,7 @@ const column = ref([
changetlevel,
canceleditTeacherDialog,
allFee,
selectedRowKeys,
selectedRowKey,
column,
tableDatas,
tlevelChange,
@@ -1459,7 +1532,24 @@ const column = ref([
.select .ant-picker {
width: 410px !important;
}
.headers {
height: 73px;
border-bottom: 1px solid #e8e8e8;
display: flex;
justify-content: space-between;
align-items: center;
// background-color: red;
margin-bottom: 20px;
flex-shrink: 0;
.headerTitle {
font-size: 18px;
font-weight: 600;
color: #333333;
line-height: 25px;
// margin-left: 24px;
}
}
.addTimeBox {
position: relative;
display: flex;

View File

@@ -20,11 +20,11 @@
v-on:keydown.enter="enterPressHadlerSearch">
</a-input>
</a-form-item>
<a-form-item class="select">
<!-- <a-form-item class="select">
<a-select style="width: 230px" v-model:value="searchParam.payrollPlaceId" placeholder="发薪地"
:options="PlaceOfPayList" allowClear showSearch
v-on:keydown.enter="enterPressHadlerSearch"/>
</a-form-item>
</a-form-item> -->
<a-form-item class="select " >
<!-- <a-tree-select style="width: 230px"
:fieldNames="{

View File

@@ -328,7 +328,7 @@ export default{
width: 200,
},
{
title: '是否为根节点',
title: '根节点名称',
dataIndex: 'isParent',
key: 'isParent',
ellipsis: true, align: "center",
@@ -370,13 +370,13 @@ export default{
}
},
},
{
title: '备注 ',
dataIndex: 'remark',
key: 'remark',
ellipsis: true, align: "center",
width: 160,
},
// {
// title: '备注 ',
// dataIndex: 'remark',
// key: 'remark',
// ellipsis: true, align: "center",
// width: 160,
// },
{
title: '操作 ',
dataIndex: 'operation',