mirror of
https://codeup.aliyun.com/67762337eccfc218f6110e0e/vue/fe-manage.git
synced 2025-12-15 13:56:45 +08:00
暂时提交
This commit is contained in:
@@ -60,4 +60,8 @@ export const getAffiliationCode = () => http.get('/admin/affiliation/getAffiliat
|
|||||||
//查看或编辑回显培训发生组织
|
//查看或编辑回显培训发生组织
|
||||||
export const getAffiliationById = (id) => http.get(`/admin/affiliation/queryById?id=${id}`)
|
export const getAffiliationById = (id) => http.get(`/admin/affiliation/queryById?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 expenseSummaryById = (obj) => http.get( `/admin/expenseSummary/queryById?id=${obj.id}&name=${obj.name}&trainOrgId=${obj.trainOrgId}`)
|
||||||
|
//查看月度讲师费详情
|
||||||
|
export const queryDetailId = (obj) => http.get(`/admin/expenseSummary/queryDetailId?summaryId=${obj.summaryId}&name=${obj.name}`)
|
||||||
307
src/components/project/ConfirmLecturer.vue
Normal file
307
src/components/project/ConfirmLecturer.vue
Normal file
@@ -0,0 +1,307 @@
|
|||||||
|
<template>
|
||||||
|
<a-drawer
|
||||||
|
:visible="visible"
|
||||||
|
class="drawerStyle RouterFaceStu"
|
||||||
|
placement="right"
|
||||||
|
width="1200"
|
||||||
|
>
|
||||||
|
<div class="drawerMain">
|
||||||
|
<div class="header">
|
||||||
|
<div class="headerTitle">{{ name }}</div>
|
||||||
|
<img
|
||||||
|
style="width: 29px; height: 29px; cursor: pointer"
|
||||||
|
src="@/assets/images/basicinfo/close.png"
|
||||||
|
@click="closeDrawer"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div class="content">
|
||||||
|
<div class="head">
|
||||||
|
<div class="list" :class="item.id==indexList?'active':''" @click="clickItem(item,index)" v-for="(item,index) in forData">
|
||||||
|
<div class="left">
|
||||||
|
<div>培训发生组织</div>
|
||||||
|
<div class="text">汇总金额</div>
|
||||||
|
</div>
|
||||||
|
<div class="right">
|
||||||
|
<div>{{item.name}}</div>
|
||||||
|
<div class="text">{{item.name}}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="box">
|
||||||
|
<div class="top">
|
||||||
|
<div class="item">
|
||||||
|
<a-input style="border-radius: 8px;width:240px;" v-model:value="search" placeholder="请输入工号/讲师名称进行搜索" allowClear />
|
||||||
|
</div>
|
||||||
|
<div class="item">
|
||||||
|
<a-range-picker style="border-radius: 8px;width:360px;" v-model:value="value1" />
|
||||||
|
</div>
|
||||||
|
<div class="item">
|
||||||
|
<a-button type="primary" style="margin-right:20px;border-radius:8px">搜索</a-button>
|
||||||
|
<a-button type="primary" style="border-radius:8px">重置</a-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="table">
|
||||||
|
<a-table
|
||||||
|
:columns="columns"
|
||||||
|
:data-source="tableData"
|
||||||
|
:pagination="false"
|
||||||
|
:scroll="{ x: 'max-content' }"
|
||||||
|
>
|
||||||
|
<template #action="{ text, record }">
|
||||||
|
<div class="action">
|
||||||
|
<div class="btn">移除</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</a-table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="btnn">
|
||||||
|
<button class="btn1" @click="closeDrawer">取消</button>
|
||||||
|
<button class="btn2" @click="closeDrawer">确定</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</a-drawer>
|
||||||
|
</template>
|
||||||
|
<script setup lang="jsx">
|
||||||
|
import {computed, defineEmits,defineProps, ref, watch} from "vue";
|
||||||
|
const props = defineProps({
|
||||||
|
visible: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
name:{
|
||||||
|
type: String,
|
||||||
|
default: ""
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const forData = ref([
|
||||||
|
{name:'a',id:1},
|
||||||
|
{name:'b',id:2},
|
||||||
|
{name:'c',id:3},
|
||||||
|
{name:'c',id:3},
|
||||||
|
{name:'c',id:3},
|
||||||
|
{name:'c',id:3},
|
||||||
|
])
|
||||||
|
const indexList = ref(1)
|
||||||
|
const clickItem = (item,i) => {
|
||||||
|
console.log(item,i,'iiiii')
|
||||||
|
indexList.value = i+1
|
||||||
|
}
|
||||||
|
const emit = defineEmits({})
|
||||||
|
const columns = [
|
||||||
|
{
|
||||||
|
title: '讲师名称',
|
||||||
|
dataIndex: 'name',
|
||||||
|
key: 'name',
|
||||||
|
align: 'center',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '讲师工号',
|
||||||
|
dataIndex: 'name',
|
||||||
|
key: 'name',
|
||||||
|
align: 'center',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '所属组织',
|
||||||
|
dataIndex: 'name',
|
||||||
|
key: 'name',
|
||||||
|
align: 'center',
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
title: '讲师体系',
|
||||||
|
dataIndex: 'name',
|
||||||
|
key: 'name',
|
||||||
|
align: 'center',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '讲师等级',
|
||||||
|
dataIndex: 'name',
|
||||||
|
key: 'name',
|
||||||
|
align: 'center',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '发薪地',
|
||||||
|
dataIndex: 'name',
|
||||||
|
key: 'name',
|
||||||
|
align: 'center',
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
title: '课程类型',
|
||||||
|
dataIndex: 'name',
|
||||||
|
key: 'name',
|
||||||
|
align: 'center',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '课程名称',
|
||||||
|
dataIndex: 'name',
|
||||||
|
key: 'name',
|
||||||
|
align: 'center',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '授课/开发课程日期',
|
||||||
|
dataIndex: 'name',
|
||||||
|
key: 'name',
|
||||||
|
align: 'center',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '授课/开发课程时长',
|
||||||
|
dataIndex: 'name',
|
||||||
|
key: 'name',
|
||||||
|
align: 'center',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '参训人数',
|
||||||
|
dataIndex: 'name',
|
||||||
|
key: 'name',
|
||||||
|
align: 'center',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '评分',
|
||||||
|
dataIndex: 'name',
|
||||||
|
key: 'name',
|
||||||
|
align: 'center',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '课酬基准',
|
||||||
|
dataIndex: 'name',
|
||||||
|
key: 'name',
|
||||||
|
align: 'center',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '计划费用',
|
||||||
|
dataIndex: 'name',
|
||||||
|
key: 'name',
|
||||||
|
align: 'center',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '应发费用',
|
||||||
|
dataIndex: 'name',
|
||||||
|
key: 'name',
|
||||||
|
align: 'center',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '操作',
|
||||||
|
align: 'center',
|
||||||
|
fixed: 'right',
|
||||||
|
scopedSlots: { customRender: "action" },
|
||||||
|
},
|
||||||
|
]
|
||||||
|
const closeDrawer = () => emit("update:visible", false);
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
|
||||||
|
|
||||||
|
.RouterFaceStu {
|
||||||
|
.drawerMain {
|
||||||
|
min-width: 600px;
|
||||||
|
margin: 0px 32px 0px 32px;
|
||||||
|
overflow-x: auto;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
|
||||||
|
.header {
|
||||||
|
height: 73px;
|
||||||
|
border-bottom: 1px solid #e8e8e8;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
// background-color: red;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
|
||||||
|
.headerTitle {
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: #333333;
|
||||||
|
line-height: 25px;
|
||||||
|
// margin-left: 24px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.content{
|
||||||
|
margin: 0 20px;
|
||||||
|
.head{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
overflow-x: auto;
|
||||||
|
.list{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
background-color: #666;
|
||||||
|
min-width: 260px;
|
||||||
|
padding: 20px 10px;
|
||||||
|
color: #ffffff;
|
||||||
|
border-radius:6px;
|
||||||
|
margin-right: 20px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
.left{
|
||||||
|
width: 35%;
|
||||||
|
text-align:right;
|
||||||
|
margin-right:30px;
|
||||||
|
.text{
|
||||||
|
margin-top:20px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.right{
|
||||||
|
.text{
|
||||||
|
margin-top:20px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.active{
|
||||||
|
background-color: #f5f5f5;
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.box{
|
||||||
|
.top{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
margin-top: 10px;
|
||||||
|
.item{
|
||||||
|
margin-right: 20px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.btnn {
|
||||||
|
height: 72px;
|
||||||
|
width: 100%;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.16);
|
||||||
|
background-color: #fff;
|
||||||
|
|
||||||
|
.btn1 {
|
||||||
|
width: 100px;
|
||||||
|
height: 40px;
|
||||||
|
border: 1px solid #4ea6ff;
|
||||||
|
border-radius: 8px;
|
||||||
|
color: #4ea6ff;
|
||||||
|
background-color: #fff;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn2 {
|
||||||
|
cursor: pointer;
|
||||||
|
width: 100px;
|
||||||
|
height: 40px;
|
||||||
|
background: #4ea6ff;
|
||||||
|
border-radius: 8px;
|
||||||
|
border: 0;
|
||||||
|
margin-left: 15px;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -144,7 +144,7 @@
|
|||||||
<a-row :gutter="16">
|
<a-row :gutter="16">
|
||||||
<a-col :span="24">
|
<a-col :span="24">
|
||||||
<a-form-item label="讲师名称" name="name">
|
<a-form-item label="讲师名称" name="name">
|
||||||
<SearchTeacher v-model:value="formParam.name" v-model:lable="formParam.orgName" v-model:orgId="formParam.orgId" v-model:id="formParam.userid"
|
<SearchTeacher v-model:value="formParam.name" v-model:lable="formParam.orgName" v-model:orgId="formParam.orgId" v-model:id="formParam.id"
|
||||||
v-model:system="tSystemNames" v-model:level="formParam.tLevelId"></SearchTeacher>
|
v-model:system="tSystemNames" v-model:level="formParam.tLevelId"></SearchTeacher>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-col>
|
</a-col>
|
||||||
|
|||||||
@@ -432,7 +432,7 @@
|
|||||||
</a-drawer>
|
</a-drawer>
|
||||||
<ImportWork v-model:showWork="showWork" :url="'/admin/export/exportTeacherExpense'" :title="title"></ImportWork>
|
<ImportWork v-model:showWork="showWork" :url="'/admin/export/exportTeacherExpense'" :title="title"></ImportWork>
|
||||||
</div>
|
</div>
|
||||||
|
<ConfirmLecturer v-model:visible="visibleConfirm" :name="'确认讲师费'" />
|
||||||
</template>
|
</template>
|
||||||
<script lang="jsx">
|
<script lang="jsx">
|
||||||
import { reactive, toRefs, ref ,watch} from "vue";
|
import { reactive, toRefs, ref ,watch} from "vue";
|
||||||
@@ -452,6 +452,7 @@
|
|||||||
// lecturerFeeManagement
|
// lecturerFeeManagement
|
||||||
// import {getProjSt} from "../../api/indexProjStu";
|
// import {getProjSt} from "../../api/indexProjStu";
|
||||||
// import AddTeacher from "../../components/drawers/project/AddTeacher"
|
// import AddTeacher from "../../components/drawers/project/AddTeacher"
|
||||||
|
import ConfirmLecturer from "@/components/project/ConfirmLecturer"
|
||||||
export default {
|
export default {
|
||||||
name: "LecturerFee",
|
name: "LecturerFee",
|
||||||
components: {
|
components: {
|
||||||
@@ -462,10 +463,12 @@
|
|||||||
FolderAddOutlined,//图标--新增
|
FolderAddOutlined,//图标--新增
|
||||||
SearchTeacher,
|
SearchTeacher,
|
||||||
ImportWork,
|
ImportWork,
|
||||||
|
ConfirmLecturer,
|
||||||
},
|
},
|
||||||
setup() {
|
setup() {
|
||||||
const formRef = ref();
|
const formRef = ref();
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
|
visibleConfirm: false,
|
||||||
title:'导入讲师费记录',
|
title:'导入讲师费记录',
|
||||||
allFeedialog:false,
|
allFeedialog:false,
|
||||||
tableLoadings:false,
|
tableLoadings:false,
|
||||||
@@ -876,23 +879,9 @@ console.log( "讲师体系id" +val);
|
|||||||
state.vf = false
|
state.vf = false
|
||||||
TeacherSystem()
|
TeacherSystem()
|
||||||
}
|
}
|
||||||
//一键确认讲师费
|
//一键确认讲师费
|
||||||
const handleTeacher =()=>{
|
const handleTeacher =()=>{
|
||||||
let array = []
|
state.visibleConfirm = true
|
||||||
tableData.value.map((item)=>{
|
|
||||||
let arr = {
|
|
||||||
id:item.id
|
|
||||||
}
|
|
||||||
array.push(arr)
|
|
||||||
return array
|
|
||||||
})
|
|
||||||
confirm(array)
|
|
||||||
.then((res) => {
|
|
||||||
if(res.data.code == 200 ){
|
|
||||||
message.success("一键确认讲师费成功");
|
|
||||||
getTableDate();
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
async function validateField(name) {
|
async function validateField(name) {
|
||||||
return new Promise((resolve) => {
|
return new Promise((resolve) => {
|
||||||
|
|||||||
@@ -234,16 +234,16 @@ export default {
|
|||||||
const columns = ref([
|
const columns = ref([
|
||||||
{
|
{
|
||||||
title: '编号 ',
|
title: '编号 ',
|
||||||
dataIndex: 'teacherId',
|
dataIndex: 'trainOrgId',
|
||||||
key: 'billNo',
|
key: 'trainOrgId',
|
||||||
elipsis: true,
|
elipsis: true,
|
||||||
align: "center",
|
align: "center",
|
||||||
width:200,
|
width:200,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: '资源归属 ',
|
title: '资源归属 ',
|
||||||
dataIndex: 'resbgTxt',
|
dataIndex: 'trainOrgName',
|
||||||
key: 'resbgTxt',
|
key: 'trainOrgName',
|
||||||
elipsis: true,
|
elipsis: true,
|
||||||
align: "center",
|
align: "center",
|
||||||
width: 400,
|
width: 400,
|
||||||
@@ -266,8 +266,8 @@ export default {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: '汇总金额 ',
|
title: '汇总金额 ',
|
||||||
dataIndex: 'totalFee',
|
dataIndex: 'summaryTotal',
|
||||||
key: 'totalFee',
|
key: 'summaryTotal',
|
||||||
elipsis: true,
|
elipsis: true,
|
||||||
align: "center",
|
align: "center",
|
||||||
width: 200,
|
width: 200,
|
||||||
|
|||||||
@@ -135,6 +135,7 @@ import ProjectManager from "@/components/project/ProjectManagerNew";
|
|||||||
import {getTrainOrg} from "../../api/lecturerFeeManagement";
|
import {getTrainOrg} from "../../api/lecturerFeeManagement";
|
||||||
import { queryTeacherFeeTotalList, queryTeacherFeeMonthly, getTeacherFeeDetailListByTeacherNo, getTeacherFeeListByTeacherNo ,getPreviousTeacherfee} from "../../api/lecturerFeeStatistics";
|
import { queryTeacherFeeTotalList, queryTeacherFeeMonthly, getTeacherFeeDetailListByTeacherNo, getTeacherFeeListByTeacherNo ,getPreviousTeacherfee} from "../../api/lecturerFeeStatistics";
|
||||||
import {CostDetails} from "../lecturer/CostDetails.vue"
|
import {CostDetails} from "../lecturer/CostDetails.vue"
|
||||||
|
import * as api from '@/api/Lecturer'
|
||||||
export default {
|
export default {
|
||||||
name: "MonthlyStatistics",
|
name: "MonthlyStatistics",
|
||||||
components: {
|
components: {
|
||||||
@@ -167,6 +168,9 @@ export default {
|
|||||||
payrollPlaceId: null,
|
payrollPlaceId: null,
|
||||||
departId: null,
|
departId: null,
|
||||||
summaryDate:null,
|
summaryDate:null,
|
||||||
|
id: '5',
|
||||||
|
name: '李玉冰',
|
||||||
|
trainOrgId: '1820781519658237968',
|
||||||
},
|
},
|
||||||
teacherNo:null,
|
teacherNo:null,
|
||||||
drawer: {
|
drawer: {
|
||||||
@@ -304,9 +308,9 @@ export default {
|
|||||||
// List接口数据
|
// List接口数据
|
||||||
const getTableDate = (obj) => {
|
const getTableDate = (obj) => {
|
||||||
state.tableLoading = true
|
state.tableLoading = true
|
||||||
state.searchParam.summaryDate= state.id
|
api.expenseSummaryById(state.searchParam)
|
||||||
queryTeacherFeeMonthly(state.searchParam)
|
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
|
console.log(res,'resssss')
|
||||||
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
|
||||||
|
|||||||
Reference in New Issue
Block a user