Merge branch 'zcwy-teacher-manage' into master_1202

This commit is contained in:
joshen
2024-12-18 19:15:15 +08:00
14 changed files with 139 additions and 87 deletions

View File

@@ -17,7 +17,7 @@
</div>
<div class="content">
<div class="box">
<div style="margin-bottom: 20px;font-size: 18px;font-weight: 700;">选择讲师费汇总:<span style="color:red;margin-left:20px;">{{payableExpense.toFixed(2)||0}}</span></div>
<div style="margin-bottom: 20px;font-size: 18px;font-weight: 700;">选择讲师费汇总:<span style="color:red;margin-left:20px;">{{expense.toFixed(2)||0}}</span></div>
<div class="top">
<div class="item">
<a-input @pressEnter="searchData(true)" style="border-radius: 8px;width:240px;height: 40px;" v-model:value="nameUserNo" placeholder="请输入工号/讲师名称进行搜索" allowClear />
@@ -134,14 +134,14 @@ const addList = (item) => {
selectedRowKeys.value.push(item.id)
selectsData.value.push(item)
}
const payableExpense = ref(0)
const expense = ref(0)
watch(()=>selectsData.value.length,(val)=>{
if(val){
payableExpense.value = selectsData.value.reduce((a,b)=>{
return Number(a) + Number(b.payableExpense)
expense.value = selectsData.value.reduce((a,b)=>{
return Number(a) + Number(b.expense)
},0)
}else{
payableExpense.value = 0
expense.value = 0
}
})
const removeList = (item) => {

View File

@@ -1,7 +1,7 @@
<template>
<a-drawer :visible="visible" class="largeDrawerInside" placement="right" :closable="false" :maskClosable="false"
width="80%" :title="false">
<a-drawer :visible="visible" class="largeDrawerInside" placement="right" :closable="false"
width="80%" :title="false" @close="handleBack">
<!-- 外部讲师查看详情 -->
<div class="LookExternalLecturer">
<div class="header" style="margin-top: -24px;">

View File

@@ -1,6 +1,6 @@
<template>
<a-drawer class="largeDrawerInside" :visible="visible" placement="right" :closable="false" :maskClosable="false"
width="80%" :title="false">
<a-drawer class="largeDrawerInside" :visible="visible" placement="right" :closable="false"
width="80%" :title="false" @close="handleClose">
<!-- 内部讲师查看详情 -->
<div class="LookInsideLecturer">
<div class="header" style="margin-top: -24px;margin-left: -24px;">

View File

@@ -158,6 +158,7 @@ const handleChange = (e,l) => {
// systemName.value = l.systemName
levelName.value = l.levelName
teacherId.value = l.key
byUserId(teacherId.value)
orgId.value = l.orgId
payrollPlaceCode.value = l.payrollPlaceCode
payrollPlaceName.value = l.payrollPlaceName
@@ -166,7 +167,7 @@ const handleChange = (e,l) => {
neworgName.value= neworgName.value[ neworgName.value.length-1]
}
changeValue.value = l
emit('tlevel',l)
// emit('tlevel',l)
emit('tlevel',changeValue.value)
// selectData.value = teacherName.value
emit('update:value',selectData.value)
@@ -379,7 +380,7 @@ const notChange = () => {
payrollPlaceName.value = ''
}
const loadingChange = ref(false)
watch(()=>teacherId.value,(val)=>{
const byUserId = (val)=>{
if(val){
loadingChange.value = true
getSystemInfoByUserId(teacherId.value).then(res=>{
@@ -397,6 +398,7 @@ watch(()=>teacherId.value,(val)=>{
})
}
emit('update:system',systemName.value)
emit('byUserIdData',res.data?.data)
}
loadingChange.value = false
// emit('update:system',systemName.value)
@@ -405,7 +407,7 @@ watch(()=>teacherId.value,(val)=>{
loadingChange.value = false
})
}
})
}
const changeOut = () => {
if(!teacherName.value){
message.error('请选择讲师')

View File

@@ -7,6 +7,7 @@
class="drawerStyle impotergroupleader"
placement="right"
width="80%"
@close="closeDrawer"
>
<div class="drawerMain">
<div class="header">

View File

@@ -105,7 +105,7 @@
<template v-if="column.key === 'operation'">
<a-space>
<a-button type="link" @click="() => handleLook(record, String(record.courseform))">查看</a-button>
<a-button type="link" @click="() => handleModify(record, String(record.courseform))" v-if="record.createFrom == 1 && record.courseStatus == 0 ">编辑</a-button>
<a-button type="link" @click="() => handleModify(record, String(record.courseform))" v-if="record.createFrom == 1">编辑</a-button>
<a-button v-if="record.isSuperPermission==='true'" type="link" @click="() => deleteModal(record, String(record.courseform))">删除</a-button>
</a-space>
</template>
@@ -204,17 +204,14 @@
</a-input>
</a-form-item>
</a-col>
<a-col :span="12">
<!-- <a-col :span="12">
<a-form-item label="开课状态">
<a-radio-group v-model:value="formParam.courseStatus" class="draitem">
<a-radio :value="'0'">未开课</a-radio>
<a-radio :value="'1'">已开课</a-radio>
</a-radio-group>
</a-form-item>
</a-col>
</a-row>
<!-- 授课日期 teachingDate 授课时长defaultTeachingTime-->
<a-row :gutter="16">
</a-col> -->
<a-col :span="12">
<a-form-item name="teachingDate">
<template v-slot:label>
@@ -229,6 +226,10 @@
placeholder="请选择课程日期" />
</a-form-item>
</a-col>
</a-row>
<!-- 授课日期 teachingDate 授课时长defaultTeachingTime-->
<a-row :gutter="16">
<a-col :span="12">
<a-form-item name="teaching">
<template v-slot:label>
@@ -248,9 +249,6 @@
<span style="margin-left: 5px ;" v-if="formParam.teaching == null">0.00小时</span> -->
</a-form-item>
</a-col>
</a-row>
<!-- 参训人数 studys评分 score-->
<a-row :gutter="16">
<a-col :span="12">
<a-form-item name="studys">
<template v-slot:label>
@@ -266,6 +264,10 @@
</a-input>
</a-form-item>
</a-col>
</a-row>
<!-- 参训人数 studys评分 score-->
<a-row :gutter="16">
<a-col :span="12">
<a-form-item name="score">
<template v-slot:label>
@@ -312,7 +314,7 @@
</div>
</a-drawer>
<!-- 查看授课记录 -->
<a-drawer class="largeDrawerInside" v-model:visible="teachingdialog" placement="right" :maskClosable="false" :closable="false"
<a-drawer class="largeDrawerInside" v-model:visible="teachingdialog" placement="right" :maskClosable="true" :closable="false"
width="60%" :title="false">
<div style="padding:24px;">
<div class="headers" style="margin-top:-24px;">

View File

@@ -799,7 +799,7 @@ export default {
dataIndex: 'tsystemName',
key: 'tsystemName',
ellipsis: true, align: "center",
width: 120,
width: 200,
},
{
title: '级别 ',

View File

@@ -121,7 +121,7 @@
<a-space>
<a-button type="link" @click="() => handleLook(record, String(record.courseform))">查看</a-button>
<a-button type="link" @click="() => handleModify(record, String(record.courseform))"
v-if="record.createFrom == 1 && record.courseStatus == 0">编辑 </a-button>
v-if="record.createFrom == 1">编辑 </a-button>
<a-button type="link" v-if="record.createFrom == 1 && record.isSuperPermission === 'true'"
@click="() => deleteModal(record, String(record.courseform))">删除</a-button>
<!-- <a-button type="link" @click="() => deleteModal(record, String(record.courseform))">删除</a-button> -->
@@ -299,14 +299,14 @@
</a-row>
<!-- 授课时长 teaching 评分 score-->
<a-row :gutter="16">
<a-col :span="12">
<!-- <a-col :span="12">
<a-form-item label="开课状态">
<a-radio-group v-model:value="formParam.courseStatus" class="draitem">
<a-radio :value="'0'">未开课</a-radio>
<a-radio :value="'1'">已开课</a-radio>
</a-radio-group>
</a-form-item>
</a-col>
</a-col> -->
<a-col :span="12">
<a-form-item name="teaching">
<template v-slot:label>
@@ -325,10 +325,6 @@
<span style="margin-left: 5px ;" v-if="formParam.teaching == null">0.00小时</span> -->
</a-form-item>
</a-col>
</a-row>
<!-- 参训人数 studys-->
<a-row :gutter="16">
<a-col :span="12">
<a-form-item name="score">
<template v-slot:label>
@@ -345,6 +341,10 @@
style="width:100%; height: 40px; border-radius: 8px ; " placeholder="请输入评分" />
</a-form-item>
</a-col>
</a-row>
<!-- 参训人数 studys-->
<a-row :gutter="16">
<a-col :span="12">
<a-form-item name="studys">
<template v-slot:label>
@@ -389,7 +389,7 @@
</div>
</a-drawer>
<!--查看授课详情 -->
<a-drawer class="largeDrawerInside" v-model:visible="teachingdialog" :closable="false" placement="right" :maskClosable="false"
<a-drawer class="largeDrawerInside" v-model:visible="teachingdialog" :closable="false" placement="right" :maskClosable="true"
width="60%" :title="false">
<div style="padding:24px;">
<div class="headers" style="margin-top:-24px;">
@@ -756,7 +756,7 @@ export default {
dataIndex: 'tsystemName',
key: 'tsystemName',
ellipsis: true, align: "center",
width: 120,
width: 200,
},
{
title: '培训发生组织 ',
@@ -944,7 +944,7 @@ export default {
trainOrgId: [{ required: true, message: '', log: '培训发生组织不能为空' }],
teachingDate: [{ required: true, message: '', log: '授课日期不能为空' }],
teaching: [{ required: true, message: '', log: '授课时长不能为空' }],
courseStatus: [{ required: true, message: '', log: '开课状态不能为空' }],
// courseStatus: [{ required: true, message: '', log: '开课状态不能为空' }],
score: [{ required: true, message: '', log: '评分不能为空' }],
studys: [{ required: true, message: '', log: '参训人数不能为空' }],
}

View File

@@ -837,6 +837,7 @@ export default {
}).then(res=>{
message.success('移除成功')
search()
state.formData.summaryTotal = Number(state.formData.summaryTotal) - Number(record.expense)
}).catch(err=>{
message.error(err.msg)
})

View File

@@ -119,7 +119,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" v-if="record.status != 2&&record.status!=3" @click="() => handleModify(record, String(record.courseform))">编辑</a-button>
<a-button type="link" v-if="record.createFrom==1&&record.status != 2&&record.status!=3" @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 type="link" @click="handleOperate(record)">撤回</a-button> -->
<!-- <a-button type="link" @click="() => deleteModal(record, String(record.courseform))">删除</a-button> -->
@@ -180,7 +180,7 @@
/>
讲师名称
</template>
<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"
<SearchTeacher :disabled="!!id" @byUserIdData="byUserIdData" @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" ></SearchTeacher>
</a-form-item>
@@ -912,7 +912,7 @@ getAllLevelList().then((res) => {
dataIndex: 'trainOrgName',
key: 'trainOrgName',
ellipsis: true, align: "center",
width: 120,
width: 200,
},
{
@@ -1510,7 +1510,8 @@ getAllLevelList().then((res) => {
state.allFeedialog=true
}
const visibleAll = (val) => {
state.allFeedialog = val
state.allFeedialog = val
searchSubmit()
}
const selectedRowKey = (val) => {
state.selectsIds = val?.join(',');
@@ -1708,12 +1709,19 @@ const column = ref([
])
const tlevelChange = (e) => {
console.log(e,'eeeee')
state.formParam.tlevelName = e?.tlevelName
state.formParam.tlevelId = e?.tlevelId
// state.formParam.payrollPlace = e?.salaryName
// state.formParam.payrollPlaceId = e?.salaryId
state.formParam.levelPay = e?.levelPay
// state.formParam.levelPay = e?.levelPay
}
const byUserIdData = (e) => {
e?.levelVoList.some(item=>{
if(item.id == e?.levelId){
state.formParam.levelPay = item.levelPay
return true
}
})
}
//导出功能
const handleExport = ()=>{
@@ -1817,6 +1825,7 @@ const column = ref([
column,
tableDatas,
tlevelChange,
byUserIdData,
validateField,
clearstudysNumber,
clearscoreNumber,

View File

@@ -168,6 +168,7 @@
</div>
</a-modal>
</div>
<MonthlyStatistics v-model:visible="opendrawer" :id="drawerId" ></MonthlyStatistics>
</template>
<script lang="jsx">
import { reactive, toRefs, ref, watch } from "vue";
@@ -180,14 +181,18 @@ import { queryTeacherFeeMonthly, getTeacherFeeDetailListByTeacherNo, getTeacher
;
import {expenseSummaryList,getTrainOrg,CreateMonthSummary} from "../../api/lecturerFeeManagement";
import dialog from '@/utils/dialog'
import MonthlyStatistics from './MonthlyStatistics'
export default {
name: "LecturerFeeStatistics",
components: {
MonthlyStatistics,
},
setup() {
const store = useStore();
const router = useRouter();
const state = reactive({
opendrawer: false,
drawerId: '',
summaryDate: null,
resbgTxt: null,
tableDataTotal: -1,//table列表总条数,
@@ -235,7 +240,7 @@ export default {
key: 'trainOrgId',
ellipsis: true,
align: "center",
width:200,
width:'100px',
},
{
title: '资源归属 ',
@@ -243,7 +248,7 @@ export default {
key: 'trainOrgName',
ellipsis: true,
align: "center",
width: 200,
width: '200px',
},
{
title: '汇总周期 ',
@@ -251,7 +256,7 @@ export default {
key: 'summaryDate',
ellipsis: true,
align: "center",
width:200
width:'60px'
},
{
title: '汇总日期 ',
@@ -259,7 +264,7 @@ export default {
key: 'summaryTime',
ellipsis: true,
align: "center",
width: 200,
width: '88px',
},
{
title: '汇总金额 ',
@@ -267,16 +272,16 @@ export default {
key: 'summaryTotal',
ellipsis: true,
align: "center",
width: 200,
width: '60px',
},
{
title: '操作 ',
dataIndex: 'operation',
key: 'operation',
ellipsis: true,
align: "right",
align: "center",
fixed: "right",
width: 120,
width: '60px',
scopedSlots: { customRender: "action" },
},
])
@@ -424,9 +429,11 @@ export default {
}
//表格内查看数据操作
const handleLook = (record) => {
let id = record.id
const trainOrgId = record.trainOrgId
router.push({ path: '/MonthlyStatistics', query: { id,trainOrgId,name:'' } })
// let id = record.id
// const trainOrgId = record.trainOrgId
state.opendrawer = true
state.drawerId = record.id
// router.push({ path: '/MonthlyStatistics', query: { id,trainOrgId,name:'' } })
// state.teacherdialog = true;
// state.teacherdialogtitle = '讲师费月度统计详情'
// state.summaryDate = record.summaryDate;

View File

@@ -14,7 +14,7 @@
</div>
</template>
<script lang="jsx">
import { reactive, toRefs, ref, watch,onMounted } from "vue";
import { reactive, toRefs, ref, watch,onMounted,nextTick } from "vue";
import InsideLecturer from "../lecturer/InsideLecturer.vue"
import ExternalLecturer from "../lecturer/ExternalLecturer.vue"
import { useRoute } from 'vue-router'

View File

@@ -1,5 +1,7 @@
<!-- 讲师费月度统计详情页面 -->
<template>
<a-drawer :visible="visible" class="largeDrawerInside" placement="right" :closable="false"
width="80%" :title="false" @close="handleBack">
<div class="MonthlyStatistics">
<!-- 搜索框及按钮 -->
<!-- <a-layout-header style="background: white;color: black; font-size: 20px ;">
@@ -13,12 +15,11 @@
</a-layout-header> -->
<div class="header">
<div class="headerTitle">讲师费月度统计详情</div>
<router-link to="/LecturerFeeStatistics">
<img
style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png"
/>
</router-link>
<img
style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png"
@click="handleBack"
/>
</div>
<!-- <a-divider style="height: 1px; background-color: #b7b8b7 ;margin: 0;" /> -->
<div class="filter">
@@ -149,6 +150,7 @@
</div>
</a-drawer>
</div>
</a-drawer>
</template>
<script lang="jsx">
import { reactive, toRefs, ref, watch,computed } from "vue";
@@ -169,7 +171,17 @@ export default {
UploadOutlined,//图标--导出,
ProjectManager,CostDetails
},
setup() {
props:{
visible:{
type: Boolean,
default: false,
},
id:{
type: String,
default: ""
},
},
setup(props,emits) {
const router=useRouter();
const route = useRoute();
const { query: { id }} = useRoute();
@@ -197,7 +209,7 @@ export default {
payrollPlaceId: null,
departId: null,
summaryDate:null,
id: route.query.id,
id: props.id,
// trainOrgId: '',
},
name:null,
@@ -210,8 +222,25 @@ export default {
startTime: '',
}
})
watch(
)
const handleBack = () => {
emits.emit('update:visible',false)
}
watch(()=>props.visible,(val)=>{
if(val){
state.searchParam.id = props.id
getTableDate()
}else{
state.searchParam = {
pageNo: "1",
pageSize: "10",
name: '',
payrollPlaceId: null,
departId: null,
summaryDate:null,
id: null,
}
}
})
const endOrg = (val) => {
if(val){
const parts = val.split('/');
@@ -351,7 +380,6 @@ export default {
state.tableLoading = false
})
};
getTableDate()
//获取所属组织
const getOrganizationList = ref([
@@ -420,7 +448,7 @@ export default {
state.searchParam = {
pageNo: "1",
pageSize: "10",
id: route.query.id,
id: props.id,
name : '',
payrollPlaceId: null,
departId: '',
@@ -614,6 +642,7 @@ export default {
searchResetdrawer,
sysTypeOptions,
endOrg,
handleBack,
}
},
};

View File

@@ -31,7 +31,7 @@
</div>
</div>
<a-table style="border: 1px solid #f2f6fe" :columns="columns" :data-source="tableData" :loading="tableLoading"
@expand="expandTable" :pagination="false">
@expand="expandTable" :pagination="false">
<template #bodyCell="{ record, column }">
<template v-if="column.key === 'operation'">
<a-space >
@@ -391,41 +391,21 @@ export default{
key: 'affiliationCode',
ellipsis: true,
align: "center",
width: 200,
width: '100px',
},
{
title: '培训发生组织名称 ',
dataIndex: 'affiliationName',
key: 'affiliationName',
ellipsis: true, align: "center",
width: 200,
},
{
title: '是否为根节点名称',
dataIndex: 'parentName',
key: 'parentName',
align: "center",
width: 200,
customRender: ({text,record})=>{
return (
text ? <div>({text})</div> : <div>({{1:'一',2:'二',3:'三'}[record.code]}级审批)</div>
)
},
},
{
title: '担当',
dataIndex: 'leaderName',
key: 'leaderName',
ellipsis: true,
align: "center",
width: 200,
width: '200px',
},
{
title: '状态',
dataIndex: 'status',
key: 'status',
ellipsis: true, align: "center",
width: 160,
width: '100px',
customRender: ({text})=>{
switch (text) {
case '1':
@@ -443,6 +423,27 @@ export default{
}
},
},
{
title: '是否为根节点名称',
dataIndex: 'parentName',
key: 'parentName',
align: "center",
width: '200px',
customRender: ({text,record})=>{
return (
text ? <div>({text})</div> : <div>({{1:'一',2:'二',3:'三'}[record.code]}级审批)</div>
)
},
},
{
title: '担当',
dataIndex: 'leaderName',
key: 'leaderName',
ellipsis: true,
align: "center",
width: '200px',
},
// {
// title: '备注 ',
// dataIndex: 'remark',
@@ -454,7 +455,7 @@ export default{
title: '操作 ',
dataIndex: 'operation',
key: 'operation',
width: 200,
width: '120px',
align: "center",
fixed: 'right',
scopedSlots: { customRender: "action" },