讲师管理bug

This commit is contained in:
zhangsir
2024-11-26 19:21:13 +08:00
parent 67c904c693
commit 62688a0185
16 changed files with 100 additions and 55 deletions

View File

@@ -29,7 +29,7 @@ export const USER_LIST_PAGE = "/admin/thirdApi/user/list";
export const USER_LIST = "/admin/thirdApi/user/list";
export const ORG_LIST = "/admin/thirdApi/org/list";
export const ORG_CHILD_LIST = "/admin/thirdApi/org/info";
export const USER_LIST_NEW = '/xboe/teacher/name'
export const USER_LIST_NEW = '/admin/teacher/selectTeacher'
export const AUDIENCE_LIST = "/admin/thirdApi/audience/userAudiences";
export const USER_PERMISSION = "/admin/thirdApi/permission/listByUser";
export const VALIDATE_TOKEN = "/admin/thirdApi/validateToken";

View File

@@ -1,6 +1,7 @@
import http from "./config";
// 列表查看归属组织
export const queryTrainOrg = (obj) => http.get( '/admin/affiliation/list', {params: obj})
export const queryTrainOrgPor = (obj) => http.get( '/admin/affiliation/getAapprovallist', {params: obj})
//新增归属组织
export const addReviewer = (obj) => http.post('/admin/affiliation/addAffiliation', obj)
// 删除归属组织

View File

@@ -360,17 +360,18 @@ export function usePage(_url, params, init = true,listing = false) {
...params
});
watch(() => params.keyword, throttle(fetch, 600));
watch(() => params.name, throttle(fetch, 600));
watch(() => params.page, fetch);
function fetch() {
state.loading = true;
if (!params.keyword) {
if (!params.name) {
state.loading = false;
return;
}
return request(_url, params).then(r => {
state.data = params.pageNo === 1 ? r.data.list : [...state.data, ...r.data.list];
console.log(r,'rrrrrrrrrrrrrrrr')
state.data = params.pageNo === 1 ? r.data : [...state.data, ...r.data];
state.totalPage = r.data.total/10 || 1;
state.total = r.data.total;
state.loading = false;
@@ -497,7 +498,7 @@ export async function request(_url, params) {
}).then(res => {
return JSONBigIntStr.parse(res);
}).then(res => {
if (res.code === 0 || res.code === 200) {
if (res.code === 0 || res.code === 200 || res.status === 200) {
return res;
}
if (res.code === 4 ){

View File

@@ -134,7 +134,7 @@ const props = defineProps({
}
});
onMounted(()=>{
onlineLearningList()
// onlineLearningList()
})
const courseList = ref([])
const onlineLearningList = () =>{

View File

@@ -17,7 +17,7 @@
<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||0}}</span></div>
<div class="table">
<div class="table" style="padding-bottom:72px;">
<a-table
:columns="columns"
:data-source="tableData"
@@ -72,6 +72,9 @@ watch(()=>props.visible,(val)=>{
message.error(err.data.msg)
loading.value = false
})
}else{
selectedRowKeys.value = []
selectsData.value = []
}
})
const loading = ref(false)
@@ -90,7 +93,7 @@ const payableExpense = ref(0)
watch(()=>selectsData.value.length,(val)=>{
if(val){
payableExpense.value = selectsData.value.reduce((a,b)=>{
return a + b.payableExpense
return Number(a) + Number(b.payableExpense)
},0)
}else{
payableExpense.value = 0

View File

@@ -23,8 +23,8 @@
<div class="text">汇总金额</div>
</div>
<div class="right">
<div class="org" :title="item?.trainOrgName">{{item?.trainOrgName}}</div>
<div class="text org" :title="item?.summaryTotal">{{item?.summaryTotal}}</div>
<div class="org" :title="item?.trainOrgName">{{item?.trainOrgName||'-'}}</div>
<div class="text org" :title="item?.summaryTotal">{{item?.summaryTotal||'-'}}</div>
</div>
</div>
</div>
@@ -148,17 +148,20 @@ const handleConfirm = () => {
message.success('提交成功')
close()
closeDrawer()
emit('visibleFalse',false)
}).catch(err=>{
message.destroy()
message.error(err.data.msg)
close()
closeDrawer()
emit('visibleFalse',false)
})
}).catch(err=>{
message.destroy()
message.error(err.data.msg)
close()
closeDrawer()
emit('visibleFalse',false)
})
}
const forData = ref()
@@ -187,6 +190,7 @@ watch(()=>props.visible,(val)=>{
expenseList.value = res.data.data[indexList.value]?.expenseList || []
}
loadingData.value = false
resetData()
}).catch(()=>{
message.error('获取数据失败,请重新尝试')
loadingData.value = false
@@ -236,7 +240,7 @@ const searchData = (val) => {
const startDateTimestamp = new Date(dateValue.value[0]).getTime();
const endDateTimestamp = new Date(dateValue.value[1]).getTime();
const isDateInRange = teachingDateTimestamp >= startDateTimestamp && teachingDateTimestamp <= endDateTimestamp;
return isNameMatch || isDateInRange;
return isNameMatch && isDateInRange;
});
searchList.value = filteredList;
}
@@ -378,6 +382,12 @@ const qureyDrawer = () => {
console.log(res,'resssss')
message.success('提交成功')
closeDrawer()
emit('visibleFalse',false)
}).catch(err=>{
message.destroy()
message.error(err.data.msg)
closeDrawer()
emit('visibleFalse',false)
})
}
})

View File

@@ -29,7 +29,7 @@
<script setup>
import {computed, defineEmits, defineProps, onMounted, ref, watch} from "vue";
import {useThrottlePage} from "@/api/request";
import {USER_LIST} from "@/api/apis";
import {USER_LIST_NEW} from "@/api/apis";
const props = defineProps({
value: {
@@ -56,12 +56,12 @@ const emit = defineEmits({})
const isOpen = ref(false)
const memberParam = ref({keyword: '', pageNo:1, pageSize: 20})
const memberParam = ref({name: '', pageNo:1, pageSize: 20})
const {data: userList, loading} = useThrottlePage(USER_LIST, memberParam.value, false)
const {data: userList, loading} = useThrottlePage(USER_LIST_NEW, memberParam.value, false)
const options = computed(() => userList.value.filter(e => !(props.value + '').includes(e.id)).map(e => ({
label: e.realName + e.userNo,
label: e.name + e.mobile,
value: e.id //,
// ...e,
// audienceList: null
@@ -93,18 +93,18 @@ const searchMember = (keyword) => {
isOpen.value = true
userList.value = []
memberParam.value.pageNo = 1
memberParam.value.keyword = keyword
memberParam.value.name = keyword
console.log('searchMember', memberParam.value)
};
function blur() {
isOpen.value = false
memberParam.value.keyword = ''
memberParam.value.name = ''
memberParam.value.pageNo = 1
}
function change(e, l) {
memberParam.value.keyword = ''
memberParam.value.name = ''
memberParam.value.pageNo = 1
isOpen.value = false
Array.isArray(l) && (selectOptions.value = l)

View File

@@ -29,7 +29,7 @@
<script setup>
import {computed, defineEmits, defineProps, onMounted, ref, watch} from "vue";
import {useThrottlePage} from "@/api/request";
import {USER_LIST} from "@/api/apis";
import {USER_LIST_NEW} from "@/api/apis";
const props = defineProps({
value: {
@@ -56,12 +56,12 @@ const emit = defineEmits({})
const isOpen = ref(false)
const memberParam = ref({keyword: '', pageNo:1, pageSize: 20})
const memberParam = ref({name: '', pageNo:1, pageSize: 20})
const {data: userList, loading} = useThrottlePage(USER_LIST, memberParam.value, false)
const {data: userList, loading} = useThrottlePage(USER_LIST_NEW, memberParam.value, false)
const options = computed(() => userList.value.filter(e => !(props.value + '').includes(e.id)).map(e => ({
label: e.realName + e.userNo,
label: e.name + e.mobile,
value: e.id // ,
// ...e,
// audienceList: null
@@ -93,18 +93,18 @@ const searchMember = (keyword) => {
isOpen.value = true
userList.value = []
memberParam.value.pageNo = 1
memberParam.value.keyword = keyword
memberParam.value.name = keyword
console.log('searchMember', memberParam.value)
};
function blur() {
isOpen.value = false
memberParam.value.keyword = ''
memberParam.value.name = ''
memberParam.value.pageNo = 1
}
function change(e, l) {
memberParam.value.keyword = ''
memberParam.value.name = ''
memberParam.value.pageNo = 1
isOpen.value = false
Array.isArray(l) && (selectOptions.value = l)

View File

@@ -224,7 +224,7 @@ watch(visible, (val)=>{
formData.value.two = filterList(formData.value.affiliationUserList,2)
formData.value.three = filterList(formData.value.affiliationUserList,3)
formData.value.tableData = res.data.data.affiliationOrgList
formData.value.tableDataTwo = res.data.data.affiliationOrgList
// formData.value.tableDataTwo = res.data.data.affiliationOrgList
})
}
})

View File

@@ -394,7 +394,7 @@
</div>
</a-modal>
</div>
<ImportWork v-model:showWork="showWork" :url="'/admin/export/importInTeacherRecord'" :title="title"></ImportWork>
<ImportWork v-model:showWork="showWork" :template="'内部授课记录导入模板'" :url="'/admin/export/importInTeacherRecord'" :title="title"></ImportWork>
<!-- <div> <Upload/> </div> -->
</div>
</template>

View File

@@ -15,7 +15,7 @@
</div>
<div class="desc">
<a-descriptions :column="2" bordered>
<a-descriptions-item label="审批编号">{{formData?.code||'-'}}</a-descriptions-item>
<a-descriptions-item label="审批编号">{{formData?.approvalNumber||'-'}}</a-descriptions-item>
<a-descriptions-item label="培训发生组名称">{{formData?.trainOrgName||'-'}}</a-descriptions-item>
<a-descriptions-item label="提交时间">{{formData?.summaryTime||'-'}}</a-descriptions-item>
<a-descriptions-item label="汇总金额">{{formData?.summaryTotal||'-'}}</a-descriptions-item>
@@ -54,6 +54,11 @@
:scroll="{ x: 'max-content' }"
:pagination="pagination"
>
<template #orgName="{record}">
<div :title="record?.orgName" style="maxWidth:200px;overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;">{{flipData(record.orgName)||'-'}}</div>
</template>
<template #appEdit="{ record }">
<a-button type="link" :disabled="record.createFrom==1 ?false :true" @click="edit(record)">编辑</a-button>
<a-button type="link" @click="recome(record)">移除</a-button>
@@ -186,7 +191,7 @@
<a-col :span="12">
<a-form-item label="授课时长" name="teachingTime">
<a-input v-model:value="formParam.teachingTime" style="width:80%; height: 40px; border-radius: 8px; "
@blur="clearNonNumber" placeholder="请输入授课分钟数" allowClear showSearch suffix="分钟">
@change="clearNonNumber" placeholder="请输入授课分钟数" allowClear showSearch suffix="分钟">
</a-input>
<span style="margin-left: 5px ;" v-if="formParam.teachingTime != null">{{
(formParam.teachingTime / 60).toFixed(2) }}小时</span>
@@ -195,7 +200,7 @@
</a-col>
<a-col :span="12">
<a-form-item label="参训人数" name="studys">
<a-input v-model:value="formParam.studys" class="draitem" @blur="clearstudysNumber"
<a-input v-model:value="formParam.studys" class="draitem" @blur="clearstudysNumber"
placeholder="请输入参训人数" allowClear showSearch >
</a-input>
</a-form-item>
@@ -308,7 +313,7 @@ import { useRouter,useRoute } from 'vue-router'
import dialog from '@/utils/dialog'
import dayjs from "dayjs";
import { message } from 'ant-design-vue';
import { queryTrainOrg,} from "../../api/organization";
import { queryTrainOrgPor,} from "../../api/organization";
export default {
components: {
SearchTeacher,
@@ -424,7 +429,7 @@ export default {
}
const searchResetPrevious = () => {
dialog({
content: '正在重新汇总数据,请稍后...',
content: '确定要重新汇总数据吗?',
ok: () => {
CreateSummaryAgain(route.query.id).then(res=>{
queryById({id: state.paramsId}).then(res=>{
@@ -457,10 +462,13 @@ export default {
}
const clearstudysNumber = () => {
state.formParam.studys = state.formParam?.studys?.replace(/\D/g, '');
state.formParam.studys = state.formParam.studys?.slice(0,8)
}
const clearNonNumber = () => {
state.formParam.teachingTime = state.formParam?.teachingTime?.replace(/\D/g, '');
state.formParam.expense = state.formParam?.levelPay*state.formParam?.teachingTime
state.formParam.teachingTime = state.formParam.teachingTime?.replace(/\D/g, '');
state.formParam.teachingTime = state.formParam.teachingTime?.slice(0,8);
state.formParam.teachingTime == 0 && (state.formParam.teachingTime = null);
state.formParam.teachingTime && state.formParam.levelPay && (state.formParam.expense = (state.formParam.levelPay*(state.formParam.teachingTime/60)).toFixed(2));
}
const courseTypeList = ref([
{ value: '0', label: "在线" },
@@ -496,7 +504,7 @@ export default {
pageNo:1,
pageSize:50
}
queryTrainOrg(obj).then((res) => {
queryTrainOrgPor(obj).then((res) => {
console.log(res,'rssssss')
state.orgList = res.data.data?.records?.map(item=>{
return{
@@ -601,7 +609,7 @@ export default {
}
const paramsDrawer = () => {
dialog({
content: '是否确定提交',
content: '请仔细核对讲师费信息,确认无误后,将自动进入(BPM系统)审批流程',
ok: ()=>{
isConfirm({
id: route.query.id,
@@ -618,6 +626,13 @@ export default {
}
})
}
const flipData = (val) => {
if(val){
const parts = val.split('/');
const reversedParts = parts.reverse();
return reversedParts.join('/');
}
}
watch(() => state.formParam.orgNames, (val) => {
if(val){
const parts = val.split('/');
@@ -693,6 +708,7 @@ export default {
ellipsis: true,
align: "center",
width: 200,
slots: { customRender: "orgName" },
},
{
title: '讲师体系',
@@ -830,6 +846,7 @@ export default {
closeDrawer,
paramsDrawer,
edit,
flipData,
rules,
recome,
validateField,

View File

@@ -133,10 +133,10 @@
<span class="line"></span>
<span>讲师费用详情</span>
<a-descriptions bordered :column="2" :contentStyle="rowCenter" :labelStyle="rowCenter">
<a-descriptions-item label="审批编号">{{formParam?.teacherName||'-'}}</a-descriptions-item>
<a-descriptions-item label="审批编号">{{formParam?.approvalNumber||'-'}}</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?.approval_submit_time||'-'}}</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="状态">{{{0:'待确认' ,1:'待提交' ,2:'审核中', 3:'已完成', 4:'拒绝',5:'待提交'}[formParam?.status]}}</a-descriptions-item>
</a-descriptions>
@@ -256,7 +256,10 @@
FolderAddOutlined,//图标--新增
ProjectManager,
},
setup() {
setup(props,emit) {
watch(()=>props.key,(val)=>{
console.log(val,'valllllll')
})
const router = useRouter()
const state = reactive({
tableDataParams:{
@@ -334,7 +337,7 @@
if (res.data.code === 200) {
let arr = res.data.data;
let array = [];
arr.map((value) => {
arr?.map((value) => {
let obj = {
value: value.kid,
label: value.systemName,
@@ -345,7 +348,7 @@
}
})
}
LecturerSystemLista()
// LecturerSystemLista()
const trainOrglist=ref([])
//获取培训发生组织
const trainOrglista =() => {
@@ -430,8 +433,8 @@
},
{
title: '汇总时间 ',
dataIndex: 'summaryDate',
key: 'summaryDate',
dataIndex: 'summaryTime',
key: 'summaryTime',
ellipsis: true,
align: "center",
width:200
@@ -446,8 +449,8 @@
},
{
title: '提交时间',
dataIndex: 'approval_submit_time',
key: 'approval_submit_time',
dataIndex: 'approvalSubmitTime',
key: 'approvalSubmitTime',
ellipsis: true, align: "center",
width: 200,
customRender: ({text, record}) => {

View File

@@ -275,7 +275,7 @@
<a-col :span="12">
<a-form-item label="授课时长" name="teachingTime">
<a-input v-model:value="formParam.teachingTime" style="width:80%; height: 40px; border-radius: 8px; "
@blur="clearNonNumber" placeholder="请输入授课分钟数" allowClear showSearch suffix="分钟">
@change="clearNonNumber" placeholder="请输入授课分钟数" allowClear showSearch suffix="分钟">
</a-input>
<span style="margin-left: 5px ;" v-if="formParam.teachingTime != null">{{
(formParam.teachingTime / 60).toFixed(2) }}小时</span>
@@ -284,7 +284,7 @@
</a-col>
<a-col :span="12">
<a-form-item label="参训人数" name="studys">
<a-input v-model:value="formParam.studys" class="draitem" @blur="clearstudysNumber"
<a-input v-model:value="formParam.studys" class="draitem" @blur="clearstudysNumber"
placeholder="请输入参训人数" allowClear showSearch >
</a-input>
</a-form-item>
@@ -440,7 +440,7 @@
<ImportWork v-model:showWork="showWork" :template="'讲师费导入模板'" :url="'/admin/export/importTeacherExpense'" :fileName="uploadFile" :title="title"></ImportWork>
</div>
<!-- 一键确认讲师费 -->
<ConfirmLecturer :ids="selectsIds" v-model:visible="visibleConfirm" :name="'确认讲师费'" />
<ConfirmLecturer @visibleFalse="visibleAll" :ids="selectsIds" v-model:visible="visibleConfirm" :name="'确认讲师费'" />
<!-- 批量确认讲师费 -->
<BatchLecturer @selectedRowKeys="selectedRowKey" v-model:visible="allFeedialog" :name="'批量审批'" />
</template>
@@ -464,7 +464,7 @@
// 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 { queryTrainOrgPor,} from "../../api/organization";
import dialog from '@/utils/dialog';
import OrgClass from "@/components/project/OrgClass";
export default {
@@ -566,9 +566,9 @@
pageNo:1,
pageSize:50
}
queryTrainOrg(obj).then((res) => {
queryTrainOrgPor(obj).then((res) => {
console.log(res,'rssssss')
state.orgList = res.data.data?.records?.map(item=>{
state.orgList = res.data.data?.map(item=>{
return{
label: item.affiliationName,
value: item.id
@@ -1260,6 +1260,7 @@ getAllLevelList().then((res) => {
}
const clearstudysNumber = () => {
state.formParam.studys = state.formParam.studys.replace(/\D/g, '');
state.formParam.studys = state.formParam.studys?.slice(0,8)
}
const clearscoreNumber= () => {
state.formParam.score = state.formParam.score?.replace(/\D/g, '');
@@ -1305,6 +1306,9 @@ getAllLevelList().then((res) => {
const allFee=()=>{
state.allFeedialog=true
}
const visibleAll = (val) => {
state.allFeedialog = val
}
const selectedRowKey = (val) => {
state.selectsIds = val?.join(',');
state.visibleConfirm = true;
@@ -1591,6 +1595,7 @@ const column = ref([
canceleditTeacherDialog,
allFee,
selectedRowKey,
visibleAll,
column,
tableDatas,
tlevelChange,

View File

@@ -2,7 +2,7 @@
<template>
<div class="LecturerFeeManagement">
<div style="margin: 20px;" >
<a-tabs v-model:activeKey="activeKey">
<a-tabs v-model:activeKey="activeKey" :destroyInactiveTabPane="true">
<a-tab-pane key="1" tab="讲师费管理">
<LecturerFee />
</a-tab-pane>

View File

@@ -443,7 +443,7 @@ export default{
// getSysTypeMap()
const handleup = ()=>{
window.open (
`${process.env.VUE_APP_BASE_API}/teacherUpload/teacherDownload?teacherId= ${state.id}`
`${process.env.VUE_APP_BOE_API_URL}/upload${state.formParam.certification}`
);
}
return{

View File

@@ -300,7 +300,7 @@ export default{
}
})
}
placeData()
// placeData()
const PlaceOfPayListTwo = ref([])
const selectRadio = (val)=>{
if(val.target.value == 1){
@@ -355,7 +355,7 @@ export default{
customRender: ({text})=>{
switch (text) {
case '1':
return <span>审核</span>;
return <span>提交</span>;
case '2':
return <span>审核中</span>;
case '3':
@@ -520,6 +520,11 @@ const getTableDate = (obj) => {
state.deleteInTeacherdialog = false
state.editTeacher = false
};
watch(()=>state.teacherdialog,(val)=>{
if(val){
placeData()
}
})
const addTeacher=()=>{
state.teacherdialog=true ,
state.teacherdialogtitle="新增培训发生组织"