wzj-vue/src/components/Process/approvalRecord.vue
2023-07-14 13:28:15 +08:00

144 lines
4.7 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>
<el-dialog v-model="visible" draggable title="审批记录" :width="width" :height="height" append-to-body :close-on-click-modal="false">
<div v-loading="loading">
<div style="width: 100%;height: 300px;overflow: auto;position: relative;">
<div
v-for="(graphic, index) in graphicInfoVos"
:key="index"
:style="{
position: 'absolute',
left: `${graphic.x}px`,
top: `${graphic.y}px`,
width: `${graphic.width}px`,
height: `${graphic.height}px`,
cursor: 'pointer',
zIndex: 99
}"
@mouseover="handleMouseOver(graphic)"
@mouseleave="handleMouseLeave()"
></div>
<!-- 弹出的 div 元素 -->
<div
v-show="popupVisible"
class="triangle"
:style="{
position: 'absolute',
left: `${graphicX}px`,
top: `${graphicY}px`,
backgroundColor: '#fff',
padding: '10px',
zIndex: 100
}"
>
<p>审批人员: {{ nodeInfo.nickName }}</p>
<p>节点状态{{ nodeInfo.status }}</p>
<p>开始时间{{ nodeInfo.startTime }}</p>
<p>结束时间{{ nodeInfo.endTime }}</p>
<p>审批耗时{{ nodeInfo.runDuration }}</p>
</div>
<el-image :src="src" />
</div>
<div>
<el-table :data="historyList" style="width: 100%" border fit max-height="570">
<el-table-column label="流程审批历史记录" align="center">
<el-table-column type="index" label="序号" align="center" width="50"></el-table-column>
<el-table-column prop="name" label="任务名称" sortable align="center"></el-table-column>
<el-table-column prop="nickName" label="办理人" sortable align="center"></el-table-column>
<el-table-column label="状态" sortable align="center">
<template #default="scope">
<el-tag type="success">{{scope.row.statusName}}</el-tag>
</template>
</el-table-column>
<el-table-column prop="comment" label="审批意见" sortable align="center"></el-table-column>
<el-table-column prop="startTime" label="开始时间" sortable align="center"></el-table-column>
<el-table-column prop="endTime" label="结束时间" sortable align="center"></el-table-column>
<el-table-column prop="runDuration" label="运行时长" sortable align="center"></el-table-column>
</el-table-column>
</el-table>
</div>
</div>
</el-dialog>
</template>
<script>
import { getHistoryProcessImage, getHistoryRecord } from '@/api/workflow/processInstance';
export default {
props: {
width: {
type: String,
default: '70%'
},
height: {
type: String,
default: '100%'
}
},
data() {
return {
loading: false,
src: '',
visible: false,
historyList: [],
deleteReason: '',
graphicInfoVos: [],
nodeListInfo: [],
popupVisible: false,
nodeInfo: {},
graphicX: '',
graphicY: ''
};
},
methods: {
init(processInstanceId) {
this.visible = true;
this.loading = true;
this.historyList = [];
this.graphicInfoVos = [];
this.src = getHistoryProcessImage(processInstanceId);
getHistoryRecord(processInstanceId).then((response) => {
this.historyList = response.data.historyRecordList;
this.graphicInfoVos = response.data.graphicInfoVos;
this.nodeListInfo = response.data.nodeListInfo;
this.deleteReason = response.data.deleteReason;
this.loading = false;
});
},
handleMouseOver(graphic) {
this.graphicX = graphic.x + graphic.width + 10;
this.graphicY = graphic.y - graphic.height + -10;
this.nodeInfo = {};
if (this.nodeListInfo && this.nodeListInfo.length > 0) {
let info = this.nodeListInfo.find((e) => e.taskDefinitionKey == graphic.nodeId);
if (info) {
this.nodeInfo = {
nickName: info.nickName,
status: info.status,
startTime: info.startTime,
endTime: info.endTime,
runDuration: info.runDuration
};
this.popupVisible = true;
}
}
},
handleMouseLeave() {
this.popupVisible = false;
}
}
};
</script>
<style scoped>
.triangle {
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
border-radius: 6px;
}
.triangle::after {
content: ' ';
position: absolute;
top: 8em;
right: 215px;
border: 15px solid;
border-color: transparent #fff transparent transparent;
}
</style>