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 "> <a-form-item class="select ">
<!-- <div class="select addTimeBox"> <!-- <div class="select addTimeBox">
<div class="addTime">授课日期</div> --> <div class="addTime">授课日期</div> -->
<a-range-picker v-model:value="searchdate" style="width: 340px !important;" format="YYYY-MM-DD" valueFormat="YYYY-MM-DD" <a-range-picker v-model:value="searchdate" style="width: 380px !important;" format="YYYY-MM-DD" valueFormat="YYYY-MM-DD"
separator="至" :placeholder="['授课日期开始时间', '授课日期结束时间'] separator="至" :placeholder="['授课/开发日期开始时间', '授课/开发日期结束时间']
" "
v-on:keydown.enter="enterPressHadlerSearch" /> v-on:keydown.enter="enterPressHadlerSearch" />
<!-- </div> --> <!-- </div> -->
@@ -106,7 +106,7 @@
<a-space> <a-space>
<a-button type="link" @click="() => handleLook(record, String(record.courseform))">查看</a-button> <a-button type="link" @click="() => handleLook(record, String(record.courseform))">查看</a-button>
<a-button type="link" @click="() => handleModify(record, String(record.courseform))" v-if="record.createFrom == 1&&checkMenu('lecturerRecordsEdit')">编辑</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> </a-space>
</template> </template>
</template> </template>
@@ -709,25 +709,25 @@ export default {
) )
} }
}, },
{ // {
title: '数据来源', // title: '数据来源',
dataIndex: 'createFrom', // dataIndex: 'createFrom',
key: 'createFrom', // key: 'createFrom',
ellipsis: true, align: "center", // ellipsis: true, align: "center",
width: 120, // width: 120,
customRender: (value) => { // customRender: (value) => {
return ( // return (
<div> // <div>
{value.record.createFrom == "0" || value.record.createFrom == "1" // {value.record.createFrom == "0" || value.record.createFrom == "1"
? { // ? {
"0": "系统生成", // "0": "系统生成",
"1": "手动录入", // "1": "手动录入",
}[value.record.createFrom + ""] || "" // }[value.record.createFrom + ""] || ""
: "-"} // : "-"}
</div> // </div>
) // )
} // }
}, // },
{ {
title: '操作 ', title: '操作 ',
dataIndex: 'operation', dataIndex: 'operation',

View File

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

View File

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

View File

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

View File

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

View File

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