From b5e2e236828b7fbc0e8f2bdbf66651ad8907e3b1 Mon Sep 17 00:00:00 2001
From: heyujie <516346543@qq.com>
Date: 星期三, 21 七月 2021 16:40:17 +0800
Subject: [PATCH] all
---
src/pages/settings/components/CloudNode.vue | 183 +++++++++++++++++++++++++--------------------
1 files changed, 100 insertions(+), 83 deletions(-)
diff --git a/src/pages/settings/components/CloudNode.vue b/src/pages/settings/components/CloudNode.vue
index 01e0532..800651a 100644
--- a/src/pages/settings/components/CloudNode.vue
+++ b/src/pages/settings/components/CloudNode.vue
@@ -2,112 +2,128 @@
<div class="cloud">
<div class="inner">
<div class="rect">
- <div
- class="node"
- v-for="(item,index) in insideNodes"
- :key="item.id"
- :style="{top:36*(index+1)+'px',left:60*(index+1)+'px'}"
- >
- <span class="node-icon">
- <!-- <img :src="nodeIcons[item.workType]" alt=""> -->
- </span>
- <span class="node-name">{{item.nodeName}}</span>
- </div>
+ <serfDiagram
+ ref="inside-nodes"
+ :members="insideNodes"
+ :agent="agentName"
+ :sizeX="insideSizeX"
+ :sizeY="insideSizeY"
+ :startX="insideStartX"
+ :isShowHover="true"
+ class="inside-nodes"
+ ></serfDiagram>
</div>
</div>
- <div class="outer">
- <div
- class="node"
- v-for="(item,index) in insideNodes"
- :key="item.id"
- :style="{top:36*(index+1)+'px',left:80*(index+1)+'px'}"
- >
- <span class="node-icon">
- <!-- <img :src="nodeIcons[item.workType]" alt=""> -->
- </span>
- <span class="node-name">{{item.nodeName}}</span>
- </div>
+ <div class="outer" v-if="outsideNodes.length">
+ <serfDiagram
+ ref="outer-nodes"
+ :members="outsideNodes"
+ :agent="agentName"
+ :sizeX="280"
+ :sizeY="370"
+ :startX="60"
+ class="outer-nodes"
+ ></serfDiagram>
</div>
</div>
</template>
<script>
+import SerfDiagram from "@/components/serfDiagram";
export default {
- name: 'cloudNode',
+ name: "cloudNode",
props: {
- nodes: Array
+ nodes: Array,
},
- data () {
+ components: {
+ SerfDiagram,
+ },
+ data() {
return {
-
+ agentName: "",
nodeIcons: [],
- mockData: [
- {
- cluster_id: "b6132bfe-d3af-4710-ba89-436f614c2f46",
- hardwareType: "01",
- id: "DSVAD010120190622",
- node_id: "DSVAD010120190622",
- node_ip: "192.168.20.10:30190",
- nodeName: "寮�鍙�20.10-1",
- role: 'pc'
- },
- {
- cluster_id: "b6132bfe-d3af-4710-ba89-436f614c2f",
- hardwareType: "02",
- id: "DSVAD010120190623",
- node_id: "DSVAD010120190623",
- node_ip: "192.168.20.10:30190",
- nodeName: "寮�鍙戞祴璇�20.10-1",
- role: 'master'
- },
- {
- cluster_id: "b6132bfe-d3af-4710-ba89-436f614c2g",
- hardwareType: "03",
- id: "DSVAD010120190624",
- node_id: "DSVAD010120190624",
- node_ip: "192.168.20.10:30190",
- nodeName: "娴嬭瘯20.10-1",
- role: 'pc'
- },
- {
- cluster_id: "b6132bfe-d3af-4710-ba89-436f614c2h",
- hardwareType: "03",
- id: "DSVAD010120190625",
- node_id: "DSVAD010120190625",
- node_ip: "192.168.20.10:30190",
- nodeName: "娴嬭瘯20.101-1",
- role: 'server'
- },
- ]
- }
+ //insideNodes: [],
+ BaseWidth: 150,
+ BaseHeight: 70,
+ minWidth: 0,
+ minHeight: 0,
+ };
+ },
+ mounted() {
+ console.log(this.nodes);
+ //this.getInsideNodes();
+ },
+ methods: {
+ getRandom(index) {
+ if (index % 2 == 0) {
+ return Math.random() * 20;
+ } else {
+ return Math.random() * 50;
+ }
+ },
+ getInsideNodes() {
+ let arr = this.nodes.filter(
+ (item) => item.hardwareType == "01" || item.hardwareType == "02"
+ );
+ let len = arr.length;
+ let lefts = [];
+ let tops = [];
+ this.insideNodes = arr.map((item, index) => {
+ lefts.push((20 - len) * (index + 1) + this.getRandom(index));
+ tops.push(30 * (index + 1));
+ return {
+ l: 10 + this.getRandom(index),
+ t: 30 * (index + 1),
+ nodeName: item.nodeName,
+ id: item.id,
+ workType: item.workType,
+ };
+ });
+ this.minWidth = Math.max(...lefts) - Math.min(...lefts);
+ this.minHeight = Math.max(...tops) - Math.min(...tops);
+ console.log("w,h", this.minWidth, this.minHeight);
+ },
},
computed: {
- cloudPic () {
- return '/images/settings/cloud.png'
+ cloudPic() {
+ return "/images/settings/cloud.png";
},
- insideNodes () {
- //return this.nodes.filter(item=>item.hardwareType=='01'||item.hardwareType=='02');
- return this.mockData.filter(item => item.hardwareType == '01' || item.hardwareType == '02');
+ insideNodes() {
+ return this.nodes.filter(
+ (item) => item.hardwareType == "01" || item.hardwareType == "02"
+ );
},
- outsideNodes () {
- //return this.nodes.filter(item=>item.hardwareType=='03');
- return this.mockData.filter(item => item.hardwareType == '03');
- }
- }
-}
+ insideSizeX() {
+ return 160 + 200 * 0.2 * this.insideNodes.length <= 400
+ ? 160 + 200 * 0.2 * this.insideNodes.length
+ : 400;
+ },
+ insideSizeY() {
+ return 140 + 200 * 0.2 * this.insideNodes.length <= 380
+ ? 140 + 200 * 0.2 * this.insideNodes.length
+ : 380;
+ },
+ insideStartX() {
+ return this.insideSizeX / 3;
+ },
+ outsideNodes() {
+ return this.nodes.filter((item) => item.hardwareType == "03");
+ },
+ },
+};
</script>
<style lang="scss">
.cloud {
width: 100%;
- height: 500px;
display: flex;
.inner {
- background: url('/images/settings/cloud.png') no-repeat;
+ background: url("/images/settings/easy-cloud.png") no-repeat;
background-size: 100%;
- width: 50%;
+ margin-top: -55px;
+ margin-left: 55px;
+
.rect {
- margin: 100px;
- background: cornflowerblue;
position: relative;
+ margin: 130px 100px 70px;
.node {
position: absolute;
.node-icon {
@@ -122,8 +138,9 @@
}
}
.outer {
- width: 50%;
+ width: 40%;
position: relative;
+ text-align: left;
.node {
position: absolute;
}
--
Gitblit v1.8.0