From 510b43356f18aa5be351a0990c7cdc1d4478b5e7 Mon Sep 17 00:00:00 2001
From: WXL <1785969728@qq.com>
Date: 星期三, 09 七月 2025 14:27:00 +0800
Subject: [PATCH] 测试完成
---
src/views/patient/viewvant/index.vue | 319 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 312 insertions(+), 7 deletions(-)
diff --git a/src/views/patient/viewvant/index.vue b/src/views/patient/viewvant/index.vue
index 4be3d7a..17601b5 100644
--- a/src/views/patient/viewvant/index.vue
+++ b/src/views/patient/viewvant/index.vue
@@ -1,17 +1,322 @@
<template>
- <div>瑙嗗浘</div>
+ <div class="container_warp">
+ <div id="containerChart"></div>
+ <RightDrawer
+ class="right_drawer"
+ :drawerType="type"
+ :selectCell="selectCell"
+ :graph="graph"
+ :grid="grid"
+ @deleteNode="deleteNode"
+ ></RightDrawer>
+
+ <div class="operating">
+ <div class="btn-group">
+ <div
+ class="btn"
+ title="鍦嗗舰鑺傜偣"
+ @mousedown="startDrag('Circle', $event)"
+ >
+ <i class="iconfont icon-circle"></i>
+ </div>
+ <div
+ class="btn"
+ title="姝f柟褰㈣妭鐐�"
+ @mousedown="startDrag('Rect', $event)"
+ >
+ <i class="iconfont icon-square"></i>
+ </div>
+ <div class="btn" title="鏉′欢鑺傜偣">
+ <i
+ class="iconfont icon-square rotate-square"
+ @mousedown="startDrag('polygon', $event)"
+ ></i>
+ </div>
+ <div class="btn-group_tips" v-if="showTips">
+ 鎷栨嫿鐢熸垚<br />璧勪骇鎷撴墤鍥惧舰
+ </div>
+ </div>
+ <div class="btn-group">
+ <el-tooltip content="鐩寸嚎绠ご" placement="bottom">
+ <div
+ :class="['btn', currentArrow === 1 ? 'currentArrow' : '']"
+ @click="changeEdgeType('normal')"
+ >
+ <i class="iconfont icon-ai28"></i>
+ </div>
+ </el-tooltip>
+ <el-tooltip content="鏇茬嚎绠ご" placement="bottom">
+ <div
+ :class="['btn', currentArrow === 2 ? 'currentArrow' : '']"
+ @click="changeEdgeType('smooth')"
+ >
+ <i class="iconfont icon-Down-Right"></i>
+ </div>
+ </el-tooltip>
+ <el-tooltip content="鐩磋绠ご" placement="bottom">
+ <div
+ :class="['btn', currentArrow === 3 ? 'currentArrow' : '']"
+ @click="changeEdgeType()"
+ >
+ <i class="iconfont icon-jiantou"></i>
+ </div>
+ </el-tooltip>
+ </div>
+ <div class="btn-group">
+ <el-tooltip content="鍒犻櫎" placement="bottom">
+ <div class="btn" @click="deleteNode()" style="margin-top: 5px">
+ <i class="iconfont icon-shanchu"></i>
+ </div>
+ </el-tooltip>
+ <el-tooltip content="淇濆瓨PNG" placement="bottom">
+ <div class="btn" @click="saveToPNG()" title="淇濆瓨">
+ <i class="iconfont icon-baocun"></i>
+ </div>
+ </el-tooltip>
+ </div>
+ </div>
+ </div>
</template>
<script>
+import "@antv/x6-vue-shape";
+import { Graph, Shape, Addon, FunctionExt, DataUri } from "@antv/x6";
+import RightDrawer from "./RightDrawer";
+import insertCss from "insert-css";
+import { startDragToGraph } from "./Graph/methods.js";
+const data = {};
export default {
data() {
- return {};
+ return {
+ graph: "",
+ value1: true,
+ type: "grid",
+ selectCell: "",
+ connectEdgeType: {
+ //杩炵嚎鏂瑰紡
+ connector: "normal",
+ router: {
+ name: "",
+ },
+ },
+ showTips: false,
+ currentArrow: 1,
+ grid: {
+ // 缃戞牸璁剧疆
+ size: 20, // 缃戞牸澶у皬 10px
+ visible: true, // 娓叉煋缃戞牸鑳屾櫙
+ type: "mesh",
+ args: {
+ color: "#D0D0D0",
+ thickness: 1, // 缃戞牸绾垮搴�/缃戞牸鐐瑰ぇ灏�
+ factor: 10,
+ },
+ },
+ };
},
-
- created() {},
-
- methods: {},
+ components: {
+ RightDrawer,
+ },
+ methods: {
+ initX6() {
+ var _that = this;
+ this.graph = new Graph({
+ container: document.getElementById("containerChart"),
+ width: 1700,
+ height: "100%",
+ grid: _that.grid,
+ resizing: {
+ //璋冩暣鑺傜偣瀹介珮
+ enabled: true,
+ orthogonal: false,
+ },
+ selecting: true, //鍙��
+ snapline: true,
+ interacting: {
+ edgeLabelMovable: true,
+ },
+ connecting: {
+ // 鑺傜偣杩炴帴
+ anchor: "center",
+ connectionPoint: "anchor",
+ allowBlank: false,
+ snap: true,
+ createEdge() {
+ return new Shape.Edge({
+ attrs: {
+ line: {
+ stroke: "#1890ff",
+ strokeWidth: 1,
+ targetMarker: {
+ name: "classic",
+ size: 8,
+ },
+ strokeDasharray: 0, //铏氱嚎
+ style: {
+ animation: "ant-line 30s infinite linear",
+ },
+ },
+ },
+ label: {
+ text: "",
+ },
+ connector: _that.connectEdgeType.connector,
+ router: {
+ name: _that.connectEdgeType.router.name || "",
+ },
+ zIndex: 0,
+ });
+ },
+ },
+ highlighting: {
+ magnetAvailable: {
+ name: "stroke",
+ args: {
+ padding: 4,
+ attrs: {
+ strokeWidth: 4,
+ stroke: "#6a6c8a",
+ },
+ },
+ },
+ },
+ });
+ insertCss(`
+ @keyframes ant-line {
+ to {
+ stroke-dashoffset: -1000
+ }
+ }
+ `);
+ this.graph.fromJSON(data);
+ // 閲嶅仛銆俹ptions 灏嗚浼犻�掑埌浜嬩欢鍥炶皟涓��
+ this.graph.history.redo();
+ // 鎾ら攢銆俹ptions 灏嗚浼犻�掑埌浜嬩欢鍥炶皟涓�
+ this.graph.history.undo();
+ // 榧犳爣绉诲叆绉诲嚭鑺傜偣
+ this.graph.on(
+ "node:mouseenter",
+ FunctionExt.debounce(() => {
+ const container = document.getElementById("containerChart");
+ const ports = container.querySelectorAll(".x6-port-body");
+ this.showPorts(ports, true);
+ }),
+ 500
+ );
+ // 榧犳爣绉诲紑鑺傜偣
+ this.graph.on("node:mouseleave", () => {
+ const container = document.getElementById("containerChart");
+ const ports = container.querySelectorAll(".x6-port-body");
+ this.showPorts(ports, false);
+ });
+ // 鍗曞嚮绌虹櫧
+ this.graph.on("blank:click", () => {
+ this.type = "grid";
+ });
+ // 鍗曞嚮鑺傜偣鎴栬竟
+ this.graph.on("cell:click", ({ cell }) => {
+ this.type = cell.isNode() ? "node" : "edge";
+ });
+ // 閫変腑鐨勮妭鐐�/杈瑰彂鐢熸敼鍙�(澧炲垹)鏃惰Е鍙戙��
+ this.graph.on("selection:changed", (args) => {
+ args.added.forEach((cell) => {
+ this.selectCell = cell;
+ if (cell.isEdge()) {
+ cell.isEdge() && cell.attr("line/strokeDasharray", 5); //铏氱嚎铓傝殎绾�
+ cell.addTools([
+ {
+ name: "vertices",
+ args: {
+ padding: 4,
+ attrs: {
+ strokeWidth: 0.1,
+ stroke: "#2d8cf0",
+ fill: "#ffffff",
+ },
+ },
+ },
+ ]);
+ }
+ });
+ args.removed.forEach((cell) => {
+ cell.isEdge() && cell.attr("line/strokeDasharray", 0); //姝e父绾�
+ cell.removeTools();
+ });
+ });
+ },
+ showPorts(ports, show) {
+ for (let i = 0, len = ports.length; i < len; i = i + 1) {
+ ports[i].style.visibility = show ? "visible" : "hidden";
+ }
+ },
+ // 鎷栨嫿鐢熸垚姝f柟褰㈡垨鑰呭渾褰�
+ startDrag(type, e) {
+ startDragToGraph(this.graph, type, e);
+ },
+ // 鍒犻櫎鑺傜偣
+ deleteNode() {
+ const cell = this.graph.getSelectedCells();
+ this.graph.removeCells(cell);
+ this.type = "grid";
+ },
+ // 淇濆瓨png
+ saveToPNG() {
+ this.$nextTick(() => {
+ this.graph.toPNG(
+ (dataUri) => {
+ // 涓嬭浇
+ DataUri.downloadDataUri(dataUri, "璧勪骇鎷撴墤鍥�.png");
+ },
+ {
+ backgroundColor: "white",
+ padding: {
+ top: 50,
+ right: 50,
+ bottom: 50,
+ left: 50,
+ },
+ quality: 1,
+ copyStyles: false,
+ }
+ );
+ });
+ },
+ // 鏀瑰彉杈瑰舰鐘�
+ changeEdgeType(e) {
+ if (e === "normal") {
+ this.connectEdgeType = {
+ connector: "normal",
+ router: { name: "" },
+ };
+ this.currentArrow = 1;
+ } else if (e === "smooth") {
+ this.connectEdgeType = {
+ connector: "smooth",
+ router: { name: "" },
+ };
+ this.currentArrow = 2;
+ } else {
+ this.connectEdgeType = {
+ connector: "normal",
+ router: { name: "manhattan" },
+ };
+ this.currentArrow = 3;
+ }
+ },
+ },
+ mounted() {
+ this.initX6();
+ setTimeout(() => {
+ this.showTips = true;
+ }, 1000);
+ setTimeout(() => {
+ this.showTips = false;
+ }, 5000);
+ },
};
</script>
-<style lang="scss" scoped></style>
+<style lang="scss">
+@import "./iconfont.css";
+@import "./index.scss";
+</style>
--
Gitblit v1.9.3