辅导员管理-添加学生测评和通知任务佐证功能

- 新增职业测评佐证相关页面配置,包括列表、添加、详情页面
- 新增通知任务佐证相关页面配置,包括列表、添加、详情页面
- 实现学生管理组件中上传材料功能,支持职业测评和通知任务材料上传
- 优化专业工作组件,支持毕业生和非毕业生不同评分字段逻辑
- 调整个人报告页面标签配置,区分毕业生和非毕业生不同业务流程
- 完善表单验证逻辑,针对不同班级类型和标签页进行差异化处理
```
This commit is contained in:
2026-03-16 16:56:01 +08:00
parent 705efc5dde
commit 5cccc6aa45
12 changed files with 2210 additions and 52 deletions

View File

@@ -3,45 +3,48 @@
<view class="form-item">
<label>{{label01}}</label>
<view class="bottom">
<input @blur="onLimitInput($event,'stuLeaveMaterialsScoring',5)"
v-model="formData.stuLeaveMaterialsScoring" type="number" placeholder="请输入分值"
<input @blur="onLimitInput($event, isGraduate ? 'stuLeaveMaterialsScoring' : 'stuLeaveRequestScoring', 5)"
v-model="formData[isGraduate ? 'stuLeaveMaterialsScoring' : 'stuLeaveRequestScoring']" type="number" placeholder="请输入分值"
placeholder-class="input-placeholder" />
</view>
</view>
<view class="form-item">
<label>{{label02}}</label>
<view class="bottom">
<input @blur="onLimitInput($event,'stuFillingMaterialsScoring',maxStuDisciplinaryViolation)"
v-model="formData.stuFillingMaterialsScoring" type="number" placeholder="请输入分值"
<input @blur="onLimitInput($event, isGraduate ? 'stuFillingMaterialsScoring' : 'stuLeaveMaterialsScoring', isGraduate ? maxStuFillingMaterials : maxStuLeaveMaterials)"
v-model="formData[isGraduate ? 'stuFillingMaterialsScoring' : 'stuLeaveMaterialsScoring']" type="number" placeholder="请输入分值"
placeholder-class="input-placeholder" />
</view>
</view>
<view class="form-item">
<label>{{label03}}</label>
<view class="bottom">
<input @blur="onLimitInput($event,'stuBasicDataScoring',maxHandleEvents)" v-model="formData.stuBasicDataScoring"
<input @blur="onLimitInput($event, isGraduate ? 'stuBasicDataScoring' : 'stuFillingMaterialsScoring', isGraduate ? maxStuDisciplinaryViolation : maxStuFillingMaterials)"
v-model="formData[isGraduate ? 'stuBasicDataScoring' : 'stuFillingMaterialsScoring']"
type="number" placeholder="请输入分值" placeholder-class="input-placeholder" />
</view>
</view>
<view class="form-item">
<label>{{label04}}</label>
<view class="bottom">
<input @blur="onLimitInput($event,'stuDisciplinaryViolationScoring',5)"
v-model="formData.stuDisciplinaryViolationScoring" type="number" placeholder="请输入分值"
placeholder-class="input-placeholder" />
<input @blur="onLimitInput($event, isGraduate ? 'stuDisciplinaryViolationScoring' : 'stuBasicDataScoring', 5)"
v-model="formData[isGraduate ? 'stuDisciplinaryViolationScoring' : 'stuBasicDataScoring']"
type="number" placeholder="请输入分值" placeholder-class="input-placeholder" />
</view>
</view>
<view class="form-item">
<label>{{label05}}</label>
<view class="bottom">
<input @blur="onLimitInput($event,'handleEventsScoring',maxStuDisciplinaryViolation)" v-model="formData.handleEventsScoring"
<input @blur="onLimitInput($event, isGraduate ? 'handleEventsScoring' : 'stuDisciplinaryViolationScoring', isGraduate ? maxHandleEvents : 5)"
v-model="formData[isGraduate ? 'handleEventsScoring' : 'stuDisciplinaryViolationScoring']"
type="number" placeholder="请输入分值" placeholder-class="input-placeholder" />
</view>
</view>
<view class="form-item">
<label>{{label06}}</label>
<view class="bottom">
<input @blur="onLimitInput($event,'otherTaskScoring',5)" v-model="formData.otherTaskScoring"
<input @blur="onLimitInput($event, isGraduate ? 'otherTaskScoring' : 'handleEventsScoring', isGraduate ? 5 : 10)"
v-model="formData[isGraduate ? 'otherTaskScoring' : 'handleEventsScoring']"
type="number" placeholder="请输入分值" placeholder-class="input-placeholder" />
</view>
</view>
@@ -96,17 +99,24 @@
label06() {
return this.isGraduate
? "06 按时按质完成学工、学院发布的各项学生工作通知、任务 5分"
: "06 按程序要求处理突发事件(5分)";
: "06 按程序要求处理突发事件(10分)";
},
maxStuLeaveMaterials() {
return this.isGraduate ? 5 : 5;
},
maxStuFillingMaterials() {
return this.isGraduate ? 10 : 10;
},
maxStuDisciplinaryViolation() {
return this.isGraduate ? 10 : 5;
return this.isGraduate ? 5 : 5;
},
maxHandleEvents() {
return this.isGraduate ? 5 : 10;
return this.isGraduate ? 10 : 10;
}
},data() {
}, data() {
return {
formData: {
stuLeaveRequestScoring: "",
stuLeaveMaterialsScoring: "",
stuFillingMaterialsScoring: "",
stuBasicDataScoring: "",
@@ -125,6 +135,7 @@
kpiFillingBusinessWorkDetail(params).then(res => {
if (res.rows.length > 0) {
const {
stuLeaveRequestScoring,
stuLeaveMaterialsScoring,
stuFillingMaterialsScoring,
stuBasicDataScoring,
@@ -134,7 +145,8 @@
id
} = res.rows[0];
this.formData = {
...this.formData, // 保留 this.formData 中已有的其他属性
...this.formData,
stuLeaveRequestScoring,
stuLeaveMaterialsScoring,
stuFillingMaterialsScoring,
stuBasicDataScoring,

View File

@@ -54,6 +54,9 @@
<view class="bottom">
<input @blur="onLimitInput($event,'edgScoring',5)" v-model="edgScoring" type="number" placeholder="请输入分值"
placeholder-class="input-placeholder" />
<text @tap="uploadStuTest">
{{commitStatus==1?"查看材料":"上传材料"}}
</text>
</view>
</view>
<view class="form-item" v-if="!isGraduate">
@@ -61,6 +64,9 @@
<view class="bottom">
<input @blur="onLimitInput($event,'noticeScoring',5)" v-model="noticeScoring" type="number" placeholder="请输入分值"
placeholder-class="input-placeholder" />
<text @tap="uploadStuNotie">
{{commitStatus==1?"查看材料":"上传材料"}}
</text>
</view>
</view>
</view>
@@ -185,18 +191,7 @@
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
});
},
onLimitInput(event,name,max) {
let result = limitInput(event.detail.value,max);
this[name] = result;
},
uploadClassMeetingMaterial() {
uploadClassMeetingMaterial() {
uni.navigateTo({
url: `/pages/instructor/performance-appraisal/performance-evaluation/class-meeting-evidence/list?${this.queryParams.toString()}`
@@ -222,6 +217,16 @@
url: `/pages/instructor/performance-appraisal/performance-evaluation/student-activity/list?${this.queryParams.toString()}`
})
},
uploadStuTest() {
uni.navigateTo({
url: `/pages/instructor/performance-appraisal/performance-evaluation/student-test/list?${this.queryParams.toString()}`
})
},
uploadStuNotie() {
uni.navigateTo({
url: `/pages/instructor/performance-appraisal/performance-evaluation/student-notice/list?${this.queryParams.toString()}`
})
},
getFormData() {
const data = {
classScoring: this.classScoring,