251 lines
6.5 KiB
251 lines
6.5 KiB
<template>
|
|
<div style="padding: 5px">
|
|
<div class="toolbar-item" :class="{'selection-active': selectionOpened}" @click="$_selectionSelect()">
|
|
<area-select size="18" />
|
|
</div>
|
|
<div class="toolbar-item" @click="$_zoomIn()">
|
|
<zoom-in size="18" />
|
|
</div>
|
|
<div class="toolbar-item" @click="$_zoomOut()">
|
|
<zoom-out size="18" />
|
|
</div>
|
|
<div
|
|
class="toolbar-item"
|
|
:class="{'disabled': !undoAble}"
|
|
@click="$_undo()"
|
|
>
|
|
<step-back size="18" />
|
|
</div>
|
|
<div
|
|
class="toolbar-item"
|
|
:class="{'disabled': !redoAble}"
|
|
@click="$_redo()"
|
|
>
|
|
<step-foward size="18" />
|
|
</div>
|
|
<div style="margin-right: 5px">
|
|
<el-button size="mini" type="primary" @click="$_lock">锁定</el-button>
|
|
</div>
|
|
<div style="margin-right: 5px">
|
|
<el-button size="mini" type="primary" @click="$_unlock">解锁</el-button>
|
|
</div>
|
|
<div style="margin-right: 5px">
|
|
<el-button size="mini" type="primary" @click="$_verticalAlign">垂直居中</el-button>
|
|
</div>
|
|
<div style="margin-right: 5px">
|
|
<el-button size="mini" type="primary" @click="$_horizontalAlign">水平居中</el-button>
|
|
</div>
|
|
<div style="margin-right: 5px">
|
|
<el-button size="mini" type="primary" @click="$_leftAlign">向左对齐</el-button>
|
|
</div>
|
|
<div style="margin-right: 5px">
|
|
<el-button size="mini" type="primary" @click="$_rightAlign">向右对齐</el-button>
|
|
</div>
|
|
<div style="margin-right: 5px">
|
|
<el-button size="mini" type="primary" @click="$_upAlign">向上对齐</el-button>
|
|
</div>
|
|
<div style="margin-right: 5px">
|
|
<el-button size="mini" type="primary" @click="$_downAlign">向下对齐</el-button>
|
|
</div>
|
|
<div style="margin-right: 5px">
|
|
<el-button size="mini" type="primary" @click="$_horizontalDistribution">水平分布</el-button>
|
|
</div>
|
|
<div style="margin-right: 5px">
|
|
<el-button size="mini" type="primary" @click="$_verticalDistribution">垂直分布</el-button>
|
|
</div>
|
|
<div style="margin-right: 5px">
|
|
<el-button size="mini" type="primary" @click="$_cleanGraph">清空画布</el-button>
|
|
</div>
|
|
<div style="margin-right: 5px">
|
|
<el-button size="mini" type="primary" @click="$_saveGraph">保存</el-button>
|
|
</div>
|
|
<div>
|
|
<el-select v-model="linetype" size="mini" style="width: 80px" @change="$_changeLineType">
|
|
<el-option
|
|
v-for="item in lineOptions"
|
|
:key="item.value"
|
|
:value="item.value"
|
|
:label="item.label"
|
|
/>
|
|
</el-select>
|
|
</div>
|
|
<div>
|
|
<span style="font-size: 14px; margin-left: 5px">舞台:</span>
|
|
<el-select v-model="stage_code" placeholder="请选择" @change="$_changeStage">
|
|
<el-option
|
|
v-for="item in stageSelectList"
|
|
:key="item.stage_code"
|
|
:label="item.stage_name"
|
|
:value="item.stage_code"
|
|
/>
|
|
</el-select>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import ZoomIn from './icon/ZoomIn.vue'
|
|
import ZoomOut from './icon/ZoomOut.vue'
|
|
import StepBack from './icon/StepBack.vue'
|
|
import StepFoward from './icon/StepFoward.vue'
|
|
import AreaSelect from './icon/AreaSelect.vue'
|
|
import crudStage from '@/views/system/logicflow/stage'
|
|
|
|
export default {
|
|
components: {
|
|
ZoomIn,
|
|
ZoomOut,
|
|
StepBack,
|
|
StepFoward,
|
|
AreaSelect
|
|
// SketchPicker: Sketch
|
|
},
|
|
props: {
|
|
lf: Object,
|
|
activeEdges: Array,
|
|
fillColor: {
|
|
type: String,
|
|
default: ''
|
|
}
|
|
},
|
|
data() {
|
|
return {
|
|
selectionOpened: true,
|
|
undoAble: false,
|
|
redoAble: false,
|
|
colors: '#345678',
|
|
linetype: 'pro-polyline',
|
|
lineOptions: [
|
|
{
|
|
value: 'pro-polyline',
|
|
label: '折线'
|
|
},
|
|
{
|
|
value: 'pro-line',
|
|
label: '直线'
|
|
},
|
|
{
|
|
value: 'pro-bezier',
|
|
label: '曲线'
|
|
}
|
|
],
|
|
stage_code: '',
|
|
stageSelectList: []
|
|
}
|
|
},
|
|
created() {
|
|
if (this.selectionOpened) {
|
|
this.lf.extension.selectionSelect.openSelectionSelect()
|
|
}
|
|
},
|
|
mounted() {
|
|
this.initStageList()
|
|
this.$props.lf.on('history:change', ({ data: { undoAble, redoAble }}) => {
|
|
this.$data.redoAble = redoAble
|
|
this.$data.undoAble = undoAble
|
|
})
|
|
},
|
|
methods: {
|
|
initStageList() {
|
|
// 初始化舞台下拉框
|
|
crudStage.selectStageList().then(data => {
|
|
this.stageSelectList = data
|
|
})
|
|
},
|
|
$_changeFillColor(val) {
|
|
this.$emit('changeNodeFillColor', val.hex)
|
|
},
|
|
$_cleanGraph() {
|
|
this.$emit('cleanGraph')
|
|
},
|
|
$_saveGraph() { // 保存,转成js
|
|
this.$emit('saveGraph')
|
|
},
|
|
$_zoomIn() {
|
|
this.$props.lf.zoom(true)
|
|
},
|
|
$_zoomOut() {
|
|
this.$props.lf.zoom(false)
|
|
},
|
|
$_undo() {
|
|
if (this.$data.undoAble) {
|
|
this.$props.lf.undo()
|
|
}
|
|
},
|
|
$_redo() {
|
|
if (this.$data.redoAble) {
|
|
this.$props.lf.redo()
|
|
}
|
|
},
|
|
$_selectionSelect() {
|
|
this.selectionOpened = !this.selectionOpened
|
|
if (this.selectionOpened) {
|
|
this.lf.extension.selectionSelect.openSelectionSelect()
|
|
} else {
|
|
this.lf.extension.selectionSelect.closeSelectionSelect()
|
|
}
|
|
},
|
|
$_changeLineType(value) {
|
|
const { lf, activeEdges } = this.$props
|
|
const { graphModel } = lf
|
|
lf.setDefaultEdgeType(value)
|
|
if (activeEdges && activeEdges.length > 0) {
|
|
activeEdges.forEach(edge => {
|
|
graphModel.changeEdgeType(edge.id, value)
|
|
})
|
|
}
|
|
},
|
|
$_lock() {
|
|
this.$emit('lock')
|
|
},
|
|
$_unlock() {
|
|
this.$emit('unlock')
|
|
},
|
|
$_changeStage(val) { // 选择舞台
|
|
this.$emit('changeStage', val)
|
|
},
|
|
$_verticalAlign() { // 垂直对齐
|
|
this.$emit('verticalAlign')
|
|
},
|
|
$_horizontalAlign() { // 水平对齐
|
|
this.$emit('horizontalAlign')
|
|
},
|
|
$_leftAlign() { // 左对齐
|
|
this.$emit('leftAlign')
|
|
},
|
|
$_rightAlign() { // 右对齐
|
|
this.$emit('rightAlign')
|
|
},
|
|
$_upAlign() {
|
|
this.$emit('upAlign')
|
|
},
|
|
$_downAlign() {
|
|
this.$emit('downAlign')
|
|
},
|
|
$_horizontalDistribution() {
|
|
this.$emit('horizontalDistribution')
|
|
},
|
|
$_verticalDistribution() {
|
|
this.$emit('verticalDistribution')
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style scoped>
|
|
.toolbar-item {
|
|
width: 18px;
|
|
height: 18px;
|
|
float: left;
|
|
margin: 12px 4px;
|
|
cursor: pointer;
|
|
}
|
|
.toolbar-color-picker {
|
|
width: 24px;
|
|
height: 24px;
|
|
margin: 8px 4px;
|
|
}
|
|
.selection-active {
|
|
background: #33a3dc;
|
|
}
|
|
</style>
|
|
|