2025-08-01 10:44:32 +08:00
|
|
|
|
<template>
|
|
|
|
|
|
<view class="student-management">
|
|
|
|
|
|
<view class="form-item">
|
2026-03-13 15:14:29 +08:00
|
|
|
|
<label>{{label01}}</label>
|
2025-08-01 10:44:32 +08:00
|
|
|
|
<view class="bottom">
|
|
|
|
|
|
<input @blur="onLimitInput($event,'classScoring',10)" v-model="classScoring" type="number"
|
|
|
|
|
|
placeholder="请输入分值" placeholder-class="input-placeholder" />
|
|
|
|
|
|
<text @tap="uploadClassMeetingMaterial">
|
|
|
|
|
|
{{commitStatus==1?"查看材料":"上传材料"}}
|
|
|
|
|
|
</text>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2026-03-13 15:14:29 +08:00
|
|
|
|
<view class="form-item" v-if="!isGraduate">
|
|
|
|
|
|
<label>{{label02}}</label>
|
2025-08-01 10:44:32 +08:00
|
|
|
|
<view class="bottom">
|
|
|
|
|
|
<input @blur="onLimitInput($event,'visitDormitoryScoring',10)" v-model="visitDormitoryScoring" type="number" placeholder="请输入分值"
|
|
|
|
|
|
placeholder-class="input-placeholder" />
|
|
|
|
|
|
<text @tap="uploadSleepCheckMaterial">
|
|
|
|
|
|
{{commitStatus==1?"查看材料":"上传材料"}}
|
|
|
|
|
|
</text>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="form-item">
|
2026-03-13 15:14:29 +08:00
|
|
|
|
<label>{{label03}}</label>
|
2025-08-01 10:44:32 +08:00
|
|
|
|
<view class="bottom">
|
|
|
|
|
|
<input @blur="onLimitInput($event,'stuTalkScoring',10)" v-model="stuTalkScoring" type="number" placeholder="请输入分值"
|
|
|
|
|
|
placeholder-class="input-placeholder" />
|
|
|
|
|
|
<text @tap="uploadInterviewMaterial">
|
|
|
|
|
|
{{commitStatus==1?"查看材料":"上传材料"}}
|
|
|
|
|
|
</text>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2026-03-13 15:14:29 +08:00
|
|
|
|
<view class="form-item" v-if="!isGraduate">
|
|
|
|
|
|
<label>{{label04}}</label>
|
2025-08-01 10:44:32 +08:00
|
|
|
|
<view class="bottom">
|
|
|
|
|
|
<input @blur="onLimitInput($event,'cadreScoring',5)" v-model="cadreScoring" type="number" placeholder="请输入分值" placeholder-class="input-placeholder" />
|
|
|
|
|
|
<text @tap="uploadLeagueMeetingMaterial">
|
|
|
|
|
|
{{commitStatus==1?"查看材料":"上传材料"}}
|
|
|
|
|
|
</text>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2026-03-13 15:14:29 +08:00
|
|
|
|
<view class="form-item" v-if="!isGraduate">
|
|
|
|
|
|
<label>{{label05}}</label>
|
2025-08-01 10:44:32 +08:00
|
|
|
|
<view class="bottom">
|
|
|
|
|
|
<input @blur="onLimitInput($event,'stuActivityScoring',5)" v-model="stuActivityScoring" type="number" placeholder="请输入分值"
|
|
|
|
|
|
placeholder-class="input-placeholder" />
|
|
|
|
|
|
<text @tap="uploadStuActivityMaterials">
|
|
|
|
|
|
{{commitStatus==1?"查看材料":"上传材料"}}
|
|
|
|
|
|
</text>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2026-03-13 15:14:29 +08:00
|
|
|
|
<view class="form-item" v-if="!isGraduate">
|
|
|
|
|
|
<label>{{label06}}</label>
|
|
|
|
|
|
<view class="bottom">
|
|
|
|
|
|
<input @blur="onLimitInput($event,'edgScoring',5)" v-model="edgScoring" type="number" placeholder="请输入分值"
|
|
|
|
|
|
placeholder-class="input-placeholder" />
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="form-item" v-if="!isGraduate">
|
|
|
|
|
|
<label>{{label07}}</label>
|
|
|
|
|
|
<view class="bottom">
|
|
|
|
|
|
<input @blur="onLimitInput($event,'noticeScoring',5)" v-model="noticeScoring" type="number" placeholder="请输入分值"
|
|
|
|
|
|
placeholder-class="input-placeholder" />
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2025-08-01 10:44:32 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
|
import {
|
|
|
|
|
|
teacherKpiFillingMgtDetail
|
|
|
|
|
|
} from "@/api/instructor/superintendent.js"
|
|
|
|
|
|
import {
|
|
|
|
|
|
limitInput
|
|
|
|
|
|
} from "@/utils/limitInput.js"
|
|
|
|
|
|
export default {
|
2026-03-13 15:14:29 +08:00
|
|
|
|
props: {
|
|
|
|
|
|
queryDetailParams: Object,
|
|
|
|
|
|
commitStatus: [String, Number],
|
|
|
|
|
|
classType: {
|
|
|
|
|
|
type: String,
|
|
|
|
|
|
default: 'ungraduate'
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
computed: {
|
|
|
|
|
|
isGraduate() {
|
|
|
|
|
|
return this.classType === 'graduate';
|
|
|
|
|
|
},
|
|
|
|
|
|
label01() {
|
|
|
|
|
|
return this.isGraduate
|
|
|
|
|
|
? "01 每月通过线上线下方式定期召开班会开展教育(10分)"
|
|
|
|
|
|
: "01 每周日及节假日收假当天组织开展班会(10分)";
|
|
|
|
|
|
},
|
|
|
|
|
|
label02() {
|
|
|
|
|
|
if (this.isGraduate) return "";
|
|
|
|
|
|
return "02 每周深入学生宿舍至少2次(10分)";
|
|
|
|
|
|
},
|
|
|
|
|
|
label03() {
|
|
|
|
|
|
return this.classType === 'graduate'
|
|
|
|
|
|
? "03 月度谈心谈话总量≥10人次,覆盖重点关注学生(困难救助、就业预警、心理危机、违纪待处理等)(10分)"
|
|
|
|
|
|
: "03 月度谈心谈话总量≥10人次,覆盖重点关注学生(困难救助、学业指导、心理危机、违纪待处理等)(10分)";
|
|
|
|
|
|
},
|
|
|
|
|
|
label04() {
|
|
|
|
|
|
if (this.isGraduate) return "";
|
|
|
|
|
|
return "04 每月开展班团干部培训、专题工作会议,频次均不少于1次(5分)";
|
|
|
|
|
|
},
|
|
|
|
|
|
label05() {
|
|
|
|
|
|
if (this.isGraduate) return "";
|
|
|
|
|
|
return "05 每月组织或参与学生社区育人活动、思政教育活动及文化艺术体育活动,频次不少于2次(5分)";
|
|
|
|
|
|
},
|
|
|
|
|
|
label06() {
|
|
|
|
|
|
if (this.isGraduate) return "";
|
|
|
|
|
|
return "06 根据学校就业育人工作部署,第一学期需指导并组织所带班级学生参与职业测评,整体完成率需≥90%;第二学期每月需开展1次就业育人相关活动。(5分)";
|
|
|
|
|
|
},
|
|
|
|
|
|
label07() {
|
|
|
|
|
|
if (this.isGraduate) return "";
|
|
|
|
|
|
return "07 按时按质完成学校及相关职能部门发布的与学生相关的各项工作通知、任务(5分)";
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
2025-08-01 10:44:32 +08:00
|
|
|
|
data() {
|
|
|
|
|
|
return {
|
|
|
|
|
|
classScoring: "", //班会材料分数
|
|
|
|
|
|
visitDormitoryScoring: "", //每周深入学生宿舍材料分数
|
|
|
|
|
|
stuTalkScoring: "", // 学生谈话分数
|
|
|
|
|
|
cadreScoring: "", //班团干部会议材料分数
|
|
|
|
|
|
stuActivityScoring: "", //学生开展活动材料分数
|
2026-03-13 15:14:29 +08:00
|
|
|
|
edgScoring: "", //职业测评分数
|
|
|
|
|
|
noticeScoring: "", //其他任务分数
|
2025-08-01 10:44:32 +08:00
|
|
|
|
id: "", //学生开展活动材料分数
|
|
|
|
|
|
queryParams:null
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
created() {
|
2026-03-13 15:14:29 +08:00
|
|
|
|
console.log('===== student-management created =====');
|
|
|
|
|
|
console.log('queryDetailParams:', this.queryDetailParams);
|
|
|
|
|
|
console.log('classType:', this.classType);
|
|
|
|
|
|
},
|
|
|
|
|
|
mounted() {
|
|
|
|
|
|
// 初始化查询参数
|
|
|
|
|
|
this.initQueryParams();
|
|
|
|
|
|
// 等待 classType 准备好后再查询
|
|
|
|
|
|
if (this.classType) {
|
|
|
|
|
|
this.loadData();
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
methods: {
|
|
|
|
|
|
loadData() {
|
|
|
|
|
|
// 查询时带上 classType
|
|
|
|
|
|
const queryParams = {
|
|
|
|
|
|
...this.queryDetailParams,
|
|
|
|
|
|
classType: this.classType
|
|
|
|
|
|
};
|
|
|
|
|
|
console.log('最终查询参数:', queryParams);
|
|
|
|
|
|
|
|
|
|
|
|
teacherKpiFillingMgtDetail(queryParams).then(res => {
|
|
|
|
|
|
console.log('===== API 返回数据 =====');
|
2025-08-01 10:44:32 +08:00
|
|
|
|
console.log(res);
|
|
|
|
|
|
if (res.data) {
|
2026-03-13 15:14:29 +08:00
|
|
|
|
// 毕业班只填充需要的字段
|
|
|
|
|
|
if (this.isGraduate) {
|
|
|
|
|
|
this.classScoring = res.data.classScoring;
|
|
|
|
|
|
this.stuTalkScoring = res.data.stuTalkScoring;
|
|
|
|
|
|
this.id = res.data.id;
|
|
|
|
|
|
} else {
|
|
|
|
|
|
this.classScoring = res.data.classScoring;
|
|
|
|
|
|
this.visitDormitoryScoring = res.data.visitDormitoryScoring;
|
|
|
|
|
|
this.stuTalkScoring = res.data.stuTalkScoring;
|
|
|
|
|
|
this.cadreScoring = res.data.cadreScoring;
|
|
|
|
|
|
this.stuActivityScoring = res.data.stuActivityScoring;
|
|
|
|
|
|
this.edgScoring = res.data.edgScoring;
|
|
|
|
|
|
this.noticeScoring = res.data.noticeScoring;
|
|
|
|
|
|
this.id = res.data.id;
|
|
|
|
|
|
}
|
2025-08-01 10:44:32 +08:00
|
|
|
|
}
|
|
|
|
|
|
})
|
2026-03-13 15:14:29 +08:00
|
|
|
|
},
|
|
|
|
|
|
initQueryParams() {
|
2025-08-01 10:44:32 +08:00
|
|
|
|
this.queryParams = new URLSearchParams({
|
|
|
|
|
|
year: this.queryDetailParams.fillingYear,
|
|
|
|
|
|
month: this.queryDetailParams.fillingMonth,
|
|
|
|
|
|
commitStatus:this.commitStatus
|
|
|
|
|
|
});
|
|
|
|
|
|
},
|
2026-03-13 15:14:29 +08:00
|
|
|
|
onLimitInput(event,name,max) {
|
|
|
|
|
|
let result = limitInput(event.detail.value,max);
|
|
|
|
|
|
this[name] = result;
|
|
|
|
|
|
},
|
|
|
|
|
|
initQueryParams() {
|
|
|
|
|
|
this.queryParams = new URLSearchParams({
|
|
|
|
|
|
year: this.queryDetailParams.fillingYear,
|
|
|
|
|
|
month: this.queryDetailParams.fillingMonth,
|
|
|
|
|
|
commitStatus:this.commitStatus
|
|
|
|
|
|
});
|
|
|
|
|
|
},
|
2025-08-01 10:44:32 +08:00
|
|
|
|
onLimitInput(event,name,max) {
|
|
|
|
|
|
let result = limitInput(event.detail.value,max);
|
|
|
|
|
|
this[name] = result;
|
|
|
|
|
|
},
|
|
|
|
|
|
uploadClassMeetingMaterial() {
|
|
|
|
|
|
|
|
|
|
|
|
uni.navigateTo({
|
|
|
|
|
|
url: `/pages/instructor/performance-appraisal/performance-evaluation/class-meeting-evidence/list?${this.queryParams.toString()}`
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
uploadSleepCheckMaterial() {
|
|
|
|
|
|
uni.navigateTo({
|
|
|
|
|
|
url: `/pages/instructor/performance-appraisal/performance-evaluation/sleep-check-evidence/list?${this.queryParams.toString()}`
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
uploadInterviewMaterial() {
|
|
|
|
|
|
uni.navigateTo({
|
|
|
|
|
|
url: `/pages/instructor/performance-appraisal/performance-evaluation/interview/list?${this.queryParams.toString()}`
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
uploadLeagueMeetingMaterial() {
|
|
|
|
|
|
uni.navigateTo({
|
|
|
|
|
|
url: `/pages/instructor/performance-appraisal/performance-evaluation/league-meeting/list?${this.queryParams.toString()}`
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
uploadStuActivityMaterials() {
|
|
|
|
|
|
uni.navigateTo({
|
|
|
|
|
|
url: `/pages/instructor/performance-appraisal/performance-evaluation/student-activity/list?${this.queryParams.toString()}`
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
getFormData() {
|
2026-03-13 15:14:29 +08:00
|
|
|
|
const data = {
|
2025-08-01 10:44:32 +08:00
|
|
|
|
classScoring: this.classScoring,
|
|
|
|
|
|
stuTalkScoring: this.stuTalkScoring,
|
|
|
|
|
|
id: this.id
|
|
|
|
|
|
};
|
2026-03-13 15:14:29 +08:00
|
|
|
|
// 非毕业班才包含这些字段
|
|
|
|
|
|
if (!this.isGraduate) {
|
|
|
|
|
|
data.visitDormitoryScoring = this.visitDormitoryScoring;
|
|
|
|
|
|
data.cadreScoring = this.cadreScoring;
|
|
|
|
|
|
data.stuActivityScoring = this.stuActivityScoring;
|
|
|
|
|
|
data.edgScoring = this.edgScoring;
|
|
|
|
|
|
data.noticeScoring = this.noticeScoring;
|
|
|
|
|
|
}
|
|
|
|
|
|
return data;
|
2025-08-01 10:44:32 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
<style scoped lang="scss">
|
|
|
|
|
|
.student-management {
|
|
|
|
|
|
.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;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.bottom {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
|
|
|
|
|
|
input {
|
|
|
|
|
|
flex: 1;
|
|
|
|
|
|
border: 1px solid #E1E1E1;
|
|
|
|
|
|
border-radius: 10rpx;
|
|
|
|
|
|
height: 60rpx;
|
|
|
|
|
|
padding-left: 30rpx;
|
|
|
|
|
|
|
|
|
|
|
|
.input-placeholder {
|
|
|
|
|
|
color: #b6b6b6;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
text {
|
|
|
|
|
|
color: #1890FF;
|
|
|
|
|
|
border-bottom: 2px solid #1890FF;
|
|
|
|
|
|
margin-left: 40rpx;
|
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
|
font-size: 26rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
</style>
|