From e2065fb891612ea6aee3f447f1d07843aa128eff Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期一, 20 一月 2025 18:01:35 +0800 Subject: [PATCH] 流程图、流转过程放到流程推进详情页面 --- src/views/projectProcess/detail/index.vue | 129 ++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 128 insertions(+), 1 deletions(-) diff --git a/src/views/projectProcess/detail/index.vue b/src/views/projectProcess/detail/index.vue index 2929716..3f615c0 100644 --- a/src/views/projectProcess/detail/index.vue +++ b/src/views/projectProcess/detail/index.vue @@ -26,7 +26,7 @@ <div @click="changeTab(7, 'willOvertime')" :class="{'item-warm': true, 'willOvertime-color': true, 'active': 7 === selectTabId}">涓存湡浜嬮」锛�0锛�</div> <div @click="changeTab(8, 'urge')" :class="{'item-warm': true, 'urge-color': true, 'active': 8 === selectTabId}">鐫e姙浜嬮」锛�0锛�</div> </div> - <div style="display: flex;justify-content: center;align-items: center;margin-top: 20px"> + <div style="display: flex;justify-content: center;align-items: center;margin-top: 20px; position: relative"> <el-form :inline="true" :model="queryParams" class="demo-form-inline"> <el-form-item label="浠诲姟鍚嶇О"> <el-input v-model="queryParams.taskName" placeholder="浠诲姟鍚嶇О"></el-input> @@ -35,6 +35,10 @@ <el-button type="primary" @click="search">鏌ヨ</el-button> </el-form-item> </el-form> + <div style="position: absolute; right: 0; top: 0"> + <el-button @click="openProcessImg" v-loading="imgLoading" type="primary">娴佺▼鍥�</el-button> + <el-button @click="openRecord" type="info" v-loading="recordLoading">娴佽浆璁板綍</el-button> + </div> </div> <div class="table"> <el-table @@ -115,6 +119,75 @@ </el-pagination> </div> </div> + + <el-dialog + :title="`${this.queryParams.processName}锛氭祦绋嬪浘`" + :visible.sync="processImgShow" + :fullscreen="true" + :close-on-click-modal="false" + :destroy-on-close="true" + > + <div> + <bpmn-viewer :flowData="flowData" :procInsId="queryParams.processInsId"/> + </div> + </el-dialog> + + <el-dialog + :title="`${this.queryParams.processName}锛氭祦杞褰昤" + :visible.sync="processRecordShow" + :fullscreen="true" + :close-on-click-modal="false" + :destroy-on-close="true" + > + <div> + <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}} + <span v-if="item.comment && item.comment.type === '3'" style="color: red">(鎵ц浜嗛┏鍥�)</span> + <span v-if="item.overtime && item.overtime==='red'" style="color: red">(宸茶秴鏃�)</span> + <span v-if="item.overtime && item.overtime==='yellow'" style="color: orange">(鍗冲皢瓒呮椂)</span> + </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"></i>鍔炵悊浜�</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"></i>鍊欓�夊姙鐞�</template> + {{item.candidate}} + </el-descriptions-item> + <el-descriptions-item label-class-name="my-label"> + <template slot="label"><i class="el-icon-date"></i>鎺ユ敹鏃堕棿</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"></i>澶勭悊鏃堕棿</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"></i>鑰楁椂</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"></i>澶勭悊鎰忚</template> + {{item.comment.comment}} + </el-descriptions-item> + </el-descriptions> + </el-card> + </el-timeline-item> + </el-timeline> + </div> + </div> + </el-dialog> + </div> </template> @@ -124,11 +197,24 @@ getProjectProcessDetailTaskList, getTaskIsAuditing } from "@/api/projectProcess/projectProcess"; +import {flowXmlAndNode} from "@/api/flowable/definition"; +import BpmnViewer from '@/components/Process/viewer'; +import {flowRecord} from "@/api/flowable/finished"; export default { name: "Detail", + components: { + BpmnViewer + }, data() { return { + processRecordShow: false, // 娴佽浆璁板綍鏄剧ず + flowRecordList: [], // 娴佺▼娴佽浆鏁版嵁 + recordLoading: false, // 娴佽浆璁板綍鍔犺浇 + // 妯″瀷xml鏁版嵁 + flowData: {}, + processImgShow: false, // 娴佺▼鍥炬樉绀� + imgLoading: false, // 娴佺▼鍥惧姞杞� loading: false, tableLoading: false, detailData: {}, @@ -142,6 +228,8 @@ currentPage: 1, projectId: null, processDefId: null, + processInsId: null, + deployId: null, processName: '' // 娴佺▼鍚嶇О } } @@ -153,6 +241,8 @@ if (!params || ! params.projectId) { this.queryParams.projectId = this.$route.query.projectId this.queryParams.processDefId = this.$route.query.processDefId + this.queryParams.processInsId = this.$route.query.processInsId + this.queryParams.deployId = this.$route.query.deployId this.queryParams.processName = this.$route.query.processName sessionStorage.setItem("projectProDetail", JSON.stringify(this.queryParams)) } else { @@ -162,6 +252,43 @@ this.getProjectProcessInfo() }, methods: { + setIcon(val) { + if (val) { + return "el-icon-check"; + } else { + return "el-icon-time"; + } + }, + setColor(val) { + if (val) { + return "#2bc418"; + } else { + return "#b3bdbb"; + } + }, + openRecord() { + this.getFlowRecordList(this.queryParams.processInsId); + }, + openProcessImg() { + this.imgLoading = true + flowXmlAndNode({processInsId:this.queryParams.processInsId,deployId:this.queryParams.deployId}).then(res => { + this.imgLoading = false + this.processImgShow = true + this.$nextTick(() => { + this.flowData = res.data; + }) + }) + }, + /** 娴佺▼娴佽浆璁板綍 */ + getFlowRecordList(procInsId) { + const params = {procInsId: procInsId} + this.recordLoading = true + flowRecord(params).then(res => { + this.flowRecordList = res.data.flowList; + this.recordLoading = false + this.processRecordShow = true + }) + }, unitFormatter(row) { if (row.handlerType === 'USER') { return null; -- Gitblit v1.8.0