入伍保留学籍、外宿申请-审批人修改成电子签名

This commit is contained in:
2025-12-19 15:30:44 +08:00
parent 8f084c2990
commit 95e7379cfa
7 changed files with 180 additions and 136 deletions

View File

@@ -182,13 +182,13 @@
</div> </div>
<div <div
style="display: flex;justify-content: center;align-items: center;min-width: 130px;text-align: left;"> style="display: flex;justify-content: center;align-items: center;min-width: 130px;text-align: left;">
<div>审批人 </div> <div>签名 </div>
<div> <div>
<!-- <el-image style="width: 100px; height: 50px; margin-left: 10px; border: 1px solid #eee" <el-image style="width: 100px; height: 50px; margin-left: 10px; border: 1px solid #eee"
:src="baseUrl + renderData.studentPromiseSign" :src="baseUrl + item.signature"
:preview-src-list="[baseUrl + renderData.studentPromiseSign]"> :preview-src-list="[baseUrl + item.signature]" :alt="item.approverName">
</el-image> --> </el-image>
{{ item.approverName }} <!-- {{ item.approverName }} -->
</div> </div>
</div> </div>
<div style="margin-left: 10px;">日期 {{ item.approvalTime }}</div> <div style="margin-left: 10px;">日期 {{ item.approvalTime }}</div>

View File

@@ -152,7 +152,7 @@
v-hasPermi="['dormitory:outsideAccommodationApply:edit']" v-hasPermi="['dormitory:outsideAccommodationApply:edit']"
v-if="scope.row.status == 0 || getRejectInfo(scope.row.outsideAccommodationApprovals).isReject">修改</el-button> v-if="scope.row.status == 0 || getRejectInfo(scope.row.outsideAccommodationApprovals).isReject">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['dormitory:outsideAccommodationApply:remove']" v-if="scope.row.status == 0 && scope.row.processInstanceId == null">删除</el-button> v-hasPermi="['dormitory:outsideAccommodationApply:remove']" v-if="scope.row.status == 0 || roleGroup.includes('管理员')">删除</el-button>
<el-button v-if="scope.row.applyStatus != 0" size="mini" type="text" icon="el-icon-info" <el-button v-if="scope.row.applyStatus != 0" size="mini" type="text" icon="el-icon-info"
@click="detail(scope.row)">详情</el-button> @click="detail(scope.row)">详情</el-button>
</template> </template>

View File

@@ -376,10 +376,6 @@
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item span="4" v-for="item in form.enlistmentReserveApprovalList" > <el-descriptions-item span="4" v-for="item in form.enlistmentReserveApprovalList" >
<template slot="label"> {{ item.opinionType }} </template> <template slot="label"> {{ item.opinionType }} </template>
<div style="padding-top: 10px;"> <div style="padding-top: 10px;">
{{ item.approvalOpinion || "暂无意见" }} {{ item.approvalOpinion || "暂无意见" }}
@@ -391,7 +387,16 @@
<el-tag v-if="item.approvalResult == 1" type="success">通过</el-tag> <el-tag v-if="item.approvalResult == 1" type="success">通过</el-tag>
<el-tag v-else type="danger">驳回</el-tag> <el-tag v-else type="danger">驳回</el-tag>
</div> </div>
<div style="padding: 0 10px;">签名 {{ item.approverName }}</div> <div
style="display: flex;justify-content: center;align-items: center;min-width: 130px;text-align: left;">
<div>签名 </div>
<div>
<el-image style="width: 100px; height: 50px; margin-left: 10px; border: 1px solid #eee"
:src="baseUrl + item.signature" :preview-src-list="[baseUrl + item.signature]"
:alt="item.approverName">
</el-image>
</div>
</div>
<div style="padding: 0 10px;">日期 {{ item.approvalTime }}</div> <div style="padding: 0 10px;">日期 {{ item.approvalTime }}</div>
</div> </div>
</div> </div>

View File

@@ -374,7 +374,16 @@
<el-tag v-if="item.approvalResult == 1" type="success">通过</el-tag> <el-tag v-if="item.approvalResult == 1" type="success">通过</el-tag>
<el-tag v-else type="danger">驳回</el-tag> <el-tag v-else type="danger">驳回</el-tag>
</div> </div>
<div style="padding: 0 10px;">签名 {{ item.approverName }}</div> <div
style="display: flex;justify-content: center;align-items: center;min-width: 130px;text-align: left;">
<div>签名 </div>
<div>
<el-image style="width: 100px; height: 50px; margin-left: 10px; border: 1px solid #eee"
:src="baseUrl + item.signature" :preview-src-list="[baseUrl + item.signature]"
:alt="item.approverName">
</el-image>
</div>
</div>
<div style="padding: 0 10px;">日期 {{ item.approvalTime }}</div> <div style="padding: 0 10px;">日期 {{ item.approvalTime }}</div>
</div> </div>
</div> </div>

View File

@@ -413,7 +413,16 @@
<el-tag v-if="item.approvalResult == 1" type="success">通过</el-tag> <el-tag v-if="item.approvalResult == 1" type="success">通过</el-tag>
<el-tag v-else type="danger">驳回</el-tag> <el-tag v-else type="danger">驳回</el-tag>
</div> </div>
<div style="padding: 0 10px;">签名 {{ item.approverName }}</div> <div
style="display: flex;justify-content: center;align-items: center;min-width: 130px;text-align: left;">
<div>签名 </div>
<div>
<el-image style="width: 100px; height: 50px; margin-left: 10px; border: 1px solid #eee"
:src="baseUrl + item.signature" :preview-src-list="[baseUrl + item.signature]"
:alt="item.approverName">
</el-image>
</div>
</div>
<div style="padding: 0 10px;">日期 {{ item.approvalTime }}</div> <div style="padding: 0 10px;">日期 {{ item.approvalTime }}</div>
</div> </div>
</div> </div>
@@ -431,7 +440,9 @@
</el-descriptions> </el-descriptions>
<!-- 外宿申请表单 --> <!-- 外宿申请表单 -->
<div v-if="outsideAccommodationForm"><detailApply :formData="form" :isShwo="false"></detailApply></div> <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 <el-descriptions v-if="basicForm" class="margin-top" title="退伍复学申请表" :column="4" size="medium" border
@@ -982,7 +993,8 @@ export default {
variables: {}, variables: {},
approvalOpinion: '', // 必须初始化,避免 null 报错 approvalOpinion: '', // 必须初始化,避免 null 报错
approvalResult: '', approvalResult: '',
targetNodeName: '' targetNodeName: '',
signature: ''
}, },
penaltyNumber: '', penaltyNumber: '',
letterServiceContent: '', letterServiceContent: '',
@@ -1037,7 +1049,7 @@ export default {
outsideAccommodationForm: false, // 外宿申请表单 outsideAccommodationForm: false, // 外宿申请表单
basicForm: false,//退伍复学表单 basicForm: false,//退伍复学表单
BasicTestData: 0, // 新增默认0仅退回学生申请时改为1 BasicTestData: 0, // 新增默认0仅退回学生申请时改为1
user: [], // 当前登录用户
} }
}, },
created() { created() {
@@ -1092,9 +1104,15 @@ export default {
} else if (this.category == 'enlistmentReserve') { } else if (this.category == 'enlistmentReserve') {
this.enlistmentReserveForm = true this.enlistmentReserveForm = true
this.getEnlistmentReserve(this.taskForm.procInsId) this.getEnlistmentReserve(this.taskForm.procInsId)
getUserProfile().then(res => {
this.user = res.data
})
} else if (this.category == 'outsideAccommodation') { } else if (this.category == 'outsideAccommodation') {
this.outsideAccommodationForm = true this.outsideAccommodationForm = true
this.getOutsideAccommodation(this.taskForm.procInsId) this.getOutsideAccommodation(this.taskForm.procInsId)
getUserProfile().then(res => {
this.user = res.data
})
} else if (this.category == '退伍复学') { } else if (this.category == '退伍复学') {
this.basicForm = true this.basicForm = true
this.getBasicApplication(this.startUser) this.getBasicApplication(this.startUser)
@@ -1349,6 +1367,8 @@ export default {
// this.completeOpen = true; // this.completeOpen = true;
// this.completeTitle = "流程审批"; // this.completeTitle = "流程审批";
this.submitForm(null) this.submitForm(null)
// 获取当前用户的签名并赋值给this.taskForm.variables.signature传入监听器
this.taskForm.variables.signature = this.user.signature
}, },
/** 用户审批任务 */ /** 用户审批任务 */
taskComplete() { taskComplete() {
@@ -2061,7 +2081,8 @@ export default {
variables: {}, // 保留原有的嵌套 variables 结构(后端可能依赖) variables: {}, // 保留原有的嵌套 variables 结构(后端可能依赖)
approvalOpinion: '', // 初始化审批意见为空白 approvalOpinion: '', // 初始化审批意见为空白
approvalResult: '', // 审批状态 approvalResult: '', // 审批状态
targetNodeName: '' // 审批节点 targetNodeName: '', // 审批节点
signature: '' // 签名
} }
} else { } else {
// 情况2variables 已存在 → 保留原有字段,补充 approvalOpinion无则添加有则保留原值 // 情况2variables 已存在 → 保留原有字段,补充 approvalOpinion无则添加有则保留原值
@@ -2069,24 +2090,25 @@ export default {
...this.taskForm.variables, // 展开原有所有字段(如 variables、其他自定义字段 ...this.taskForm.variables, // 展开原有所有字段(如 variables、其他自定义字段
approvalOpinion: this.taskForm.variables.approvalOpinion || '', // 兜底:若原有未定义则设为空白 approvalOpinion: this.taskForm.variables.approvalOpinion || '', // 兜底:若原有未定义则设为空白
approvalResult: this.taskForm.variables.approvalResult || '', approvalResult: this.taskForm.variables.approvalResult || '',
targetNodeName: this.taskForm.variables.targetNodeName || '' targetNodeName: this.taskForm.variables.targetNodeName || '',
signature: this.taskForm.variables.signature || '',
} }
} }
}, },
// 退回或驳回的时候生成入伍保留学籍申请审核 // 退回或驳回的时候生成入伍保留学籍申请审核
taskReturnApproval(text) { taskReturnApproval(text) {
getUserProfile().then(res => {
let data = { let data = {
applyId: this.form.id, applyId: this.form.id,
processInstanceId: this.form.processInstanceId, processInstanceId: this.form.processInstanceId,
taskId: this.taskForm.taskId, taskId: this.taskForm.taskId,
nodeName: this.taskName, nodeName: this.taskName,
approverId: res.data.userId, approverId: this.user.userId,
approverName: res.data.nickName, approverName: this.user.nickName,
approvalOpinion: this.taskForm.comment, approvalOpinion: this.taskForm.comment,
approvalResult: 2, approvalResult: 2,
studentName: this.form.studentName, studentName: this.form.studentName,
studentNo: this.form.studentNo studentNo: this.form.studentNo,
signature: this.user.signature
} }
// 生成审核记录 // 生成审核记录
insertOrUpdateByStuAndApprover(data).then(ress => { insertOrUpdateByStuAndApprover(data).then(ress => {
@@ -2115,29 +2137,27 @@ export default {
// } // }
this.$modal.closeLoading() this.$modal.closeLoading()
}) })
})
}, },
// 退回或驳回的时候生成外宿申请审核 // 退回或驳回的时候生成外宿申请审核
taskReturnAccommodationApproval() { taskReturnAccommodationApproval() {
getUserProfile().then(res => {
let data = { let data = {
applyId: this.form.id, applyId: this.form.id,
processInstanceId: this.form.processInstanceId, processInstanceId: this.form.processInstanceId,
applyNo: this.form.applyNo, applyNo: this.form.applyNo,
approvalNode: this.taskName, approvalNode: this.taskName,
approverId: res.data.userId, approverId: this.user.userId,
approverName: res.data.nickName, approverName: this.user.nickName,
approvalOpinion: this.taskForm.comment, approvalOpinion: this.taskForm.comment,
approvalResult: 0, approvalResult: 0,
studentName: this.form.studentName, studentName: this.form.studentName,
studentNo: this.form.studentNo studentNo: this.form.studentNo,
signature: this.user.signature
} }
// 生成审核记录 // 生成审核记录
addOrUpdateAccommodationApproval(data).then(ress => { addOrUpdateAccommodationApproval(data).then(ress => {
// 退回或者驳回生产审批记录之后,更新申请表里面的驳回信息 // 退回或者驳回生产审批记录之后,更新申请表里面的驳回信息
updateOutsideAccommodationApply({ id: this.form.id, rejectReason: this.taskForm.comment }) updateOutsideAccommodationApply({ id: this.form.id, rejectReason: this.taskForm.comment })
}) })
})
} }
}, },
} }

View File

@@ -83,7 +83,16 @@
<el-tag v-if="item.approvalResult == 1" type="success">通过</el-tag> <el-tag v-if="item.approvalResult == 1" type="success">通过</el-tag>
<el-tag v-else type="danger">驳回</el-tag> <el-tag v-else type="danger">驳回</el-tag>
</div> </div>
<div style="padding: 0 10px;">签名 {{ item.approverName }}</div> <div
style="display: flex;justify-content: center;align-items: center;min-width: 130px;text-align: left;">
<div>签名 </div>
<div>
<el-image style="width: 100px; height: 50px; margin-left: 10px; border: 1px solid #eee"
:src="baseUrl + item.signature" :preview-src-list="[baseUrl + item.signature]"
:alt="item.approverName">
</el-image>
</div>
</div>
<div style="padding: 0 10px;">日期 {{ item.approvalTime }}</div> <div style="padding: 0 10px;">日期 {{ item.approvalTime }}</div>
</div> </div>
</div> </div>
@@ -372,7 +381,8 @@ export default {
createTime: '', createTime: '',
updateTime: '', updateTime: '',
remark: '', remark: '',
affixId: null affixId: null,
baseUrl: process.env.VUE_APP_BASE_API,
}, },
enlistmentReserveAttachList: [], enlistmentReserveAttachList: [],
formRules: { formRules: {

View File

@@ -135,7 +135,7 @@
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" <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)" <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 && scope.row.processInstanceId == ''">删除</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" <el-button size="mini" type="text" icon="el-icon-info"
@click="detail(scope.row)">详情</el-button> @click="detail(scope.row)">详情</el-button>
</template> </template>