From f5a09cede01d89adce1b6bc4854ccd5474113cdf Mon Sep 17 00:00:00 2001 From: nagocoler Date: Tue, 12 Dec 2023 19:13:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E6=9C=8D=E5=8A=A1=E5=99=A8?= =?UTF-8?q?=E8=AF=A6=E7=BB=86=E4=BF=A1=E6=81=AF=E5=B1=95=E7=A4=BA=E6=A8=A1?= =?UTF-8?q?=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/controller/MonitorController.java | 13 + .../entity/vo/request/RenameNodeVO.java | 14 ++ .../entity/vo/response/ClientDetailsVO.java | 19 ++ .../com/example/service/ClientService.java | 4 + .../service/impl/ClientServiceImpl.java | 23 +- itbaima-monitor-web/package-lock.json | 198 +++++++++++++++ itbaima-monitor-web/package.json | 1 + itbaima-monitor-web/public/cpu-icons/AMD.png | Bin 0 -> 22237 bytes .../public/cpu-icons/Apple.png | Bin 0 -> 14654 bytes .../public/cpu-icons/Intel.png | Bin 0 -> 9957 bytes .../src/assets/css/element.less | 53 ++++ .../src/component/ClientDetails.vue | 228 ++++++++++++++++++ .../src/component/PreviewCard.vue | 52 ++-- itbaima-monitor-web/src/main.js | 1 + itbaima-monitor-web/src/tools/index.js | 59 ++++- itbaima-monitor-web/src/views/main/Manage.vue | 29 ++- 16 files changed, 653 insertions(+), 41 deletions(-) create mode 100644 itbaima-monitor-server/src/main/java/com/example/entity/vo/request/RenameNodeVO.java create mode 100644 itbaima-monitor-server/src/main/java/com/example/entity/vo/response/ClientDetailsVO.java create mode 100644 itbaima-monitor-web/public/cpu-icons/AMD.png create mode 100644 itbaima-monitor-web/public/cpu-icons/Apple.png create mode 100644 itbaima-monitor-web/public/cpu-icons/Intel.png create mode 100644 itbaima-monitor-web/src/assets/css/element.less create mode 100644 itbaima-monitor-web/src/component/ClientDetails.vue diff --git a/itbaima-monitor-server/src/main/java/com/example/controller/MonitorController.java b/itbaima-monitor-server/src/main/java/com/example/controller/MonitorController.java index 4ba7f8b..8ecb667 100644 --- a/itbaima-monitor-server/src/main/java/com/example/controller/MonitorController.java +++ b/itbaima-monitor-server/src/main/java/com/example/controller/MonitorController.java @@ -2,6 +2,8 @@ package com.example.controller; import com.example.entity.RestBean; import com.example.entity.vo.request.RenameClientVO; +import com.example.entity.vo.request.RenameNodeVO; +import com.example.entity.vo.response.ClientDetailsVO; import com.example.entity.vo.response.ClientPreviewVO; import com.example.service.ClientService; import jakarta.annotation.Resource; @@ -27,4 +29,15 @@ public class MonitorController { service.renameClient(vo); return RestBean.success(); } + + @PostMapping("/node") + public RestBean renameNode(@RequestBody @Valid RenameNodeVO vo) { + service.renameNode(vo); + return RestBean.success(); + } + + @GetMapping("/details") + public RestBean details(int clientId) { + return RestBean.success(service.clientDetails(clientId)); + } } diff --git a/itbaima-monitor-server/src/main/java/com/example/entity/vo/request/RenameNodeVO.java b/itbaima-monitor-server/src/main/java/com/example/entity/vo/request/RenameNodeVO.java new file mode 100644 index 0000000..7350571 --- /dev/null +++ b/itbaima-monitor-server/src/main/java/com/example/entity/vo/request/RenameNodeVO.java @@ -0,0 +1,14 @@ +package com.example.entity.vo.request; + +import jakarta.validation.constraints.Pattern; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +@Data +public class RenameNodeVO { + int id; + @Length(min = 1, max = 10) + String node; + @Pattern(regexp = "(cn|hk|jp|us|sg|kr|de)") + String location; +} diff --git a/itbaima-monitor-server/src/main/java/com/example/entity/vo/response/ClientDetailsVO.java b/itbaima-monitor-server/src/main/java/com/example/entity/vo/response/ClientDetailsVO.java new file mode 100644 index 0000000..8d01714 --- /dev/null +++ b/itbaima-monitor-server/src/main/java/com/example/entity/vo/response/ClientDetailsVO.java @@ -0,0 +1,19 @@ +package com.example.entity.vo.response; + +import lombok.Data; + +@Data +public class ClientDetailsVO { + int id; + String name; + boolean online; + String node; + String location; + String ip; + String cpuName; + String osName; + String osVersion; + double memory; + int cpuCore; + double disk; +} diff --git a/itbaima-monitor-server/src/main/java/com/example/service/ClientService.java b/itbaima-monitor-server/src/main/java/com/example/service/ClientService.java index 089a6fd..4346e08 100644 --- a/itbaima-monitor-server/src/main/java/com/example/service/ClientService.java +++ b/itbaima-monitor-server/src/main/java/com/example/service/ClientService.java @@ -4,7 +4,9 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.example.entity.dto.Client; import com.example.entity.vo.request.ClientDetailVO; import com.example.entity.vo.request.RenameClientVO; +import com.example.entity.vo.request.RenameNodeVO; import com.example.entity.vo.request.RuntimeDetailVO; +import com.example.entity.vo.response.ClientDetailsVO; import com.example.entity.vo.response.ClientPreviewVO; import java.util.List; @@ -18,4 +20,6 @@ public interface ClientService extends IService { void updateRuntimeDetail(RuntimeDetailVO vo, Client client); List listClients(); void renameClient(RenameClientVO vo); + void renameNode(RenameNodeVO vo); + ClientDetailsVO clientDetails(int clientId); } diff --git a/itbaima-monitor-server/src/main/java/com/example/service/impl/ClientServiceImpl.java b/itbaima-monitor-server/src/main/java/com/example/service/impl/ClientServiceImpl.java index a38bc07..0e49858 100644 --- a/itbaima-monitor-server/src/main/java/com/example/service/impl/ClientServiceImpl.java +++ b/itbaima-monitor-server/src/main/java/com/example/service/impl/ClientServiceImpl.java @@ -6,7 +6,9 @@ import com.example.entity.dto.Client; import com.example.entity.dto.ClientDetail; import com.example.entity.vo.request.ClientDetailVO; import com.example.entity.vo.request.RenameClientVO; +import com.example.entity.vo.request.RenameNodeVO; import com.example.entity.vo.request.RuntimeDetailVO; +import com.example.entity.vo.response.ClientDetailsVO; import com.example.entity.vo.response.ClientPreviewVO; import com.example.mapper.ClientDetailMapper; import com.example.mapper.ClientMapper; @@ -95,7 +97,7 @@ public class ClientServiceImpl extends ServiceImpl impleme ClientPreviewVO vo = client.asViewObject(ClientPreviewVO.class); BeanUtils.copyProperties(detailMapper.selectById(vo.getId()), vo); RuntimeDetailVO runtime = currentRuntime.get(client.getId()); - if(runtime != null && System.currentTimeMillis() - runtime.getTimestamp() < 60 * 1000) { + if(this.isOnline(runtime)) { BeanUtils.copyProperties(runtime, vo); vo.setOnline(true); } @@ -109,6 +111,25 @@ public class ClientServiceImpl extends ServiceImpl impleme this.initClientCache(); } + @Override + public void renameNode(RenameNodeVO vo) { + this.update(Wrappers.update().eq("id", vo.getId()) + .set("node", vo.getNode()).set("location", vo.getLocation())); + this.initClientCache(); + } + + @Override + public ClientDetailsVO clientDetails(int clientId) { + ClientDetailsVO vo = this.clientIdCache.get(clientId).asViewObject(ClientDetailsVO.class); + BeanUtils.copyProperties(detailMapper.selectById(clientId), vo); + vo.setOnline(this.isOnline(currentRuntime.get(clientId))); + return vo; + } + + private boolean isOnline(RuntimeDetailVO runtime) { + return runtime != null && System.currentTimeMillis() - runtime.getTimestamp() < 60 * 1000; + } + private void addClientCache(Client client) { clientIdCache.put(client.getId(), client); clientTokenCache.put(client.getToken(), client); diff --git a/itbaima-monitor-web/package-lock.json b/itbaima-monitor-web/package-lock.json index 3fff73e..d4982e8 100644 --- a/itbaima-monitor-web/package-lock.json +++ b/itbaima-monitor-web/package-lock.json @@ -18,6 +18,7 @@ }, "devDependencies": { "@vitejs/plugin-vue": "^4.2.3", + "less": "^4.2.0", "unplugin-auto-import": "^0.15.2", "unplugin-vue-components": "^0.24.1", "vite": "^4.4.6" @@ -823,6 +824,15 @@ "node": ">= 0.8" } }, + "node_modules/copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "dependencies": { + "is-what": "^3.14.1" + } + }, "node_modules/csstype": { "version": "3.1.2", "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.2.tgz", @@ -956,6 +966,19 @@ } } }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmmirror.com/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, "node_modules/esbuild": { "version": "0.18.17", "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.18.17.tgz", @@ -1113,6 +1136,13 @@ "node": ">= 6" } }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "optional": true + }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmmirror.com/has/-/has-1.0.3.tgz", @@ -1125,6 +1155,32 @@ "node": ">= 0.4.0" } }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmmirror.com/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -1176,12 +1232,44 @@ "node": ">=0.12.0" } }, + "node_modules/is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmmirror.com/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true + }, "node_modules/jsonc-parser": { "version": "3.2.0", "resolved": "https://registry.npmmirror.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz", "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", "dev": true }, + "node_modules/less": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/less/-/less-4.2.0.tgz", + "integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==", + "dev": true, + "dependencies": { + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "source-map": "~0.6.0" + } + }, "node_modules/local-pkg": { "version": "0.4.3", "resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.4.3.tgz", @@ -1222,6 +1310,20 @@ "node": ">=12" } }, + "node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "optional": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/memoize-one": { "version": "6.0.0", "resolved": "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz", @@ -1249,6 +1351,19 @@ "node": ">=8.6" } }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", @@ -1309,6 +1424,23 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/needle": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/needle/-/needle-3.3.1.tgz", + "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", + "dev": true, + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", @@ -1323,6 +1455,15 @@ "resolved": "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz", "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==" }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz", @@ -1349,6 +1490,16 @@ "node": ">=8.6" } }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=6" + } + }, "node_modules/pkg-types": { "version": "1.0.3", "resolved": "https://registry.npmmirror.com/pkg-types/-/pkg-types-1.0.3.tgz", @@ -1378,6 +1529,13 @@ "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "optional": true + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -1445,12 +1603,46 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "optional": true + }, + "node_modules/sax": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==", + "dev": true, + "optional": true + }, "node_modules/scule": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/scule/-/scule-1.0.0.tgz", "integrity": "sha512-4AsO/FrViE/iDNEPaAQlb77tf0csuq27EsVpy6ett584EcRTp6pTDLoGWVxCD77y5iU5FauOvhsI4o1APwPoSQ==", "dev": true }, + "node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "optional": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz", @@ -1489,6 +1681,12 @@ "node": ">=8.0" } }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, "node_modules/ufo": { "version": "1.2.0", "resolved": "https://registry.npmmirror.com/ufo/-/ufo-1.2.0.tgz", diff --git a/itbaima-monitor-web/package.json b/itbaima-monitor-web/package.json index 958668a..7e83c71 100644 --- a/itbaima-monitor-web/package.json +++ b/itbaima-monitor-web/package.json @@ -18,6 +18,7 @@ }, "devDependencies": { "@vitejs/plugin-vue": "^4.2.3", + "less": "^4.2.0", "unplugin-auto-import": "^0.15.2", "unplugin-vue-components": "^0.24.1", "vite": "^4.4.6" diff --git a/itbaima-monitor-web/public/cpu-icons/AMD.png b/itbaima-monitor-web/public/cpu-icons/AMD.png new file mode 100644 index 0000000000000000000000000000000000000000..1afc461d5c89158a64c2de62d2061fe00691fa05 GIT binary patch literal 22237 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

Vm|w<1BL6WIxh4i%@oag!`F_O49+JYl~7 Z{{#15*wW_LDbKx{{e$TG==XQ=GMRQIOeK2vcZt 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 _Sv}ex&9UI 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 literal 0 HcmV?d00001 diff --git a/itbaima-monitor-web/public/cpu-icons/Intel.png b/itbaima-monitor-web/public/cpu-icons/Intel.png new file mode 100644 index 0000000000000000000000000000000000000000..331a8410c3e47a365bc889f5e5b6bacf9856d459 GIT binary patch literal 9957 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 +import {reactive, watch} from "vue"; +import {get, post} from "@/net"; +import {copyIp, cpuNameToImage, osNameToIcon, rename} from "@/tools"; +import {ElMessage} from "element-plus"; + +const locations = [ + {name: 'cn', desc: '中国大陆'}, + {name: 'hk', desc: '香港'}, + {name: 'jp', desc: '日本'}, + {name: 'us', desc: '美国'}, + {name: 'sg', desc: '新加坡'}, + {name: 'kr', desc: '韩国'}, + {name: 'de', desc: '德国'} +] + +const props = defineProps({ + id: Number, + update: Function +}) + +const details = reactive({ + base: {}, + runtime: {}, + editNode: false +}) +const nodeEdit = reactive({ + name: '', + location: '' +}) +const enableNodeEdit = () => { + details.editNode = true + nodeEdit.name = details.base.node + nodeEdit.location = details.base.location +} +const submitNodeEdit = () => { + post('/api/monitor/node', { + id: props.id, + node: nodeEdit.name, + location: nodeEdit.location + }, () => { + details.editNode = false + updateDetails() + ElMessage.success('节点信息已更新') + }) +} + +function updateDetails() { + props.update() + init(props.id) +} +const init = id => { + if(id !== -1) { + details.base = {} + get(`/api/monitor/details?clientId=${id}`, data => Object.assign(details.base, data)) + } +} +watch(() => props.id, init, { immediate: true }) + + + + + diff --git a/itbaima-monitor-web/src/component/PreviewCard.vue b/itbaima-monitor-web/src/component/PreviewCard.vue index 435484d..b5807c9 100644 --- a/itbaima-monitor-web/src/component/PreviewCard.vue +++ b/itbaima-monitor-web/src/component/PreviewCard.vue @@ -1,33 +1,10 @@