252 lines
6.5 KiB
Vue
252 lines
6.5 KiB
Vue
<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>
|