|
@@ -3,7 +3,7 @@
|
|
|
<el-card class="box-card">
|
|
<el-card class="box-card">
|
|
|
<!-- 培训申请子选项卡 -->
|
|
<!-- 培训申请子选项卡 -->
|
|
|
<el-tabs v-model="trainingSubTab" @tab-click="handleTrainingSubTabClick">
|
|
<el-tabs v-model="trainingSubTab" @tab-click="handleTrainingSubTabClick">
|
|
|
- <el-tab-pane label="培训申请" name="application">
|
|
|
|
|
|
|
+ <el-tab-pane label="培训申请" name="application" v-hasPermi="['rs:trainingapplication:list']">
|
|
|
<!-- 搜索区域 -->
|
|
<!-- 搜索区域 -->
|
|
|
<transition :enter-active-class="animate.searchAnimate.enter" :leave-active-class="animate.searchAnimate.leave">
|
|
<transition :enter-active-class="animate.searchAnimate.enter" :leave-active-class="animate.searchAnimate.leave">
|
|
|
<div v-show="showApplicationSearch" class="mb-[10px]">
|
|
<div v-show="showApplicationSearch" class="mb-[10px]">
|
|
@@ -148,7 +148,7 @@
|
|
|
</el-card>
|
|
</el-card>
|
|
|
</el-tab-pane>
|
|
</el-tab-pane>
|
|
|
|
|
|
|
|
- <el-tab-pane label="培训记录" name="record">
|
|
|
|
|
|
|
+ <el-tab-pane label="培训记录" name="record" v-hasPermi="['rs:trainingrecord:list']">
|
|
|
<!-- 搜索区域 -->
|
|
<!-- 搜索区域 -->
|
|
|
<transition :enter-active-class="animate.searchAnimate.enter" :leave-active-class="animate.searchAnimate.leave">
|
|
<transition :enter-active-class="animate.searchAnimate.enter" :leave-active-class="animate.searchAnimate.leave">
|
|
|
<div v-show="showRecordSearch" class="mb-[10px]">
|
|
<div v-show="showRecordSearch" class="mb-[10px]">
|
|
@@ -190,7 +190,7 @@
|
|
|
<template #header>
|
|
<template #header>
|
|
|
<el-row :gutter="10" class="mb8">
|
|
<el-row :gutter="10" class="mb8">
|
|
|
<el-col :span="1.5">
|
|
<el-col :span="1.5">
|
|
|
- <el-button icon="Download" @click="handleExportRecord" v-hasPermi="['rs:training:record:export']" style="display: none">导出</el-button>
|
|
|
|
|
|
|
+ <el-button icon="Download" @click="handleExportRecord" v-hasPermi="['rs:trainingrecord:export']" style="display: none">导出</el-button>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
<right-toolbar v-model:showSearch="showRecordSearch" @queryTable="getRecordList"></right-toolbar>
|
|
<right-toolbar v-model:showSearch="showRecordSearch" @queryTable="getRecordList"></right-toolbar>
|
|
|
</el-row>
|
|
</el-row>
|
|
@@ -227,7 +227,7 @@
|
|
|
<el-table-column label="操作" align="center" width="200">
|
|
<el-table-column label="操作" align="center" width="200">
|
|
|
<template #default="scope">
|
|
<template #default="scope">
|
|
|
<el-tooltip content="查看" placement="top">
|
|
<el-tooltip content="查看" placement="top">
|
|
|
- <el-button link type="primary" icon="View" @click.stop="handleViewRecord(scope.row)"></el-button>
|
|
|
|
|
|
|
+ <el-button link type="primary" icon="View" @click.stop="handleViewRecord(scope.row)" v-hasPermi="['rs:trainingrecord:query']"></el-button>
|
|
|
</el-tooltip>
|
|
</el-tooltip>
|
|
|
<el-tooltip content="编辑" placement="top">
|
|
<el-tooltip content="编辑" placement="top">
|
|
|
<el-button
|
|
<el-button
|
|
@@ -235,7 +235,7 @@
|
|
|
type="primary"
|
|
type="primary"
|
|
|
icon="Edit"
|
|
icon="Edit"
|
|
|
@click.stop="handleUpdateRecord(scope.row)"
|
|
@click.stop="handleUpdateRecord(scope.row)"
|
|
|
- v-hasPermi="['rs:training:record:edit']"
|
|
|
|
|
|
|
+ v-hasPermi="['rs:trainingrecord:edit']"
|
|
|
></el-button>
|
|
></el-button>
|
|
|
</el-tooltip>
|
|
</el-tooltip>
|
|
|
<el-tooltip content="删除" placement="top">
|
|
<el-tooltip content="删除" placement="top">
|
|
@@ -244,7 +244,7 @@
|
|
|
type="danger"
|
|
type="danger"
|
|
|
icon="Delete"
|
|
icon="Delete"
|
|
|
@click.stop="handleDeleteRecord(scope.row)"
|
|
@click.stop="handleDeleteRecord(scope.row)"
|
|
|
- v-hasPermi="['rs:training:record:remove']"
|
|
|
|
|
|
|
+ v-hasPermi="['rs:trainingrecord:remove']"
|
|
|
></el-button>
|
|
></el-button>
|
|
|
</el-tooltip>
|
|
</el-tooltip>
|
|
|
</template>
|
|
</template>
|
|
@@ -448,6 +448,14 @@
|
|
|
<el-form-item label="学时" prop="duration">
|
|
<el-form-item label="学时" prop="duration">
|
|
|
<el-input-number v-model="applicationForm.duration" :min="0" :max="1000" :step="0.5" style="width: 200px" />
|
|
<el-input-number v-model="applicationForm.duration" :min="0" :max="1000" :step="0.5" style="width: 200px" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
+ <el-form-item label="申请人" prop="userName">
|
|
|
|
|
+ <el-input
|
|
|
|
|
+ v-model="applicationForm.userName"
|
|
|
|
|
+ placeholder="申请人姓名"
|
|
|
|
|
+ readonly
|
|
|
|
|
+ class="readonly-input"
|
|
|
|
|
+ />
|
|
|
|
|
+ </el-form-item>
|
|
|
<el-form-item label="所属部门" prop="department">
|
|
<el-form-item label="所属部门" prop="department">
|
|
|
<el-input
|
|
<el-input
|
|
|
v-model="applicationForm.department"
|
|
v-model="applicationForm.department"
|
|
@@ -744,13 +752,8 @@ import {
|
|
|
} from '@element-plus/icons-vue';
|
|
} from '@element-plus/icons-vue';
|
|
|
import ImagePreview from '@/components/ImagePreview/index.vue';
|
|
import ImagePreview from '@/components/ImagePreview/index.vue';
|
|
|
import {
|
|
import {
|
|
|
- listTrainingCourse,
|
|
|
|
|
- getTrainingCourse,
|
|
|
|
|
- addTrainingCourse,
|
|
|
|
|
- updateTrainingCourse,
|
|
|
|
|
- delTrainingCourse,
|
|
|
|
|
- toggleCourseStatus,
|
|
|
|
|
- exportTrainingCourse,
|
|
|
|
|
|
|
+ // 培训课程相关接口已废弃 (2025-01-03)
|
|
|
|
|
+ // listTrainingCourse, getTrainingCourse, addTrainingCourse, updateTrainingCourse, delTrainingCourse, toggleCourseStatus, exportTrainingCourse,
|
|
|
listTrainingApplication,
|
|
listTrainingApplication,
|
|
|
getTrainingApplication,
|
|
getTrainingApplication,
|
|
|
addTrainingApplication,
|
|
addTrainingApplication,
|
|
@@ -945,6 +948,7 @@ const applicationQueryParams = reactive({
|
|
|
location: '',
|
|
location: '',
|
|
|
duration: undefined as number | undefined,
|
|
duration: undefined as number | undefined,
|
|
|
status: '',
|
|
status: '',
|
|
|
|
|
+ excludeStatus: '1', // 默认排除已通过状态的数据
|
|
|
params: {}
|
|
params: {}
|
|
|
});
|
|
});
|
|
|
|
|
|
|
@@ -992,6 +996,7 @@ const showRecordSearch = ref(true);
|
|
|
userName: '',
|
|
userName: '',
|
|
|
department: '',
|
|
department: '',
|
|
|
completionStatus: '',
|
|
completionStatus: '',
|
|
|
|
|
+ includeApprovedApplications: true, // 包含已通过审批的申请数据
|
|
|
params: {}
|
|
params: {}
|
|
|
});
|
|
});
|
|
|
|
|
|
|
@@ -1073,6 +1078,7 @@ const applicationFormRef = ref<any>(null);
|
|
|
const applicationForm = reactive<{
|
|
const applicationForm = reactive<{
|
|
|
applicationId?: number | string;
|
|
applicationId?: number | string;
|
|
|
courseName: string;
|
|
courseName: string;
|
|
|
|
|
+ userName: string; // 申请人姓名
|
|
|
department: string;
|
|
department: string;
|
|
|
location: string;
|
|
location: string;
|
|
|
duration: number;
|
|
duration: number;
|
|
@@ -1083,6 +1089,7 @@ const applicationForm = reactive<{
|
|
|
}>({
|
|
}>({
|
|
|
applicationId: undefined,
|
|
applicationId: undefined,
|
|
|
courseName: '',
|
|
courseName: '',
|
|
|
|
|
+ userName: '', // 申请人姓名
|
|
|
department: '',
|
|
department: '',
|
|
|
location: '',
|
|
location: '',
|
|
|
duration: 0,
|
|
duration: 0,
|
|
@@ -1106,14 +1113,14 @@ const applicationRules = reactive({
|
|
|
// 部门选项 - 从数据库sys_dept表获取
|
|
// 部门选项 - 从数据库sys_dept表获取
|
|
|
const departmentOptions = ref<Array<{ value: string; label: string }>>([]);
|
|
const departmentOptions = ref<Array<{ value: string; label: string }>>([]);
|
|
|
|
|
|
|
|
-/** 查询培训课程列表 */
|
|
|
|
|
|
|
+/** 查询培训课程列表 - 已废弃 (2025-01-03) */
|
|
|
function getTrainingList() {
|
|
function getTrainingList() {
|
|
|
trainingLoading.value = true;
|
|
trainingLoading.value = true;
|
|
|
- listTrainingCourse(trainingQueryParams).then((response) => {
|
|
|
|
|
- courseList.value = response.rows;
|
|
|
|
|
- trainingTotal.value = response.total;
|
|
|
|
|
- trainingLoading.value = false;
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ // 培训课程模块已废弃,课程信息现在通过培训申请管理
|
|
|
|
|
+ console.warn('培训课程模块已废弃,请使用培训申请功能');
|
|
|
|
|
+ courseList.value = [];
|
|
|
|
|
+ trainingTotal.value = 0;
|
|
|
|
|
+ trainingLoading.value = false;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/** 获取部门列表 */
|
|
/** 获取部门列表 */
|
|
@@ -1199,11 +1206,9 @@ function handleUpdateCourse(row?: CourseVO) {
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- getTrainingCourse(courseId).then((response) => {
|
|
|
|
|
- Object.assign(courseForm, response.data);
|
|
|
|
|
- courseDialogVisible.value = true;
|
|
|
|
|
- courseDialogTitle.value = '修改培训课程';
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ // 培训课程模块已废弃 (2025-01-03)
|
|
|
|
|
+ console.warn('培训课程编辑功能已废弃,请使用培训申请功能');
|
|
|
|
|
+ proxy?.$modal.msgWarning('培训课程模块已废弃,请使用培训申请功能');
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/** 提交按钮 */
|
|
/** 提交按钮 */
|
|
@@ -1211,27 +1216,10 @@ function submitCourseForm() {
|
|
|
courseFormRef.value?.validate((valid: boolean) => {
|
|
courseFormRef.value?.validate((valid: boolean) => {
|
|
|
if (valid) {
|
|
if (valid) {
|
|
|
courseDialogLoading.value = true;
|
|
courseDialogLoading.value = true;
|
|
|
- if (courseForm.courseId) {
|
|
|
|
|
- updateTrainingCourse(courseForm)
|
|
|
|
|
- .then(() => {
|
|
|
|
|
- proxy?.$modal.msgSuccess('修改成功');
|
|
|
|
|
- courseDialogVisible.value = false;
|
|
|
|
|
- getTrainingList();
|
|
|
|
|
- })
|
|
|
|
|
- .finally(() => {
|
|
|
|
|
- courseDialogLoading.value = false;
|
|
|
|
|
- });
|
|
|
|
|
- } else {
|
|
|
|
|
- addTrainingCourse(courseForm)
|
|
|
|
|
- .then(() => {
|
|
|
|
|
- proxy?.$modal.msgSuccess('新增成功');
|
|
|
|
|
- courseDialogVisible.value = false;
|
|
|
|
|
- getTrainingList();
|
|
|
|
|
- })
|
|
|
|
|
- .finally(() => {
|
|
|
|
|
- courseDialogLoading.value = false;
|
|
|
|
|
- });
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ // 培训课程模块已废弃 (2025-01-03)
|
|
|
|
|
+ console.warn('培训课程新增/编辑功能已废弃,请使用培训申请功能');
|
|
|
|
|
+ proxy?.$modal.msgWarning('培训课程模块已废弃,请使用培训申请功能');
|
|
|
|
|
+ courseDialogLoading.value = false;
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
@@ -1259,11 +1247,9 @@ function handleDeleteCourse(row?: CourseVO) {
|
|
|
proxy?.$modal
|
|
proxy?.$modal
|
|
|
.confirm(confirmMessage)
|
|
.confirm(confirmMessage)
|
|
|
.then(() => {
|
|
.then(() => {
|
|
|
- return delTrainingCourse(courseIds);
|
|
|
|
|
- })
|
|
|
|
|
- .then(() => {
|
|
|
|
|
- getTrainingList();
|
|
|
|
|
- proxy?.$modal.msgSuccess('删除成功');
|
|
|
|
|
|
|
+ // 培训课程模块已废弃 (2025-01-03)
|
|
|
|
|
+ console.warn('培训课程删除功能已废弃,请使用培训申请功能');
|
|
|
|
|
+ proxy?.$modal.msgWarning('培训课程模块已废弃,请使用培训申请功能');
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -1278,26 +1264,16 @@ function handleExportCourse() {
|
|
|
);
|
|
);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-/** 查看培训课程详情 */
|
|
|
|
|
|
|
+/** 查看培训课程详情 - 已废弃 (2025-01-03) */
|
|
|
function handleViewCourse(row: CourseVO) {
|
|
function handleViewCourse(row: CourseVO) {
|
|
|
- getTrainingCourse(row.courseId).then((response) => {
|
|
|
|
|
- Object.assign(courseDetail, response.data);
|
|
|
|
|
- courseDetailDialogVisible.value = true;
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ console.warn('培训课程查看功能已废弃,请使用培训申请功能');
|
|
|
|
|
+ proxy?.$modal.msgWarning('培训课程模块已废弃,请使用培训申请功能');
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-/** 切换课程状态 */
|
|
|
|
|
|
|
+/** 切换课程状态 - 已废弃 (2025-01-03) */
|
|
|
function handleToggleStatus(row: CourseVO) {
|
|
function handleToggleStatus(row: CourseVO) {
|
|
|
- const text = row.status === '0' ? '结束' : '启用';
|
|
|
|
|
- proxy?.$modal
|
|
|
|
|
- .confirm(`确认要${text}该课程吗?`)
|
|
|
|
|
- .then(() => {
|
|
|
|
|
- return toggleCourseStatus(row.courseId);
|
|
|
|
|
- })
|
|
|
|
|
- .then(() => {
|
|
|
|
|
- getTrainingList();
|
|
|
|
|
- proxy?.$modal.msgSuccess(`${text}成功`);
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ console.warn('培训课程状态切换功能已废弃,请使用培训申请功能');
|
|
|
|
|
+ proxy?.$modal.msgWarning('培训课程模块已废弃,请使用培训申请功能');
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/** 查看培训申请记录 */
|
|
/** 查看培训申请记录 */
|
|
@@ -1313,13 +1289,25 @@ function handleViewApplications(row: CourseVO) {
|
|
|
/** 培训申请管理相关 */
|
|
/** 培训申请管理相关 */
|
|
|
function getApplicationList() {
|
|
function getApplicationList() {
|
|
|
applicationLoading.value = true;
|
|
applicationLoading.value = true;
|
|
|
|
|
+
|
|
|
|
|
+ // 构建查询参数,自动过滤掉已通过的数据
|
|
|
|
|
+ const queryParams = {
|
|
|
|
|
+ ...applicationQueryParams,
|
|
|
|
|
+ // 排除已通过状态的数据,只显示待审核、已拒绝、已取消等状态
|
|
|
|
|
+ excludeStatus: '1' // 1表示已通过状态
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
// 调用API获取申请列表
|
|
// 调用API获取申请列表
|
|
|
- listTrainingApplication(applicationQueryParams)
|
|
|
|
|
|
|
+ listTrainingApplication(queryParams)
|
|
|
.then((response) => {
|
|
.then((response) => {
|
|
|
// 获取申请列表数据
|
|
// 获取申请列表数据
|
|
|
const applications = response.rows || [];
|
|
const applications = response.rows || [];
|
|
|
- applicationList.value = applications;
|
|
|
|
|
- applicationTotal.value = response.total || 0;
|
|
|
|
|
|
|
+
|
|
|
|
|
+ // 前端二次过滤,确保不显示已通过的数据
|
|
|
|
|
+ const filteredApplications = applications.filter(app => app.status !== '1');
|
|
|
|
|
+
|
|
|
|
|
+ applicationList.value = filteredApplications;
|
|
|
|
|
+ applicationTotal.value = filteredApplications.length;
|
|
|
applicationLoading.value = false;
|
|
applicationLoading.value = false;
|
|
|
})
|
|
})
|
|
|
.catch(() => {
|
|
.catch(() => {
|
|
@@ -1339,68 +1327,82 @@ async function handleAddApplication() {
|
|
|
loadCourseOptions();
|
|
loadCourseOptions();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 自动获取登录用户的部门信息
|
|
|
|
|
- try {
|
|
|
|
|
- // 确保用户信息已加载
|
|
|
|
|
- if (!userStore.userId) {
|
|
|
|
|
- await userStore.getInfo();
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- console.log('开始自动填充用户部门信息:', {
|
|
|
|
|
- userId: userStore.userId,
|
|
|
|
|
- cachedDeptName: userStore.deptName
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ // 自动获取登录用户的部门信息和申请人信息
|
|
|
|
|
+ try {
|
|
|
|
|
+ // 确保用户信息已加载
|
|
|
|
|
+ if (!userStore.userId) {
|
|
|
|
|
+ await userStore.getInfo();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ console.log('开始自动填充用户信息:', {
|
|
|
|
|
+ userId: userStore.userId,
|
|
|
|
|
+ userName: userStore.name,
|
|
|
|
|
+ nickname: userStore.nickname,
|
|
|
|
|
+ cachedDeptName: userStore.deptName
|
|
|
|
|
+ });
|
|
|
|
|
|
|
|
- // 重新获取用户信息以确保获取到deptId
|
|
|
|
|
- await userStore.getInfo();
|
|
|
|
|
- const userInfo = await getUserInfo();
|
|
|
|
|
- const userDeptId = userInfo.data.user.deptId;
|
|
|
|
|
-
|
|
|
|
|
- console.log('用户信息详情:', {
|
|
|
|
|
- userId: userStore.userId,
|
|
|
|
|
- deptId: userDeptId,
|
|
|
|
|
- cachedDeptName: userStore.deptName
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ // 自动填充申请人姓名(使用用户名称)
|
|
|
|
|
+ const displayName = userStore.name || `用户${userStore.userId}`;
|
|
|
|
|
+ applicationForm.userName = displayName;
|
|
|
|
|
+
|
|
|
|
|
+ console.log('申请人姓名自动填充:', {
|
|
|
|
|
+ userId: userStore.userId,
|
|
|
|
|
+ displayName: displayName,
|
|
|
|
|
+ userName: userStore.name
|
|
|
|
|
+ });
|
|
|
|
|
|
|
|
- // 如果有deptId,从数据库sys_dept表实时获取部门名称
|
|
|
|
|
- if (userDeptId) {
|
|
|
|
|
- console.log('开始从数据库sys_dept表获取部门信息 - deptId:', userDeptId);
|
|
|
|
|
|
|
+ // 重新获取用户信息以确保获取到deptId
|
|
|
|
|
+ await userStore.getInfo();
|
|
|
|
|
+ const userInfo = await getUserInfo();
|
|
|
|
|
+ const userDeptId = userInfo.data.user.deptId;
|
|
|
|
|
|
|
|
- try {
|
|
|
|
|
- const deptResponse = await getDept(userDeptId);
|
|
|
|
|
- if (deptResponse.code === 200 && deptResponse.data) {
|
|
|
|
|
- const realDeptName = deptResponse.data.deptName;
|
|
|
|
|
- applicationForm.department = realDeptName;
|
|
|
|
|
-
|
|
|
|
|
- console.log('培训申请部门自动匹配成功:', {
|
|
|
|
|
- userId: userStore.userId,
|
|
|
|
|
- userDeptId: userDeptId,
|
|
|
|
|
- deptNameFromDatabase: realDeptName,
|
|
|
|
|
- 关联逻辑: 'sys_user.dept_id -> sys_dept.dept_name'
|
|
|
|
|
- });
|
|
|
|
|
- } else {
|
|
|
|
|
- console.warn('从数据库获取部门信息失败,使用缓存的部门名称');
|
|
|
|
|
|
|
+ console.log('用户信息详情:', {
|
|
|
|
|
+ userId: userStore.userId,
|
|
|
|
|
+ deptId: userDeptId,
|
|
|
|
|
+ cachedDeptName: userStore.deptName
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ // 如果有deptId,从数据库sys_dept表实时获取部门名称
|
|
|
|
|
+ if (userDeptId) {
|
|
|
|
|
+ console.log('开始从数据库sys_dept表获取部门信息 - deptId:', userDeptId);
|
|
|
|
|
+
|
|
|
|
|
+ try {
|
|
|
|
|
+ const deptResponse = await getDept(userDeptId);
|
|
|
|
|
+ if (deptResponse.code === 200 && deptResponse.data) {
|
|
|
|
|
+ const realDeptName = deptResponse.data.deptName;
|
|
|
|
|
+ applicationForm.department = realDeptName;
|
|
|
|
|
+
|
|
|
|
|
+ console.log('培训申请部门自动匹配成功:', {
|
|
|
|
|
+ userId: userStore.userId,
|
|
|
|
|
+ userDeptId: userDeptId,
|
|
|
|
|
+ deptNameFromDatabase: realDeptName,
|
|
|
|
|
+ 关联逻辑: 'sys_user.dept_id -> sys_dept.dept_name'
|
|
|
|
|
+ });
|
|
|
|
|
+ } else {
|
|
|
|
|
+ console.warn('从数据库获取部门信息失败,使用缓存的部门名称');
|
|
|
|
|
+ applicationForm.department = userStore.deptName || '';
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (deptError) {
|
|
|
|
|
+ console.error('查询部门信息API调用失败:', deptError);
|
|
|
applicationForm.department = userStore.deptName || '';
|
|
applicationForm.department = userStore.deptName || '';
|
|
|
}
|
|
}
|
|
|
- } catch (deptError) {
|
|
|
|
|
- console.error('查询部门信息API调用失败:', deptError);
|
|
|
|
|
|
|
+ } else {
|
|
|
|
|
+ console.warn('用户deptId不存在,使用缓存的部门名称');
|
|
|
applicationForm.department = userStore.deptName || '';
|
|
applicationForm.department = userStore.deptName || '';
|
|
|
}
|
|
}
|
|
|
- } else {
|
|
|
|
|
- console.warn('用户deptId不存在,使用缓存的部门名称');
|
|
|
|
|
- applicationForm.department = userStore.deptName || '';
|
|
|
|
|
|
|
+ } catch (error) {
|
|
|
|
|
+ console.error('获取用户信息失败:', error);
|
|
|
|
|
+ // 如果获取失败,使用空字符串,用户可以手动输入
|
|
|
|
|
+ applicationForm.department = '';
|
|
|
|
|
+ applicationForm.userName = `用户${userStore.userId || '未知'}`;
|
|
|
}
|
|
}
|
|
|
- } catch (error) {
|
|
|
|
|
- console.error('获取用户信息失败:', error);
|
|
|
|
|
- // 如果获取失败,使用空字符串,用户可以手动输入
|
|
|
|
|
- applicationForm.department = '';
|
|
|
|
|
- }
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/** 重置培训申请表单 */
|
|
/** 重置培训申请表单 */
|
|
|
function resetApplicationForm() {
|
|
function resetApplicationForm() {
|
|
|
applicationForm.applicationId = undefined;
|
|
applicationForm.applicationId = undefined;
|
|
|
applicationForm.courseName = '';
|
|
applicationForm.courseName = '';
|
|
|
|
|
+ applicationForm.userName = ''; // 重置申请人字段
|
|
|
applicationForm.department = '';
|
|
applicationForm.department = '';
|
|
|
applicationForm.location = '';
|
|
applicationForm.location = '';
|
|
|
applicationForm.duration = 0;
|
|
applicationForm.duration = 0;
|
|
@@ -1778,16 +1780,12 @@ function handleTrainingSubTabClick() {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// 加载课程选项
|
|
|
|
|
|
|
+// 加载课程选项 - 已废弃 (2025-01-03)
|
|
|
function loadCourseOptions() {
|
|
function loadCourseOptions() {
|
|
|
- return listTrainingCourse({ pageNum: 1, pageSize: 100, status: '0' }).then((response) => {
|
|
|
|
|
- courseOptions.value = response.rows || [];
|
|
|
|
|
- return courseOptions.value;
|
|
|
|
|
- }).catch((error) => {
|
|
|
|
|
- console.error('加载课程选项失败:', error);
|
|
|
|
|
- courseOptions.value = [];
|
|
|
|
|
- throw error;
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ // 培训课程模块已废弃,现在课程信息通过申请时的自定义课程名称管理
|
|
|
|
|
+ console.warn('培训课程选项已废弃,现在使用自定义课程名称');
|
|
|
|
|
+ courseOptions.value = [];
|
|
|
|
|
+ return Promise.resolve([]);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 远程搜索用户
|
|
// 远程搜索用户
|
|
@@ -1818,10 +1816,13 @@ function remoteSearchUser(query: string) {
|
|
|
/** 获取培训记录列表 */
|
|
/** 获取培训记录列表 */
|
|
|
function getRecordList() {
|
|
function getRecordList() {
|
|
|
recordLoading.value = true;
|
|
recordLoading.value = true;
|
|
|
- // 设置当前用户ID,只查询当前用户的培训记录
|
|
|
|
|
|
|
+
|
|
|
|
|
+ // 构建查询参数,包含已通过审批的申请数据
|
|
|
const queryParams = {
|
|
const queryParams = {
|
|
|
...recordQueryParams,
|
|
...recordQueryParams,
|
|
|
- userId: userStore.userId // 设置当前用户ID
|
|
|
|
|
|
|
+ userId: userStore.userId, // 设置当前用户ID
|
|
|
|
|
+ // 确保包含已通过状态的培训申请数据
|
|
|
|
|
+ includeApprovedApplications: true
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
// 调用培训记录接口,获取培训记录数据
|
|
// 调用培训记录接口,获取培训记录数据
|
|
@@ -2973,6 +2974,8 @@ function resetApplicationQuery() {
|
|
|
applicationQueryParams.location = '';
|
|
applicationQueryParams.location = '';
|
|
|
applicationQueryParams.duration = undefined;
|
|
applicationQueryParams.duration = undefined;
|
|
|
applicationQueryParams.status = '';
|
|
applicationQueryParams.status = '';
|
|
|
|
|
+ // 保持排除已通过状态的设置
|
|
|
|
|
+ applicationQueryParams.excludeStatus = '1';
|
|
|
handleApplicationQuery();
|
|
handleApplicationQuery();
|
|
|
}
|
|
}
|
|
|
|
|
|