Merge branch '250213-prod-master_1202-gx' into master_1202

This commit is contained in:
joshen
2025-02-26 17:50:41 +08:00
23 changed files with 8080 additions and 5444 deletions

View File

@@ -1,2 +1,3 @@
NODE_ENV=test NODE_ENV=test
VUE_APP_BOE_API_URL=//u-pre.boe.com VUE_APP_BOE_API_URL=//u-pre.boe.com
VUE_APP_BASE_API=/manageApi

21
package-lock.json generated
View File

@@ -3727,8 +3727,6 @@
"resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.12.0.tgz", "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.12.0.tgz",
"integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
"dev": true, "dev": true,
"optional": true,
"peer": true,
"dependencies": { "dependencies": {
"fast-deep-equal": "^3.1.1", "fast-deep-equal": "^3.1.1",
"json-schema-traverse": "^1.0.0", "json-schema-traverse": "^1.0.0",
@@ -3740,9 +3738,7 @@
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
"dev": true, "dev": true
"optional": true,
"peer": true
}, },
"node_modules/ajv-keywords": { "node_modules/ajv-keywords": {
"version": "3.5.2", "version": "3.5.2",
@@ -14457,6 +14453,7 @@
"integrity": "sha512-yl+5qhpjd8e1G4cMXfORkkBlvtPCIgmRf3IYCWYDKIQ7m+PPa5iTm4feiNmCMD6yGqQWMhhK/7M3oWGL9boKwg==", "integrity": "sha512-yl+5qhpjd8e1G4cMXfORkkBlvtPCIgmRf3IYCWYDKIQ7m+PPa5iTm4feiNmCMD6yGqQWMhhK/7M3oWGL9boKwg==",
"dev": true, "dev": true,
"requires": { "requires": {
"@babel/core": "^7.12.16",
"@babel/helper-compilation-targets": "^7.12.16", "@babel/helper-compilation-targets": "^7.12.16",
"@babel/helper-module-imports": "^7.12.13", "@babel/helper-module-imports": "^7.12.13",
"@babel/plugin-proposal-class-properties": "^7.12.13", "@babel/plugin-proposal-class-properties": "^7.12.13",
@@ -14469,6 +14466,7 @@
"@vue/babel-plugin-jsx": "^1.0.3", "@vue/babel-plugin-jsx": "^1.0.3",
"@vue/babel-preset-jsx": "^1.1.2", "@vue/babel-preset-jsx": "^1.1.2",
"babel-plugin-dynamic-import-node": "^2.3.3", "babel-plugin-dynamic-import-node": "^2.3.3",
"core-js": "^3.8.3",
"core-js-compat": "^3.8.3", "core-js-compat": "^3.8.3",
"semver": "^7.3.4" "semver": "^7.3.4"
}, },
@@ -15334,14 +15332,15 @@
"resolved": "https://registry.npmmirror.com/ajv-formats/-/ajv-formats-2.1.1.tgz", "resolved": "https://registry.npmmirror.com/ajv-formats/-/ajv-formats-2.1.1.tgz",
"integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
"dev": true, "dev": true,
"requires": {}, "requires": {
"ajv": "^8.0.0"
},
"dependencies": { "dependencies": {
"ajv": { "ajv": {
"version": "https://registry.npmmirror.com/ajv/-/ajv-8.12.0.tgz", "version": "8.12.0",
"resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.12.0.tgz",
"integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
"dev": true, "dev": true,
"optional": true,
"peer": true,
"requires": { "requires": {
"fast-deep-equal": "^3.1.1", "fast-deep-equal": "^3.1.1",
"json-schema-traverse": "^1.0.0", "json-schema-traverse": "^1.0.0",
@@ -15353,9 +15352,7 @@
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
"dev": true, "dev": true
"optional": true,
"peer": true
} }
} }
}, },

View File

@@ -75,6 +75,13 @@ export const affiliationDelById = (id)=>http.post(`/admin/affiliation/delById?id
export const isEnable = (obj) => http.post(`/admin/affiliation/isEnable`,obj) export const isEnable = (obj) => http.post(`/admin/affiliation/isEnable`,obj)
//撤回培训发生组织 //撤回培训发生组织
export const affiliatIsConfirm = (id) => http.post(`/admin/affiliation/isConfirm?id=${id}`) export const affiliatIsConfirm = (id) => http.post(`/admin/affiliation/isConfirm?id=${id}`)
//删除 待提交 ,拒绝 的培训发生组织
export const affiliatRemoveById = (id) => http.post(`/admin/affiliation/removeById?id=${id}`)
//讲师费统计详情 //讲师费统计详情
export const expenseSummaryById = (obj) => http.get( `/admin/expenseSummary/queryById?id=${obj.id}&name=${obj.name}&trainOrgId=${obj.trainOrgId||''}&pageNo=${obj.pageNo}&pageSize=${obj.pageSize}`) export const expenseSummaryById = (obj) => http.get( `/admin/expenseSummary/queryById?id=${obj.id}&name=${obj.name}&trainOrgId=${obj.trainOrgId||''}&pageNo=${obj.pageNo}&pageSize=${obj.pageSize}`)
//撤回讲师费统计详情 //撤回讲师费统计详情

View File

@@ -23,8 +23,14 @@ export const importTeacherCourseRecord = (obj) => http.post('/importTeacherCours
export const getAddress = (obj) => http.post('/admin/teacher/getAddress', obj) export const getAddress = (obj) => http.post('/admin/teacher/getAddress', obj)
//讲师费发放情况 //讲师费发放情况
export const getCharges = (obj) => http.post('/teacher/fee/getCharges', obj) export const getCharges = (obj) => http.post('/teacher/fee/getCharges', obj)
//讲师费发放情况
export const exportTeacherExpense = (obj) => http.get('/admin/export/exportExpenseTemplate', {params: obj})
//上传组件 //上传组件
export const teacherUpload = (data) => export const teacherUpload = (data) =>
http.post("/admin/teacher/teacherUpload", data, { http.post("/admin/teacher/teacherUpload", data, {
headers: { "Content-Type": "multipart/form-data",token:getCookieForName("token") }, headers: { "Content-Type": "multipart/form-data",token:getCookieForName("token") },
}); });

View File

@@ -13,7 +13,7 @@ export const addTeacherFee= (obj) => http.post('/admin/teacherExpense/addTeacher
export const deleteInTeacher= (obj) => http.post(`/admin/teacher/delByIdr?id=${obj}`) export const deleteInTeacher= (obj) => http.post(`/admin/teacher/delByIdr?id=${obj}`)
//修改讲师费信息 //修改讲师费信息
export const updateTeacherFee= (obj) => http.post('/admin/teacherExpense/editTeacherExpense',obj) export const updateTeacherFee= (obj) => http.post('/admin/teacherExpense/editTeacherExpense',obj)
//修改讲师费状态提交 //修改讲师费状态提交/admin/expenseBill
export const updateStatusSubmit= (obj) => http.post('/admin/teacherExpense/confirm',obj) export const updateStatusSubmit= (obj) => http.post('/admin/teacherExpense/confirm',obj)
//修改讲师费状态撤回 //修改讲师费状态撤回
export const approveTeacherFee= (obj) => http.post('/admin/teacherExpense/withdraw',obj) export const approveTeacherFee= (obj) => http.post('/admin/teacherExpense/withdraw',obj)
@@ -57,5 +57,7 @@ export const CreateSummary= () => http.post('/admin/expenseBill/CreateSummary')
export const queryExpnseByBillId= (obj) => http.get('/admin/expenseBill/queryExpnseByBillId',{params:obj}) export const queryExpnseByBillId= (obj) => http.get('/admin/expenseBill/queryExpnseByBillId',{params:obj})
// //
export const CreateSummaryAgain= (id) => http.post(`/admin/expenseBill/createSummaryAgain?billId=${id}`) export const CreateSummaryAgain= (id) => http.post(`/admin/expenseBill/createSummaryAgain?billId=${id}`)
//删除 费用审批删除
export const expenseBillDelById = (id)=>http.post(`/admin/expenseBill/delById?id=${id}`)
// //
export const submitApproval= (obj) => http.post('/admin/expenseBill/submitApproval',obj) export const submitApproval= (obj) => http.post('/admin/expenseBill/submitApproval',obj)

View File

@@ -22,7 +22,11 @@
<div class="main"> <div class="main">
<div class="minatitl"> <div class="minatitl">
<div class="up1">请下载</div> <div class="up1">请下载</div>
<div class="up2" @click="downTemplate" style="cursor: pointer"> <div
class="up2"
@click="downTemplate"
style="cursor: pointer"
>
模板 模板
</div> </div>
<div class="up1">按要求填写数据并导入</div> <div class="up1">按要求填写数据并导入</div>
@@ -31,18 +35,28 @@
<div class="text">上传</div> <div class="text">上传</div>
<div class="right"> <div class="right">
<div style="height: 176px; margin-bottom: 20px"> <div style="height: 176px; margin-bottom: 20px">
<a-upload-dragger v-model:fileList="fileList" :action="importHomeWork" name="uploadFile" <a-upload-dragger
v-model:fileList="fileList"
:action="importHomeWork"
name="uploadFile"
:headers="headers" :headers="headers"
@change="handleChange" :showUploadList="false"> @change="handleChange"
:showUploadList="false"
>
<p class="ant-upload-drag-icon"> <p class="ant-upload-drag-icon">
<inbox-outlined></inbox-outlined> <inbox-outlined></inbox-outlined>
</p> </p>
<p class="ant-upload-text">点击或将文件拖拽到此处上传</p> <p class="ant-upload-text">
点击或将文件拖拽到此处上传
</p>
<p class="ant-upload-hint">支持扩展名.xls/.xlsx</p> <p class="ant-upload-hint">支持扩展名.xls/.xlsx</p>
</a-upload-dragger> </a-upload-dragger>
</div> </div>
<div class="loadstate"> <div class="loadstate">
<div class="loadborder" v-if="uploadpercent < 100 && uploadpercent !== -1"> <div
class="loadborder"
v-if="uploadpercent < 100 && uploadpercent !== -1"
>
<div class="content"> <div class="content">
<div class="img"></div> <div class="img"></div>
<div class="timebox"> <div class="timebox">
@@ -52,8 +66,7 @@
</div> </div>
<a-progress :percent="uploadpercent" /> <a-progress :percent="uploadpercent" />
</div> </div>
<div class="curloading"> <div class="curloading"></div>
</div>
</div> </div>
</div> </div>
<div class="loadborder" v-if="uploadErr"> <div class="loadborder" v-if="uploadErr">
@@ -90,7 +103,11 @@
<a-progress :percent="uploadpercent" /> <a-progress :percent="uploadpercent" />
</div> </div>
<div class="curloading"> <div class="curloading">
<div class="cancel" style="margin-left: 20px; cursor: pointer" @click="removeUpload"> <div
class="cancel"
style="margin-left: 20px; cursor: pointer"
@click="removeUpload"
>
删除 删除
</div> </div>
</div> </div>
@@ -101,25 +118,43 @@
</div> </div>
</div> </div>
</div> </div>
<div v-if="uploadpercent === 100" class="defeat" style=" <!-- <div
v-if="uploadpercent === 100"
class="defeat"
style="
display: flex; display: flex;
align-items: center; align-items: center;
width: 500px; width: 500px;
height: 40px;" :style="{ height: 40px;
"
:style="{
background: errNum background: errNum
? 'rgba(255, 116, 116, 0.1)' ? 'rgba(255, 116, 116, 0.1)'
: 'rgba(53, 174, 105, 0.1)', : 'rgba(53, 174, 105, 0.1)',
border: errNum ? '1px solid #ff7474' : '1px solid #35AE69', border: errNum
}"> ? '1px solid #ff7474'
<img style="width: 14px; height: 14px; margin-left: 16px" :src=" : '1px solid #35AE69',
}"
>
<img
style="width: 14px; height: 14px; margin-left: 16px"
:src="
errNum errNum
? require('../../assets/images/err.png') ? require('../../assets/images/err.png')
: require('../../assets/images/success.png') : require('../../assets/images/success.png')
" /> "
<div style="margin-left: 8px" :style="{ color: errNum ? '#ff7474' : 'rgba(0,0,0,0.65)' }"> /> -->
{{ succNum }}条数据导入成功{{ errNum }}条数据导入失败 <!-- <div
</div> style="margin-left: 8px"
</div> :style="{
color: errNum ? '#ff7474' : 'rgba(0,0,0,0.65)',
}"
>
{{ succNum }}条数据导入成功{{
errNum
}}条数据导入失败
</div> -->
<!-- </div> -->
</div> </div>
</div> </div>
</div> </div>
@@ -138,15 +173,14 @@
<script> <script>
import { reactive, toRefs, watch, ref, computed } from "vue"; import { reactive, toRefs, watch, ref, computed } from "vue";
import { exportTeacherExpense } from "../../api/Teaching";
import { message } from "ant-design-vue"; import { message } from "ant-design-vue";
import { useStore } from "vuex"; import { useStore } from "vuex";
import * as api from "../../api/index1"; import * as api from "../../api/index1";
import { getCookieForName } from "@/api/method"; import { getCookieForName } from "@/api/method";
export default { export default {
name: "importWork", name: "importWork",
components: { components: {},
},
props: { props: {
showWork: { showWork: {
type: Boolean, type: Boolean,
@@ -168,8 +202,7 @@ import {getCookieForName} from "@/api/method";
setup(props, ctx) { setup(props, ctx) {
const state = reactive({ const state = reactive({
fileType: ["xls", "xlsx"], fileType: ["xls", "xlsx"],
importHomeWork: importHomeWork: process.env.VUE_APP_BASE_API + props.url,
process.env.VUE_APP_BASE_API + props.url,
uploadpercent: -1, uploadpercent: -1,
uploadErr: false, //上传失败 uploadErr: false, //上传失败
addLoading: false, addLoading: false,
@@ -213,7 +246,7 @@ import {getCookieForName} from "@/api/method";
state.uploadpercent = parseInt(info.file.percent); state.uploadpercent = parseInt(info.file.percent);
console.log("我是文件上传的进度---------->", info.file.percent); console.log("我是文件上传的进度---------->", info.file.percent);
const status = info.file.status; const status = info.file.status;
console.log(info.file,'status') console.log(info.file, "status");
if (status !== "uploading") { if (status !== "uploading") {
// console.log(info.file, info.fileList); // console.log(info.file, info.fileList);
} }
@@ -226,7 +259,7 @@ import {getCookieForName} from "@/api/method";
} else { } else {
state.uploadErr = true; state.uploadErr = true;
state.fileList = []; state.fileList = [];
state.uploadpercent = -1 state.uploadpercent = -1;
message.destroy(); message.destroy();
message.error(info.file.response.msg); message.error(info.file.response.msg);
} }
@@ -295,7 +328,13 @@ import {getCookieForName} from "@/api/method";
} }
}; };
function downTemplate() { function downTemplate() {
window.open(`${process.env.VUE_APP_BOE_API_URL}/upload/template/${props.template}`); console.log("downTemplate gx")
window.open(
`${process.env.VUE_APP_BASE_API}${props.template}`
);
// window.open(`${process.env.VUE_APP_BOE_API_URL}/upload/template/${props.template}`);
} }
return { return {
@@ -308,7 +347,7 @@ import {getCookieForName} from "@/api/method";
downloadEeeorData, downloadEeeorData,
}; };
}, },
} };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>

View File

@@ -195,7 +195,11 @@ watch(()=>props.visible,(val)=>{
} }
).then(res=>{ ).then(res=>{
if(res.data.code === 200){ if(res.data.code === 200){
forData.value = res.data.data forData.value = res.data.data;
//todo1 , 只有一个处理 初始化 处理数据 ,进行 激活处理
if(forData.value.length == 1){
activeList.value.push(0);
}
forData.value.forEach((item,i) => { forData.value.forEach((item,i) => {
searchConditions.value.push({ nameUserNo: '', dateValue: [] }); searchConditions.value.push({ nameUserNo: '', dateValue: [] });
expenseList.value.push(forData.value[i]?.expenseList || []) expenseList.value.push(forData.value[i]?.expenseList || [])

View File

@@ -1,16 +1,13 @@
<template> <template>
<a-drawer class="largeDrawerInside" :visible="visible" placement="right" :closable="false" <a-drawer class="largeDrawerInside" :visible="visible" placement="right" :closable="false" width="80%" :title="false"
width="80%" :title="false" @close="handleClose"> @close="handleClose">
<!-- 内部讲师查看详情 --> <!-- 内部讲师查看详情 -->
<div class="LookInsideLecturer"> <div class="LookInsideLecturer">
<div class="header" style="margin-top: -24px;margin-left: -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 @click="handleClose" style="width: 29px; height: 29px; cursor: pointer"
@click="handleClose" src="../../assets/images/basicinfo/close.png" />
style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png"
/>
<!-- </router-link> --> <!-- </router-link> -->
</div> </div>
<a-layout-content> <a-layout-content>
@@ -22,8 +19,12 @@
<a-descriptions-item label="讲师头像"> <a-descriptions-item label="讲师头像">
<a-image :width="55" style="border-radius: 50%;width:55px;height:55px;" :src=formParam.photo /> <a-image :width="55" style="border-radius: 50%;width:55px;height:55px;" :src=formParam.photo />
</a-descriptions-item> </a-descriptions-item>
<a-descriptions-item label="讲师姓名"><div style="user-select:text">{{formParam.name}} / {{formParam.userNo}}</div></a-descriptions-item> <a-descriptions-item label="讲师姓名">
<a-descriptions-item label="讲师体系"><div style="user-select:text">{{formParam.tsystemName || '-'}}</div></a-descriptions-item> <div style="user-select:text">{{ formParam.name }} / {{ formParam.userNo }}</div>
</a-descriptions-item>
<a-descriptions-item label="讲师体系">
<div style="user-select:text">{{ formParam.tsystemName || '-' }}</div>
</a-descriptions-item>
<!-- 二层 --> <!-- 二层 -->
<a-descriptions-item label="讲师级别">{{ formParam.tlevelName || '-' }}</a-descriptions-item> <a-descriptions-item label="讲师级别">{{ formParam.tlevelName || '-' }}</a-descriptions-item>
<a-descriptions-item label="认证状态">{{ formParam.certStatus == 0 ? '未认证' : formParam.certStatus == 1 ? '已认证' : '-' }} <a-descriptions-item label="认证状态">{{ formParam.certStatus == 0 ? '未认证' : formParam.certStatus == 1 ? '已认证' : '-' }}
@@ -32,13 +33,17 @@
@click="handleup">查看认证资料</a-button> @click="handleup">查看认证资料</a-button>
</span> </span>
</a-descriptions-item> </a-descriptions-item>
<a-descriptions-item label="授课时长"> <span v-if="formParam.teaching!= null" >{{formParam.teaching}}分钟({{ (Number(formParam.teaching) /60 ).toFixed(2)}}小时)</span><span v-else>-</span> <a-descriptions-item label="授课时长"> <span v-if="formParam.teaching != null">{{ formParam.teaching }}分钟({{
(Number(formParam.teaching) / 60).toFixed(2)}}小时)</span><span v-else>-</span>
</a-descriptions-item> </a-descriptions-item>
<a-descriptions-item label="发薪地 ">{{ formParam.salaryName || '-' }}</a-descriptions-item> <a-descriptions-item label="发薪地 ">{{ formParam.salaryName || '-' }}</a-descriptions-item>
<!-- 三层 --> <!-- 三层 -->
<a-descriptions-item label="在职状态">{{formParam.waitStatus=='0'?'在职' :formParam.waitStatus=='1' ?'离职':'-'}}</a-descriptions-item> <a-descriptions-item label="在职状态">{{ formParam.waitStatus == '0' ? '在职' : formParam.waitStatus == '1'
<a-descriptions-item label="账号状态">{{formParam.status=='0'?'临时' :formParam.status=='1' ?'启用':formParam.status==2 ?'停用':'-'}}</a-descriptions-item> ?'离职':'-'}}</a-descriptions-item>
<a-descriptions-item label="录入方式">{{formParam.createFrom=='0'?'自动录入' :formParam.createFrom=='1'?'手动录入':'-'}}</a-descriptions-item> <a-descriptions-item label="账号状态">{{ formParam.status == '0' ? '临时' : formParam.status == '1'
? '启用' : formParam.status == 2 ?'停用':'-'}}</a-descriptions-item>
<a-descriptions-item label="录入方式">{{ formParam.createFrom == '0' ? '自动录入'
: formParam.createFrom == '1' ? '手动录入':'-'}}</a-descriptions-item>
<a-descriptions-item style="max-width: 400px;" label="所属组织"> <a-descriptions-item style="max-width: 400px;" label="所属组织">
<span :title="formParam.orgName" style="user-select:text">{{ formParam.orgName || '-' }}</span> <span :title="formParam.orgName" style="user-select:text">{{ formParam.orgName || '-' }}</span>
</a-descriptions-item> </a-descriptions-item>
@@ -48,19 +53,23 @@
<a-descriptions title="其他信息" bordered :column="4" :contentStyle="rowCenter" :labelStyle="rowCenters"> <a-descriptions title="其他信息" bordered :column="4" :contentStyle="rowCenter" :labelStyle="rowCenters">
<!-- 一层 --> <!-- 一层 -->
<a-descriptions-item style="max-width: 200px;" label="讲师介绍" :span="4"> <a-descriptions-item style="max-width: 200px;" label="讲师介绍" :span="4">
<div v-if="formParam.description !=null&&resp(formParam.description)" style="min-width: 500px;" v-html="formParam.description" ></div> <div v-if="formParam.description != null && resp(formParam.description)" style="min-width: 500px;"
v-html="formParam.description"></div>
<div v-else>-</div> <div v-else>-</div>
</a-descriptions-item> </a-descriptions-item>
<a-descriptions-item label="工作职责" :span="4"> <a-descriptions-item label="工作职责" :span="4">
<div v-if="formParam.workExperience !=null&&resp(formParam.workExperience)" style="min-width: 500px;" v-html="formParam.workExperience" ></div> <div v-if="formParam.workExperience != null && resp(formParam.workExperience)" style="min-width: 500px;"
v-html="formParam.workExperience"></div>
<div v-else>-</div> <div v-else>-</div>
</a-descriptions-item> </a-descriptions-item>
<a-descriptions-item label="擅长课程" :span="4"> <a-descriptions-item label="擅长课程" :span="4">
<div v-if="formParam.courses !=null&&resp(formParam.courses)" style="min-width: 500px;" v-html="formParam.courses" ></div> <div v-if="formParam.courses != null && resp(formParam.courses)" style="min-width: 500px;"
v-html="formParam.courses"></div>
<div v-else>-</div> <div v-else>-</div>
</a-descriptions-item> </a-descriptions-item>
<a-descriptions-item label="教师专长" :span="4"> <a-descriptions-item label="教师专长" :span="4">
<a-tag v-if="formParam.expertiseNames" color="blue" style="margin-right:10px" v-for="item in formParam.expertiseNames?.split(',')">{{item}}</a-tag> <a-tag v-if="formParam.expertiseNames" color="blue" style="margin-right:10px"
v-for="item in formParam.expertiseNames?.split(',')">{{ item }}</a-tag>
<span v-else>-</span> <span v-else>-</span>
</a-descriptions-item> </a-descriptions-item>
</a-descriptions> </a-descriptions>
@@ -69,42 +78,26 @@
<a-tabs v-model:activeKey="activeKey"> <a-tabs v-model:activeKey="activeKey">
<a-tab-pane key="1" tab="授课记录"> <a-tab-pane key="1" tab="授课记录">
<a-table :header-cell-style="{ 'text-align': 'center' }" :columns="teacherrecordsColumns" <a-table :header-cell-style="{ 'text-align': 'center' }" :columns="teacherrecordsColumns"
:data-source="teacherrecordstableData" :loading="teacherrecordsLoading" :scroll="{ x: '1000' }"
:data-source="teacherrecordstableData" :loading="teacherrecordsLoading" :scroll="{ x: '1000' }" :pagination="pagination"> :pagination="pagination">
</a-table> </a-table>
<div style="float: right;"> <div style="float: right;">
<a-pagination <a-pagination v-if="tableDataTotal > 10" :showSizeChanger="true" :showQuickJumper="false"
v-if="tableDataTotal > 10" :hideOnSinglePage="false" :pageSize="searchParam.pageSize" :current="searchParam.pageNo"
:showSizeChanger="true" :total="tableDataTotal" class="pagination" @change="changePagination" />
:showQuickJumper="false"
:hideOnSinglePage="false"
:pageSize="searchParam.pageSize"
:current="searchParam.pageNo"
:total="tableDataTotal"
class="pagination"
@change="changePagination"
/>
</div> </div>
</a-tab-pane> </a-tab-pane>
<a-tab-pane key="2" tab="晋级记录"> <a-tab-pane key="2" tab="晋级记录">
<a-table :header-cell-style="{ 'text-align': 'center' }" style="border: 1px solid #f2f6fe" :columns="promotionrecordsColumns" <a-table :header-cell-style="{ 'text-align': 'center' }" style="border: 1px solid #f2f6fe"
:columns="promotionrecordsColumns" :data-source="promotionrecordstableData"
:data-source="promotionrecordstableData" :loading="promotionrecordsLoading" @expand="expandTable" :pagination="false"> :loading="promotionrecordsLoading" @expand="expandTable" :pagination="false">
<template #bodyCell="{ record, column, index }"> <template #bodyCell="{ record, column, index }">
</template> </template>
</a-table> </a-table>
<div style="float: right;"> <div style="float: right;">
<a-pagination <a-pagination v-if="teacherrepromotableDataTotal > 10" :showSizeChanger="true" :showQuickJumper="false"
v-if="teacherrepromotableDataTotal > 10" :hideOnSinglePage="true" :pageSize="teacherrepromo.pageSize" :current="teacherrepromo.pageNo"
:showSizeChanger="true" :total="teacherrepromotableDataTotal" class="pagination" @change="teacherrepromoPagination" />
:showQuickJumper="false"
:hideOnSinglePage="true"
:pageSize="teacherrepromo.pageSize"
:current="teacherrepromo.pageNo"
:total="teacherrepromotableDataTotal"
class="pagination"
@change="teacherrepromoPagination"
/>
</div> </div>
</a-tab-pane> </a-tab-pane>
</a-tabs> </a-tabs>
@@ -444,9 +437,15 @@ export default{
// } // }
// getSysTypeMap() // getSysTypeMap()
const handleup = () => { const handleup = () => {
window.open ( let url = "";
`${process.env.VUE_APP_BOE_API_URL}/upload${state.formParam.certification}` if(state.formParam.certification != null && state.formParam.certification != undefined && state.formParam.certification != ''){
); if(state.formParam.certification.includes("/upload")){
url = `${process.env.VUE_APP_BOE_API_URL}${state.formParam.certification}`
}else{
url = `${process.env.VUE_APP_BOE_API_URL}/upload${state.formParam.certification}`
}
}
window.open(url);
} }
return { return {
...toRefs(state), ...toRefs(state),
@@ -478,6 +477,7 @@ window.open (
<style lang="scss" scoped> <style lang="scss" scoped>
.LookInsideLecturer { .LookInsideLecturer {
padding: 24px; padding: 24px;
.header { .header {
padding: 0px 32px; padding: 0px 32px;
height: 73px; height: 73px;
@@ -497,6 +497,7 @@ padding:24px;
// margin-left: 24px; // margin-left: 24px;
} }
} }
width: 100%; width: 100%;
height: 100%; height: 100%;
display: flex; display: flex;
@@ -509,12 +510,14 @@ flex-direction: column;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
flex-wrap: wrap; flex-wrap: wrap;
.select { .select {
margin-right: 20px; margin-right: 20px;
margin-bottom: 20px; margin-bottom: 20px;
} }
} }
} }
.backbtn { .backbtn {
float: right; float: right;
margin-right: 20px; margin-right: 20px;
@@ -523,6 +526,7 @@ color: #4ea6ff;
width: 80px; width: 80px;
height: 64px height: 64px
} }
//小竖线 //小竖线
.line { .line {
float: left; float: left;
@@ -533,9 +537,11 @@ border-radius: 30%;
margin-left: -10px; margin-left: -10px;
margin-top: 5px; margin-top: 5px;
} }
::v-deep .ant-descriptions-header { ::v-deep .ant-descriptions-header {
margin-bottom: 18px; margin-bottom: 18px;
} }
.goback { .goback {
float: right; float: right;
padding-right: 70px; padding-right: 70px;
@@ -559,6 +565,7 @@ margin-top: 5px;
font-size: 14px; font-size: 14px;
} }
} }
.moreidbtn { .moreidbtn {
border: none; border: none;
color: #4ea6ff; color: #4ea6ff;
@@ -572,18 +579,23 @@ margin-top: -2px;
::v-deep .ant-select-multiple .ant-select-selection-item { ::v-deep .ant-select-multiple .ant-select-selection-item {
height: 34px height: 34px
} }
.tableBox { .tableBox {
padding-bottom: 20px; padding-bottom: 20px;
margin: 20px 38px 30px; margin: 20px 38px 30px;
::v-deep .ant-select-dropdown { ::v-deep .ant-select-dropdown {
display: inline-block; display: inline-block;
} }
::v-deep .ant-select-selection-item { ::v-deep .ant-select-selection-item {
margin-left: 3px; margin-left: 3px;
} }
::v-deep .ant-pagination-options-size-changer.ant-select { ::v-deep .ant-pagination-options-size-changer.ant-select {
width: 84px; width: 84px;
} }
.pa { .pa {
width: 100%; width: 100%;
display: flex; display: flex;

View File

@@ -32,31 +32,38 @@ import { getTeacherList } from "@/api/Lecturer";
const props = defineProps({ const props = defineProps({
value: { value: {
type: String, type: String,
default: '' default: "",
}, },
name: { name: {
type: String, type: String,
default: '' default: "",
},
supplier: {
type: String,
default: ""
}, },
mobile: { mobile: {
type: String, type: String,
default: '' default: "",
}, },
disabled: Boolean, disabled: Boolean,
placeholder: { placeholder: {
type: String, type: String,
default: "请输入搜索关键字", default: "请输入搜索关键字",
}, },
mode: String mode: String,
}) });
const selectOptions = ref([]) const selectOptions = ref([]);
const managerArray = computed(() => props.value === '' ? null : props.value) // const supplier = ref('')
const emit = defineEmits({})
const isOpen = ref(false) const managerArray = computed(() => (props.value === "" ? null : props.value));
const emit = defineEmits({});
const isOpen = ref(false);
function debounce(func, wait) { function debounce(func, wait) {
let timeout; let timeout;
return function (...args) { return function (...args) {
@@ -64,28 +71,38 @@ function debounce(func, wait) {
timeout = setTimeout(() => func.apply(this, args), wait); timeout = setTimeout(() => func.apply(this, args), wait);
}; };
} }
const memberParam = ref({name: '', pageNo:1, pageSize: 999,teacherType:2 ,status:1}) const memberParam = ref({
name: "",
pageNo: 1,
pageSize: 999,
teacherType: 2,
status: 1,
});
const userList = ref([]) const userList = ref([]);
const loading = ref(false) const loading = ref(false);
const getOutTeacher = () => { const getOutTeacher = () => {
getTeacherList(memberParam.value).then(res=>{ getTeacherList(memberParam.value).then((res) => {
if (res.data.code == 200) { if (res.data.code == 200) {
userList.value = res.data.data.records userList.value = res.data.data.records;
loading.value = false loading.value = false;
} }
}) }).catch(error=>{
} console.log("ProjectManagerOutTeacher getTeacherList error ",error);
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+ '(' +e.supplier + ')', label: e.name + "/" + e.supplier,
value: e.name, value: e.name,
supplier: e.supplier,
...e, ...e,
audienceList: null audienceList: null,
}))) }))
);
watch(props, init) watch(props, init);
function init() { function init() {
//第一次进来 编辑赋值 //第一次进来 编辑赋值
@@ -95,46 +112,47 @@ function init() {
} }
onMounted(() => { onMounted(() => {
console.log('onMounted') console.log("onMounted");
init() init();
getOutTeacher() getOutTeacher();
}) });
const memberScroll = ({
const memberScroll = ({target: {scrollHeight, scrollTop, clientHeight}}) => { target: { scrollHeight, scrollTop, clientHeight },
scrollHeight === (clientHeight + scrollTop) && memberParam.value.pageNo++ }) => {
scrollHeight === clientHeight + scrollTop && memberParam.value.pageNo++;
}; };
const debounceObject = debounce(getOutTeacher,1000) const debounceObject = debounce(getOutTeacher, 1000);
//搜索学员 //搜索学员
const searchMember = (keyword) => { const searchMember = (keyword) => {
console.log('searchMember', keyword) console.log("searchMember", keyword);
loading.value = true loading.value = true;
isOpen.value = true isOpen.value = true;
userList.value = [] userList.value = [];
memberParam.value.pageNo = 1 memberParam.value.pageNo = 1;
memberParam.value.teacherType=2 memberParam.value.teacherType = 2;
memberParam.value.name = keyword memberParam.value.name = keyword;
console.log('searchMember', memberParam.value) console.log("searchMember", memberParam.value);
debounceObject() debounceObject();
}; };
function blur() { function blur() {
isOpen.value = false isOpen.value = false;
memberParam.value.name = '' memberParam.value.name = "";
memberParam.value.pageNo = 1 memberParam.value.pageNo = 1;
memberParam.value.teacherType=2 memberParam.value.teacherType = 2;
} }
function change(e, l) { function change(e, l) {
memberParam.value.name = '' memberParam.value.name = "";
memberParam.value.teacherType=2 memberParam.value.teacherType = 2;
memberParam.value.pageNo = 1 memberParam.value.pageNo = 1;
isOpen.value = false isOpen.value = false;
Array.isArray(l) && (selectOptions.value = l) Array.isArray(l) && (selectOptions.value = l);
Array.isArray(selectOptions.value) && emit('onChange', e, l) Array.isArray(selectOptions.value) && emit("onChange", e, l);
emit('update:name', l?.label) emit("update:name", l?.label);
emit('update:value', l?.value) emit("update:value", l?.value);
emit('update:mobile', l?.label) emit("update:supplier", l?.supplier);
emit("update:mobile", l?.label);
} }
</script> </script>

View File

@@ -78,11 +78,11 @@
</a-tabs> </a-tabs>
</div> </div>
</div> </div>
<div class="btnn" v-if="formData?.status==1||formData?.status==4"> <!-- <div class="btnn" v-if="formData?.status==1||formData?.status==4"> -->
<!-- <button class="btn2" @click="closeDrawer">取消</button> <!-- <button class="btn2" @click="closeDrawer">取消</button>
<button class="btn2" @click="closeDrawer">确定</button> --> <button class="btn2" @click="closeDrawer">确定</button> -->
<button class="btn2" @click="confirm">撤销编辑内容</button> <!-- <button class="btn2" @click="confirm">撤销编辑内容</button> -->
</div> <!-- </div> -->
</div> </div>
<a-modal :footer="null" width="800px" v-model:visible="visibleModal" title="审批记录详情"> <a-modal :footer="null" width="800px" v-model:visible="visibleModal" title="审批记录详情">
<div style="margin: 20px;padding-bottom: 20px;"> <div style="margin: 20px;padding-bottom: 20px;">

View File

@@ -815,7 +815,7 @@ export default {
//导出功能 //导出功能
const handleExport = () => { const handleExport = () => {
window.open( window.open(
`${process.env.VUE_APP_BASE_API}/admin/export/exportOutTeacher?name=${state.searchParam.name || ""}&status=${state.searchParam.status || ""}` `${process.env.VUE_APP_BASE_API}/admin/export/exportOutTeacher?name=${state.searchParam.name || ""}&status=${state.searchParam.status || ""}&teacherType=${state.searchParam.teacherType || ""}`
); );
// this.download('lesson_records/export', { // this.download('lesson_records/export', {
// ...state.searchParam // ...state.searchParam

View File

@@ -146,7 +146,6 @@
<!--讲师名称 teacherName 内容分类 coursetypeid --> <!--讲师名称 teacherName 内容分类 coursetypeid -->
<a-row :gutter="16"> <a-row :gutter="16">
<a-col :span="12"> <a-col :span="12">
<a-form-item name="teacherName"> <a-form-item name="teacherName">
<template v-slot:label> <template v-slot:label>
<img <img
@@ -158,6 +157,7 @@
</template> </template>
<ProjectManagerOutTeacher v-model:value="formParam.name" <ProjectManagerOutTeacher v-model:value="formParam.name"
v-model:name="formParam.teacherName" v-model:name="formParam.teacherName"
v-model:supplier="formParam.supplier"
placeholder="请输入工号/讲师姓名进行检索" placeholder="请输入工号/讲师姓名进行检索"
@onChange="managerChange"></ProjectManagerOutTeacher> @onChange="managerChange"></ProjectManagerOutTeacher>
@@ -165,6 +165,21 @@
placeholder="请输入讲师姓名"></a-input> --> placeholder="请输入讲师姓名"></a-input> -->
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="12">
<a-form-item name="supplier">
<template v-slot:label>
<img style="margin-right:4px;width: 7px;height: 7px"
src="@/assets/images/coursewareManage/asterisk.png" alt="" />
供应商
</template>
<!-- TODO GX01 -->
<a-input class="draitem" v-model:value="formParam.supplier" disabled :maxlength="20" showCount >
</a-input>
</a-form-item>
</a-col>
</a-row>
<!-- 课程名称name 开课状态 courseStatus-->
<a-row :gutter="16">
<a-col :span="12"> <a-col :span="12">
<a-form-item name="courseTypeId"> <a-form-item name="courseTypeId">
<template v-slot:label> <template v-slot:label>
@@ -187,9 +202,6 @@
</a-tree-select> </a-tree-select>
</a-form-item> </a-form-item>
</a-col> </a-col>
</a-row>
<!-- 课程名称name 开课状态 courseStatus-->
<a-row :gutter="16">
<a-col :span="12"> <a-col :span="12">
<a-form-item name="courseName"> <a-form-item name="courseName">
<template v-slot:label> <template v-slot:label>
@@ -212,6 +224,10 @@
</a-radio-group> </a-radio-group>
</a-form-item> </a-form-item>
</a-col> --> </a-col> -->
</a-row>
<!-- 授课日期 teachingDate 授课时长defaultTeachingTime-->
<a-row :gutter="16">
<a-col :span="12"> <a-col :span="12">
<a-form-item name="teachingDate"> <a-form-item name="teachingDate">
<template v-slot:label> <template v-slot:label>
@@ -226,10 +242,6 @@
placeholder="请选择课程日期" /> placeholder="请选择课程日期" />
</a-form-item> </a-form-item>
</a-col> </a-col>
</a-row>
<!-- 授课日期 teachingDate 授课时长defaultTeachingTime-->
<a-row :gutter="16">
<a-col :span="12"> <a-col :span="12">
<a-form-item name="teaching"> <a-form-item name="teaching">
<template v-slot:label> <template v-slot:label>
@@ -249,6 +261,9 @@
<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>
<!-- 参训人数 studys评分 score-->
<a-row :gutter="16">
<a-col :span="12"> <a-col :span="12">
<a-form-item name="studys"> <a-form-item name="studys">
<template v-slot:label> <template v-slot:label>
@@ -264,10 +279,6 @@
</a-input> </a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
</a-row>
<!-- 参训人数 studys评分 score-->
<a-row :gutter="16">
<a-col :span="12"> <a-col :span="12">
<a-form-item name="score"> <a-form-item name="score">
<template v-slot:label> <template v-slot:label>
@@ -327,8 +338,9 @@
</div> </div>
<a-descriptions bordered :column="2" :contentStyle="rowCenter" :labelStyle="{'width':'160px'}"> <a-descriptions bordered :column="2" :contentStyle="rowCenter" :labelStyle="{'width':'160px'}">
<a-descriptions-item label="讲师名称">{{ formParam.teacherName ||'-'}}</a-descriptions-item> <a-descriptions-item label="讲师名称">{{ formParam.teacherName ||'-'}}</a-descriptions-item>
<a-descriptions-item label="供应商">{{ formParam.supplier || '-' }}</a-descriptions-item>
<a-descriptions-item label="手机号码">{{ formParam.mobile ||'-'}}</a-descriptions-item> <a-descriptions-item label="手机号码">{{ formParam.mobile ||'-'}}</a-descriptions-item>
<a-descriptions-item label="课程类型">{{ formParam.type == 0 ? '在线课' : formParam.type == 1 ? '面授课' : formParam.type == 2 ? '手动录入' : '-' <a-descriptions-item label="课程类型">{{ formParam.type == 0 ? '在线课' : formParam.type == 1 ? '面授课' : formParam.type == 2 ? '训练班' : formParam.type == 5 ? '手动录入' : '-'
}}</a-descriptions-item> }}</a-descriptions-item>
<a-descriptions-item label="课程名称">{{ formParam.courseName ||'-'}}</a-descriptions-item> <a-descriptions-item label="课程名称">{{ formParam.courseName ||'-'}}</a-descriptions-item>
<a-descriptions-item label="开课状态">{{ formParam.courseStatus == 0 ? '未开课' : formParam.courseStatus == 1 <a-descriptions-item label="开课状态">{{ formParam.courseStatus == 0 ? '未开课' : formParam.courseStatus == 1
@@ -389,7 +401,8 @@
</a-modal> </a-modal>
</div> </div>
<!-- <div> <ImageUpload/> </div> --> <!-- <div> <ImageUpload/> </div> -->
<ImportWork v-model:showWork="showWork" :template="'外部讲师授课记录导入模版-20250115.xlsx'" :url="'/admin/export/importOutTeacherRecord'" :title="title"></ImportWork> <ImportWork v-model:showWork="showWork" :template="'/admin/export/exportRecordTemplate'"
:url="'/admin/export/importOutTeacherRecord'" :title="title"></ImportWork>
</div> </div>
</template> </template>
<script lang="jsx"> <script lang="jsx">
@@ -590,7 +603,8 @@ export default {
? { ? {
"0": "在线课", "0": "在线课",
"1": "面授课", "1": "面授课",
"2": "手动录入", "2": "训练班",
"5": "手动录入",
}[value.record.type + ""] }[value.record.type + ""]
: "-"} : "-"}
</div> </div>

View File

@@ -82,7 +82,9 @@
<template #content> <template #content>
<p>{{ record.orgName}}</p> <p>{{ record.orgName}}</p>
</template> --> </template> -->
<div style="max-width: 180px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;user-select:text" :title="record.orgName">{{ record.neworganizationName }}</div> <div
style="max-width: 180px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;user-select:text"
:title="record.orgName">{{ record.neworganizationName }}</div>
<!-- </a-popover> --> <!-- </a-popover> -->
</a-space> </a-space>
</template> </template>
@@ -90,12 +92,17 @@
<a-space> <a-space>
<a-button type="link" @click="() => handleLook(record, String(record.courseform))">查看</a-button> <a-button type="link" @click="() => handleLook(record, String(record.courseform))">查看</a-button>
<a-button v-if="(record.isPermission==='true'||record.isSuperPermission==='true')&&checkMenu('lecturerEdit')" type="link" @click="() => handleModify(record, String(record.courseform))">编辑</a-button> <a-button
<a-button v-if="record.status == '1'&&(record.isPermission==='true'||record.isSuperPermission==='true')&&checkMenu('lecturerStop')" type="link" v-if="(record.isPermission === 'true' || record.isSuperPermission === 'true') && checkMenu('lecturerEdit')"
@click="() => handleOperate(record, String(record.courseform))">停用</a-button> type="link" @click="() => handleModify(record, String(record.courseform))">编辑</a-button>
<a-button v-if="record.status == '2'&&(record.isPermission==='true'||record.isSuperPermission==='true')&&checkMenu('lecturerStop')" type="link" <a-button
@click="() => handleOperate(record, String(record.courseform))">启用</a-button> v-if="record.status == '1' && (record.isPermission === 'true' || record.isSuperPermission === 'true') && checkMenu('lecturerStop')"
<a-button v-if="record.isSuperPermission==='true'&&checkMenu('lecturerDel')" type="link" @click="() => deleteModal(record, String(record.courseform))">删除</a-button> type="link" @click="() => handleOperate(record, String(record.courseform))">停用</a-button>
<a-button
v-if="record.status == '2' && (record.isPermission === 'true' || record.isSuperPermission === 'true') && checkMenu('lecturerStop')"
type="link" @click="() => handleOperate(record, String(record.courseform))">启用</a-button>
<a-button v-if="record.isSuperPermission === 'true' && checkMenu('lecturerDel')" type="link"
@click="() => deleteModal(record, String(record.courseform))">删除</a-button>
<!-- <a-button type="link" @click="() => deleteModal(record, String(record.courseform))" <!-- <a-button type="link" @click="() => deleteModal(record, String(record.courseform))"
 v-if="lecturerAdmin('Lecturer-admin')">删除</a-button> -->  v-if="lecturerAdmin('Lecturer-admin')">删除</a-button> -->
</a-space> </a-space>
@@ -108,23 +115,20 @@
<div class="tableBox "> <div class="tableBox ">
<div class="pa"> <div class="pa">
<a-pagination v-if="tableDataTotal > 10" :showSizeChanger="true" :showQuickJumper="false" <a-pagination v-if="tableDataTotal > 10" :showSizeChanger="true" :showQuickJumper="false"
:hideOnSinglePage="true" :pageSize="searchParam.pageSize" :current="searchParam.pageNo" :total="tableDataTotal" :hideOnSinglePage="true" :pageSize="searchParam.pageSize" :current="searchParam.pageNo"
class="pagination" @change="changePagination" /> :total="tableDataTotal" class="pagination" @change="changePagination" />
</div> </div>
</div> </div>
<!-- 弹窗组件 --> <!-- 弹窗组件 -->
<a-drawer class="largeDrawerInside" v-model:visible="teacherdialog" placement="right" :closable="false" :maskClosable="false" <a-drawer class="largeDrawerInside" v-model:visible="teacherdialog" placement="right" :closable="false"
width="700" :title="false"> :maskClosable="false" width="700" :title="false">
<div style="padding:24px"> <div style="padding: 24px;">
<div class="headers" style="margin-top:-24px;margin-left: -25px;width: 110%;"> <div class="headers" style="margin-top:-24px;margin-left: -25px;width: 110%;margin-left: -24px;">
<div class="headerTitle" style="margin-left: 14px;">{{ teacherdialogtitle }}</div> <div class="headerTitle">{{ teacherdialogtitle }}</div>
<img <img style="width: 29px; height: 29px; cursor: pointer;margin-right: 24px;"
style="width: 29px; height: 29px; cursor: pointer;margin-right: 24px;" src="@/assets/images/basicinfo/close.png" @click="cancelTeacherDialog" />
src="@/assets/images/basicinfo/close.png"
@click="cancelTeacherDialog"
/>
</div> </div>
<div ref="drawerContent" style="padding-left: 15px;padding-right: 46px;min-width:760px;"> <div ref="drawerContent" style="padding-left: 15px;padding-right: 150px;min-width:760px;">
<a-form :model="formParam" layout="vertical" ref="formRef"> <a-form :model="formParam" layout="vertical" ref="formRef">
<a-row> <a-row>
<a-col :span="24"> <a-col :span="24">
@@ -135,11 +139,14 @@
<a-col :span="24"> <a-col :span="24">
<div class="item_inp" style="background-color: #fff;"> <div class="item_inp" style="background-color: #fff;">
<div style="width:120px;margin:0 auto;" @click="avatarChange"> <div style="width:120px;margin:0 auto;" @click="avatarChange">
<a-upload :disabled="!formParam.name" name="avatar" list-type="picture-card" class="avatar-uploader" :show-upload-list="false" <a-upload :disabled="!formParam.name" name="avatar" list-type="picture-card" class="avatar-uploader"
:headers="headers" :before-upload="beforeUpload"> :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-if="formParam.photo" :src="formParam.photo" alt="avatar"
<img class="i_upload_img" v-else-if="formParam.gender==1" src="../../assets/Avatarman.png" alt="avatar" title="更换头像" /> 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 == 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/Avatarman.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">
@@ -161,15 +168,15 @@
<a-col :span="24"> <a-col :span="24">
<a-form-item name="name"> <a-form-item name="name">
<template v-slot:label> <template v-slot:label>
<img <img style="margin-right:4px;width: 7px;height: 7px"
style="margin-right:4px;width: 7px;height: 7px" src="@/assets/images/coursewareManage/asterisk.png" alt="" />
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
讲师姓名 讲师姓名
</template> </template>
<SearchTeacher @tlevel="teacherTlevel" :lecturer="true" :disabled="!!id" v-model:value="formParam.name" v-model:lable="formParam.orgNames" v-model:orgId="formParam.orgId" v-model:id="formParam.id" <!-- TODO GX01 -->
v-model:system="tSystemNames" v-model:level="formParam.tlevelId"></SearchTeacher> <SearchTeacher @tlevel="teacherTlevel" :lecturer="true" :disabled="!!id"
v-model:value="formParam.name" v-model:lable="formParam.orgNames" v-model:orgId="formParam.orgId"
v-model:id="formParam.id" v-model:system="tSystemNames" v-model:level="formParam.tlevelId">
</SearchTeacher>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
@@ -188,18 +195,15 @@
<a-col :span="24"> <a-col :span="24">
<a-form-item name="tsystemName"> <a-form-item name="tsystemName">
<template v-slot:label> <template v-slot:label>
<img <img style="margin-right:4px;width: 7px;height: 7px"
style="margin-right:4px;width: 7px;height: 7px" src="@/assets/images/coursewareManage/asterisk.png" alt="" />
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
讲师体系 讲师体系
</template> </template>
<!-- <a-select class="draitem" v-model:value="formParam.tsystemName" placeholder="请选择讲师体系" allowClear <!-- <a-select class="draitem" v-model:value="formParam.tsystemName" placeholder="请选择讲师体系" allowClear
@change="changetlevel" .:options="LecturerSystemList"> @change="changetlevel" .:options="LecturerSystemList">
</a-select> --> </a-select> -->
<a-input disabled v-model:value="tSystemNames.systemName" class="draitem" <a-input disabled v-model:value="tSystemNames.systemName" class="draitem" placeholder="自动带出讲师的体系"
placeholder="自动带出讲师的体系" allowClear showSearch> allowClear showSearch>
</a-input> </a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
@@ -207,11 +211,8 @@
<!-- <div @click="handleformlevel"> --> <!-- <div @click="handleformlevel"> -->
<a-form-item name="tlevelId"> <a-form-item name="tlevelId">
<template v-slot:label> <template v-slot:label>
<img <img style="margin-right:4px;width: 7px;height: 7px"
style="margin-right:4px;width: 7px;height: 7px" src="@/assets/images/coursewareManage/asterisk.png" alt="" />
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
讲师级别 讲师级别
</template> </template>
<a-select class="draitem" v-model:value="formParam.tlevelId" placeholder="请选择讲师级别" allowClear disableda <a-select class="draitem" v-model:value="formParam.tlevelId" placeholder="请选择讲师级别" allowClear disableda
@@ -224,16 +225,13 @@
<a-col :span="24"> <a-col :span="24">
<a-form-item name="defaultTeachingTime"> <a-form-item name="defaultTeachingTime">
<template v-slot:label> <template v-slot:label>
<img <img style="margin-right:4px;width: 7px;height: 7px"
style="margin-right:4px;width: 7px;height: 7px" src="@/assets/images/coursewareManage/asterisk.png" alt="" />
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
初始授课时长 初始授课时长
</template> </template>
<a-input v-model:value="formParam.defaultTeachingTime" style="width:100%; height: 40px; border-radius: 8px; " <a-input v-model:value="formParam.defaultTeachingTime"
:maxLength="8" style="width:100%; height: 40px; border-radius: 8px; " :maxLength="8" @change="clearNonNumber"
@change="clearNonNumber" @blur="blurNumber" @focus="focusNumber" placeholder="请输入初始授课时长" allowClear suffix="分钟"> @blur="blurNumber" @focus="focusNumber" 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">{{
@@ -255,7 +253,8 @@
</a-row> </a-row>
<a-row> <a-row>
<a-col :span="24"> <a-col :span="24">
<span class="line" style="margin-bottom:24px;"></span><span style="color:#333333;font-weight: 600;font-size:16px;">其他信息</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">
@@ -300,15 +299,8 @@
</a-row> </a-row>
</a-form> </a-form>
<div> <div>
<a-modal <a-modal v-model:visible="updialog" :footer="null" closable="false" style="margin-top: 400px"
v-model:visible="updialog" @cancel="cancelupdialog" :maskClosable="false" :destroyOnClose="true">
:footer="null"
closable="false"
style="margin-top: 400px"
@cancel="cancelupdialog"
:maskClosable="false"
:destroyOnClose="true"
>
<div class="selectonlineface" style="width: 660px;" :style="{ display: updialog ? 'block' : 'none' }"> <div class="selectonlineface" style="width: 660px;" :style="{ display: updialog ? 'block' : 'none' }">
<div class="bg_headers"></div> <div class="bg_headers"></div>
<div class="bg_main"> <div class="bg_main">
@@ -320,18 +312,16 @@
<a-form style="margin-top:30px ;"> <a-form style="margin-top:30px ;">
<a-form-item style="color: #999999;">注意 :文件支持PDFPNGJPG ,文件大小不可超过5MB</a-form-item> <a-form-item style="color: #999999;">注意 :文件支持PDFPNGJPG ,文件大小不可超过5MB</a-form-item>
<a-form-item label="上传文件"> <a-form-item label="上传文件">
<UploadDragger :size="5000000" ref="uploadRef" style="width:86%;height:148px;" @change="changeUpload" :accept="accept" <UploadDragger :size="5000000" ref="uploadRef" style="width:86%;height:148px;"
@removeList="removeList" :uploadUrl="uploadUrl" :params="folderId" :loadTrue="formParam.certificationName" /> @change="changeUpload" :accept="accept" @removeList="removeList" :uploadUrl="uploadUrl"
:params="folderId" :loadTrue="formParam.certificationName" />
</a-form-item> </a-form-item>
</a-form> </a-form>
<div class="bg_footer" style="margin-left: 160px;margin-top: 30px"> <div class="bg_footer" style="margin-left: 160px;margin-top: 30px">
<div class="btn btn6" @click="cancelupdialog"> <div class="btn btn6" @click="cancelupdialog">
<div class="btnText">取消</div> <div class="btnText">取消</div>
</div> </div>
<a-button <a-button class="btn btn6" @click="createupdialog">
class="btn btn6"
@click="createupdialog"
>
确定 确定
</a-button> </a-button>
</div> </div>
@@ -657,8 +647,10 @@ export default {
let obj = { let obj = {
pageNo: 1, pageNo: 1,
pageSize: 1000, pageSize: 1000,
isView: 1
} }
getTeacherSystemList(obj).then((res) => { getTeacherSystemList(obj).then((res) => {
console.log("getTeacherSystemList res.data.data.records",res.data.data.records)
if (res.data.code === 200) { if (res.data.code === 200) {
let arr = res.data.data.records; let arr = res.data.data.records;
let array = []; let array = [];
@@ -1353,19 +1345,21 @@ export default {
} }
//导出功能 //导出功能
const handleExport = () => { const handleExport = () => {
console.log("handleExport state.searchParam",state.searchParam)
window.open( window.open(
`${process.env.VUE_APP_BASE_API}/admin/export/exportInTeacher?name=${state.searchParam.name || ""}&tSystemId=${state.searchParam.tSystemId || ""}&tLevelName=${state.searchParam.tLevelName || "" }&waitStatus=${state.searchParam.waitStatus || ""}&certStatus=${state.searchParam.certStatus || ""}&courses=${state.searchParam.courses || ""}` `${process.env.VUE_APP_BASE_API}/admin/export/exportInTeacher?name=${state.searchParam.name || ""}&tSystemId=${state.searchParam.tSystemId || ""}&tLevelName=${state.searchParam.tLevelName || ""}&waitStatus=${state.searchParam.waitStatus || ""}&certStatus=${state.searchParam.certStatus || ""}&courses=${state.searchParam.courses || ""}&teacherType=${state.searchParam.teacherType || ""}`
); );
// this.download('lesson_records/export', { // this.download('lesson_records/export', {
// ...state.searchParam // ...state.searchParam
// }, `project_${new Date().getTime()}.xlsx` ) // }, `project_${new Date().getTime()}.xlsx` )
} }
const lecturerAdmin = (admin) => { const lecturerAdmin = (admin) => {
        const roleCode = userInfo.value.roleList.map((item)=>item.roleCode) const roleCode = userInfo.value.roleList.map((item) => item.roleCode)
        if (admin){ if (admin) {
          return roleCode.some(t => t == admin) return roleCode.some(t => t == admin)
        } }
      } }
return { return {
...toRefs(state), ...toRefs(state),
lecturerAdmin, lecturerAdmin,
@@ -1456,6 +1450,7 @@ export default {
// margin-bottom: 12px; // margin-bottom: 12px;
// height: 40px; // height: 40px;
} }
.headers { .headers {
height: 56px; height: 56px;
border-bottom: 1px solid #e8e8e8; border-bottom: 1px solid #e8e8e8;
@@ -1471,9 +1466,10 @@ export default {
font-weight: 600; font-weight: 600;
color: #333333; color: #333333;
line-height: 25px; line-height: 25px;
// margin-left: 24px; margin-left: 24px;
} }
} }
.selectonlineface { .selectonlineface {
z-index: 999; z-index: 999;
width: 679px; width: 679px;
@@ -1483,24 +1479,26 @@ export default {
left: 50%; left: 50%;
top: -100%; top: -100%;
transform: translate(-50%, -50%); transform: translate(-50%, -50%);
.bg_headers { .bg_headers {
position: absolute; position: absolute;
width: 100%; width: 100%;
height: 40px; height: 40px;
background: linear-gradient( background: linear-gradient(rgba(78, 166, 255, 0.2) 0%,
rgba(78, 166, 255, 0.2) 0%, rgba(78, 166, 255, 0) 100%);
rgba(78, 166, 255, 0) 100%
);
} }
.bg_main { .bg_main {
width: 100%; width: 100%;
position: relative; position: relative;
.bg_main_header { .bg_main_header {
display: flex; display: flex;
align-items: center; align-items: center;
padding-top: 20px; padding-top: 20px;
padding-left: 26px; padding-left: 26px;
font-size: 16px; font-size: 16px;
.bg_main_header_icon { .bg_main_header_icon {
width: 16px; width: 16px;
height: 16px; height: 16px;
@@ -1508,6 +1506,7 @@ export default {
background-image: url(@/assets/images/evaluation/uploads.png); background-image: url(@/assets/images/evaluation/uploads.png);
background-size: 100% 100%; background-size: 100% 100%;
} }
.bg_main_header_close { .bg_main_header_close {
position: absolute; position: absolute;
right: 42px; right: 42px;
@@ -1518,9 +1517,11 @@ export default {
background-size: 100% 100%; background-size: 100% 100%;
} }
} }
.text_color { .text_color {
color: #d9d9d9; color: #d9d9d9;
} }
.bg_body { .bg_body {
width: 80%; width: 80%;
margin: 3px auto; margin: 3px auto;
@@ -1536,6 +1537,7 @@ export default {
display: flex; display: flex;
justify-content: end; justify-content: end;
margin-right: 20px; margin-right: 20px;
.bg_body_btimg { .bg_body_btimg {
width: 10px; width: 10px;
height: 10px; height: 10px;
@@ -1544,15 +1546,21 @@ export default {
background-size: 100% 100%; background-size: 100% 100%;
} }
} }
.mbl_items12 { .mbl_items12 {
width: 333px; width: 333px;
margin-left: 128px; margin-left: 128px;
.item_text { .item_text {
width: 300px; width: 300px;
white-space: nowrap; /* 不换行 */ white-space: nowrap;
overflow: hidden; /* 超出部分隐藏 */ /* 不换行 */
text-overflow: ellipsis; /* 使用省略号表示被隐藏的部分 */ overflow: hidden;
/* 超出部分隐藏 */
text-overflow: ellipsis;
/* 使用省略号表示被隐藏的部分 */
} }
.i12_box1 { .i12_box1 {
display: flex; display: flex;
align-items: center; align-items: center;
@@ -1614,6 +1622,7 @@ export default {
background-color: #4ea6ff; background-color: #4ea6ff;
border-radius: 3px; border-radius: 3px;
} }
.updataxq1 { .updataxq1 {
margin-top: 7px; margin-top: 7px;
} }
@@ -1653,21 +1662,26 @@ export default {
} }
} }
} }
.bg_body_input { .bg_body_input {
flex: 1; flex: 1;
position: relative; position: relative;
.ant-upload-picture-card-wrapper { .ant-upload-picture-card-wrapper {
width: 200px; width: 200px;
margin-right: 18px; margin-right: 18px;
} }
.i_upload_img { .i_upload_img {
width: 200px; width: 200px;
height: 112px; height: 112px;
} }
::v-deep .ant-upload.ant-upload-select-picture-card { ::v-deep .ant-upload.ant-upload-select-picture-card {
width: 90px; width: 90px;
height: 90px; height: 90px;
} }
.i_upload { .i_upload {
width: 200px; width: 200px;
height: 112px; height: 112px;
@@ -1695,6 +1709,7 @@ export default {
} }
} }
} }
.upload_box { .upload_box {
border: 1px solid #d9d9d9; border: 1px solid #d9d9d9;
padding: 2px 5px; padding: 2px 5px;
@@ -1702,6 +1717,7 @@ export default {
border-radius: 2px; border-radius: 2px;
cursor: pointer; cursor: pointer;
} }
.error-message { .error-message {
color: red; color: red;
font-size: 11px; font-size: 11px;
@@ -1709,6 +1725,7 @@ export default {
margin-bottom: 0; margin-bottom: 0;
} }
} }
.bg_footer { .bg_footer {
width: 100%; width: 100%;
margin-left: 174px; margin-left: 174px;
@@ -1744,12 +1761,14 @@ export default {
background-color: #4ea6ff; background-color: #4ea6ff;
color: #ffffff; color: #ffffff;
} }
.btndesign { .btndesign {
background-color: #eff4fc; background-color: #eff4fc;
color: #ffffff; color: #ffffff;
} }
} }
} }
.headers { .headers {
margin-left: 38px; margin-left: 38px;
margin-right: 38px; margin-right: 38px;
@@ -1757,15 +1776,19 @@ export default {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
flex-wrap: wrap; flex-wrap: wrap;
.btn { .btn {
display: flex; display: flex;
} }
.headers_item { .headers_item {
margin-right: 20px; margin-right: 20px;
margin-bottom: 20px; margin-bottom: 20px;
.headers_item_text { .headers_item_text {
margin-right: 15px; margin-right: 15px;
} }
.headers_item_btn { .headers_item_btn {
padding: 0px 26px 0px 26px; padding: 0px 26px 0px 26px;
height: 38px; height: 38px;
@@ -1791,6 +1814,7 @@ export default {
margin-left: 5px; margin-left: 5px;
} }
} }
.btn1 { .btn1 {
.search { .search {
width: 15px; width: 15px;
@@ -1798,6 +1822,7 @@ export default {
background-image: url("../../assets/images/courseManage/search0.png"); background-image: url("../../assets/images/courseManage/search0.png");
} }
} }
.btn2 { .btn2 {
.search { .search {
width: 16px; width: 16px;
@@ -1805,18 +1830,22 @@ export default {
background-image: url("../../assets/images/courseManage/reset0.png"); background-image: url("../../assets/images/courseManage/reset0.png");
} }
} }
::v-deep .ant-select { ::v-deep .ant-select {
border-radius: 5px; border-radius: 5px;
width: 100%; width: 100%;
height: 40px; height: 40px;
.ant-select-selector { .ant-select-selector {
border-radius: 8px; border-radius: 8px;
width: 100%; width: 100%;
height: 40px; height: 40px;
} }
.ant-select-selection-placeholder { .ant-select-selection-placeholder {
line-height: 40px; line-height: 40px;
} }
.ant-select-selection-item { .ant-select-selection-item {
line-height: 40px; line-height: 40px;
} }
@@ -1825,6 +1854,7 @@ export default {
} }
} }
} }
::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;
@@ -1840,12 +1870,14 @@ export default {
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
.text { .text {
font-size: 20px; font-size: 20px;
color: #fff; color: #fff;
margin-top: -4px; margin-top: -4px;
} }
} }
.add_list { .add_list {
width: 136%; width: 136%;
margin-right: 20px; margin-right: 20px;
@@ -1853,6 +1885,7 @@ export default {
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: 5px 15px; padding: 5px 15px;
@@ -1870,6 +1903,7 @@ export default {
margin-bottom: 20px; margin-bottom: 20px;
font-size: 12px; font-size: 12px;
} }
.add_content { .add_content {
width: 30px; width: 30px;
height: 30px; height: 30px;
@@ -1880,6 +1914,7 @@ export default {
justify-content: center; justify-content: center;
align-items: center; align-items: center;
margin-left: 10px; margin-left: 10px;
.text { .text {
font-size: 20px; font-size: 20px;
color: #fff; color: #fff;
@@ -1887,6 +1922,7 @@ export default {
} }
} }
} }
//导出按钮icon //导出按钮icon
.daochu { .daochu {
width: 16px; width: 16px;
@@ -2091,6 +2127,7 @@ export default {
margin-right: 14px; margin-right: 14px;
flex-shrink: 0; flex-shrink: 0;
cursor: pointer; cursor: pointer;
.search { .search {
width: 15px; width: 15px;
height: 16px; height: 16px;
@@ -2208,24 +2245,30 @@ export default {
::v-deep .ant-modal-close { ::v-deep .ant-modal-close {
display: none; display: none;
} }
.tableBox { .tableBox {
padding-bottom: 20px; padding-bottom: 20px;
margin: 20px 38px 30px; margin: 20px 38px 30px;
::v-deep .ant-select-dropdown { ::v-deep .ant-select-dropdown {
display: inline-block; display: inline-block;
} }
::v-deep .ant-select-selection-item { ::v-deep .ant-select-selection-item {
margin-left: 3px; margin-left: 3px;
} }
::v-deep .ant-pagination-options-size-changer.ant-select { ::v-deep .ant-pagination-options-size-changer.ant-select {
width: 84px; width: 84px;
} }
.pa { .pa {
width: 100%; width: 100%;
display: flex; display: flex;
justify-content: right; justify-content: right;
} }
} }
.item_inp .i_upload_img[data-v-6b882d01] { .item_inp .i_upload_img[data-v-6b882d01] {
border-radius: 50% border-radius: 50%
} }

View File

@@ -50,8 +50,18 @@
<!-- <OrgClass @enter="searchSubmit()" v-model:value="searchParam.orgId" :placeholder="'请选择讲师组织'" <!-- <OrgClass @enter="searchSubmit()" v-model:value="searchParam.orgId" :placeholder="'请选择讲师组织'"
style="width: 235px" style="width: 235px"
></OrgClass> --> ></OrgClass> -->
<a-select style="width: 235px ;margin-bottom:20px" v-model:value="searchParam.trainOrgId" placeholder="请选择培训发生组织" allowClear <!-- TODO GX02-->
:options="orgListSearch" <a-select
style="width: 235px ;
margin-bottom:20px"
v-model:value="searchParam.trainOrgId"
placeholder="请选择培训发生组织"
allowClear
showSearch
:filter-option="false"
:options="filterOrgListSearch"
@search="handleOrgSearch"
@change="changeOrg"
v-on:keydown.enter="enterPressHadlerSearch"> v-on:keydown.enter="enterPressHadlerSearch">
</a-select> </a-select>
</a-form-item> </a-form-item>
@@ -284,8 +294,14 @@
/> />
培训发生组织 培训发生组织
</template> </template>
<a-select v-model:value="formParam.trainOrgId" placeholder="请选择培训发生组织" allowClear <!-- TODO5 授课讲师 -->
:options="orgList" @change="changeOrg"> <a-select v-model:value="formParam.trainOrgId" placeholder="请选择培训发生组织"
allowClear
showSearch
:filter-option="false"
:options="filterOrgListSearch"
@search="handleOrgSearch"
@change="changeOrg">
</a-select> </a-select>
<!-- <OrgClass v-model:value="formParam.sourceBelongId" v-model:name="formParam.sourceBelongFullName"></OrgClass> --> <!-- <OrgClass v-model:value="formParam.sourceBelongId" v-model:name="formParam.sourceBelongFullName"></OrgClass> -->
</a-form-item> </a-form-item>
@@ -413,27 +429,27 @@
<span style="font-weight:600;">讲师信息</span> <span style="font-weight:600;">讲师信息</span>
<a-descriptions style="margin-top:15px;" bordered :column="2" :contentStyle="{'maxWidth':'300px'}" :labelStyle="{'width':'160px'}"> <a-descriptions style="margin-top:15px;" bordered :column="2" :contentStyle="{'maxWidth':'300px'}" :labelStyle="{'width':'160px'}">
<a-descriptions-item label="讲师名称"><div style="user-select: text">{{ formParam.teacherName ||'-'}}/{{ formParam.userNo||'-' }}</div></a-descriptions-item> <a-descriptions-item label="讲师名称"><div style="user-select: text">{{ formParam.teacherName ||'-'}}/{{ formParam.userNo||'-' }}</div></a-descriptions-item>
<!-- <a-descriptions-item label="讲师组织">{{ formParam.orgName||'-' }}</a-descriptions-item> -->
<a-descriptions-item label="培训发生组织">{{ formParam.trainOrgName||'-' }}</a-descriptions-item>
<!-- <a-descriptions-item label="讲师体系">{{ formParam.tsystemName||'-' }}</a-descriptions-item> -->
<!-- <a-descriptions-item label="讲师级别">{{ formParam.tlevelName||'-'}}</a-descriptions-item> -->
<a-descriptions-item label="数据来源">
{{ formParam.createFrom == 0 ? '系统生成' : formParam.createFrom == 1 ? '手动录入' : '-' }}</a-descriptions-item>
<a-descriptions-item label="课程类型">{{ formParam.type == 0 ? '在线课' : formParam.type == 1 ? '面授课' : formParam.type == 2 ? '手动录入' : '-'
}}</a-descriptions-item>
<a-descriptions-item label="课程名称"><div style="user-select: text">{{ formParam.courseName||'-' }}</div></a-descriptions-item> <a-descriptions-item label="课程名称"><div style="user-select: text">{{ formParam.courseName||'-' }}</div></a-descriptions-item>
<a-descriptions-item label="课程类型">
{{ formParam.type == 0 ? '在线课' : formParam.type == 1 ? '面授课' : formParam.type == 5 ? '手动录入' : '-'}}</a-descriptions-item>
<a-descriptions-item label="授课/课程日期"><div style="user-select: text">{{ formParam.teachingDate||'-' }}</div></a-descriptions-item>
<a-descriptions-item label="开课状态">{{ formParam.courseStatus == 0 ? '未开课' : formParam.courseStatus == 1 <a-descriptions-item label="开课状态">{{ formParam.courseStatus == 0 ? '未开课' : formParam.courseStatus == 1
? '已开课' : '-' }}</a-descriptions-item> ? '已开课' : '-' }}</a-descriptions-item>
<a-descriptions-item label="授课/课程时长 "> <a-descriptions-item label="授课/课程时长(分钟)">
<span> {{ formParam.teaching }} 分钟</span> <span> {{ formParam.teaching }} 分钟</span>
<span style="margin-left: 10px ;" v-if="formParam.teaching != '0'">({{ (formParam.teaching / 60 <span style="margin-left: 10px ;" v-if="formParam.teaching != '0'">({{ (formParam.teaching / 60
).toFixed(2) }}小时)</span> </a-descriptions-item> ).toFixed(2) }}小时)</span> </a-descriptions-item>
<a-descriptions-item label="授课/课程日期"><div style="user-select: text">{{ formParam.teachingDate||'-' }}</div></a-descriptions-item>
<a-descriptions-item label="参训人数 ">{{ formParam.studys?formParam.studys+'人':'-' }}</a-descriptions-item> <a-descriptions-item label="参训人数 ">{{ formParam.studys?formParam.studys+'人':'-' }}</a-descriptions-item>
<a-descriptions-item label="评分 ">{{ formParam.score?Number(formParam.score).toFixed(0)==0?'-':Number(formParam.score).toFixed(2)+'分':'-' }}</a-descriptions-item> <a-descriptions-item label="评分 ">{{ formParam.score?Number(formParam.score).toFixed(0)==0?'-':Number(formParam.score).toFixed(2)+'分':'-' }}</a-descriptions-item>
<!-- <a-descriptions-item label="内容分类">{{ formParam.courseTypeName||'-' }}</a-descriptions-item> --> <!-- <a-descriptions-item label="讲师组织">{{ formParam.orgName||'-' }}</a-descriptions-item> -->
<a-descriptions-item label="培训发生组织">{{ formParam.trainOrgName||'-' }}</a-descriptions-item>
<a-descriptions-item label="是否生成讲师费">{{{0:'否',1:'是'}[formParam.createdFee]}}</a-descriptions-item> <a-descriptions-item label="是否生成讲师费">{{{0:'否',1:'是'}[formParam.createdFee]}}</a-descriptions-item>
<!-- <a-descriptions-item label="讲师体系">{{ formParam.tsystemName||'-' }}</a-descriptions-item> -->
<!-- <a-descriptions-item label="讲师级别">{{ formParam.tlevelName||'-'}}</a-descriptions-item> -->
<!-- <a-descriptions-item label="数据来源">
{{ formParam.createFrom == 0 ? '系统生成' : formParam.createFrom == 1 ? '手动录入' : '-' }}</a-descriptions-item> -->
<!-- <a-descriptions-item label="内容分类">{{ formParam.courseTypeName||'-' }}</a-descriptions-item> -->
<a-descriptions-item label="备注 ">{{ formParam.remark||'-' }}</a-descriptions-item> <a-descriptions-item label="备注 ">{{ formParam.remark||'-' }}</a-descriptions-item>
</a-descriptions> </a-descriptions>
<div v-if="formParam.createFrom == '0'"> <div v-if="formParam.createFrom == '0'">
@@ -495,7 +511,8 @@
</div> </div>
</a-modal> </a-modal>
</div> </div>
<ImportWork v-model:showWork="showWork" :template="'内部讲师授课记录导入模版-20250115.xlsx'" :url="'/admin/export/importInTeacherRecord'" :title="title"></ImportWork> <!-- 导入01 -->
<ImportWork v-model:showWork="showWork" :template="'/admin/export/exportRecordTemplate'" :url="'/admin/export/importInTeacherRecord'" :title="title"></ImportWork>
<!-- <div> <Upload/> </div> --> <!-- <div> <Upload/> </div> -->
</div> </div>
</template> </template>
@@ -560,6 +577,7 @@ export default {
const router = useRouter(); const router = useRouter();
const state = reactive({ const state = reactive({
orgListSearch: [], orgListSearch: [],
filterOrgListSearch: [],
moreid: 1, moreid: 1,
title: '导入内部授课记录', title: '导入内部授课记录',
vf: false, vf: false,
@@ -705,7 +723,8 @@ export default {
{ value: '', label: "全部" }, { value: '', label: "全部" },
{ value: '0', label: "在线课" }, { value: '0', label: "在线课" },
{ value: '1', label: "面授课" }, { value: '1', label: "面授课" },
{ value: '2', label: "手动录入" }, { value: '2', label: "训练班" },
{ value: '5', label: "手动录入" },
]) ])
const scoreList = ref([ const scoreList = ref([
{ value: '', label: "全部" }, { value: '', label: "全部" },
@@ -803,7 +822,8 @@ export default {
? { ? {
"0": "在线课", "0": "在线课",
"1": "面授课", "1": "面授课",
"2": "手动录入", "2": "训练班",
"5": "手动录入",
}[value.record.type + ""] }[value.record.type + ""]
: "-"} : "-"}
</div> </div>
@@ -890,25 +910,25 @@ export default {
) )
} }
}, },
{ // {
title: '数据来源', // title: '数据来源',
dataIndex: 'createFrom', // dataIndex: 'createFrom',
key: 'createFrom', // key: 'createFrom',
ellipsis: true, align: "center", // ellipsis: true, align: "center",
width: 120, // width: 120,
customRender: (value) => { // customRender: (value) => {
return ( // return (
<div> // <div>
{value.record.createFrom == "0" || value.record.createFrom == "1" // {value.record.createFrom == "0" || value.record.createFrom == "1"
? { // ? {
"0": "系统生成", // "0": "系统生成",
"1": "手动录入", // "1": "手动录入",
}[value.record.createFrom + ""] || "" // }[value.record.createFrom + ""] || ""
: "-"} // : "-"}
</div> // </div>
) // )
} // }
}, // },
{ {
title: '培训发生组织 ', title: '培训发生组织 ',
dataIndex: 'trainOrgName', dataIndex: 'trainOrgName',
@@ -963,6 +983,7 @@ export default {
pageSize:50 pageSize:50
} }
queryTrainOrgPor(obj).then((res) => { queryTrainOrgPor(obj).then((res) => {
state.orgList = res.data.data?.map(item=>{ state.orgList = res.data.data?.map(item=>{
return{ return{
label: item.affiliationName, label: item.affiliationName,
@@ -978,9 +999,16 @@ export default {
state.orgListSearch.unshift({ state.orgListSearch.unshift({
label: '全部', value: '' label: '全部', value: ''
}) })
state.filterOrgListSearch = state.orgListSearch;
}) })
} }
//TODO5
const changeOrg = (e,l) => { const changeOrg = (e,l) => {
console.log("changeOrg e",e);
console.log("changeOrg l",l);
if(l == undefined || l == null){
state.filterOrgListSearch = state.orgListSearch;
}
state.formParam.trainOrgName = l?.label state.formParam.trainOrgName = l?.label
} }
const rules = { const rules = {
@@ -1489,6 +1517,16 @@ export default {
const sendRemark = () => { const sendRemark = () => {
state.formParam.remark = state.formParam.remark.replace(/\s/g, ''); state.formParam.remark = state.formParam.remark.replace(/\s/g, '');
} }
//TODO5
const handleOrgSearch = (value) => {
let temp = JSON.parse(JSON.stringify(state.orgListSearch));
//选择数据
state.filterOrgListSearch = temp.filter(item => item.label.includes(value))
}
return { return {
...toRefs(state), ...toRefs(state),
sendName, sendName,
@@ -1548,7 +1586,8 @@ export default {
// editTimeChange, // editTimeChange,
scoreChange, scoreChange,
locale, locale,
checkMenu checkMenu,
handleOrgSearch
} }
}, },
}; };

View File

@@ -6,28 +6,20 @@
<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: 235px" 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" style="width: 340px !important;" format="YYYY-MM-DD"
v-model:value="searchdate" valueFormat="YYYY-MM-DD" separator="至" :placeholder="['汇总时间开始时间', '汇总时间结束时间']"
style="width: 340px !important;" v-on:keydown.enter="enterPressHadlerSearch" />
format="YYYY-MM-DD"
valueFormat="YYYY-MM-DD"
separator="至"
:placeholder="['汇总时间开始时间', '汇总时间结束时间']"
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: 200px ;margin-bottom:20px" v-model:value="searchParam.status" placeholder="请选择状态" allowClear <a-select style="width: 200px ;margin-bottom:20px" v-model:value="searchParam.status" placeholder="请选择状态"
:options="AuthenticationStatusList" allowClear :options="AuthenticationStatusList" v-on:keydown.enter="enterPressHadlerSearch">
v-on:keydown.enter="enterPressHadlerSearch">
</a-select> </a-select>
</a-form-item> </a-form-item>
<div style="display: flex; margin-bottom: 20px"> <div style="display: flex; margin-bottom: 20px">
@@ -91,9 +83,11 @@
<template v-if="column.key === 'operation'"> <template v-if="column.key === 'operation'">
<a-space> <a-space>
<a-button type="link" v-if="record.status != 2 && record.status != 3" @click="goDdit(record)">提交</a-button> <a-button type="link" v-if="record.status != 2 && record.status != 3" @click="goDdit(record)">提交</a-button>
<a-button type="link" v-if="record.status != 1&&record.status!=5" @click="() => handleLook(record, String(record.courseform))">查看</a-button> <a-button type="link" v-if="record.status != 1 && record.status != 5"
@click="() => handleLook(record, String(record.courseform))">查看</a-button>
<!-- <a-button type="link" @click="() => handleOperate(record, String(record.courseform))">审批</a-button> --> <!-- <a-button type="link" @click="() => handleOperate(record, String(record.courseform))">审批</a-button> -->
<!-- <a-button type="link" @click="() => deleteModal(record, String(record.courseform))">删除</a-button> --> <!-- TODO1 -->
<a-button v-if="record.status == 1 || record.status == 4" type="link" @click="() => deleteModal(record, String(record.courseform))">删除</a-button>
<!-- <a-button v-if="record.status == 4" type="link" @click="submit(record)">提交</a-button> --> <!-- <a-button v-if="record.status == 4" type="link" @click="submit(record)">提交</a-button> -->
<a-button v-if="record.status == 2 && false" type="link" @click="withdraw(record)">撤回</a-button> <a-button v-if="record.status == 2 && false" type="link" @click="withdraw(record)">撤回</a-button>
</a-space> </a-space>
@@ -105,17 +99,9 @@
</div> </div>
<div class="tableBox "> <div class="tableBox ">
<div style="float: right;"> <div style="float: right;">
<a-pagination <a-pagination v-if="tableDataTotal > 10" :showSizeChanger="true" :showQuickJumper="false"
v-if="tableDataTotal > 10" :hideOnSinglePage="false" :pageSize="searchParam.pageSize" :current="searchParam.pageNo"
:showSizeChanger="true " :total="tableDataTotal" class="pagination" @change="changePagination" />
:showQuickJumper="false"
:hideOnSinglePage="false"
:pageSize="searchParam.pageSize"
:current="searchParam.pageNo"
:total="tableDataTotal"
class="pagination"
@change="changePagination"
/>
</div> </div>
</div> </div>
<!-- 弹窗组件 --> <!-- 弹窗组件 -->
@@ -125,21 +111,26 @@
<div style="padding:24px;"> <div style="padding:24px;">
<div class="headers" style="margin-top:-24px;"> <div class="headers" style="margin-top:-24px;">
<div class="headerTitle">汇总讲师费详情</div> <div class="headerTitle">汇总讲师费详情</div>
<img <img style="width: 29px; height: 29px; cursor: pointer" src="../../assets/images/basicinfo/close.png"
style="width: 29px; height: 29px; cursor: pointer" @click="cancelTeachingDialog" />
src="../../assets/images/basicinfo/close.png"
@click="cancelTeachingDialog"
/>
</div> </div>
<span class="line"></span> <span class="line"></span>
<span style="font-weight:600;">基本信息</span> <span style="font-weight:600;">基本信息</span>
<a-descriptions style="margin-top:16px" bordered :column="2" :contentStyle="rowCenter" :labelStyle="rowCenter"> <a-descriptions style="margin-top:16px" bordered :column="2" :contentStyle="rowCenter" :labelStyle="rowCenter">
<a-descriptions-item label="审批编号"><div style="user-select:text">{{formParam?.approvalNumber||'-'}}</div></a-descriptions-item> <a-descriptions-item label="审批编号">
<a-descriptions-item label="培训发生组织"><div style="user-select:text">{{formParam?.trainOrgName||'-'}}</div></a-descriptions-item> <div style="user-select:text">{{ formParam?.approvalNumber || '-' }}</div>
</a-descriptions-item>
<a-descriptions-item label="培训发生组织">
<div style="user-select:text">{{ formParam?.trainOrgName || '-' }}</div>
</a-descriptions-item>
<a-descriptions-item label="汇总时间">{{ formParam?.summaryTime || '-' }}</a-descriptions-item> <a-descriptions-item label="汇总时间">{{ formParam?.summaryTime || '-' }}</a-descriptions-item>
<a-descriptions-item label="汇总金额">{{formParam?.summaryTotal?formParam?.summaryTotal+'元':'-'}}</a-descriptions-item> <a-descriptions-item
label="汇总金额">{{ formParam?.summaryTotal ? formParam?.summaryTotal + '元' : '-' }}</a-descriptions-item>
<a-descriptions-item label="提交时间">{{ formParam?.approvalSubmitTime || '-' }}</a-descriptions-item> <a-descriptions-item label="提交时间">{{ formParam?.approvalSubmitTime || '-' }}</a-descriptions-item>
<a-descriptions-item label="状态">{{{0:'待确认' ,1:'待提交' ,2:'审核中', 3:'审核通过', 4:'审核拒绝',5:'待提交'}[formParam?.status]}}</a-descriptions-item> <a-descriptions-item label="状态">{{ {
0: '待确认', 1: '待提交', 2: '审核中', 3: '审核通过',
4: '审核拒绝', 5: '待提交'
}[formParam?.status]}}</a-descriptions-item>
</a-descriptions> </a-descriptions>
<!-- <span>审批详情</span> --> <!-- <span>审批详情</span> -->
<!-- <span class="line" style="margin-top:15px;"></span> --> <!-- <span class="line" style="margin-top:15px;"></span> -->
@@ -148,27 +139,33 @@
<div style="padding: 10px 0;"> <div style="padding: 10px 0;">
<div style="display: flex;margin-bottom: 20px;"> <div style="display: flex;margin-bottom: 20px;">
<div style="margin-right:20px;"> <div style="margin-right:20px;">
<a-input @pressEnter="searchTeacherFeeApprovalList()" style="height:40px;border-radius:8px;" v-model:value="userNoOrName" placeholder="请输入工号/讲师名称进行搜索" /> <a-input @pressEnter="searchTeacherFeeApprovalList()" style="height:40px;border-radius:8px;"
v-model:value="userNoOrName" placeholder="请输入工号/讲师名称进行搜索" />
</div> </div>
<div style="margin-right:20px;"> <div style="margin-right:20px;">
<a-range-picker style="height:40px;border-radius:8px;" @change="seeDateChange" valueFormat="YYYY-MM-DD" format="YYYY-MM-DD" v-model:value="seeDateValue" /> <a-range-picker style="height:40px;border-radius:8px;" @change="seeDateChange"
valueFormat="YYYY-MM-DD" format="YYYY-MM-DD" v-model:value="seeDateValue" />
</div> </div>
<div style="margin-right:20px;"> <div style="margin-right:20px;">
<a-button style="margin-right:15px;height:40px;border-radius:8px;" type="primary" @click="searchTeacherFeeApprovalList()">搜索</a-button> <a-button style="margin-right:15px;height:40px;border-radius:8px;" type="primary"
<a-button style="margin-right:15px;height:40px;border-radius:8px;" type="primary" @click="resetSearch()">重置</a-button> @click="searchTeacherFeeApprovalList()">搜索</a-button>
<a-button style="margin-right:15px;height:40px;border-radius:8px;" type="primary"
@click="resetSearch()">重置</a-button>
</div> </div>
</div> </div>
<div style="padding-bottom:70px"> <div style="padding-bottom:70px">
<a-table :scroll="{x:'max-content'}" :header-cell-style="{ 'text-align': 'center' }" style="border: 1px solid #f2f6fe" :columns="columnsExamine" <a-table :scroll="{ x: 'max-content' }" :header-cell-style="{ 'text-align': 'center' }"
:data-source="tableDataExamine" :loading="examinetableLoading" @expand="expandTable" :pagination="pagination"> style="border: 1px solid #f2f6fe" :columns="columnsExamine" :data-source="tableDataExamine"
:loading="examinetableLoading" @expand="expandTable" :pagination="pagination">
</a-table> </a-table>
</div> </div>
</div> </div>
</a-tab-pane> </a-tab-pane>
<a-tab-pane key="2" tab="讲师费审批记录" force-render v-if="false"> <a-tab-pane key="2" tab="讲师费审批记录" force-render v-if="false">
<div style="padding-bottom:70px"> <div style="padding-bottom:70px">
<a-table :header-cell-style="{ 'text-align': 'center' }" style="border: 1px solid #f2f6fe" :columns="columnsExamineTwo" <a-table :header-cell-style="{ 'text-align': 'center' }" style="border: 1px solid #f2f6fe"
:data-source="tableDataExamineTwo" :loading="tableDataExamineLoading" @expand="expandTable" :pagination="false"> :columns="columnsExamineTwo" :data-source="tableDataExamineTwo" :loading="tableDataExamineLoading"
@expand="expandTable" :pagination="false">
</a-table> </a-table>
</div> </div>
</a-tab-pane> </a-tab-pane>
@@ -193,8 +190,7 @@
</a-drawer> </a-drawer>
<!-- 修改状态功能弹窗 --> <!-- 修改状态功能弹窗 -->
<div> <div>
<a-modal v-model:visible="editTeacher" :footer="null" :closable="close" wrapClassName="" <a-modal v-model:visible="editTeacher" :footer="null" :closable="close" wrapClassName="" centered="true">
centered="true">
<div class="delete" style="width:500px"> <div class="delete" style="width:500px">
<div class="del_header"></div> <div class="del_header"></div>
<div class="del_main"> <div class="del_main">
@@ -227,14 +223,16 @@
</a-modal> </a-modal>
</div> </div>
<!-- <div> <Upload/> </div> --> <!-- <div> <Upload/> </div> -->
<LecturerAppEdit @example="getExample" @successParams="successParams" v-model:visible="editTeacherDialog" :id="editId" ></LecturerAppEdit> <LecturerAppEdit @example="getExample" @successParams="successParams" v-model:visible="editTeacherDialog"
:id="editId">
</LecturerAppEdit>
<div class="example" v-if="example"> <div class="example" v-if="example">
<a-spin /> <a-spin />
</div> </div>
</div> </div>
</template> </template>
<script lang="jsx"> <script lang="jsx">
import { reactive, toRefs, ref ,watch,computed,onMounted} from "vue"; import { reactive, toRefs, ref, watch, watchEffect, computed, onMounted, onUpdated} from "vue";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import { message } from "ant-design-vue"; import { message } from "ant-design-vue";
import dayjs from "dayjs"; import dayjs from "dayjs";
@@ -247,7 +245,7 @@
DownloadOutlined DownloadOutlined
} from '@ant-design/icons-vue'; } from '@ant-design/icons-vue';
import ProjectManager from "@/components/project/ProjectManagerNew"; import ProjectManager from "@/components/project/ProjectManagerNew";
import {expenseBillList,queryById,queryExpnseByBillId ,updateTeacherFee,updateStatusSubmit,approveTeacherFee,getTrainOrg,isConfirm} from "../../api/lecturerFeeManagement"; import { expenseBillList, queryById, queryExpnseByBillId, updateTeacherFee, updateStatusSubmit, approveTeacherFee, getTrainOrg, isConfirm , expenseBillDelById} from "../../api/lecturerFeeManagement";
import { getTeacherSystemList, getApprovalResultByBusinessIdList } from "../../api/Lecturer"; import { getTeacherSystemList, getApprovalResultByBusinessIdList } from "../../api/Lecturer";
import { queryTrainOrgPor, } from "../../api/organization"; import { queryTrainOrgPor, } from "../../api/organization";
// lecturerFeeManagement // lecturerFeeManagement
@@ -265,11 +263,12 @@
ProjectManager, ProjectManager,
LecturerAppEdit, LecturerAppEdit,
}, },
setup(props,emit) { props: {
watch(()=>props.key,(val)=>{ activeKeyProps: String,
console.log(val,'valllllll') },
}) setup(props) {
onMounted(() => { onMounted(() => {
console.log("props.activeKeyProps",props.activeKeyProps)
// const search = sessionStorage.getItem('searchApprlval') // const search = sessionStorage.getItem('searchApprlval')
// console.log(search,'search') // console.log(search,'search')
// if(search){ // if(search){
@@ -423,8 +422,7 @@
{ value: "E10", label: "审核打回", }, { value: "E10", label: "审核打回", },
{ value: "S20", label: "审核通过", }, { value: "S20", label: "审核通过", },
]) ])
watch(
)
//切换筛选 //切换筛选
const handlemoreid = () => { const handlemoreid = () => {
if (state.moreid == 1) { if (state.moreid == 1) {
@@ -568,6 +566,7 @@
// } // }
// List接口数据 // List接口数据
const getTableDate = (obj) => { const getTableDate = (obj) => {
console.log("执行 getTableDate")
state.tableLoading = true state.tableLoading = true
let objA = { ...state.searchParam }; let objA = { ...state.searchParam };
objA.beginTime = state.searchdate ? dayjs(state.searchdate[0]).format("YYYY-MM-DD") : "", objA.beginTime = state.searchdate ? dayjs(state.searchdate[0]).format("YYYY-MM-DD") : "",
@@ -613,8 +612,7 @@
} }
//取消按钮 清空输入的数据 //取消按钮 清空输入的数据
const cancelTeachingDialog = (val) => { const cancelTeachingDialog = (val) => {
if(state.teachingdialog = true ) if (state.teachingdialog = true) {
{
if (val == 1) { if (val == 1) {
submit(state.formParam) submit(state.formParam)
return return
@@ -823,6 +821,31 @@
state.tableDataParams.pageSize = pageSize state.tableDataParams.pageSize = pageSize
gettableDataExamine(); gettableDataExamine();
}; };
//TODO1
const deleteModal = (record) => {
dialog({
content: '是否确认进行删除?',
ok: () => {
expenseBillDelById(record.id).then(res => {
if (typeof (res.data.data) != 'object') {
message.success('删除成功')
message.error(res.data.data)
return
}
message.success("删除成功");
searchSubmit()
}).catch(err => {
message.destroy()
message.error(err.data.msg)
})
}
})
}
const columnsExamineTwo = ref([ const columnsExamineTwo = ref([
{ {
title: '审批层级 ', title: '审批层级 ',
@@ -1071,11 +1094,23 @@
} }
//回车 //回车
const enterPressHadlerSearch = e => { const enterPressHadlerSearch = e => {
    if (e.keyCode === 13) { if (e.keyCode === 13) {
      searchSubmit() searchSubmit()
    }
} }
}
//TODO1
watchEffect(() => {
console.log('Item changed:', props.activeKeyProps);
if(props.activeKeyProps == 2){
state.searchParam.pageNo = 1;
getTableDate()
}
// 在这里你可以根据 props.item 进行一些操作
});
return { return {
...toRefs(state), ...toRefs(state),
enterPressHadlerSearch, enterPressHadlerSearch,
@@ -1125,6 +1160,7 @@
resetSearch, resetSearch,
paginations, paginations,
paginationChanges, paginationChanges,
deleteModal
} }
}, },
}; };
@@ -1142,9 +1178,11 @@
justify-content: center; justify-content: center;
align-items: center; align-items: center;
} }
.select .ant-picker { .select .ant-picker {
width: 410px !important; width: 410px !important;
} }
.headers { .headers {
height: 73px; height: 73px;
border-bottom: 1px solid #e8e8e8; border-bottom: 1px solid #e8e8e8;
@@ -1163,6 +1201,7 @@
// margin-left: 24px; // margin-left: 24px;
} }
} }
.addTimeBox { .addTimeBox {
position: relative; position: relative;
display: flex; display: flex;
@@ -1467,9 +1506,7 @@
} }
//抽屉功能 //抽屉功能
.drawaer .drawaer // /* 改变所有 a-tree-select 输入框的高度 */
// /* 改变所有 a-tree-select 输入框的高度 */
// ::v-deep .ant-select:not(.ant-select-customize-input) .ant-select-selector{ // ::v-deep .ant-select:not(.ant-select-customize-input) .ant-select-selector{
// height: 40px; // height: 40px;
// line-height: 40px; // line-height: 40px;
@@ -1482,6 +1519,7 @@
line-height: 40px; line-height: 40px;
border-radius: 8px border-radius: 8px
} }
// 抽屉内样式 // 抽屉内样式
.draitem { .draitem {
width: 100%; width: 100%;
@@ -1489,19 +1527,23 @@
border-radius: 8px; border-radius: 8px;
line-height: 40px; line-height: 40px;
} }
.drabtn { .drabtn {
height: 40px; height: 40px;
width: 80px; width: 80px;
border-radius: 8px; border-radius: 8px;
margin-right: 20px margin-right: 20px
} }
::v-deep .ant-select:not(.ant-select-customize-input) .ant-select-selector { ::v-deep .ant-select:not(.ant-select-customize-input) .ant-select-selector {
border-radius: 8px; border-radius: 8px;
height: 40px; height: 40px;
} }
.ant-col-12 { .ant-col-12 {
height: 90px; height: 90px;
} }
::v-deep .ant-select-selection-overflow-item { ::v-deep .ant-select-selection-overflow-item {
margin-top: -2px; margin-top: -2px;
} }
@@ -1509,18 +1551,23 @@
::v-deep .ant-select-multiple .ant-select-selection-item { ::v-deep .ant-select-multiple .ant-select-selection-item {
height: 34px height: 34px
} }
.tableBox { .tableBox {
padding-bottom: 20px; padding-bottom: 20px;
margin: 20px 38px 30px; margin: 20px 38px 30px;
::v-deep .ant-select-dropdown { ::v-deep .ant-select-dropdown {
display: inline-block; display: inline-block;
} }
::v-deep .ant-select-selection-item { ::v-deep .ant-select-selection-item {
margin-left: 3px; margin-left: 3px;
} }
::v-deep .ant-pagination-options-size-changer.ant-select { ::v-deep .ant-pagination-options-size-changer.ant-select {
width: 84px; width: 84px;
} }
.pa { .pa {
width: 100%; width: 100%;
display: flex; display: flex;

View File

@@ -9,61 +9,66 @@
<!-- <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: 235px; 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" <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>
</div> </div>
</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: 230px; height: 40px; border-radius: 8px" <a-input v-model:value="searchParam.courseName" style="width: 230px; 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: 235px ;margin-bottom:20px" v-model:value="searchParam.trainOrgId" placeholder="请选择培训发生组织" allowClear <!-- TODO4 -->
:options="orgListSearch" <a-select
v-on:keydown.enter="enterPressHadlerSearch"> v-model:value="searchParam.trainOrgId"
style="width: 200px"
allowClear
showSearch
:filter-option="false"
@change="handleOrgChange"
@search="handleOrgSearch"
placeholder="请选择培训发生组织"
>
<a-select-option v-for="item in filterOrgListSearch" :key="item.value" :value="item.value">
{{ item.label }}
</a-select-option>
</a-select> </a-select>
<!-- <a-select style="width: 235px ;margin-bottom:20px" v-model:value="searchParam.trainOrgId"
placeholder="请选择培训发生组织" allowClear :options="orgListSearch" showSearch
v-on:keydown.enter="enterPressHadlerSearch">
</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" style="width: 340px !important;" format="YYYY-MM-DD"
v-model:value="searchdate" valueFormat="YYYY-MM-DD" separator="至" :placeholder="['授课日期开始时间', '授课日期结束时间']"
style="width: 340px !important;" v-on:keydown.enter="enterPressHadlerSearch" />
format="YYYY-MM-DD"
valueFormat="YYYY-MM-DD"
separator="至"
:placeholder="['授课日期开始时间', '授课日期结束时间']"
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: 200px ;margin-bottom:20px" v-model:value="searchParam.type" placeholder="请选择课程类型" allowClear <a-select style="width: 200px ;margin-bottom:20px" v-model:value="searchParam.type" placeholder="请选择课程类型"
:options="OnTheJobStatusList" allowClear :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" v-if="moreid == 2"> <a-form-item class="select" v-if="moreid == 2">
<a-select style="width: 200px ;margin-bottom:20px" v-model:value="searchParam.status" placeholder="请选择状态" allowClear <a-select style="width: 200px ;margin-bottom:20px" v-model:value="searchParam.status" placeholder="请选择状态"
:options="AuthenticationStatusList" allowClear :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" v-if="moreid == 2"> <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"
:options="lecturerSystemList" allowClear :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" v-if="moreid == 2"> <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"
:options="getLevelList" placeholder="请选择讲师级别" allowClear :options="getLevelList" v-on:keydown.enter="enterPressHadlerSearch">
v-on:keydown.enter="enterPressHadlerSearch">
</a-select> </a-select>
</a-form-item> </a-form-item>
<div style="display: flex; margin-bottom: 20px"> <div style="display: flex; margin-bottom: 20px">
@@ -119,23 +124,29 @@
<!-- 表格 --> <!-- 表格 -->
<div> <div>
<a-table :header-cell-style="{ 'text-align': 'center' }" style="border: 1px solid #f2f6fe" :columns="columns" <a-table :header-cell-style="{ 'text-align': 'center' }" style="border: 1px solid #f2f6fe" :columns="columns"
:data-source="tableData" :scroll="{ x: 1500 }" :loading="tableLoading" @expand="expandTable" :pagination="false"> :data-source="tableData" :scroll="{ x: 1500 }" :loading="tableLoading" @expand="expandTable"
:pagination="false">
<template #bodyCell="{ record, column }"> <template #bodyCell="{ record, column }">
<template v-if="column.key === 'operation'"> <template v-if="column.key === 'operation'">
<a-space> <a-space>
<a-button type="link" v-if="(record.status==0||record.status==5)&&checkMenu('lecturerExpenseStop')" @click="updateModal(record,record.status)">{{record.status==0?'停用':'启用'}}</a-button> <a-button type="link" v-if="(record.status == 0 || record.status == 5) && checkMenu('lecturerExpenseStop')"
@click="updateModal(record, record.status)">{{ record.status == 0 ? '停用' : '启用' }}</a-button>
<a-button type="link" @click="() => handleLook(record, String(record.courseform))">查看</a-button> <a-button type="link" @click="() => handleLook(record, String(record.courseform))">查看</a-button>
<!-- :disabled="record.createFrom==1 ?false :true" --> <!-- :disabled="record.createFrom==1 ?false :true" -->
<a-button type="link" v-if="(record.status == 0||record.status==4)&&checkMenu('lecturerExpenseEdit')" @click="() => handleModify(record, String(record.courseform))">编辑</a-button> <a-button type="link" v-if="(record.status == 0 || record.status == 4) && checkMenu('lecturerExpenseEdit')"
@click="() => handleModify(record, String(record.courseform))">编辑</a-button>
<!-- <a-button :disabled="record.status==='A20' || record.status==='A30'||record.status==='S20' ?true :false" type="link" @click="() => handleOperate(record, String(record.courseform))">提交</a-button> --> <!-- <a-button :disabled="record.status==='A20' || record.status==='A30'||record.status==='S20' ?true :false" type="link" @click="() => handleOperate(record, String(record.courseform))">提交</a-button> -->
<!-- <a-button type="link" @click="handleOperate(record)">撤回</a-button> --> <!-- <a-button type="link" @click="handleOperate(record)">撤回</a-button> -->
<a-button type="link" v-if="(record.status==0||record.status==4||record.status==5)&&checkMenu('lecturerExpenseDel')" @click="deleteModal(record)">删除</a-button> <a-button type="link"
v-if="(record.status == 0 || record.status == 4 || record.status == 5) && checkMenu('lecturerExpenseDel')"
@click="deleteModal(record)">删除</a-button>
</a-space> </a-space>
</template> </template>
</template> </template>
<template #trainOrg="{ record }"> <template #trainOrg="{ record }">
<a-space style="display:flex ;justify-content: space-around;"> <a-space style="display:flex ;justify-content: space-around;">
<div style="max-width: 180px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;" :title="record.orgName">{{ orgSplit(record.orgName) }}</div> <div style="max-width: 180px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;"
:title="record.orgName">{{ orgSplit(record.orgName) }}</div>
</a-space> </a-space>
</template> </template>
</a-table> </a-table>
@@ -144,30 +155,19 @@
</div> </div>
<div class="tableBox "> <div class="tableBox ">
<div style="float: right;"> <div style="float: right;">
<a-pagination <a-pagination v-if="tableDataTotal > 10" :showSizeChanger="true" :showQuickJumper="false"
v-if="tableDataTotal > 10" :hideOnSinglePage="false" :pageSize="searchParam.pageSize" :current="searchParam.pageNo"
:showSizeChanger="true" :total="tableDataTotal" class="pagination" @change="changePagination" />
:showQuickJumper="false"
:hideOnSinglePage="false"
:pageSize="searchParam.pageSize"
:current="searchParam.pageNo"
:total="tableDataTotal"
class="pagination"
@change="changePagination"
/>
</div> </div>
</div> </div>
<!-- 弹窗组件 --> <!-- 弹窗组件 -->
<a-drawer class="largeDrawerInside" v-model:visible="teacherdialog" placement="right" :closable="false" :maskClosable="false" dropdown-style="drawaer" <a-drawer class="largeDrawerInside" v-model:visible="teacherdialog" placement="right" :closable="false"
width="60%" :title="false"> :maskClosable="false" dropdown-style="drawaer" width="60%" :title="false">
<div style="padding:24px;"> <div style="padding:24px;">
<div class="headers" style="margin-top:-24px;"> <div class="headers" style="margin-top:-24px;">
<div class="headerTitle">{{ teacherdialogtitle }}</div> <div class="headerTitle">{{ teacherdialogtitle }}</div>
<img <img style="width: 29px; height: 29px; cursor: pointer" src="@/assets/images/basicinfo/close.png"
style="width: 29px; height: 29px; cursor: pointer" @click="cancelTeacherDialog" />
src="@/assets/images/basicinfo/close.png"
@click="cancelTeacherDialog"
/>
</div> </div>
<a-form :model="formParam" layout="vertical" ref="formRef"> <a-form :model="formParam" layout="vertical" ref="formRef">
<!-- 讲师姓名 name 讲师工号 userNo--> <!-- 讲师姓名 name 讲师工号 userNo-->
@@ -175,30 +175,26 @@
<a-col :span="12"> <a-col :span="12">
<a-form-item name="name"> <a-form-item name="name">
<template v-slot:label> <template v-slot:label>
<img <img style="margin-right:4px;width: 7px;height: 7px"
style="margin-right:4px;width: 7px;height: 7px" src="@/assets/images/coursewareManage/asterisk.png" alt="" />
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
讲师名称 讲师名称
</template> </template>
<SearchTeacher :disabled="!!id" @byUserIdData="byUserIdData" @tlevel="tlevelChange" v-model:id="formParam.teacherId" v-model:value="formParam.name" v-model:orgId="formParam.orgId" v-model:lable="formParam.orgNames" v-model:user="formParam.userNo" <SearchTeacher :disabled="!!id" @byUserIdData="byUserIdData" @tlevel="tlevelChange"
v-model:system="tSystemNames" v-model:payrollPlaceCode="formParam.payrollPlaceId" v-model:id="formParam.teacherId" v-model:value="formParam.name" v-model:orgId="formParam.orgId"
v-model:payrollPlaceName="formParam.payrollPlace" ></SearchTeacher> v-model:lable="formParam.orgNames" v-model:user="formParam.userNo" v-model:system="tSystemNames"
v-model:payrollPlaceCode="formParam.payrollPlaceId" v-model:payrollPlaceName="formParam.payrollPlace">
</SearchTeacher>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="12">
<a-form-item name="userNo"> <a-form-item name="userNo">
<template v-slot:label> <template v-slot:label>
<img <img style="margin-right:4px;width: 7px;height: 7px"
style="margin-right:4px;width: 7px;height: 7px" src="@/assets/images/coursewareManage/asterisk.png" alt="" />
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
讲师工号 讲师工号
</template> </template>
<a-input class="draitem" v-model:value="formParam.userNo" disabled <a-input class="draitem" v-model:value="formParam.userNo" disabled placeholder="请输入讲师工号" allowClear
placeholder="请输入讲师工号" allowClear showSearch> showSearch>
</a-input> </a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
@@ -208,11 +204,8 @@
<a-col :span="12"> <a-col :span="12">
<a-form-item name="orgName"> <a-form-item name="orgName">
<template v-slot:label> <template v-slot:label>
<img <img style="margin-right:4px;width: 7px;height: 7px"
style="margin-right:4px;width: 7px;height: 7px" src="@/assets/images/coursewareManage/asterisk.png" alt="" />
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
讲师组织 讲师组织
</template> </template>
<!-- <a-popover> <!-- <a-popover>
@@ -229,18 +222,15 @@
<a-col :span="12"> <a-col :span="12">
<a-form-item name="tsystemName"> <a-form-item name="tsystemName">
<template v-slot:label> <template v-slot:label>
<img <img style="margin-right:4px;width: 7px;height: 7px"
style="margin-right:4px;width: 7px;height: 7px" src="@/assets/images/coursewareManage/asterisk.png" alt="" />
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
讲师体系 讲师体系
</template> </template>
<!-- <a-select class="draitem" v-model:value="formParam.tsystemName" placeholder="请选择讲师体系" allowClear <!-- <a-select class="draitem" v-model:value="formParam.tsystemName" placeholder="请选择讲师体系" allowClear
@change="changetlevel" .:options="LecturerSystemList"> @change="changetlevel" .:options="LecturerSystemList">
</a-select> --> </a-select> -->
<a-input disabled v-model:value="tSystemNames.systemName" class="draitem" <a-input disabled v-model:value="tSystemNames.systemName" class="draitem" placeholder="自动带出讲师的体系"
placeholder="自动带出讲师的体系" allowClear showSearch> allowClear showSearch>
</a-input> </a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
@@ -250,30 +240,24 @@
<a-col :span="12"> <a-col :span="12">
<a-form-item name="tlevelName"> <a-form-item name="tlevelName">
<template v-slot:label> <template v-slot:label>
<img <img style="margin-right:4px;width: 7px;height: 7px"
style="margin-right:4px;width: 7px;height: 7px" src="@/assets/images/coursewareManage/asterisk.png" alt="" />
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
讲师级别 讲师级别
</template> </template>
<a-input disabled v-model:value="formParam.tlevelName" class="draitem" <a-input disabled v-model:value="formParam.tlevelName" class="draitem" placeholder="自动带出讲师级别" allowClear
placeholder="自动带出讲师级别" allowClear showSearch> showSearch>
</a-input> </a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="12">
<a-form-item name="payrollPlace"> <a-form-item name="payrollPlace">
<template v-slot:label> <template v-slot:label>
<img <img style="margin-right:4px;width: 7px;height: 7px"
style="margin-right:4px;width: 7px;height: 7px" src="@/assets/images/coursewareManage/asterisk.png" alt="" />
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
讲师发薪地 讲师发薪地
</template> </template>
<a-input disabled v-model:value="formParam.payrollPlace" class="draitem" <a-input disabled v-model:value="formParam.payrollPlace" class="draitem" placeholder="自动带出讲师发薪地"
placeholder="自动带出讲师发薪地" allowClear showSearch > allowClear showSearch>
</a-input> </a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
@@ -283,26 +267,20 @@
<a-col :span="12"> <a-col :span="12">
<a-form-item name="courseType"> <a-form-item name="courseType">
<template v-slot:label> <template v-slot:label>
<img <img style="margin-right:4px;width: 7px;height: 7px"
style="margin-right:4px;width: 7px;height: 7px" src="@/assets/images/coursewareManage/asterisk.png" alt="" />
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
费用类型 费用类型
</template> </template>
<a-select :disabled="formParam.createFrom==0" class="draitem" v-model:value="formParam.courseType" placeholder="请选择费用类型" <a-select :disabled="formParam.createFrom == 0" class="draitem" v-model:value="formParam.courseType"
:options="courseTypeList"> placeholder="请选择费用类型" :options="courseTypeList">
</a-select> </a-select>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="12">
<a-form-item name="courseName"> <a-form-item name="courseName">
<template v-slot:label> <template v-slot:label>
<img <img style="margin-right:4px;width: 7px;height: 7px"
style="margin-right:4px;width: 7px;height: 7px" src="@/assets/images/coursewareManage/asterisk.png" alt="" />
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
课程名称 课程名称
</template> </template>
<!-- <a-radio-group v-model:value="formParam.courseName"> <!-- <a-radio-group v-model:value="formParam.courseName">
@@ -312,7 +290,8 @@
<!-- <a-select class="draitem" v-model:value="formParam.courseName" placeholder="请选择输入或选择面授课" style="width:63%" allowClear <!-- <a-select class="draitem" v-model:value="formParam.courseName" placeholder="请选择输入或选择面授课" style="width:63%" allowClear
:options="getLevelList"> :options="getLevelList">
</a-select> --> </a-select> -->
<a-input :disabled="formParam.createFrom==0" :maxlength="20" show-count v-model:value="formParam.courseName" placeholder="请输入面授课名称" class="draitem"> <a-input :disabled="formParam.createFrom == 0" :maxlength="20" show-count
v-model:value="formParam.courseName" placeholder="请输入面授课名称" class="draitem">
</a-input> </a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
@@ -322,34 +301,38 @@
<a-col :span="12"> <a-col :span="12">
<a-form-item name="trainOrgId"> <a-form-item name="trainOrgId">
<template v-slot:label> <template v-slot:label>
<img <img style="margin-right:4px;width: 7px;height: 7px"
style="margin-right:4px;width: 7px;height: 7px" src="@/assets/images/coursewareManage/asterisk.png" alt="" />
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
培训发生组织 培训发生组织
</template> </template>
<!-- <OrgClass <!-- <OrgClass
v-model:value="formParam.sourceBelongId" v-model:value="formParam.sourceBelongId"
v-model:name="formParam.sourceBelongFullName" v-model:name="formParam.sourceBelongFullName"
></OrgClass> --> ></OrgClass> -->
<a-select :disabled="formParam.createFrom==0" v-model:value="formParam.trainOrgId" placeholder="请选择培训发生组织" allowClear <!-- TODO GX02 -->
:options="orgList" @change="changeOrg"> <a-select
:disabled="formParam.createFrom == 0"
v-model:value="formParam.trainOrgId"
placeholder="请选择培训发生组织"
allowClear
showSearch
:options="filterOrgListSearch"
@search="handleOrgSearch"
@change="changeOrg">
</a-select> </a-select>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="12">
<a-form-item name="teachingDate"> <a-form-item name="teachingDate">
<template v-slot:label> <template v-slot:label>
<img <img style="margin-right:4px;width: 7px;height: 7px"
style="margin-right:4px;width: 7px;height: 7px" src="@/assets/images/coursewareManage/asterisk.png" alt="" />
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
{{ formParam.courseType == 2 ? '课程' : '授课' }}日期 : {{ formParam.courseType == 2 ? '课程' : '授课' }}日期 :
</template> </template>
<a-date-picker :disabled="formParam.createFrom==0" :locale="locale" 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 :disabled="formParam.createFrom == 0" :locale="locale" class="draitem"
placeholder="请选择课程日期" @select="handleSelect" /> 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="请选择课程日期"
@select="handleSelect" />
</a-form-item> </a-form-item>
</a-col> </a-col>
</a-row> </a-row>
@@ -358,11 +341,8 @@
<a-col :span="12"> <a-col :span="12">
<a-form-item name="teachingTime"> <a-form-item name="teachingTime">
<template v-slot:label> <template v-slot:label>
<img <img style="margin-right:4px;width: 7px;height: 7px"
style="margin-right:4px;width: 7px;height: 7px" src="@/assets/images/coursewareManage/asterisk.png" alt="" />
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
{{ formParam.courseType == 2 ? '课程时长' : '授课时长' }} {{ formParam.courseType == 2 ? '课程时长' : '授课时长' }}
</template> </template>
<a-input v-model:value="formParam.teachingTime" style="width:100%; height: 40px; border-radius: 8px; " <a-input v-model:value="formParam.teachingTime" style="width:100%; height: 40px; border-radius: 8px; "
@@ -376,15 +356,12 @@
<a-col :span="12"> <a-col :span="12">
<a-form-item name="studys"> <a-form-item name="studys">
<template v-slot:label> <template v-slot:label>
<img <img style="margin-right:4px;width: 7px;height: 7px"
style="margin-right:4px;width: 7px;height: 7px" src="@/assets/images/coursewareManage/asterisk.png" alt="" />
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
参训人数 参训人数
</template> </template>
<a-input :disabled="formParam.createFrom==0" v-model:value="formParam.studys" class="draitem" @change="clearstudysNumber" <a-input :disabled="formParam.createFrom == 0" v-model:value="formParam.studys" class="draitem"
placeholder="请输入参训人数" allowClear showSearch > @change="clearstudysNumber" placeholder="请输入参训人数" allowClear showSearch>
</a-input> </a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
@@ -394,14 +371,12 @@
<a-col :span="12"> <a-col :span="12">
<a-form-item name="score"> <a-form-item name="score">
<template v-slot:label> <template v-slot:label>
<img <img style="margin-right:4px;width: 7px;height: 7px"
style="margin-right:4px;width: 7px;height: 7px" src="@/assets/images/coursewareManage/asterisk.png" alt="" />
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
评分 评分
</template> </template>
<a-input-number :disabled="formParam.createFrom==0" class="draitem" v-model:value="formParam.score" :defaultValue="null" :max="100" :controls="false" :min="1" :precision="2" placeholder="请输入评分" <a-input-number :disabled="formParam.createFrom == 0" class="draitem" v-model:value="formParam.score"
:defaultValue="null" :max="100" :controls="false" :min="1" :precision="2" placeholder="请输入评分"
allowClear @change="scoreNumber"> allowClear @change="scoreNumber">
</a-input-number> </a-input-number>
</a-form-item> </a-form-item>
@@ -409,16 +384,13 @@
<a-col :span="12"> <a-col :span="12">
<a-form-item name="levelPay"> <a-form-item name="levelPay">
<template v-slot:label> <template v-slot:label>
<img <img style="margin-right:4px;width: 7px;height: 7px"
style="margin-right:4px;width: 7px;height: 7px" src="@/assets/images/coursewareManage/asterisk.png" alt="" />
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
课酬基准 课酬基准
</template> </template>
<a-input-number v-model:value="formParam.levelPay" placeholder="自动键入系统基准(可手动更改)" :max="99999999" :controls="false" :min="0" :precision="2" <a-input-number v-model:value="formParam.levelPay" placeholder="自动键入系统基准(可手动更改)" :max="99999999"
@change="clearlevelPayNumber" :controls="false" :min="0" :precision="2" @change="clearlevelPayNumber" allowClear showSearch
allowClear showSearch class="draitem"> class="draitem">
</a-input-number> </a-input-number>
</a-form-item> </a-form-item>
</a-col> </a-col>
@@ -428,15 +400,12 @@
<a-col :span="12"> <a-col :span="12">
<a-form-item name="expense"> <a-form-item name="expense">
<template v-slot:label> <template v-slot:label>
<img <img style="margin-right:4px;width: 7px;height: 7px"
style="margin-right:4px;width: 7px;height: 7px" src="@/assets/images/coursewareManage/asterisk.png" alt="" />
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
计划费用 计划费用
</template> </template>
<a-input class="draitem" v-model:value="formParam.expense" placeholder="自动计算( 授课时长(或课程时长)*课酬基准 " allowClear disabled <a-input class="draitem" v-model:value="formParam.expense" placeholder="自动计算( 授课时长(或课程时长)*课酬基准 "
showSearch> allowClear disabled showSearch>
</a-input> </a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
@@ -503,39 +472,51 @@
</a-modal> </a-modal>
</div> </div>
<!-- <div> <Upload/> </div> --> <!-- <div> <Upload/> </div> -->
<a-drawer class="largeDrawerInside" v-model:visible="teachingdialog" placement="right" <a-drawer class="largeDrawerInside" v-model:visible="teachingdialog" placement="right" :closable="false" width="60%"
:closable="false" width="60%" :title="false"> :title="false">
<div style="padding:24px;"> <div style="padding:24px;">
<div class="headers" style="margin-top:-24px;"> <div class="headers" style="margin-top:-24px;">
<div class="headerTitle">查看讲师费用</div> <div class="headerTitle">查看讲师费用</div>
<img <img style="width: 29px; height: 29px; cursor: pointer" src="../../assets/images/basicinfo/close.png"
style="width: 29px; height: 29px; cursor: pointer" @click="cancelTeachingDialog(false)" />
src="../../assets/images/basicinfo/close.png"
@click="cancelTeachingDialog(false)"
/>
</div> </div>
<span class="line"></span> <span class="line"></span>
<span style="font-weight: 600;">讲师费用详情</span> <span style="font-weight: 600;">讲师费用详情</span>
<a-descriptions style="padding-bottom: 35px;margin-top:20px;" bordered :column="2" :contentStyle="{width:'300px',}" :labelStyle="{width:'166px'}"> <a-descriptions style="padding-bottom: 35px;margin-top:20px;" bordered :column="2"
<a-descriptions-item label="讲师姓名"><div style="user-select: text">{{formParam.name}}</div></a-descriptions-item> :contentStyle="{ width: '300px', }" :labelStyle="{ width: '166px' }">
<a-descriptions-item label="讲师姓名">
<div style="user-select: text">{{ formParam.name }}</div>
</a-descriptions-item>
<!-- <a-descriptions-item label="讲师工号">{{formParam.userNo}}</a-descriptions-item> --> <!-- <a-descriptions-item label="讲师工号">{{formParam.userNo}}</a-descriptions-item> -->
<a-descriptions-item label="讲师组织">{{ formParam.orgNames }}</a-descriptions-item> <a-descriptions-item label="讲师组织">{{ formParam.orgNames }}</a-descriptions-item>
<a-descriptions-item label="讲师体系">{{ formParam.tsystemName }}</a-descriptions-item> <a-descriptions-item label="讲师体系">{{ formParam.tsystemName }}</a-descriptions-item>
<a-descriptions-item label="讲师级别">{{ formParam.tlevelName }}</a-descriptions-item> <a-descriptions-item label="讲师级别">{{ formParam.tlevelName }}</a-descriptions-item>
<a-descriptions-item label="讲师发薪地">{{ formParam?.payrollPlace || '-' }}</a-descriptions-item> <a-descriptions-item label="讲师发薪地">{{ formParam?.payrollPlace || '-' }}</a-descriptions-item>
<a-descriptions-item label="课程名称"><div style="user-select: text">{{formParam.courseName || '-'}}</div></a-descriptions-item> <a-descriptions-item label="课程名称">
<a-descriptions-item label="费用类型">{{{0:'在线',1:'面授',2:'课程开发',3:'作业员入模培训',4:'其他'}[formParam?.courseType]}}</a-descriptions-item> <div style="user-select: text">{{ formParam.courseName || '-' }}</div>
</a-descriptions-item>
<a-descriptions-item
label="费用类型">{{ { 0: '在线', 1: '面授', 2: '课程开发', 3: '作业员入模培训', 4: '其他' }[formParam?.courseType] }}</a-descriptions-item>
<!-- <a-descriptions-item label="课程类型">{{formParam.courseType==1?'项目开课' :formParam.courseType==2 ?'路径开课':formParam.courseType==3 ?'面授开课':'-'}}</a-descriptions-item> --> <!-- <a-descriptions-item label="课程类型">{{formParam.courseType==1?'项目开课' :formParam.courseType==2 ?'路径开课':formParam.courseType==3 ?'面授开课':'-'}}</a-descriptions-item> -->
<a-descriptions-item label="培训发生组织"><div style="user-select: text">{{formParam.trainOrgName || '-'}}</div></a-descriptions-item> <a-descriptions-item label="培训发生组织">
<div style="user-select: text">{{ formParam.trainOrgName || '-' }}</div>
</a-descriptions-item>
<a-descriptions-item label="授课/课程开发日期 ">{{ (formParam.teachingDate) || '-' }}</a-descriptions-item> <a-descriptions-item label="授课/课程开发日期 ">{{ (formParam.teachingDate) || '-' }}</a-descriptions-item>
<a-descriptions-item label="授课/课程开发时长 ">{{formParam.teachingTime || '-'}} <span v-if="formParam.teachingTime">({{(formParam.teachingTime/60).toFixed(2)}}小时)</span></a-descriptions-item> <a-descriptions-item label="授课/课程开发时长 ">{{ formParam.teachingTime || '-' }} <span
v-if="formParam.teachingTime">({{ (formParam.teachingTime / 60).toFixed(2) }}小时)</span></a-descriptions-item>
<a-descriptions-item label="参训人数 ">{{ formParam.studys ? formParam.studys + '人' : '-' }}</a-descriptions-item> <a-descriptions-item label="参训人数 ">{{ formParam.studys ? formParam.studys + '人' : '-' }}</a-descriptions-item>
<a-descriptions-item label="评分 ">{{formParam.score?Number(formParam.score).toFixed(0)==0?'-':Number(formParam.score).toFixed(2)+'分':'-' }}</a-descriptions-item> <a-descriptions-item
<a-descriptions-item label="基准课酬 ">{{formParam.levelPay||formParam.levelPay==0?formParam.levelPay+'' : '-'}}</a-descriptions-item> label="评分 ">{{ formParam.score ? Number(formParam.score).toFixed(0) == 0 ? '-' : Number(formParam.score).toFixed(2) + '' : '-'
}}</a-descriptions-item>
<a-descriptions-item label="基准课酬 ">{{ formParam.levelPay || formParam.levelPay == 0 ? formParam.levelPay + '元' :
'-'}}</a-descriptions-item>
<a-descriptions-item label="计划费用 ">{{ formParam.expense ? formParam.expense + '元' : '-' }}</a-descriptions-item> <a-descriptions-item label="计划费用 ">{{ formParam.expense ? formParam.expense + '元' : '-' }}</a-descriptions-item>
<!-- <a-descriptions-item label="应发费用 ">{{formParam.payableExpense || '-'}}</a-descriptions-item> --> <!-- <a-descriptions-item label="应发费用 ">{{formParam.payableExpense || '-'}}</a-descriptions-item> -->
<!-- <a-descriptions-item label="费用发放时间">{{formParam.payableExpenseTime || '-'}}</a-descriptions-item> --> <!-- <a-descriptions-item label="费用发放时间">{{formParam.payableExpenseTime || '-'}}</a-descriptions-item> -->
<a-descriptions-item label="状态">{{{0:'待确认' ,1:'待提交' ,2:'审核中', 3:'审核通过', 4:'审核拒绝',5:'停用'}[formParam?.status]}}</a-descriptions-item> <a-descriptions-item label="状态">{{ {
0: '待确认', 1: '待提交', 2: '审核中', 3: '审核通过',
4: '审核拒绝', 5: '停用'
}[formParam?.status]}}</a-descriptions-item>
<!-- <a-descriptions-item label="课程类型">{{{"0": "在线课","1": "面授课","2": "课程开发","3": "作业员入模培训","4": "其他",}[formParam.courseType + ""]}}</a-descriptions-item> --> <!-- <a-descriptions-item label="课程类型">{{{"0": "在线课","1": "面授课","2": "课程开发","3": "作业员入模培训","4": "其他",}[formParam.courseType + ""]}}</a-descriptions-item> -->
<a-descriptions-item label="备注 ">{{ formParam.remark || '-' }}</a-descriptions-item> <a-descriptions-item label="备注 ">{{ formParam.remark || '-' }}</a-descriptions-item>
</a-descriptions> </a-descriptions>
@@ -564,18 +545,21 @@
</div> --> </div> -->
</div> </div>
</a-drawer> </a-drawer>
<ImportWork v-model:showWork="showWork" :template="'讲师费导入模版-20250115.xlsx'" :url="'/admin/export/importTeacherExpense'" :fileName="uploadFile" :title="title"></ImportWork> <!-- TODO dr01 -->
<ImportWork v-model:showWork="showWork" :template="'/admin/export/exportExpenseTemplate'"
:url="'/admin/export/importTeacherExpense'" :fileName="uploadFile" :title="title"></ImportWork>
</div> </div>
<div class="example" v-if="example"> <div class="example" v-if="example">
<a-spin /> <a-spin />
</div> </div>
<!-- 一键确认讲师费 --> <!-- 一键确认讲师费 -->
<ConfirmLecturer @example="getexample" @visibleFalse="visibleAll" :ids="selectsIds" v-model:visible="visibleConfirm" :name="'确认讲师费'" /> <ConfirmLecturer @example="getexample" @visibleFalse="visibleAll" :ids="selectsIds" v-model:visible="visibleConfirm"
:name="'确认讲师费'" />
<!-- 批量确认讲师费 --> <!-- 批量确认讲师费 -->
<BatchLecturer @selectedRowKeys="selectedRowKey" v-model:visible="allFeedialog" :name="'批量审批'" /> <BatchLecturer @selectedRowKeys="selectedRowKey" v-model:visible="allFeedialog" :name="'批量审批'" />
</template> </template>
<script lang="jsx"> <script lang="jsx">
import { reactive, toRefs, ref ,watch,onMounted} from "vue"; import { reactive, toRefs, ref, watch, onMounted , computed ,defineProps} from "vue";
import { message } from "ant-design-vue"; import { message } from "ant-design-vue";
import dayjs from "dayjs"; import dayjs from "dayjs";
import locale from 'ant-design-vue/es/date-picker/locale/zh_CN'; import locale from 'ant-design-vue/es/date-picker/locale/zh_CN';
@@ -602,6 +586,9 @@
import { checkMenu } from '@/utils/utils' import { checkMenu } from '@/utils/utils'
export default { export default {
name: "LecturerFee", name: "LecturerFee",
props: {
activeKeyFn: Function
},
components: { components: {
DownOutlined, //图标--展开 DownOutlined, //图标--展开
UpOutlined,//图标--收起 UpOutlined,//图标--收起
@@ -614,13 +601,14 @@
BatchLecturer, BatchLecturer,
OrgClass, OrgClass,
}, },
setup() { setup(props) {
const formRef = ref(); const formRef = ref();
const state = reactive({ const state = reactive({
example: false, example: false,
tableDataSee: [], tableDataSee: [],
SeeLoading: false, SeeLoading: false,
orgList: [], orgList: [],
filterOrgListSearch: [],
orgListSearch: [], orgListSearch: [],
selectsIds: '', selectsIds: '',
visibleConfirm: false, visibleConfirm: false,
@@ -711,6 +699,7 @@
} }
}) })
state.orgListSearch = res.data.data?.map(item => { state.orgListSearch = res.data.data?.map(item => {
state.orgInput = item.affiliationName;
return { return {
label: item.affiliationName, label: item.affiliationName,
value: item.id value: item.id
@@ -719,6 +708,9 @@
state.orgListSearch.unshift({ state.orgListSearch.unshift({
label: '全部', value: '' label: '全部', value: ''
}) })
state.filterOrgListSearch = state.orgListSearch
}) })
} }
//费用类型 //费用类型
@@ -747,6 +739,7 @@
{ value: '2', label: "审核中" }, { value: '2', label: "审核中" },
{ value: '4', label: "审核拒绝" }, { value: '4', label: "审核拒绝" },
{ value: '3', label: "审核通过" }, { value: '3', label: "审核通过" },
{ value: '5', label: "已停用" },
]) ])
const lecturerSystemList = ref([ const lecturerSystemList = ref([
@@ -756,6 +749,7 @@
let obj = { let obj = {
pageNo: 1, pageNo: 1,
pageSize: 1000, pageSize: 1000,
isView: 1
} }
getTeacherSystemList(obj).then((res) => { getTeacherSystemList(obj).then((res) => {
if (res.data.code === 200) { if (res.data.code === 200) {
@@ -1218,6 +1212,11 @@ getAllLevelList().then((res) => {
} }
}) })
const changeOrg = (e, l) => { const changeOrg = (e, l) => {
console.log("changeOrg e",e);
console.log("changeOrg l",l);
if(l == undefined || l == null){
state.filterOrgListSearch = state.orgListSearch;
}
state.formParam.trainOrgName = l?.label state.formParam.trainOrgName = l?.label
} }
//保存 //保存
@@ -1235,7 +1234,8 @@ getAllLevelList().then((res) => {
} else { } else {
state.formParam.score = null state.formParam.score = null
} }
if(state.formParam.levelPay){ console.log("state.formParam.levelPay",state.formParam.levelPay)
if (state.formParam.levelPay || state.formParam.levelPay == 0) {
state.formParam.levelPay = String(state.formParam.levelPay) state.formParam.levelPay = String(state.formParam.levelPay)
} }
if (state.formParam.payableExpense) { if (state.formParam.payableExpense) {
@@ -1551,7 +1551,7 @@ getAllLevelList().then((res) => {
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 && 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.teachingTime && (state.formParam.payableExpense = (state.formParam.levelPay * (state.formParam.teachingTime / 60)).toFixed(2))
state.formParam.levelPay && (state.formParam.levelPay = String(state.formParam.levelPay)) state.formParam.levelPay && (state.formParam.levelPay = String(state.formParam.levelPay))
@@ -1583,6 +1583,23 @@ getAllLevelList().then((res) => {
// payableExpense: [{ required: true, message: '',log:'应发费用不能为空' }], // payableExpense: [{ required: true, message: '',log:'应发费用不能为空' }],
} }
//TODO4 筛查
const handleOrgSearch = (value) => {
console.log("handleOrgSearch value ",value)
//克隆数据
let temp = JSON.parse(JSON.stringify(state.orgListSearch));
//选择数据
state.filterOrgListSearch = temp.filter(item => item.label.includes(value))
}
const handleOrgChange = (value) => {
if(value == undefined || value == null){
state.filterOrgListSearch = state.orgListSearch;
}
}
const handleImport = () => { const handleImport = () => {
state.showWork = true state.showWork = true
} }
@@ -1595,6 +1612,7 @@ getAllLevelList().then((res) => {
} }
const getexample = (val) => { const getexample = (val) => {
state.example = val state.example = val
props.activeKeyFn();
} }
const selectedRowKey = (val) => { const selectedRowKey = (val) => {
state.selectsIds = val?.join(','); state.selectsIds = val?.join(',');
@@ -1857,10 +1875,10 @@ const column = ref([
}; };
//回车 //回车
const enterPressHadlerSearch = e => { const enterPressHadlerSearch = e => {
    if (e.keyCode === 13) { if (e.keyCode === 13) {
      searchSubmit() searchSubmit()
    } }
}; };
return { return {
...toRefs(state), ...toRefs(state),
@@ -1911,6 +1929,8 @@ const column = ref([
TeacherSystem, TeacherSystem,
getListData, getListData,
changetlevel, changetlevel,
handleOrgSearch,
handleOrgChange,
canceleditTeacherDialog, canceleditTeacherDialog,
allFee, allFee,
selectedRowKey, selectedRowKey,
@@ -1934,9 +1954,11 @@ const column = ref([
}; };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.select .ant-picker { .select .ant-picker {
width: 410px !important; width: 410px !important;
} }
.example { .example {
width: 100%; width: 100%;
height: 100%; height: 100%;
@@ -1949,6 +1971,7 @@ const column = ref([
justify-content: center; justify-content: center;
align-items: center; align-items: center;
} }
.headers { .headers {
height: 57px; height: 57px;
border-bottom: 1px solid #e8e8e8; border-bottom: 1px solid #e8e8e8;
@@ -1967,6 +1990,7 @@ const column = ref([
// margin-left: 24px; // margin-left: 24px;
} }
} }
.addTimeBox { .addTimeBox {
position: relative; position: relative;
display: flex; display: flex;
@@ -1987,9 +2011,11 @@ const column = ref([
margin-left: 85px !important; margin-left: 85px !important;
} }
} }
.addTimeBox .ant-picker { .addTimeBox .ant-picker {
padding-left: 85px; padding-left: 85px;
} }
//导出按钮icon //导出按钮icon
.daochu { .daochu {
width: 16px; width: 16px;
@@ -2239,6 +2265,7 @@ const column = ref([
margin-right: 14px; margin-right: 14px;
flex-shrink: 0; flex-shrink: 0;
cursor: pointer; cursor: pointer;
.search { .search {
width: 15px; width: 15px;
height: 16px; height: 16px;
@@ -2282,9 +2309,7 @@ const column = ref([
} }
//抽屉功能 //抽屉功能
.drawaer .drawaer // /* 改变所有 a-tree-select 输入框的高度 */
// /* 改变所有 a-tree-select 输入框的高度 */
// ::v-deep .ant-select:not(.ant-select-customize-input) .ant-select-selector{ // ::v-deep .ant-select:not(.ant-select-customize-input) .ant-select-selector{
// height: 40px; // height: 40px;
// line-height: 40px; // line-height: 40px;
@@ -2297,6 +2322,7 @@ const column = ref([
line-height: 40px; line-height: 40px;
border-radius: 8px border-radius: 8px
} }
// 抽屉内样式 // 抽屉内样式
.draitem { .draitem {
width: 100%; width: 100%;
@@ -2304,16 +2330,19 @@ const column = ref([
border-radius: 8px; border-radius: 8px;
line-height: 40px; line-height: 40px;
} }
.drabtn { .drabtn {
height: 40px; height: 40px;
width: 80px; width: 80px;
border-radius: 8px; border-radius: 8px;
margin-right: 20px margin-right: 20px
} }
::v-deep .ant-select:not(.ant-select-customize-input) .ant-select-selector { ::v-deep .ant-select:not(.ant-select-customize-input) .ant-select-selector {
border-radius: 8px; border-radius: 8px;
height: 40px; height: 40px;
} }
.ant-col-12 { .ant-col-12 {
height: 90px; height: 90px;
} }
@@ -2325,18 +2354,23 @@ const column = ref([
::v-deep .ant-select-multiple .ant-select-selection-item { ::v-deep .ant-select-multiple .ant-select-selection-item {
height: 34px height: 34px
} }
.tableBox { .tableBox {
padding-bottom: 20px; padding-bottom: 20px;
margin: 20px 38px 30px; margin: 20px 38px 30px;
::v-deep .ant-select-dropdown { ::v-deep .ant-select-dropdown {
display: inline-block; display: inline-block;
} }
::v-deep .ant-select-selection-item { ::v-deep .ant-select-selection-item {
margin-left: 3px; margin-left: 3px;
} }
::v-deep .ant-pagination-options-size-changer.ant-select { ::v-deep .ant-pagination-options-size-changer.ant-select {
width: 84px; width: 84px;
} }
.pa { .pa {
width: 100%; width: 100%;
display: flex; display: flex;

View File

@@ -4,11 +4,11 @@
<div style="margin: 20px;margin-top:0;"> <div style="margin: 20px;margin-top:0;">
<a-tabs v-model:activeKey="activeKey"> <a-tabs v-model:activeKey="activeKey">
<a-tab-pane key="1" tab="讲师费管理"> <a-tab-pane key="1" tab="讲师费管理">
<LecturerFee /> <LecturerFee :activeKeyFn="activeKeyFn"/>
</a-tab-pane> </a-tab-pane>
<!-- v-if="lecturerAdmin('lecturer-admin')" --> <!-- v-if="lecturerAdmin('lecturer-admin')" -->
<a-tab-pane key="2" tab="审批中心"> <a-tab-pane key="2" tab="审批中心">
<LecturerApproval/> <LecturerApproval :activeKeyProps="activeKey"/>
</a-tab-pane> </a-tab-pane>
</a-tabs> </a-tabs>
</div> </div>
@@ -33,22 +33,28 @@ import {useStore} from 'vuex'
const state = reactive({ const state = reactive({
activeKey: '1', activeKey: '1',
}) })
//
const lecturerAdmin = (admin) => { const lecturerAdmin = (admin) => {
const roleCode = userInfo.value.roleList.map((item) => item.roleCode) const roleCode = userInfo.value.roleList.map((item) => item.roleCode)
if (admin) { if (admin) {
return roleCode.some(t => t == admin) return roleCode.some(t => t == admin)
} }
} }
watch(
)
onMounted(() => { onMounted(() => {
if (route.query.activeKey) { if (route.query.activeKey) {
state.activeKey = '2' state.activeKey = '2'
} }
}) })
const activeKeyFn = () => {
state.activeKey = '2'
}
return { return {
...toRefs(state), ...toRefs(state),
lecturerAdmin, lecturerAdmin,
activeKeyFn
} }
}, },
}; };
@@ -57,6 +63,7 @@ import {useStore} from 'vuex'
::v-deep .ant-tabs-tab { ::v-deep .ant-tabs-tab {
font-weight: 600; font-weight: 600;
} }
.LecturerFeeManagement { .LecturerFeeManagement {
width: 100%; width: 100%;
height: 100%; height: 100%;

View File

@@ -48,6 +48,7 @@
::v-deep .ant-tabs-tab { ::v-deep .ant-tabs-tab {
font-weight: 600; font-weight: 600;
} }
.LecturerList { .LecturerList {
width: 100%; width: 100%;
height: 100%; height: 100%;
@@ -321,4 +322,3 @@
} }
} }
</style> </style>

View File

@@ -1,7 +1,7 @@
<!-- 讲师费月度统计详情页面 --> <!-- 讲师费月度统计详情页面 -->
<template> <template>
<a-drawer :visible="visible" class="largeDrawerInside" placement="right" :closable="false" <a-drawer :visible="visible" class="largeDrawerInside" placement="right" :closable="false" width="80%" :title="false"
width="80%" :title="false" @close="handleBack"> @close="handleBack">
<div class="MonthlyStatistics"> <div class="MonthlyStatistics">
<!-- 搜索框及按钮 --> <!-- 搜索框及按钮 -->
<!-- <a-layout-header style="background: white;color: black; font-size: 20px ;"> <!-- <a-layout-header style="background: white;color: black; font-size: 20px ;">
@@ -15,19 +15,15 @@
</a-layout-header> --> </a-layout-header> -->
<div class="header"> <div class="header">
<div class="headerTitle">讲师费月度统计详情</div> <div class="headerTitle">讲师费月度统计详情</div>
<img <img style="width: 29px; height: 29px; cursor: pointer" src="../../assets/images/basicinfo/close.png"
style="width: 29px; height: 29px; cursor: pointer" @click="handleBack" />
src="../../assets/images/basicinfo/close.png"
@click="handleBack"
/>
</div> </div>
<!-- <a-divider style="height: 1px; background-color: #b7b8b7 ;margin: 0;" /> --> <!-- <a-divider style="height: 1px; background-color: #b7b8b7 ;margin: 0;" /> -->
<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: 240px; height: 40px; border-radius: 8px" <a-input v-model:value="searchParam.name" style="width: 240px; 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">
@@ -64,8 +60,16 @@
</div> </div>
</a-form> </a-form>
<div style="width: 100%;"></div> <div style="width: 100%;"></div>
<div v-if="checkMenu('lecturerSummaryExport')" style="display: flex; margin-bottom: 20px"> <div style="display: flex; margin-bottom: 20px">
<a-button class="resetbtn" @click="handleFeeMonthly" type="primary"><UploadOutlined/>导出</a-button> <a-button v-if="checkMenu('lecturerSummaryExport')" class="resetbtn" @click="handleFeeMonthly" type="primary">
<UploadOutlined />导出
</a-button>
<a-button v-if="checkMenu('lecturerMonthDown')" class="resetbtn-mo" @click="handleFeeMonthlyDown" type="primary">
<UploadOutlined />讲师月度费用下载
</a-button>
<a-button v-if="checkMenu('lecturerMonthDetailDown')" class="resetbtn-mo" @click="handleFeeMonthlyDetail" type="primary">
<UploadOutlined />讲师费用详情下载
</a-button>
</div> </div>
<!-- 表格 --> <!-- 表格 -->
<div style="margin-bottom: 4px;color: #aaaaaa;"> <div style="margin-bottom: 4px;color: #aaaaaa;">
@@ -81,7 +85,8 @@
<template v-if="column.key === 'operation'"> <template v-if="column.key === 'operation'">
<a-space> <a-space>
<a-button type="link" @click="() => handleLook(record, String(record.courseform))">查看</a-button> <a-button type="link" @click="() => handleLook(record, String(record.courseform))">查看</a-button>
<a-button v-if="checkMenu('lecturerSummaryCancel')" type="link" @click="handleLess(record)">撤回</a-button> <a-button v-if="checkMenu('lecturerSummaryCancel')" type="link"
@click="handleLess(record)">撤回</a-button>
</a-space> </a-space>
</template> </template>
</template> </template>
@@ -106,27 +111,25 @@
</div> </div>
</div> --> </div> -->
<!-- 抽屉 --> <!-- 抽屉 -->
<a-drawer class="largeDrawerInside" v-model:visible="opendrawer" placement="right" <a-drawer class="largeDrawerInside" v-model:visible="opendrawer" placement="right" @closa="cancelTeachingDialog"
@closa="cancelTeachingDialog" :maskClosable="true" width="80%" :title="false"> :maskClosable="true" width="80%" :title="false">
<div style="padding:24px;"> <div style="padding:24px;">
<div class="headers" style="margin-top:-24px;"> <div class="headers" style="margin-top:-24px;">
<div class="headerTitle">查看详情</div> <div class="headerTitle">查看详情</div>
<img <img style="width: 29px; height: 29px; cursor: pointer" src="@/assets/images/basicinfo/close.png"
style="width: 29px; height: 29px; cursor: pointer" @click="cancelTeachingDialog" />
src="@/assets/images/basicinfo/close.png"
@click="cancelTeachingDialog"
/>
</div> </div>
<a-form layout="inline"> <a-form layout="inline">
<a-form-item class="select"> <a-form-item class="select">
<a-input @pressEnter="searchSubmitdrawer" v-model:value="drawer.name" style="width: 260px; height: 40px; border-radius: 8px" <a-input @pressEnter="searchSubmitdrawer" v-model:value="drawer.name"
placeholder="请输入课程名称进行搜索" allowClear showSearch> style="width: 260px; height: 40px; border-radius: 8px" placeholder="请输入课程名称进行搜索" allowClear showSearch>
</a-input> </a-input>
</a-form-item> </a-form-item>
<a-form-item class="select "> <a-form-item class="select ">
<a-range-picker format="YYYY-MM-DD" <a-range-picker format="YYYY-MM-DD" valueFormat="YYYY-MM-DD"
valueFormat="YYYY-MM-DD" style="width: 260px; height: 40px; margin-bottom: 20px; border-radius: 8px" v-model:value="drawer.drawersearchdate" separator="" style="width: 260px; height: 40px; margin-bottom: 20px; border-radius: 8px"
:placeholder="[' 开始时间', ' 结束时间']" @change="searchTimeChange" /> v-model:value="drawer.drawersearchdate" separator="" :placeholder="[' 开始时间', ' 结束时间']"
@change="searchTimeChange" />
</a-form-item> </a-form-item>
<div style="display: flex; margin-bottom: 20px"> <div style="display: flex; margin-bottom: 20px">
<a-button @click="searchSubmitdrawer()" type="primary" class="resetbtn">查询 </a-button> <a-button @click="searchSubmitdrawer()" type="primary" class="resetbtn">查询 </a-button>
@@ -134,9 +137,11 @@
</div> </div>
</a-form> </a-form>
<!-- <span>讲师费发放情况</span> --> <!-- <span>讲师费发放情况</span> -->
<a-table :columns="column" :scroll="{ x: '1000' }" :data-source="tableDatas" :loading="tableLoadings" :pagination="false"> <a-table :columns="column" :scroll="{ x: '1000' }" :data-source="tableDatas" :loading="tableLoadings"
:pagination="false">
<template #action="{ record, column }"> <template #action="{ record, column }">
<a-button v-if="checkMenu('lecturerSummaryCancel')" type="link" @click="handleDetail(record)">撤回</a-button> <a-button v-if="checkMenu('lecturerSummaryCancel')" type="link"
@click="handleDetail(record)">撤回</a-button>
</template> </template>
</a-table> </a-table>
<!-- <div :style="{ <!-- <div :style="{
@@ -528,6 +533,22 @@ export default {
window.open( window.open(
`${process.env.VUE_APP_BASE_API}/admin/export/exportTeacherSummary?&name=${state.searchParam.name ? state.searchParam.name : ""}&id=${state.searchParam.id ? state.searchParam.id : ""}&trainOrgId=${state.searchParam.trainOrgId || ''}`) `${process.env.VUE_APP_BASE_API}/admin/export/exportTeacherSummary?&name=${state.searchParam.name ? state.searchParam.name : ""}&id=${state.searchParam.id ? state.searchParam.id : ""}&trainOrgId=${state.searchParam.trainOrgId || ''}`)
} }
// 讲师月度费用下载
const handleFeeMonthlyDown = () => {
console.log("handleFeeMonthlyDown state.searchParam.id param" , state.searchParam.id)
window.open(
`${process.env.VUE_APP_BASE_API}/admin/export/exportTeacherDimension?&billId=${state.searchParam.id ? state.searchParam.id : ""}`)
}
// 讲师费用详情下载
const handleFeeMonthlyDetail = () => {
console.log("handleFeeMonthlyDetail state.searchParam.id param" , state.searchParam.id)
window.open(
`${process.env.VUE_APP_BASE_API}/admin/export/exportTeacherDimensionDetail?&billId=${state.searchParam.id ? state.searchParam.id : ""}`)
}
//重置 //重置
const searchReset = () => { const searchReset = () => {
state.searchParam = { state.searchParam = {
@@ -735,11 +756,11 @@ export default {
}; };
//回车 //回车
const enterPressHadlerSearch = e => { const enterPressHadlerSearch = e => {
  console.log("e",e); console.log("e", e);
    if (e.keyCode === 13) { if (e.keyCode === 13) {
      searchSubmit() searchSubmit()
    } }
}; };
return { return {
...toRefs(state), ...toRefs(state),
@@ -749,6 +770,8 @@ export default {
cancelTeachingDialog, cancelTeachingDialog,
searchReset, searchReset,
handleFeeMonthly, handleFeeMonthly,
handleFeeMonthlyDown,
handleFeeMonthlyDetail,
handleLook, handleLook,
handleLess, handleLess,
handleDetail, handleDetail,
@@ -795,6 +818,7 @@ export default {
// margin-left: 24px; // margin-left: 24px;
} }
} }
width: 100%; width: 100%;
height: 100%; height: 100%;
display: flex; display: flex;
@@ -804,6 +828,7 @@ export default {
margin-left: 38px; margin-left: 38px;
margin-right: 38px; margin-right: 38px;
margin-top: 30px; margin-top: 30px;
// display: flex; // display: flex;
// justify-content: space-between; // justify-content: space-between;
// flex-wrap: wrap; // flex-wrap: wrap;
@@ -813,9 +838,11 @@ export default {
} }
} }
} }
.select .ant-picker { .select .ant-picker {
width: 410px !important; width: 410px !important;
} }
.headers { .headers {
height: 73px; height: 73px;
border-bottom: 1px solid #e8e8e8; border-bottom: 1px solid #e8e8e8;
@@ -834,6 +861,7 @@ export default {
// margin-left: 24px; // margin-left: 24px;
} }
} }
.addTimeBox { .addTimeBox {
position: relative; position: relative;
display: flex; display: flex;
@@ -1112,6 +1140,18 @@ export default {
cursor: pointer; cursor: pointer;
} }
.resetbtn-mo {
width: 200px;
height: 40px;
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
margin-right: 14px;
flex-shrink: 0;
cursor: pointer;
}
//展开收起样式 //展开收起样式
.moreidbtn { .moreidbtn {
border: none; border: none;
@@ -1158,13 +1198,16 @@ export default {
border-radius: 8px; border-radius: 8px;
margin-right: 20px margin-right: 20px
} }
::v-deep .ant-select:not(.ant-select-customize-input) .ant-select-selector { ::v-deep .ant-select:not(.ant-select-customize-input) .ant-select-selector {
// border-radius:8px; // border-radius:8px;
height: 32px; height: 32px;
} }
.ant-col-12 { .ant-col-12 {
height: 90px; height: 90px;
} }
.goback { .goback {
float: right; float: right;
padding-right: 70px; padding-right: 70px;
@@ -1188,18 +1231,23 @@ export default {
font-size: 14px; font-size: 14px;
} }
} }
tableBox { tableBox {
padding-bottom: 20px; padding-bottom: 20px;
margin: 20px 38px 30px; margin: 20px 38px 30px;
::v-deep .ant-select-dropdown { ::v-deep .ant-select-dropdown {
display: inline-block; display: inline-block;
} }
::v-deep .ant-select-selection-item { ::v-deep .ant-select-selection-item {
margin-left: 3px; margin-left: 3px;
} }
::v-deep .ant-pagination-options-size-changer.ant-select { ::v-deep .ant-pagination-options-size-changer.ant-select {
width: 84px; width: 84px;
} }
.pa { .pa {
width: 100%; width: 100%;
display: flex; display: flex;
@@ -1207,4 +1255,3 @@ justify-content: right;
} }
} }
</style> </style>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -40,6 +40,7 @@
::v-deep .ant-tabs-tab { ::v-deep .ant-tabs-tab {
font-weight: 600; font-weight: 600;
} }
.TeachingRecord { .TeachingRecord {
width: 100%; width: 100%;
height: 100%; height: 100%;