Compare commits

..

17 Commits

Author SHA1 Message Date
LWH
7a7b464fd6 零时补丁 2026-03-20 17:09:43 +08:00
ffb3fabd27 入伍保留学籍申请-辅导员可以批量帮学生学生申请 2026-03-20 15:19:11 +08:00
db6af26906 日常事务-处分管理:添加全局水印功能和印章图片替换
- 在审批任务对话框中添加了水印显示和隐藏功能
- 替换了静态印章图片为动态获取的印章base64数据
- 添加了下载处分送达书的按钮和相关处理逻辑
- 优化了印章样式布局,支持多种类型的印章展示
- 引入了html2canvas库用于将内容转为带水印的图片下载
- 添加了水印画布创建和背景图生成功能
```
2026-03-20 11:44:31 +08:00
567c023661 入伍保留学籍,增加材料补上传 2026-03-19 17:36:54 +08:00
855b9b89a1 入伍保留学籍申请辅导员审批时可以修改申请原因 2026-03-19 17:06:10 +08:00
2e87f7510d 入伍保留学籍申请导出 2026-03-19 16:40:57 +08:00
LWH
04c8ee7939 Merge branch 'main' of http://47.112.118.149:10082/xgxt_sd/zhxg_pc 2026-03-19 11:34:39 +08:00
LWH
b0d3684dd9 feat: 为处分和解除处分模块添加 Excel 导入功能,包含前端上传组件、后端解析逻辑、空行自动跳过、学号验证及权限控制。 2026-03-19 11:33:29 +08:00
LWH
7034ec9750 为处分和解除处分模块添加 Excel 导入功能,包含前端上传组件、后端解析逻辑、空行自动跳过、学号验证及权限控制。 2026-03-19 11:29:27 +08:00
c0712f3741 辅导员管理-业绩考核-调整修改 2026-03-19 11:04:24 +08:00
b8a8dac060 Merge branch 'main' of http://47.112.118.149:10082/xgxt_sd/zhxg_pc 2026-03-19 09:39:44 +08:00
ca67db8016 辅导员管理-业绩考核-初步实现 2026-03-18 17:17:39 +08:00
林尉华666
0e85ada450 Merge branch 'main' of http://47.112.118.149:10082/xgxt_sd/zhxg_pc 2026-03-18 11:31:47 +08:00
林尉华666
c7b4834e74 辅导员管理-业绩考核-填报信息-“就业指导工作“和”加分项“
添加了就业指导页面,和加分项页面
2026-03-18 11:30:03 +08:00
2998b85265 退伍复学-发起人表单数据显示 2026-03-18 11:04:48 +08:00
b5f35e500b Merge remote-tracking branch 'origin/main' 2026-03-17 16:46:27 +08:00
6987ecf01d 我的画像个人素质综合设置默认选择第一个年份 2026-03-17 16:45:57 +08:00
34 changed files with 2656 additions and 330 deletions

2
.gitignore vendored
View File

@@ -22,3 +22,5 @@ selenium-debug.log
package-lock.json
yarn.lock
package.json
vue.config.js

View File

@@ -92,14 +92,17 @@
"xlsx-style": "^0.8.13"
},
"devDependencies": {
"@babel/core": "^7.29.0",
"@vue/cli-plugin-babel": "4.4.6",
"@vue/cli-plugin-eslint": "4.4.6",
"@vue/cli-service": "4.4.6",
"babel-eslint": "10.1.0",
"babel-loader": "^8.4.1",
"babel-plugin-dynamic-import-node": "2.3.3",
"chalk": "4.1.0",
"compression-webpack-plugin": "5.0.2",
"connect": "3.6.6",
"cross-env": "^10.1.0",
"eslint": "7.15.0",
"eslint-plugin-vue": "7.2.0",
"lint-staged": "10.5.3",

9
src/api/common/stamp.js Normal file
View File

@@ -0,0 +1,9 @@
import request from '@/utils/request'
export function getStampBase64(data) {
return request({
url: '/common/stamp/getStampBase64',
method: 'post',
data
})
}

View File

@@ -36,6 +36,15 @@ export function addEnlistmentReserve(data) {
})
}
// 批量新增应征入伍保留学籍申请
export function batchInsert(data) {
return request({
url: '/routine/enlistmentReserve/batchInsert',
method: 'post',
data: data
})
}
// 修改应征入伍保留学籍申请
export function updateEnlistmentReserve(data) {
return request({
@@ -59,4 +68,4 @@ export function getOwnInfo(){
url:'/comprehensive/stuInfoView/getOwnInfo',
method:'GET'
})
}
}

View File

@@ -76,3 +76,55 @@ export function delKpiFilling(id) {
method: 'post'
})
}
// 查询加分项列表
export function listKpiFillingBonusPoints(query) {
return request({
url: '/teacher/kpiFillingBonusPoints/list',
method: 'get',
params: query
})
}
// 新增加分项
export function addKpiFillingBonusPoints(data) {
return request({
url: '/teacher/kpiFillingBonusPoints/add',
method: 'post',
data: data
})
}
// 修改加分项
export function updateKpiFillingBonusPoints(data) {
return request({
url: '/teacher/kpiFillingBonusPoints/update',
method: 'post',
data: data
})
}
// 删除加分项
export function delKpiFillingBonusPoints(id) {
return request({
url: '/teacher/kpiFillingBonusPoints/' + id,
method: 'post'
})
}
// 查询就业指导工作
export function getKpiFillingGraduationGuidance(id) {
return request({
url: '/teacher/kpiFillingGraduationGuidance/' + id,
method: 'get'
})
}
// 修改就业指导工作
export function updateKpiFillingGraduationGuidance(data) {
return request({
url: '/teacher/kpiFillingGraduationGuidance/update',
method: 'post',
data: data
})
}

View File

@@ -0,0 +1,53 @@
import request from '@/utils/request'
// 查询业绩考核-个人填报-就业指导工作列表
export function listKpiFillingGuidance(query) {
return request({
url: '/teacher/kpiFillingGraduationGuidance/list',
method: 'get',
params: query
})
}
// 查询业绩考核-个人填报-就业指导工作详细
export function getKpiFillingGuidance(id) {
return request({
url: '/teacher/kpiFillingGraduationGuidance/' + id,
method: 'get'
})
}
// js
// 根据辅导员名称、年份 月份 查询详细信息
export function getByFdyNameAndYearAndMonth(query) {
return request({
url: '/teacher/kpiFillingGraduationGuidance/getByFdyNameAndYearAndMonth',
method: 'get',
params: query
})
}
// 新增业绩考核-个人填报-就业指导工作
export function addKpiFillingGuidance(data) {
return request({
url: '/teacher/kpiFillingGraduationGuidance/add',
method: 'post',
data: data
})
}
// 修改业绩考核-个人填报-就业指导工作
export function updateKpiFillingGuidance(data) {
return request({
url: '/teacher/kpiFillingGraduationGuidance/update',
method: 'post',
data: data
})
}
// 删除业绩考核-个人填报-就业指导工作
export function delKpiFillingGuidance(id) {
return request({
url: '/teacher/kpiFillingGraduationGuidance/' + id,
method: 'post'
})
}

View File

@@ -0,0 +1,49 @@
import request from '@/utils/request'
// 查询业绩考核-个人填报-加分项列表
export function listKpiFillingPoints(query) {
return request({
url: '/teacher/kpiFillingBonusPoints/list',
method: 'get',
params: query
})
}
// 查询业绩考核-个人填报-加分项详细
export function getKpiFillingPoints(id) {
return request({
url: '/teacher/kpiFillingBonusPoints/' + id,
method: 'get'
})
}
// 新增业绩考核-个人填报-加分项
export function addKpiFillingPoints(data) {
return request({
url: '/teacher/kpiFillingBonusPoints/add',
method: 'post',
data: data
})
}
// js
// 修改业绩考核-个人填报-加分项
/**
* 更新KPI填报加分信息
* @param {Object} data - KPI填报加分数据对象
* @returns {Promise} 返回请求的Promise对象
*/
export function updateKpiFillingPoints(data) {
return request({
url: '/teacher/kpiFillingBonusPoints/update',
method: 'post',
data: data
})
}
// 删除业绩考核-个人填报-加分项
export function delKpiFillingPoints(id) {
return request({
url: '/teacher/kpiFillingBonusPoints/' + id,
method: 'post'
})
}

View File

@@ -4,6 +4,12 @@ const TokenKey = 'Admin-Token'
export function getToken() {
console.log('getToken')
// 先从 sessionStorage 获取
const token = sessionStorage.getItem(TokenKey)
if (token) {
return token
}
// 如果 sessionStorage 没有,再从 Cookie 获取
return Cookies.get(TokenKey)
}

View File

@@ -263,7 +263,8 @@ export default {
fontSize: 14
},
data: [...stuYearNames]
data: [...stuYearNames],
selectedMode: 'single'
},
radar: {
indicator: [

View File

@@ -401,6 +401,218 @@
</el-descriptions>
<!-- 外宿申请表单 -->
<div v-if="outsideAccommodationForm"><detailApply :formData="form" :isShwo="false"></detailApply></div>
<!-- 退伍复学表单 -->
<el-descriptions v-if="basicForm" class="margin-top" title="退伍复学申请表" :column="4" size="medium" border
style="width: 100%; ">
<el-descriptions-item>
<template slot="label"> 姓名 </template>
{{ form.stName }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 性别 </template>
{{ form.sex }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 民族 </template>
<!-- {{ form.nation }} -->
<dict-tag :options="dict.type.rt_nation" :value="form.nations" />
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 年级 </template>
{{ form.grade }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 班级 </template>
{{ form.stClass }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 学号 </template>
{{ form.stId }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 专业 </template>
{{ form.majors }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 联系电话 </template>
{{ form.datab }}
</el-descriptions-item>
<el-descriptions-item span="4">
<template slot="label"> 申请理由 </template>
<div style="padding-top: 10px; line-height: 1.8;">
<p class="reason-text">本人于 {{ form.rwTime | formatDate }} 应征入伍 {{ form.dataa | formatDate }}
日退役退役后申请复学</p>
<p class="reason-text" v-if="form.conversion == 'Y'">是否申请转专业 </p>
<p class="reason-text" v-else>是否申请转专业 ×</p>
<p v-if="form.conversion === 'Y'" class="reason-text" style="color: red;">
原年级和专业:__{{ form.maList.length > 0 ? form.maList[0].oldgrade : '' }}__{{ form.maList.length > 0 ?
form.maList[0].oldmajor : '' }}__
申请转入年级和专业__{{ saveGradeName }}__{{ saveClassName }}__
</p>
<!-- 附件预览区域 -->
<div style="margin: 10px 0; display: flex; gap: 10px; flex-wrap: wrap;">
<image-preview v-if="form.maList.length > 0 && form.maList[0].proof" :src="form.maList[0].proof"
:width="240" :height="160" />
<image-preview v-if="form.maList.length > 0 && form.maList[0].idcard" :src="form.maList[0].idcard"
:width="240" :height="160" />
<image-preview v-if="form.maList.length > 0 && form.maList[0].material"
:src="form.maList[0].material" :width="240" :height="160" />
</div>
<!-- 申请人信息 -->
<div class="applicant-info right-align" style="padding: 20px 0 0 0;">
<span>申请人</span>
{{ form.stName }}
<span class="date-label" style="margin-left: 10px;">日期</span>
{{ form.times | formatDate }}
</div>
</div>
</el-descriptions-item>
<!-- 招生与就业处意见仅转专业时显示 -->
<el-descriptions-item span="4" v-if="form.conversion === 'Y'">
<template slot="label"> 招生与就业处意见 </template>
<div style="padding-top: 10px; line-height: 1.8;">
<p class="reason-text" style="color: red;">
符合转专业条件拟同意转入年级和专业__{{ saveGradeName }}__{{ saveClassName }}__
</p>
<div class="signature-area right-align" style="padding: 10px 0 0 0;">
<span>审批结果</span>
<el-select v-model="form.zsStatus" placeholder="" class="short-select" disabled
style="width: 100px; margin: 0 5px;">
<el-option label="重新审核" value="0"></el-option>
<el-option label="通过" value="1"></el-option>
<el-option label="退回" value="2"></el-option>
<el-option label="驳回" value="3"></el-option>
</el-select>
<span class="date-label">签名</span>
{{ form.zsIdea || '无' }}
<span class="date-label" style="margin-left: 10px;">日期</span>
{{ form.zsTime | formatDate }}
</div>
</div>
</el-descriptions-item>
<!-- 辅导员意见 -->
<el-descriptions-item span="4">
<template slot="label"> 辅导员意见 </template>
<div style="padding-top: 10px; line-height: 1.8;">
{{ form.fdIdea || '暂无意见' }}
<div class="signature-area right-align" style="padding: 10px 0 0 0;">
<span>审批结果</span>
<el-select v-model="form.fdStatus" placeholder="待审核" class="short-select" disabled
style="width: 100px; margin: 0 5px;">
<el-option label="重新审核" value="0"></el-option>
<el-option label="通过" value="1"></el-option>
<el-option label="退回" value="2"></el-option>
<el-option label="驳回" value="3"></el-option>
</el-select>
<span class="date-label">签名</span>
{{ form.fdQm || '无' }}
<span class="date-label" style="margin-left: 10px;">日期</span>
{{ form.fdTime | formatDate }}
</div>
</div>
</el-descriptions-item>
<!-- 学务意见 -->
<el-descriptions-item span="4">
<template slot="label"> 学务意见 </template>
<div style="padding-top: 10px; line-height: 1.8;">
<div v-if="form.xwStatus == '0' || form.xwStatus == null || form.xwStatus == '2'" >{{ form.xwIdea }}拟编入____</div>
<!-- 同意 -->
<div v-if="form.xwStatus == '1'">{{ form.xwIdea || '暂无意见' }},拟编入__{{finalGradeName}}_{{finalClassName}}__</div>
<div class="signature-area right-align" style="padding: 10px 0 0 0;">
<span>审批结果</span>
<el-select v-model="form.xwStatus" placeholder="待审核" class="short-select" disabled
style="width: 100px; margin: 0 5px;">
<el-option label="重新审核" value="0"></el-option>
<el-option label="通过" value="1"></el-option>
<el-option label="退回" value="2"></el-option>
<el-option label="驳回" value="3"></el-option>
</el-select>
<span class="date-label">签名</span>
{{ form.xwQm || '无' }}
<span class="date-label" style="margin-left: 10px;">日期</span>
{{ form.xwTime | formatDate }}
</div>
</div>
</el-descriptions-item>
<!-- 二级学院意见 -->
<el-descriptions-item span="4">
<template slot="label"> 二级学院意见 </template>
<div style="padding-top: 10px; line-height: 1.8;">
{{ form.twoIdea || '暂无意见' }}
<div class="signature-area right-align" style="padding: 10px 0 0 0;">
<span>审批结果</span>
<el-select v-model="form.twoStatus" placeholder="待审核" class="short-select" disabled
style="width: 100px; margin: 0 5px;">
<el-option label="重新审核" value="0"></el-option>
<el-option label="通过" value="1"></el-option>
<el-option label="退回" value="2"></el-option>
<el-option label="驳回" value="3"></el-option>
</el-select>
<span class="date-label">签名</span>
{{ form.erQm || '无' }}
<span class="date-label" style="margin-left: 10px;">日期</span>
{{ form.twoTime | formatDate }}
</div>
</div>
</el-descriptions-item>
<!-- 学籍管理科意见 -->
<el-descriptions-item span="4">
<template slot="label"> 学籍管理科意见 </template>
<div style="padding-top: 10px; line-height: 1.8;">
{{ form.xjIdea || '暂无意见' }}
<div class="signature-area right-align" style="padding: 10px 0 0 0;">
<span>审批结果</span>
<el-select v-model="form.xjglStatus" placeholder="待审核" class="short-select" disabled
style="width: 100px; margin: 0 5px;">
<el-option label="重新审核" value="0"></el-option>
<el-option label="通过" value="1"></el-option>
<el-option label="退回" value="2"></el-option>
<el-option label="驳回" value="3"></el-option>
</el-select>
<span class="date-label">签名</span>
{{ form.xjQm || '无' }}
<span class="date-label" style="margin-left: 10px;">日期</span>
{{ form.xjTime | formatDate }}
</div>
</div>
</el-descriptions-item>
<!-- 教务处主管领导意见 -->
<el-descriptions-item span="4">
<template slot="label"> 教务处主管领导意见 </template>
<div style="padding-top: 10px; line-height: 1.8;">
{{ form.jwIdea || '暂无意见' }}
<div class="signature-area right-align" style="padding: 10px 0 0 0;">
<span>审批结果</span>
<el-select v-model="form.jwStatus" placeholder="待审核" class="short-select" disabled
style="width: 100px; margin: 0 5px;">
<el-option label="重新审核" value="0"></el-option>
<el-option label="通过" value="1"></el-option>
<el-option label="退回" value="2"></el-option>
<el-option label="驳回" value="3"></el-option>
</el-select>
<span class="date-label">签名</span>
{{ form.jwQm || '无' }}
<span class="date-label" style="margin-left: 10px;">日期</span>
{{ form.jwTime | formatDate }}
</div>
</div>
</el-descriptions-item>
</el-descriptions>
</div>
</el-col>
</el-tab-pane>
@@ -464,9 +676,12 @@ import { getRtStuQuitSchoolByProcInsId } from '@/api/routine/rtStuQuitSchool'
import Parser from '@/components/parser/Parser'
import flow from '@/views/flowable/task/myProcess/detail/flow'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
import {getStname, getProcessId } from "@/api/routine/basic";
import { getEnlistmentReserveByProcessInstanceId} from "@/api/routine/enlistmentReserve/enlistmentReserve";
import { getOutsideAccommodationApplyByProcessInstanceId } from "@/api/dormitory/outsideAccommodation/outsideAccommodationApply";
import detailApply from "@/views/dormitory/outsideAccommodation/outsideAccommodationApply/components/detailApply" // 外宿申请表详细
import { listStudent, getClassName } from '@/api/stuCQS/basedata/student'
import { listGrade } from '@/api/stuCQS/basedata/grade'
export default {
name: 'Record',
@@ -506,6 +721,7 @@ export default {
quitSchoolForm: false, // 休学申请表单
enlistmentReserveForm: false, // 入伍保留学籍表单
outsideAccommodationForm: false, // 外宿申请表单
basicForm: false,//退伍复学表单
form: {},
// 学生基础信息
stuInfo: {},
@@ -537,7 +753,10 @@ export default {
} else if (this.category == 'outsideAccommodation') {
this.outsideAccommodationForm = true
this.getOutsideAccommodation(this.taskForm.procInsId)
}
}else if (this.category == '退伍复学') {
this.basicForm = true
this.getBasicApplication(this.taskForm.procInsId)
}
// 回显流程记录
// 流程任务重获取变量表单
this.processVariables(this.taskForm.taskId)
@@ -630,6 +849,95 @@ export default {
}
})
},
// 退伍复学申请表单数据
getBasicApplication(procInsId) {
getProcessId(procInsId.toString()).then((res) => {
// console.log("后端返回原始数据:",res.data);
this.form = res.data
this.getClassNameList()
this.listGrade()
this.getXWClassNameList()
});
},
// 获取学务班级名称列表
getXWClassNameList() {
getClassName().then(res => {
this.ClassNameList = res.data;
if (this.ClassNameList != null) {
this.ClassNameList.forEach(element => {
if (element.value == this.form.maList[0].finaldata1) {
element.children.forEach(elementTwo => {
if (elementTwo.value == this.form.maList[0].finaldata2) {
elementTwo.children.forEach(elementFree => {
if (elementFree.value == this.form.maList[0].newmajor) {
this.finalClassName = elementFree.label;
this.classVlue1 = [element.value, elementTwo.value, elementFree.value];
// 关键修复:从年级列表中查找年级名称,而不是直接使用 element.label
const gradeId = element.value;
const gradeItem = this.grade_list.find(item => item.gradeId === gradeId);
if (gradeItem) {
this.finalGradeName = gradeItem.gradeName; // 正确的年级名称
this.$set(this.form.maList[0], 'finallabel', gradeItem.gradeId); // 正确的年级ID
}
}
});
}
});
}
});
}
})
},
/** 获取班级名称列表 */
getClassNameList() {
getClassName().then(res => {
this.ClassNameList = res.data
console.log(this.ClassNameList)
if (this.ClassNameList != null) {
this.ClassNameList.forEach(element => {
if (element.value == this.form.maList[0].data1) {
// console.log(element.label)
element.children.forEach(elementTwo => {
if (elementTwo.value == this.form.maList[0].data2) {
// console.log(elementTwo.label)
this.saveClassName =elementTwo.label
// console.log("退伍复学",this.saveClassName)
// 班级
// elementTwo.children.forEach(elementFree => {
// this.saveClassName = elementFree.label
// // console.log(elementFree.label)
// });
}
});
}
});
}
})
},
/** 获取年级列表 */
async listGrade() {
try {
let res = await listGrade()
if (res.code == 200) {
this.grade_list = [...res.rows]
console.log(this.grade_list)
this.grade_list.forEach(element => {
if(element.gradeId == this.form.maList[0].newgrade){
this.saveGradeName = element.gradeName
}
if (element.gradeId == this.form.maList[0].finallabel) {
this.finalGradeName = element.gradeName
}
});
}
} catch (error) {
console.error('获取年级列表失败:', error)
}
},
handleClick(tab, event) {
if (tab.name === '3') {
flowXmlAndNode({ procInsId: this.taskForm.procInsId, deployId: this.taskForm.deployId }).then((res) => {

View File

@@ -391,7 +391,9 @@
<el-descriptions-item span="4">
<template slot="label"> 申请原因 </template>
<div style="padding-top: 10px;">
{{ form.applyReason }}
<!-- {{ form.applyReason }} -->
<el-input v-if="taskName == '辅导员审批'" v-model="form.applyReason" type="textarea" placeholder="请输入申请原因" />
<div v-else>{{ form.applyReason }}</div>
</div>
<div style="padding: 20px;">
<div style="display: flex;justify-content: flex-end;align-items: center;">
@@ -755,7 +757,7 @@
</el-tabs>
<!--审批任务-->
<el-dialog :title="completeTitle" class="certificate-service" :visible.sync="completeOpen" width="60%"
append-to-body>
append-to-body @opened="showGlobalWatermark" @closed="hideGlobalWatermark">
<!-- 处分决定书 -->
<el-card v-if="showLetterService">
<div class="flex justify-center items-center min-h-screen">
@@ -764,19 +766,16 @@
<p class="mb-4 text-zinc-600 dark:text-zinc-300">{{ form.stuName }}同学:</p>
<p class="mb-4 text-zinc-600 dark:text-zinc-300 desc">{{ form.letterService }}</p>
<div class="stamp">
<img
src="https://gss0.baidu.com/7Po3dSag_xI4khGko9WTAnF6hhy/zhidao/wh%3D450%2C600/sign=debd0a4bb2fd5266a77e34109e28bb1d/8d5494eef01f3a297283d36e9d25bc315d607cc2.jpg"
alt="Stamp">
<!-- <img src="https://placehold.co/100x100" alt="Stamp" /> -->
<div>
<div>学生工作处</div>
<div>{{ form.violationDate }}</div>
</div>
<img v-if="stampBase64" :src="stampBase64" width="200" height="200">
</div>
</div>
</div>
<!-- <pdf :src="pdfURL"> </pdf> -->
<el-button type="danger" @click="fileUpload">下载处分下文</el-button>
</el-card>
<el-button v-if="showFileDowload" type="danger" @click="fileUpload">下载解除处分下文</el-button>
@@ -788,13 +787,13 @@
}}学生,学号:{{ form.stuNo }}.该生于个人原因-{{ form.reasonApplying }},申请休学.经学校研究,同意休学,时间从{{ form.quitStartTime }}{{
form.quitEndTime }}.</p>
<p>抄送:教务处财务处{{ form.departmentName }}</p>
<div class="stamp">
<img
src="https://gss0.baidu.com/7Po3dSag_xI4khGko9WTAnF6hhy/zhidao/wh%3D450%2C600/sign=debd0a4bb2fd5266a77e34109e28bb1d/8d5494eef01f3a297283d36e9d25bc315d607cc2.jpg"
alt="Stamp">
<div>
<span>学生工作处</span>
<span>{{ form.quitStartTime }}</span>
<div class="stamp quit-school-stamp">
<div class="quit-school-stamp-layer">
<img v-if="stampBase64" class="quit-school-stamp-image" :src="stampBase64" width="200" height="200">
<div class="quit-school-stamp-text">
<span>学生工作处</span>
<span>{{ form.quitStartTime }}</span>
</div>
</div>
</div>
</div>
@@ -891,6 +890,7 @@
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button type="danger" @click="fileUpload">下载处分送达书</el-button>
<el-button @click="completeOpen = false"> </el-button>
<el-button type="primary" @click="taskComplete"> </el-button>
</span>
@@ -936,6 +936,7 @@ import { flowXmlAndNode, getProcessVariables } from '@/api/flowable/definition'
import { flowRecord } from '@/api/flowable/finished'
import { complete, delegate, flowTaskForm, getNextFlowNode, rejectTask, returnList, returnTask } from '@/api/flowable/todo'
import { getDisciplinaryApplicationByProcInsId, getStuInfo, updateDisciplinaryApplication } from '@/api/routine/disciplinaryApplication'
import { getStampBase64 } from '@/api/common/stamp'
import { getLeaveApplicationByProcInsId, getStuInfoByStuId } from '@/api/routine/leaveApplication'
import { getStuDisciplinaryRelieveByProcInsId, updateRelieve } from '@/api/routine/relieve'
import { getRtStuQuitSchoolByProcInsId, updateRtStuQuitSchool } from '@/api/routine/rtStuQuitSchool'
@@ -947,11 +948,11 @@ import { checkRole } from '@/utils/permission' // 权限判断函数
import flow from '@/views/flowable/task/todo/detail/flow'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
import pdf from 'vue-pdf'
import { getEnlistmentReserveByProcessInstanceId, updateEnlistmentReserve } from "@/api/routine/enlistmentReserve/enlistmentReserve";
import { getEnlistmentReserveByProcessInstanceId, updateEnlistmentReserve } from "@/api/routine/enlistmentReserve/enlistmentReserve"; // 入伍保留学籍
import { insertOrUpdateByStuAndApprover } from "@/api/routine/enlistmentReserve/enlistmentReserveApproval";
import { getUserProfile } from '@/api/system/user' // 获取当前登录用户
import { updateStudent } from '@/api/stuCQS/basedata/student'
import { getOutsideAccommodationApplyByProcessInstanceId, updateOutsideAccommodationApply } from "@/api/dormitory/outsideAccommodation/outsideAccommodationApply";
import { getOutsideAccommodationApplyByProcessInstanceId, updateOutsideAccommodationApply } from "@/api/dormitory/outsideAccommodation/outsideAccommodationApply"; // 外宿申请
import { listBasic, getBasic, delBasic, addBasic, updateBasic, getStname, getProcessId } from "@/api/routine/basic";
import detailApply from "@/views/dormitory/outsideAccommodation/outsideAccommodationApply/components/detailApply" // 外宿申请表详细
import { addOrUpdateAccommodationApproval } from "@/api/dormitory/outsideAccommodation/outsideAccommodationApproval";
@@ -1096,6 +1097,9 @@ export default {
basicForm: false,//退伍复学表单
BasicTestData: 0, // 新增默认0仅退回学生申请时改为1
user: [], // 当前登录用户
stampBase64: '', // 印章Base64数据
globalWatermarkEl: null,
globalWatermarkText: '\u5e7f\u897f\u6c34\u5229\u7535\u529b\u804c\u4e1a\u6280\u672f\u5b66\u9662\u5b66\u5de5\u7cfb\u7edf'
}
},
created() {
@@ -1118,9 +1122,11 @@ export default {
}
if ((this.taskName == '学生接收' || this.taskName == '申请人(辅导员)接收') && this.category == 'disposal') {
this.showLetterService = true
this.getStampBase64()
}
if ((this.taskName == '学生接收' || this.taskName == '辅导员接收') && this.category == 'quitSchool') {
this.showQuitSchoolProve = true
this.getStampBase64()
}
if (this.taskName == '学生接收' && this.category == 'relieve') {
this.showFileDowload = true
@@ -1175,7 +1181,86 @@ export default {
}
},
methods: {
createWatermarkCanvas(text, options = {}) {
const {
width = 300,
height = 200,
angle = -25,
fontSize = 18,
alpha = 0.2
} = options
const canvas = document.createElement('canvas')
canvas.width = width
canvas.height = height
const ctx = canvas.getContext('2d')
if (!ctx) {
return null
}
ctx.clearRect(0, 0, canvas.width, canvas.height)
ctx.translate(canvas.width / 2, canvas.height / 2)
ctx.rotate((angle * Math.PI) / 180)
ctx.textAlign = 'center'
ctx.textBaseline = 'middle'
ctx.font = `${fontSize}px Microsoft YaHei`
ctx.fillStyle = `rgba(0, 0, 0, ${alpha})`
ctx.fillText(text, 0, 0)
return canvas
},
createWatermarkDataUrl(text, options = {}) {
const canvas = this.createWatermarkCanvas(text, options)
if (!canvas) {
return ''
}
return canvas.toDataURL('image/png')
},
showGlobalWatermark() {
if (typeof document === 'undefined') {
return
}
// 检查是否有显示处分决定送达书的卡片且包含.stamp元素
const letterServiceCard = document.querySelector('.el-card:has(.stamp)')
if (!letterServiceCard) {
// 如果没有找到符合条件的元素,则不显示水印
return
}
if (!this.globalWatermarkEl) {
this.globalWatermarkEl = document.createElement('div')
this.globalWatermarkEl.className = 'global-dialog-watermark-mask'
}
const topZIndex = Array.from(document.querySelectorAll('body *'))
.map(item => Number(window.getComputedStyle(item).zIndex) || 0)
.reduce((max, value) => Math.max(max, value), 2002)
const watermarkUrl = this.createWatermarkDataUrl(this.globalWatermarkText)
this.globalWatermarkEl.style.cssText = `
position: fixed;
inset: 0;
width: 100vw;
height: 100vh;
pointer-events: none;
z-index: ${topZIndex + 1};
background-image: url(${watermarkUrl});
background-size: 300px 200px;
background-repeat: repeat;
background-position: 0 0;
`
if (!document.body.contains(this.globalWatermarkEl)) {
document.body.appendChild(this.globalWatermarkEl)
}
},
hideGlobalWatermark() {
if (this.globalWatermarkEl && this.globalWatermarkEl.parentNode) {
this.globalWatermarkEl.parentNode.removeChild(this.globalWatermarkEl)
}
},
getStampBase64() {
getStampBase64().then(res => {
this.stampBase64 = res.msg
})
},
handleChange1(value) {
if (value && value.length === 3) {
const [gradeId, majorId, classId] = value;
@@ -1523,7 +1608,7 @@ export default {
// this.completeOpen = true;
// this.completeTitle = "流程审批";
this.submitForm(null)
// 获取当前用户的签名并赋值给this.taskForm.variables.signature传入监听器
// 获取当前用户的签名并赋值给this.taskForm.variables传入监听器
this.taskForm.variables.signature = this.user.signature
},
/** 用户审批任务 */
@@ -1584,6 +1669,10 @@ export default {
this.form.remark = this.taskForm.remark
this.updateRtStuQuitSchool()
} else if (this.category == 'enlistmentReserve') { // 是应征入伍保留学籍申请,才执行
if (this.taskName == '辅导员审批') { // 辅导员可以修改申请原因
updateEnlistmentReserve(this.form).then(result => {
})
}
if (this.taskName == '教务处主管领导审批') { // (最后一个领导审核完成之后,修改学生学籍状态, status30是入伍保留学籍)
updateStudent({ stuId: this.form.studentId, status: '30' }).then(response => { })
}
@@ -2374,7 +2463,53 @@ export default {
})
},
fileUpload() {
download.resource(this.pdfURL)
// 使用html2canvas将处分决定书卡片内容转换为图片并下载
import('html2canvas').then((html2canvas) => {
// 优先选择处分决定书的卡片内容,如果找不到再尝试通用的.el-card__body
const element = document.querySelector('.certificate-service .el-card__body') ||
document.querySelector('.certificate-service') ||
document.querySelector('.el-card__body');
if (element) {
html2canvas.default(element).then((canvas) => {
// 创建一个新的canvas用于添加水印
const watermarkedCanvas = document.createElement('canvas');
const ctx = watermarkedCanvas.getContext('2d');
watermarkedCanvas.width = canvas.width;
watermarkedCanvas.height = canvas.height;
// 绘制原始canvas内容
ctx.drawImage(canvas, 0, 0);
// 使用平铺水印块,避免文字重叠并降低透明度
const watermarkCanvas = this.createWatermarkCanvas(this.globalWatermarkText, {
width: 320,
height: 220,
angle: -25,
fontSize: 22,
alpha: 0.3
})
if (watermarkCanvas) {
ctx.save()
const pattern = ctx.createPattern(watermarkCanvas, 'repeat')
if (pattern) {
ctx.fillStyle = pattern
ctx.fillRect(0, 0, watermarkedCanvas.width, watermarkedCanvas.height)
}
ctx.restore()
}
// 创建下载链接
const link = document.createElement('a');
link.download = '处分决定送达书.png'; // 更具描述性的文件名
link.href = watermarkedCanvas.toDataURL('image/png');
link.click();
});
} else {
console.error('找不到需要截图的元素');
}
}).catch((error) => {
console.error('html2canvas 加载失败:', error);
});
},
// 初始化入伍保留学籍申请审核意见参数
initApproval() {
@@ -2464,6 +2599,9 @@ export default {
})
}
},
beforeDestroy() {
this.hideGlobalWatermark()
}
}
</script>
<style lang="scss" scoped>
@@ -2526,15 +2664,34 @@ export default {
.stamp {
text-align: right;
position: relative;
min-height: 120px;
padding-top: 10px;
-webkit-touch-callout: none;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
pointer-events: none;
&>div {
margin-top: -70px;
position: relative;
z-index: 2;
margin-top: 10px;
margin-right: 25px;
}
img {
width: 120px;
height: 120px;
position: absolute;
right: 0;
top: -55px;
width: 150px;
height: 200px;
z-index: 1;
-webkit-touch-callout: none;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
pointer-events: none;
}
}
}
@@ -2561,28 +2718,76 @@ export default {
.stamp {
position: relative;
height: 115px;
height: 190px;
margin-top: 50px;
display: flex;
flex-direction: column;
color: #333;
line-height: 35px;
letter-spacing: 3px;
align-items: flex-end;
align-items: center;
&>div {
position: relative;
z-index: 1;
display: flex;
flex-direction: column;
margin-right: 28px;
align-items: center;
margin-right: 0;
text-align: center;
}
img {
width: 180px;
height: 180px;
top: -54px;
position: absolute;
z-index: -1;
left: 50%;
top: 10px;
transform: translateX(-50%);
width: 200px;
height: 200px;
z-index: 2;
}
}
.quit-school-stamp {
height: 260px;
margin-top: 24px;
}
.quit-school-stamp-layer {
position: relative;
width: 250px;
height: 250px;
margin: 0 auto;
}
.quit-school-stamp-image {
position: absolute !important;
inset: 0;
width: 250px !important;
height: 250px !important;
z-index: 1 !important;
object-fit: contain;
}
.quit-school-stamp-text {
position: absolute !important;
inset: 0;
z-index: 2 !important;
display: flex !important;
flex-direction: column;
align-items: center;
justify-content: center;
text-align: center;
line-height: 1.15;
font-size: 24px;
font-weight: 500;
color: #222;
letter-spacing: 0;
transform: translateY(18px);
}
.quit-school-stamp-text span + span {
margin-top: 2px;
}
}
</style>

View File

@@ -194,11 +194,11 @@
<p>{{ form.stuName }},{{ form.gender }},{{ form.mz }},{{ form.birthday }}出生,{{ form.jg }},{{ form.className }}学生,学号:{{ form.stuNo }}.该生于个人原因-{{ form.reasonApplying }},申请休学.经学校研究,同意休学,时间从{{ form.quitStartTime }}{{ form.quitEndTime }}.</p>
<p>抄送:教务处财务处{{ form.departmentName }}</p>
<div class="stamp">
<img src="https://gss0.baidu.com/7Po3dSag_xI4khGko9WTAnF6hhy/zhidao/wh%3D450%2C600/sign=debd0a4bb2fd5266a77e34109e28bb1d/8d5494eef01f3a297283d36e9d25bc315d607cc2.jpg" alt="Stamp">
<div>
<span>学生工作处</span>
<span>{{ form.quitStartTime }}</span>
</div>
<img v-if="stampBase64" :src="stampBase64" width="200" height="200">
</div>
</div>
</div>
@@ -289,6 +289,7 @@ import { flowXmlAndNode, getProcessVariables } from '@/api/flowable/definition'
import { flowRecord } from '@/api/flowable/finished'
import { complete, delegate, flowTaskForm, getNextFlowNode, rejectTask, returnList, returnTask } from '@/api/flowable/todo'
import { getRtStuQuitSchoolByProcInsId, updateRtStuQuitSchool } from '@/api/routine/rtStuQuitSchool'
import { getStampBase64 } from '@/api/common/stamp'
import FlowRole from '@/components/flow/Role'
import FlowUser from '@/components/flow/User'
import Parser from '@/components/parser/Parser'
@@ -403,6 +404,7 @@ export default {
quitSchoolForm: false, // 休学申请表单
showQuitSchoolProve: false, //休学证明
quitSchoolGLKSHShow: false, // 学生教育管理科审核
stampBase64: '', // 印章Base64数据
}
},
created() {
@@ -418,6 +420,7 @@ export default {
// 如果任务名是其中的两个,则改变审批意见的输入框内容
if ((this.taskName == '学生接收' || this.taskName == '辅导员接收') && this.category == 'quitSchool') {
this.showQuitSchoolProve = true
this.getStampBase64()
}
if (this.category == 'quitSchool') {
this.quitSchoolForm = true
@@ -439,6 +442,12 @@ export default {
}
},
methods: {
getStampBase64() {
getStampBase64().then(res => {
this.stampBase64 = res.msg
})
},
reentryYearMethodFormat(row, column) {
return this.selectDictLabel(this.dict.type.sys_teacher_kpi_filling_year, row.quitYear)
},
@@ -765,14 +774,24 @@ export default {
.stamp {
text-align: right;
position: relative;
min-height: 120px;
padding-top: 10px;
& > div {
margin-top: -70px;
position: relative;
z-index: 2;
margin-top: 10px;
margin-right: 25px;
}
img {
width: 120px;
height: 120px;
position: absolute;
right: 0;
top: 10px;
width: 200px;
height: 200px;
z-index: 1;
}
}
}

View File

@@ -213,11 +213,11 @@
</p>
<p>抄送教务处财务处{{ form.departmentName }}</p>
<div class="stamp">
<img src="https://gss0.baidu.com/7Po3dSag_xI4khGko9WTAnF6hhy/zhidao/wh%3D450%2C600/sign=debd0a4bb2fd5266a77e34109e28bb1d/8d5494eef01f3a297283d36e9d25bc315d607cc2.jpg" alt="Stamp">
<div>
<span>学生工作处</span>
<span>{{ form.reentryTime }}</span>
</div>
<img v-if="stampBase64" :src="stampBase64" width="200" height="200">
</div>
</div>
</div>
@@ -322,6 +322,7 @@ import { flowXmlAndNode, getProcessVariables } from '@/api/flowable/definition'
import { flowRecord } from '@/api/flowable/finished'
import { complete, delegate, flowTaskForm, getNextFlowNode, rejectTask, returnList, returnTask } from '@/api/flowable/todo'
import { getRtStuReentrySchoolByProcInsId, updateRtStuReentrySchool } from '@/api/routine/rtStuReentrySchool'
import { getStampBase64 } from '@/api/common/stamp'
import { getClass } from '@/api/stuCQS/basedata/class'
import { getClassName } from '@/api/stuCQS/basedata/student'
import FlowRole from '@/components/flow/Role'
@@ -442,6 +443,7 @@ export default {
classVlue2: [], //班级添加修改选择
ClassNameList: [], //班级名称
showReentryProve: false, // 复学证明
stampBase64: '', // 印章Base64数据
}
},
created() {
@@ -466,6 +468,7 @@ export default {
}
if (this.taskName == '辅导员接收' || this.taskName == '学生接收') {
this.showReentryProve = true
this.getStampBase64()
}
}
// 流程任务获取变量信息
@@ -480,6 +483,12 @@ export default {
this.getClassNameList()
},
methods: {
getStampBase64() {
getStampBase64().then(res => {
this.stampBase64 = res.msg
})
},
reentryYearMethodFormat(row, column) {
return this.selectDictLabel(this.dict.type.sys_teacher_kpi_filling_year, row.reentryYear)
},
@@ -837,14 +846,24 @@ export default {
.stamp {
text-align: right;
position: relative;
min-height: 120px;
padding-top: 10px;
& > div {
margin-top: -70px;
position: relative;
z-index: 2;
margin-top: 10px;
margin-right: 25px;
}
img {
width: 120px;
height: 120px;
position: absolute;
right: 0;
top: 10px;
width: 200px;
height: 200px;
z-index: 1;
}
}
}
@@ -880,17 +899,20 @@ export default {
align-items: flex-end;
& > div {
position: relative;
z-index: 2;
display: flex;
flex-direction: column;
margin-right: 28px;
}
img {
width: 180px;
height: 180px;
top: -54px;
position: absolute;
z-index: -1;
right: 0;
top: 0;
width: 200px;
height: 200px;
z-index: 1;
}
}
}

View File

@@ -42,6 +42,12 @@
>导出</el-button>
</el-col>
<right-toolbar :show-search.sync="showSearch" @queryTable="getList" />
<el-col :span="1.5">
<el-button v-hasPermi="['routine:disciplinaryApplication:import']" type="success" plain icon="el-icon-upload2" size="mini"
@click="handleImport"
>处分导入</el-button>
</el-col>
<right-toolbar :show-search.sync="showSearch" @queryTable="getList" />
</el-row>
<el-table v-loading="loading" :data="disciplinaryApplicationList" @selection-change="handleSelectionChange">
@@ -225,6 +231,37 @@
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<!-- 学生处分导入对话框 -->
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
<el-upload
ref="upload"
:limit="1"
accept=".xlsx, .xls"
:headers="upload.headers"
:action="upload.url + '?updateSupport=' + upload.updateSupport"
:disabled="upload.isUploading"
:on-progress="handleFileUploadProgress"
:on-success="handleFileSuccess"
:auto-upload="false"
:with-credentials="true"
drag
>
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip">
<!-- <div class="el-upload__tip" slot="tip">
<el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的用户数据
</div> -->
<span>仅允许导入xlsxlsx格式文件</span>
<el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" @click="importTemplate">下载模板</el-link>
</div>
</el-upload>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitFileForm"> </el-button>
<el-button @click="upload.open = false"> </el-button>
</div>
</el-dialog>
</div>
</template>
@@ -233,6 +270,7 @@ import { addDisciplinaryApplication, delDisciplinaryApplication, getDisciplinary
import {
pcaTextArr, // 省市区联动数据,纯汉字
} from 'element-china-area-data'
import { getToken } from "@/utils/auth";
export default {
name: 'DisciplinaryApplication',
@@ -301,6 +339,21 @@ export default {
stuInfo: {},
// 省市区
areaOptions: pcaTextArr,
// 导入参数
upload: {
// 是否显示弹出层
open: false,
// 弹出层标题
title: "",
// 是否禁用上传
isUploading: false,
// 是否更新已经存在的数据
updateSupport: 0,
// 设置上传的请求头部
headers: { Authorization: "Bearer " + getToken() },
// 上传的地址
url: process.env.VUE_APP_BASE_API + "/routine/disciplinaryApplication/importData"
},
}
},
created() {
@@ -454,6 +507,35 @@ export default {
`disciplinaryApplication_${new Date().getTime()}.xlsx`
)
},
/** 导入按钮操作 */
handleImport() {
this.upload.title = "学生处分导入";
this.upload.open = true;
console.log('Token:', getToken());
console.log('Upload headers:', this.upload.headers);
console.log('Upload url:', this.upload.url);
},
/** 下载模板操作 */
importTemplate() {
this.download('routine/disciplinaryApplication/importTemplate', {
}, `disciplinaryApplication_template_${new Date().getTime()}.xlsx`)
},
// 文件上传中处理
handleFileUploadProgress(event, file, fileList) {
this.upload.isUploading = true;
},
// 文件上传成功处理
handleFileSuccess(response, file, fileList) {
this.upload.open = false;
this.upload.isUploading = false;
this.$refs.upload.clearFiles();
this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true });
this.getList();
},
// 提交上传文件
submitFileForm() {
this.$refs.upload.submit();
},
handleBlur() {
if (this.form.stuNo != null || this.form.stuNo != '') {
getStuInfo(this.form.stuNo).then((res) => {

View File

@@ -661,7 +661,7 @@ export default {
// 填写附件里面的申请编号
this.enlistmentReserveAttachList.forEach(element => {
element.applyNo = this.formData.applyNo
element.applyId = response.data.id
element.applyId = this.formData.id
})
// 批量新增材料附件
if (this.enlistmentReserveAttachList && this.enlistmentReserveAttachList.length > 0) {
@@ -743,7 +743,6 @@ export default {
this.$message.warning('该文件已添加,请勿重复上传');
}
console.log(this.enlistmentReserveAttachList);
},
// 处理子组件传递的删除文件事件
handleDeleteFile(fileName) {

View File

@@ -23,8 +23,8 @@
:disabled="single" @click="handleUpdate">修改</el-button>
</el-col> -->
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-delete" size="mini" :disabled="multiple"
@click="handleAdd">批量申请</el-button>
<el-button type="primary" plain icon="el-icon-folder-checked" size="mini" :disabled="multiple"
@click="handleAdd">提交批量申请</el-button>
</el-col>
<!-- <el-col :span="1.5">
<el-button v-hasPermi="['system:stuent:import']" type="info" plain icon="el-icon-upload2" size="mini"
@@ -89,6 +89,7 @@
<script>
import { listOwnStu as listStudent } from '@/api/stuCQS/basedata/student'
import { batchInsert } from "@/api/routine/enlistmentReserve/enlistmentReserve";
export default {
data() {
return {
@@ -113,6 +114,8 @@ export default {
name: null,
stuNo: null,
},
// 选中的要添加的学生
stuList: []
}
},
methods: {
@@ -150,8 +153,60 @@ export default {
this.ids = selection.map(item => item.stuId)
this.single = selection.length !== 1
this.multiple = !selection.length
this.stuList = selection
},
handleAdd() {
this.$confirm('此操作会批量提交入伍申请,但是申请记录的民族、家长电话、家庭地址等材料需要手动去修改, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
const loading = this.$loading({
lock: true,
text: 'Loading',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
let data = []
for (let index = 0; index < this.stuList.length; index++) {
const year = new Date().getFullYear();
const randomNo = Math.floor(Math.random() * 1000000).toString().padStart(6, '0');
data.push({
applyNo: `RY${year}${randomNo}`,
applyReason: '本人应征入伍,申请保留学籍从 2026-03-01 至退役后两年。',
className: this.stuList[index].srsClass.className,
deptName: this.stuList[index].deptName,
familyAddress: '',
gender: this.stuList[index].gender == '男' ? '1' : '0',
grade: this.stuList[index].gradeName,
major: this.stuList[index].srsMajors.majorName,
studentName: this.stuList[index].name,
studentNo: this.stuList[index].stuNo,
teacherName: this.stuList[index].cphName,
studentId: this.stuList[index].stuId,
nation: '无',
familyAddress: '请去修改填写家庭地址',
parentPhone: '请去填写家长联系电话',
createTime: Date.now()
})
}
batchInsert(data).then((res) => {
if (res.code == 200) {
loading.close()
this.$modal.msgSuccess(`批量申请成功,共申请${res.data}条数据`)
this.$emit('refresh')
} else {
loading.close()
}
}).catch(() => {
loading.close()
})
}).catch(() => {
this.$message({
type: 'info',
message: '已取消申请'
});
});
}
},

View File

@@ -50,7 +50,8 @@
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="openForm">发起入伍保留学籍申请</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="applicationDialogShow" v-if="this.roleGroup.includes('辅导员')">批量发起入伍保留学籍申请</el-button>
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="applicationDialogShow"
v-if="this.roleGroup.includes('辅导员')">批量发起入伍保留学籍申请</el-button>
</el-col>
<!-- <el-col :span="1.5">
<el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
@@ -59,11 +60,11 @@
<el-col :span="1.5">
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
v-hasPermi="['routine:enlistmentReserve:remove']">删除</el-button>
</el-col>
</el-col>-->
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
v-hasPermi="['routine:enlistmentReserve:export']">导出</el-button>
</el-col> -->
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
@@ -136,11 +137,14 @@
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['routine:enlistmentReserve:edit']" v-if="scope.row.applyStatus == 0 || getRejectInfo(scope.row.enlistmentReserveApprovalList).isReject">修改</el-button>
v-hasPermi="['routine:enlistmentReserve:edit']"
v-if="scope.row.applyStatus == 0 || getRejectInfo(scope.row.enlistmentReserveApprovalList).isReject">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['routine:enlistmentReserve:remove']" v-if="scope.row.applyStatus == 0 || roleGroup.includes('管理员')">删除</el-button>
<el-button size="mini" type="text" icon="el-icon-info"
@click="detail(scope.row)">详情</el-button>
v-hasPermi="['routine:enlistmentReserve:remove']"
v-if="scope.row.applyStatus == 0 || roleGroup.includes('管理员')">删除</el-button>
<el-button size="mini" type="text" icon="el-icon-info" @click="detail(scope.row)">详情</el-button>
<el-button size="mini" type="text" icon="el-icon-edit"
@click="openUpFlie(scope.row.affixId, scope.row)">上传附件</el-button>
</template>
</el-table-column>
</el-table>
@@ -225,13 +229,17 @@
</div>
</el-dialog>
<el-dialog title="批量申请" :visible.sync="applicationDialogOpen" width="80%" append-to-body>
<applicationDialog></applicationDialog>
<applicationDialog @refresh="refreshForm"></applicationDialog>
</el-dialog>
<el-dialog title="上传附件" :visible.sync="isOpenUpFlie" width="30%" append-to-body>
<Affix v-model="affixIdFlie" @input="handleAffix" @fileUploaded="handleAffix" @delete-file="handleDeleteFile" />
</el-dialog>
</div>
</template>
<script>
import { listEnlistmentReserve, getOwnInfo, delEnlistmentReserve, addEnlistmentReserve, updateEnlistmentReserve } from "@/api/routine/enlistmentReserve/enlistmentReserve";
import { batchAddEnlistmentReserveAttach, deleteRtEnlistmentReserveAttachByFileNameAndStuName } from "@/api/routine/enlistmentReserve/enlistmentReserveAttach";
import { getUserProfile } from '@/api/system/user' // 获取当前登录用户
import applicationDialog from '@/views/routine/enlistmentReserve/components/applicationDialog'
export default {
@@ -260,6 +268,8 @@ export default {
open: false,
// 是否显示弹出层
applicationDialogOpen: false,
// 上传附件弹出层
isOpenUpFlie: false,
// 查询参数
queryParams: {
pageNum: 1,
@@ -332,7 +342,10 @@ export default {
],
},
roleGroup: '',
user: ''
user: '',
affixIdFlie: '',
selectEnlistmentReserve: {},
enlistmentReserveAttachList: [],
};
},
created() {
@@ -361,7 +374,7 @@ export default {
this.roleGroup = response.roleGroup;
// this.postGroup = response.postGroup;
if (this.roleGroup) {
if (this.roleGroup.includes("学生")) {
if (this.roleGroup.includes("学生") && !this.roleGroup.includes("管理员")) {
this.queryParams.studentName = this.user.nickName
} else if (this.roleGroup.includes("辅导员")) {
this.queryParams.teacherName = this.user.nickName
@@ -476,7 +489,7 @@ export default {
handleExport() {
this.download('routine/enlistmentReserve/export', {
...this.queryParams
}, `enlistmentReserve_${new Date().getTime()}.xlsx`)
}, `入伍保留学籍申请Excel_${new Date().getTime()}.xlsx`)
},
// 跳转申请表
openForm() {
@@ -521,6 +534,71 @@ export default {
},
applicationDialogShow() {
this.applicationDialogOpen = true
},
openUpFlie(id, row) {
this.isOpenUpFlie = true
this.affixIdFlie = id
this.selectEnlistmentReserve = row
},
handleAffix(affixId) {
this.selectEnlistmentReserve.affixId = affixId
},
// 处理组件传递的文件信息
handleAffix(fileInfo) {
if (!fileInfo || !fileInfo.fileName || !fileInfo.filePath) {
console.warn("无效的文件信息,跳过添加");
return; // 不添加空数据
}
// 构建与后端实体匹配的data对象
let data = {
// id: null, // 主键(后端自增)
applyId: this.selectEnlistmentReserve.id || null, // 关联申请表ID从主表单获取
fileName: fileInfo.fileName, // 文件名(从组件传递的信息中获取)
filePath: fileInfo.filePath, // 文件路径相对路径关联sys_file表
fileSize: fileInfo.originalFile?.size || 0, // 若需要可从fileInfo.originalFile.size获取单位字节
fileType: fileInfo.fileType, // 文件类型如docx、pdf
applyNo: this.selectEnlistmentReserve.applyNo || '', // 申请编号(从主表单获取)
studentName: this.selectEnlistmentReserve.studentName || '', // 学生姓名(从主表单获取)
studentNo: this.selectEnlistmentReserve.studentNo || '' // 学号(从主表单获取)
};
// 避免重复添加根据filePath去重
const isDuplicate = this.enlistmentReserveAttachList.some(
item => item.filePath === data.filePath
);
if (!isDuplicate) {
this.enlistmentReserveAttachList.push(data);
console.log('附件添加成功:', this.enlistmentReserveAttachList);
// 附件添加成功之后修改申请信息
updateEnlistmentReserve(this.selectEnlistmentReserve).then(response => {
// 填写附件里面的申请编号
this.enlistmentReserveAttachList.forEach(element => {
element.applyNo = this.selectEnlistmentReserve.applyNo
element.applyId = this.selectEnlistmentReserve.id
})
// 批量新增材料附件
if (this.enlistmentReserveAttachList && this.enlistmentReserveAttachList.length > 0) {
batchAddEnlistmentReserveAttach(this.enlistmentReserveAttachList)
}
this.$modal.msgSuccess("上传成功");
});
} else {
this.$message.warning('该文件已添加,请勿重复上传');
}
},
// 处理子组件传递的删除文件事件
handleDeleteFile(fileName) {
// 接收文件名后,可执行后续逻辑,删除在数据库的数据
if (fileName) {
deleteRtEnlistmentReserveAttachByFileNameAndStuName({ fileName: fileName, studentName: this.selectEnlistmentReserve.studentName }).then(res => {
this.$message.success(`成功删除文件:${fileName}`);
})
}
},
// 批量申请成功后关闭对话框,刷新列表
refreshForm() {
this.applicationDialogOpen = false
this.getList()
}
}
};

View File

@@ -29,6 +29,9 @@
<el-col :span="1.5">
<el-button v-hasPermi="['routine:relieve:export']" type="warning" plain icon="el-icon-download" size="mini" @click="handleExport">导出</el-button>
</el-col>
<el-col :span="1.5">
<el-button v-hasPermi="['routine:relieve:import']" type="success" plain icon="el-icon-upload2" size="mini" @click="handleImport">解除处分导入</el-button>
</el-col>
<right-toolbar :show-search.sync="showSearch" @queryTable="getList" />
</el-row>
@@ -189,11 +192,40 @@
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<!-- 学生解除处分导入对话框 -->
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
<el-upload
ref="upload"
:limit="1"
accept=".xlsx, .xls"
:headers="upload.headers"
:action="upload.url + '?updateSupport=' + upload.updateSupport"
:disabled="upload.isUploading"
:on-progress="handleFileUploadProgress"
:on-success="handleFileSuccess"
:auto-upload="false"
:with-credentials="true"
drag
>
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip">
<span>仅允许导入 xlsxlsx 格式文件</span>
<el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" @click="importTemplate">下载模板</el-link>
</div>
</el-upload>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitFileForm"> </el-button>
<el-button @click="upload.open = false"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { addRelieve, delRelieve, getMyStuInfo, getPenaltyNumber, getRelieve, getStuInfo, getStuList, listRelieve, save } from '@/api/routine/relieve'
import { getToken } from "@/utils/auth";
import {
pcaTextArr, // 省市区联动数据,纯汉字
} from 'element-china-area-data'
@@ -270,6 +302,21 @@ export default {
},
// 省市区
areaOptions: pcaTextArr,
// 导入参数
upload: {
// 是否显示弹出层
open: false,
// 弹出层标题
title: "",
// 是否禁用上传
isUploading: false,
// 是否更新已经存在的数据
updateSupport: 0,
// 设置上传的请求头部
headers: { Authorization: "Bearer " + getToken() },
// 上传的地址
url: process.env.VUE_APP_BASE_API + "/routine/relieve/importData"
},
}
},
created() {
@@ -485,6 +532,32 @@ export default {
},
})
},
/** 导入按钮操作 */
handleImport() {
this.upload.title = "学生解除处分导入";
this.upload.open = true;
},
/** 下载模板操作 */
importTemplate() {
this.download('routine/relieve/importTemplate', {
}, `relieve_template_${new Date().getTime()}.xlsx`)
},
// 文件上传中处理
handleFileUploadProgress(event, file, fileList) {
this.upload.isUploading = true;
},
// 文件上传成功处理
handleFileSuccess(response, file, fileList) {
this.upload.open = false;
this.upload.isUploading = false;
this.$refs.upload.clearFiles();
this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true });
this.getList();
},
// 提交上传文件
submitFileForm() {
this.$refs.upload.submit();
},
},
}
</script>

View File

@@ -107,6 +107,12 @@
<dict-tag :options="dict.type.rt_filling_college" :value="scope.row.departmentName" />
</template>
</el-table-column>
<el-table-column label="班级类型" align="center" prop="classType">
<template slot-scope="scope">
<el-tag v-if="scope.row.classType === 'graduate'" type="primary">毕业班</el-tag>
<el-tag v-else-if="scope.row.classType === 'ungraduate'" type="success">非毕业班</el-tag>
</template>
</el-table-column>
<el-table-column label="自评分数" align="center" prop="selfScoring">
<template slot-scope="scope">
{{ handleSelfScoring(scope.row) > 100 ? 100 : handleSelfScoring(scope.row) }}
@@ -192,8 +198,11 @@
</div>
<el-tabs type="border-card">
<el-tab-pane v-for="item in componentList" :key="item.name" :label="item.name">
<div class="componentList">
<component :is="item.value" :form="form" style="padding: 10px" />
<div v-if="item.value === 'graduationGuidance' && form.classType === 'graduate'" class="componentList">
<component :is="item.value" :form="form" :roleGroup="roleGroup" :audit="audit" style="padding: 10px" />
</div>
<div v-else-if="item.value !== 'graduationGuidance'" class="componentList">
<component :is="item.value" :form="form" :roleGroup="roleGroup" :audit="audit" style="padding: 10px" />
</div>
</el-tab-pane>
</el-tabs>
@@ -269,6 +278,8 @@ import attendanceManagement from '../components/attendanceManagement.vue'
import negativeList from '../components/negativeList.vue'
// 超工作量奖励绩效
import rewardsKpi from '../components/rewardsKpi.vue'
import bonusPoints from '../components/bonusPoints.vue'
import graduationGuidance from '../components/graduationGuidance.vue'
// 处理学生突发事件
import stuEmergency from '../components/stuEmergency.vue'
// 进度条
@@ -289,6 +300,8 @@ export default {
attendanceManagement,
negativeList,
rewardsKpi,
bonusPoints,
graduationGuidance,
stuEmergency,
auditSteps,
},
@@ -298,7 +311,9 @@ export default {
{ name: '学生管理', value: 'studentManagement' },
{ name: '业务工作', value: 'businessWord' },
{ name: '考勤管理', value: 'attendanceManagement' },
{ name: '加分项', value: 'bonusPoints' },
{ name: '负面清单', value: 'negativeList' },
{ name: '就业指导工作', value: 'graduationGuidance' },
{ name: '超工作量奖励绩效', value: 'rewardsKpi' },
{ name: '处理学生突发事件', value: 'stuEmergency' },
],

View File

@@ -0,0 +1,162 @@
<template>
<div>
<div v-if="form.kpiFillingBonusPointsList && form.kpiFillingBonusPointsList.length > 0">
<el-table :data="form.kpiFillingBonusPointsList" border>
<el-table-column label="序号" type="index" width="50" align="center" />
<el-table-column label="加分类型" align="center" prop="bonusType">
<template slot-scope="scope">
<span v-if="scope.row.bonusType === 'option1'">获得上级部门或学校表扬妥善处置学生事件并形成典型案例积极建言献策且建议被采纳发挥模范带头作用的</span>
<span v-else-if="scope.row.bonusType === 'option2'">在学校学院阶段性重要任务推进过程中主动担当作为切实发挥作用的</span>
<span v-else-if="scope.row.bonusType === 'option3'">协助学校开展辅导员培训会议和学生活动在活动中担任工作人员的</span>
<span v-else>{{ scope.row.bonusType }}</span>
</template>
</el-table-column>
<el-table-column label="分数" align="center" prop="bonusScoring" width="100" />
</el-table>
</div>
<div v-else>
<p>暂无加分项数据</p>
</div>
<div style="margin-top: 10px; padding: 10px; background-color: #f5f5f5; border-radius: 4px;">
<p style="font-weight: bold; margin-bottom: 10px;">考评要求</p>
<div v-if="!isEdit">
<p>1. 获得上级部门或学校表扬妥善处置学生事件并形成典型案例积极建言献策且建议被采纳发挥模范带头作用的10</p>
<p>2. 在学校学院阶段性重要任务推进过程中主动担当作为切实发挥作用的10</p>
<p>3. 协助学校开展辅导员培训会议和学生活动在活动中担任工作人员的10</p>
</div>
<div v-else>
<el-checkbox v-model="bonusForm.option1" @change="handleBonusChange('option1')">获得上级部门或学校表扬妥善处置学生事件并形成典型案例积极建言献策且建议被采纳发挥模范带头作用的10分</el-checkbox>
<el-checkbox v-model="bonusForm.option2" @change="handleBonusChange('option2')">在学校学院阶段性重要任务推进过程中主动担当作为切实发挥作用的10分</el-checkbox>
<el-checkbox v-model="bonusForm.option3" @change="handleBonusChange('option3')">协助学校开展辅导员培训会议和学生活动在活动中担任工作人员的10分</el-checkbox>
<div style="margin-top: 10px;">
<span>分数</span>
<el-input-number v-model="bonusForm.bonusScoring" :min="0" :max="10" size="mini" />
</div>
</div>
<p style="font-weight: bold; margin: 10px 0;">考评方式</p>
<p>学务办学工各项工作记录按照完成情况任务量加分每次加2-4</p>
</div>
<div v-if="form.kpiFillingBonusPointsList && form.kpiFillingBonusPointsList.length > 0 && !(form.auditStatus === 1 && form.roleAudit === 4)" style="margin-top: 10px; text-align: right;">
<el-button v-if="!isEdit && !roleGroup.includes('辅导员') && audit" type="warning" @click="startEdit"> </el-button>
<el-button v-if="isEdit" type="primary" @click="saveBonus">保存</el-button>
<el-button v-if="isEdit" @click="cancelEdit">取消</el-button>
</div>
</div>
</template>
<script>
import { addKpiFillingBonusPoints, updateKpiFillingBonusPoints, delKpiFillingBonusPoints } from '@/api/teacher/kpiFilling'
export default {
props: {
form: {
type: Object,
default: []
},
roleGroup: {
type: String,
default: ''
},
audit: {
type: Boolean,
default: true
}
},
data() {
return {
isEdit: false,
bonusForm: {
option1: false,
option2: false,
option3: false,
bonusScoring: 0
}
}
},
created() {
},
methods: {
startEdit() {
if (this.form.kpiFillingBonusPointsList && this.form.kpiFillingBonusPointsList.length > 0) {
const bonusType = this.form.kpiFillingBonusPointsList[0].bonusType
this.bonusForm = {
option1: bonusType === 'option1',
option2: bonusType === 'option2',
option3: bonusType === 'option3',
bonusScoring: this.form.kpiFillingBonusPointsList[0].bonusScoring || 0
}
}
this.isEdit = true
},
handleBonusChange(type) {
if (type === 'option1' && this.bonusForm.option1) {
this.bonusForm.option2 = false
this.bonusForm.option3 = false
this.bonusForm.bonusScoring = 10
} else if (type === 'option2' && this.bonusForm.option2) {
this.bonusForm.option1 = false
this.bonusForm.option3 = false
this.bonusForm.bonusScoring = 10
} else if (type === 'option3' && this.bonusForm.option3) {
this.bonusForm.option1 = false
this.bonusForm.option2 = false
this.bonusForm.bonusScoring = 10
}
},
saveBonus() {
let bonusType = ''
if (this.bonusForm.option1) bonusType = 'option1'
else if (this.bonusForm.option2) bonusType = 'option2'
else if (this.bonusForm.option3) bonusType = 'option3'
if (!bonusType) {
this.$message.warning('请选择加分类型')
return
}
const data = {
bonusType: bonusType,
bonusScoring: this.bonusForm.bonusScoring,
fdyName: this.form.fdyName,
fillingYear: this.form.fillingYear,
fillingMonth: this.form.fillingMonth,
classType: this.form.classType
}
if (this.form.kpiFillingBonusPointsList && this.form.kpiFillingBonusPointsList.length > 0) {
data.id = this.form.kpiFillingBonusPointsList[0].id
updateKpiFillingBonusPoints(data).then(response => {
this.$message.success('保存成功')
this.isEdit = false
this.form.kpiFillingBonusPointsList[0].bonusType = bonusType
this.form.kpiFillingBonusPointsList[0].bonusScoring = this.bonusForm.bonusScoring
})
} else {
addKpiFillingBonusPoints(data).then(response => {
this.$message.success('保存成功')
this.isEdit = false
this.form.kpiFillingBonusPointsList = [{
bonusType: bonusType,
bonusScoring: this.bonusForm.bonusScoring
}]
})
}
},
cancelEdit() {
this.isEdit = false
this.bonusForm = {
option1: false,
option2: false,
option3: false,
bonusScoring: 0
}
}
}
}
</script>
<style scoped>
p {
margin: 5px 0;
font-size: 14px;
}
</style>

View File

@@ -1,75 +1,201 @@
<!-- -->
<template>
<div>
<p>考核要求严格执行学生请销假登记制度5&emsp;&emsp;&emsp;&emsp;考核方式学工系统记录未能按规定完成1次扣1分</p>
<div style="display: flex; align-items: center;">
<div v-if="classType === 'ungraduate'">
<div>
辅导员自评分{{ form.kpiFillingBusinessWorksList[0].stuLeaveMaterialsScoring || "没有填写" }}
<p style="font-weight: bold;">考核要求</p>
<p>严格执行学生请销假登记制度5</p>
<p style="font-weight: bold;">考核方式</p>
<p style="margin-left: 20px; color: #666;">学工系统记录未能按规定完成1次扣1分</p>
</div>
<div v-if="isShow" style="display: flex; align-items: center;margin-left: 50px;">
<div style="min-width: 70px;color: red;">调整分数</div>
<el-input-number v-model="form.kpiFillingBusinessWorksList[0].stuLeaveMaterialsScoring" :min="0" :max="5" label="调整分数" size="mini" style="width: 100%;" />
<!-- <el-input placeholder="请输入自评分" v-model="form.kpiFillingBusinessWorksList[0].stuLeaveMaterialsScoring" clearable
size="mini">
</el-input> -->
<div style="display: flex; align-items: center; margin-top: 10px;">
<div>
辅导员自评分{{ form.kpiFillingBusinessWorksList[0].stuLeaveRequestScoring || "没有填写" }}
</div>
<div v-if="isShow" style="display: flex; align-items: center;margin-left: 50px;">
<div style="min-width: 70px;color: red;">调整分数</div>
<el-input-number v-model="form.kpiFillingBusinessWorksList[0].stuLeaveRequestScoring" :min="0" :max="5" label="调整分数" size="mini" style="width: 100%;" />
</div>
</div>
<div style="margin-top: 20px;">
<p style="font-weight: bold;">考核要求</p>
<p>按规定完成学生学籍异动违纪处分与解除等材料5</p>
<p style="font-weight: bold;">考核方式</p>
<p style="margin-left: 20px; color: #666;">学务办学工各项工作记录未能按规定完成1次扣2分</p>
</div>
<div style="display: flex; align-items: center; margin-top: 10px;">
<div>
辅导员自评分{{ form.kpiFillingBusinessWorksList[0].stuLeaveMaterialsScoring || "没有填写" }}
</div>
<div v-if="isShow" style="display: flex; align-items: center;margin-left: 50px;">
<div style="min-width: 70px;color: red;">调整分数</div>
<el-input-number v-model="form.kpiFillingBusinessWorksList[0].stuLeaveMaterialsScoring" :min="0" :max="5" label="调整分数" size="mini" style="width: 100%;" />
</div>
</div>
<div style="margin-top: 20px;">
<p style="font-weight: bold;">考核要求</p>
<p>认真完成评优评先资助评定工作10</p>
<p style="font-weight: bold;">考核方式</p>
<p style="margin-left: 20px; color: #666;">学务办学工各项工作记录若存在提交率准确率规范性不达标的情况每项扣12累计扣完该考核指标分值为止</p>
</div>
<div style="display: flex; align-items: center; margin-top: 10px;">
<div>
辅导员自评分{{ form.kpiFillingBusinessWorksList[0].stuFillingMaterialsScoring || "没有填写" }}
</div>
<div v-if="isShow" style="display: flex; align-items: center;margin-left: 50px;">
<div style="min-width: 70px;color: red;">调整分数</div>
<el-input-number v-model="form.kpiFillingBusinessWorksList[0].stuFillingMaterialsScoring" :min="0" :max="10" label="调整分数" size="mini" style="width: 100%;" />
</div>
</div>
<div style="margin-top: 20px;">
<p style="font-weight: bold;">考核要求</p>
<p>按时准确填报学生各项基础数据5</p>
<p style="font-weight: bold;">考核方式</p>
<p style="margin-left: 20px; color: #666;">学务办学工各项工作记录未能按规定完成1次扣1分</p>
</div>
<div style="display: flex; align-items: center; margin-top: 10px;">
<div>
辅导员自评分{{ form.kpiFillingBusinessWorksList[0].stuBasicDataScoring || "没有填写" }}
</div>
<div v-if="isShow" style="display: flex; align-items: center;margin-left: 50px;">
<div style="min-width: 70px;color: red;">调整分数</div>
<el-input-number v-model="form.kpiFillingBusinessWorksList[0].stuBasicDataScoring" :min="0" :max="5" label="调整分数" size="mini" style="width: 100%;" />
</div>
</div>
<div style="margin-top: 20px;">
<p style="font-weight: bold;">考核要求</p>
<p>认真指导学生完成各项材料填报工作5</p>
<p style="font-weight: bold;">考核方式</p>
<p style="margin-left: 20px; color: #666;">学务办学工各项工作记录未能按规定完成1次扣1分</p>
</div>
<div style="display: flex; align-items: center; margin-top: 10px;">
<div>
辅导员自评分{{ form.kpiFillingBusinessWorksList[0].stuDisciplinaryViolationScoring || "没有填写" }}
</div>
<div v-if="isShow" style="display: flex; align-items: center;margin-left: 50px;">
<div style="min-width: 70px;color: red;">调整分数</div>
<el-input-number v-model="form.kpiFillingBusinessWorksList[0].stuDisciplinaryViolationScoring" :min="0" :max="5" label="调整分数" size="mini" style="width: 100%;" />
</div>
</div>
<div style="margin-top: 20px;">
<p style="font-weight: bold;">考核要求</p>
<p>按程序要求处理突发事件5</p>
<p style="font-weight: bold;">考核方式</p>
<p style="margin-left: 20px; color: #666;">学务办学工各项工作记录未能按规定完成不得分</p>
</div>
<div style="display: flex; align-items: center; margin-top: 10px;">
<div>
辅导员自评分{{ form.kpiFillingBusinessWorksList[0].handleEventsScoring || "没有填写" }}
</div>
<div v-if="isShow" style="display: flex; align-items: center;margin-left: 50px;">
<div style="min-width: 70px;color: red;">调整分数</div>
<el-input-number v-model="form.kpiFillingBusinessWorksList[0].handleEventsScoring" :min="0" :max="5" label="调整分数" size="mini" style="width: 100%;" />
</div>
</div>
</div>
<p>考核要求认真指导学生完成各项材料填报工作10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;考核方式学务办学工各项工作记录未能按规定完成1次扣1分</p>
<div style="display: flex; align-items: center;">
<!-- 辅导员自评分{{ form.kpiFillingBusinessWorksList[0].stuFillingMaterialsScoring || "没有填写" }} -->
<div v-else-if="classType === 'graduate'">
<div>
辅导员自评分{{ form.kpiFillingBusinessWorksList[0].stuFillingMaterialsScoring || "没有填写" }}
<p style="font-weight: bold;">考核要求</p>
<p>按规定完成学生学籍异动违纪处分与解除等材料5</p>
<p style="font-weight: bold;">考核方式</p>
<p style="margin-left: 20px; color: #666;">学务办学工各项工作记录未能按规定完成1次扣2分</p>
</div>
<div v-if="isShow" style="display: flex; align-items: center;margin-left: 50px;">
<div style="min-width: 70px;color: red;">调整分数</div>
<el-input-number v-model="form.kpiFillingBusinessWorksList[0].stuFillingMaterialsScoring" :min="0" :max="10" label="调整分数" size="mini" style="width: 100%;" />
<!-- <el-input placeholder="请输入自评分" v-model="form.kpiFillingBusinessWorksList[0].stuFillingMaterialsScoring" clearable
size="mini">
</el-input> -->
</div>
</div>
<p>考核要求:按时按质完成学生基础数据上报工作10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;考核方式学务办学工各项工作记录未能按规定完成1次扣1分</p>
<div style="display: flex; align-items: center;">
<!-- 辅导员自评分{{ form.kpiFillingBusinessWorksList[0].stuBasicDataScoring || "没有填写" }} -->
<div>
辅导员自评分{{ form.kpiFillingBusinessWorksList[0].stuBasicDataScoring || "没有填写" }}
</div>
<div v-if="isShow" style="display: flex; align-items: center;margin-left: 50px;">
<div style="min-width: 70px;color: red;">调整分数</div>
<el-input-number v-model="form.kpiFillingBusinessWorksList[0].stuBasicDataScoring" :min="0" :max="10" label="调整分数" size="mini" style="width: 100%;" />
<!-- <el-input placeholder="请输入自评分" v-model="form.kpiFillingBusinessWorksList[0].stuBasicDataScoring" clearable
size="mini">
</el-input> -->
</div>
</div>
<p>考核要求按规定完成学生违纪处分材料10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;考核方式学务办学工各项工作记录未能按规定完成1次扣2分</p>
<div style="display: flex; align-items: center;">
<!-- 辅导员自评分{{ form.kpiFillingBusinessWorksList[0].stuDisciplinaryViolationScoring || "没有填写" }} -->
<div>
辅导员自评分{{ form.kpiFillingBusinessWorksList[0].stuDisciplinaryViolationScoring || "没有填写" }}
</div>
<div v-if="isShow" style="display: flex; align-items: center;margin-left: 50px;">
<div style="min-width: 70px;color: red;">调整分数</div>
<el-input-number v-model="form.kpiFillingBusinessWorksList[0].stuDisciplinaryViolationScoring" :min="0" :max="10" label="调整分数" size="mini" style="width: 100%;" />
<!-- <el-input placeholder="请输入自评分" v-model="form.kpiFillingBusinessWorksList[0].stuDisciplinaryViolationScoring" clearable
size="mini">
</el-input> -->
</div>
</div>
<p>考核要求按程序要求处理突发事件10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;考核方式学务办学工各项工作记录未能按规定完成不得分</p>
<div style="display: flex; align-items: center;">
<!-- 辅导员自评分{{ form.kpiFillingBusinessWorksList[0].handleEventsScoring || "没有填写" }} -->
<div>
辅导员自评分{{ form.kpiFillingBusinessWorksList[0].handleEventsScoring || "没有填写" }}
</div>
<div v-if="isShow" style="display: flex; align-items: center;margin-left: 50px;">
<div style="min-width: 70px;color: red;">调整分数</div>
<el-input-number v-model="form.kpiFillingBusinessWorksList[0].handleEventsScoring" :min="0" :max="10" label="调整分数" size="mini" style="width: 100%;" />
<!-- <el-input placeholder="请输入自评分" v-model="form.kpiFillingBusinessWorksList[0].handleEventsScoring" clearable
size="mini">
</el-input> -->
<div style="display: flex; align-items: center; margin-top: 10px;">
<div>
辅导员自评分{{ form.kpiFillingBusinessWorksList[0].stuLeaveMaterialsScoring || "没有填写" }}
</div>
<div v-if="isShow" style="display: flex; align-items: center;margin-left: 50px;">
<div style="min-width: 70px;color: red;">调整分数</div>
<el-input-number v-model="form.kpiFillingBusinessWorksList[0].stuLeaveMaterialsScoring" :min="0" :max="5" label="调整分数" size="mini" style="width: 100%;" />
</div>
</div>
<div style="margin-top: 20px;">
<p style="font-weight: bold;">考核要求</p>
<p>认真完成评优评先资助评定工作10</p>
<p style="font-weight: bold;">考核方式</p>
<p style="margin-left: 20px; color: #666;">学务办学工各项工作记录提交率准确率规范性差的每个项目扣12扣完为止</p>
</div>
<div style="display: flex; align-items: center; margin-top: 10px;">
<div>
辅导员自评分{{ form.kpiFillingBusinessWorksList[0].stuFillingMaterialsScoring || "没有填写" }}
</div>
<div v-if="isShow" style="display: flex; align-items: center;margin-left: 50px;">
<div style="min-width: 70px;color: red;">调整分数</div>
<el-input-number v-model="form.kpiFillingBusinessWorksList[0].stuFillingMaterialsScoring" :min="0" :max="10" label="调整分数" size="mini" style="width: 100%;" />
</div>
</div>
<div style="margin-top: 20px;">
<p style="font-weight: bold;">考核要求</p>
<p>按时准确填报学生各项基础数据5</p>
<p style="font-weight: bold;">考核方式</p>
<p style="margin-left: 20px; color: #666;">学务办学工各项工作记录未能按规定完成1次扣1分</p>
</div>
<div style="display: flex; align-items: center; margin-top: 10px;">
<div>
辅导员自评分{{ form.kpiFillingBusinessWorksList[0].stuBasicDataScoring || "没有填写" }}
</div>
<div v-if="isShow" style="display: flex; align-items: center;margin-left: 50px;">
<div style="min-width: 70px;color: red;">调整分数</div>
<el-input-number v-model="form.kpiFillingBusinessWorksList[0].stuBasicDataScoring" :min="0" :max="5" label="调整分数" size="mini" style="width: 100%;" />
</div>
</div>
<div style="margin-top: 20px;">
<p style="font-weight: bold;">考核要求</p>
<p>认真指导学生完成各项材料填报工作5</p>
<p style="font-weight: bold;">考核方式</p>
<p style="margin-left: 20px; color: #666;">学务办学工各项工作记录未能按规定完成1次扣1分</p>
</div>
<div style="display: flex; align-items: center; margin-top: 10px;">
<div>
辅导员自评分{{ form.kpiFillingBusinessWorksList[0].stuDisciplinaryViolationScoring || "没有填写" }}
</div>
<div v-if="isShow" style="display: flex; align-items: center;margin-left: 50px;">
<div style="min-width: 70px;color: red;">调整分数</div>
<el-input-number v-model="form.kpiFillingBusinessWorksList[0].stuDisciplinaryViolationScoring" :min="0" :max="5" label="调整分数" size="mini" style="width: 100%;" />
</div>
</div>
<div style="margin-top: 20px;">
<p style="font-weight: bold;">考核要求</p>
<p>按程序要求处理突发事件10</p>
<p style="font-weight: bold;">考核方式</p>
<p style="margin-left: 20px; color: #666;">学务办学工各项工作记录未能按规定完成不得分</p>
</div>
<div style="display: flex; align-items: center; margin-top: 10px;">
<div>
辅导员自评分{{ form.kpiFillingBusinessWorksList[0].handleEventsScoring || "没有填写" }}
</div>
<div v-if="isShow" style="display: flex; align-items: center;margin-left: 50px;">
<div style="min-width: 70px;color: red;">调整分数</div>
<el-input-number v-model="form.kpiFillingBusinessWorksList[0].handleEventsScoring" :min="0" :max="10" label="调整分数" size="mini" style="width: 100%;" />
</div>
</div>
<div style="margin-top: 20px;">
<p style="font-weight: bold;">考核要求</p>
<p>按时按质完成学工学院发布的各项学生工作通知任务5</p>
<p style="font-weight: bold;">考核方式</p>
<p style="margin-left: 20px; color: #666;">学务办学工各项工作记录未能按规定完成1次扣1分</p>
</div>
<div style="display: flex; align-items: center; margin-top: 10px;">
<div>
辅导员自评分{{ form.kpiFillingBusinessWorksList[0].otherTaskScoring || "没有填写" }}
</div>
<div v-if="isShow" style="display: flex; align-items: center;margin-left: 50px;">
<div style="min-width: 70px;color: red;">调整分数</div>
<el-input-number v-model="form.kpiFillingBusinessWorksList[0].otherTaskScoring" :min="0" :max="5" label="调整分数" size="mini" style="width: 100%;" />
</div>
</div>
</div>
<div v-if="form.kpiFillingBusinessWorksList[0].hasOwnProperty('id') && !(form.auditStatus === 1 && form.roleAudit === 4)" class="button">
<el-button v-show="isShow" type="primary" @click="save"> </el-button>
<el-button v-if="!roleGroup.includes('辅导员') && audit" type="warning" @click="switchIsShow"> </el-button>
@@ -99,6 +225,11 @@ export default {
isShow: false
}
},
computed: {
classType() {
return this.form.classType || 'ungraduate'
}
},
watch: {
'form.kpiFillingBusinessWorksList': {
immediate: true,
@@ -109,56 +240,47 @@ export default {
stuBasicDataScoring: 0,
stuDisciplinaryViolationScoring: 0,
stuFillingMaterialsScoring: 0,
stuLeaveMaterialsScoring: 0
stuLeaveMaterialsScoring: 0,
stuLeaveRequestScoring: 0,
otherTaskScoring: 0
}
}
}
}
},
// 生命周期 - 创建完成访问当前this实例
created() {
},
// 生命周期 - 挂载完成访问DOM元素
mounted() {
},
// 离开当前页面时执行代码
destroyed() {
},
methods: {
switchIsShow() {
this.isShow = !this.isShow
},
save() {
this.$modal.loading('正在努力加载中,请稍等。。。')
updateKpiFillingBusinessWork(this.form.kpiFillingBusinessWorksList[0]).then(response => {
// this.$modal.msgSuccess("修改成功");
getKpiFillingBusinessWork(this.form.kpiFillingBusinessWorksList[0].id).then(response => {
this.form.kpiFillingBusinessWorksList[0].handleEventsScoring = response.data.handleEventsScoring,
this.form.kpiFillingBusinessWorksList[0].stuBasicDataScoring = response.data.stuBasicDataScoring,
this.form.kpiFillingBusinessWorksList[0].stuDisciplinaryViolationScoring = response.data.stuDisciplinaryViolationScoring,
this.form.kpiFillingBusinessWorksList[0].stuFillingMaterialsScoring = response.data.stuFillingMaterialsScoring,
this.form.kpiFillingBusinessWorksList[0].stuLeaveMaterialsScoring = response.data.stuLeaveMaterialsScoring,
this.$modal.msgSuccess('修改成功')
this.switchIsShow()
this.$modal.closeLoading()
this.form.kpiFillingBusinessWorksList[0].stuLeaveRequestScoring = response.data.stuLeaveRequestScoring,
this.form.kpiFillingBusinessWorksList[0].otherTaskScoring = response.data.otherTaskScoring
})
this.$modal.msgSuccess('修改成功')
this.isShow = false
})
}
}
}
</script>
<style scoped>
/* @import url(); 引入css类 */
.button {
margin-top: 20px;
position: sticky;
bottom: 0;
background-color: white;
z-index: 100;
margin-top: 10px;
text-align: right;
padding: 10px;
}
p {
margin: 5px 0;
font-size: 14px;
}
</style>

View File

@@ -0,0 +1,130 @@
<template>
<div>
<div>
<p style="font-weight: bold;">考核要求</p>
<p>指导审核毕业生登记表等就业核心材料10</p>
<p style="font-weight: bold;">考核方式</p>
<p style="margin-left: 20px; color: #666;">依据招就处统计数据或云就业平台记录以招就处明确的材料清单为准</p>
<p style="margin-left: 20px; color: #666;">3月底前班级毕业生就业核心备案材料完成率25%扣2分4月底前班级毕业生就业核心备案材料完成率50%扣2分5月底前班级毕业生就业核心备案材料完成率75%扣3分6月底前班级就业核心备案材料完成率95%扣3分</p>
</div>
<div style="display: flex; align-items: center; margin-top: 10px;">
<div>
辅导员自评分{{ form.kpiFillingGraduationGuidanceList[0].gradFormAuditScoring || "没有填写" }}
</div>
<div v-if="isShow" style="display: flex; align-items: center;margin-left: 50px;">
<div style="min-width: 70px;color: red;">调整分数</div>
<el-input-number v-model="form.kpiFillingGraduationGuidanceList[0].gradFormAuditScoring" :min="0" :max="10" label="调整分数" size="mini" style="width: 100%;" />
</div>
</div>
<div style="margin-top: 20px;">
<p style="font-weight: bold;">考核要求</p>
<p>开展学生就业咨询服务及团体辅导工作助力学生解决就业困惑提升就业竞争力5</p>
<p style="font-weight: bold;">考核方式</p>
<p style="margin-left: 20px; color: #666;">依据招就处统计数据或云就业平台数据</p>
<p style="margin-left: 20px; color: #666;">1团体辅导每学期需组织开展至少1次就业主题团体辅导单次服务学生人次20未按要求完成的扣1分</p>
<p style="margin-left: 20px; color: #666;">2就业咨询每月需完成至少2次就业咨询服务累计服务学生不少于4人当月未达标未开展咨询或服务人次不足扣1分/</p>
</div>
<div style="display: flex; align-items: center; margin-top: 10px;">
<div>
辅导员自评分{{ form.kpiFillingGraduationGuidanceList[0].stuCareerConsultScoring || "没有填写" }}
</div>
<div v-if="isShow" style="display: flex; align-items: center;margin-left: 50px;">
<div style="min-width: 70px;color: red;">调整分数</div>
<el-input-number v-model="form.kpiFillingGraduationGuidanceList[0].stuCareerConsultScoring" :min="0" :max="5" label="调整分数" size="mini" style="width: 100%;" />
</div>
</div>
<div style="margin-top: 20px;">
<p style="font-weight: bold;">考核要求</p>
<p>审核毕业生源信息就业系统信息等数据及就业证明材料含真实性完整性规范性10</p>
<p style="font-weight: bold;">考核方式</p>
<p style="margin-left: 20px; color: #666;">招就处以云就业平台审核操作日志教育厅反馈的问题清单为依据进行评分</p>
<p style="margin-left: 20px; color: #666;">1第五学期10月底前完成毕业生生源信息审核完成率98%扣3分</p>
<p style="margin-left: 20px; color: #666;">2第五学期12月第六学期8月每月需100%完成毕业生提交的就业信息数据及相关证明材料核验工作出现1次未全额完成核验的情况扣0.5经招就处教育厅等层级核查如发现已审核通过的就业信息存在虚假材料缺失或填写不规范等问题单次核查每确认1例扣1分</p>
</div>
<div style="display: flex; align-items: center; margin-top: 10px;">
<div>
辅导员自评分{{ form.kpiFillingGraduationGuidanceList[0].gradFormGuidanceScoring || "没有填写" }}
</div>
<div v-if="isShow" style="display: flex; align-items: center;margin-left: 50px;">
<div style="min-width: 70px;color: red;">调整分数</div>
<el-input-number v-model="form.kpiFillingGraduationGuidanceList[0].gradFormGuidanceScoring" :min="0" :max="10" label="调整分数" size="mini" style="width: 100%;" />
</div>
</div>
<div v-if="form.kpiFillingGraduationGuidanceList[0].hasOwnProperty('id') && !(form.auditStatus === 1 && form.roleAudit === 4)" class="button">
<el-button v-show="isShow" type="primary" @click="save"> </el-button>
<el-button v-if="!roleGroup.includes('辅导员') && audit" type="warning" @click="switchIsShow"> </el-button>
</div>
</div>
</template>
<script>
import { getKpiFillingGraduationGuidance, updateKpiFillingGraduationGuidance } from '@/api/teacher/kpiFilling'
export default {
props: {
form: {
type: Object,
default: []
},
roleGroup: {
type: String,
default: ''
},
audit: {
type: Boolean,
default: true
}
},
data() {
return {
isShow: false
}
},
watch: {
'form.kpiFillingGraduationGuidanceList': {
immediate: true,
handler() {
if (this.form.kpiFillingGraduationGuidanceList.length === 0) {
this.form.kpiFillingGraduationGuidanceList[0] = {
gradFormAuditScoring: 0,
stuCareerConsultScoring: 0,
gradFormGuidanceScoring: 0
}
}
}
}
},
created() {
},
methods: {
switchIsShow() {
this.isShow = !this.isShow
},
save() {
updateKpiFillingGraduationGuidance(this.form.kpiFillingGraduationGuidanceList[0]).then(response => {
getKpiFillingGraduationGuidance(this.form.kpiFillingGraduationGuidanceList[0].id).then(response => {
this.form.kpiFillingGraduationGuidanceList[0].gradFormAuditScoring = response.data.gradFormAuditScoring
this.form.kpiFillingGraduationGuidanceList[0].stuCareerConsultScoring = response.data.stuCareerConsultScoring
this.form.kpiFillingGraduationGuidanceList[0].gradFormGuidanceScoring = response.data.gradFormGuidanceScoring
})
this.$modal.msgSuccess('修改成功')
this.isShow = false
})
}
}
}
</script>
<style scoped>
.button {
margin-top: 10px;
text-align: right;
}
p {
margin: 5px 0;
font-size: 14px;
}
</style>

View File

@@ -1,174 +1,297 @@
<!-- -->
<template>
<div>
<!-- 班会佐证材料表格数据 -->
<div>
<el-row :gutter="10" style="display: flex; align-items: center;">
<el-col :span="7">考评要求:每周按时开展班会10</el-col>
<el-col :span="8">考评方式:辅导员工作笔记照片记录少1次扣2分质量评价2分</el-col>
<el-col :span="3">辅导员自评分: {{ form.kpiFillingStuMgtList[0].classScoring }}</el-col>
<el-col v-show="isShow" :span="5">
<div style="display: flex; align-items: center;">
<div style="min-width: 70px;color: red;">调整分数</div>
<el-input-number v-model="form.kpiFillingStuMgtList[0].classScoring" :min="0" :max="10" label="调整分数" size="mini" style="width: 100%;" />
<!-- <el-input placeholder="请输入自评分" v-model="form.kpiFillingStuMgtList[0].classScoring" clearable size="mini">
</el-input> -->
</div>
</el-col>
</el-row>
<div v-if="isGraduate" class="graduate-content">
<!-- 毕业班内容 -->
<!-- 班会佐证材料表格数据 -->
<div>
<el-row :gutter="10" style="display: flex; align-items: center;">
<el-col :span="7">考评要求:每月通过线上线下方式定期召开班会开展教育10</el-col>
<el-col :span="8">考评方式:学工系统填报照片记录少1次扣2分质量评价2分</el-col>
<el-col :span="3">辅导员自评分: {{ form.kpiFillingStuMgtList[0].classScoring }}</el-col>
<el-col v-show="isShow" :span="5">
<div style="display: flex; align-items: center;">
<div style="min-width: 70px;color: red;">调整分数</div>
<el-input-number v-model="form.kpiFillingStuMgtList[0].classScoring" :min="0" :max="10" label="调整分数" size="mini" style="width: 100%;" />
</div>
</el-col>
</el-row>
<div style="margin-top: 20px;">
<el-table :data="form.kpiFillingStuMgtList[0].classMeetingMaterialsList" border>
<el-table-column label="序号" type="index" width="50" align="center" />
<el-table-column label="开展时间" align="center" prop="developmentTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.developmentTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="地点" align="center" prop="place" />
<el-table-column label="班级名称" align="center" prop="className" />
<el-table-column label="参与学生人数" align="center" prop="numberOfStudents" />
<el-table-column label="主要内容" align="center" prop="mainContent" />
<el-table-column label="相片" align="center" prop="photo" width="100">
<template slot-scope="scope">
<image-preview :src="scope.row.photo" :width="50" :height="50" />
</template>
</el-table-column>
</el-table>
</div>
</div>
<!-- 谈心谈话佐证材料表格数据 -->
<div style="margin-top: 20px;">
<el-table :data="form.kpiFillingStuMgtList[0].classMeetingMaterialsList" border>
<el-table-column label="序号" type="index" width="50" align="center" />
<el-table-column label="开展时间" align="center" prop="developmentTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.developmentTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="地点" align="center" prop="place" />
<el-table-column label="班级名称" align="center" prop="className" />
<el-table-column label="参与学生人数" align="center" prop="numberOfStudents" />
<el-table-column label="主要内容" align="center" prop="mainContent" />
<el-table-column label="相片" align="center" prop="photo" width="100">
<template slot-scope="scope">
<image-preview :src="scope.row.photo" :width="50" :height="50" />
</template>
</el-table-column>
</el-table>
<el-row :gutter="10" style="display: flex; align-items: center;">
<el-col :span="7">考评要求:月度谈心谈话总量10人次覆盖重点关注学生困难救助就业指导心理危机违纪待处理等10</el-col>
<el-col :span="8">考评方式:抽查谈心谈话记录学工系统填报情况等相关工作资料</el-col>
<el-col :span="3">辅导员自评分: {{ form.kpiFillingStuMgtList[0].stuTalkScoring }}</el-col>
<el-col v-show="isShow" :span="5">
<div style="display: flex; align-items: center;">
<div style="min-width: 70px;color: red;">调整分数</div>
<el-input-number v-model="form.kpiFillingStuMgtList[0].stuTalkScoring" :min="0" :max="10" label="调整分数" size="mini" style="width: 100%;" />
</div>
</el-col>
</el-row>
<div style="margin-top: 20px;">
<el-table :data="form.kpiFillingStuMgtList[0].stuTalkMaterialsList" border>
<el-table-column label="序号" type="index" width="50" align="center" />
<el-table-column label="开展时间" align="center" prop="developmentTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.developmentTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="地点" align="center" prop="place" />
<el-table-column label="班级名称" align="center" prop="className" />
<el-table-column label="学生名称" align="center" prop="stuName" />
<el-table-column label="主要内容" align="center" prop="mainContent" />
</el-table>
</div>
</div>
</div>
<!-- 每周深入学生宿舍佐证材料表格数据 -->
<div style="margin-top: 20px;">
<el-row :gutter="10" style="display: flex; align-items: center;">
<el-col :span="7">考评要求:每周深入学生宿舍至少2次10</el-col>
<el-col :span="8">考评方式:辅导员工作笔记照片记录少1次扣2分质量评价2分</el-col>
<el-col :span="3">辅导员自评分: {{ form.kpiFillingStuMgtList[0].visitDormitoryScoring }}</el-col>
<el-col v-show="isShow" :span="5">
<div style="display: flex; align-items: center;">
<div style="min-width: 70px;color: red;">调整分数</div>
<el-input-number v-model="form.kpiFillingStuMgtList[0].visitDormitoryScoring" :min="0" :max="10" label="调整分数" size="mini" style="width: 100%;" />
<!-- <el-input placeholder="请输入自评分" v-model="form.kpiFillingStuMgtList[0].visitDormitoryScoring" clearable size="mini">
</el-input> -->
</div>
</el-col>
</el-row>
<div style="margin-top: 20px;">
<el-table :data="form.kpiFillingStuMgtList[0].visitDormitoryMaterialsList" border>
<el-table-column label="序号" type="index" width="50" align="center" />
<el-table-column label="开展时间" align="center" prop="developmentTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.developmentTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="走访班级名称" align="center" prop="visitClassName" />
<el-table-column label="走访宿舍号" align="center" prop="visitDormitoryNum" />
<el-table-column label="覆盖学生人数" align="center" prop="numberOfStudents" />
<el-table-column label="学生交流内容/检查内容" align="center" prop="mainContent" />
<el-table-column label="相片" align="center" prop="photo" width="100">
<template slot-scope="scope">
<image-preview :src="scope.row.photo" :width="50" :height="50" />
</template>
</el-table-column>
</el-table>
<div v-else class="ungraduate-content">
<!-- 非毕业班内容 -->
<!-- 班会佐证材料表格数据 -->
<div>
<el-row :gutter="10" style="display: flex; align-items: center;">
<el-col :span="7">考评要求:每周日及节假日收假当天组织开展班会10</el-col>
<el-col :span="8">考评方式:学工系统填报开展情况每缺报1次扣2分工作质量评价项分值为2分将根据实际完成质量进行评分</el-col>
<el-col :span="3">辅导员自评分: {{ form.kpiFillingStuMgtList[0].classScoring }}</el-col>
<el-col v-show="isShow" :span="5">
<div style="display: flex; align-items: center;">
<div style="min-width: 70px;color: red;">调整分数</div>
<el-input-number v-model="form.kpiFillingStuMgtList[0].classScoring" :min="0" :max="10" label="调整分数" size="mini" style="width: 100%;" />
</div>
</el-col>
</el-row>
<div style="margin-top: 20px;">
<el-table :data="form.kpiFillingStuMgtList[0].classMeetingMaterialsList" border>
<el-table-column label="序号" type="index" width="50" align="center" />
<el-table-column label="开展时间" align="center" prop="developmentTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.developmentTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="地点" align="center" prop="place" />
<el-table-column label="班级名称" align="center" prop="className" />
<el-table-column label="参与学生人数" align="center" prop="numberOfStudents" />
<el-table-column label="主要内容" align="center" prop="mainContent" />
<el-table-column label="相片" align="center" prop="photo" width="100">
<template slot-scope="scope">
<image-preview :src="scope.row.photo" :width="50" :height="50" />
</template>
</el-table-column>
</el-table>
</div>
</div>
</div>
<!-- 每每月开展班团干部会议佐证材料表格数据 -->
<div style="margin-top: 20px;">
<el-row :gutter="10" style="display: flex; align-items: center;">
<el-col :span="7">考评要求:每月开展班团干部会议至少2次5</el-col>
<el-col :span="8">考评方式:辅导员工作笔记照片记录少1次扣2分</el-col>
<el-col :span="3">辅导员自评分: {{ form.kpiFillingStuMgtList[0].cadreScoring }}</el-col>
<el-col v-show="isShow" :span="5">
<div style="display: flex; align-items: center;">
<div style="min-width: 70px;color: red;">调整分数</div>
<el-input-number v-model="form.kpiFillingStuMgtList[0].cadreScoring" :min="0" :max="5" label="调整分数" size="mini" style="width: 100%;" />
<!-- <el-input placeholder="请输入自评分" v-model="form.kpiFillingStuMgtList[0].cadreScoring" clearable size="mini">
</el-input> -->
</div>
</el-col>
</el-row>
<!-- 每周深入学生宿舍佐证材料表格数据 -->
<div style="margin-top: 20px;">
<el-table :data="form.kpiFillingStuMgtList[0].cadreMeetingMaterialsList" border>
<el-table-column label="序号" type="index" width="50" align="center" />
<el-table-column label="开展时间" align="center" prop="developmentTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.developmentTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="地点" align="center" prop="place" />
<el-table-column label="班级名称" align="center" prop="className" />
<el-table-column label="参与学生人数" align="center" prop="numberOfStudents" />
<el-table-column label="主要内容" align="center" prop="mainContent" />
<el-table-column label="相片" align="center" prop="photo" width="100">
<template slot-scope="scope">
<image-preview :src="scope.row.photo" :width="50" :height="50" />
</template>
</el-table-column>
</el-table>
<el-row :gutter="10" style="display: flex; align-items: center;">
<el-col :span="7">考评要求:每周深入学生宿舍走访至少2次10</el-col>
<el-col :span="8">考评方式:学工系统填报宿舍管理员登记本信息核查工作落实不到位或学生宿舍安全卫生检查发现问题经通报后未及时开展教育督促整改复检仍不合格的每有1次扣0.5/</el-col>
<el-col :span="3">辅导员自评分: {{ form.kpiFillingStuMgtList[0].visitDormitoryScoring }}</el-col>
<el-col v-show="isShow" :span="5">
<div style="display: flex; align-items: center;">
<div style="min-width: 70px;color: red;">调整分数</div>
<el-input-number v-model="form.kpiFillingStuMgtList[0].visitDormitoryScoring" :min="0" :max="10" label="调整分数" size="mini" style="width: 100%;" />
</div>
</el-col>
</el-row>
<div style="margin-top: 20px;">
<el-table :data="form.kpiFillingStuMgtList[0].visitDormitoryMaterialsList" border>
<el-table-column label="序号" type="index" width="50" align="center" />
<el-table-column label="开展时间" align="center" prop="developmentTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.developmentTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="走访班级名称" align="center" prop="visitClassName" />
<el-table-column label="走访宿舍号" align="center" prop="visitDormitoryNum" />
<el-table-column label="覆盖学生人数" align="center" prop="numberOfStudents" />
<el-table-column label="学生交流内容/检查内容" align="center" prop="mainContent" />
<el-table-column label="相片" align="center" prop="photo" width="100">
<template slot-scope="scope">
<image-preview :src="scope.row.photo" :width="50" :height="50" />
</template>
</el-table-column>
</el-table>
</div>
</div>
</div>
<!-- 每月与带班学生谈心谈话议佐证材料表格数据 -->
<div style="margin-top: 20px;">
<el-row :gutter="10" style="display: flex; align-items: center;">
<el-col :span="7">考评要求:每月与带班学生谈心谈话覆盖率不低于8%10</el-col>
<el-col :span="8">考评方式辅导员工作笔记照片记录少1次扣1分</el-col>
<el-col :span="3">辅导员自评分: {{ form.kpiFillingStuMgtList[0].stuTalkScoring }}</el-col>
<el-col v-show="isShow" :span="5">
<div style="display: flex; align-items: center;">
<div style="min-width: 70px;color: red;">调整分数</div>
<el-input-number v-model="form.kpiFillingStuMgtList[0].stuTalkScoring" :min="0" :max="10" label="调整分数" size="mini" style="width: 100%;" />
<!-- <el-input placeholder="请输入自评分" v-model="form.kpiFillingStuMgtList[0].stuTalkScoring" clearable size="mini">
</el-input> -->
</div>
</el-col>
</el-row>
<!-- 谈心谈话佐证材料表格数据 -->
<div style="margin-top: 20px;">
<el-table :data="form.kpiFillingStuMgtList[0].stuTalkMaterialsList" border>
<el-table-column label="序号" type="index" width="50" align="center" />
<el-table-column label="开展时间" align="center" prop="developmentTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.developmentTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="地点" align="center" prop="place" />
<el-table-column label="班级名称" align="center" prop="className" />
<el-table-column label="学生名称" align="center" prop="stuName" />
<el-table-column label="主要内容" align="center" prop="mainContent" />
</el-table>
<el-row :gutter="10" style="display: flex; align-items: center;">
<el-col :span="7">考评要求:月度谈心谈话总量10人次覆盖重点关注学生困难救助学业预警心理危机违纪待处理等10</el-col>
<el-col :span="8">考评方式:抽查谈心谈话记录学工系统填报情况等相关工作资料</el-col>
<el-col :span="3">辅导员自评分: {{ form.kpiFillingStuMgtList[0].stuTalkScoring }}</el-col>
<el-col v-show="isShow" :span="5">
<div style="display: flex; align-items: center;">
<div style="min-width: 70px;color: red;">调整分数</div>
<el-input-number v-model="form.kpiFillingStuMgtList[0].stuTalkScoring" :min="0" :max="10" label="调整分数" size="mini" style="width: 100%;" />
</div>
</el-col>
</el-row>
<div style="margin-top: 20px;">
<el-table :data="form.kpiFillingStuMgtList[0].stuTalkMaterialsList" border>
<el-table-column label="序号" type="index" width="50" align="center" />
<el-table-column label="开展时间" align="center" prop="developmentTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.developmentTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="地点" align="center" prop="place" />
<el-table-column label="班级名称" align="center" prop="className" />
<el-table-column label="学生名称" align="center" prop="stuName" />
<el-table-column label="主要内容" align="center" prop="mainContent" />
</el-table>
</div>
</div>
</div>
<!-- 每月深入学生社区面向学生开展活动议佐证材料表格数据 -->
<div style="margin-top: 20px;">
<el-row :gutter="10" style="display: flex; align-items: center;">
<el-col :span="7">考评要求:每月深入学生社区面向学生开展活动1次5</el-col>
<el-col :span="8">考评方式:学生社区建设记录</el-col>
<el-col :span="3">辅导员自评分: {{ form.kpiFillingStuMgtList[0].stuActivityScoring }}</el-col>
<el-col v-show="isShow" :span="5">
<div style="display: flex; align-items: center;">
<div style="min-width: 70px;color: red;">调整分数</div>
<el-input-number v-model="form.kpiFillingStuMgtList[0].stuActivityScoring" :min="0" :max="5" label="调整分数" size="mini" style="width: 100%;" />
<!-- <el-input placeholder="请输入自评分" v-model="form.kpiFillingStuMgtList[0].stuActivityScoring" clearable size="mini">
</el-input> -->
</div>
</el-col>
</el-row>
<!-- 班团干部会议佐证材料表格数据 -->
<div style="margin-top: 20px;">
<el-table :data="form.kpiFillingStuMgtList[0].stuActivityMaterialsList" border>
<el-table-column label="序号" type="index" width="50" align="center" />
<el-table-column label="开展时间" align="center" prop="developmentTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.developmentTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="地点" align="center" prop="place" />
<el-table-column label="班级名称" align="center" prop="className" />
<el-table-column label="参与学生人数" align="center" prop="numberOfStudents" />
<el-table-column label="主要内容" align="center" prop="mainContent" />
<el-table-column label="相片" align="center" prop="photo" width="100">
<template slot-scope="scope">
<image-preview :src="scope.row.photo" :width="50" :height="50" />
</template>
</el-table-column>
</el-table>
<el-row :gutter="10" style="display: flex; align-items: center;">
<el-col :span="7">考评要求:每月开展班团干部培训专题工作会议频次均不少于1次5</el-col>
<el-col :span="8">考评方式:抽查工作记录学工系统填报情况等相关工作资料</el-col>
<el-col :span="3">辅导员自评分: {{ form.kpiFillingStuMgtList[0].cadreScoring }}</el-col>
<el-col v-show="isShow" :span="5">
<div style="display: flex; align-items: center;">
<div style="min-width: 70px;color: red;">调整分数</div>
<el-input-number v-model="form.kpiFillingStuMgtList[0].cadreScoring" :min="0" :max="5" label="调整分数" size="mini" style="width: 100%;" />
</div>
</el-col>
</el-row>
<div style="margin-top: 20px;">
<el-table :data="form.kpiFillingStuMgtList[0].cadreMeetingMaterialsList" border>
<el-table-column label="序号" type="index" width="50" align="center" />
<el-table-column label="开展时间" align="center" prop="developmentTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.developmentTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="地点" align="center" prop="place" />
<el-table-column label="班级名称" align="center" prop="className" />
<el-table-column label="参与学生人数" align="center" prop="numberOfStudents" />
<el-table-column label="主要内容" align="center" prop="mainContent" />
<el-table-column label="相片" align="center" prop="photo" width="100">
<template slot-scope="scope">
<image-preview :src="scope.row.photo" :width="50" :height="50" />
</template>
</el-table-column>
</el-table>
</div>
</div>
<!-- 学生活动佐证材料表格数据 -->
<div style="margin-top: 20px;">
<el-row :gutter="10" style="display: flex; align-items: center;">
<el-col :span="7">考评要求:每月组织或参与学生社区育人活动思政教育活动及文化艺术体育活动频次不少于2次5</el-col>
<el-col :span="8">考评方式:学务办相关记录学生社区建设工作记录每缺少1次扣2分</el-col>
<el-col :span="3">辅导员自评分: {{ form.kpiFillingStuMgtList[0].stuActivityScoring }}</el-col>
<el-col v-show="isShow" :span="5">
<div style="display: flex; align-items: center;">
<div style="min-width: 70px;color: red;">调整分数</div>
<el-input-number v-model="form.kpiFillingStuMgtList[0].stuActivityScoring" :min="0" :max="5" label="调整分数" size="mini" style="width: 100%;" />
</div>
</el-col>
</el-row>
<div style="margin-top: 20px;">
<el-table :data="form.kpiFillingStuMgtList[0].stuActivityMaterialsList" border>
<el-table-column label="序号" type="index" width="50" align="center" />
<el-table-column label="开展时间" align="center" prop="developmentTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.developmentTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="地点" align="center" prop="place" />
<el-table-column label="班级名称" align="center" prop="className" />
<el-table-column label="参与学生人数" align="center" prop="numberOfStudents" />
<el-table-column label="主要内容" align="center" prop="mainContent" />
<el-table-column label="相片" align="center" prop="photo" width="100">
<template slot-scope="scope">
<image-preview :src="scope.row.photo" :width="50" :height="50" />
</template>
</el-table-column>
</el-table>
</div>
</div>
<!-- 职业测评/就业育人佐证材料表格数据 -->
<div style="margin-top: 20px;">
<el-row :gutter="10" style="display: flex; align-items: center;">
<el-col :span="7">考评要求:根据学校就业育人工作部署第一学期需指导并组织所带班级学生参与职业测评整体完成率需90%第二学期每月需开展1次就业育人相关活动5</el-col>
<el-col :span="8">考评方式:1职业测评完成率考核第一学期10月底前班级职业测评完成率20%扣1分11月底前班级职业测评完成率50%扣1分12月底前班级职业测评完成率80%扣1分次年1月底前班级职业测评完成率90%扣2分2就业育人活动考核第二学期活动形式需围绕就业核心包括职业体验实践就业主题班会就业指导讲座等标准化就业育人场景3-7月期间每月需按要求组织1次相关活动未完成当月活动任务扣1分/</el-col>
<el-col :span="3">辅导员自评分: {{ form.kpiFillingStuMgtList[0].edgScoring || 0 }}</el-col>
<el-col v-show="isShow" :span="5">
<div style="display: flex; align-items: center;">
<div style="min-width: 70px;color: red;">调整分数</div>
<el-input-number v-model="form.kpiFillingStuMgtList[0].edgScoring" :min="0" :max="5" label="调整分数" size="mini" style="width: 100%;" />
</div>
</el-col>
</el-row>
<div style="margin-top: 20px;">
<el-table :data="form.kpiFillingStuMgtList[0].edgMaterialsList" border>
<el-table-column label="序号" type="index" width="50" align="center" />
<el-table-column label="开展时间" align="center" prop="developmentTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.developmentTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="地点" align="center" prop="place" />
<el-table-column label="班级名称" align="center" prop="className" />
<el-table-column label="参与学生人数" align="center" prop="numberOfStudents" />
<el-table-column label="主要内容" align="center" prop="mainContent" />
<el-table-column label="相片" align="center" prop="photo" width="100">
<template slot-scope="scope">
<image-preview :src="scope.row.photo" :width="50" :height="50" />
</template>
</el-table-column>
</el-table>
</div>
</div>
<!-- 通知任务佐证材料表格数据 -->
<div style="margin-top: 20px;">
<el-row :gutter="10" style="display: flex; align-items: center;">
<el-col :span="7">考评要求:按时按质完成学校及相关职能部门发布的与学生相关的各项工作通知任务5</el-col>
<el-col :span="8">考评方式:学务办职能部门各项工作记录未能按规定完成1次扣1分</el-col>
<el-col :span="3">辅导员自评分: {{ form.kpiFillingStuMgtList[0].noticeScoring || 0 }}</el-col>
<el-col v-show="isShow" :span="5">
<div style="display: flex; align-items: center;">
<div style="min-width: 70px;color: red;">调整分数</div>
<el-input-number v-model="form.kpiFillingStuMgtList[0].noticeScoring" :min="0" :max="5" label="调整分数" size="mini" style="width: 100%;" />
</div>
</el-col>
</el-row>
<div style="margin-top: 20px;">
<el-table :data="form.kpiFillingStuMgtList[0].noticeMaterialsList" border>
<el-table-column label="序号" type="index" width="50" align="center" />
<el-table-column label="开展时间" align="center" prop="developmentTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.developmentTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="地点" align="center" prop="place" />
<el-table-column label="班级名称" align="center" prop="className" />
<el-table-column label="参与学生人数" align="center" prop="numberOfStudents" />
<el-table-column label="主要内容" align="center" prop="mainContent" />
<el-table-column label="相片" align="center" prop="photo" width="100">
<template slot-scope="scope">
<image-preview :src="scope.row.photo" :width="50" :height="50" />
</template>
</el-table-column>
</el-table>
</div>
</div>
</div>
<div v-if="form.kpiFillingStuMgtList[0].hasOwnProperty('id') && !(form.auditStatus === 1 && form.roleAudit === 4)" class="button">
@@ -200,6 +323,17 @@ export default {
isShow: false
}
},
computed: {
isGraduate() {
if (this.form.classType === 'graduate') {
return true
}
if (this.form.kpiFillingStuMgtList && this.form.kpiFillingStuMgtList.length > 0) {
return this.form.kpiFillingStuMgtList[0].classType === 'graduate'
}
return false
}
},
watch: {
'form.kpiFillingStuMgtList': {
immediate: true,
@@ -216,7 +350,11 @@ export default {
stuTalkMaterialsList: [],
stuTalkScoring: 0,
visitDormitoryMaterialsList: [],
visitDormitoryScoring: 0
visitDormitoryScoring: 0,
edgMaterialsList: [],
edgScoring: 0,
noticeMaterialsList: [],
noticeScoring: 0
}
}
}

View File

@@ -172,8 +172,11 @@
</div>
<el-tabs type="border-card" style="margin-top: 20px;">
<el-tab-pane v-for="item in componentList" :key="item.name" :label="item.name">
<div class="componentList">
<component :is="item.value" :form="form" :role-group="roleGroup" style="padding: 10px;" />
<div v-if="item.value === 'graduationGuidance' && form.classType === 'graduate'" class="componentList">
<component :is="item.value" :form="form" :roleGroup="roleGroup" :audit="false" style="padding: 10px" />
</div>
<div v-else-if="item.value !== 'graduationGuidance'" class="componentList">
<component :is="item.value" :form="form" :roleGroup="roleGroup" :audit="false" style="padding: 10px" />
</div>
</el-tab-pane>
</el-tabs>
@@ -206,6 +209,10 @@ import attendanceManagement from '../kpiFilling/components/attendanceManagement.
import negativeList from '../kpiFilling/components/negativeList.vue'
// 超工作量奖励绩效
import rewardsKpi from '../kpiFilling/components/rewardsKpi.vue'
// 加分项
import bonusPoints from '../kpiFilling/components/bonusPoints.vue'
// 就业指导工作
import graduationGuidance from '../kpiFilling/components/graduationGuidance.vue'
// 处理学生突发事件
import stuEmergency from '../kpiFilling/components/stuEmergency.vue'
// s审核进度
@@ -215,14 +222,16 @@ import { getDeptName } from '@/api/system/dept'
export default {
name: 'KpiFilling',
dicts: ['sys_commit_status', 'sys_teacher_kpi_filling_month', 'sys_teacher_kpi_filling_year', 'sys_kpi', 'rt_college', 'rt_filling_college'],
components: { studentManagement, businessWord, attendanceManagement, negativeList, rewardsKpi, stuEmergency, auditSteps },
components: { studentManagement, businessWord, attendanceManagement, negativeList, rewardsKpi, bonusPoints, graduationGuidance, stuEmergency, auditSteps },
data() {
return {
componentList: [
{ name: '学生管理', value: 'studentManagement' },
{ name: '业务工作', value: 'businessWord' },
{ name: '考勤管理', value: 'attendanceManagement' },
{ name: '加分项', value: 'bonusPoints' },
{ name: '负面清单', value: 'negativeList' },
{ name: '就业指导工作', value: 'graduationGuidance' },
{ name: '超工作量奖励绩效', value: 'rewardsKpi' },
{ name: '处理学生突发事件', value: 'stuEmergency' },
],
@@ -341,11 +350,14 @@ export default {
departmentName: null,
selfScoring: null,
finalRating: null,
classType: null,
kpiFillingStuMgtList: [],
kpiFillingBusinessWorksList: [],
kpiFillingAMgtList: [],
kpiFillingNegativeLists: [],
kpiFillingRewardsKpiList: [],
kpiFillingBonusPointsList: [],
kpiFillingGraduationGuidanceList: [],
kpiFillingStuEmergencyList: []
}
this.resetForm('form')

View File

@@ -57,6 +57,13 @@
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="值班工作分数" align="center" prop="dutyWorkScoring" />
<el-table-column label="会议分数" align="center" prop="conferenceScoring" />
<el-table-column label="班级类型" align="center" prop="classType">
<template slot-scope="scope">
<el-tag v-if="scope.row.classType === 'graduate'" type="primary">毕业班</el-tag>
<el-tag v-else-if="scope.row.classType === 'ungraduate'" type="success">非毕业班</el-tag>
<span v-else>{{ scope.row.classType }}</span>
</template>
</el-table-column>
<el-table-column label="填报人名称" align="center" prop="fdyName" />
<el-table-column label="填报年份" align="center" prop="fillingYear">
<template slot-scope="scope">
@@ -70,9 +77,9 @@
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button v-hasPermi="['teacher:kpiFillingAMgt:edit']" size="mini" type="text" icon="el-icon-edit"
<!-- <el-button v-hasPermi="['teacher:kpiFillingAMgt:edit']" size="mini" type="text" icon="el-icon-edit"
@click="handleUpdate(scope.row)"
>修改</el-button>
>修改</el-button> -->
<el-button v-hasPermi="['teacher:kpiFillingAMgt:remove']" size="mini" type="text" icon="el-icon-delete"
@click="handleDelete(scope.row)"
>删除</el-button>

View File

@@ -140,8 +140,11 @@
<!-- 选项卡 -->
<el-tabs type="border-card" style="margin-top: 20px;">
<el-tab-pane v-for="item in componentList" :key="item.name" :label="item.name">
<div class="componentList">
<component :is="item.value" :form="form" :audit="false" style="padding: 10px" />
<div v-if="item.value === 'graduationGuidance' && form.classType === 'graduate'" class="componentList">
<component :is="item.value" :form="form" :roleGroup="roleGroup" :audit="false" style="padding: 10px" />
</div>
<div v-else-if="item.value !== 'graduationGuidance'" class="componentList">
<component :is="item.value" :form="form" :roleGroup="roleGroup" :audit="false" style="padding: 10px" />
</div>
</el-tab-pane>
</el-tabs>
@@ -152,6 +155,7 @@
<script>
import { listKpiFillingAuditRecord, getKpiFillingAuditRecord, delKpiFillingAuditRecord, addKpiFillingAuditRecord, updateKpiFillingAuditRecord } from '@/api/teacher/kpiFillingAuditRecord'
import { getByFdyNameAndYearAndMonth } from '@/api/teacher/kpiFilling'
import { getUserProfile } from '@/api/system/user'
// 学生管理
import studentManagement from '../components/studentManagement/studentManagement.vue'
// 业务工作
@@ -162,6 +166,10 @@ import attendanceManagement from '../components/attendanceManagement.vue'
import negativeList from '../components/negativeList.vue'
// 超工作量奖励绩效
import rewardsKpi from '../components/rewardsKpi.vue'
// 加分项
import bonusPoints from '../components/bonusPoints.vue'
// 就业指导工作
import graduationGuidance from '../components/graduationGuidance.vue'
// 处理学生突发事件
import stuEmergency from '../components/stuEmergency.vue'
// 进度条
@@ -176,6 +184,8 @@ export default {
attendanceManagement,
negativeList,
rewardsKpi,
bonusPoints,
graduationGuidance,
stuEmergency,
auditSteps,
},
@@ -186,7 +196,9 @@ export default {
{ name: '学生管理', value: 'studentManagement' },
{ name: '业务工作', value: 'businessWord' },
{ name: '考勤管理', value: 'attendanceManagement' },
{ name: '加分项', value: 'bonusPoints' },
{ name: '负面清单', value: 'negativeList' },
{ name: '就业指导工作', value: 'graduationGuidance' },
{ name: '超工作量奖励绩效', value: 'rewardsKpi' },
{ name: '处理学生突发事件', value: 'stuEmergency' },
],
@@ -247,13 +259,20 @@ export default {
},
openfdy: false,
deptNameList: [],
roleGroup: '',
}
},
created() {
this.getList()
this.getDeptNameList()
this.getUser()
},
methods: {
getUser() {
getUserProfile().then(response => {
this.roleGroup = response.roleGroup
})
},
getDeptNameList() {
getDeptName().then(res => {
this.deptNameList = res.data

View File

@@ -47,11 +47,20 @@
<el-table v-loading="loading" :data="kpiFillingBusinessWorkList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="学生请假材料分数" align="center" prop="stuLeaveMaterialsScoring" />
<el-table-column label="学生材料填报分数" align="center" prop="stuFillingMaterialsScoring" />
<el-table-column label="学生数据上报分数" align="center" prop="stuBasicDataScoring" />
<el-table-column label="学生违纪处分分数" align="center" prop="stuDisciplinaryViolationScoring" />
<el-table-column label="处理突发事件分数" align="center" prop="handleEventsScoring" />
<el-table-column label="请销假制度分数" align="center" prop="stuLeaveRequestScoring" />
<el-table-column label="学籍异动材料分数" align="center" prop="stuLeaveMaterialsScoring" />
<el-table-column label="评优评先资助分数" align="center" prop="stuFillingMaterialsScoring" />
<el-table-column label="基础数据填报分数" align="center" prop="stuBasicDataScoring" />
<el-table-column label="指导材料填报分数" align="center" prop="stuDisciplinaryViolationScoring" />
<el-table-column label="处理突发事件处理分数" align="center" prop="handleEventsScoring" />
<el-table-column label="工作完成情况评分" align="center" prop="otherTaskScoring" />
<el-table-column label="班级类型" align="center" prop="classType">
<template slot-scope="scope">
<el-tag v-if="scope.row.classType === 'graduate'" type="primary">毕业班</el-tag>
<el-tag v-else-if="scope.row.classType === 'ungraduate'" type="success">非毕业班</el-tag>
<span v-else>{{ scope.row.classType }}</span>
</template>
</el-table-column>
<el-table-column label="填报人名称" align="center" prop="fdyName" />
<el-table-column label="填报年份" align="center" prop="fillingYear">
<template slot-scope="scope">
@@ -65,9 +74,9 @@
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button v-hasPermi="['teacher:kpiFillingBusinessWork:edit']" size="mini" type="text" icon="el-icon-edit"
<!-- <el-button v-hasPermi="['teacher:kpiFillingBusinessWork:edit']" size="mini" type="text" icon="el-icon-edit"
@click="handleUpdate(scope.row)"
>修改</el-button>
>修改</el-button> -->
<el-button v-hasPermi="['teacher:kpiFillingBusinessWork:remove']" size="mini" type="text" icon="el-icon-delete"
@click="handleDelete(scope.row)"
>删除</el-button>
@@ -155,11 +164,13 @@ export default {
queryParams: {
pageNum: 1,
pageSize: 10,
stuLeaveRequestScoring: null,
stuLeaveMaterialsScoring: null,
stuFillingMaterialsScoring: null,
stuBasicDataScoring: null,
stuDisciplinaryViolationScoring: null,
handleEventsScoring: null,
otherTaskScoring: null,
fdyName: null,
fillingYear: null,
fillingMonth: null
@@ -202,11 +213,13 @@ export default {
reset() {
this.form = {
id: null,
stuLeaveRequestScoring: null,
stuLeaveMaterialsScoring: null,
stuFillingMaterialsScoring: null,
stuBasicDataScoring: null,
stuDisciplinaryViolationScoring: null,
handleEventsScoring: null,
otherTaskScoring: null,
fdyName: null,
fillingYear: null,
fillingMonth: null

View File

@@ -0,0 +1,309 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<!-- <el-form-item label="辅导员" prop="fdyName">
<el-input
v-model="queryParams.fdyName"
placeholder="请输入辅导员名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item> -->
<el-form-item label="年份" prop="fillingYear">
<el-select v-model="queryParams.fillingYear" placeholder="请选择年份" clearable @change="handleQuery">
<el-option v-for="dict in dict.type.sys_teacher_kpi_filling_year" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="月份" prop="fillingMonth">
<el-select v-model="queryParams.fillingMonth" placeholder="请选择月份" clearable @change="handleQuery">
<el-option v-for="dict in dict.type.sys_teacher_kpi_filling_month" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="班级类型" prop="classType">
<el-select v-model="queryParams.classType" placeholder="请选择班级类型" clearable>
<el-option label="毕业班" value="graduate" />
<el-option label="非毕业班" value="ungraduate" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- 注释代码 -->
<el-row :gutter="10" class="mb8">
<!-- <el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['teacher:kpiFillingGuidance:add']"
>新增</el-button>
</el-col> -->
<!-- <el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['teacher:kpiFillingGuidance:edit']"
>修改</el-button>
</el-col> -->
<!-- <el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['teacher:kpiFillingGuidance:remove']"
>删除</el-button>
</el-col> -->
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['teacher:kpiFillingGuidance:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="kpiFillingGuidanceList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="毕业生就业去向登记审核分数" align="center" prop="gradFormAuditScoring" />
<el-table-column label="学生职业咨询与辅导分数" align="center" prop="stuCareerConsultScoring" />
<el-table-column label="毕业生就业指导与推荐分数" align="center" prop="gradFormGuidanceScoring" />
<el-table-column label="填报人名称" align="center" prop="fdyName" />
<el-table-column label="填报年份" align="center" prop="fillingYear">
<template slot-scope="scope">
<el-tag
type="success"
style="background-color: #f0f9eb; border-color: #e1f3d8; color: #2ecc71;"
v-if="scope.row.fillingYear"
>{{ scope.row.fillingYear + '年' }}</el-tag>
</template>
</el-table-column>
<el-table-column label="填报月份" align="center" prop="fillingMonth">
<template slot-scope="scope">
<el-tag
type="primary"
style="background-color: #ecf5ff; border-color: #d9ecff; color: #409eff;"
v-if="scope.row.fillingMonth"
>{{ scope.row.fillingMonth + '月' }}</el-tag>
</template>
</el-table-column>
<!-- <el-table-column label="班级类型" align="center" prop="classType" /> -->
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<!-- <el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['teacher:kpiFillingGuidance:edit']"
>修改</el-button> -->
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['teacher:kpiFillingGuidance:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改业绩考核-个人填报-就业指导工作对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="毕业生就业去向登记审核分数" prop="gradFormAuditScoring">
<el-input v-model="form.gradFormAuditScoring" placeholder="请输入毕业生就业去向登记审核分数" />
</el-form-item>
<el-form-item label="学生职业咨询与辅导分数" prop="stuCareerConsultScoring">
<el-input v-model="form.stuCareerConsultScoring" placeholder="请输入学生职业咨询与辅导分数" />
</el-form-item>
<el-form-item label="毕业生就业指导与推荐分数" prop="gradFormGuidanceScoring">
<el-input v-model="form.gradFormGuidanceScoring" placeholder="请输入毕业生就业指导与推荐分数" />
</el-form-item>
<el-form-item label="填报人名称" prop="fdyName">
<el-input v-model="form.fdyName" placeholder="请输入填报人名称" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listKpiFillingGuidance, getKpiFillingGuidance, delKpiFillingGuidance, addKpiFillingGuidance, updateKpiFillingGuidance, getByFdyNameAndYearAndMonth } from "@/api/teacher/kpiFillingGuidance";
export default {
name: "KpiFillingGuidance",
dicts: ['sys_teacher_kpi_filling_year', 'sys_teacher_kpi_filling_month'],
data() {
return {
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 业绩考核-个人填报-就业指导工作表格数据
kpiFillingGuidanceList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
fdyName: null,
fillingYear: null,
fillingMonth: null,
classType: null
},
// 表单参数
form: {},
// 表单校验
rules: {
}
};
},
created() {
this.getList();
},
methods: {
/** 查询业绩考核-个人填报-就业指导工作列表 */
getList() {
this.loading = true;
if (this.queryParams.fdyName && this.queryParams.fillingYear && this.queryParams.fillingMonth) {
getByFdyNameAndYearAndMonth(this.queryParams).then(response => {
this.kpiFillingGuidanceList = response.rows;
this.total = response.total;
this.loading = false;
});
} else {
listKpiFillingGuidance(this.queryParams).then(response => {
this.kpiFillingGuidanceList = response.rows;
this.total = response.total;
this.loading = false;
});
}
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
id: null,
gradFormAuditScoring: null,
stuCareerConsultScoring: null,
gradFormGuidanceScoring: null,
fdyName: null,
fillingYear: null,
fillingMonth: null,
classType: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加业绩考核-个人填报-就业指导工作";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
getKpiFillingGuidance(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改业绩考核-个人填报-就业指导工作";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
updateKpiFillingGuidance(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addKpiFillingGuidance(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除业绩考核-个人填报-就业指导工作编号为"' + ids + '"的数据项?').then(function() {
return delKpiFillingGuidance(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
this.download('teacher/kpiFillingGraduationGuidance/export', {
...this.queryParams
}, `kpiFillingGuidance_${new Date().getTime()}.xlsx`)
}
}
};
</script>

View File

@@ -82,6 +82,13 @@
<dict-tag :options="dict.type.sys_negative" :value="scope.row.practiceFraud" />
</template>
</el-table-column>
<el-table-column label="班级类型" align="center" prop="classType">
<template slot-scope="scope">
<el-tag v-if="scope.row.classType === 'graduate'" type="primary">毕业班</el-tag>
<el-tag v-else-if="scope.row.classType === 'ungraduate'" type="success">非毕业班</el-tag>
<span v-else>{{ scope.row.classType }}</span>
</template>
</el-table-column>
<el-table-column label="填报人名称" align="center" prop="fdyName" />
<el-table-column label="填报年份" align="center" prop="fillingYear">
<template slot-scope="scope">
@@ -95,9 +102,9 @@
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button v-hasPermi="['teacher:kpiFillingNegativeList:edit']" size="mini" type="text" icon="el-icon-edit"
<!-- <el-button v-hasPermi="['teacher:kpiFillingNegativeList:edit']" size="mini" type="text" icon="el-icon-edit"
@click="handleUpdate(scope.row)"
>修改</el-button>
>修改</el-button> -->
<el-button v-hasPermi="['teacher:kpiFillingNegativeList:remove']" size="mini" type="text" icon="el-icon-delete"
@click="handleDelete(scope.row)"
>删除</el-button>

View File

@@ -0,0 +1,347 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="填报年份" prop="fillingYear">
<el-select v-model="queryParams.fillingYear" placeholder="请选择填报年份" clearable @change="handleQuery">
<el-option v-for="dict in dict.type.sys_teacher_kpi_filling_year" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="填报月份" prop="fillingMonth">
<el-select v-model="queryParams.fillingMonth" placeholder="请选择填报月份" clearable @change="handleQuery">
<el-option v-for="dict in dict.type.sys_teacher_kpi_filling_month" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- //注释代码 -->
<el-row :gutter="10" class="mb8">
<!-- <el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['teacher:kpiFillingPoints:add']"
>新增</el-button>
</el-col> -->
<!-- <el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['teacher:kpiFillingPoints:edit']"
>修改</el-button>
</el-col> -->
<!-- <el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['teacher:kpiFillingPoints:remove']"
>删除</el-button>
</el-col> -->
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['teacher:kpiFillingPoints:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="kpiFillingPointsList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="分数" align="center" prop="bonusScoring" />
<el-table-column label="填报人名称" align="center" prop="fdyName" />
<el-table-column label="填报年份" align="center" prop="fillingYear">
<template slot-scope="scope">
<el-tag
type="success"
style="background-color: #f0f9eb; border-color: #e1f3d8; color: #2ecc71;"
v-if="scope.row.fillingYear"
>{{ scope.row.fillingYear + '年' }}</el-tag>
</template>
</el-table-column>
<el-table-column label="填报月份" align="center" prop="fillingMonth">
<template slot-scope="scope">
<el-tag
type="primary"
style="background-color: #ecf5ff; border-color: #d9ecff; color: #409eff;"
v-if="scope.row.fillingMonth"
>{{ scope.row.fillingMonth + '月' }}</el-tag>
</template>
</el-table-column>
<el-table-column label="班级类型" align="center">
<template slot-scope="scope">
<el-tag
v-if="scope.row.classType === 'ungraduate'"
type="success"
size="small">
非毕业班
</el-tag>
<el-tag
v-else-if="scope.row.classType === 'graduate'"
type="primary"
size="small">
毕业班
</el-tag>
<el-tag
v-else
type="warning"
size="small">
{{ scope.row.classType }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="加分类型" align="center" prop="bonusType">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-view"
@click="showDetails(scope.row.bonusType)"
>详情</el-button>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<!-- <el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['teacher:kpiFillingPoints:edit']"
>修改</el-button> -->
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['teacher:kpiFillingPoints:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改业绩考核-个人填报-加分项对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="填报人名称" prop="fdyName">
<el-input v-model="form.fdyName" placeholder="请输入填报人名称" />
</el-form-item>
<el-form-item label="填报年份" prop="fillingYear">
<el-input v-model="form.fillingYear" placeholder="请输入填报年份" />
</el-form-item>
<el-form-item label="填报月份" prop="fillingMonth">
<el-input v-model="form.fillingMonth" placeholder="请输入填报月份" />
</el-form-item>
<el-form-item label="分数" prop="bonusScoring">
<el-input v-model="form.bonusScoring" placeholder="请输入分数" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<!-- 加分项详情对话框 -->
<el-dialog
title="加分项详情"
:visible.sync="detailsOpen"
width="600px"
append-to-body
>
<div style="font-size: 16px; line-height: 1.8; padding: 20px;">
{{ detailsContent }}
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="detailsOpen = false"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listKpiFillingPoints, getKpiFillingPoints, delKpiFillingPoints, addKpiFillingPoints, updateKpiFillingPoints } from "@/api/teacher/kpiFillingPoints";
export default {
name: "KpiFillingPoints",
dicts: ['sys_teacher_kpi_filling_year', 'sys_teacher_kpi_filling_month'],
data() {
return {
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 业绩考核-个人填报-加分项表格数据
kpiFillingPointsList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 详情弹窗是否显示
detailsOpen: false,
// 详情内容
detailsContent: "",
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
fillingYear: null,
fillingMonth: null,
classType: null,
},
// 表单参数
form: {},
// 表单校验
rules: {
}
};
},
created() {
this.getList();
},
methods: {
/** 查询业绩考核-个人填报-加分项列表 */
getList() {
this.loading = true;
listKpiFillingPoints(this.queryParams).then(response => {
this.kpiFillingPointsList = response.rows;
this.total = response.total;
this.loading = false;
});
},
// 显示加分项详情
showDetails(type) {
if (type === 'option1') {
this.detailsContent = "1.获得上级部门或学校表扬,妥善处置学生事件并形成典型案例,积极建言献策且建议被采纳,发挥模范带头作用。(+10分";
} else if (type === 'option2') {
this.detailsContent = "2.在学校、学院阶段性重要任务推进过程中,主动担当作为,切实发挥作用。(+10分";
} else if (type === 'option3') {
this.detailsContent = "3.协助学校开展辅导员培训、会议和学生活动,在活动中担任工作人员。(+10分";
} else {
this.detailsContent = "暂无详情";
}
this.detailsOpen = true;
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
id: null,
bonusType: null,
fdyName: null,
fillingYear: null,
fillingMonth: null,
classType: null,
bonusScoring: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加业绩考核-个人填报-加分项";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
getKpiFillingPoints(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改业绩考核-个人填报-加分项";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
updateKpiFillingPoints(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addKpiFillingPoints(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除业绩考核-个人填报-加分项编号为"' + ids + '"的数据项?').then(function() {
return delKpiFillingPoints(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
this.download('teacher/kpiFillingBonusPoints/export', {
...this.queryParams
}, `kpiFillingPoints_${new Date().getTime()}.xlsx`)
}
}
};
</script>

View File

@@ -75,9 +75,9 @@
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button v-hasPermi="['teacher:kpiFillingRewardsKpi:edit']" size="mini" type="text" icon="el-icon-edit"
<!-- <el-button v-hasPermi="['teacher:kpiFillingRewardsKpi:edit']" size="mini" type="text" icon="el-icon-edit"
@click="handleUpdate(scope.row)"
>修改</el-button>
>修改</el-button> -->
<el-button v-hasPermi="['teacher:kpiFillingRewardsKpi:remove']" size="mini" type="text" icon="el-icon-delete"
@click="handleDelete(scope.row)"
>删除</el-button>

View File

@@ -93,9 +93,9 @@
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button v-hasPermi="['teacher:kpiFillingStuEmergency:edit']" size="mini" type="text" icon="el-icon-edit"
<!-- <el-button v-hasPermi="['teacher:kpiFillingStuEmergency:edit']" size="mini" type="text" icon="el-icon-edit"
@click="handleUpdate(scope.row)"
>修改</el-button>
>修改</el-button> -->
<el-button v-hasPermi="['teacher:kpiFillingStuEmergency:remove']" size="mini" type="text" icon="el-icon-delete"
@click="handleDelete(scope.row)"
>删除</el-button>

View File

@@ -30,7 +30,7 @@
</el-form>
<el-row :gutter="10" class="mb8">
<!-- <el-col :span="1.5">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['teacher:teacherKpiFillingMgt:add']">新增</el-button>
</el-col>
@@ -41,7 +41,7 @@
<el-col :span="1.5">
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
v-hasPermi="['teacher:teacherKpiFillingMgt:remove']">删除</el-button>
</el-col> -->
</el-col>
<el-col :span="1.5">
<el-button v-hasPermi="['teacher:teacherKpiFillingMgt:export']" type="warning" plain icon="el-icon-download" size="mini"
@click="handleExport"
@@ -54,9 +54,18 @@
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="班会材料分数" align="center" prop="classScoring" />
<el-table-column label="班团干部会议材料分数" align="center" prop="cadreScoring" />
<el-table-column label="学生开展活动材料分数" align="center" prop="stuActivityScoring" />
<el-table-column label="学生开展活动材料分数" align="center" prop="stuActivityScoring" />
<el-table-column label="学生谈话分数" align="center" prop="stuTalkScoring" />
<el-table-column label="每周深入学生宿舍材料分数" align="center" prop="visitDormitoryScoring" />
<el-table-column label="职业测评分数" align="center" prop="edgScoring" />
<el-table-column label="工作完成情况评分" align="center" prop="noticeScoring" />
<el-table-column label="班级类型" align="center" prop="classType">
<template slot-scope="scope">
<el-tag v-if="scope.row.classType === 'graduate'" type="primary">毕业班</el-tag>
<el-tag v-else-if="scope.row.classType === 'ungraduate'" type="success">非毕业班</el-tag>
<span v-else>{{ scope.row.classType }}</span>
</template>
</el-table-column>
<el-table-column label="填报人名称" align="center" prop="fdyName" />
<el-table-column label="学院" align="center" prop="departmentName">
<template slot-scope="scope">
@@ -75,9 +84,9 @@
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button v-hasPermi="['teacher:teacherKpiFillingMgt:edit']" size="mini" type="text" icon="el-icon-edit"
<!-- <el-button v-hasPermi="['teacher:teacherKpiFillingMgt:edit']" size="mini" type="text" icon="el-icon-edit"
@click="handleUpdate(scope.row)"
>修改</el-button>
>修改</el-button> -->
<!-- <el-button size="mini" type="text" icon="el-icon-edit" @click="examineFdy(scope.row)"
v-hasPermi="['teacher:teacherKpiFillingMgt:edit']">查看辅导员自评</el-button> -->
<el-button v-hasPermi="['teacher:teacherKpiFillingMgt:remove']" size="mini" type="text" icon="el-icon-delete"

View File

@@ -60,6 +60,17 @@ module.exports = {
'@': resolve('src')
}
},
module: {
rules: [
{
test: /\.js$/,
include: [/node_modules[\\/](domify|min-dom)[\\/]/],
use: {
loader: 'babel-loader'
}
}
]
},
plugins: [
// http://doc.baidu.vip/baidu-vue/other/faq.html#使用gzip解压缩静态文件
new CompressionPlugin({