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 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)

View File

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

View File

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

View File

@@ -19,7 +19,7 @@
<!-- 讲师信息 -->
<div style="width: 100%;margin-top: 10px;">
<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
:width="55" style="border-radius: 50%;"
@@ -74,7 +74,7 @@ import { reactive, toRefs, ref,computed,watch } from "vue"
import {getTeacherById} from "../../api/Lecturer";
import { getNewInTeacherCourseList } from "../../api/Teaching";
// import boe from '@/assets/boe.jpg'
import avatar from '@/assets/avatar.png'
import avatar from '@/assets/Avatarman.png'
import dayjs from "dayjs";
export default{
name :"LookExternalLecturer",

View File

@@ -3,7 +3,7 @@
width="80%" :title="false">
<!-- 内部讲师查看详情 -->
<div class="LookInsideLecturer">
<div class="header" style="margin-top: -24px;">
<div class="header" style="margin-top: -24px;margin-left: -24px;">
<div class="headerTitle">查看讲师</div>
<!-- <router-link :to="{ path: '/lecturerList', query: { activeKey: '1', } }"> -->
<img
@@ -17,7 +17,7 @@
<!-- 讲师信息 -->
<div style="width: 100%;margin-top: 10px;padding: 20px;">
<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-image :width="55" style="border-radius: 50%;" :src=formParam.photo />
@@ -185,7 +185,7 @@ export default{
state.formParam = objA
state.formParam.photo = state.formParam.photo ==null ?
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
console.log(state.teacherrepromo.id);
isOrgNames(state.formParam.orgName)
@@ -507,7 +507,13 @@ const handleup = ()=>{
}
//小竖线
.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{
margin-bottom: 18px ;

View File

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

View File

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

View File

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

View File

@@ -6,13 +6,13 @@
<a-form layout="inline">
<a-form-item class="select">
<!-- 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
v-on:keydown.enter="enterPressHadlerSearch">
</a-input>
</a-form-item >
<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"
v-on:keydown.enter="enterPressHadlerSearch">
</a-select>
@@ -65,10 +65,10 @@
<!-- 弹窗组件 -->
<a-drawer v-model:visible="teacherdialog" placement="right" :closable="false" :maskClosable="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>
<img
style="width: 29px; height: 29px; cursor: pointer"
style="width: 29px; height: 29px; cursor: pointer;margin-right: 24px;"
src="@/assets/images/basicinfo/close.png"
@click="cancelTeacherDialog"
/>
@@ -87,7 +87,7 @@
<a-upload name="avatar" list-type="picture-card" class="avatar-uploader" :show-upload-list="false"
: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-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="addimg">
<div class="heng"></div>
@@ -139,18 +139,18 @@
</a-col>
<a-col :span="24">
<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">
</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>
<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-col>
</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>
</a-col>
</a-row>
@@ -194,7 +194,7 @@
} "
>
<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>
</div>
</a-drawer>
@@ -521,7 +521,7 @@ export default {
//修改讲师信息弹窗
const handleModify = (record) => {
state.teacherdialog = true;
state.teacherdialogtitle = '修改信息'
state.teacherdialogtitle = '编辑讲师'
state.id = record.id
state.vf = false
TeacherSystem()
@@ -826,6 +826,9 @@ export default {
};
</script>
<style lang="scss" scoped>
.ant-form-item {
margin-bottom: 12px;
}
::v-deep .ant-upload.ant-upload-select-picture-card {
border-radius: 50% !important;
width: 90px;
@@ -846,7 +849,7 @@ export default {
font-weight: 600;
color: #333333;
line-height: 25px;
// margin-left: 24px;
margin-left: 14px;
}
}
//导出按钮icon

View File

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

View File

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

View File

@@ -5,12 +5,12 @@
<div class="filter">
<a-form layout="inline" style="min-width: 1380px;">
<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">
</a-input>
</a-form-item>
<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">
</a-input>
</a-form-item>
@@ -19,21 +19,21 @@
:placeholder="[' 开始时间', ' 结束时间']" @change="searchTimeChange" />
</a-form-item> -->
<a-form-item class="select ">
<div class="select addTimeBox">
<div class="addTime">授课日期</div>
<a-range-picker v-model:value="searchdate" style="width: 420px" format="YYYY-MM-DD" valueFormat="YYYY-MM-DD"
separator="至" :placeholder="[' 开始时间', ' 结束时间']" v-on:keydown.enter="enterPressHadlerSearch" />
<!-- <div class="select addTimeBox"> -->
<!-- <div class="addTime">授课日期</div> -->
<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" />
<!-- @change="searchTimeChange" -->
</div>
<!-- </div> -->
</a-form-item>
<!-- <div style="width:100%"></div> -->
<a-form-item class="select" v-if="moreid == 2">
<a-select style="width: 235px ;margin-bottom:20px" v-model:value="searchParam.createFrom" placeholder="录入类型"
<a-form-item class="select">
<a-select style="width: 200px ;margin-bottom:20px" v-model:value="searchParam.createFrom" placeholder="录入类型"
:options="entryTypeList" allowClear v-on:keydown.enter="enterPressHadlerSearch">
</a-select>
</a-form-item>
<a-form-item class="select" v-if="moreid == 2">
<a-select style="width: 235px" v-model:value="searchParam.courseStatus" placeholder="开课状态"
<a-form-item class="select">
<a-select style="width: 200px" v-model:value="searchParam.courseStatus" placeholder="开课状态"
:options="AuthenticationStatusList" a llowClear showSearch v-on:keydown.enter="enterPressHadlerSearch">
</a-select>
</a-form-item>
@@ -47,7 +47,7 @@
<!-- <a-select style="width: 235px" placeholder="请选择所属组织" v-model:value="searchParam.sourceBelongId"
:options="getOrganizationList" allowClear showSearch v-on:keydown.enter="enterPressHadlerSearch">
</a-select> -->
<OrgClass v-model:value="searchParam.orgId" :placeholder="'请选择讲师组织'"
<OrgClass @enter="searchSubmit()" v-model:value="searchParam.orgId" :placeholder="'请选择讲师组织'"
style="width: 235px"
></OrgClass>
</a-form-item>
@@ -64,13 +64,13 @@
</a-form-item>
<!-- <div style="width: 100%;"></div> -->
<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"
v-on:keydown.enter="enterPressHadlerSearch">
</a-select>
</a-form-item>
<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">
</a-select>
<!-- <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 class="resetbtn " @click="searchReset">重置</a-button>
<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 />
</a-button>
</div>
<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 />
</a-button>
</div>
@@ -241,19 +241,19 @@
<a-col :span="12">
<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">
</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>
<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-col>
<a-col :span="12">
<a-form-item label="评分" name="score">
<!-- <a-input class="draitem" v-model:value="formParam.score" @blur="clearscoreNumber" placeholder="" allowClear showSearch>
</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="请输入评分" />
</a-form-item>
</a-col>
@@ -487,6 +487,7 @@ export default {
teachingDate: null,
// sourceBelongId: null,
sourceBelongFullName: null,
score: 0,
},
startTime: null,
searchParam:
@@ -789,9 +790,9 @@ export default {
<div>
{value.record.createdFee == 0 || value.record.createdFee == 1
? {
"0": "",
"1": "",
}[value.record.feeCreated + ""] || ""
"0": "未提交",
"1": "已提交",
}[value.record.createdFee + ""] || ""
: "-"}
</div>
)
@@ -964,7 +965,7 @@ export default {
state.formParam.userNo = state.formParam.name?.split('/')[1]
state.formParam.tsystemName = state.tSystemNames.systemName
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)
}else{
state.formParam.score = null
@@ -1049,7 +1050,7 @@ export default {
courseName: null,
teaching: null,
studys: null,
score: null,
score: 0,
type: null,
remark: null,
// sourceBelongId: null,
@@ -1678,7 +1679,8 @@ export default {
.moreidbtn {
border: none;
color: #4ea6ff;
width: 80px
// width: 80px
padding: 0;
}
//小竖线

View File

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

View File

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

View File

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

View File

@@ -5,13 +5,13 @@
<div class="filter" >
<a-form layout="inline">
<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"
v-on:keydown.enter="enterPressHadlerSearch"/>
</a-form-item>
<a-form-item class="select " >
<a-date-picker picker="month" style="width: 260px; height: 40px; border-radius: 8px" v-model:value="searchdate"
:placeholder="[ '请选择汇总周期']" @change="searchTimeChange"
<a-date-picker picker="month" style="width: 235px; height: 40px; border-radius: 8px" v-model:value="searchdate"
:placeholder="[ '请选择汇总周期']" @change="searchTimeChange" format="YYYY-MM" valueFormat="YYYY-MM"
v-on:keydown.enter="enterPressHadlerSearch" />
</a-form-item >
<!-- <a-form-item class="select">
@@ -303,7 +303,7 @@ export default {
const getTableDate = (obj) => {
state.tableLoading = true
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)
expenseSummaryList(objA)
.then((res) => {

View File

@@ -24,7 +24,7 @@
<div class="filter">
<a-form layout="inline" >
<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">
</a-input>
@@ -51,7 +51,7 @@
:tree-data="sysTypeOptions"
v-on:keydown.enter="enterPressHadlerSearch">
</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">
</a-select>
</a-form-item>

View File

@@ -5,7 +5,7 @@
<a-form layout="inline">
<a-form-item class="select">
<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" />
</div>
</a-form-item>
@@ -221,7 +221,7 @@
>
<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(1)" :loading="buttonLoading">提交</a-button>
<a-button v-if="editParams||editIndex>1" class="drabtn" type="primary" @click="createTeacherDialog(1)" :loading="buttonLoading">提交</a-button>
</div>
</a-drawer>
<AddOrgContent :Addtitle="'选择组织'" v-model:showContent="showContent" v-model:AddContentList="formParam.affiliationOrgList" />
@@ -252,6 +252,8 @@ export default{
setup() {
const formRef = ref();
const state = reactive({
editParams: true,
editIndex: 0,
tableDataTotal: 0,
vf:true,
showContent: false,
@@ -476,7 +478,8 @@ const getTableDate = (obj) => {
getTableDate();
}).catch(err=>{
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)=>{
if(val){
placeData()
}else{
state.editParams = true
state.editIndex = 0
}
})
const addTeacher=()=>{
@@ -548,10 +554,16 @@ const getTableDate = (obj) => {
const addContentData = () => {
state.showContent = true
}
watch(()=>state.formParam,(val)=>{
if(!state.editParams){
state.editIndex++
}
},{deep:true})
//修改信息弹窗
const handleModify = (record) => {
lecturer.getAffiliationById(record.id).then(res=>{
console.log(res,'resssss')
state.editParams = false
state.formParam = res.data.data
const actArray = res.data.data.affiliationUserList.filter(item=>item.type == 0)
const leveOneArray = res.data.data.affiliationUserList.filter(item=>item.type == 1)

View File

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

View File

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