Merge branch 'zcwy-teacher-manage' into master_1202

This commit is contained in:
joshen
2024-12-10 18:12:11 +08:00
20 changed files with 409 additions and 217 deletions

View File

@@ -12,7 +12,8 @@ export const updateInTeacherCourse = (obj) => http.post('/admin/teacherRecord/ed
export const getTeacherCourseList = (obj) => http.get('/admin/teacherRecord/queryById', {params: obj}) export const getTeacherCourseList = (obj) => http.get('/admin/teacherRecord/queryById', {params: obj})
//获取培训组织 //获取培训组织
export const getOrganization = (obj) => http.get ('/admin/affiliation/list', {params: obj}) export const getOrganization = (obj) => http.get ('/admin/affiliation/list', {params: obj})
//供应商数据
export const selectSupplier = (obj) => http.get('/admin/teacher/selectSupplier', {params: obj})
//授课记录导出 //授课记录导出
export const getexport = (obj) => http.post('/lesson_records/export', obj) export const getexport = (obj) => http.post('/lesson_records/export', obj)

View File

@@ -67,16 +67,16 @@
<a-progress :percent="uploadpercent" /> <a-progress :percent="uploadpercent" />
</div> </div>
<div class="curloading"> <!-- <div class="curloading">
<div style="color: #387df7; margin-left: 20px; cursor: pointer"> <div style="color: #387df7; margin-left: 20px; cursor: pointer">
下载失败数据 下载失败数据
</div> </div>
</div> </div> -->
<div class="defeat" style="display: flex; align-items: center"> <!-- <div class="defeat" style="display: flex; align-items: center">
<div style="color: #ff7474"> <div style="color: #ff7474">
{{ succNum }}条数据导入成功{{ errNum }}条数据导入失败 {{ succNum }}条数据导入成功{{ errNum }}条数据导入失败
</div> </div>
</div> </div> -->
</div> </div>
</div> </div>
<div class="loadborder" v-if="uploadpercent === 100"> <div class="loadborder" v-if="uploadpercent === 100">
@@ -201,14 +201,13 @@ import {getCookieForName} from "@/api/method";
} }
} }
let isLt1M = info.file.size < 512000000; let isLt1M = info.file.size < 512000000;
console.log(info.file.size, isLt1M) if (!isLt1M) {
if (!isLt1M) { state.fileList = [];
state.fileList = []; state.uploadpercent = -1;
state.uploadpercent = -1; message.destroy();
message.destroy(); message.error("文件大小超出500M,请重新上传");
message.error("文件大小超出500M,请重新上传"); return;
return; }
}
state.addLoading = true; state.addLoading = true;
state.uploadpercent = parseInt(info.file.percent); state.uploadpercent = parseInt(info.file.percent);
@@ -220,16 +219,25 @@ import {getCookieForName} from "@/api/method";
} }
if (status === "done") { if (status === "done") {
state.fileName = info.file.name; state.fileName = info.file.name;
if(!info.file.response.data){ if(info.file.response.code == 200){
message.error(`${info.file.name}上传失败`); state.succNum = Number(info.file.response.data.success);
state.errNum = Number(info.file.response.data.failed);
state.downloadErrUrl = info.file.response.data.path;
}else{
state.uploadErr = true;
state.fileList = [];
state.uploadpercent = -1
message.destroy();
message.error(info.file.response.msg);
} }
let i = 0;
let timeouts = setTimeout(() => { // let i = 0;
// clearInterval(timer) // let timeouts = setTimeout(() => {
state.addLoading = false; // // clearInterval(timer)
message.destroy(); // state.addLoading = false;
message.error(`文件导入超时`); // message.destroy();
}, 30000); // message.error(`文件导入超时`);
// }, 30000);
// let timer = setInterval(() => { // let timer = setInterval(() => {
// let uid = info.file.response.data; // let uid = info.file.response.data;
// api // api

View File

@@ -141,7 +141,7 @@ import * as lecturerApi from "@/api/Lecturer.js";
}) })
} }
const orgLists = ref([]) const orgLists = ref([])
const onCheck = async (checkedKeys, {checked: bool, checkedNodes, node, event}) => { const onCheck = async (checkedKey, {checked: bool, checkedNodes, node, event}) => {
// "965356037047586816" // "965356037047586816"
let length = treeAddData.value.length let length = treeAddData.value.length
if(checkedNodes.length > length){ if(checkedNodes.length > length){
@@ -154,7 +154,7 @@ import * as lecturerApi from "@/api/Lecturer.js";
message.error('获取被占用组织失败,请重新尝试') message.error('获取被占用组织失败,请重新尝试')
}) })
} }
treeAddData.value = checkedNodes.map(item => { const checkLists = checkedNodes.map(item => {
if (!item || !item.id) { if (!item || !item.id) {
return item; return item;
} }
@@ -176,6 +176,14 @@ import * as lecturerApi from "@/api/Lecturer.js";
return item; return item;
} }
}); });
const endLists = [...checkLists,...orgLists.value]
const seen = new Set();
const uniqueEndLists = endLists.filter(item => {
const isDuplicate = seen.has(item.orgId);
seen.add(item.orgId);
return !isDuplicate;
});
treeAddData.value = uniqueEndLists?.filter(item => checkedKeys.value?.checked?.includes(item.orgId));
// treeAddData.value = checkedNodes; // treeAddData.value = checkedNodes;
console.log(treeAddData.value,'checkedNodes',orgLists.value) console.log(treeAddData.value,'checkedNodes',orgLists.value)
} }
@@ -193,6 +201,13 @@ import * as lecturerApi from "@/api/Lecturer.js";
clearTree() clearTree()
}; };
const queryCreate = () => { const queryCreate = () => {
treeAddData.value?.map(item=>{
props?.AddContentList?.map(i=>{
if(item.orgId === i.orgId){
item.affiliationOrgId = i.affiliationOrgId
}
})
})
emit("update:AddContentList", treeAddData.value); emit("update:AddContentList", treeAddData.value);
closeCodeModal() closeCodeModal()
} }

View File

@@ -19,7 +19,7 @@
<!-- 讲师信息 --> <!-- 讲师信息 -->
<div style="width: 100%;margin-top: 10px;"> <div style="width: 100%;margin-top: 10px;">
<span class="line" style="margin-left:12px;"></span> <span class="line" style="margin-left:12px;"></span>
<a-descriptions title="讲师信息" style="padding:0 20px;" bordered :column="3" :contentStyle="rowCenters" :labelStyle="rowCenter"> <a-descriptions title="基本信息" style="padding:0 20px;" bordered :column="3" :contentStyle="rowCenters" :labelStyle="rowCenter">
<!-- 一层 --> <!-- 一层 -->
<a-descriptions-item label="讲师头像"> <a-image <a-descriptions-item label="讲师头像"> <a-image
:width="55" style="border-radius: 50%;" :width="55" style="border-radius: 50%;"
@@ -74,7 +74,7 @@ import { reactive, toRefs, ref,computed,watch } from "vue"
import {getTeacherById} from "../../api/Lecturer"; import {getTeacherById} from "../../api/Lecturer";
import { getNewInTeacherCourseList } from "../../api/Teaching"; import { getNewInTeacherCourseList } from "../../api/Teaching";
// import boe from '@/assets/boe.jpg' // import boe from '@/assets/boe.jpg'
import avatar from '@/assets/avatar.png' import avatar from '@/assets/Avatarman.png'
import dayjs from "dayjs"; import dayjs from "dayjs";
export default{ export default{
name :"LookExternalLecturer", name :"LookExternalLecturer",

View File

@@ -3,7 +3,7 @@
width="80%" :title="false"> width="80%" :title="false">
<!-- 内部讲师查看详情 --> <!-- 内部讲师查看详情 -->
<div class="LookInsideLecturer"> <div class="LookInsideLecturer">
<div class="header" style="margin-top: -24px;"> <div class="header" style="margin-top: -24px;margin-left: -24px;">
<div class="headerTitle">查看讲师</div> <div class="headerTitle">查看讲师</div>
<!-- <router-link :to="{ path: '/lecturerList', query: { activeKey: '1', } }"> --> <!-- <router-link :to="{ path: '/lecturerList', query: { activeKey: '1', } }"> -->
<img <img
@@ -17,7 +17,7 @@
<!-- 讲师信息 --> <!-- 讲师信息 -->
<div style="width: 100%;margin-top: 10px;padding: 20px;"> <div style="width: 100%;margin-top: 10px;padding: 20px;">
<span class="line"></span> <span class="line"></span>
<a-descriptions title="讲师信息" bordered :column="4" :contentStyle="rowCenter" :labelStyle="rowCenters"> <a-descriptions title="基本信息" bordered :column="4" :contentStyle="rowCenter" :labelStyle="rowCenters">
<!-- 一层 --> <!-- 一层 -->
<a-descriptions-item label="讲师头像"> <a-descriptions-item label="讲师头像">
<a-image :width="55" style="border-radius: 50%;" :src=formParam.photo /> <a-image :width="55" style="border-radius: 50%;" :src=formParam.photo />
@@ -185,7 +185,7 @@ export default{
state.formParam = objA state.formParam = objA
state.formParam.photo = state.formParam.photo ==null ? state.formParam.photo = state.formParam.photo ==null ?
state.formParam.gender == 1 ? Avatarman : state.formParam.gender == 1 ? Avatarman :
state.formParam.gender ==2 ? Avatarwoman : avatar : state.formParam.photo state.formParam.gender ==2 ? Avatarwoman : Avatarman : (state.formParam.photo.includes('upload')?state.formParam.photo:'/upload'+state.formParam.photo)
state.teacherrepromo.userId=res.data.data.id state.teacherrepromo.userId=res.data.data.id
console.log(state.teacherrepromo.id); console.log(state.teacherrepromo.id);
isOrgNames(state.formParam.orgName) isOrgNames(state.formParam.orgName)
@@ -507,7 +507,13 @@ const handleup = ()=>{
} }
//小竖线 //小竖线
.line{ .line{
float:left; width: 3px; height: 25px; background: #4ea6ff;border-radius: 30%; margin-right: 5px; float:left;
width: 3px;
height: 16px;
background: #4ea6ff;
border-radius: 30%;
margin-left: -10px;
margin-top: 5px;
} }
::v-deep .ant-descriptions-header{ ::v-deep .ant-descriptions-header{
margin-bottom: 18px ; margin-bottom: 18px ;

View File

@@ -30,6 +30,7 @@
:disabled="disabled" :disabled="disabled"
@change="change" @change="change"
dropdownClassName="treeDropdown" dropdownClassName="treeDropdown"
@keydown.enter="keydownEnter"
> >
</a-tree-select> </a-tree-select>
</template> </template>
@@ -57,7 +58,11 @@ const { data: options, loading: orgLoading } = useArrayRequest(
ORG_LIST, ORG_LIST,
{ keyword: "" }, { keyword: "" },
); );
const keydownEnter = (e) => {
if(e.keyCode == 13){
emit('enter',true)
}
}
watch(props, () => { watch(props, () => {
stuTreeExpandedKeys.value = []; stuTreeExpandedKeys.value = [];
if (labelValue.value.value !== props.value) { if (labelValue.value.value !== props.value) {

View File

@@ -79,7 +79,7 @@ const getOutTeacher = () => {
const options = computed(() => userList.value.map(e => ({ const options = computed(() => userList.value.map(e => ({
// label: e.name + '(' + e.userNo + ')' + e.organizationName, // label: e.name + '(' + e.userNo + ')' + e.organizationName,
label:e.name, label:e.name+ '(' +e.supplier + ')',
value: e.name, value: e.name,
...e, ...e,
audienceList: null audienceList: null

View File

@@ -1,6 +1,10 @@
<template> <template>
<div> <div>
<a-popover v-model:visible="visible" placement="bottom" trigger="click"> <a-popover :getPopupContainer="
(triggerNode) => {
return triggerNode.parentNode || document.body;
}
" v-model:visible="visible" placement="bottom" trigger="click">
<template #content v-if="!disabled"> <template #content v-if="!disabled">
<div class="pover"> <div class="pover">
<div class="search"> <div class="search">
@@ -26,13 +30,13 @@
</div> </div>
<div class="tree"> <div class="tree">
<a-tree show-icon allow-clear tree-default-expand-all :tree-data="treeData" :loading="orgLoading" <a-tree show-icon allow-clear tree-default-expand-all :tree-data="treeData" :loading="orgLoading"
:load-data="onLoadData" v-model:selectedKeys="stuTreeSelectKeys" :load-data="onLoadData" @expand="onExpand" v-model:selectedKeys="stuTreeSelectKeys"
v-model:expandedKeys="stuTreeExpandedKeys" :fieldNames="{ v-model:expandedKeys="stuTreeExpandedKeys" :fieldNames="{
children: 'treeChildList', children: 'treeChildList',
key: 'id', key: 'id',
title: 'name', title: 'name',
value: 'name', value: 'name',
}" @select="stuStuOrgSelect" style="max-height: 260px;overflow-y: auto;width: 250px;"> }" @select="stuStuOrgSelect" style="height: 300px;max-height: 300px;overflow-y: auto;width: 266px;">
<template #smile> <template #smile>
<UserOutlined /> <UserOutlined />
</template> </template>
@@ -143,6 +147,7 @@ const systemName = ref(null)
const levelName = ref('') const levelName = ref('')
const neworgName = ref('') const neworgName = ref('')
const teacherId = ref('') const teacherId = ref('')
const changeValue = ref({})
const handleChange = (e,l) => { const handleChange = (e,l) => {
isOpen.value = false isOpen.value = false
// emit('update:value',e) // emit('update:value',e)
@@ -157,8 +162,9 @@ const handleChange = (e,l) => {
if( l.orgName !==null ){ if( l.orgName !==null ){
neworgName.value= orgName.value.split('/') neworgName.value= orgName.value.split('/')
neworgName.value= neworgName.value[ neworgName.value.length-1] neworgName.value= neworgName.value[ neworgName.value.length-1]
} }
emit('tlevel',l) changeValue.value = l
// emit('tlevel',l)
}; };
function debounce(func, wait) { function debounce(func, wait) {
let timeout; let timeout;
@@ -259,6 +265,9 @@ const { data: treeData, loading: orgLoading } = useRequest(
ORG_LIST, ORG_LIST,
{ keyword: "" }, { keyword: "" },
); );
const onExpand = (expandedKeys, aaa) => {
console.log(expandedKeys, aaa,'xixixiiixi')
}
function onLoadData(treeNode) { function onLoadData(treeNode) {
teacherById.value = treeNode.id teacherById.value = treeNode.id
const promises = []; const promises = [];
@@ -293,7 +302,12 @@ function onLoadData(treeNode) {
}); });
} }
function stuStuOrgSelect(e, {selected: bool, selectedNodes, node, event}) { function stuStuOrgSelect(e, {selected: bool, selectedNodes, node, event}) {
console.log(selectedNodes) const index = stuTreeExpandedKeys.value.indexOf(node.id);
if (index === -1) {
stuTreeExpandedKeys.value.push(node.id);
} else {
stuTreeExpandedKeys.value.splice(index, 1);
}
teacherName.value = '' teacherName.value = ''
orgName.value = '' orgName.value = ''
orgId.value = '' orgId.value = ''
@@ -302,7 +316,7 @@ function stuStuOrgSelect(e, {selected: bool, selectedNodes, node, event}) {
teacherId.value = '' teacherId.value = ''
payrollPlaceCode.value = '' payrollPlaceCode.value = ''
payrollPlaceName.value = '' payrollPlaceName.value = ''
if(selectedNodes[0].isLeaf){ if(selectedNodes[0]?.isLeaf){
teacherName.value = selectedNodes[0].name teacherName.value = selectedNodes[0].name
orgName.value = selectedNodes[0].orgName orgName.value = selectedNodes[0].orgName
orgId.value = selectedNodes[0].departId orgId.value = selectedNodes[0].departId
@@ -323,6 +337,7 @@ watch(()=>visible.value,(val)=>{
orgId.value = '' orgId.value = ''
systemName.value = null systemName.value = null
levelName.value = '' levelName.value = ''
changeValue.value = {}
neworgName.value='' neworgName.value=''
selectName.value = null selectName.value = null
// selectData.value = '' // selectData.value = ''
@@ -340,7 +355,8 @@ const notChange = () => {
orgName.value = '' orgName.value = ''
orgId.value = '' orgId.value = ''
systemName.value = null systemName.value = null
levelName.value = '' levelName.value = ''
changeValue.value = {}
neworgName.value='' neworgName.value=''
teacherId.value = '' teacherId.value = ''
loadingChange.value = false loadingChange.value = false
@@ -367,7 +383,7 @@ watch(()=>teacherId.value,(val)=>{
} }
} }
loadingChange.value = false loadingChange.value = false
emit('update:system',systemName.value) // emit('update:system',systemName.value)
}).catch(err=>{ }).catch(err=>{
message.error('讲师体系获取失败,请重新选择') message.error('讲师体系获取失败,请重新选择')
loadingChange.value = false loadingChange.value = false
@@ -386,6 +402,7 @@ const changeOut = () => {
// neworgName= neworgName[neworgName.length-1] // neworgName= neworgName[neworgName.length-1]
// } // }
emit('tlevel',changeValue.value)
selectData.value = teacherName.value selectData.value = teacherName.value
emit('update:value',teacherName.value) emit('update:value',teacherName.value)
emit('update:lable',orgName.value) emit('update:lable',orgName.value)
@@ -401,13 +418,25 @@ const changeOut = () => {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
::v-deep .ant-popover{
width: 300px;
hight: 400px;
top: 35px !important;
left: 0px !important;
}
.pover{ .pover{
::v-deep .ant-select-selector{
height: 30px !important;
border-radius: 4px !important;
line-height: 30px !important;
}
.search{ .search{
margin-top: 10px; margin-top: 10px;
} }
.tree{ .tree{
margin-top: 5px; margin-top: 5px;
border: 1px solid rgba(215, 215, 215, 1); border: 1px solid rgba(215, 215, 215, 1);
border-radius: 4px;
} }
.btn{ .btn{
margin-top: 10px; margin-top: 10px;
@@ -418,10 +447,11 @@ const changeOut = () => {
height: 25px; height: 25px;
color: #FFFFFF; color: #FFFFFF;
text-align: center; text-align: center;
line-height: 25px; // line-height: 25px;
cursor: pointer; cursor: pointer;
} }
.btn1{ .btn1{
line-height: 25px;
margin-right: 10px; margin-right: 10px;
background-color: rgba(170, 170, 170, 1); background-color: rgba(170, 170, 170, 1);
} }

View File

@@ -6,13 +6,13 @@
<a-form layout="inline"> <a-form layout="inline">
<a-form-item class="select"> <a-form-item class="select">
<!-- v-model:value="searchParam.name" --> <!-- v-model:value="searchParam.name" -->
<a-input v-model:value="searchParam.name" style="width: 276px; height: 40px; border-radius: 8px" <a-input v-model:value="searchParam.name" style="width: 250px; height: 40px; border-radius: 8px"
placeholder="请输入讲师姓名/手机号进行检索" allowClear showSearch placeholder="请输入讲师姓名/手机号进行检索" allowClear showSearch
v-on:keydown.enter="enterPressHadlerSearch"> v-on:keydown.enter="enterPressHadlerSearch">
</a-input> </a-input>
</a-form-item > </a-form-item >
<a-form-item class="select"> <a-form-item class="select">
<a-select style="width: 276px" v-model:value="searchParam.status" placeholder="账号状态" <a-select style="width: 220px" v-model:value="searchParam.status" placeholder="账号状态"
:options="AccountStatusList" :options="AccountStatusList"
v-on:keydown.enter="enterPressHadlerSearch"> v-on:keydown.enter="enterPressHadlerSearch">
</a-select> </a-select>
@@ -65,10 +65,10 @@
<!-- 弹窗组件 --> <!-- 弹窗组件 -->
<a-drawer v-model:visible="teacherdialog" placement="right" :closable="false" :maskClosable="false" <a-drawer v-model:visible="teacherdialog" placement="right" :closable="false" :maskClosable="false"
width="700px" :title="false"> width="700px" :title="false">
<div class="headers" style="margin-top:-24px;"> <div class="headers" style="margin-top:-24px;width: 110%;margin-left: -24px;">
<div class="headerTitle">{{ teacherdialogtitle }}</div> <div class="headerTitle">{{ teacherdialogtitle }}</div>
<img <img
style="width: 29px; height: 29px; cursor: pointer" style="width: 29px; height: 29px; cursor: pointer;margin-right: 24px;"
src="@/assets/images/basicinfo/close.png" src="@/assets/images/basicinfo/close.png"
@click="cancelTeacherDialog" @click="cancelTeacherDialog"
/> />
@@ -87,7 +87,7 @@
<a-upload name="avatar" list-type="picture-card" class="avatar-uploader" :show-upload-list="false" <a-upload name="avatar" list-type="picture-card" class="avatar-uploader" :show-upload-list="false"
:headers="headers" :before-upload="beforeUpload"> :headers="headers" :before-upload="beforeUpload">
<img class="i_upload_img" v-if="formParam.photo" :src="formParam.photo" alt="avatar" title="更换头像" /> <img class="i_upload_img" v-if="formParam.photo" :src="formParam.photo" alt="avatar" title="更换头像" />
<img class="i_upload_img" v-else src="../../assets/avatar.png" alt="avatar" title="更换头像" /> <img class="i_upload_img" v-else src="../../assets/Avatarman.png" alt="avatar" title="更换头像" />
<!-- <div class="i_upload" v-else> <!-- <div class="i_upload" v-else>
<div class="addimg"> <div class="addimg">
<div class="heng"></div> <div class="heng"></div>
@@ -139,18 +139,18 @@
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
<a-form-item label="初始授课时长" name="teaching"> <a-form-item label="初始授课时长" name="teaching">
<a-input v-model:value="formParam.teaching" style="width:80%; height: 40px; border-radius: 8px ; " <a-input v-model:value="formParam.teaching" style="width:100%; height: 40px; border-radius: 8px ; "
placeholder="0" allowClear showSearch suffix="分钟" @blur="clearNonNumber"> placeholder="0" allowClear showSearch suffix="分钟" @blur="clearNonNumber">
</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
).toFixed(2) }}小时</span> ).toFixed(2) }}小时</span>
<span style="margin-left: 5px ;" v-if="formParam.teaching === null">0.00小时</span> <span style="margin-left: 5px ;" v-if="formParam.teaching === null">0.00小时</span> -->
</a-form-item> </a-form-item>
</a-col> </a-col>
</a-row> </a-row>
<!-- 其他信息 --> <!-- 其他信息 -->
<a-row> <a-row>
<a-col :span="24" style="margin-bottom: 15px;"> <a-col :span="24" style="margin-bottom: 24px;margin-top: 12px;">
<span class="line"></span><span style="font-weight: 600;">其他信息</span> <span class="line"></span><span style="font-weight: 600;">其他信息</span>
</a-col> </a-col>
</a-row> </a-row>
@@ -194,7 +194,7 @@
} " } "
> >
<a-button class="drabtn" @click="cancelTeacherDialog" >取消</a-button> <a-button class="drabtn" @click="cancelTeacherDialog" >取消</a-button>
<a-button class="drabtn" type="primary" @click="createTeacherDialog" :loading="buttonLoading">保存 <a-button style="margin-right: 20px;" class="drabtn" type="primary" @click="createTeacherDialog" :loading="buttonLoading">保存
</a-button> </a-button>
</div> </div>
</a-drawer> </a-drawer>
@@ -521,7 +521,7 @@ export default {
//修改讲师信息弹窗 //修改讲师信息弹窗
const handleModify = (record) => { const handleModify = (record) => {
state.teacherdialog = true; state.teacherdialog = true;
state.teacherdialogtitle = '修改信息' state.teacherdialogtitle = '编辑讲师'
state.id = record.id state.id = record.id
state.vf = false state.vf = false
TeacherSystem() TeacherSystem()
@@ -826,6 +826,9 @@ export default {
}; };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.ant-form-item {
margin-bottom: 12px;
}
::v-deep .ant-upload.ant-upload-select-picture-card { ::v-deep .ant-upload.ant-upload-select-picture-card {
border-radius: 50% !important; border-radius: 50% !important;
width: 90px; width: 90px;
@@ -846,7 +849,7 @@ export default {
font-weight: 600; font-weight: 600;
color: #333333; color: #333333;
line-height: 25px; line-height: 25px;
// margin-left: 24px; margin-left: 14px;
} }
} }
//导出按钮icon //导出按钮icon

View File

@@ -9,33 +9,38 @@
<!-- <a-input v-model:value="searchParam.userNo" style="width: 276px; height: 40px; border-radius: 8px" <!-- <a-input v-model:value="searchParam.userNo" style="width: 276px; height: 40px; border-radius: 8px"
placeholder="请输入工号/讲师姓名进行检索" allowClear showSearch> placeholder="请输入工号/讲师姓名进行检索" allowClear showSearch>
</a-input> --> </a-input> -->
<a-input style="width: 276px; height: 40px; border-radius: 8px" placeholder="请输入讲师姓名/手机号进行检索" showSearch <a-input style="width: 235px; height: 40px; border-radius: 8px" placeholder="请输入姓名/手机号进行检索" showSearch
allowClear v-model:value="searchParam.name" allowClear v-model:value="searchParam.name"
v-on:keydown.enter="enterPressHadlerSearch"></a-input> v-on:keydown.enter="enterPressHadlerSearch"></a-input>
</a-form-item> </a-form-item>
<a-form-item class="select"> <a-form-item class="select">
<a-input v-model:value="searchParam.courseName" style="width: 276px; height: 40px; border-radius: 8px" <a-select style="width: 235px ;margin-bottom:20px" v-model:value="searchParam.supplier" placeholder="请输入供应商" :options="supperList" allowClear
v-on:keydown.enter="enterPressHadlerSearch" showSearch >
</a-select>
</a-form-item>
<a-form-item class="select">
<a-input v-model:value="searchParam.courseName" style="width: 235px; height: 40px; border-radius: 8px"
placeholder="请输入课程名称进行搜索" allowClear showSearch placeholder="请输入课程名称进行搜索" allowClear showSearch
v-on:keydown.enter="enterPressHadlerSearch"> v-on:keydown.enter="enterPressHadlerSearch">
</a-input> </a-input>
</a-form-item> </a-form-item>
<a-form-item class="select "> <a-form-item class="select ">
<div class="select addTimeBox"> <!-- <div class="select addTimeBox">
<div class="addTime">授课日期</div> <div class="addTime">授课日期</div> -->
<a-range-picker v-model:value="searchdate" style="width: 420px" format="YYYY-MM-DD" valueFormat="YYYY-MM-DD" <a-range-picker v-model:value="searchdate" style="width: 340px !important;" format="YYYY-MM-DD" valueFormat="YYYY-MM-DD"
separator="至" :placeholder="[' 开始时间', ' 结束时间'] separator="至" :placeholder="['授课日期开始时间', '授课日期结束时间']
" "
v-on:keydown.enter="enterPressHadlerSearch" /> v-on:keydown.enter="enterPressHadlerSearch" />
</div> <!-- </div> -->
</a-form-item> </a-form-item>
<a-form-item class="select"> <a-form-item class="select">
<a-select style="width: 230px ;margin-bottom:20px" v-model:value="searchParam.createFrom" placeholder="录入类型" <a-select style="width: 200px ;margin-bottom:20px" v-model:value="searchParam.createFrom" placeholder="录入类型"
:options="entryTypeList" allowClear :options="entryTypeList" allowClear
v-on:keydown.enter="enterPressHadlerSearch"> v-on:keydown.enter="enterPressHadlerSearch">
</a-select> </a-select>
</a-form-item> </a-form-item>
<a-form-item class="select"> <a-form-item class="select">
<a-tree-select style="width: 230px" :fieldNames="{ <a-tree-select style="width: 235px" :fieldNames="{
children: 'children', children: 'children',
label: 'name', label: 'name',
value: 'code', value: 'code',
@@ -47,7 +52,7 @@
</a-tree-select> </a-tree-select>
</a-form-item> </a-form-item>
<a-form-item class="select"> <a-form-item class="select">
<a-select style="width: 230px" v-model:value="searchParam.courseStatus" placeholder="开课状态" <a-select style="width: 200px" v-model:value="searchParam.courseStatus" placeholder="开课状态"
:options="AuthenticationStatusList" allowClear :options="AuthenticationStatusList" allowClear
v-on:keydown.enter="enterPressHadlerSearch"> v-on:keydown.enter="enterPressHadlerSearch">
</a-select> </a-select>
@@ -193,13 +198,13 @@
</a-col> </a-col>
<a-col :span="12"> <a-col :span="12">
<a-form-item label="授课时长" name="teaching"> <a-form-item label="授课时长" name="teaching">
<a-input v-model:value="formParam.teaching" style="width:80%; height: 40px; border-radius: 8px; " <a-input v-model:value="formParam.teaching" style="width:100%; height: 40px; border-radius: 8px; "
placeholder="0" allowClear showSearch suffix="分钟" placeholder="0" allowClear showSearch suffix="分钟"
:maxLength="8" @blur="clearNonNumber"> :maxLength="8" @change="clearNonNumber">
</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
).toFixed(2) }}小时</span> ).toFixed(2) }}小时</span>
<span style="margin-left: 5px ;" v-if="formParam.teaching == null">0.00小时</span> <span style="margin-left: 5px ;" v-if="formParam.teaching == null">0.00小时</span> -->
</a-form-item> </a-form-item>
</a-col> </a-col>
</a-row> </a-row>
@@ -216,7 +221,7 @@
<a-form-item label="评分" name="score"> <a-form-item label="评分" name="score">
<!-- <a-input class="draitem" v-model:value="formParam.score" @blur="clearscoreNumber" placeholder="" allowClear showSearch> <!-- <a-input class="draitem" v-model:value="formParam.score" @blur="clearscoreNumber" placeholder="" allowClear showSearch>
</a-input> --> </a-input> -->
<a-input-number v-model:value="formParam.score" :precision="2" :min="0" :max="10" <a-input-number v-model:value="formParam.score" :precision="2" :min="0" :max="100"
style="width:100%; height: 40px; border-radius: 8px ; " /> style="width:100%; height: 40px; border-radius: 8px ; " />
</a-form-item> </a-form-item>
</a-col> </a-col>
@@ -341,7 +346,7 @@ import { message } from "ant-design-vue";
import ProjectManager from "@/components/project/ProjectManagerNew"; import ProjectManager from "@/components/project/ProjectManagerNew";
import ProjectManagerOutTeacher from "@/components/project/ProjectManagerOutTeacher"; import ProjectManagerOutTeacher from "@/components/project/ProjectManagerOutTeacher";
import dayjs from "dayjs"; import dayjs from "dayjs";
import { getTeacherCourseList, updateInTeacherCourse, getNewInTeacherCourseList, deleteInTeacherCourse, insertInTeacherCourse } from "../../api/Teaching"; import { getTeacherCourseList, updateInTeacherCourse, getNewInTeacherCourseList, deleteInTeacherCourse, insertInTeacherCourse,selectSupplier } from "../../api/Teaching";
// import {getProjSt} from "../../api/indexProjStu"; // import {getProjSt} from "../../api/indexProjStu";
// import AddTeacher from "../../components/drawers/project/AddTeacher" // import AddTeacher from "../../components/drawers/project/AddTeacher"
export default { export default {
@@ -363,6 +368,7 @@ export default {
state.searchParam = JSON.parse(search) state.searchParam = JSON.parse(search)
} }
searchSubmit() searchSubmit()
getSupplier()
}) })
const route = useRoute() const route = useRoute()
const formRef = ref(); const formRef = ref();
@@ -392,7 +398,8 @@ export default {
teaching: null, teaching: null,
teachingDate: null, teachingDate: null,
teacherId:null, teacherId:null,
mobile:null mobile:null,
score: 0
}, },
searchdate: undefined, //选择时间 searchdate: undefined, //选择时间
searchParam: { searchParam: {
@@ -441,6 +448,19 @@ export default {
{ value: 2, label: "路径开课" }, { value: 2, label: "路径开课" },
{ value: 3, label: "面授开课" }, { value: 3, label: "面授开课" },
]) ])
const supperList = ref([])
const getSupplier = ()=>{
selectSupplier().then(res=>{
if(res.data.code == 200){
supperList.value = res.data.data.map(item=>{
return {
value:item,
label:item
}
})
}
})
}
const AuthenticationStatusList = ref([ const AuthenticationStatusList = ref([
{ value: '', label: "全部" }, { value: '', label: "全部" },
{ value: 0, label: "未开课" }, { value: 0, label: "未开课" },
@@ -467,12 +487,21 @@ export default {
ellipsis: true, align: "center", ellipsis: true, align: "center",
width: 150, width: 150,
}, },
{
title: '供应商',
dataIndex: 'supplier',
key: 'supplier',
ellipsis: true, align: "center",
width: 150,
customRender: ({text})=> text||'-'
},
{ {
title: '手机号码 ', title: '手机号码 ',
dataIndex: 'mobile', dataIndex: 'mobile',
key: 'mobile', key: 'mobile',
ellipsis: true, align: "center", ellipsis: true, align: "center",
width: 150, width: 150,
customRender: ({text}) => text||'-'
}, },
{ {
title: '课程类型 ', title: '课程类型 ',
@@ -663,6 +692,7 @@ export default {
systemId: null, systemId: null,
endTime: null, endTime: null,
beginTime: null, beginTime: null,
supplier: null,
}; };
getTableDate(); getTableDate();
}; };
@@ -729,7 +759,7 @@ export default {
if(state.formParam.studys==0){ if(state.formParam.studys==0){
state.formParam.studys = null state.formParam.studys = null
} }
if(state.formParam.score){ if(state.formParam.score||state.formParam.score==0){
state.formParam.score = String(state.formParam.score) state.formParam.score = String(state.formParam.score)
}else{ }else{
state.formParam.score = null state.formParam.score = null
@@ -807,7 +837,7 @@ export default {
name: null, name: null,
type: null, type: null,
teaching: null, teaching: null,
score: null, score: 0,
remark: null, remark: null,
teachingDate: null, teachingDate: null,
teacherId:null teacherId:null
@@ -914,6 +944,8 @@ const sendName=()=>{
AddressList, AddressList,
OnTheJobStatusList, OnTheJobStatusList,
AuthenticationStatusList, AuthenticationStatusList,
supperList,
getSupplier,
searchSubmit, searchSubmit,
searchReset, searchReset,
columns, columns,

View File

@@ -6,30 +6,30 @@
<a-form layout="inline"> <a-form layout="inline">
<a-form-item class="select"> <a-form-item class="select">
<!-- v-model:value="searchParam.name" --> <!-- v-model:value="searchParam.name" -->
<a-input v-model:value="searchParam.name" style="width: 276px; height: 40px; border-radius: 8px" <a-input v-model:value="searchParam.name" style="width: 235px; height: 40px; border-radius: 8px"
placeholder="请输入工号/讲师姓名进行检索" allowClear showSearch @pressEnter="searchSubmit"> placeholder="请输入工号/讲师姓名进行检索" allowClear showSearch @pressEnter="searchSubmit">
</a-input> </a-input>
</a-form-item> </a-form-item>
<a-form-item class="select"> <a-form-item class="select">
<a-select style="width: 276px" placeholder="请选择讲师体系" v-model:value="searchParam.tSystemId" allowClear <a-select style="width: 235px" placeholder="请选择讲师体系" v-model:value="searchParam.tSystemId" allowClear
:options="LecturerSystemList"> :options="LecturerSystemList" @keydown.enter="enterPressHadlerSearch">
</a-select> </a-select>
</a-form-item> </a-form-item>
<!-- <div @click="handlesearchlevel"> --> <!-- <div @click="handlesearchlevel"> -->
<a-form-item class="select" > <a-form-item class="select" >
<a-select style="width: 200px" v-model:value="searchParam.tLevelName" placeholder="请选择讲师级别" allowClear <a-select style="width: 200px" v-model:value="searchParam.tLevelName" placeholder="请选择讲师级别" allowClear
:options="getLevelList" > :options="getLevelList" @keydown.enter="enterPressHadlerSearch" >
<!-- :disabled="getLevelList.length !== 0 ? false : true" 禁用状态 --> <!-- :disabled="getLevelList.length !== 0 ? false : true" 禁用状态 -->
</a-select> </a-select>
</a-form-item> </a-form-item>
<a-form-item class="select"> <a-form-item class="select">
<a-select style="width: 200px ;margin-bottom:20px" v-model:value="searchParam.waitStatus" placeholder="在职状态" <a-select style="width: 170px ;margin-bottom:20px" v-model:value="searchParam.waitStatus" placeholder="在职状态"
:options="OnTheJobStatusList" allowClear> :options="OnTheJobStatusList" @keydown.enter="enterPressHadlerSearch" allowClear>
</a-select> </a-select>
</a-form-item> </a-form-item>
<a-form-item class="select"> <a-form-item class="select">
<a-select style="width: 200px ;" v-model:value="searchParam.certStatus" placeholder="认证状态" allowClear <a-select style="width: 170px ;" v-model:value="searchParam.certStatus" placeholder="认证状态" allowClear
:options="AuthenticationStatusList"> :options="AuthenticationStatusList" @keydown.enter="enterPressHadlerSearch">
</a-select> </a-select>
</a-form-item> </a-form-item>
<a-form-item class="select"> <a-form-item class="select">
@@ -115,10 +115,10 @@
<!-- 弹窗组件 --> <!-- 弹窗组件 -->
<a-drawer v-model:visible="teacherdialog" placement="right" :closable="false" :maskClosable="false" <a-drawer v-model:visible="teacherdialog" placement="right" :closable="false" :maskClosable="false"
width="700" :title="false"> width="700" :title="false">
<div class="headers" style="margin-top:-24px;"> <div class="headers" style="margin-top:-24px;margin-left: -25px;width: 110%;">
<div class="headerTitle" style="margin-left: 14px;">{{ teacherdialogtitle }}</div> <div class="headerTitle" style="margin-left: 14px;">{{ teacherdialogtitle }}</div>
<img <img
style="width: 29px; height: 29px; cursor: pointer" style="width: 29px; height: 29px; cursor: pointer;margin-right: 24px;"
src="@/assets/images/basicinfo/close.png" src="@/assets/images/basicinfo/close.png"
@click="cancelTeacherDialog" @click="cancelTeacherDialog"
/> />
@@ -127,7 +127,7 @@
<a-form :model="formParam" :rules="rules" layout="vertical" ref="formRef"> <a-form :model="formParam" :rules="rules" layout="vertical" ref="formRef">
<a-row> <a-row>
<a-col :span="24"> <a-col :span="24">
<span class="line"></span><span style="color:#333333;font-weight: 600;">基本信息</span> <span class="line"></span><span style="color:#333333;font-weight: 600;font-size:16px;">基本信息</span>
</a-col> </a-col>
</a-row> </a-row>
<a-row :gutter="16"> <a-row :gutter="16">
@@ -139,7 +139,7 @@
<img class="i_upload_img" v-if="formParam.photo" :src="formParam.photo" alt="avatar" title="更换头像" /> <img class="i_upload_img" v-if="formParam.photo" :src="formParam.photo" alt="avatar" title="更换头像" />
<img class="i_upload_img" v-else-if="formParam.gender==1" src="../../assets/Avatarman.png" alt="avatar" title="更换头像" /> <img class="i_upload_img" v-else-if="formParam.gender==1" src="../../assets/Avatarman.png" alt="avatar" title="更换头像" />
<img class="i_upload_img" v-else-if="formParam.gender==2" src="../../assets/Avatarwoman.png" alt="avatar" title="更换头像" /> <img class="i_upload_img" v-else-if="formParam.gender==2" src="../../assets/Avatarwoman.png" alt="avatar" title="更换头像" />
<img class="i_upload_img" v-else src="../../assets/avatar.png" alt="avatar" title="更换头像" /> <img class="i_upload_img" v-else src="../../assets/Avatarman.png" alt="avatar" title="更换头像" />
<!-- <div class="i_upload" v-else> <!-- <div class="i_upload" v-else>
<div class="addimg"> <div class="addimg">
<div class="heng"></div> <div class="heng"></div>
@@ -198,13 +198,13 @@
<a-row :gutter="16"> <a-row :gutter="16">
<a-col :span="24"> <a-col :span="24">
<a-form-item label="初始授课时长" name="defaultTeachingTime"> <a-form-item label="初始授课时长" name="defaultTeachingTime">
<a-input v-model:value="formParam.defaultTeachingTime" style="width:80%; height: 40px; border-radius: 8px; " <a-input v-model:value="formParam.defaultTeachingTime" style="width:100%; height: 40px; border-radius: 8px; "
:maxLength="8" :maxLength="8"
@change="clearNonNumber" placeholder="请输入初始授课时长" allowClear suffix="分钟"> @change="clearNonNumber" placeholder="请输入初始授课时长" allowClear suffix="分钟">
</a-input> </a-input>
<span style="margin-left: 5px ;" v-if="formParam.defaultTeachingTime === null">0.00小时</span> <!-- <span style="margin-left: 5px ;" v-if="formParam.defaultTeachingTime === null">0.00小时</span>
<span style="margin-left: 5px ;" v-if="formParam.defaultTeachingTime != null">{{ <span style="margin-left: 5px ;" v-if="formParam.defaultTeachingTime != null">{{
(formParam.defaultTeachingTime / 60).toFixed(2) }}小时</span> (formParam.defaultTeachingTime / 60).toFixed(2) }}小时</span> -->
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
@@ -222,7 +222,7 @@
</a-row> </a-row>
<a-row> <a-row>
<a-col :span="24"> <a-col :span="24">
<span class="line" style="margin-bottom:10px;"></span><span style="color:#333333;font-weight: 600;">其他信息</span> <span class="line" style="margin-bottom:24px;"></span><span style="color:#333333;font-weight: 600;font-size:16px;">其他信息</span>
</a-col> </a-col>
</a-row> </a-row>
<a-row :gutter="16"> <a-row :gutter="16">
@@ -318,7 +318,7 @@
textAlign: 'right', textAlign: 'right',
zIndex: 1, zIndex: 1,
display: 'flex', display: 'flex',
justifyContent: 'center', justifyContent: 'end',
}"> }">
<a-button class="drabtn" @click="cancelTeacherDialog">取消</a-button> <a-button class="drabtn" @click="cancelTeacherDialog">取消</a-button>
<a-button class="drabtn" type="primary" @click="createTeacherDialog" :loading="buttonLoading">保存 <a-button class="drabtn" type="primary" @click="createTeacherDialog" :loading="buttonLoading">保存
@@ -475,7 +475,7 @@ export default {
formParam: { formParam: {
name: null, name: null,
certStatus: 0,//认证状态 certStatus: 0,//认证状态
defaultTeachingTime: null, defaultTeachingTime: 0,
teacherType:1, teacherType:1,
photo: null, photo: null,
gender: 0, gender: 0,
@@ -874,6 +874,11 @@ export default {
const tableData = ref([ const tableData = ref([
]) ])
const enterPressHadlerSearch = (e) => {
if(e.keyCode==13){
searchSubmit()
}
}
// 搜索 // 搜索
const searchSubmit = () => { const searchSubmit = () => {
state.searchParam.pageNo = 1 state.searchParam.pageNo = 1
@@ -944,7 +949,7 @@ export default {
//修改讲师信息弹窗 //修改讲师信息弹窗
const handleModify = (record) => { const handleModify = (record) => {
state.teacherdialog = true; state.teacherdialog = true;
state.teacherdialogtitle = '修改信息' state.teacherdialogtitle = '编辑讲师'
state.id = record.id state.id = record.id
state.vf = false state.vf = false
TeacherSystem() TeacherSystem()
@@ -963,6 +968,7 @@ export default {
const teacherTlevel = (val) => { const teacherTlevel = (val) => {
console.log(val,'vallll') console.log(val,'vallll')
if(val?.avatar){ if(val?.avatar){
val.avatar = val.avatar.includes('upload') ? val.avatar : '/upload' + val.avatar
state.formParam.photo = val.avatar state.formParam.photo = val.avatar
} }
state.formParam.gender = val?.gender state.formParam.gender = val?.gender
@@ -1150,7 +1156,7 @@ export default {
name: null, name: null,
newdepartId: null, newdepartId: null,
tlevelId: null, tlevelId: null,
defaultTeachingTime:null, defaultTeachingTime:0,
tsystemName: null, tsystemName: null,
certStatus: 0, certStatus: 0,
description: '', description: '',
@@ -1329,6 +1335,7 @@ export default {
// PlaceOfPayList, // PlaceOfPayList,
AccountStatusList, AccountStatusList,
searchSubmit, searchSubmit,
enterPressHadlerSearch,
searchReset, searchReset,
columns, columns,
tableData, tableData,
@@ -1371,6 +1378,9 @@ export default {
}; };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.ant-form-item{
margin-bottom: 12px;
}
.headers { .headers {
height: 56px; height: 56px;
border-bottom: 1px solid #e8e8e8; border-bottom: 1px solid #e8e8e8;
@@ -1762,31 +1772,32 @@ export default {
} }
} }
.add_list{ .add_list{
width: 150%; width: 136%;
margin-right:20px;
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
margin-top: 10px; margin-top: 10px;
margin-bottom: 20px; margin-bottom: 20px;
// overflow: auto; // overflow: auto;
.add_item{ .add_item{
padding: 0 10px; padding: 5px 15px;
color: #096dd9; color: #096dd9;
background: #e6f7ff; background: #e6f7ff;
border: 1px solid #91d5ff; border: 1px solid #91d5ff;
margin-left: 10px; margin-left: 10px;
width: 66px; // width: 66px;
height: 22px; // height: 22px;
line-height: 22px; // line-height: 22px;
text-align: center; // text-align: center;
white-space: nowrap; // white-space: nowrap;
overflow: hidden; // overflow: hidden;
text-overflow: ellipsis; // text-overflow: ellipsis;
margin-bottom: 20px; margin-bottom: 20px;
font-size: 12px; font-size: 12px;
} }
.add_content { .add_content {
width: 20px; width: 30px;
height: 20px; height: 30px;
cursor: pointer; cursor: pointer;
border-radius: 50%; border-radius: 50%;
background-color: #4ea6ff; background-color: #4ea6ff;
@@ -2025,10 +2036,10 @@ export default {
.line { .line {
float: left; float: left;
width: 3px; width: 3px;
height: 17px; height: 16px;
background: #4ea6ff; background: #4ea6ff;
margin-left: -14px; margin-left: -10px;
margin-top: 3px; margin-top: 5px;
} }
//抽屉功能 //抽屉功能

View File

@@ -5,12 +5,12 @@
<div class="filter"> <div class="filter">
<a-form layout="inline" style="min-width: 1380px;"> <a-form layout="inline" style="min-width: 1380px;">
<a-form-item class="select"> <a-form-item class="select">
<a-input v-model:value="searchParam.name" style="width: 276px; height: 40px; border-radius: 8px" <a-input v-model:value="searchParam.name" style="width: 235px; height: 40px; border-radius: 8px"
placeholder="请输入工号/讲师姓名进行检索" allowClear showSearch v-on:keydown.enter="enterPressHadlerSearch"> placeholder="请输入工号/讲师姓名进行检索" allowClear showSearch v-on:keydown.enter="enterPressHadlerSearch">
</a-input> </a-input>
</a-form-item> </a-form-item>
<a-form-item class="select"> <a-form-item class="select">
<a-input v-model:value="searchParam.courseName" style="width: 276px; height: 40px; border-radius: 8px" <a-input v-model:value="searchParam.courseName" style="width: 235px; height: 40px; border-radius: 8px"
placeholder="请输入课程名称进行搜索" allowClear showSearch v-on:keydown.enter="enterPressHadlerSearch"> placeholder="请输入课程名称进行搜索" allowClear showSearch v-on:keydown.enter="enterPressHadlerSearch">
</a-input> </a-input>
</a-form-item> </a-form-item>
@@ -19,21 +19,21 @@
:placeholder="[' 开始时间', ' 结束时间']" @change="searchTimeChange" /> :placeholder="[' 开始时间', ' 结束时间']" @change="searchTimeChange" />
</a-form-item> --> </a-form-item> -->
<a-form-item class="select "> <a-form-item class="select ">
<div class="select addTimeBox"> <!-- <div class="select addTimeBox"> -->
<div class="addTime">授课日期</div> <!-- <div class="addTime">授课日期</div> -->
<a-range-picker v-model:value="searchdate" style="width: 420px" format="YYYY-MM-DD" valueFormat="YYYY-MM-DD" <a-range-picker v-model:value="searchdate" style="width: 340px !important;" format="YYYY-MM-DD" valueFormat="YYYY-MM-DD"
separator="至" :placeholder="[' 开始时间', ' 结束时间']" v-on:keydown.enter="enterPressHadlerSearch" /> separator="至" :placeholder="['授课日期开始时间', '授课日期结束时间']" v-on:keydown.enter="enterPressHadlerSearch" />
<!-- @change="searchTimeChange" --> <!-- @change="searchTimeChange" -->
</div> <!-- </div> -->
</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">
<a-select style="width: 235px ;margin-bottom:20px" v-model:value="searchParam.createFrom" placeholder="录入类型" <a-select style="width: 200px ;margin-bottom:20px" v-model:value="searchParam.createFrom" placeholder="录入类型"
:options="entryTypeList" allowClear v-on:keydown.enter="enterPressHadlerSearch"> :options="entryTypeList" allowClear v-on:keydown.enter="enterPressHadlerSearch">
</a-select> </a-select>
</a-form-item> </a-form-item>
<a-form-item class="select" v-if="moreid == 2"> <a-form-item class="select">
<a-select style="width: 235px" v-model:value="searchParam.courseStatus" placeholder="开课状态" <a-select style="width: 200px" v-model:value="searchParam.courseStatus" placeholder="开课状态"
:options="AuthenticationStatusList" a llowClear showSearch v-on:keydown.enter="enterPressHadlerSearch"> :options="AuthenticationStatusList" a llowClear showSearch v-on:keydown.enter="enterPressHadlerSearch">
</a-select> </a-select>
</a-form-item> </a-form-item>
@@ -47,7 +47,7 @@
<!-- <a-select style="width: 235px" placeholder="请选择所属组织" v-model:value="searchParam.sourceBelongId" <!-- <a-select style="width: 235px" placeholder="请选择所属组织" v-model:value="searchParam.sourceBelongId"
:options="getOrganizationList" allowClear showSearch v-on:keydown.enter="enterPressHadlerSearch"> :options="getOrganizationList" allowClear showSearch v-on:keydown.enter="enterPressHadlerSearch">
</a-select> --> </a-select> -->
<OrgClass v-model:value="searchParam.orgId" :placeholder="'请选择讲师组织'" <OrgClass @enter="searchSubmit()" v-model:value="searchParam.orgId" :placeholder="'请选择讲师组织'"
style="width: 235px" style="width: 235px"
></OrgClass> ></OrgClass>
</a-form-item> </a-form-item>
@@ -64,13 +64,13 @@
</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: 235px ; 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="请选择评分"
: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>
</a-form-item> </a-form-item>
<a-form-item class="select" v-if="moreid == 2"> <a-form-item class="select" v-if="moreid == 2">
<a-select style="width: 235px" v-model:value="searchParam.studys" placeholder="授课人数" :options="studysList" <a-select style="width: 200px" v-model:value="searchParam.studys" placeholder="授课人数" :options="studysList"
allowClear showSearch v-on:keydown.enter="enterPressHadlerSearch"> allowClear showSearch v-on:keydown.enter="enterPressHadlerSearch">
</a-select> </a-select>
<!-- <a-input v-model:value="searchParam.name" style="width: 276px; height: 40px; border-radius: 8px" <!-- <a-input v-model:value="searchParam.name" style="width: 276px; height: 40px; border-radius: 8px"
@@ -81,12 +81,12 @@
<a-button @click="searchSubmit()" type="primary" class="resetbtn">查询 </a-button> <a-button @click="searchSubmit()" type="primary" class="resetbtn">查询 </a-button>
<a-button class="resetbtn " @click="searchReset">重置</a-button> <a-button class="resetbtn " @click="searchReset">重置</a-button>
<div v-if="moreid == 1"> <div v-if="moreid == 1">
<a-button style="line-height:32px;" @click="handlemoreid()" class="moreidbtn" type="text"> 展开 <a-button style="line-height:40px;" @click="handlemoreid()" class="moreidbtn" type="text"> 展开
<DownOutlined /> <DownOutlined />
</a-button> </a-button>
</div> </div>
<div v-if="moreid == 2"> <div v-if="moreid == 2">
<a-button style="line-height:32px;" @click="handlemoreid()" class="moreidbtn"> 收起 <a-button style="line-height:40px;" @click="handlemoreid()" class="moreidbtn"> 收起
<UpOutlined /> <UpOutlined />
</a-button> </a-button>
</div> </div>
@@ -241,19 +241,19 @@
<a-col :span="12"> <a-col :span="12">
<a-form-item label="授课时长" name="teaching"> <a-form-item label="授课时长" name="teaching">
<a-input v-model:value="formParam.teaching" style="width:80%; height: 40px; border-radius: 8px ; " <a-input v-model:value="formParam.teaching" style="width:100%; height: 40px; border-radius: 8px ; "
placeholder="请输入授课时长" allowClear showSearch suffix="分钟" :maxLength="8" @blur="clearNonNumber"> placeholder="请输入授课时长" allowClear showSearch suffix="分钟" :maxLength="8" @blur="clearNonNumber">
</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
).toFixed(2) }}小时</span> ).toFixed(2) }}小时</span>
<span style="margin-left: 5px ;" v-if="formParam.teaching == null">0.00小时</span> <span style="margin-left: 5px ;" v-if="formParam.teaching == null">0.00小时</span> -->
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="12">
<a-form-item label="评分" name="score"> <a-form-item label="评分" name="score">
<!-- <a-input class="draitem" v-model:value="formParam.score" @blur="clearscoreNumber" placeholder="" allowClear showSearch> <!-- <a-input class="draitem" v-model:value="formParam.score" @blur="clearscoreNumber" placeholder="" allowClear showSearch>
</a-input> --> </a-input> -->
<a-input-number v-model:value="formParam.score" :precision="2" :min="0" :max="10" <a-input-number v-model:value="formParam.score" :precision="2" :min="0" :max="100"
style="width:100%; height: 40px; border-radius: 8px ; " placeholder="请输入评分" /> style="width:100%; height: 40px; border-radius: 8px ; " placeholder="请输入评分" />
</a-form-item> </a-form-item>
</a-col> </a-col>
@@ -487,6 +487,7 @@ export default {
teachingDate: null, teachingDate: null,
// sourceBelongId: null, // sourceBelongId: null,
sourceBelongFullName: null, sourceBelongFullName: null,
score: 0,
}, },
startTime: null, startTime: null,
searchParam: searchParam:
@@ -789,9 +790,9 @@ export default {
<div> <div>
{value.record.createdFee == 0 || value.record.createdFee == 1 {value.record.createdFee == 0 || value.record.createdFee == 1
? { ? {
"0": "", "0": "未提交",
"1": "", "1": "已提交",
}[value.record.feeCreated + ""] || "" }[value.record.createdFee + ""] || ""
: "-"} : "-"}
</div> </div>
) )
@@ -964,7 +965,7 @@ export default {
state.formParam.userNo = state.formParam.name?.split('/')[1] state.formParam.userNo = state.formParam.name?.split('/')[1]
state.formParam.tsystemName = state.tSystemNames.systemName state.formParam.tsystemName = state.tSystemNames.systemName
state.formParam.tsystemId = state.tSystemNames?.systemId state.formParam.tsystemId = state.tSystemNames?.systemId
if(state.formParam.score){ if(state.formParam.score||state.formParam.score==0){
state.formParam.score = String(state.formParam.score) state.formParam.score = String(state.formParam.score)
}else{ }else{
state.formParam.score = null state.formParam.score = null
@@ -1049,7 +1050,7 @@ export default {
courseName: null, courseName: null,
teaching: null, teaching: null,
studys: null, studys: null,
score: null, score: 0,
type: null, type: null,
remark: null, remark: null,
// sourceBelongId: null, // sourceBelongId: null,
@@ -1678,7 +1679,8 @@ export default {
.moreidbtn { .moreidbtn {
border: none; border: none;
color: #4ea6ff; color: #4ea6ff;
width: 80px // width: 80px
padding: 0;
} }
//小竖线 //小竖线

View File

@@ -1,6 +1,8 @@
<template> <template>
<a-drawer :visible="visible" placement="right" :closable="false" :maskClosable="false"
width="60%" :title="false">
<div class="appedit"> <div class="appedit">
<div class="header"> <div class="header" style="margin-top: -24px;">
<div class="headerTitle">编辑讲师费审批</div> <div class="headerTitle">编辑讲师费审批</div>
<img <img
style="width: 29px; height: 29px; cursor: pointer" style="width: 29px; height: 29px; cursor: pointer"
@@ -74,7 +76,7 @@
</div> </div>
<a-drawer v-model:visible="teacherdialog" placement="right" :closable="false" :maskClosable="false" dropdown-style="drawaer" <a-drawer v-model:visible="teacherdialog" placement="right" :closable="false" :maskClosable="false" dropdown-style="drawaer"
width="60%" :title="false"> width="60%" :title="false">
<div class="headers"> <div class="headers" style="margin-top:-24px;">
<div class="headerTitle">编辑讲师费</div> <div class="headerTitle">编辑讲师费</div>
<img <img
style="width: 29px; height: 29px; cursor: pointer" style="width: 29px; height: 29px; cursor: pointer"
@@ -236,7 +238,7 @@
<a-col :span="12"> <a-col :span="12">
<a-form-item label="应发费用" name="payableExpense"> <a-form-item label="应发费用" name="payableExpense">
<a-input-number :max="99999999" :controls="false" :min="0" :precision="2" v-model:value="formParam.payableExpense" class="draitem" <a-input-number :max="99999999" :controls="false" :min="0" :precision="2" v-model:value="formParam.payableExpense" class="draitem"
placeholder="请输入应发费用" allowClear> placeholder="请输入应发费用" @change="clearPayableExpense" allowClear>
</a-input-number> </a-input-number>
</a-form-item> </a-form-item>
</a-col> </a-col>
@@ -303,6 +305,7 @@
</div> </div>
</div> </div>
</a-modal> </a-modal>
</a-drawer>
</template> </template>
<script lang="jsx"> <script lang="jsx">
@@ -318,7 +321,17 @@ export default {
components: { components: {
SearchTeacher, SearchTeacher,
}, },
setup () { props: {
visible: {
type: Boolean,
default: false,
},
id: {
type: String,
default: "",
},
},
setup (props,emits) {
const router = useRouter() const router = useRouter()
const route = useRoute() const route = useRoute()
const state = reactive({ const state = reactive({
@@ -331,7 +344,7 @@ export default {
startTime: null, startTime: null,
endTime: null, endTime: null,
}, },
paramsId: route.query.id, paramsId: props.id,
copyName: null, copyName: null,
modalVisible: false, modalVisible: false,
tSystemNames:{ tSystemNames:{
@@ -368,17 +381,22 @@ export default {
dataList: [], dataList: [],
loading: false, loading: false,
}) })
watch(()=>props.visible, (val) => {
if(val){
queryById({id: props.id}).then(res=>{
state.formData = res.data.data
})
getTableList()
orgLists()
}
})
onMounted(()=>{ onMounted(()=>{
queryById({id: state.paramsId}).then(res=>{
state.formData = res.data.data
})
getTableList()
orgLists()
}) })
const getTableList = () => { const getTableList = () => {
state.loading = true state.loading = true
queryExpnseByBillId({ queryExpnseByBillId({
billId: state.paramsId, billId: props.id,
pageNo: state.params.pageNo, pageNo: state.params.pageNo,
pageSize: state.params.pageSize, pageSize: state.params.pageSize,
name: state.params.userNoName, name: state.params.userNoName,
@@ -431,8 +449,8 @@ export default {
dialog({ dialog({
content: '确定要重新汇总数据吗?', content: '确定要重新汇总数据吗?',
ok: () => { ok: () => {
CreateSummaryAgain(route.query.id).then(res=>{ CreateSummaryAgain(props.id).then(res=>{
queryById({id: state.paramsId}).then(res=>{ queryById({id: props.id}).then(res=>{
state.formData = res.data.data state.formData = res.data.data
}) })
search(); search();
@@ -451,11 +469,17 @@ export default {
message.error('复制失败,请重新尝试') message.error('复制失败,请重新尝试')
}); });
} }
const clearPayableExpense = () => {
state.formParam.payableExpense == 0 && (state.formParam.payableExpense = null);
state.formParam.payableExpense && (state.formParam.payableExpense = String(state.formParam.payableExpense))
}
const clearlevelPayNumber = () => { const clearlevelPayNumber = () => {
// state.formParam.levelPay = state.formParam?.levelPay.replace(/\D/g, ''); // state.formParam.levelPay = state.formParam?.levelPay.replace(/\D/g, '');
// state.formParam.expense = state.formParam?.levelPay*state.formParam?.teachingTime // state.formParam.expense = state.formParam?.levelPay*state.formParam?.teachingTime
state.formParam.levelPay == 0 && (state.formParam.levelPay = null); state.formParam.levelPay == 0 && (state.formParam.levelPay = null);
state.formParam.levelPay&&state.formParam.teachingTime && (state.formParam.expense = (state.formParam.levelPay*(state.formParam.teachingTime/60)).toFixed(2)) state.formParam.levelPay&&state.formParam.teachingTime && (state.formParam.expense = (state.formParam.levelPay*(state.formParam.teachingTime/60)).toFixed(2))
state.formParam.levelPay&&state.formParam.teachingTime && (state.formParam.payableExpense = (state.formParam.levelPay*(state.formParam.teachingTime/60)).toFixed(2))
state.formParam.levelPay&&(state.formParam.levelPay=String(state.formParam.levelPay))
} }
const clearscoreNumber= () => { const clearscoreNumber= () => {
state.formParam.score = state.formParam?.score?.replace(/\D/g, ''); state.formParam.score = state.formParam?.score?.replace(/\D/g, '');
@@ -469,6 +493,7 @@ export default {
state.formParam.teachingTime = state.formParam.teachingTime?.slice(0,8); state.formParam.teachingTime = state.formParam.teachingTime?.slice(0,8);
state.formParam.teachingTime == 0 && (state.formParam.teachingTime = null); 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)); state.formParam.teachingTime && state.formParam.levelPay && (state.formParam.expense = (state.formParam.levelPay*(state.formParam.teachingTime/60)).toFixed(2));
state.formParam.teachingTime&&state.formParam.levelPay && (state.formParam.payableExpense = (state.formParam.levelPay*(state.formParam.teachingTime/60)).toFixed(2))
} }
const courseTypeList = ref([ const courseTypeList = ref([
{ value: '0', label: "在线" }, { value: '0', label: "在线" },
@@ -536,6 +561,9 @@ export default {
if(state.formParam.levelPay){ if(state.formParam.levelPay){
state.formParam.levelPay = String(state.formParam.levelPay) state.formParam.levelPay = String(state.formParam.levelPay)
} }
if(state.formParam.payableExpense){
state.formParam.payableExpense = String(state.formParam.payableExpense)
}
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]);
@@ -604,20 +632,25 @@ export default {
score: [{ required: true, message:'',log: ' 评分不能为空' }], score: [{ required: true, message:'',log: ' 评分不能为空' }],
levelPay: [{ required: true, message:'',log: '课酬基准 不能为空' }], levelPay: [{ required: true, message:'',log: '课酬基准 不能为空' }],
expense: [{ required: true, message: '',log:'计划费用不能为空' }], expense: [{ required: true, message: '',log:'计划费用不能为空' }],
payableExpense: [{ required: true, message: '',log:'应发费用不能为空' }],
} }
const closeDrawer = () => { const closeDrawer = () => {
reset() state.params.userNoName = null
router.push({ state.params.startTime = null
path: '/lecturerfeemanagement', state.params.endTime = null
query:{activeKey:true} state.dateValue = []
}) emits.emit('update:visible',false)
// router.push({
// path: '/lecturerfeemanagement',
// query:{activeKey:true}
// })
} }
const paramsDrawer = () => { const paramsDrawer = () => {
dialog({ dialog({
content: '请仔细核对讲师费信息,确认无误后,将自动进入(BPM系统)审批流程', content: '请仔细核对讲师费信息,确认无误后,将自动进入(BPM系统)审批流程',
ok: ()=>{ ok: ()=>{
isConfirm({ isConfirm({
id: route.query.id, id: props.id,
status: 2 status: 2
}).then(res=>{ }).then(res=>{
if(res.data.code == 200){ if(res.data.code == 200){
@@ -678,7 +711,7 @@ export default {
content: '确定要移除此条数据吗?', content: '确定要移除此条数据吗?',
ok: () => { ok: () => {
withdrawRecord({ withdrawRecord({
billId: route.query.id, billId: props.id,
ids: [record.id] ids: [record.id]
}).then(res=>{ }).then(res=>{
message.success('移除成功') message.success('移除成功')
@@ -863,6 +896,7 @@ export default {
formRef, formRef,
courseTypeList, courseTypeList,
clearlevelPayNumber, clearlevelPayNumber,
clearPayableExpense,
clearscoreNumber, clearscoreNumber,
clearstudysNumber, clearstudysNumber,
clearNonNumber, clearNonNumber,
@@ -894,7 +928,7 @@ export default {
width: 200px; width: 200px;
} }
.headers { .headers {
height: 73px; height: 57px;
border-bottom: 1px solid #e8e8e8; border-bottom: 1px solid #e8e8e8;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
@@ -1043,8 +1077,8 @@ export default {
flex-direction: column; flex-direction: column;
.header { .header {
padding: 0px 32px; padding: 0px 15px;
height: 73px; height: 68px;
border-bottom: 1px solid #e8e8e8; border-bottom: 1px solid #e8e8e8;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
@@ -1088,12 +1122,18 @@ export default {
} }
} }
.table{ .table{
// padding-bottom: 70px; padding-bottom: 70px;
} }
} }
} }
.btnn { .btnn {
position: absolute;
bottom: 0;
width: 100%;
left: -6px;
z-index: 9;
background: #fff;
padding: 0px 32px; padding: 0px 32px;
min-height: 70px; min-height: 70px;
border-top: 1px solid #e6e6e6; border-top: 1px solid #e6e6e6;

View File

@@ -5,27 +5,27 @@
<div class="filter" > <div class="filter" >
<a-form layout="inline" style="min-width: 1380px;"> <a-form layout="inline" style="min-width: 1380px;">
<a-form-item class="select"> <a-form-item class="select">
<a-select style="width: 276px" v-model:value="searchParam.trainOrgId" placeholder="培训发生组织" allowClear <a-select style="width: 235px" v-model:value="searchParam.trainOrgId" placeholder="培训发生组织" allowClear
:options="trainOrglist" :options="trainOrglist"
v-on:keydown.enter="enterPressHadlerSearch"> v-on:keydown.enter="enterPressHadlerSearch">
</a-select> </a-select>
</a-form-item> </a-form-item>
<a-form-item class="select "> <a-form-item class="select ">
<div class="select addTimeBox"> <!-- <div class="select addTimeBox">
<div class="addTime" >汇总时间</div> <div class="addTime" >汇总时间</div> -->
<a-range-picker <a-range-picker
v-model:value="searchdate" v-model:value="searchdate"
style="width: 420px" style="width: 340px !important;"
format="YYYY-MM-DD" format="YYYY-MM-DD"
valueFormat="YYYY-MM-DD" valueFormat="YYYY-MM-DD"
separator="至" separator="至"
:placeholder="[' 开始时间', ' 结束时间']" :placeholder="['汇总时间开始时间', '汇总时间结束时间']"
v-on:keydown.enter="enterPressHadlerSearch" v-on:keydown.enter="enterPressHadlerSearch"
/> />
</div> <!-- </div> -->
</a-form-item> </a-form-item>
<a-form-item class="select"> <a-form-item class="select">
<a-select style="width: 230px ;margin-bottom:20px" v-model:value="searchParam.status" placeholder="请选择状态" allowClear <a-select style="width: 200px ;margin-bottom:20px" v-model:value="searchParam.status" placeholder="请选择状态" allowClear
:options="AuthenticationStatusList" :options="AuthenticationStatusList"
v-on:keydown.enter="enterPressHadlerSearch"> v-on:keydown.enter="enterPressHadlerSearch">
</a-select> </a-select>
@@ -225,6 +225,7 @@
</a-modal> </a-modal>
</div> </div>
<!-- <div> <Upload/> </div> --> <!-- <div> <Upload/> </div> -->
<LecturerAppEdit v-model:visible="editTeacherDialog" :id="editId" ></LecturerAppEdit>
</div> </div>
</template> </template>
<script lang="jsx"> <script lang="jsx">
@@ -247,6 +248,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 LecturerAppEdit from "./LecturerAPPEdit"
export default { export default {
name: "LecturerApproval", name: "LecturerApproval",
components: { components: {
@@ -256,22 +258,25 @@
DownloadOutlined,//图标-导入 DownloadOutlined,//图标-导入
FolderAddOutlined,//图标--新增 FolderAddOutlined,//图标--新增
ProjectManager, ProjectManager,
LecturerAppEdit,
}, },
setup(props,emit) { setup(props,emit) {
watch(()=>props.key,(val)=>{ watch(()=>props.key,(val)=>{
console.log(val,'valllllll') console.log(val,'valllllll')
}) })
onMounted(()=>{ onMounted(()=>{
const search = sessionStorage.getItem('searchApprlval') // const search = sessionStorage.getItem('searchApprlval')
console.log(search,'search') // console.log(search,'search')
if(search){ // if(search){
state.searchParam = JSON.parse(search) // state.searchParam = JSON.parse(search)
state.searchdate = state.searchParam.searchdate // state.searchdate = state.searchParam.searchdate
} // }
getTableDate() getTableDate()
}) })
const router = useRouter() const router = useRouter()
const state = reactive({ const state = reactive({
editId: null,
editTeacherDialog: false,
tableDataExamineLoading: false, tableDataExamineLoading: false,
tableDataExamineTwo: [], tableDataExamineTwo: [],
tableDataParams:{ tableDataParams:{
@@ -514,7 +519,7 @@
const searchSubmit = () => { const searchSubmit = () => {
state.searchParam.pageNo = 1; state.searchParam.pageNo = 1;
getTableDate(); getTableDate();
sessionStorage.removeItem('searchApprlval') // sessionStorage.removeItem('searchApprlval')
}; };
//重置 //重置
const searchReset = () => { const searchReset = () => {
@@ -534,7 +539,7 @@
pageSize: 10 , pageSize: 10 ,
}; };
getTableDate(); getTableDate();
sessionStorage.removeItem('searchApprlval') // sessionStorage.removeItem('searchApprlval')
}; };
// //修改时间 // //修改时间
// function searchTimeChange(time, timeStr) { // function searchTimeChange(time, timeStr) {
@@ -627,14 +632,16 @@
} }
} }
const goDdit = (record) => { const goDdit = (record) => {
state.searchParam.searchdate = state.searchdate state.editTeacherDialog = true
sessionStorage.setItem('searchApprlval', JSON.stringify(state.searchParam)) state.editId = record.id
router.push({ // state.searchParam.searchdate = state.searchdate
path:'/LecturerAppEdit', // sessionStorage.setItem('searchApprlval', JSON.stringify(state.searchParam))
query:{ // router.push({
id: record.id // path:'/LecturerAppEdit',
} // query:{
}) // id: record.id
// }
// })
} }
//表格内查看数据操作 //表格内查看数据操作
const handleLook = (record) => { const handleLook = (record) => {

View File

@@ -9,8 +9,8 @@
<!-- <a-input v-model:value="searchParam.name" style="width: 276px; height: 40px; border-radius: 8px" <!-- <a-input v-model:value="searchParam.name" style="width: 276px; height: 40px; border-radius: 8px"
placeholder="请输入工号/讲师姓名进行检索" allowClear showSearch> placeholder="请输入工号/讲师姓名进行检索" allowClear showSearch>
</a-input> </a-input>
--> <div style="width: 276px; height: 40px; border-radius: 8px" > --> <div style="width: 235px; height: 40px; border-radius: 8px" >
<a-input v-model:value="searchParam.name" style="width: 276px; height: 40px; border-radius: 8px" <a-input v-model:value="searchParam.name" style="width: 235px; height: 40px; border-radius: 8px"
placeholder="请输入工号/讲师姓名进行检索" allowClear showSearch placeholder="请输入工号/讲师姓名进行检索" allowClear showSearch
v-on:keydown.enter="enterPressHadlerSearch"> v-on:keydown.enter="enterPressHadlerSearch">
</a-input> </a-input>
@@ -23,38 +23,38 @@
</a-select> </a-select>
</a-form-item> </a-form-item>
<a-form-item class="select "> <a-form-item class="select ">
<div class="select addTimeBox"> <!-- <div class="select addTimeBox">
<div class="addTime" >授课日期</div> <div class="addTime" >授课日期</div> -->
<a-range-picker <a-range-picker
v-model:value="searchdate" v-model:value="searchdate"
style="width: 420px" style="width: 340px !important;"
format="YYYY-MM-DD" format="YYYY-MM-DD"
valueFormat="YYYY-MM-DD" valueFormat="YYYY-MM-DD"
separator="至" separator="至"
:placeholder="[' 开始时间', ' 结束时间']" :placeholder="['授课日期开始时间', '授课日期结束时间']"
v-on:keydown.enter="enterPressHadlerSearch" v-on:keydown.enter="enterPressHadlerSearch"
/> />
</div> <!-- </div> -->
</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.type" placeholder="请选择课程类型" allowClear <a-select style="width: 200px ;margin-bottom:20px" v-model:value="searchParam.type" placeholder="请选择课程类型" allowClear
:options="OnTheJobStatusList" :options="OnTheJobStatusList"
v-on:keydown.enter="enterPressHadlerSearch"> v-on:keydown.enter="enterPressHadlerSearch">
</a-select> </a-select>
</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.status" placeholder="请选择状态" allowClear <a-select style="width: 200px ;margin-bottom:20px" v-model:value="searchParam.status" placeholder="请选择状态" allowClear
:options="AuthenticationStatusList" :options="AuthenticationStatusList"
v-on:keydown.enter="enterPressHadlerSearch"> v-on:keydown.enter="enterPressHadlerSearch">
</a-select> </a-select>
</a-form-item> </a-form-item>
<a-form-item class="select"> <a-form-item class="select" v-if="moreid==2">
<a-select style="width: 235px ;margin-bottom:20px" placeholder="请选择讲师体系" v-model:value="searchParam.tSystemId" allowClear <a-select style="width: 235px ;margin-bottom:20px" placeholder="请选择讲师体系" v-model:value="searchParam.tSystemId" allowClear
:options="lecturerSystemList" :options="lecturerSystemList"
v-on:keydown.enter="enterPressHadlerSearch"> v-on:keydown.enter="enterPressHadlerSearch">
</a-select> </a-select>
</a-form-item> </a-form-item>
<a-form-item class="select" > <a-form-item class="select" v-if="moreid==2">
<a-select style="width: 235px ;margin-bottom:20px" v-model:value="searchParam.tLevelName" placeholder="请选择讲师级别" allowClear <a-select style="width: 235px ;margin-bottom:20px" v-model:value="searchParam.tLevelName" placeholder="请选择讲师级别" allowClear
:options="getLevelList" :options="getLevelList"
v-on:keydown.enter="enterPressHadlerSearch"> v-on:keydown.enter="enterPressHadlerSearch">
@@ -67,16 +67,16 @@
<a-button class="resetbtn " @click="searchReset">重置</a-button> <a-button class="resetbtn " @click="searchReset">重置</a-button>
<!-- 更多筛选--> <!-- 更多筛选-->
<!-- <div v-if="moreid == 1"> <div v-if="moreid == 1">
<a-button @click="handlemoreid()" class="moreidbtn" type="text"> 展开 <a-button @click="handlemoreid()" class="moreidbtn" type="text"> 展开
<RightOutlined /> <DownOutlined />
</a-button> </a-button>
</div> </div>
<div v-if="moreid == 2"> <div v-if="moreid == 2">
<a-button @click="handlemoreid()" class="moreidbtn"> 返回 <a-button @click="handlemoreid()" class="moreidbtn"> 收起
<UpOutlined /> <UpOutlined />
</a-button> </a-button>
</div> --> </div>
</div> </div>
<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">
@@ -266,7 +266,7 @@
<a-col :span="12"> <a-col :span="12">
<a-form-item label="授课/课程日期 :" name="teachingDate"> <a-form-item label="授课/课程日期 :" name="teachingDate">
<a-date-picker class="draitem" v-model:value="teachingDate" style="width:100%" :show-time="{ format: 'HH:mm' }" format="YYYY-MM-DD HH:mm" valueFormat="YYYY-MM-DD HH:mm" <a-date-picker class="draitem" v-model:value="teachingDate" style="width:100%" :show-time="{ format: 'HH:mm' }" format="YYYY-MM-DD HH:mm" valueFormat="YYYY-MM-DD HH:mm"
placeholder="请选择课程日期" /> placeholder="请选择课程日期" @select="handleSelect" />
</a-form-item> </a-form-item>
</a-col> </a-col>
</a-row> </a-row>
@@ -295,7 +295,7 @@
<a-col :span="12"> <a-col :span="12">
<a-form-item label="评分" name="score"> <a-form-item label="评分" name="score">
<a-input-number class="draitem" v-model:value="formParam.score" :defaultValue="null" :max="10" :controls="false" :min="0" :precision="2" placeholder="请输入评分" <a-input-number class="draitem" v-model:value="formParam.score" :defaultValue="null" :max="10" :controls="false" :min="0" :precision="2" placeholder="请输入评分"
allowClear > allowClear @change="scoreNumber">
</a-input-number> </a-input-number>
</a-form-item> </a-form-item>
</a-col> </a-col>
@@ -320,7 +320,7 @@
<a-col :span="12"> <a-col :span="12">
<a-form-item label="应发费用" name="payableExpense"> <a-form-item label="应发费用" name="payableExpense">
<a-input-number :max="99999999" :controls="false" :min="0" :precision="2" v-model:value="formParam.payableExpense" class="draitem" <a-input-number :max="99999999" :controls="false" :min="0" :precision="2" v-model:value="formParam.payableExpense" class="draitem"
placeholder="请输入应发费用" allowClear> placeholder="请输入应发费用" @change="clearPayableExpense" allowClear>
</a-input-number> </a-input-number>
</a-form-item> </a-form-item>
</a-col> </a-col>
@@ -449,7 +449,7 @@
import { message } from "ant-design-vue"; import { message } from "ant-design-vue";
import dayjs from "dayjs"; import dayjs from "dayjs";
import { import {
RightOutlined, DownOutlined,
UpOutlined, UpOutlined,
UploadOutlined, UploadOutlined,
FolderAddOutlined, FolderAddOutlined,
@@ -470,7 +470,7 @@
export default { export default {
name: "LecturerFee", name: "LecturerFee",
components: { components: {
RightOutlined, //图标--展开 DownOutlined, //图标--展开
UpOutlined,//图标--收起 UpOutlined,//图标--收起
UploadOutlined,//图标--导出 UploadOutlined,//图标--导出
DownloadOutlined,//图标-导入 DownloadOutlined,//图标-导入
@@ -693,9 +693,11 @@ getAllLevelList().then((res) => {
} }
else if(state.moreid == 2){ else if(state.moreid == 2){
state.moreid=1 state.moreid=1
state.searchParam.certStatus=null // state.searchParam.certStatus=null
state.searchParam.salaryName=null // state.searchParam.salaryName=null
state.searchParam.status=null // state.searchParam.status=null
state.searchParam.tSystemId = null
state.searchParam.tLevelName = null
} }
} }
const columnSee = ref([ const columnSee = ref([
@@ -1068,6 +1070,9 @@ getAllLevelList().then((res) => {
if(state.formParam.levelPay){ if(state.formParam.levelPay){
state.formParam.levelPay = String(state.formParam.levelPay) state.formParam.levelPay = String(state.formParam.levelPay)
} }
if(state.formParam.payableExpense){
state.formParam.payableExpense = String(state.formParam.payableExpense)
}
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]);
@@ -1319,6 +1324,7 @@ getAllLevelList().then((res) => {
state.formParam.teachingTime = state.formParam.teachingTime?.slice(0,8); state.formParam.teachingTime = state.formParam.teachingTime?.slice(0,8);
state.formParam.teachingTime == 0 && (state.formParam.teachingTime = null); 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)); state.formParam.teachingTime && state.formParam.levelPay && (state.formParam.expense = (state.formParam.levelPay*(state.formParam.teachingTime/60)).toFixed(2));
state.formParam.teachingTime && state.formParam.levelPay && (state.formParam.payableExpense = (state.formParam.levelPay*(state.formParam.teachingTime/60)).toFixed(2));
} }
const clearstudysNumber = () => { const clearstudysNumber = () => {
state.formParam.studys = state.formParam.studys.replace(/\D/g, ''); state.formParam.studys = state.formParam.studys.replace(/\D/g, '');
@@ -1334,14 +1340,24 @@ getAllLevelList().then((res) => {
state.formParam.payableExpense = state.formParam.payableExpense?.slice(0,8); state.formParam.payableExpense = state.formParam.payableExpense?.slice(0,8);
state.formParam.payableExpense == 0 && (state.formParam.payableExpense = null); state.formParam.payableExpense == 0 && (state.formParam.payableExpense = null);
} }
const scoreNumber = () => {
state.formParam.score&&(state.formParam.score=String(state.formParam.score))
}
const clearlevelPayNumber = () => { const clearlevelPayNumber = () => {
// state.formParam.levelPay = state.formParam.levelPay?.replace(/\D/g, ''); // state.formParam.levelPay = state.formParam.levelPay?.replace(/\D/g, '');
// state.formParam.levelPay = state.formParam.levelPay?.slice(0,8); // state.formParam.levelPay = state.formParam.levelPay?.slice(0,8);
state.formParam.levelPay == 0 && (state.formParam.levelPay = null); state.formParam.levelPay == 0 && (state.formParam.levelPay = null);
state.formParam.levelPay&&state.formParam.teachingTime && (state.formParam.expense = (state.formParam.levelPay*(state.formParam.teachingTime/60)).toFixed(2)) state.formParam.levelPay&&state.formParam.teachingTime && (state.formParam.expense = (state.formParam.levelPay*(state.formParam.teachingTime/60)).toFixed(2))
state.formParam.levelPay&&state.formParam.teachingTime && (state.formParam.payableExpense = (state.formParam.levelPay*(state.formParam.teachingTime/60)).toFixed(2))
state.formParam.levelPay&&(state.formParam.levelPay=String(state.formParam.levelPay))
}
const clearPayableExpense = () => {
state.formParam.payableExpense == 0 && (state.formParam.payableExpense = null);
state.formParam.payableExpense && (state.formParam.payableExpense = String(state.formParam.payableExpense))
} }
watch(()=>state.formParam.levelPay,(val)=>{ watch(()=>state.formParam.levelPay,(val)=>{
state.formParam.levelPay&&state.formParam.teachingTime && (state.formParam.expense = (state.formParam.levelPay*(state.formParam.teachingTime/60)).toFixed(2)) state.formParam.levelPay&&state.formParam.teachingTime && (state.formParam.expense = (state.formParam.levelPay*(state.formParam.teachingTime/60)).toFixed(2))
state.formParam.levelPay&&state.formParam.teachingTime && (state.formParam.payableExpense = (state.formParam.levelPay*(state.formParam.teachingTime/60)).toFixed(2))
}) })
const rules = { const rules = {
name: [{ required: true, message:'',log: '讲师不能为空' }], name: [{ required: true, message:'',log: '讲师不能为空' }],
@@ -1359,7 +1375,7 @@ getAllLevelList().then((res) => {
score: [{ required: true, message:'',log: ' 评分不能为空' }], score: [{ required: true, message:'',log: ' 评分不能为空' }],
levelPay: [{ required: true, message:'',log: '课酬基准不能为空' }], levelPay: [{ required: true, message:'',log: '课酬基准不能为空' }],
expense: [{ required: true, message: '',log:'计划费用不能为空' }], expense: [{ required: true, message: '',log:'计划费用不能为空' }],
payableExpense: [{ required: true, message: '',log:'应发费用不能为空' }],
} }
const handleImport = () => { const handleImport = () => {
@@ -1680,6 +1696,8 @@ const column = ref([
clearstudysNumber, clearstudysNumber,
clearscoreNumber, clearscoreNumber,
clearlevelPayNumber, clearlevelPayNumber,
scoreNumber,
clearPayableExpense,
payExpense, payExpense,
} }
}, },
@@ -1690,7 +1708,7 @@ const column = ref([
width: 410px !important; width: 410px !important;
} }
.headers { .headers {
height: 73px; height: 57px;
border-bottom: 1px solid #e8e8e8; border-bottom: 1px solid #e8e8e8;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
@@ -2005,7 +2023,9 @@ const column = ref([
.moreidbtn { .moreidbtn {
border: none; border: none;
color: #4ea6ff; color: #4ea6ff;
width: 80px // width: 80px;
line-height: 40px;
padding: 0;
} }
//小竖线 //小竖线

View File

@@ -5,13 +5,13 @@
<div class="filter" > <div class="filter" >
<a-form layout="inline"> <a-form layout="inline">
<a-form-item class="select"> <a-form-item class="select">
<a-select style="width: 276px" v-model:value="searchParam.trainOrgId" placeholder="请选择资源归属" allowClear <a-select style="width: 235px" v-model:value="searchParam.trainOrgId" placeholder="请选择资源归属" allowClear
:options="TrainOrglist" :options="TrainOrglist"
v-on:keydown.enter="enterPressHadlerSearch"/> v-on:keydown.enter="enterPressHadlerSearch"/>
</a-form-item> </a-form-item>
<a-form-item class="select " > <a-form-item class="select " >
<a-date-picker picker="month" style="width: 260px; height: 40px; border-radius: 8px" v-model:value="searchdate" <a-date-picker picker="month" style="width: 235px; height: 40px; border-radius: 8px" v-model:value="searchdate"
:placeholder="[ '请选择汇总周期']" @change="searchTimeChange" :placeholder="[ '请选择汇总周期']" @change="searchTimeChange" format="YYYY-MM" valueFormat="YYYY-MM"
v-on:keydown.enter="enterPressHadlerSearch" /> v-on:keydown.enter="enterPressHadlerSearch" />
</a-form-item > </a-form-item >
<!-- <a-form-item class="select"> <!-- <a-form-item class="select">
@@ -303,7 +303,7 @@ export default {
const getTableDate = (obj) => { const getTableDate = (obj) => {
state.tableLoading = true state.tableLoading = true
let objA = { ...state.searchParam }; let objA = { ...state.searchParam };
objA.summaryDate = state.searchdate ? dayjs(state.searchdate).format("YYYY-MM-DD") : "", objA.summaryDate = state.searchdate ? dayjs(state.searchdate).format("YYYY-MM") : "",
console.log(objA) console.log(objA)
expenseSummaryList(objA) expenseSummaryList(objA)
.then((res) => { .then((res) => {

View File

@@ -24,7 +24,7 @@
<div class="filter"> <div class="filter">
<a-form layout="inline" > <a-form layout="inline" >
<a-form-item class="select"> <a-form-item class="select">
<a-input v-model:value="searchParam.name" style="width: 276px; height: 40px; border-radius: 8px" <a-input v-model:value="searchParam.name" style="width: 235px; height: 40px; border-radius: 8px"
placeholder="请输入工号/讲师姓名进行检索" allowClear showSearch placeholder="请输入工号/讲师姓名进行检索" allowClear showSearch
v-on:keydown.enter="enterPressHadlerSearch"> v-on:keydown.enter="enterPressHadlerSearch">
</a-input> </a-input>
@@ -51,7 +51,7 @@
:tree-data="sysTypeOptions" :tree-data="sysTypeOptions"
v-on:keydown.enter="enterPressHadlerSearch"> v-on:keydown.enter="enterPressHadlerSearch">
</a-tree-select> --> </a-tree-select> -->
<a-select style="width: 230px" placeholder="请选择培训发生组织" v-model:value="searchParam.trainOrgId" <a-select style="width: 235px" placeholder="请选择培训发生组织" v-model:value="searchParam.trainOrgId"
:options="getOrganizationList"> :options="getOrganizationList">
</a-select> </a-select>
</a-form-item> </a-form-item>

View File

@@ -5,7 +5,7 @@
<a-form layout="inline"> <a-form layout="inline">
<a-form-item class="select"> <a-form-item class="select">
<div> <div>
<a-input style="width: 276px; height: 40px; border-radius: 8px" v-model:value="searchParam.name" placeholder="请输入编号/名称进行搜索" <a-input style="width: 235px; height: 40px; border-radius: 8px" v-model:value="searchParam.name" placeholder="请输入编号/名称进行搜索"
v-on:keydown.enter="enterPressHadlerSearch" /> v-on:keydown.enter="enterPressHadlerSearch" />
</div> </div>
</a-form-item> </a-form-item>
@@ -221,7 +221,7 @@
> >
<a-button class="drabtn" @click="cancelTeacherDialog" >取消</a-button> <a-button class="drabtn" @click="cancelTeacherDialog" >取消</a-button>
<a-button class="drabtn" type="primary" @click="createTeacherDialog(0)" :loading="buttonLoading">保存</a-button> <a-button class="drabtn" type="primary" @click="createTeacherDialog(0)" :loading="buttonLoading">保存</a-button>
<a-button class="drabtn" type="primary" @click="createTeacherDialog(1)" :loading="buttonLoading">提交</a-button> <a-button v-if="editParams||editIndex>1" class="drabtn" type="primary" @click="createTeacherDialog(1)" :loading="buttonLoading">提交</a-button>
</div> </div>
</a-drawer> </a-drawer>
<AddOrgContent :Addtitle="'选择组织'" v-model:showContent="showContent" v-model:AddContentList="formParam.affiliationOrgList" /> <AddOrgContent :Addtitle="'选择组织'" v-model:showContent="showContent" v-model:AddContentList="formParam.affiliationOrgList" />
@@ -252,6 +252,8 @@ export default{
setup() { setup() {
const formRef = ref(); const formRef = ref();
const state = reactive({ const state = reactive({
editParams: true,
editIndex: 0,
tableDataTotal: 0, tableDataTotal: 0,
vf:true, vf:true,
showContent: false, showContent: false,
@@ -476,7 +478,8 @@ const getTableDate = (obj) => {
getTableDate(); getTableDate();
}).catch(err=>{ }).catch(err=>{
console.log(err,'errr') console.log(err,'errr')
message.error(err.msg) message.destroy()
message.error(err.data.msg)
}) })
} }
}) })
@@ -530,6 +533,9 @@ const getTableDate = (obj) => {
watch(()=>state.teacherdialog,(val)=>{ watch(()=>state.teacherdialog,(val)=>{
if(val){ if(val){
placeData() placeData()
}else{
state.editParams = true
state.editIndex = 0
} }
}) })
const addTeacher=()=>{ const addTeacher=()=>{
@@ -548,10 +554,16 @@ const getTableDate = (obj) => {
const addContentData = () => { const addContentData = () => {
state.showContent = true state.showContent = true
} }
watch(()=>state.formParam,(val)=>{
if(!state.editParams){
state.editIndex++
}
},{deep:true})
//修改信息弹窗 //修改信息弹窗
const handleModify = (record) => { const handleModify = (record) => {
lecturer.getAffiliationById(record.id).then(res=>{ lecturer.getAffiliationById(record.id).then(res=>{
console.log(res,'resssss') console.log(res,'resssss')
state.editParams = false
state.formParam = res.data.data state.formParam = res.data.data
const actArray = res.data.data.affiliationUserList.filter(item=>item.type == 0) const actArray = res.data.data.affiliationUserList.filter(item=>item.type == 0)
const leveOneArray = res.data.data.affiliationUserList.filter(item=>item.type == 1) const leveOneArray = res.data.data.affiliationUserList.filter(item=>item.type == 1)

View File

@@ -8,7 +8,7 @@
<a-input <a-input
v-model:value="searchParam.name" v-model:value="searchParam.name"
style="width: 270px; height: 40px; border-radius: 8px" style="width: 270px; height: 40px; border-radius: 8px"
placeholder="请输入项目名称1" placeholder="请输入项目名称"
allowClear allowClear
showSearch showSearch
> >

View File

@@ -8,7 +8,7 @@
<a-input <a-input
v-model:value="searchParam.name" v-model:value="searchParam.name"
style="width: 270px; height: 40px; border-radius: 8px" style="width: 270px; height: 40px; border-radius: 8px"
placeholder="请输入项目名称1" placeholder="请输入项目名称"
allowClear allowClear
showSearch showSearch
> >