Files
zhxg_pc/src/views/flowable/task/myProcess/detail/index.vue

713 lines
29 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="app-container">
<el-card class="box-card">
<div slot="header" class="clearfix">
<span class="el-icon-document">已发任务</span>
<el-button style="float: right" size="mini" type="danger" @click="goBack">关闭</el-button>
</div>
<el-tabs v-model="activeName" tab-position="top" @tab-click="handleClick">
<!--表单信息-->
<el-tab-pane label="表单信息" name="1">
<el-col :span="16" :offset="4">
<div class="">
<!-- 考勤表单 -->
<el-descriptions v-if="leaveForm" class="margin-top" title="" :column="2" size="medium" border style="width: 100%">
<el-descriptions-item>
<template slot="label"> 学号 </template>
{{ form.stuNo }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 姓名 </template>
{{ form.studentName }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 性别 </template>
{{ form.gender }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 院部 </template>
{{ form.departmentName }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 班级 </template>
{{ form.className }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 联系电话 </template>
{{ form.phoneNumber }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 家长姓名 </template>
{{ form.fatherName }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 家长联系电话 </template>
{{ form.fatherRelation }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 请假事由 </template>
{{ form.leaveType == '0' ? '病假' : '事假' }}
{{ form.reason }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 请假起始时间 </template>
{{ form.startDate }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 请假截止时间 </template>
{{ form.endDate }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 请假天数 </template>
{{ form.leaveDays }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 目的地 </template>
{{ form.destination }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 目的地详细 </template>
{{ form.destinationDetails }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 是否离桂 </template>
{{ form.leavingGx == '0' ? '否' : '是' }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 安全承诺书 </template>
{{ form.safetyPromise == true ? '已勾选' : '未勾选' }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 请假人签字上传 </template>
<image-preview :src="form.applicantSignature" :width="100" :height="100" />
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 材料附件 </template>
<image-preview :src="form.attachment" :width="100" :height="100" />
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 备注 </template>
{{ form.remark }}
</el-descriptions-item>
</el-descriptions>
<!-- 处分表单 -->
<el-descriptions v-if="disposalForm" class="margin-top" title="" :column="2" size="medium" border style="width: 100%">
<el-descriptions-item>
<template slot="label"> 学号 </template>
{{ form.stuNo }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 姓名 </template>
{{ form.stuName }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 性别 </template>
{{ form.gender }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 院部 </template>
{{ form.departmentName }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 年级 </template>
{{ form.gradeName }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 班级 </template>
{{ form.className }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 民族 </template>
{{ form.mz }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 出生日期 </template>
{{ form.birthday }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 籍贯/自治区/直辖市 </template>
{{ form.jg }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> / </template>
{{ form.hksz2 }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 违纪时间 </template>
{{ form.violationDate }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 处分等级 </template>
{{ penaltyTypeMethodFormat(form) }}
</el-descriptions-item>
<el-descriptions-item span="2">
<template slot="label"> 违纪材料 </template>
<Affix v-model="form.evidenceUpload" :disabled="true" />
</el-descriptions-item>
<el-descriptions-item span="2">
<template slot="label"> 处分建议 </template>
{{ form.penaltyRecommendation }}
</el-descriptions-item>
<el-descriptions-item span="2">
<template slot="label"> 违规条例 </template>
{{ form.violationRegulations }}
</el-descriptions-item>
</el-descriptions>
<!-- 解除处分表单 -->
<el-descriptions v-if="relieveForm" class="margin-top" title="" :column="2" size="medium" border style="width: 100%">
<el-descriptions-item>
<template slot="label"> 学号 </template>
{{ form.stuNo }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 姓名 </template>
{{ form.stuName }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 性别 </template>
{{ form.gender }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 院部 </template>
{{ form.departmentName }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 年级 </template>
{{ form.gradeName }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 班级 </template>
{{ form.className }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 民族 </template>
{{ form.mz }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 出生日期 </template>
{{ form.birthday }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 籍贯/自治区/直辖市 </template>
{{ form.jg }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> / </template>
{{ form.hksz2 }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 解除处分文号 </template>
{{ form.relieveNumber }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 处分文号 </template>
{{ form.penaltyNumber }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 违纪时间 </template>
{{ form.violationDate }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 处分等级 </template>
{{ penaltyTypeMethodFormat(form) }}
</el-descriptions-item>
<el-descriptions-item span="2">
<template slot="label"> 处分期间表现 </template>
{{ form.ideologicalEducation }}
</el-descriptions-item>
</el-descriptions>
<!-- 休学申请表单 -->
<el-descriptions v-if="quitSchoolForm" class="margin-top" title="" :column="3" size="medium" border style="width: 100%">
<el-descriptions-item>
<template slot="label"> 学号 </template>
{{ form.stuNo }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 姓名 </template>
{{ form.stuName }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 性别 </template>
{{ form.gender }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 院部 </template>
{{ form.departmentName }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 年级 </template>
{{ form.gradeName }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 班级 </template>
{{ form.className }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 出生日期 </template>
{{ form.birthday }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 家长姓名 </template>
{{ form.parentName }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 家长电话 </template>
{{ form.parentPhone }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 民族 </template>
{{ form.mz }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 籍贯/自治区/直辖市 </template>
{{ form.jg }}
</el-descriptions-item>
<el-descriptions-item span="3">
<template slot="label"> 休学类别 </template>
{{ quitSchoolMethodFormat(form) }}
</el-descriptions-item>
<el-descriptions-item span="3">
<template slot="label"> 附件上传 </template>
<Affix v-model="form.attachmentUpload" :disabled="true" />
</el-descriptions-item>
<el-descriptions-item span="3">
<template slot="label"> 申请原因 </template>
{{ form.reasonApplying }}
</el-descriptions-item>
<el-descriptions-item span="3">
<template slot="label"> 签名 </template>
<img v-if="form.applySignature" :src="form.applySignature" width="200px" height="200px" class="avatar">
</el-descriptions-item>
<el-descriptions-item span="3">
<template slot="label"> 辅导员联系情况 </template>
{{ form.ideologicalEducation }}
</el-descriptions-item>
<el-descriptions-item span="3">
<template slot="label"> 在校时间说明 </template>
{{ form.instructionSchoolHours }}
</el-descriptions-item>
</el-descriptions>
<!-- 入伍保留学籍表单 -->
<el-descriptions v-if="enlistmentReserveForm" class="margin-top" title="" :column="4" size="medium" border style="width: 100%">
<el-descriptions-item>
<template slot="label"> 姓名 </template>
{{ form.studentName }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 性别 </template>
<span v-if="form.gender == 1"></span>
<span v-else></span>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 民族 </template>
<!-- {{ form.nation }} -->
<dict-tag :options="dict.type.rt_nation" :value="form.nation" />
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 年级 </template>
{{ form.grade }}
</el-descriptions-item>
<el-descriptions-item span="2">
<template slot="label"> 专业名称 </template>
{{ form.major }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 学号 </template>
{{ form.studentNo }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label"> 班级 </template>
{{ form.className }}
</el-descriptions-item>
<el-descriptions-item span="2">
<template slot="label"> 家庭地址 </template>
{{ form.familyAddress }}
</el-descriptions-item>
<el-descriptions-item span="2">
<template slot="label"> 家长电话 </template>
{{ form.parentPhone }}
</el-descriptions-item>
<el-descriptions-item span="4">
<template slot="label"> 附件材料 </template>
<Affix v-model="form.affixId" :disabled="true" />
</el-descriptions-item>
<el-descriptions-item span="4">
<template slot="label"> 申请原因 </template>
<div style="padding-top: 10px;">
{{ form.applyReason }}
</div>
<div style="padding: 20px;">
<div style="display: flex;justify-content: flex-end;align-items: center;">
<div style="padding: 0 10px;">申请人 {{ form.studentName }}</div>
<div style="padding: 0 10px;">日期 {{ form.createTime }}</div>
</div>
</div>
</el-descriptions-item>
<el-descriptions-item span="4" v-for="item in form.enlistmentReserveApprovalList" >
<template slot="label"> {{ item.opinionType }} </template>
<div style="padding-top: 10px;">
{{ item.approvalOpinion || "暂无意见" }}
</div>
<div style="padding: 20px;">
<div style="display: flex;justify-content: flex-end;align-items: center;">
<div style="padding: 0 10px;">
审批结果
<el-tag v-if="item.approvalResult == 1" type="success">通过</el-tag>
<el-tag v-else type="danger">驳回</el-tag>
</div>
<div style="padding: 0 10px;">签名 {{ item.approverName }}</div>
<div style="padding: 0 10px;">日期 {{ item.approvalTime }}</div>
</div>
</div>
</el-descriptions-item>
<!-- <el-descriptions-item span="3">
<template slot="label"> 辅导员联系情况 </template>
{{ form.ideologicalEducation }}
</el-descriptions-item> -->
<el-descriptions-item span="4">
<template slot="label"> 保留学籍时间和编号 </template>
{{ form.reserveNo }}
</el-descriptions-item>
</el-descriptions>
</div>
</el-col>
</el-tab-pane>
<!--流程流转记录-->
<el-tab-pane label="流转记录" name="2">
<el-col :span="16" :offset="4">
<div class="block">
<el-timeline>
<el-timeline-item v-for="(item, index) in flowRecordList" :key="index" :icon="setIcon(item.finishTime)" :color="setColor(item.finishTime)">
<p style="font-weight: 700">{{ item.taskName }}</p>
<el-card :body-style="{ padding: '10px' }">
<el-descriptions class="margin-top" :column="1" size="small" border>
<el-descriptions-item v-if="item.assigneeName" label-class-name="my-label">
<template slot="label"><i class="el-icon-user" />办理人</template>
{{ item.assigneeName }}
<el-tag type="info" size="mini">{{ item.deptName }}</el-tag>
</el-descriptions-item>
<el-descriptions-item v-if="item.candidate" label-class-name="my-label">
<template slot="label"><i class="el-icon-user" />候选办理</template>
{{ item.candidate }}
</el-descriptions-item>
<el-descriptions-item label-class-name="my-label">
<template slot="label"><i class="el-icon-date" />接收时间</template>
{{ item.createTime }}
</el-descriptions-item>
<el-descriptions-item v-if="item.finishTime" label-class-name="my-label">
<template slot="label"><i class="el-icon-date" />处理时间</template>
{{ item.finishTime }}
</el-descriptions-item>
<el-descriptions-item v-if="item.duration" label-class-name="my-label">
<template slot="label"><i class="el-icon-time" />耗时</template>
{{ item.duration }}
</el-descriptions-item>
<el-descriptions-item v-if="item.comment" label-class-name="my-label">
<template slot="label"><i class="el-icon-tickets" />处理意见</template>
{{ item.comment.comment }}
</el-descriptions-item>
</el-descriptions>
</el-card>
</el-timeline-item>
</el-timeline>
</div>
</el-col>
</el-tab-pane>
<!--流程图-->
<el-tab-pane label="流程图" name="3">
<flow :flow-data="flowData" />
</el-tab-pane>
</el-tabs>
</el-card>
</div>
</template>
<script>
import { flowXmlAndNode, getFlowViewer, getProcessVariables } from '@/api/flowable/definition'
import { flowRecord } from '@/api/flowable/finished'
import { getDisciplinaryApplicationByProcInsId, getStuInfo } from '@/api/routine/disciplinaryApplication'
import { getLeaveApplicationByProcInsId, getStuInfoByStuId } from '@/api/routine/leaveApplication'
import { getStuDisciplinaryRelieveByProcInsId } from '@/api/routine/relieve'
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 { getEnlistmentReserveByProcessInstanceId} from "@/api/routine/enlistmentReserve/enlistmentReserve";
export default {
name: 'Record',
dicts: ['rt_penalty_type', 'rt_penalty_status', 'rt_quit_type'],
components: {
Parser,
flow,
},
props: {},
data() {
return {
// 模型xml数据
flowData: {},
activeName: '1',
// 查询参数
queryParams: {
deptId: undefined,
},
// 遮罩层
loading: true,
flowRecordList: [], // 流程流转数据
taskForm: {
multiple: false,
comment: '', // 意见内容
procInsId: '', // 流程实例编号
instanceId: '', // 流程实例编号
deployId: '', // 流程定义编号
taskId: '', // 流程任务编号
procDefId: '', // 流程编号
},
variablesData: {}, // 流程变量数据
category: null, // 流程分类
leaveForm: false, // 请假表单
disposalForm: false, // 处分表单
relieveForm: false, // 解除处分表单
quitSchoolForm: false, // 休学申请表单
form: {},
// 学生基础信息
stuInfo: {},
affixStatus: true, // Affix状态
baseUrl: process.env.VUE_APP_BASE_API,
}
},
created() {
this.taskForm.deployId = this.$route.query && this.$route.query.deployId
this.taskForm.taskId = this.$route.query && this.$route.query.taskId
this.taskForm.procInsId = this.$route.query && this.$route.query.procInsId
this.category = this.$route.query.category
if (this.category == 'leave') {
this.leaveForm = true
// 查询表单数据
this.getLeaveApplication(this.taskForm.procInsId)
} else if (this.category == 'disposal') {
this.disposalForm = true
this.getDisciplinaryApplication(this.taskForm.procInsId)
} else if (this.category == 'relieve') {
this.relieveForm = true
this.getStuDisciplinaryRelieve(this.taskForm.procInsId)
} else if (this.category == 'quitSchool') {
this.quitSchoolForm = true
this.getRtStuQuitSchoolByProcInsId(this.taskForm.procInsId)
} else if (this.category == 'enlistmentReserve') {
this.enlistmentReserveForm = true
this.getEnlistmentReserve(this.taskForm.procInsId)
}
// 回显流程记录
// 流程任务重获取变量表单
this.processVariables(this.taskForm.taskId)
this.getFlowRecordList(this.taskForm.procInsId, this.taskForm.deployId)
},
methods: {
quitSchoolMethodFormat(row, column) {
return this.selectDictLabel(this.dict.type.rt_quit_type, row.quitType)
},
penaltyTypeMethodFormat(row, column) {
return this.selectDictLabel(this.dict.type.rt_penalty_type, row.penaltyType)
},
// 请求 解除处分表单数据
getStuDisciplinaryRelieve(procInsId) {
getStuDisciplinaryRelieveByProcInsId(procInsId).then((response) => {
this.form = response.data
this.form.penaltyType = this.form.penaltyType.toString()
})
},
// 休学
getRtStuQuitSchoolByProcInsId(procInsId) {
getRtStuQuitSchoolByProcInsId(procInsId).then((res) => {
this.form = res.data
})
},
// 请求 请假表单数据
getLeaveApplication(procInsId) {
getLeaveApplicationByProcInsId(procInsId).then((response) => {
this.form = response.data
this.getStuInfoByStuId(this.form.stuNo)
})
},
// 请求处分表单数据
getDisciplinaryApplication(procInsId) {
getDisciplinaryApplicationByProcInsId(procInsId).then((response) => {
this.form = response.data
this.form.penaltyType = this.form.penaltyType.toString()
console.log(this.form)
this.getStuInfo(this.form.stuNo)
})
},
// 请求 入伍保留学籍表单数据
getEnlistmentReserve(procInsId) {
getEnlistmentReserveByProcessInstanceId(procInsId.toString()).then((res) => {
this.form = res.data
// 处理审批意见列表,添加意见类型
if (this.form?.enlistmentReserveApprovalList) {
// 定义意见类型数组与索引对应0=辅导员1=学务2=二级学院3=学籍管理科4=教务处主管领导)
const opinionTypes = [
"辅导员意见",
"学务意见",
"二级学院意见",
"学籍管理科意见",
"教务处主管领导意见"
];
// 遍历审批列表,为每条数据添加 opinionType 字段
this.form.enlistmentReserveApprovalList.forEach((item, index) => {
// 只处理前5条数据超出部分不添加或可根据实际需求调整
if (index < opinionTypes.length) {
item.opinionType = opinionTypes[index];
} else {
// 若超过5条可设置默认值或不设置
item.opinionType = "其他意见";
}
});
}
})
},
getStuInfo(stuNo) {
getStuInfo(stuNo).then((res) => {
if (res.code == 200) {
// console.log(res)
this.stuInfo = res.data
console.log('学生数据', this.stuInfo)
}
})
},
getStuInfoByStuId(stuNo) {
getStuInfoByStuId(stuNo).then((res) => {
if (res.code == 200) {
// console.log(res)
this.stuInfo = res.data
// console.log('学生数据', this.stuInfo)
}
})
},
handleClick(tab, event) {
if (tab.name === '3') {
flowXmlAndNode({ procInsId: this.taskForm.procInsId, deployId: this.taskForm.deployId }).then((res) => {
this.flowData = res.data
})
}
},
getFlowViewer(procInsId, executionId) {
getFlowViewer(procInsId, executionId).then((res) => {
this.taskList = res.data
})
},
setIcon(val) {
if (val) {
return 'el-icon-check'
} else {
return 'el-icon-time'
}
},
setColor(val) {
if (val) {
return '#2bc418'
} else {
return '#b3bdbb'
}
},
/** 流程流转记录 */
getFlowRecordList(procInsId, deployId) {
const that = this
const params = { procInsId: procInsId, deployId: deployId }
flowRecord(params)
.then((res) => {
that.flowRecordList = res.data.flowList
})
.catch((res) => {
this.goBack()
})
},
fillFormData(form, data) {
form.fields.forEach((item) => {
const vModel = item.__vModel__
const val = data[item.__vModel__]
// 特殊处理el-upload回显图片
if (item.__config__.tag === 'el-upload') {
// 回显图片
item['file-list'] = (val || []).map((url) => ({
name: `${vModel}${i}`,
url,
}))
}
if (val) {
item.__config__.defaultValue = val
}
})
},
/** 获取流程变量内容 */
processVariables(taskId) {
if (taskId) {
// 提交流程申请时填写的表单存入了流程变量中后续任务处理时需要展示
getProcessVariables(taskId).then((res) => {
this.variablesData = res.data.variables
})
}
},
/** 返回页面 */
goBack() {
// 关闭当前标签页并返回上个页面
const obj = { path: '/task/process', query: { t: Date.now() } }
this.$tab.closeOpenPage(obj)
},
},
}
</script>
<style lang="scss" scoped>
.test-form {
margin: 15px auto;
width: 800px;
padding: 15px;
}
.clearfix:before,
.clearfix:after {
display: table;
content: '';
}
.clearfix:after {
clear: both;
}
.box-card {
width: 100%;
margin-bottom: 20px;
}
.el-tag + .el-tag {
margin-left: 10px;
}
.my-label {
background: #e1f3d8;
}
</style>