From 4ff29e301de38488db0ff04f0209c99e37cf30b4 Mon Sep 17 00:00:00 2001 From: heyujie <516346543@qq.com> Date: 星期二, 07 十二月 2021 18:56:34 +0800 Subject: [PATCH] 对比库管理 --- src/pages/settings/components/CloudNode.vue | 182 ++++++++++++++++++++++++-------------------- 1 files changed, 99 insertions(+), 83 deletions(-) diff --git a/src/pages/settings/components/CloudNode.vue b/src/pages/settings/components/CloudNode.vue index 01e0532..3919710 100644 --- a/src/pages/settings/components/CloudNode.vue +++ b/src/pages/settings/components/CloudNode.vue @@ -2,112 +2,127 @@ <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); + }, }, 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 +137,9 @@ } } .outer { - width: 50%; + width: 40%; position: relative; + text-align: left; .node { position: absolute; } -- Gitblit v1.8.0