辅导员管理-添加业绩考核个人填报详情和加分项、就业指导工作API

- 新增kpiFillingDetail函数用于获取业绩考核个人填报详情
- 新增加分项相关API:kpiFillingBonusPointsAdd、kpiFillingBonusPointsUpdate、
  kpiFillingBonusPointsDetail
- 新增就业指导工作相关API:kpiFillingGraduationGuidanceAdd、
  kpiFillingGraduationGuidanceUpdate、kpiFillingGraduationGuidanceDetail
- 添加TODO注释标记待后端API完成的功能

fix(pages): 解决部门名称存储问题

- 启用被注释掉的部门名称存储功能
- 确保deptName正确存入本地缓存

feat(performance): 支持毕业班和非毕业班不同考核标准

- 为考勤管理组件添加classType参数支持
- 为负面清单组件添加classType参数支持
- 为专业工作组件重构标签显示逻辑,支持根据classType动态显示
- 为奖励绩效加班组件添加classType参数支持
- 为学生突发事件组件添加classType参数支持
- 为学生管理组件添加毕业班/非毕业班差异化显示逻辑

refactor(performance): 优化业绩评估页面结构

- 添加班级类型选择按钮(毕业班/非毕业班)
- 在填报时间弹窗中集成班级类型选择功能
- 更新数据加载逻辑以支持classType参数
- 修正各种评分计算中的数值类型转换问题
```
This commit is contained in:
2026-03-13 15:14:29 +08:00
parent e1b2a84030
commit ecc0d00a4f
13 changed files with 788 additions and 154 deletions

View File

@@ -0,0 +1,118 @@
<template>
<view class="form-container">
<view class="form-item">
<label>加分项三选一不选则不加分</label>
<view class="options">
<radio-group @change="onOptionChange">
<label class="option-item" v-for="(item, index) in options" :key="index">
<radio :value="item.value" :checked="formData.bonusType === item.value" />
<text>{{ item.label }} (+{{ item.score }})</text>
</label>
</radio-group>
</view>
</view>
</view>
</template>
<script>
import {
kpiFillingBonusPointsDetail
} from "@/api/instructor/superintendent.js"
export default {
props: ["queryDetailParams", "commitStatus", "classType"],
data() {
return {
options: [
{ label: "1.获得上级部门或学校表扬,妥善处置学生事件并形成典型案例,积极建言献策且建议被采纳,发挥模范带头作用。", value: "option1", score: 10 },
{ label: "2.在学校、学院阶段性重要任务推进过程中,主动担当作为,切实发挥作用。", value: "option2", score: 10 },
{ label: "3.协助学校开展辅导员培训、会议和学生活动,在活动中担任工作人员。", value: "option3", score: 10 }
],
formData: {
bonusType: "",
bonusScoring: "",
id: ""
}
}
},
created() {
const params = {
...this.queryDetailParams,
classType: this.classType
};
kpiFillingBonusPointsDetail(params).then(res => {
console.log(res);
if (res && res.rows && res.rows.length > 0) {
const {
bonusType,
bonusScoring,
id
} = res.rows[0];
this.formData = {
...this.formData,
bonusType,
bonusScoring,
id
};
} else {
console.log("第一次");
}
}).catch(err => {
console.log("API调用失败", err);
})
},
methods: {
onOptionChange(e) {
const value = e.detail.value;
this.formData.bonusType = value;
const selected = this.options.find(item => item.value === value);
this.formData.bonusScoring = selected ? selected.score : 0;
},
getFormData() {
return this.formData;
}
}
}
</script>
<style scoped lang="scss">
.form-container {
.form-item {
padding: 22rpx 40rpx 40rpx 40rpx;
background-color: white;
margin-bottom: 40rpx;
border-radius: 16rpx;
label {
margin-bottom: 20rpx;
display: inline-block;
font-size: 26rpx;
}
.options {
radio-group {
display: flex;
flex-direction: column;
.option-item {
display: flex;
align-items: center;
padding: 20rpx 0;
border-bottom: 1px solid #f0f0f0;
&:last-child {
border-bottom: none;
}
radio {
margin-right: 20rpx;
}
text {
font-size: 28rpx;
}
}
}
}
}
}
</style>