<template>
|
<div class="drawer_container">
|
<div v-if="drawerType === 'grid'">
|
<div class="drawer_title">画布背景设置</div>
|
<div class="drawer_wrap">
|
<el-form label-position="left" label-width="85px">
|
<el-form-item label="是否显示网格" label-width="100px">
|
<el-switch v-model="showGrid" @change="changeGrid" />
|
</el-form-item>
|
<div v-show="showGrid">
|
<el-form-item label="网格类型">
|
<el-radio-group v-model="grid.type" @change="changeGridcardtype">
|
<el-radio
|
v-for="item in gridcardtypeList"
|
:label="item.value"
|
:key="item.value"
|
>
|
<span>{{ item.label }}</span>
|
</el-radio>
|
</el-radio-group>
|
</el-form-item>
|
<el-form-item label-width="70px" label="网格大小">
|
<el-slider
|
v-model="grid.size"
|
:min="0"
|
:max="30"
|
@change="changeGrid"
|
></el-slider>
|
</el-form-item>
|
<el-form-item label="网格颜色">
|
<el-color-picker v-model="grid.args.color" @change="changeGrid" />
|
</el-form-item>
|
<el-form-item label-width="85px" label="网格线宽度">
|
<el-slider
|
v-model="grid.args.thickness"
|
:min="0"
|
:max="20"
|
@change="changeGrid"
|
></el-slider>
|
</el-form-item>
|
</div>
|
</el-form>
|
</div>
|
</div>
|
<div v-if="drawerType === 'node'">
|
<div class="drawer_title">任务节点设置</div>
|
<div class="drawer_wrap">
|
<el-form label-position="left" label-width="80px">
|
<el-form-item label="任务名称">
|
<el-input
|
v-model="drawerNode.nodeText"
|
@change="changeNodeText"
|
></el-input>
|
</el-form-item>
|
<el-form-item label="任务执行人" label-width="80px">
|
<el-input
|
v-model="drawerNode.nodeText"
|
@change="changeNodeText"
|
></el-input>
|
</el-form-item>
|
<el-form-item label="节点背景">
|
<el-color-picker v-model="drawerNode.fill" @change="changeFill" />
|
</el-form-item>
|
<el-form-item label-width="70px" label="字体大小">
|
<el-slider
|
v-model="drawerNode.fontSize"
|
:min="10"
|
:max="20"
|
@change="changefontSize"
|
></el-slider>
|
</el-form-item>
|
<el-form-item label="字体颜色">
|
<el-color-picker
|
v-model="drawerNode.fontFill"
|
@change="changeFontFill"
|
/>
|
</el-form-item>
|
<el-form-item label-width="70px" label="边框宽度">
|
<el-slider
|
v-model="drawerNode.strokeWidth"
|
:min="0"
|
:max="10"
|
@change="changeStrokeWidth"
|
></el-slider>
|
</el-form-item>
|
<el-form-item label="边框颜色">
|
<el-color-picker
|
v-model="drawerNode.stroke"
|
@change="changeStroke"
|
/>
|
</el-form-item>
|
<el-form-item label="功能">
|
<el-button type="primary" icon="el-icon-upload" @click="toTopZIndex"
|
>置顶</el-button
|
>
|
<el-button
|
type="danger"
|
class="margin-left-10"
|
icon="el-icon-delete"
|
@click="deleteNode"
|
>删除</el-button
|
>
|
</el-form-item>
|
</el-form>
|
<el-button
|
type="success"
|
class="margin-left-10"
|
icon="el-icon-download"
|
@click="exportData"
|
>保存</el-button
|
>
|
</div>
|
</div>
|
<div v-if="drawerType === 'edge'">
|
<div class="drawer_title">线条设置</div>
|
<div class="drawer_wrap">
|
<el-form label-position="left" label-width="80px">
|
<el-form-item label="线条文本">
|
<el-input
|
v-model="drawerEdge.EdgeText"
|
@change="changeEdgeText"
|
></el-input>
|
</el-form-item>
|
<el-form-item label="线条宽度" label-width="80px">
|
<el-slider
|
v-model="drawerEdge.edgeWidth"
|
:min="1"
|
:max="10"
|
@change="changeEdgeWidth"
|
></el-slider>
|
</el-form-item>
|
<el-form-item label="线条颜色">
|
<el-color-picker
|
v-model="drawerEdge.edgeColor"
|
@change="changeEdgeColor"
|
/>
|
</el-form-item>
|
<el-form-item label="功能">
|
<el-button type="primary" icon="el-icon-upload" @click="toTopZIndex"
|
>置顶</el-button
|
>
|
<el-button
|
type="danger"
|
class="margin-left-10"
|
icon="el-icon-delete"
|
@click="deleteNode"
|
>删除</el-button
|
>
|
</el-form-item>
|
</el-form>
|
<el-button
|
type="success"
|
class="margin-left-10"
|
icon="el-icon-download"
|
@click="exportData"
|
>保存</el-button
|
>
|
</div>
|
</div>
|
</div>
|
</template>
|
|
<script>
|
export default {
|
name: "RightDrawer",
|
data() {
|
return {
|
gridcardtypeList: [
|
{
|
label: "四边网格",
|
value: "mesh",
|
},
|
{
|
label: "点状网格",
|
value: "dot",
|
},
|
],
|
baseData: "",
|
showGrid: true,
|
drawerNode: {
|
fill: "",
|
nodeText: "",
|
fontSize: null,
|
fontFill: "",
|
strokeWidth: null,
|
stroke: "",
|
},
|
drawerEdge: {
|
EdgeText: "",
|
edgeWidth: null,
|
edgeColor: "",
|
},
|
};
|
},
|
props: {
|
drawerType: {
|
type: String,
|
},
|
selectCell: {
|
type: String | Object,
|
},
|
graph: {
|
type: String | Object,
|
},
|
grid: {
|
type: Object,
|
},
|
},
|
created() {},
|
mounted() {},
|
watch: {
|
selectCell: {
|
handler(val) {
|
if (val) {
|
if (val.isNode()) {
|
//节点
|
this.drawerNode.fill = val.store.data.attrs.body.fill;
|
this.drawerNode.nodeText = val.store.data.attrs.label.text;
|
this.drawerNode.fontFill = val.store.data.attrs.label.fill;
|
this.drawerNode.fontSize = Number(
|
val.store.data.attrs.label.fontSize
|
);
|
this.drawerNode.strokeWidth = Number(
|
val.store.data.attrs.body.strokeWidth
|
);
|
this.drawerNode.stroke = val.store.data.attrs.body.stroke;
|
} else {
|
//边
|
this.drawerEdge.EdgeText = val.store.data.labels
|
? val.store.data.labels[0].text
|
: "";
|
this.drawerEdge.edgeWidth = Number(
|
val.store.data.attrs.line.strokeWidth
|
);
|
this.drawerEdge.edgeColor = val.store.data.attrs.line.stroke;
|
}
|
}
|
},
|
immediate: true,
|
deep: false,
|
},
|
},
|
methods: {
|
// 网格设置
|
changeGrid() {
|
this.showGrid ? this.graph.showGrid() : this.graph.hideGrid();
|
},
|
changeGridcardtype(e) {
|
this.grid.type = e;
|
this.changeGrid();
|
},
|
changeGrid() {
|
this.graph.drawGrid({
|
...this.grid,
|
});
|
},
|
// 节点设置
|
changeStrokeWidth(val) {
|
this.selectCell.attr("body/strokeWidth", val);
|
},
|
changefontSize(val) {
|
this.selectCell.attr("label/fontSize", val);
|
},
|
changeNodeText() {
|
this.selectCell.attr("label/text", this.drawerNode.nodeText);
|
},
|
changeStroke(val) {
|
this.drawerNode.stroke = val;
|
this.selectCell.attr("body/stroke", this.drawerNode.stroke);
|
},
|
changeFontFill(val) {
|
this.drawerNode.fontFill = val;
|
this.selectCell.attr("label/fill", this.drawerNode.fontFill);
|
},
|
changeFill(val) {
|
this.drawerNode.fill = val;
|
this.selectCell.attr("body/fill", val);
|
},
|
// 边设置
|
changeEdgeText() {
|
console.log(this.drawerEdge.EdgeText);
|
this.selectCell.setLabels([
|
{ attrs: { label: { text: this.drawerEdge.EdgeText } } },
|
]);
|
},
|
changeEdgeWidth(val) {
|
this.drawerEdge.edgeWidth = val;
|
this.selectCell.attr("line/strokeWidth", this.drawerEdge.edgeWidth);
|
},
|
changeEdgeColor(val) {
|
this.drawerEdge.stroke = val;
|
this.selectCell.attr("line/stroke", this.drawerEdge.stroke);
|
},
|
// 置顶
|
toTopZIndex() {
|
this.selectCell.toFront();
|
},
|
// 删除
|
deleteNode() {
|
this.$emit("deleteNode");
|
},
|
// 导出数据
|
exportData() {
|
this.baseData = this.graph.toJSON();
|
console.log(this.baseData);
|
},
|
// 导入数据
|
importData() {
|
this.graph.fromJSON(this.baseData);
|
},
|
},
|
};
|
</script>
|
|
<style lang="scss" scoped>
|
.drawer_container {
|
max-width: 300px;
|
min-width: 300px;
|
.drawer_title {
|
border-bottom: 1px solid #e8eaec;
|
box-sizing: border-box;
|
padding: 14px 16px;
|
color: #333;
|
font-size: 16px;
|
}
|
.drawer_wrap {
|
box-sizing: border-box;
|
padding: 20px 10px 20px 20px;
|
}
|
}
|
</style>
|