mirror of
https://codeup.aliyun.com/67762337eccfc218f6110e0e/vue/fe-manage.git
synced 2025-12-11 03:46:45 +08:00
Merge branch '250213-prod-master_1202-gx' into master_1202
This commit is contained in:
@@ -1,2 +1,3 @@
|
||||
NODE_ENV=test
|
||||
VUE_APP_BOE_API_URL=//u-pre.boe.com
|
||||
VUE_APP_BASE_API=/manageApi
|
||||
21
package-lock.json
generated
21
package-lock.json
generated
@@ -3727,8 +3727,6 @@
|
||||
"resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.12.0.tgz",
|
||||
"integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"fast-deep-equal": "^3.1.1",
|
||||
"json-schema-traverse": "^1.0.0",
|
||||
@@ -3740,9 +3738,7 @@
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
|
||||
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"peer": true
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/ajv-keywords": {
|
||||
"version": "3.5.2",
|
||||
@@ -14457,6 +14453,7 @@
|
||||
"integrity": "sha512-yl+5qhpjd8e1G4cMXfORkkBlvtPCIgmRf3IYCWYDKIQ7m+PPa5iTm4feiNmCMD6yGqQWMhhK/7M3oWGL9boKwg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@babel/core": "^7.12.16",
|
||||
"@babel/helper-compilation-targets": "^7.12.16",
|
||||
"@babel/helper-module-imports": "^7.12.13",
|
||||
"@babel/plugin-proposal-class-properties": "^7.12.13",
|
||||
@@ -14469,6 +14466,7 @@
|
||||
"@vue/babel-plugin-jsx": "^1.0.3",
|
||||
"@vue/babel-preset-jsx": "^1.1.2",
|
||||
"babel-plugin-dynamic-import-node": "^2.3.3",
|
||||
"core-js": "^3.8.3",
|
||||
"core-js-compat": "^3.8.3",
|
||||
"semver": "^7.3.4"
|
||||
},
|
||||
@@ -15334,14 +15332,15 @@
|
||||
"resolved": "https://registry.npmmirror.com/ajv-formats/-/ajv-formats-2.1.1.tgz",
|
||||
"integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
|
||||
"dev": true,
|
||||
"requires": {},
|
||||
"requires": {
|
||||
"ajv": "^8.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"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==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"fast-deep-equal": "^3.1.1",
|
||||
"json-schema-traverse": "^1.0.0",
|
||||
@@ -15353,9 +15352,7 @@
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
|
||||
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"peer": true
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -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 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}`)
|
||||
//撤回讲师费统计详情
|
||||
|
||||
@@ -23,8 +23,14 @@ export const importTeacherCourseRecord = (obj) => http.post('/importTeacherCours
|
||||
export const getAddress = (obj) => http.post('/admin/teacher/getAddress', 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) =>
|
||||
http.post("/admin/teacher/teacherUpload", data, {
|
||||
headers: { "Content-Type": "multipart/form-data",token:getCookieForName("token") },
|
||||
});
|
||||
|
||||
|
||||
@@ -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 updateTeacherFee= (obj) => http.post('/admin/teacherExpense/editTeacherExpense',obj)
|
||||
//修改讲师费状态提交
|
||||
//修改讲师费状态提交/admin/expenseBill
|
||||
export const updateStatusSubmit= (obj) => http.post('/admin/teacherExpense/confirm',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 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)
|
||||
@@ -22,7 +22,11 @@
|
||||
<div class="main">
|
||||
<div class="minatitl">
|
||||
<div class="up1">请下载</div>
|
||||
<div class="up2" @click="downTemplate" style="cursor: pointer">
|
||||
<div
|
||||
class="up2"
|
||||
@click="downTemplate"
|
||||
style="cursor: pointer"
|
||||
>
|
||||
模板
|
||||
</div>
|
||||
<div class="up1">,按要求填写数据并导入</div>
|
||||
@@ -31,18 +35,28 @@
|
||||
<div class="text">上传:</div>
|
||||
<div class="right">
|
||||
<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"
|
||||
@change="handleChange" :showUploadList="false">
|
||||
@change="handleChange"
|
||||
:showUploadList="false"
|
||||
>
|
||||
<p class="ant-upload-drag-icon">
|
||||
<inbox-outlined></inbox-outlined>
|
||||
</p>
|
||||
<p class="ant-upload-text">点击或将文件拖拽到此处上传</p>
|
||||
<p class="ant-upload-text">
|
||||
点击或将文件拖拽到此处上传
|
||||
</p>
|
||||
<p class="ant-upload-hint">支持扩展名:.xls/.xlsx</p>
|
||||
</a-upload-dragger>
|
||||
</div>
|
||||
<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="img"></div>
|
||||
<div class="timebox">
|
||||
@@ -52,8 +66,7 @@
|
||||
</div>
|
||||
<a-progress :percent="uploadpercent" />
|
||||
</div>
|
||||
<div class="curloading">
|
||||
</div>
|
||||
<div class="curloading"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="loadborder" v-if="uploadErr">
|
||||
@@ -90,7 +103,11 @@
|
||||
<a-progress :percent="uploadpercent" />
|
||||
</div>
|
||||
<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>
|
||||
@@ -101,25 +118,43 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="uploadpercent === 100" class="defeat" style="
|
||||
<!-- <div
|
||||
v-if="uploadpercent === 100"
|
||||
class="defeat"
|
||||
style="
|
||||
display: flex;
|
||||
align-items: center;
|
||||
width: 500px;
|
||||
height: 40px;" :style="{
|
||||
height: 40px;
|
||||
"
|
||||
:style="{
|
||||
background: errNum
|
||||
? 'rgba(255, 116, 116, 0.1)'
|
||||
: 'rgba(53, 174, 105, 0.1)',
|
||||
border: errNum ? '1px solid #ff7474' : '1px solid #35AE69',
|
||||
}">
|
||||
<img style="width: 14px; height: 14px; margin-left: 16px" :src="
|
||||
border: errNum
|
||||
? '1px solid #ff7474'
|
||||
: '1px solid #35AE69',
|
||||
}"
|
||||
>
|
||||
<img
|
||||
style="width: 14px; height: 14px; margin-left: 16px"
|
||||
:src="
|
||||
errNum
|
||||
? require('../../assets/images/err.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>
|
||||
"
|
||||
/> -->
|
||||
<!-- <div
|
||||
style="margin-left: 8px"
|
||||
:style="{
|
||||
color: errNum ? '#ff7474' : 'rgba(0,0,0,0.65)',
|
||||
}"
|
||||
>
|
||||
{{ succNum }}条数据导入成功,{{
|
||||
errNum
|
||||
}}条数据导入失败
|
||||
</div> -->
|
||||
<!-- </div> -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -137,16 +172,15 @@
|
||||
</template>
|
||||
|
||||
<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 { useStore } from "vuex";
|
||||
import * as api from "../../api/index1";
|
||||
import {getCookieForName} from "@/api/method";
|
||||
export default {
|
||||
import { getCookieForName } from "@/api/method";
|
||||
export default {
|
||||
name: "importWork",
|
||||
components: {
|
||||
|
||||
},
|
||||
components: {},
|
||||
props: {
|
||||
showWork: {
|
||||
type: Boolean,
|
||||
@@ -156,11 +190,11 @@ import {getCookieForName} from "@/api/method";
|
||||
type: String,
|
||||
default: null,
|
||||
},
|
||||
title:{
|
||||
title: {
|
||||
type: String,
|
||||
default: null,
|
||||
},
|
||||
template:{
|
||||
template: {
|
||||
type: String,
|
||||
default: null,
|
||||
},
|
||||
@@ -168,8 +202,7 @@ import {getCookieForName} from "@/api/method";
|
||||
setup(props, ctx) {
|
||||
const state = reactive({
|
||||
fileType: ["xls", "xlsx"],
|
||||
importHomeWork:
|
||||
process.env.VUE_APP_BASE_API + props.url,
|
||||
importHomeWork: process.env.VUE_APP_BASE_API + props.url,
|
||||
uploadpercent: -1,
|
||||
uploadErr: false, //上传失败
|
||||
addLoading: false,
|
||||
@@ -213,20 +246,20 @@ import {getCookieForName} from "@/api/method";
|
||||
state.uploadpercent = parseInt(info.file.percent);
|
||||
console.log("我是文件上传的进度---------->", info.file.percent);
|
||||
const status = info.file.status;
|
||||
console.log(info.file,'status')
|
||||
console.log(info.file, "status");
|
||||
if (status !== "uploading") {
|
||||
// console.log(info.file, info.fileList);
|
||||
}
|
||||
if (status === "done") {
|
||||
state.fileName = info.file.name;
|
||||
if(info.file.response.code == 200){
|
||||
if (info.file.response.code == 200) {
|
||||
state.succNum = Number(info.file.response.data.success);
|
||||
state.errNum = Number(info.file.response.data.failed);
|
||||
state.downloadErrUrl = info.file.response.data.path;
|
||||
}else{
|
||||
} else {
|
||||
state.uploadErr = true;
|
||||
state.fileList = [];
|
||||
state.uploadpercent = -1
|
||||
state.uploadpercent = -1;
|
||||
message.destroy();
|
||||
message.error(info.file.response.msg);
|
||||
}
|
||||
@@ -295,7 +328,13 @@ import {getCookieForName} from "@/api/method";
|
||||
}
|
||||
};
|
||||
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 {
|
||||
@@ -308,7 +347,7 @@ import {getCookieForName} from "@/api/method";
|
||||
downloadEeeorData,
|
||||
};
|
||||
},
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@@ -360,12 +399,12 @@ import {getCookieForName} from "@/api/method";
|
||||
background-size: 100% 100%;
|
||||
}
|
||||
}
|
||||
.line{
|
||||
.line {
|
||||
height: 1px;
|
||||
margin-top: 16px;
|
||||
background-color: #f0f0f0;
|
||||
}
|
||||
.contents{
|
||||
.contents {
|
||||
display: flex;
|
||||
min-height: 500px;
|
||||
.drawerMain {
|
||||
|
||||
@@ -195,7 +195,11 @@ watch(()=>props.visible,(val)=>{
|
||||
}
|
||||
).then(res=>{
|
||||
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) => {
|
||||
searchConditions.value.push({ nameUserNo: '', dateValue: [] });
|
||||
expenseList.value.push(forData.value[i]?.expenseList || [])
|
||||
|
||||
@@ -1,16 +1,13 @@
|
||||
<template>
|
||||
<a-drawer class="largeDrawerInside" :visible="visible" placement="right" :closable="false"
|
||||
width="80%" :title="false" @close="handleClose">
|
||||
<a-drawer class="largeDrawerInside" :visible="visible" placement="right" :closable="false" width="80%" :title="false"
|
||||
@close="handleClose">
|
||||
<!-- 内部讲师查看详情 -->
|
||||
<div class="LookInsideLecturer">
|
||||
<div class="header" style="margin-top: -24px;margin-left: -24px;">
|
||||
<div class="headerTitle">查看讲师</div>
|
||||
<!-- <router-link :to="{ path: '/lecturerList', query: { activeKey: '1', } }"> -->
|
||||
<img
|
||||
@click="handleClose"
|
||||
style="width: 29px; height: 29px; cursor: pointer"
|
||||
src="../../assets/images/basicinfo/close.png"
|
||||
/>
|
||||
<img @click="handleClose" style="width: 29px; height: 29px; cursor: pointer"
|
||||
src="../../assets/images/basicinfo/close.png" />
|
||||
<!-- </router-link> -->
|
||||
</div>
|
||||
<a-layout-content>
|
||||
@@ -22,45 +19,57 @@
|
||||
<a-descriptions-item label="讲师头像">
|
||||
<a-image :width="55" style="border-radius: 50%;width:55px;height:55px;" :src=formParam.photo />
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="讲师姓名"><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="讲师姓名">
|
||||
<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.certStatus==0?'未认证' :formParam.certStatus==1 ?'已认证':'-'}}
|
||||
<a-descriptions-item label="讲师级别">{{ formParam.tlevelName || '-' }}</a-descriptions-item>
|
||||
<a-descriptions-item label="认证状态">{{ formParam.certStatus == 0 ? '未认证' : formParam.certStatus == 1 ? '已认证' : '-' }}
|
||||
<span>
|
||||
<a-button type="text" class="moreidbtn" v-if="formParam.certStatus == 1"
|
||||
@click="handleup">查看认证资料</a-button>
|
||||
</span>
|
||||
</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 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.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 label="在职状态">{{ formParam.waitStatus == '0' ? '在职' : formParam.waitStatus == '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="所属组织">
|
||||
<span :title="formParam.orgName" style="user-select:text">{{ formParam.orgName || '-' }}</span>
|
||||
</a-descriptions-item>
|
||||
</a-descriptions>
|
||||
<div style="margin-top: 10px;"></div>
|
||||
<span class="line" ></span>
|
||||
<a-descriptions title="其他信息" bordered :column="4" :contentStyle="rowCenter" :labelStyle="rowCenters" >
|
||||
<span class="line"></span>
|
||||
<a-descriptions title="其他信息" bordered :column="4" :contentStyle="rowCenter" :labelStyle="rowCenters">
|
||||
<!-- 一层 -->
|
||||
<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>
|
||||
<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-else>-</div>
|
||||
</a-descriptions-item>
|
||||
<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>
|
||||
</a-descriptions-item>
|
||||
<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>
|
||||
</a-descriptions-item>
|
||||
<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>
|
||||
</a-descriptions-item>
|
||||
</a-descriptions>
|
||||
@@ -69,79 +78,63 @@
|
||||
<a-tabs v-model:activeKey="activeKey">
|
||||
<a-tab-pane key="1" tab="授课记录">
|
||||
<a-table :header-cell-style="{ 'text-align': 'center' }" :columns="teacherrecordsColumns"
|
||||
|
||||
:data-source="teacherrecordstableData" :loading="teacherrecordsLoading" :scroll="{ x: '1000' }" :pagination="pagination">
|
||||
:data-source="teacherrecordstableData" :loading="teacherrecordsLoading" :scroll="{ x: '1000' }"
|
||||
:pagination="pagination">
|
||||
</a-table>
|
||||
<div style="float: right;">
|
||||
<a-pagination
|
||||
v-if="tableDataTotal > 10"
|
||||
:showSizeChanger="true"
|
||||
:showQuickJumper="false"
|
||||
:hideOnSinglePage="false"
|
||||
:pageSize="searchParam.pageSize"
|
||||
:current="searchParam.pageNo"
|
||||
:total="tableDataTotal"
|
||||
class="pagination"
|
||||
@change="changePagination"
|
||||
/>
|
||||
<a-pagination v-if="tableDataTotal > 10" :showSizeChanger="true" :showQuickJumper="false"
|
||||
:hideOnSinglePage="false" :pageSize="searchParam.pageSize" :current="searchParam.pageNo"
|
||||
:total="tableDataTotal" class="pagination" @change="changePagination" />
|
||||
</div>
|
||||
</a-tab-pane>
|
||||
<a-tab-pane key="2" tab="晋级记录">
|
||||
<a-table :header-cell-style="{ 'text-align': 'center' }" style="border: 1px solid #f2f6fe" :columns="promotionrecordsColumns"
|
||||
|
||||
:data-source="promotionrecordstableData" :loading="promotionrecordsLoading" @expand="expandTable" :pagination="false">
|
||||
<template #bodyCell="{ record, column,index }" >
|
||||
<a-table :header-cell-style="{ 'text-align': 'center' }" style="border: 1px solid #f2f6fe"
|
||||
:columns="promotionrecordsColumns" :data-source="promotionrecordstableData"
|
||||
:loading="promotionrecordsLoading" @expand="expandTable" :pagination="false">
|
||||
<template #bodyCell="{ record, column, index }">
|
||||
</template>
|
||||
</a-table>
|
||||
<div style="float: right;">
|
||||
<a-pagination
|
||||
v-if="teacherrepromotableDataTotal > 10"
|
||||
:showSizeChanger="true"
|
||||
:showQuickJumper="false"
|
||||
:hideOnSinglePage="true"
|
||||
:pageSize="teacherrepromo.pageSize"
|
||||
:current="teacherrepromo.pageNo"
|
||||
:total="teacherrepromotableDataTotal"
|
||||
class="pagination"
|
||||
@change="teacherrepromoPagination"
|
||||
/>
|
||||
<a-pagination v-if="teacherrepromotableDataTotal > 10" :showSizeChanger="true" :showQuickJumper="false"
|
||||
:hideOnSinglePage="true" :pageSize="teacherrepromo.pageSize" :current="teacherrepromo.pageNo"
|
||||
:total="teacherrepromotableDataTotal" class="pagination" @change="teacherrepromoPagination" />
|
||||
</div>
|
||||
</a-tab-pane>
|
||||
</a-tabs>
|
||||
</div>
|
||||
</div>
|
||||
</a-layout-content>
|
||||
</div>
|
||||
</a-drawer>
|
||||
</template>
|
||||
<script lang ="jsx">
|
||||
import { useRouter,useRoute } from "vue-router";
|
||||
import { reactive, toRefs, ref, computed,watch } from "vue"
|
||||
<script lang="jsx">
|
||||
import { useRouter, useRoute } from "vue-router";
|
||||
import { reactive, toRefs, ref, computed, watch } from "vue"
|
||||
import { useStore } from "vuex";
|
||||
import {getTeacherById ,getTeacherLogList} from "../../api/Lecturer";
|
||||
import { getTeacherById, getTeacherLogList } from "../../api/Lecturer";
|
||||
import { getNewInTeacherCourseList } from "../../api/Teaching";
|
||||
import avatar from '@/assets/avatar.png'
|
||||
import Avatarman from '@/assets/Avatarman.png'
|
||||
import Avatarwoman from '@/assets/Avatarwoman.png'
|
||||
import dayjs from "dayjs";
|
||||
export default{
|
||||
name :"LookInsideLecturer",
|
||||
components:{
|
||||
export default {
|
||||
name: "LookInsideLecturer",
|
||||
components: {
|
||||
|
||||
},
|
||||
props:{
|
||||
visible:{
|
||||
props: {
|
||||
visible: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
id:{
|
||||
id: {
|
||||
type: String,
|
||||
default: ""
|
||||
}
|
||||
},
|
||||
setup(props,emits){
|
||||
const router=useRouter();
|
||||
setup(props, emits) {
|
||||
const router = useRouter();
|
||||
const state = reactive({
|
||||
activeKey:'1',
|
||||
activeKey: '1',
|
||||
formParam: {
|
||||
},
|
||||
promotionrecordsLoading: false, //晋级记录遮罩层
|
||||
@@ -149,46 +142,46 @@ export default{
|
||||
teacherrecordstableDataTotal: 0,//授课记录列表总条数
|
||||
teacherrepromotableDataTotal: -1,//晋级记录总条数
|
||||
teacherrecords: {
|
||||
recordType:1,
|
||||
recordType: 1,
|
||||
pageNo: "1",
|
||||
pageSize: "10",
|
||||
id: null
|
||||
},
|
||||
teacherrepromo:{
|
||||
userId:null,
|
||||
teacherrepromo: {
|
||||
userId: null,
|
||||
pageNo: "1",
|
||||
pageSize: "10",
|
||||
}
|
||||
});
|
||||
watch(() => props.visible, (val) => {
|
||||
console.log(val,'xixixiixix')
|
||||
if(val){
|
||||
console.log(val, 'xixixiixix')
|
||||
if (val) {
|
||||
const id = props.id
|
||||
TeacherSystem(id)
|
||||
}else{
|
||||
} else {
|
||||
state.formParam = {}
|
||||
}
|
||||
})
|
||||
const isOrgNames = (val) => {
|
||||
if(val){
|
||||
if (val) {
|
||||
const parts = val.split('/');
|
||||
const reversedParts = parts.reverse();
|
||||
state.formParam.orgNames = reversedParts.join('/');
|
||||
}
|
||||
}
|
||||
const handleClose = () => {
|
||||
emits.emit('update:visible',false)
|
||||
emits.emit('update:visible', false)
|
||||
}
|
||||
//内部讲师详情
|
||||
const TeacherSystem = (id) => {
|
||||
getTeacherById({id,}).then((res) => {
|
||||
let objA= res.data.data
|
||||
console.log(objA ,'11111111111')
|
||||
getTeacherById({ id, }).then((res) => {
|
||||
let objA = res.data.data
|
||||
console.log(objA, '11111111111')
|
||||
state.formParam = objA
|
||||
state.formParam.photo = state.formParam.photo ==null ?
|
||||
state.formParam.photo = state.formParam.photo == null ?
|
||||
state.formParam.gender == 1 ? Avatarman :
|
||||
state.formParam.gender ==2 ? Avatarwoman : Avatarman : (state.formParam.photo.includes('upload')?state.formParam.photo:'/upload'+state.formParam.photo)
|
||||
state.teacherrepromo.userId=res.data.data.id
|
||||
state.formParam.gender == 2 ? Avatarwoman : Avatarman : (state.formParam.photo.includes('upload') ? state.formParam.photo : '/upload' + state.formParam.photo)
|
||||
state.teacherrepromo.userId = res.data.data.id
|
||||
console.log(state.teacherrepromo.id);
|
||||
isOrgNames(state.formParam.orgName)
|
||||
getteacherrecordstableData()
|
||||
@@ -199,7 +192,7 @@ export default{
|
||||
});
|
||||
}
|
||||
const resp = (val) => {
|
||||
if(val){
|
||||
if (val) {
|
||||
const reg = /<[^<>]+>/g;
|
||||
const value = val.replace(reg, "");
|
||||
return value
|
||||
@@ -225,7 +218,7 @@ export default{
|
||||
ellipsis: true,
|
||||
align: "center",
|
||||
width: 180,
|
||||
customCell:()=>{return{style:{userSelect: 'text'}}},
|
||||
customCell: () => { return { style: { userSelect: 'text' } } },
|
||||
},
|
||||
{
|
||||
title: '课程日期',
|
||||
@@ -236,7 +229,7 @@ export default{
|
||||
customRender: (value) => {
|
||||
return (
|
||||
<div style="user-select: text">
|
||||
{value.record?.teachingDate?dayjs(value.record?.teachingDate).format("YYYY-MM-DD HH:mm"):'-'}
|
||||
{ value.record?.teachingDate ? dayjs(value.record?.teachingDate).format("YYYY-MM-DD HH:mm") : '-' }
|
||||
</div>
|
||||
);
|
||||
},
|
||||
@@ -258,7 +251,7 @@ export default{
|
||||
customRender: (value) => {
|
||||
return (
|
||||
<div>
|
||||
{String(value.record.type)
|
||||
{ String(value.record.type)
|
||||
? {
|
||||
"0": "在线课",
|
||||
"1": "面授课",
|
||||
@@ -266,7 +259,7 @@ export default{
|
||||
"3": "作业员入模培训",
|
||||
"4": "其他",
|
||||
}[value.record.type + ""]
|
||||
: "-"}
|
||||
: "-" }
|
||||
</div>
|
||||
)
|
||||
}
|
||||
@@ -277,8 +270,8 @@ export default{
|
||||
key: 'studys',
|
||||
ellipsis: true, align: "center",
|
||||
width: 120,
|
||||
customRender: ({text})=>{
|
||||
return text ? text+'人' : '-'
|
||||
customRender: ({ text }) => {
|
||||
return text ? text + '人' : '-'
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -287,8 +280,8 @@ export default{
|
||||
key: 'teaching',
|
||||
ellipsis: true, align: "center",
|
||||
width: 130,
|
||||
customRender: ({text})=>{
|
||||
return text ? text+'分钟' : '-'
|
||||
customRender: ({ text }) => {
|
||||
return text ? text + '分钟' : '-'
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -300,7 +293,7 @@ export default{
|
||||
customRender: (value) => {
|
||||
return (
|
||||
<div>
|
||||
{value.record.score?Number(value.record.score).toFixed(0)==0?'-':Number(value.record.score).toFixed(2)+'分' : '-'}
|
||||
{ value.record.score ? Number(value.record.score).toFixed(0) == 0 ? '-' : Number(value.record.score).toFixed(2) + '分' : '-' }
|
||||
</div>
|
||||
)
|
||||
}
|
||||
@@ -314,12 +307,12 @@ export default{
|
||||
customRender: (value) => {
|
||||
return (
|
||||
<div>
|
||||
{value.record.courseStatus == 0 || value.record.courseStatus == 1
|
||||
{ value.record.courseStatus == 0 || value.record.courseStatus == 1
|
||||
? {
|
||||
"0": "未开课",
|
||||
"1": "已开课",
|
||||
}[value.record.courseStatus + ""] || ""
|
||||
: "-"}
|
||||
: "-" }
|
||||
</div>
|
||||
)
|
||||
}
|
||||
@@ -333,7 +326,7 @@ export default{
|
||||
width: 200,
|
||||
customRender: (value) => {
|
||||
return (
|
||||
<div>{value.record.remark || '-'}</div>
|
||||
<div>{ value.record.remark || '-' }</div>
|
||||
)
|
||||
}
|
||||
},
|
||||
@@ -358,12 +351,12 @@ export default{
|
||||
const pagination = computed(() => ({
|
||||
total: state.teacherrecordstableDataTotal,
|
||||
showSizeChanger: true,
|
||||
showQuickJumper:true,
|
||||
showQuickJumper: true,
|
||||
current: state.teacherrecords.pageNo,
|
||||
pageSize: state.teacherrecords.pageSize,
|
||||
onChange: paginationChange,
|
||||
}));
|
||||
const paginationChange = (e,pageSize) => {
|
||||
const paginationChange = (e, pageSize) => {
|
||||
state.teacherrecords.pageNo = e;
|
||||
state.teacherrecords.pageSize = pageSize
|
||||
getteacherrecordstableData();
|
||||
@@ -398,7 +391,7 @@ export default{
|
||||
customRender: (value) => {
|
||||
return (
|
||||
<div>
|
||||
{value.record.type == 1 ? "自动" : value.record.type == 0 ? '手动':"-"}
|
||||
{ value.record.type == 1 ? "自动" : value.record.type == 0 ? '手动' : "-" }
|
||||
</div>
|
||||
)
|
||||
}
|
||||
@@ -430,7 +423,7 @@ export default{
|
||||
// })
|
||||
// state.promotionrecordsLoading = false
|
||||
// };
|
||||
const goback = ()=>{
|
||||
const goback = () => {
|
||||
router.back()
|
||||
}
|
||||
const store = useStore();
|
||||
@@ -443,12 +436,18 @@ export default{
|
||||
// return store.state.sysTypeMap.get(code)
|
||||
// }
|
||||
// getSysTypeMap()
|
||||
const handleup = ()=>{
|
||||
window.open (
|
||||
`${process.env.VUE_APP_BOE_API_URL}/upload${state.formParam.certification}`
|
||||
);
|
||||
}
|
||||
return{
|
||||
const handleup = () => {
|
||||
let url = "";
|
||||
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 {
|
||||
...toRefs(state),
|
||||
router,
|
||||
goback,
|
||||
@@ -458,8 +457,8 @@ window.open (
|
||||
TeacherSystem,
|
||||
handleClose,
|
||||
isOrgNames,
|
||||
rowCenter:{"text-align":"left",'min-width':'176px'},
|
||||
rowCenters:{"text-align":"center",'width':'160px','min-width':'110px'},
|
||||
rowCenter: { "text-align": "left", 'min-width': '176px' },
|
||||
rowCenters: { "text-align": "center", 'width': '160px', 'min-width': '110px' },
|
||||
teacherrecordstableData,
|
||||
teacherrecordsColumns,
|
||||
resp,
|
||||
@@ -477,8 +476,9 @@ window.open (
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.LookInsideLecturer {
|
||||
padding:24px;
|
||||
.header {
|
||||
padding: 24px;
|
||||
|
||||
.header {
|
||||
padding: 0px 32px;
|
||||
height: 73px;
|
||||
border-bottom: 1px solid #e8e8e8;
|
||||
@@ -496,46 +496,52 @@ padding:24px;
|
||||
line-height: 25px;
|
||||
// margin-left: 24px;
|
||||
}
|
||||
}
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.filter {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
.filter {
|
||||
margin-left: 38px;
|
||||
margin-right: 38px;
|
||||
margin-top: 30px;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
flex-wrap: wrap;
|
||||
|
||||
.select {
|
||||
margin-right: 20px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.backbtn{
|
||||
|
||||
.backbtn {
|
||||
float: right;
|
||||
margin-right: 20px;
|
||||
border: none;
|
||||
color: #4ea6ff;
|
||||
width: 80px;
|
||||
height:64px
|
||||
border: none;
|
||||
color: #4ea6ff;
|
||||
width: 80px;
|
||||
height: 64px
|
||||
}
|
||||
|
||||
//小竖线
|
||||
.line{
|
||||
float:left;
|
||||
width: 3px;
|
||||
height: 16px;
|
||||
background: #4ea6ff;
|
||||
border-radius: 30%;
|
||||
margin-left: -10px;
|
||||
margin-top: 5px;
|
||||
.line {
|
||||
float: left;
|
||||
width: 3px;
|
||||
height: 16px;
|
||||
background: #4ea6ff;
|
||||
border-radius: 30%;
|
||||
margin-left: -10px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
::v-deep .ant-descriptions-header{
|
||||
margin-bottom: 18px ;
|
||||
|
||||
::v-deep .ant-descriptions-header {
|
||||
margin-bottom: 18px;
|
||||
}
|
||||
|
||||
.goback {
|
||||
float: right;
|
||||
padding-right: 70px;
|
||||
@@ -558,36 +564,42 @@ margin-top: 5px;
|
||||
color: #4ea6ff;
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
.moreidbtn {
|
||||
border: none;
|
||||
color: #4ea6ff;
|
||||
width: 80px
|
||||
}
|
||||
|
||||
.moreidbtn {
|
||||
border: none;
|
||||
color: #4ea6ff;
|
||||
width: 80px
|
||||
}
|
||||
|
||||
::v-deep .ant-select-selection-overflow-item {
|
||||
margin-top: -2px;
|
||||
margin-top: -2px;
|
||||
}
|
||||
|
||||
::v-deep .ant-select-multiple .ant-select-selection-item {
|
||||
height: 34px
|
||||
height: 34px
|
||||
}
|
||||
|
||||
.tableBox {
|
||||
padding-bottom: 20px;
|
||||
margin: 20px 38px 30px;
|
||||
::v-deep .ant-select-dropdown{
|
||||
display: inline-block;
|
||||
}
|
||||
::v-deep .ant-select-selection-item{
|
||||
margin-left: 3px;
|
||||
}
|
||||
::v-deep .ant-pagination-options-size-changer.ant-select{
|
||||
width: 84px;
|
||||
}
|
||||
.pa {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: right;
|
||||
}
|
||||
padding-bottom: 20px;
|
||||
margin: 20px 38px 30px;
|
||||
|
||||
::v-deep .ant-select-dropdown {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
::v-deep .ant-select-selection-item {
|
||||
margin-left: 3px;
|
||||
}
|
||||
|
||||
::v-deep .ant-pagination-options-size-changer.ant-select {
|
||||
width: 84px;
|
||||
}
|
||||
|
||||
.pa {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: right;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -8,7 +8,7 @@
|
||||
v-model:value="managerArray"
|
||||
:placeholder="placeholder"
|
||||
:filterOption="false"
|
||||
:options="isOpen?options:selectOptions"
|
||||
:options="isOpen ? options : selectOptions"
|
||||
allowClear
|
||||
showSearch
|
||||
:disabled="disabled"
|
||||
@@ -21,71 +21,88 @@
|
||||
style="width: 100%"
|
||||
>
|
||||
<template v-if="loading" #notFoundContent>
|
||||
<a-spin size="small"/>
|
||||
<a-spin size="small" />
|
||||
</template>
|
||||
</a-select>
|
||||
</template>
|
||||
<script setup>
|
||||
import {computed, defineEmits, defineProps, onMounted, ref, watch} from "vue";
|
||||
import {useThrottlePage} from "@/api/request";
|
||||
import { computed, defineEmits, defineProps, onMounted, ref, watch } from "vue";
|
||||
import { useThrottlePage } from "@/api/request";
|
||||
import { getTeacherList } from "@/api/Lecturer";
|
||||
const props = defineProps({
|
||||
value: {
|
||||
type: String,
|
||||
default: ''
|
||||
default: "",
|
||||
},
|
||||
name: {
|
||||
type: String,
|
||||
default: ''
|
||||
default: "",
|
||||
},
|
||||
supplier: {
|
||||
type: String,
|
||||
default: ""
|
||||
},
|
||||
mobile: {
|
||||
type: String,
|
||||
default: ''
|
||||
default: "",
|
||||
},
|
||||
disabled: Boolean,
|
||||
placeholder: {
|
||||
type: String,
|
||||
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) {
|
||||
let timeout;
|
||||
return function(...args) {
|
||||
return function (...args) {
|
||||
clearTimeout(timeout);
|
||||
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 loading = ref(false)
|
||||
const userList = ref([]);
|
||||
const loading = ref(false);
|
||||
const getOutTeacher = () => {
|
||||
getTeacherList(memberParam.value).then(res=>{
|
||||
if(res.data.code == 200){
|
||||
userList.value = res.data.data.records
|
||||
loading.value = false
|
||||
getTeacherList(memberParam.value).then((res) => {
|
||||
if (res.data.code == 200) {
|
||||
userList.value = res.data.data.records;
|
||||
loading.value = false;
|
||||
}
|
||||
})
|
||||
}
|
||||
const options = computed(() => userList.value.map(e => ({
|
||||
|
||||
}).catch(error=>{
|
||||
console.log("ProjectManagerOutTeacher getTeacherList error ",error);
|
||||
});
|
||||
};
|
||||
const options = computed(() =>
|
||||
userList.value.map((e) => ({
|
||||
// label: e.name + '(' + e.userNo + ')' + e.organizationName,
|
||||
label:e.name+ '(' +e.supplier + ')',
|
||||
label: e.name + "/" + e.supplier,
|
||||
value: e.name,
|
||||
supplier: e.supplier,
|
||||
...e,
|
||||
audienceList: null
|
||||
})))
|
||||
audienceList: null,
|
||||
}))
|
||||
);
|
||||
|
||||
watch(props, init)
|
||||
watch(props, init);
|
||||
|
||||
function init() {
|
||||
//第一次进来 编辑赋值
|
||||
@@ -95,46 +112,47 @@ function init() {
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
console.log('onMounted')
|
||||
init()
|
||||
getOutTeacher()
|
||||
})
|
||||
console.log("onMounted");
|
||||
init();
|
||||
getOutTeacher();
|
||||
});
|
||||
|
||||
|
||||
const memberScroll = ({target: {scrollHeight, scrollTop, clientHeight}}) => {
|
||||
scrollHeight === (clientHeight + scrollTop) && memberParam.value.pageNo++
|
||||
const memberScroll = ({
|
||||
target: { scrollHeight, scrollTop, clientHeight },
|
||||
}) => {
|
||||
scrollHeight === clientHeight + scrollTop && memberParam.value.pageNo++;
|
||||
};
|
||||
const debounceObject = debounce(getOutTeacher,1000)
|
||||
const debounceObject = debounce(getOutTeacher, 1000);
|
||||
//搜索学员
|
||||
const searchMember = (keyword) => {
|
||||
console.log('searchMember', keyword)
|
||||
loading.value = true
|
||||
isOpen.value = true
|
||||
userList.value = []
|
||||
memberParam.value.pageNo = 1
|
||||
memberParam.value.teacherType=2
|
||||
memberParam.value.name = keyword
|
||||
console.log('searchMember', memberParam.value)
|
||||
debounceObject()
|
||||
console.log("searchMember", keyword);
|
||||
loading.value = true;
|
||||
isOpen.value = true;
|
||||
userList.value = [];
|
||||
memberParam.value.pageNo = 1;
|
||||
memberParam.value.teacherType = 2;
|
||||
memberParam.value.name = keyword;
|
||||
console.log("searchMember", memberParam.value);
|
||||
debounceObject();
|
||||
};
|
||||
|
||||
function blur() {
|
||||
isOpen.value = false
|
||||
memberParam.value.name = ''
|
||||
memberParam.value.pageNo = 1
|
||||
memberParam.value.teacherType=2
|
||||
isOpen.value = false;
|
||||
memberParam.value.name = "";
|
||||
memberParam.value.pageNo = 1;
|
||||
memberParam.value.teacherType = 2;
|
||||
}
|
||||
|
||||
function change(e, l) {
|
||||
memberParam.value.name = ''
|
||||
memberParam.value.teacherType=2
|
||||
memberParam.value.pageNo = 1
|
||||
isOpen.value = false
|
||||
Array.isArray(l) && (selectOptions.value = l)
|
||||
Array.isArray(selectOptions.value) && emit('onChange', e, l)
|
||||
emit('update:name', l?.label)
|
||||
emit('update:value', l?.value)
|
||||
emit('update:mobile', l?.label)
|
||||
memberParam.value.name = "";
|
||||
memberParam.value.teacherType = 2;
|
||||
memberParam.value.pageNo = 1;
|
||||
isOpen.value = false;
|
||||
Array.isArray(l) && (selectOptions.value = l);
|
||||
Array.isArray(selectOptions.value) && emit("onChange", e, l);
|
||||
emit("update:name", l?.label);
|
||||
emit("update:value", l?.value);
|
||||
emit("update:supplier", l?.supplier);
|
||||
emit("update:mobile", l?.label);
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
@@ -78,11 +78,11 @@
|
||||
</a-tabs>
|
||||
</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="confirm">撤销编辑内容</button>
|
||||
</div>
|
||||
<!-- <button class="btn2" @click="confirm">撤销编辑内容</button> -->
|
||||
<!-- </div> -->
|
||||
</div>
|
||||
<a-modal :footer="null" width="800px" v-model:visible="visibleModal" title="审批记录详情">
|
||||
<div style="margin: 20px;padding-bottom: 20px;">
|
||||
|
||||
@@ -815,7 +815,7 @@ export default {
|
||||
//导出功能
|
||||
const handleExport = () => {
|
||||
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', {
|
||||
// ...state.searchParam
|
||||
|
||||
@@ -146,7 +146,6 @@
|
||||
<!--讲师名称 teacherName 内容分类 coursetypeid -->
|
||||
<a-row :gutter="16">
|
||||
<a-col :span="12">
|
||||
|
||||
<a-form-item name="teacherName">
|
||||
<template v-slot:label>
|
||||
<img
|
||||
@@ -158,6 +157,7 @@
|
||||
</template>
|
||||
<ProjectManagerOutTeacher v-model:value="formParam.name"
|
||||
v-model:name="formParam.teacherName"
|
||||
v-model:supplier="formParam.supplier"
|
||||
placeholder="请输入工号/讲师姓名进行检索"
|
||||
@onChange="managerChange"></ProjectManagerOutTeacher>
|
||||
|
||||
@@ -165,6 +165,21 @@
|
||||
placeholder="请输入讲师姓名"></a-input> -->
|
||||
</a-form-item>
|
||||
</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-form-item name="courseTypeId">
|
||||
<template v-slot:label>
|
||||
@@ -187,9 +202,6 @@
|
||||
</a-tree-select>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<!-- 课程名称:name 开课状态 courseStatus-->
|
||||
<a-row :gutter="16">
|
||||
<a-col :span="12">
|
||||
<a-form-item name="courseName">
|
||||
<template v-slot:label>
|
||||
@@ -212,6 +224,10 @@
|
||||
</a-radio-group>
|
||||
</a-form-item>
|
||||
</a-col> -->
|
||||
|
||||
</a-row>
|
||||
<!-- 授课日期 teachingDate 授课时长defaultTeachingTime-->
|
||||
<a-row :gutter="16">
|
||||
<a-col :span="12">
|
||||
<a-form-item name="teachingDate">
|
||||
<template v-slot:label>
|
||||
@@ -226,10 +242,6 @@
|
||||
placeholder="请选择课程日期" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<!-- 授课日期 teachingDate 授课时长defaultTeachingTime-->
|
||||
<a-row :gutter="16">
|
||||
|
||||
<a-col :span="12">
|
||||
<a-form-item name="teaching">
|
||||
<template v-slot:label>
|
||||
@@ -249,6 +261,9 @@
|
||||
<span style="margin-left: 5px ;" v-if="formParam.teaching == null">0.00小时</span> -->
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<!-- 参训人数 studys评分 score-->
|
||||
<a-row :gutter="16">
|
||||
<a-col :span="12">
|
||||
<a-form-item name="studys">
|
||||
<template v-slot:label>
|
||||
@@ -264,10 +279,6 @@
|
||||
</a-input>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<!-- 参训人数 studys评分 score-->
|
||||
<a-row :gutter="16">
|
||||
|
||||
<a-col :span="12">
|
||||
<a-form-item name="score">
|
||||
<template v-slot:label>
|
||||
@@ -327,8 +338,9 @@
|
||||
</div>
|
||||
<a-descriptions bordered :column="2" :contentStyle="rowCenter" :labelStyle="{'width':'160px'}">
|
||||
<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.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 label="课程名称">{{ formParam.courseName ||'-'}}</a-descriptions-item>
|
||||
<a-descriptions-item label="开课状态">{{ formParam.courseStatus == 0 ? '未开课' : formParam.courseStatus == 1
|
||||
@@ -389,7 +401,8 @@
|
||||
</a-modal>
|
||||
</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>
|
||||
</template>
|
||||
<script lang="jsx">
|
||||
@@ -590,7 +603,8 @@ export default {
|
||||
? {
|
||||
"0": "在线课",
|
||||
"1": "面授课",
|
||||
"2": "手动录入",
|
||||
"2": "训练班",
|
||||
"5": "手动录入",
|
||||
}[value.record.type + ""]
|
||||
: "-"}
|
||||
</div>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -50,8 +50,18 @@
|
||||
<!-- <OrgClass @enter="searchSubmit()" v-model:value="searchParam.orgId" :placeholder="'请选择讲师组织'"
|
||||
style="width: 235px"
|
||||
></OrgClass> -->
|
||||
<a-select style="width: 235px ;margin-bottom:20px" v-model:value="searchParam.trainOrgId" placeholder="请选择培训发生组织" allowClear
|
||||
:options="orgListSearch"
|
||||
<!-- TODO GX02-->
|
||||
<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">
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
@@ -284,8 +294,14 @@
|
||||
/>
|
||||
培训发生组织
|
||||
</template>
|
||||
<a-select v-model:value="formParam.trainOrgId" placeholder="请选择培训发生组织" allowClear
|
||||
:options="orgList" @change="changeOrg">
|
||||
<!-- TODO5 授课讲师 -->
|
||||
<a-select v-model:value="formParam.trainOrgId" placeholder="请选择培训发生组织"
|
||||
allowClear
|
||||
showSearch
|
||||
:filter-option="false"
|
||||
:options="filterOrgListSearch"
|
||||
@search="handleOrgSearch"
|
||||
@change="changeOrg">
|
||||
</a-select>
|
||||
<!-- <OrgClass v-model:value="formParam.sourceBelongId" v-model:name="formParam.sourceBelongFullName"></OrgClass> -->
|
||||
</a-form-item>
|
||||
@@ -413,27 +429,27 @@
|
||||
<span style="font-weight:600;">讲师信息</span>
|
||||
<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="讲师组织">{{ 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="课程类型">
|
||||
{{ 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>
|
||||
<a-descriptions-item label="授课/课程时长 ">
|
||||
<a-descriptions-item label="授课/课程时长(分钟)">
|
||||
<span> {{ formParam.teaching }} 分钟</span>
|
||||
<span style="margin-left: 10px ;" v-if="formParam.teaching != '0'">({{ (formParam.teaching / 60
|
||||
).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.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="讲师体系">{{ 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>
|
||||
<div v-if="formParam.createFrom == '0'">
|
||||
@@ -495,7 +511,8 @@
|
||||
</div>
|
||||
</a-modal>
|
||||
</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>
|
||||
</template>
|
||||
@@ -560,6 +577,7 @@ export default {
|
||||
const router = useRouter();
|
||||
const state = reactive({
|
||||
orgListSearch: [],
|
||||
filterOrgListSearch: [],
|
||||
moreid: 1,
|
||||
title: '导入内部授课记录',
|
||||
vf: false,
|
||||
@@ -705,7 +723,8 @@ export default {
|
||||
{ value: '', label: "全部" },
|
||||
{ value: '0', label: "在线课" },
|
||||
{ value: '1', label: "面授课" },
|
||||
{ value: '2', label: "手动录入" },
|
||||
{ value: '2', label: "训练班" },
|
||||
{ value: '5', label: "手动录入" },
|
||||
])
|
||||
const scoreList = ref([
|
||||
{ value: '', label: "全部" },
|
||||
@@ -803,7 +822,8 @@ export default {
|
||||
? {
|
||||
"0": "在线课",
|
||||
"1": "面授课",
|
||||
"2": "手动录入",
|
||||
"2": "训练班",
|
||||
"5": "手动录入",
|
||||
}[value.record.type + ""]
|
||||
: "-"}
|
||||
</div>
|
||||
@@ -890,25 +910,25 @@ export default {
|
||||
)
|
||||
}
|
||||
},
|
||||
{
|
||||
title: '数据来源',
|
||||
dataIndex: 'createFrom',
|
||||
key: 'createFrom',
|
||||
ellipsis: true, align: "center",
|
||||
width: 120,
|
||||
customRender: (value) => {
|
||||
return (
|
||||
<div>
|
||||
{value.record.createFrom == "0" || value.record.createFrom == "1"
|
||||
? {
|
||||
"0": "系统生成",
|
||||
"1": "手动录入",
|
||||
}[value.record.createFrom + ""] || ""
|
||||
: "-"}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
},
|
||||
// {
|
||||
// title: '数据来源',
|
||||
// dataIndex: 'createFrom',
|
||||
// key: 'createFrom',
|
||||
// ellipsis: true, align: "center",
|
||||
// width: 120,
|
||||
// customRender: (value) => {
|
||||
// return (
|
||||
// <div>
|
||||
// {value.record.createFrom == "0" || value.record.createFrom == "1"
|
||||
// ? {
|
||||
// "0": "系统生成",
|
||||
// "1": "手动录入",
|
||||
// }[value.record.createFrom + ""] || ""
|
||||
// : "-"}
|
||||
// </div>
|
||||
// )
|
||||
// }
|
||||
// },
|
||||
{
|
||||
title: '培训发生组织 ',
|
||||
dataIndex: 'trainOrgName',
|
||||
@@ -963,6 +983,7 @@ export default {
|
||||
pageSize:50
|
||||
}
|
||||
queryTrainOrgPor(obj).then((res) => {
|
||||
|
||||
state.orgList = res.data.data?.map(item=>{
|
||||
return{
|
||||
label: item.affiliationName,
|
||||
@@ -978,9 +999,16 @@ export default {
|
||||
state.orgListSearch.unshift({
|
||||
label: '全部', value: ''
|
||||
})
|
||||
state.filterOrgListSearch = state.orgListSearch;
|
||||
})
|
||||
}
|
||||
//TODO5
|
||||
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
|
||||
}
|
||||
const rules = {
|
||||
@@ -1489,6 +1517,16 @@ export default {
|
||||
const sendRemark = () => {
|
||||
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 {
|
||||
...toRefs(state),
|
||||
sendName,
|
||||
@@ -1548,7 +1586,8 @@ export default {
|
||||
// editTimeChange,
|
||||
scoreChange,
|
||||
locale,
|
||||
checkMenu
|
||||
checkMenu,
|
||||
handleOrgSearch
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,26 +1,26 @@
|
||||
<!-- 讲师费管理 -->
|
||||
<template>
|
||||
<div class="LecturerFeeManagement">
|
||||
<div style="margin: 20px;margin-top:0;" >
|
||||
<a-tabs v-model:activeKey="activeKey" >
|
||||
<div style="margin: 20px;margin-top:0;">
|
||||
<a-tabs v-model:activeKey="activeKey">
|
||||
<a-tab-pane key="1" tab="讲师费管理">
|
||||
<LecturerFee />
|
||||
<LecturerFee :activeKeyFn="activeKeyFn"/>
|
||||
</a-tab-pane>
|
||||
<!-- v-if="lecturerAdmin('lecturer-admin')" -->
|
||||
<a-tab-pane key="2" tab="审批中心">
|
||||
<LecturerApproval/>
|
||||
<LecturerApproval :activeKeyProps="activeKey"/>
|
||||
</a-tab-pane>
|
||||
</a-tabs>
|
||||
</a-tabs>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="jsx">
|
||||
import { reactive, toRefs, ref, watch,onMounted,computed } from "vue";
|
||||
import { reactive, toRefs, ref, watch, onMounted, computed } from "vue";
|
||||
import LecturerFee from "../lecturer/LecturerFee.vue"
|
||||
import LecturerApproval from "../lecturer/LecturerApproval.vue"
|
||||
import { useRoute } from "vue-router";
|
||||
import {useStore} from 'vuex'
|
||||
export default {
|
||||
import { useStore } from 'vuex'
|
||||
export default {
|
||||
name: "LecturerFeeManagement",
|
||||
components: {
|
||||
LecturerFee,
|
||||
@@ -28,36 +28,43 @@ import {useStore} from 'vuex'
|
||||
},
|
||||
setup() {
|
||||
const store = useStore();
|
||||
const userInfo = computed(()=> store.state.userInfo)
|
||||
const userInfo = computed(() => store.state.userInfo)
|
||||
const route = useRoute();
|
||||
const state = reactive({
|
||||
activeKey:'1',
|
||||
activeKey: '1',
|
||||
})
|
||||
const lecturerAdmin = (admin)=>{
|
||||
const roleCode = userInfo.value.roleList.map((item)=>item.roleCode)
|
||||
if (admin){
|
||||
//
|
||||
const lecturerAdmin = (admin) => {
|
||||
const roleCode = userInfo.value.roleList.map((item) => item.roleCode)
|
||||
if (admin) {
|
||||
return roleCode.some(t => t == admin)
|
||||
}
|
||||
}
|
||||
watch(
|
||||
)
|
||||
|
||||
onMounted(() => {
|
||||
if(route.query.activeKey){
|
||||
if (route.query.activeKey) {
|
||||
state.activeKey = '2'
|
||||
}
|
||||
})
|
||||
|
||||
const activeKeyFn = () => {
|
||||
state.activeKey = '2'
|
||||
}
|
||||
|
||||
return {
|
||||
...toRefs(state),
|
||||
lecturerAdmin,
|
||||
activeKeyFn
|
||||
}
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
::v-deep .ant-tabs-tab{
|
||||
::v-deep .ant-tabs-tab {
|
||||
font-weight: 600;
|
||||
}
|
||||
.LecturerFeeManagement {
|
||||
|
||||
.LecturerFeeManagement {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
|
||||
@@ -1,25 +1,25 @@
|
||||
<!-- 讲师列表 -->
|
||||
<template>
|
||||
<div class="LecturerList">
|
||||
<div style="margin: 20px;margin-top:0;" >
|
||||
<div style="margin: 20px;margin-top:0;">
|
||||
<a-tabs v-model:activeKey="activeKey">
|
||||
<a-tab-pane key="1" tab="内部讲师">
|
||||
<InsideLecturer/>
|
||||
<InsideLecturer />
|
||||
</a-tab-pane>
|
||||
<a-tab-pane key="2" tab="外部讲师">
|
||||
<ExternalLecturer/>
|
||||
<ExternalLecturer />
|
||||
</a-tab-pane>
|
||||
</a-tabs>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="jsx">
|
||||
import { reactive, toRefs, ref, watch,onMounted,nextTick } from "vue";
|
||||
import InsideLecturer from "../lecturer/InsideLecturer.vue"
|
||||
import ExternalLecturer from "../lecturer/ExternalLecturer.vue"
|
||||
import { useRoute } from 'vue-router'
|
||||
import { useStore } from 'vuex'
|
||||
export default {
|
||||
</template>
|
||||
<script lang="jsx">
|
||||
import { reactive, toRefs, ref, watch, onMounted, nextTick } from "vue";
|
||||
import InsideLecturer from "../lecturer/InsideLecturer.vue"
|
||||
import ExternalLecturer from "../lecturer/ExternalLecturer.vue"
|
||||
import { useRoute } from 'vue-router'
|
||||
import { useStore } from 'vuex'
|
||||
export default {
|
||||
name: "LecturerList",
|
||||
components: {
|
||||
InsideLecturer,
|
||||
@@ -29,12 +29,12 @@
|
||||
const route = useRoute()
|
||||
const store = useStore()
|
||||
const state = reactive({
|
||||
activeKey:'1'
|
||||
activeKey: '1'
|
||||
})
|
||||
watch(
|
||||
)
|
||||
onMounted(() => {
|
||||
if(route.query.activeKey){
|
||||
if (route.query.activeKey) {
|
||||
state.activeKey = route.query.activeKey
|
||||
}
|
||||
})
|
||||
@@ -42,13 +42,14 @@
|
||||
...toRefs(state),
|
||||
}
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
::v-deep .ant-tabs-tab{
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
::v-deep .ant-tabs-tab {
|
||||
font-weight: 600;
|
||||
}
|
||||
.LecturerList {
|
||||
}
|
||||
|
||||
.LecturerList {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
@@ -321,4 +322,3 @@
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<!-- 讲师费月度统计详情页面 -->
|
||||
<template>
|
||||
<a-drawer :visible="visible" class="largeDrawerInside" placement="right" :closable="false"
|
||||
width="80%" :title="false" @close="handleBack">
|
||||
<a-drawer :visible="visible" class="largeDrawerInside" placement="right" :closable="false" width="80%" :title="false"
|
||||
@close="handleBack">
|
||||
<div class="MonthlyStatistics">
|
||||
<!-- 搜索框及按钮 -->
|
||||
<!-- <a-layout-header style="background: white;color: black; font-size: 20px ;">
|
||||
@@ -15,19 +15,15 @@
|
||||
</a-layout-header> -->
|
||||
<div class="header">
|
||||
<div class="headerTitle">讲师费月度统计详情</div>
|
||||
<img
|
||||
style="width: 29px; height: 29px; cursor: pointer"
|
||||
src="../../assets/images/basicinfo/close.png"
|
||||
@click="handleBack"
|
||||
/>
|
||||
<img style="width: 29px; height: 29px; cursor: pointer" src="../../assets/images/basicinfo/close.png"
|
||||
@click="handleBack" />
|
||||
</div>
|
||||
<!-- <a-divider style="height: 1px; background-color: #b7b8b7 ;margin: 0;" /> -->
|
||||
<div class="filter">
|
||||
<a-form layout="inline" >
|
||||
<a-form layout="inline">
|
||||
<a-form-item class="select">
|
||||
<a-input v-model:value="searchParam.name" style="width: 240px; height: 40px; border-radius: 8px"
|
||||
placeholder="请输入工号/讲师姓名进行检索" allowClear showSearch
|
||||
v-on:keydown.enter="enterPressHadlerSearch">
|
||||
placeholder="请输入工号/讲师姓名进行检索" allowClear showSearch v-on:keydown.enter="enterPressHadlerSearch">
|
||||
</a-input>
|
||||
</a-form-item>
|
||||
<!-- <a-form-item class="select">
|
||||
@@ -64,8 +60,16 @@
|
||||
</div>
|
||||
</a-form>
|
||||
<div style="width: 100%;"></div>
|
||||
<div v-if="checkMenu('lecturerSummaryExport')" style="display: flex; margin-bottom: 20px">
|
||||
<a-button class="resetbtn" @click="handleFeeMonthly" type="primary"><UploadOutlined/>导出</a-button>
|
||||
<div style="display: flex; margin-bottom: 20px">
|
||||
<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 style="margin-bottom: 4px;color: #aaaaaa;">
|
||||
@@ -73,15 +77,16 @@
|
||||
</div>
|
||||
<div style="padding: 10px 0">
|
||||
<a-table :header-cell-style="{ 'text-align': 'center' }" style="border: 1px solid #f2f6fe" :columns="columns"
|
||||
:data-source="tableData" :loading="tableLoading" :scroll="{ x: 600}" :pagination="pagination">
|
||||
:data-source="tableData" :loading="tableLoading" :scroll="{ x: 600 }" :pagination="pagination">
|
||||
<template #orgName="{ record }">
|
||||
<div :title="record.orgName">{{ endOrg(record.orgName) }}</div>
|
||||
</template>"
|
||||
<template #bodyCell="{ record, column }">
|
||||
<template v-if="column.key === 'operation'">
|
||||
<a-space >
|
||||
<a-space>
|
||||
<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>
|
||||
</template>
|
||||
</template>
|
||||
@@ -106,37 +111,37 @@
|
||||
</div>
|
||||
</div> -->
|
||||
<!-- 抽屉 -->
|
||||
<a-drawer class="largeDrawerInside" v-model:visible="opendrawer" placement="right"
|
||||
@closa="cancelTeachingDialog" :maskClosable="true" width="80%" :title="false">
|
||||
<div style="padding:24px;">
|
||||
<a-drawer class="largeDrawerInside" v-model:visible="opendrawer" placement="right" @closa="cancelTeachingDialog"
|
||||
:maskClosable="true" width="80%" :title="false">
|
||||
<div style="padding:24px;">
|
||||
<div class="headers" style="margin-top:-24px;">
|
||||
<div class="headerTitle">查看详情</div>
|
||||
<img
|
||||
style="width: 29px; height: 29px; cursor: pointer"
|
||||
src="@/assets/images/basicinfo/close.png"
|
||||
@click="cancelTeachingDialog"
|
||||
/>
|
||||
<img style="width: 29px; height: 29px; cursor: pointer" src="@/assets/images/basicinfo/close.png"
|
||||
@click="cancelTeachingDialog" />
|
||||
</div>
|
||||
<a-form layout="inline">
|
||||
<a-form layout="inline">
|
||||
<a-form-item class="select">
|
||||
<a-input @pressEnter="searchSubmitdrawer" v-model:value="drawer.name" style="width: 260px; height: 40px; border-radius: 8px"
|
||||
placeholder="请输入课程名称进行搜索" allowClear showSearch>
|
||||
<a-input @pressEnter="searchSubmitdrawer" v-model:value="drawer.name"
|
||||
style="width: 260px; height: 40px; border-radius: 8px" placeholder="请输入课程名称进行搜索" allowClear showSearch>
|
||||
</a-input>
|
||||
</a-form-item>
|
||||
<a-form-item class="select ">
|
||||
<a-range-picker format="YYYY-MM-DD"
|
||||
valueFormat="YYYY-MM-DD" style="width: 260px; height: 40px; margin-bottom: 20px; border-radius: 8px" v-model:value="drawer.drawersearchdate" separator="至"
|
||||
:placeholder="[' 开始时间', ' 结束时间']" @change="searchTimeChange" />
|
||||
<a-range-picker format="YYYY-MM-DD" valueFormat="YYYY-MM-DD"
|
||||
style="width: 260px; height: 40px; margin-bottom: 20px; border-radius: 8px"
|
||||
v-model:value="drawer.drawersearchdate" separator="至" :placeholder="[' 开始时间', ' 结束时间']"
|
||||
@change="searchTimeChange" />
|
||||
</a-form-item>
|
||||
<div style="display: flex; margin-bottom: 20px">
|
||||
<a-button @click="searchSubmitdrawer()" type="primary" class="resetbtn">查询 </a-button>
|
||||
<a-button class="resetbtn " @click="searchResetdrawer">重置</a-button>
|
||||
</div>
|
||||
</a-form>
|
||||
<!-- <span>讲师费发放情况</span> -->
|
||||
<a-table :columns="column" :scroll="{ x: '1000' }" :data-source="tableDatas" :loading="tableLoadings" :pagination="false">
|
||||
</div>
|
||||
</a-form>
|
||||
<!-- <span>讲师费发放情况</span> -->
|
||||
<a-table :columns="column" :scroll="{ x: '1000' }" :data-source="tableDatas" :loading="tableLoadings"
|
||||
:pagination="false">
|
||||
<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>
|
||||
</a-table>
|
||||
<!-- <div :style="{
|
||||
@@ -155,50 +160,50 @@
|
||||
</a-button>
|
||||
</div> -->
|
||||
</div>
|
||||
</a-drawer>
|
||||
</a-drawer>
|
||||
</div>
|
||||
</a-drawer>
|
||||
</a-drawer>
|
||||
</template>
|
||||
<script lang="jsx">
|
||||
import { reactive, toRefs, ref, watch,computed } from "vue";
|
||||
import { reactive, toRefs, ref, watch, computed } from "vue";
|
||||
import { useStore } from "vuex";
|
||||
import { useRouter,useRoute } from "vue-router";
|
||||
import { useRouter, useRoute } from "vue-router";
|
||||
import {
|
||||
UploadOutlined,
|
||||
} from '@ant-design/icons-vue';
|
||||
import { getPayRollPlace,expenseSummaryById ,removeBySummaryId,removeBySummaryDetailId,queryDetailId} from "../../api/Lecturer";
|
||||
import { getOrganization } from "../../api/Teaching";
|
||||
} from '@ant-design/icons-vue';
|
||||
import { getPayRollPlace, expenseSummaryById, removeBySummaryId, removeBySummaryDetailId, queryDetailId } from "../../api/Lecturer";
|
||||
import { getOrganization } from "../../api/Teaching";
|
||||
import ProjectManager from "@/components/project/ProjectManagerNew";
|
||||
import {queryTeacherFeeMonthly} from "../../api/lecturerFeeStatistics";
|
||||
import {CostDetails} from "../lecturer/CostDetails.vue"
|
||||
import { queryTeacherFeeMonthly } from "../../api/lecturerFeeStatistics";
|
||||
import { CostDetails } from "../lecturer/CostDetails.vue"
|
||||
// import * as api from '@/api/Lecturer'
|
||||
import dialog from '@/utils/dialog'
|
||||
import {message} from 'ant-design-vue'
|
||||
import { message } from 'ant-design-vue'
|
||||
import { checkMenu } from '@/utils/utils'
|
||||
export default {
|
||||
name: "MonthlyStatistics",
|
||||
components: {
|
||||
UploadOutlined,//图标--导出,
|
||||
ProjectManager,CostDetails
|
||||
ProjectManager, CostDetails
|
||||
},
|
||||
props:{
|
||||
visible:{
|
||||
props: {
|
||||
visible: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
id:{
|
||||
id: {
|
||||
type: String,
|
||||
default: ""
|
||||
},
|
||||
},
|
||||
setup(props,emits) {
|
||||
const router=useRouter();
|
||||
setup(props, emits) {
|
||||
const router = useRouter();
|
||||
const route = useRoute();
|
||||
const { query: { id }} = useRoute();
|
||||
const { query: { id } } = useRoute();
|
||||
const state = reactive({
|
||||
tableLoading: false,
|
||||
tableLoadings: false,
|
||||
opendrawer:false,
|
||||
opendrawer: false,
|
||||
id,
|
||||
summaryDate: null,
|
||||
resbgTxt: null,
|
||||
@@ -219,11 +224,11 @@ export default {
|
||||
name: '',
|
||||
payrollPlaceId: null,
|
||||
departId: null,
|
||||
summaryDate:null,
|
||||
summaryDate: null,
|
||||
id: props.id,
|
||||
// trainOrgId: '',
|
||||
},
|
||||
name:null,
|
||||
name: null,
|
||||
drawer: {
|
||||
name: '',
|
||||
drawersearchdate: [],
|
||||
@@ -234,26 +239,26 @@ export default {
|
||||
}
|
||||
})
|
||||
const handleBack = () => {
|
||||
emits.emit('update:visible',false)
|
||||
emits.emit('update:visible', false)
|
||||
}
|
||||
watch(()=>props.visible,(val)=>{
|
||||
if(val){
|
||||
watch(() => props.visible, (val) => {
|
||||
if (val) {
|
||||
state.searchParam.id = props.id
|
||||
getTableDate()
|
||||
}else{
|
||||
} else {
|
||||
state.searchParam = {
|
||||
pageNo: "1",
|
||||
pageSize: "10",
|
||||
name: '',
|
||||
payrollPlaceId: null,
|
||||
departId: null,
|
||||
summaryDate:null,
|
||||
summaryDate: null,
|
||||
id: null,
|
||||
}
|
||||
}
|
||||
})
|
||||
const endOrg = (val) => {
|
||||
if(val){
|
||||
if (val) {
|
||||
const parts = val.split('/');
|
||||
// const reversedParts = parts.reverse();
|
||||
// return reversedParts.join('/');
|
||||
@@ -271,9 +276,9 @@ export default {
|
||||
ellipsis: true,
|
||||
align: "center",
|
||||
width: 180,
|
||||
customRender: (value)=>{
|
||||
customRender: (value) => {
|
||||
return (
|
||||
<div style="user-select:text">{value.record.name} / {value.record.userNo}</div>
|
||||
<div style="user-select:text">{ value.record.name } / { value.record.userNo }</div>
|
||||
)
|
||||
}
|
||||
},
|
||||
@@ -312,8 +317,8 @@ export default {
|
||||
ellipsis: true,
|
||||
align: "center",
|
||||
width: 140,
|
||||
customRender: ({text})=>{
|
||||
return text ? text+'分钟' : '-'
|
||||
customRender: ({ text }) => {
|
||||
return text ? text + '分钟' : '-'
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -323,8 +328,8 @@ export default {
|
||||
ellipsis: true,
|
||||
align: "center",
|
||||
width: 140,
|
||||
customRender: ({text})=>{
|
||||
return text ? text+'分钟' : '-'
|
||||
customRender: ({ text }) => {
|
||||
return text ? text + '分钟' : '-'
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -334,8 +339,8 @@ export default {
|
||||
ellipsis: true,
|
||||
align: "center",
|
||||
width: 120,
|
||||
customRender: ({text})=>{
|
||||
return text ? text+'分钟' : '-'
|
||||
customRender: ({ text }) => {
|
||||
return text ? text + '分钟' : '-'
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -345,8 +350,8 @@ export default {
|
||||
ellipsis: true,
|
||||
align: "center",
|
||||
width: 120,
|
||||
customRender: ({text})=>{
|
||||
return text ? text+'元' : '-'
|
||||
customRender: ({ text }) => {
|
||||
return text ? text + '元' : '-'
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -356,9 +361,9 @@ export default {
|
||||
ellipsis: true,
|
||||
align: "center",
|
||||
width: 120,
|
||||
customCell:(text)=>{return{style:{color:colorSet(text)}}},
|
||||
customRender: ({text})=>{
|
||||
return text ? text+'元' : '-'
|
||||
customCell: (text) => { return { style: { color: colorSet(text) } } },
|
||||
customRender: ({ text }) => {
|
||||
return text ? text + '元' : '-'
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -376,7 +381,7 @@ export default {
|
||||
const tableData = ref([
|
||||
])
|
||||
const colorSet = (val) => {
|
||||
if(val.payableExpense!=val.expense){
|
||||
if (val.payableExpense != val.expense) {
|
||||
return 'red'
|
||||
}
|
||||
}
|
||||
@@ -417,7 +422,7 @@ export default {
|
||||
tableData.value = res.data.data.records
|
||||
state.tableDataTotal = Number(res.data.data.total);
|
||||
state.tableLoading = false
|
||||
}).catch(err=>{
|
||||
}).catch(err => {
|
||||
state.tableLoading = false
|
||||
message.error(err.data.msg)
|
||||
})
|
||||
@@ -448,7 +453,7 @@ export default {
|
||||
getOrganizationLista()
|
||||
//表格内查看数据操作
|
||||
const handleLook = (record) => {
|
||||
state.drawer={
|
||||
state.drawer = {
|
||||
name: '',
|
||||
drawersearchdate: [],
|
||||
pageNo: '1',
|
||||
@@ -457,22 +462,22 @@ export default {
|
||||
startTime: '',
|
||||
id: record.id,
|
||||
}
|
||||
state.opendrawer=true
|
||||
state.opendrawer = true
|
||||
searchSubmitdrawer()
|
||||
}
|
||||
const handleLess = (record) => {
|
||||
dialog({
|
||||
content: '是否确认撤回 ?',
|
||||
ok:()=>{
|
||||
removeBySummaryId({summaryId:record.id}).then(res=>{
|
||||
if(res.data.code == 200){
|
||||
ok: () => {
|
||||
removeBySummaryId({ summaryId: record.id }).then(res => {
|
||||
if (res.data.code == 200) {
|
||||
message.success('撤回成功')
|
||||
emits.emit('tableList',true)
|
||||
emits.emit('tableList', true)
|
||||
searchSubmit()
|
||||
}else{
|
||||
} else {
|
||||
message.error(res.data.msg)
|
||||
}
|
||||
}).catch(err=>{
|
||||
}).catch(err => {
|
||||
message.error(err.data.msg)
|
||||
})
|
||||
}
|
||||
@@ -481,17 +486,17 @@ export default {
|
||||
const handleDetail = (record) => {
|
||||
dialog({
|
||||
content: '是否确认撤回 ?',
|
||||
ok:()=>{
|
||||
removeBySummaryDetailId({detailId:record.detailId}).then(res=>{
|
||||
if(res.data.code == 200){
|
||||
ok: () => {
|
||||
removeBySummaryDetailId({ detailId: record.detailId }).then(res => {
|
||||
if (res.data.code == 200) {
|
||||
message.success('撤回成功')
|
||||
emits.emit('tableList',true)
|
||||
emits.emit('tableList', true)
|
||||
searchSubmit()
|
||||
searchSubmitdrawer()
|
||||
}else{
|
||||
} else {
|
||||
message.error(res.data.msg)
|
||||
}
|
||||
}).catch(err=>{
|
||||
}).catch(err => {
|
||||
message.destroy()
|
||||
message.error(err.data.msg)
|
||||
})
|
||||
@@ -499,11 +504,11 @@ export default {
|
||||
})
|
||||
}
|
||||
const searchTimeChange = (e) => {
|
||||
console.log(e,'eeeee')
|
||||
if(e){
|
||||
console.log(e, 'eeeee')
|
||||
if (e) {
|
||||
state.drawer.startTime = e[0]
|
||||
state.drawer.endTime = e[1]
|
||||
}else{
|
||||
} else {
|
||||
state.drawer.startTime = ''
|
||||
state.drawer.endTime = ''
|
||||
}
|
||||
@@ -512,7 +517,7 @@ export default {
|
||||
const pagination = computed(() => ({
|
||||
total: state.tableDataTotal,
|
||||
showSizeChanger: true,
|
||||
showQuickJumper:true,
|
||||
showQuickJumper: true,
|
||||
current: state.searchParam.pageNo,
|
||||
pageSize: state.searchParam.pageSize,
|
||||
onChange: changePagination,
|
||||
@@ -528,24 +533,40 @@ export default {
|
||||
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 || ''}`)
|
||||
}
|
||||
|
||||
// 讲师月度费用下载
|
||||
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 = () => {
|
||||
state.searchParam = {
|
||||
pageNo: "1",
|
||||
pageSize: "10",
|
||||
id: props.id,
|
||||
name : '',
|
||||
name: '',
|
||||
payrollPlaceId: null,
|
||||
departId: '',
|
||||
summaryDate:'',
|
||||
summaryDate: '',
|
||||
// trainOrgId: '',
|
||||
};
|
||||
getTableDate();
|
||||
};
|
||||
//二级页面重置
|
||||
const searchResetdrawer =()=>{
|
||||
const searchResetdrawer = () => {
|
||||
const id = state.drawer.id
|
||||
state.drawer={
|
||||
state.drawer = {
|
||||
name: '',
|
||||
drawersearchdate: [],
|
||||
pageNo: '1',
|
||||
@@ -557,7 +578,7 @@ export default {
|
||||
searchSubmitdrawer()
|
||||
}
|
||||
//二级页面查询
|
||||
const searchSubmitdrawer=()=>{
|
||||
const searchSubmitdrawer = () => {
|
||||
state.tableLoadings = true
|
||||
const params = {
|
||||
summaryId: state.drawer.id,
|
||||
@@ -565,8 +586,8 @@ export default {
|
||||
endTime: state.drawer.endTime,
|
||||
startTime: state.drawer.startTime,
|
||||
}
|
||||
queryDetailId(params).then(res=>{
|
||||
console.log(res,'resss')
|
||||
queryDetailId(params).then(res => {
|
||||
console.log(res, 'resss')
|
||||
tableDatas.value = res.data.data
|
||||
state.tableLoadings = false
|
||||
})
|
||||
@@ -583,7 +604,7 @@ export default {
|
||||
customRender: (value) => {
|
||||
return (
|
||||
<div style="user-select: text">
|
||||
{value.record?.name} / {value.record?.userNo}
|
||||
{ value.record?.name } / { value.record?.userNo }
|
||||
</div>
|
||||
);
|
||||
},
|
||||
@@ -602,7 +623,7 @@ export default {
|
||||
key: 'courseName',
|
||||
ellipsis: true, align: "center",
|
||||
width: 160,
|
||||
customCell:()=>{return{style:{userSelect: 'text'}}}
|
||||
customCell: () => { return { style: { userSelect: 'text' } } }
|
||||
},
|
||||
{
|
||||
title: '培训发生组织 ',
|
||||
@@ -610,7 +631,7 @@ export default {
|
||||
key: 'trainOrgName',
|
||||
ellipsis: true, align: "center",
|
||||
width: 160,
|
||||
customCell:()=>{return{style:{userSelect: 'text'}}}
|
||||
customCell: () => { return { style: { userSelect: 'text' } } }
|
||||
},
|
||||
{
|
||||
title: '课程类型 ',
|
||||
@@ -621,7 +642,7 @@ export default {
|
||||
customRender: (value) => {
|
||||
return (
|
||||
<div>
|
||||
{String(value.record.courseType)
|
||||
{ String(value.record.courseType)
|
||||
? {
|
||||
"0": "在线课",
|
||||
"1": "面授课",
|
||||
@@ -629,7 +650,7 @@ export default {
|
||||
"3": "作业员入模培训",
|
||||
"4": "其他",
|
||||
}[value.record.courseType + ""]
|
||||
: "-"}
|
||||
: "-" }
|
||||
</div>
|
||||
)
|
||||
}
|
||||
@@ -640,8 +661,8 @@ export default {
|
||||
key: 'teachingTime',
|
||||
ellipsis: true, align: "center",
|
||||
width: 120,
|
||||
customRender: ({text})=>{
|
||||
return text ? text+'分钟' : '-'
|
||||
customRender: ({ text }) => {
|
||||
return text ? text + '分钟' : '-'
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -682,8 +703,8 @@ export default {
|
||||
key: 'levelPay',
|
||||
ellipsis: true, align: "center",
|
||||
width: 100,
|
||||
customRender: ({text})=>{
|
||||
return text||text==0 ? text+'元' : '-'
|
||||
customRender: ({ text }) => {
|
||||
return text || text == 0 ? text + '元' : '-'
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -693,8 +714,8 @@ export default {
|
||||
ellipsis: true,
|
||||
align: "center",
|
||||
width: 100,
|
||||
customRender: ({text})=>{
|
||||
return text ? text+'元' : '-'
|
||||
customRender: ({ text }) => {
|
||||
return text ? text + '元' : '-'
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -704,9 +725,9 @@ export default {
|
||||
ellipsis: true,
|
||||
align: "center",
|
||||
width: 100,
|
||||
customCell:(text)=>{return{style:{color:colorSet(text)}}},
|
||||
customRender: ({text})=>{
|
||||
return text ? text+'元' : '-'
|
||||
customCell: (text) => { return { style: { color: colorSet(text) } } },
|
||||
customRender: ({ text }) => {
|
||||
return text ? text + '元' : '-'
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -724,7 +745,7 @@ export default {
|
||||
const cancelTeachingDialog = () => {
|
||||
state.opendrawer = false
|
||||
|
||||
state.drawer={
|
||||
state.drawer = {
|
||||
name: '',
|
||||
drawersearchdate: [],
|
||||
pageNo: '1',
|
||||
@@ -735,12 +756,12 @@ export default {
|
||||
};
|
||||
//回车
|
||||
const enterPressHadlerSearch = e => {
|
||||
console.log("e",e);
|
||||
if (e.keyCode === 13) {
|
||||
searchSubmit()
|
||||
console.log("e", e);
|
||||
if (e.keyCode === 13) {
|
||||
searchSubmit()
|
||||
|
||||
}
|
||||
};
|
||||
}
|
||||
};
|
||||
return {
|
||||
...toRefs(state),
|
||||
tableDatas,
|
||||
@@ -749,6 +770,8 @@ export default {
|
||||
cancelTeachingDialog,
|
||||
searchReset,
|
||||
handleFeeMonthly,
|
||||
handleFeeMonthlyDown,
|
||||
handleFeeMonthlyDetail,
|
||||
handleLook,
|
||||
handleLess,
|
||||
handleDetail,
|
||||
@@ -774,7 +797,7 @@ export default {
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped >
|
||||
<style lang="scss" scoped>
|
||||
.MonthlyStatistics {
|
||||
.header {
|
||||
padding: 0px 32px;
|
||||
@@ -795,6 +818,7 @@ export default {
|
||||
// margin-left: 24px;
|
||||
}
|
||||
}
|
||||
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
@@ -804,6 +828,7 @@ export default {
|
||||
margin-left: 38px;
|
||||
margin-right: 38px;
|
||||
margin-top: 30px;
|
||||
|
||||
// display: flex;
|
||||
// justify-content: space-between;
|
||||
// flex-wrap: wrap;
|
||||
@@ -813,9 +838,11 @@ export default {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.select .ant-picker {
|
||||
width: 410px !important;
|
||||
}
|
||||
|
||||
.headers {
|
||||
height: 73px;
|
||||
border-bottom: 1px solid #e8e8e8;
|
||||
@@ -834,6 +861,7 @@ export default {
|
||||
// margin-left: 24px;
|
||||
}
|
||||
}
|
||||
|
||||
.addTimeBox {
|
||||
position: relative;
|
||||
display: flex;
|
||||
@@ -1112,6 +1140,18 @@ export default {
|
||||
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 {
|
||||
border: none;
|
||||
@@ -1158,13 +1198,16 @@ export default {
|
||||
border-radius: 8px;
|
||||
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;
|
||||
height:32px;
|
||||
height: 32px;
|
||||
}
|
||||
.ant-col-12{
|
||||
height:90px;
|
||||
|
||||
.ant-col-12 {
|
||||
height: 90px;
|
||||
}
|
||||
|
||||
.goback {
|
||||
float: right;
|
||||
padding-right: 70px;
|
||||
@@ -1187,24 +1230,28 @@ export default {
|
||||
color: #4ea6ff;
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
tableBox {
|
||||
padding-bottom: 20px;
|
||||
margin: 20px 38px 30px;
|
||||
::v-deep .ant-select-dropdown{
|
||||
display: inline-block;
|
||||
}
|
||||
::v-deep .ant-select-selection-item{
|
||||
margin-left: 3px;
|
||||
}
|
||||
::v-deep .ant-pagination-options-size-changer.ant-select{
|
||||
width: 84px;
|
||||
}
|
||||
.pa {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: right;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
tableBox {
|
||||
padding-bottom: 20px;
|
||||
margin: 20px 38px 30px;
|
||||
|
||||
::v-deep .ant-select-dropdown {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
::v-deep .ant-select-selection-item {
|
||||
margin-left: 3px;
|
||||
}
|
||||
|
||||
::v-deep .ant-pagination-options-size-changer.ant-select {
|
||||
width: 84px;
|
||||
}
|
||||
|
||||
.pa {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: right;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
File diff suppressed because it is too large
Load Diff
1694
src/views/lecturer/OrganizationApproval.vue
Normal file
1694
src/views/lecturer/OrganizationApproval.vue
Normal file
File diff suppressed because it is too large
Load Diff
1662
src/views/lecturer/OrganizationList.vue
Normal file
1662
src/views/lecturer/OrganizationList.vue
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,23 +1,23 @@
|
||||
<!-- 授课记录 -->
|
||||
<template>
|
||||
<div class="TeachingRecord" >
|
||||
<div style="margin: 20px;margin-top:0;" >
|
||||
<div class="TeachingRecord">
|
||||
<div style="margin: 20px;margin-top:0;">
|
||||
<a-tabs v-model:activeKey="activeKey">
|
||||
<a-tab-pane key="1" tab="内部讲师授课记录">
|
||||
<InsideTeaching/>
|
||||
<InsideTeaching />
|
||||
</a-tab-pane>
|
||||
<a-tab-pane key="2" tab="外部讲师授课记录">
|
||||
<ExternalTeaching/>
|
||||
<ExternalTeaching />
|
||||
</a-tab-pane>
|
||||
</a-tabs>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="jsx">
|
||||
import { reactive, toRefs, ref, watch } from "vue";
|
||||
import InsideTeaching from "../lecturer/InsideTeaching.vue"
|
||||
import ExternalTeaching from "../lecturer/ExternalTeaching.vue"
|
||||
export default {
|
||||
</template>
|
||||
<script lang="jsx">
|
||||
import { reactive, toRefs, ref, watch } from "vue";
|
||||
import InsideTeaching from "../lecturer/InsideTeaching.vue"
|
||||
import ExternalTeaching from "../lecturer/ExternalTeaching.vue"
|
||||
export default {
|
||||
name: "TeachingRecord",
|
||||
components: {
|
||||
InsideTeaching,
|
||||
@@ -25,7 +25,7 @@
|
||||
},
|
||||
setup() {
|
||||
const state = reactive({
|
||||
activeKey:'1'
|
||||
activeKey: '1'
|
||||
})
|
||||
watch(
|
||||
)
|
||||
@@ -34,12 +34,13 @@
|
||||
|
||||
}
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
::v-deep .ant-tabs-tab{
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
::v-deep .ant-tabs-tab {
|
||||
font-weight: 600;
|
||||
}
|
||||
}
|
||||
|
||||
.TeachingRecord {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
Reference in New Issue
Block a user