179 lines
6.2 KiB
Vue
179 lines
6.2 KiB
Vue
<template>
|
|
<section class="AiProcess">
|
|
<ai-flow ref="AiFlow" v-model="detail.nowNodeId" :config="detail.workflowConfig" readonly :process.sync="process" height="200px"/>
|
|
<ai-wrapper border :title="currentNodeName" v-if="!!detail.id &&!isFinished">
|
|
<template v-if="currentNode.type=='task'">
|
|
<ai-info-item label="当前审批" :value="currentNode.properties.userName"/>
|
|
<ai-info-item label="操作时间" :value="currentNode.properties.updateTime"/>
|
|
<ai-info-item label="审批意见" isLine>
|
|
<el-input v-if="canAudit" type="textarea" rows="3" v-model="currentNode.properties.remark"/>
|
|
<span v-else v-text="currentNode.properties.remark"/>
|
|
</ai-info-item>
|
|
</template>
|
|
<template v-else-if="currentNode.type=='start'">
|
|
<ai-info-item label="开始时间" :value="currentNode.properties.updateTime" isLine/>
|
|
</template>
|
|
<template v-else-if="currentNode.type=='end'">
|
|
<ai-info-item label="结束时间" :value="currentNode.properties.updateTime" isLine/>
|
|
</template>
|
|
</ai-wrapper>
|
|
<el-row class="processOptions mar-t16" type="flex" justify="center" v-if="canAudit">
|
|
<el-button @click="handleReject" type="danger">拒绝</el-button>
|
|
<el-button @click="handleReturn" v-if="!incomingIsStart">驳回</el-button>
|
|
<el-button type="primary" @click="handlePass">同意</el-button>
|
|
</el-row>
|
|
</section>
|
|
</template>
|
|
|
|
<script>
|
|
import AiFlow from "./AiFlow";
|
|
import request from "../../lib/js/request";
|
|
import AiWrapper from "../basic/AiWrapper";
|
|
import AiInfoItem from "../basic/AiInfoItem";
|
|
import {mapState, mapActions} from "vuex"
|
|
|
|
export default {
|
|
name: "AiProcess",
|
|
props: {
|
|
bid: String
|
|
},
|
|
components: {AiInfoItem, AiWrapper, AiFlow},
|
|
data() {
|
|
return {
|
|
instance: request,
|
|
detail: {},
|
|
currentNode: {properties: {}},
|
|
process: null
|
|
}
|
|
},
|
|
computed: {
|
|
...mapState(['user']),
|
|
currentNodeName: v => v.currentNode?.text?.value || "当前节点",
|
|
canAudit: v => v.user.info.id == v.currentNode?.properties.userId && v.currentNode?.id == v.detail.nowNodeId && !v.isFinished,
|
|
incomingIsStart: v => v.process?.getNodeIncomingNode(v.detail.nowNodeId)?.[0]?.type == "start",
|
|
isFinished: v => v.detail.nowNodeId == "finished"
|
|
},
|
|
methods: {
|
|
...mapActions(['endFlow']),
|
|
getProcess() {
|
|
const {bid: id} = this.$props
|
|
id ? this.instance.post("/app/appworkflowlog/queryDetailById", null, {
|
|
params: {id}
|
|
}).then(res => {
|
|
if (res?.data) {
|
|
const {workflowConfig = null, nowNodeId} = res.data
|
|
this.detail = {...res.data, workflowConfig: JSON.parse(workflowConfig)}
|
|
this.currentNode = this.detail.workflowConfig.nodes.find(e => e.id == nowNodeId) || this.currentNode
|
|
}
|
|
}) : console.error("无法获取bid")
|
|
},
|
|
initEvents() {
|
|
this.process.on("node:click", res => {
|
|
if (res?.data) {
|
|
this.currentNode = res.data
|
|
}
|
|
})
|
|
this.process.on("blank:click", () => {
|
|
this.currentNode = this.process.getNodeModelById(this.detail.nowNodeId)
|
|
})
|
|
},
|
|
handleReject() {
|
|
this.$confirm("是否要拒绝该申请?").then(() => {
|
|
this.currentNode.properties = {
|
|
remark: "拒绝申请", ...this.currentNode.properties,
|
|
status: "reject",
|
|
updateTime: this.$moment().format("YYYY-MM-DD HH:mm:ss")
|
|
}
|
|
this.process.setProperties(this.detail.nowNodeId, {
|
|
...this.currentNode.properties,
|
|
})
|
|
const form = {...this.detail, workflowConfig: this.process.getGraphData()}
|
|
this.saveProcess(form)
|
|
}).catch(() => 0)
|
|
},
|
|
handleReturn() {
|
|
this.$confirm("是否要驳回该申请返回到前次审批?").then(() => {
|
|
this.currentNode.properties = {
|
|
remark: "驳回申请", ...this.currentNode.properties,
|
|
status: "reject",
|
|
updateTime: this.$moment().format("YYYY-MM-DD HH:mm:ss")
|
|
}
|
|
let {nowNodeId} = this.detail
|
|
this.process.setProperties(nowNodeId, {
|
|
...this.currentNode.properties,
|
|
})
|
|
const next = this.process.getNodeIncomingNode(nowNodeId)
|
|
const form = {...this.detail, workflowConfig: this.process.getGraphData()}
|
|
nowNodeId = []
|
|
next?.map(e => {
|
|
nowNodeId.push(e.id)
|
|
this.process.setProperties(e.id, {status: 'current'})
|
|
})
|
|
this.saveProcess({...form, nowNodeId: nowNodeId.toString()})
|
|
}).catch(() => 0)
|
|
},
|
|
handlePass() {
|
|
this.$confirm("是否要同意该申请?").then(() => {
|
|
this.currentNode.properties = {
|
|
remark: "同意申请", ...this.currentNode.properties,
|
|
status: "pass",
|
|
updateTime: this.$moment().format("YYYY-MM-DD HH:mm:ss")
|
|
}
|
|
let {nowNodeId} = this.detail
|
|
this.process.setProperties(nowNodeId, {
|
|
...this.currentNode.properties,
|
|
})
|
|
const next = this.process.getNodeOutgoingNode(nowNodeId)
|
|
const form = {...this.detail, workflowConfig: this.process.getGraphData()}
|
|
if (next?.[0].type == "end") this.endFlow(form).then(res => {
|
|
if (res?.code == 0) {
|
|
this.$message.success("提交成功!")
|
|
this.getProcess()
|
|
}
|
|
})
|
|
else {
|
|
nowNodeId = []
|
|
next?.map(e => {
|
|
nowNodeId.push(e.id)
|
|
this.process.setProperties(e.id, {status: 'current'})
|
|
})
|
|
this.saveProcess({...form, nowNodeId: nowNodeId.toString()})
|
|
}
|
|
}).catch(() => 0)
|
|
},
|
|
saveProcess(form) {
|
|
const {workflowConfig} = form
|
|
this.instance.post("/app/appworkflowlog/addOrUpdate", {...form, workflowConfig: JSON.stringify(workflowConfig)}).then(res => {
|
|
if (res?.code == 0) {
|
|
this.$message.success("提交成功!")
|
|
this.$emit("submit")
|
|
}
|
|
})
|
|
}
|
|
},
|
|
watch: {
|
|
process: {
|
|
immediate: true,
|
|
handler(v) {
|
|
if (!!v) {
|
|
this.initEvents()
|
|
}
|
|
}
|
|
}
|
|
},
|
|
created() {
|
|
this.getProcess()
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
.AiProcess {
|
|
.processOptions {
|
|
.el-button {
|
|
min-width: 72px;
|
|
}
|
|
}
|
|
}
|
|
</style>
|