<template>
|
<div ref="node" class="node-item" :style="nodeContainerStyle" @click="clickNode" @mouseup="changeNodeSite"
|
:class="nodeContainerClass">
|
<!-- 最左侧的那条竖线 -->
|
<div class="ef-node-left"></div>
|
<!-- 节点类型的图标 -->
|
<div class="ef-node-left-ico flow-node-drag">
|
<i :class="nodeIcoClass"></i>
|
</div>
|
<!-- 节点名称 -->
|
<div class="ef-node-text" :show-overflow-tooltip="true">
|
{{ node.name }}
|
</div>
|
<i @click.stop="delNode" v-if="node.type == 'node' && !disabled" style="display: none" class="el-icon-delete"></i>
|
<!-- 节点状态图标 -->
|
<div class="ef-node-right-ico">
|
<i class="el-icon-circle-check el-node-state-success" v-show="node.state === 'success'"></i>
|
<i class="el-icon-circle-close el-node-state-error" v-show="node.state === 'error'"></i>
|
<i class="el-icon-warning-outline el-node-state-warning" v-show="node.state === 'warning'"></i>
|
<i class="el-icon-loading el-node-state-running" v-show="node.state === 'running'"></i>
|
</div>
|
</div>
|
</template>
|
|
<script>
|
export default {
|
props: {
|
node: Object,
|
activeElement: Object,
|
disabled: {
|
typeof: Boolean,
|
default: false
|
}
|
},
|
data() {
|
return {}
|
},
|
computed: {
|
nodeContainerClass() {
|
return {
|
'ef-node-container': true,
|
'ef-node-active': this.activeElement.type == 'node' ? this.activeElement.nodeId === this.node.id : false
|
}
|
},
|
// 节点容器样式
|
nodeContainerStyle() {
|
return {
|
top: this.node.top,
|
left: this.node.left
|
}
|
},
|
nodeIcoClass() {
|
var nodeIcoClass = {}
|
nodeIcoClass[this.node.ico] = true
|
// 添加该class可以推拽连线出来,viewOnly 可以控制节点是否运行编辑
|
nodeIcoClass['flow-node-drag'] = this.node.viewOnly ? false : true
|
return nodeIcoClass
|
}
|
},
|
methods: {
|
// 点击节点
|
clickNode() {
|
this.$emit('clickNode', this.node.id)
|
},
|
// 鼠标移动后抬起
|
changeNodeSite() {
|
// 避免抖动
|
if (this.node.left == this.$refs.node.style.left && this.node.top == this.$refs.node.style.top) {
|
return;
|
}
|
this.$emit('changeNodeSite', {
|
nodeId: this.node.id,
|
left: this.$refs.node.style.left,
|
top: this.$refs.node.style.top,
|
})
|
}, delNode() {
|
this.$emit("delNode");
|
},
|
}
|
}
|
</script>
|
<style scoped>
|
@import "./index.css";
|
/* .node-item{
|
position: relative;
|
} */
|
.node-item:hover .el-icon-delete {
|
display: inline-block !important;
|
}
|
|
.el-icon-delete {
|
cursor: pointer;
|
position: relative;
|
top: -18px;
|
padding-left: 5px;
|
right: -16px;
|
color: #f61313;
|
height: 20px;
|
}
|
</style>
|