Merge branch '250427-bugfix-shl' into 250507-bugfix-shl

# Conflicts:
#	src/views/lecturer/InsideLecturer.vue
#	src/views/lecturer/LecturerFee.vue
This commit is contained in:
sunhonglai
2025-05-12 09:21:35 +08:00
6 changed files with 155 additions and 61 deletions

View File

@@ -27,8 +27,8 @@
<a-form-item class="select ">
<!-- <div class="select addTimeBox">
<div class="addTime">授课日期</div> -->
<a-range-picker v-model:value="searchdate" style="width: 340px !important;" format="YYYY-MM-DD" valueFormat="YYYY-MM-DD"
separator="至" :placeholder="['授课日期开始时间', '授课日期结束时间']
<a-range-picker v-model:value="searchdate" style="width: 380px !important;" format="YYYY-MM-DD" valueFormat="YYYY-MM-DD"
separator="至" :placeholder="['授课/开发日期开始时间', '授课/开发日期结束时间']
"
v-on:keydown.enter="enterPressHadlerSearch" />
<!-- </div> -->
@@ -106,7 +106,7 @@
<a-space>
<a-button type="link" @click="() => handleLook(record, String(record.courseform))">查看</a-button>
<a-button type="link" @click="() => handleModify(record, String(record.courseform))" v-if="record.createFrom == 1&&checkMenu('lecturerRecordsEdit')">编辑</a-button>
<a-button v-if="record.isSuperPermission==='true'&&checkMenu('lecturerRecordsDel')" type="link" @click="() => deleteModal(record, String(record.courseform))">删除</a-button>
<a-button v-if="record.createFrom == 1 && (record.isSuperPermission==='true' || checkMenu('lecturerRecordsDel'))" type="link" @click="() => deleteModal(record, String(record.courseform))">删除</a-button>
</a-space>
</template>
</template>
@@ -709,25 +709,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: 'operation',

View File

@@ -1389,6 +1389,14 @@ export default {
return roleCode.some(t => t == admin)
}
}
const orgSplit = (val) => {
if (val) {
const org = val.split('/');
const reversedParts = org.reverse();
return reversedParts.join('/');
}
return '';
}
return {
...toRefs(state),
lecturerAdmin,
@@ -1455,6 +1463,7 @@ export default {
createupdialog,
removeList,
checkMenu,
orgSplit,
}
},
};

View File

@@ -21,8 +21,8 @@
<a-form-item class="select ">
<!-- <div class="select addTimeBox"> -->
<!-- <div class="addTime">授课日期</div> -->
<a-range-picker v-model:value="searchdate" style="width: 340px !important;" format="YYYY-MM-DD" valueFormat="YYYY-MM-DD"
separator="至" :placeholder="['授课日期开始时间', '授课日期结束时间']" v-on:keydown.enter="enterPressHadlerSearch" />
<a-range-picker v-model:value="searchdate" style="width: 380px !important;" format="YYYY-MM-DD" valueFormat="YYYY-MM-DD"
separator="至" :placeholder="['授课/开发日期开始时间', '授课/开发日期结束时间']" v-on:keydown.enter="enterPressHadlerSearch" />
<!-- @change="searchTimeChange" -->
<!-- </div> -->
</a-form-item>
@@ -141,7 +141,7 @@
<a-button type="link" @click="() => handleLook(record, String(record.courseform))">查看</a-button>
<a-button type="link" @click="() => handleModify(record, String(record.courseform))"
v-if="record.createFrom == 1&&checkMenu('lecturerRecordsEdit')">编辑 </a-button>
<a-button type="link" v-if="record.createFrom == 1 && record.isSuperPermission === 'true'&&checkMenu('lecturerRecordsDel')"
<a-button type="link" v-if="record.createFrom == 1 && (record.isSuperPermission === 'true' || checkMenu('lecturerRecordsDel'))"
@click="() => deleteModal(record, String(record.courseform))">删除</a-button>
<!-- <a-button type="link" @click="() => deleteModal(record, String(record.courseform))">删除</a-button> -->
</a-space>
@@ -299,8 +299,8 @@
allowClear
showSearch
:filter-option="false"
:options="filterOrgListSearch"
@search="handleOrgSearch"
:options="filterOrgListSearch2"
@search="handleOrgSearch2"
@change="changeOrg">
</a-select>
<!-- <OrgClass v-model:value="formParam.sourceBelongId" v-model:name="formParam.sourceBelongFullName"></OrgClass> -->
@@ -578,6 +578,7 @@ export default {
const state = reactive({
orgListSearch: [],
filterOrgListSearch: [],
filterOrgListSearch2: [],
moreid: 1,
title: '导入内部授课记录',
vf: false,
@@ -935,10 +936,11 @@ export default {
key: 'trainOrgName',
ellipsis: true, align: "left",
width: 200,
customRender: (value, record) => {
customRender: (value) => {
const orgName = value.record.trainOrgName ? value.record.trainOrgName.split('/').reverse().join('/') : '-';
return (
<div>
{value.record.trainOrgName||'-'}
{orgName}
</div>
)
}
@@ -996,10 +998,14 @@ export default {
value: item.id
}
})
state.orgListSearch.unshift({
label: '全部', value: ''
})
state.filterOrgListSearch = state.orgListSearch;
// 移除filterOrgListSearch2头部的全部选项
state.filterOrgListSearch2 = state.orgListSearch.filter(item => item.value !== ''); // 移除“全部”选项
})
}
//TODO5
@@ -1525,7 +1531,11 @@ export default {
state.filterOrgListSearch = temp.filter(item => item.label.includes(value))
}
const handleOrgSearch2 = (value) => {
let temp = JSON.parse(JSON.stringify(state.orgListSearch.filter(item => item.value !== '')));
//选择数据
state.filterOrgListSearch2 = temp.filter(item => item.label.includes(value))
}
return {
...toRefs(state),
@@ -1587,7 +1597,8 @@ export default {
scoreChange,
locale,
checkMenu,
handleOrgSearch
handleOrgSearch,
handleOrgSearch2
}
},
};

View File

@@ -5,8 +5,20 @@
<div class="filter">
<a-form layout="inline" style="min-width: 1380px;">
<a-form-item class="select">
<a-select style="width: 235px" v-model:value="searchParam.trainOrgId" placeholder="培训发生组织" allowClear
:options="trainOrglist" v-on:keydown.enter="enterPressHadlerSearch">
<a-select
v-model:value="searchParam.trainOrgId"
style="width: 235px"
allowClear
showSearch
:filter-option="false"
@change="handleOrgChange"
@search="handleOrgSearch"
placeholder="请选择培训发生组织"
v-on:keydown.enter="enterPressHadlerSearch">
>
<a-select-option v-for="item in filterOrgListSearch" :key="item.value" :value="item.value">
{{ item.label }}
</a-select-option>
</a-select>
</a-form-item>
<a-form-item class="select ">
@@ -342,6 +354,8 @@ export default {
beginTime: null,
endTime: null,
},
filterOrgListSearch: [],
orgListSearch: [],
})
//费用类型
const courseTypeList = ref([
@@ -380,25 +394,45 @@ export default {
}
queryTrainOrgPor(obj).then((res) => {
if (res.data.code === 200) {
let arr = res.data.data;
let array = [];
arr.map((value) => {
let obj = {
value: value.id,
label: value.affiliationName,
};
array.push(obj);
});
trainOrglist.value = array;
trainOrglist.value.unshift({
value: '',
label: "全部"
state.orgList = res.data.data?.map(item => {
return {
label: item.affiliationName,
value: item.id
}
})
state.orgListSearch = res.data.data?.map(item => {
state.orgInput = item.affiliationName;
return {
label: item.affiliationName,
value: item.id
}
})
state.orgListSearch.unshift({
label: '全部', value: ''
})
state.filterOrgListSearch = state.orgListSearch
}
})
}
trainOrglista()
const handleOrgSearch = (value) => {
console.log("handleOrgSearch value ",value)
console.log("handleOrgSearch state.orgListSearch ",JSON.parse(JSON.stringify(state.orgListSearch)))
//克隆数据
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 OnTheJobStatusList = ref([
{ value: 1, label: "项目开课" },
@@ -1119,6 +1153,8 @@ export default {
managerChange,
trainOrglist,
trainOrglista,
handleOrgSearch,
handleOrgChange,
handlemoreid,
handleExport,
lecturerSystemList,

View File

@@ -32,6 +32,7 @@
@change="handleOrgChange"
@search="handleOrgSearch"
placeholder="请选择培训发生组织"
v-on:keydown.enter="enterPressHadlerSearch">
>
<a-select-option v-for="item in filterOrgListSearch" :key="item.value" :value="item.value">
{{ item.label }}
@@ -138,7 +139,7 @@
<!-- <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"
v-if="(record.status == 0 || record.status == 4 || record.status == 5) && checkMenu('lecturerExpenseDel')"
v-if="(record.status == 0 || record.status == 4 || record.status == 5) && record.createFrom!=0 && checkMenu('lecturerExpenseDel')"
@click="deleteModal(record)">删除</a-button>
</a-space>
</template>
@@ -316,8 +317,9 @@
placeholder="请选择培训发生组织"
allowClear
showSearch
:options="filterOrgListSearch"
@search="handleOrgSearch"
:filter-option="false"
:options="filterOrgListSearch2"
@search="handleOrgSearch2"
@change="changeOrg">
</a-select>
</a-form-item>
@@ -327,11 +329,11 @@
<template v-slot:label>
<img style="margin-right:4px;width: 7px;height: 7px"
src="@/assets/images/coursewareManage/asterisk.png" alt="" />
{{ formParam.courseType == 2 ? '课程' : '授课' }}日期 :
{{ formParam.courseType == 2 ? '课程' : '授课/开发' }}日期 :
</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" placeholder="请选择课程日期"
format="YYYY-MM-DD HH:mm" valueFormat="YYYY-MM-DD HH:mm" :placeholder="formParam.courseType == 2 ? '请选择课程日期' : '请选择授课/开发日期'"
@select="handleSelect" />
</a-form-item>
</a-col>
@@ -343,10 +345,10 @@
<template v-slot:label>
<img style="margin-right:4px;width: 7px;height: 7px"
src="@/assets/images/coursewareManage/asterisk.png" alt="" />
{{ formParam.courseType == 2 ? '课程时长' : '授课时长' }}
{{ formParam.courseType == 2 ? '课程时长' : '授课/开发时长' }}
</template>
<a-input v-model:value="formParam.teachingTime" style="width:100%; height: 40px; border-radius: 8px; "
@change="clearNonNumber" placeholder="请输入授课分钟数" allowClear showSearch suffix="分钟">
<a-input :disabled="formParam.createFrom === 0" v-model:value="formParam.teachingTime" style="width:100%; height: 40px; border-radius: 8px; "
@change="clearNonNumber" :placeholder="formParam.courseType == 2 ? '请输入课程时长分钟数' : '请输入授课/开发分钟数'" allowClear showSearch suffix="分钟">
</a-input>
<!-- <span style="margin-left: 5px ;" v-if="formParam.teachingTime != null">{{
(formParam.teachingTime / 60).toFixed(2) }}小时</span>
@@ -619,6 +621,7 @@ export default {
SeeLoading: false,
orgList: [],
filterOrgListSearch: [],
filterOrgListSearch2: [],
orgListSearch: [],
selectsIds: '',
visibleConfirm: false,
@@ -721,6 +724,8 @@ export default {
state.filterOrgListSearch = state.orgListSearch
// 移除filterOrgListSearch2头部的全部选项
state.filterOrgListSearch2 = state.orgListSearch.filter(item => item.value !== ''); // 移除“全部”选项
})
}
//费用类型
@@ -785,7 +790,6 @@ export default {
// { value: 0, label: "未定级" },
])
const changetlevel = (id) => {
console.log("==============changetlevelId", id);
if(id){
// 清空讲师级别
state.searchParam.tLevelName = null;
@@ -1449,10 +1453,17 @@ export default {
}
}
const orgSplit = (val) => {
// if (val) {
// const org = val.split('/')
// return org[org.length - 1]
// }
if (val) {
const org = val.split('/')
return org[org.length - 1]
const org = val.split('/');
const reversedParts = org.reverse(); // 倒排
return reversedParts.join('/'); // 重新拼接
}
return ''; // 如果 val 为空,返回空字符串
}
//表格内查看数据操作
const handleLook = (record) => {
@@ -1618,8 +1629,22 @@ export default {
courseType: [{ required: true, message: '', log: '费用类型不能为空' }],
courseName: [{ required: true, message: '', log: '课程名称不能为空' }],
trainOrgId: [{ required: true, message: '', log: '培训发生组织不能为空' }],
teachingDate: [{ required: true, message: '', log: '授课日期不能为空' }],
teachingTime: [{ required: true, message: '', log: ' 授课时长不能为空' }],
// teachingDate: [{ required: true, message: '', log: '授课日期不能为空' }],
// teachingTime: [{ required: true, message: '', log: ' 授课时长不能为空' }],
teachingDate: [
{
required: true,
message: '',
log: () => state.formParam.courseType == 2 ? '课程日期不能为空' : '授课/开发日期不能为空'
}
],
teachingTime: [
{
required: true,
message: '',
log: () => state.formParam.courseType == 2 ? '课程时长不能为空' : '授课/开发时长不能为空'
}
],
studys: [{ required: true, message: '', log: ' 参训人数不能为空' }],
// score: [{ required: true, message: '', log: ' 评分不能为空' }],
levelPay: [{ required: true, message: '', log: '课酬基准不能为空' }],
@@ -1630,11 +1655,18 @@ export default {
//TODO4 筛查
const handleOrgSearch = (value) => {
console.log("handleOrgSearch value ",value)
console.log("handleOrgSearch state.orgListSearch ",JSON.parse(JSON.stringify(state.orgListSearch)))
//克隆数据
let temp = JSON.parse(JSON.stringify(state.orgListSearch));
//选择数据
state.filterOrgListSearch = temp.filter(item => item.label.includes(value))
}
const handleOrgSearch2 = (value) => {
//克隆数据
let temp = JSON.parse(JSON.stringify(state.orgListSearch.filter(item => item.value !== '')));
//选择数据
state.filterOrgListSearch2 = temp.filter(item => item.label.includes(value))
}
const handleOrgChange = (value) => {
@@ -1974,6 +2006,7 @@ export default {
getListData,
changetlevel,
handleOrgSearch,
handleOrgSearch2,
handleOrgChange,
canceleditTeacherDialog,
allFee,

View File

@@ -416,6 +416,11 @@ export default{
key: 'updateName',
ellipsis: true, align: "center",
width: 120,
customRender: (value) => {
return (
<div>{value.record.updateName || '-'}</div>
)
}
},
])
//晋级记录列表数据