diff --git a/.env.ourbmc b/.env.ourbmc
new file mode 100644
index 0000000000000000000000000000000000000000..0ff6fe8308dcb83bc908e2aa149981adb311da43
--- /dev/null
+++ b/.env.ourbmc
@@ -0,0 +1,13 @@
+NODE_ENV=production
+VUE_APP_ENV_NAME='ourbmc'
+VUE_APP_COMPANY_NAME="OurBMC"
+VUE_APP_GUI_NAME="BMC System Management"
+CUSTOM_STYLES=true
+CUSTOM_APP_NAV=true
+CUSTOM_ROUTER=true
+CUSTOM_STORE=true
+VUE_APP_SERVER_OFF_REQUIRED=false
+VUE_APP_VIRTUAL_MEDIA_LIST_ENABLED=false
+VUE_APP_RESET_SERVER_OPTION_ENABLE=false
+VUE_APP_LOGS_DUMPS=false
+VUE_APP_EVENT_LOGS_DELETE_BUTTON_DISABLED=true
\ No newline at end of file
diff --git a/.eslintrc.js b/.eslintrc.js
index 99c1e669c64bab227d23b52b5f147ad19b498bd2..d4b86f0b6666f8f2191105d9c3498f60f0502aac 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -16,6 +16,7 @@ module.exports = {
{
singleQuote: true,
trailingComma: 'all',
+ endOfLine: 'auto',
},
],
'vue/component-name-in-template-casing': ['error', 'kebab-case'],
diff --git a/package-lock.json b/package-lock.json
index 922db5b5e028b3a4a5d49a9a68b2fecf5af1bede..2de19688c409546be25d9106e4d18901d359f35b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,6 +9,7 @@
"version": "0.1.0",
"dependencies": {
"@carbon/icons-vue": "10.49.1",
+ "@element-plus/icons-vue": "2.3.1",
"@novnc/novnc": "1.3.0",
"@vue/compat": "3.4.29",
"@vue/vue3-jest": "27.0.0",
@@ -17,14 +18,20 @@
"axios": "1.6.0",
"axios-cache-interceptor": "1.5.1",
"bootstrap": "4.6.2",
+ "bootstrap-icons": "1.13.1",
"bootstrap-vue": "2.23.1",
"core-js": "3.23.4",
"date-fns": "2.28.0",
"date-fns-tz": "1.3.6",
+ "echarts": "5.6.0",
+ "element-plus": "2.9.10",
+ "html2canvas": "1.4.1",
"js-cookie": "3.0.1",
"lodash": "4.17.21",
+ "recordrtc": "5.6.2",
+ "screenfull": "6.0.2",
"vue": "3.4.29",
- "vue-i18n": "9.13.1",
+ "vue-i18n": "10.0.5",
"vue-loader": "17.4.2",
"vue-router": "4.4.0",
"vuelidate": "0.7.7",
@@ -35,7 +42,6 @@
"xterm-addon-fit": "0.5.0"
},
"devDependencies": {
- "@intlify/vue-i18n-loader": "4.2.0",
"@vue/cli-plugin-babel": "5.0.8",
"@vue/cli-plugin-eslint": "5.0.8",
"@vue/cli-plugin-router": "5.0.8",
@@ -55,11 +61,12 @@
"eslint-plugin-vue": "9.2.0",
"eslint-scope": "7.1.1",
"lint-staged": "13.0.3",
+ "postcss": "8.5.5",
"postcss-loader": "8.1.1",
"prettier": "3.2.5",
"sass": "1.75.0",
"sass-loader": "14.2.1",
- "vue-cli-plugin-i18n": "2.3.1",
+ "tailwindcss": "4.1.10",
"vue-style-loader": "4.1.3",
"vue-svg-inline-loader": "2.1.5",
"vuepress": "1.9.7"
@@ -1908,6 +1915,15 @@
"@carbon/icon-helpers": "^10.29.0"
}
},
+ "node_modules/@ctrl/tinycolor": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz",
+ "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/@discoveryjs/json-ext": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz",
@@ -1916,6 +1932,15 @@
"node": ">=10.0.0"
}
},
+ "node_modules/@element-plus/icons-vue": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz",
+ "integrity": "sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==",
+ "license": "MIT",
+ "peerDependencies": {
+ "vue": "^3.2.0"
+ }
+ },
"node_modules/@eslint/eslintrc": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz",
@@ -1984,6 +2009,31 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/@floating-ui/core": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmmirror.com/@floating-ui/core/-/core-1.7.3.tgz",
+ "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==",
+ "license": "MIT",
+ "dependencies": {
+ "@floating-ui/utils": "^0.2.10"
+ }
+ },
+ "node_modules/@floating-ui/dom": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.7.4.tgz",
+ "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==",
+ "license": "MIT",
+ "dependencies": {
+ "@floating-ui/core": "^1.7.3",
+ "@floating-ui/utils": "^0.2.10"
+ }
+ },
+ "node_modules/@floating-ui/utils": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.10.tgz",
+ "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==",
+ "license": "MIT"
+ },
"node_modules/@humanwhocodes/config-array": {
"version": "0.9.5",
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz",
@@ -2006,37 +2056,14 @@
"deprecated": "Use @eslint/object-schema instead",
"dev": true
},
- "node_modules/@intlify/bundle-utils": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/@intlify/bundle-utils/-/bundle-utils-2.2.2.tgz",
- "integrity": "sha512-vngkvlIVV8ZJoyC5VqMvqJd2nvsx+qMN7pQjPiPjOrVndeiR7Dlue0k86Q8FsFUzyksW3HJZZi833ldxwbFzTA==",
- "dev": true,
- "dependencies": {
- "@intlify/message-compiler": "^9.1.0",
- "@intlify/shared": "^9.1.0",
- "jsonc-eslint-parser": "^1.0.1",
- "source-map": "^0.6.1",
- "yaml-eslint-parser": "^0.3.2"
- },
- "engines": {
- "node": ">= 12"
- },
- "peerDependenciesMeta": {
- "petite-vue-i18n": {
- "optional": true
- },
- "vue-i18n": {
- "optional": true
- }
- }
- },
"node_modules/@intlify/core-base": {
- "version": "9.13.1",
- "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.13.1.tgz",
- "integrity": "sha512-+bcQRkJO9pcX8d0gel9ZNfrzU22sZFSA0WVhfXrf5jdJOS24a+Bp8pozuS9sBI9Hk/tGz83pgKfmqcn/Ci7/8w==",
+ "version": "10.0.5",
+ "resolved": "https://registry.npmmirror.com/@intlify/core-base/-/core-base-10.0.5.tgz",
+ "integrity": "sha512-F3snDTQs0MdvnnyzTDTVkOYVAZOE/MHwRvF7mn7Jw1yuih4NrFYLNYIymGlLmq4HU2iIdzYsZ7f47bOcwY73XQ==",
+ "license": "MIT",
"dependencies": {
- "@intlify/message-compiler": "9.13.1",
- "@intlify/shared": "9.13.1"
+ "@intlify/message-compiler": "10.0.5",
+ "@intlify/shared": "10.0.5"
},
"engines": {
"node": ">= 16"
@@ -2045,12 +2072,13 @@
"url": "https://github.com/sponsors/kazupon"
}
},
- "node_modules/@intlify/message-compiler": {
- "version": "9.13.1",
- "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.13.1.tgz",
- "integrity": "sha512-SKsVa4ajYGBVm7sHMXd5qX70O2XXjm55zdZB3VeMFCvQyvLew/dLvq3MqnaIsTMF1VkkOb9Ttr6tHcMlyPDL9w==",
+ "node_modules/@intlify/core-base/node_modules/@intlify/message-compiler": {
+ "version": "10.0.5",
+ "resolved": "https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-10.0.5.tgz",
+ "integrity": "sha512-6GT1BJ852gZ0gItNZN2krX5QAmea+cmdjMvsWohArAZ3GmHdnNANEcF9JjPXAMRtQ6Ux5E269ymamg/+WU6tQA==",
+ "license": "MIT",
"dependencies": {
- "@intlify/shared": "9.13.1",
+ "@intlify/shared": "10.0.5",
"source-map-js": "^1.0.2"
},
"engines": {
@@ -2060,10 +2088,11 @@
"url": "https://github.com/sponsors/kazupon"
}
},
- "node_modules/@intlify/shared": {
- "version": "9.13.1",
- "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.13.1.tgz",
- "integrity": "sha512-u3b6BKGhE6j/JeRU6C/RL2FgyJfy6LakbtfeVF8fJXURpZZTzfh3e05J0bu0XPw447Q6/WUp3C4ajv4TMS4YsQ==",
+ "node_modules/@intlify/core-base/node_modules/@intlify/shared": {
+ "version": "10.0.5",
+ "resolved": "https://registry.npmmirror.com/@intlify/shared/-/shared-10.0.5.tgz",
+ "integrity": "sha512-bmsP4L2HqBF6i6uaMqJMcFBONVjKt+siGluRq4Ca4C0q7W2eMaVZr8iCgF9dKbcVXutftkC7D6z2SaSMmLiDyA==",
+ "license": "MIT",
"engines": {
"node": ">= 16"
},
@@ -2071,53 +2100,6 @@
"url": "https://github.com/sponsors/kazupon"
}
},
- "node_modules/@intlify/vue-i18n-loader": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/@intlify/vue-i18n-loader/-/vue-i18n-loader-4.2.0.tgz",
- "integrity": "sha512-d7aBmMNWJskcZPT5rJH4h2XHe/PwNoJUaY0PGla9g+NSD4B0UR8LBKrp126nlaUfA74Xt0FEGvzCfG9KdC9KoA==",
- "dev": true,
- "dependencies": {
- "@intlify/bundle-utils": "^2.2.2",
- "@intlify/shared": "^9.1.0",
- "js-yaml": "^4.1.0",
- "json5": "^2.2.0",
- "loader-utils": "^2.0.0"
- },
- "engines": {
- "node": ">= 12"
- },
- "peerDependencies": {
- "petite-vue-i18n": "^9.1.0",
- "vue": "^3.0.0",
- "vue-i18n": "^9.1.0"
- },
- "peerDependenciesMeta": {
- "petite-vue-i18n": {
- "optional": true
- },
- "vue-i18n": {
- "optional": true
- }
- }
- },
- "node_modules/@intlify/vue-i18n-loader/node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
- "node_modules/@intlify/vue-i18n-loader/node_modules/js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
"node_modules/@isaacs/cliui": {
"version": "8.0.2",
"dev": true,
@@ -3036,6 +3018,17 @@
"integrity": "sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==",
"dev": true
},
+ "node_modules/@popperjs/core": {
+ "name": "@sxzz/popperjs-es",
+ "version": "2.11.7",
+ "resolved": "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz",
+ "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/popperjs"
+ }
+ },
"node_modules/@sideway/address": {
"version": "4.1.5",
"dev": true,
@@ -3405,6 +3398,21 @@
"integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==",
"dev": true
},
+ "node_modules/@types/lodash": {
+ "version": "4.17.20",
+ "resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.20.tgz",
+ "integrity": "sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==",
+ "license": "MIT"
+ },
+ "node_modules/@types/lodash-es": {
+ "version": "4.17.12",
+ "resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz",
+ "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/lodash": "*"
+ }
+ },
"node_modules/@types/markdown-it": {
"version": "10.0.3",
"resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-10.0.3.tgz",
@@ -3581,6 +3589,12 @@
"source-map": "^0.6.1"
}
},
+ "node_modules/@types/web-bluetooth": {
+ "version": "0.0.16",
+ "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz",
+ "integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==",
+ "license": "MIT"
+ },
"node_modules/@types/webpack": {
"version": "4.41.38",
"resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.38.tgz",
@@ -7218,6 +7232,42 @@
"webpack-chain": "^6.0.0"
}
},
+ "node_modules/@vueuse/core": {
+ "version": "9.13.0",
+ "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-9.13.0.tgz",
+ "integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/web-bluetooth": "^0.0.16",
+ "@vueuse/metadata": "9.13.0",
+ "@vueuse/shared": "9.13.0",
+ "vue-demi": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/@vueuse/metadata": {
+ "version": "9.13.0",
+ "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.13.0.tgz",
+ "integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/@vueuse/shared": {
+ "version": "9.13.0",
+ "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.13.0.tgz",
+ "integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==",
+ "license": "MIT",
+ "dependencies": {
+ "vue-demi": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
"node_modules/@webassemblyjs/ast": {
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz",
@@ -8096,6 +8146,12 @@
"integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
"dev": true
},
+ "node_modules/async-validator": {
+ "version": "4.2.5",
+ "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz",
+ "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==",
+ "license": "MIT"
+ },
"node_modules/asynckit": {
"version": "0.4.0",
"license": "MIT"
@@ -8518,6 +8574,15 @@
"node": ">= 0.4"
}
},
+ "node_modules/base64-arraybuffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
+ "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
"node_modules/base64-js": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
@@ -8724,7 +8789,7 @@
},
"node_modules/bootstrap": {
"version": "4.6.2",
- "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.2.tgz",
+ "resolved": "https://registry.npmmirror.com/bootstrap/-/bootstrap-4.6.2.tgz",
"integrity": "sha512-51Bbp/Uxr9aTuy6ca/8FbFloBUJZLHwnhTcnjIeRn2suQWsWzcuJhGjKDB5eppVte/8oCdOL3VuwxvZDUggwGQ==",
"funding": [
{
@@ -8736,16 +8801,34 @@
"url": "https://opencollective.com/bootstrap"
}
],
+ "license": "MIT",
"peerDependencies": {
"jquery": "1.9.1 - 3",
"popper.js": "^1.16.1"
}
},
+ "node_modules/bootstrap-icons": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmmirror.com/bootstrap-icons/-/bootstrap-icons-1.13.1.tgz",
+ "integrity": "sha512-ijombt4v6bv5CLeXvRWKy7CuM3TRTuPEuGaGKvTV5cz65rQSY8RQ2JcHt6b90cBBAC7s8fsf2EkQDldzCoXUjw==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/twbs"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/bootstrap"
+ }
+ ],
+ "license": "MIT"
+ },
"node_modules/bootstrap-vue": {
"version": "2.23.1",
- "resolved": "https://registry.npmjs.org/bootstrap-vue/-/bootstrap-vue-2.23.1.tgz",
+ "resolved": "https://registry.npmmirror.com/bootstrap-vue/-/bootstrap-vue-2.23.1.tgz",
"integrity": "sha512-SEWkG4LzmMuWjQdSYmAQk1G/oOKm37dtNfjB5kxq0YafnL2W6qUAmeDTcIZVbPiQd2OQlIkWOMPBRGySk/zGsg==",
"hasInstallScript": true,
+ "license": "MIT",
"dependencies": {
"@nuxt/opencollective": "^0.3.2",
"bootstrap": "^4.6.1",
@@ -9920,65 +10003,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/cli-table3": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz",
- "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==",
- "dev": true,
- "dependencies": {
- "object-assign": "^4.1.0",
- "string-width": "^2.1.1"
- },
- "engines": {
- "node": ">=6"
- },
- "optionalDependencies": {
- "colors": "^1.1.2"
- }
- },
- "node_modules/cli-table3/node_modules/ansi-regex": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
- "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/cli-table3/node_modules/is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/cli-table3/node_modules/string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "dev": true,
- "dependencies": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/cli-table3/node_modules/strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/cli-truncate": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz",
@@ -10184,16 +10208,6 @@
"integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==",
"dev": true
},
- "node_modules/colors": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
- "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==",
- "dev": true,
- "optional": true,
- "engines": {
- "node": ">=0.1.90"
- }
- },
"node_modules/combined-stream": {
"version": "1.0.8",
"license": "MIT",
@@ -10801,6 +10815,15 @@
"postcss": "^8.0.9"
}
},
+ "node_modules/css-line-break": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmmirror.com/css-line-break/-/css-line-break-2.1.0.tgz",
+ "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==",
+ "license": "MIT",
+ "dependencies": {
+ "utrie": "^1.0.2"
+ }
+ },
"node_modules/css-loader": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.1.tgz",
@@ -11247,6 +11270,12 @@
"date-fns": ">=2.0.0"
}
},
+ "node_modules/dayjs": {
+ "version": "1.11.18",
+ "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.18.tgz",
+ "integrity": "sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==",
+ "license": "MIT"
+ },
"node_modules/de-indent": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz",
@@ -11860,25 +11889,6 @@
"tslib": "^2.0.3"
}
},
- "node_modules/dot-object": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/dot-object/-/dot-object-1.9.0.tgz",
- "integrity": "sha512-7MPN6y7XhAO4vM4eguj5+5HNKLjJYfkVG1ZR1Aput4Q4TR6SYeSjhpVQ77IzJHoSHffKbDxBC+48aCiiRurDPw==",
- "dev": true,
- "dependencies": {
- "commander": "^2.20.0",
- "glob": "^7.1.4"
- },
- "bin": {
- "dot-object": "bin/dot-object"
- }
- },
- "node_modules/dot-object/node_modules/commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
- "dev": true
- },
"node_modules/dot-prop": {
"version": "5.3.0",
"dev": true,
@@ -11995,6 +12005,22 @@
"safer-buffer": "^2.1.0"
}
},
+ "node_modules/echarts": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.6.0.tgz",
+ "integrity": "sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "2.3.0",
+ "zrender": "5.6.1"
+ }
+ },
+ "node_modules/echarts/node_modules/tslib": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
+ "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==",
+ "license": "0BSD"
+ },
"node_modules/editorconfig": {
"version": "1.0.4",
"dev": true,
@@ -12082,6 +12108,32 @@
"version": "1.4.682",
"license": "ISC"
},
+ "node_modules/element-plus": {
+ "version": "2.9.10",
+ "resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.9.10.tgz",
+ "integrity": "sha512-W2v9jWnm1kl/zm4bSvCh8aFCVlxvhG3fmqiDZwyd6WQiWGE595J/mpjcCggEr+49QDgIymhXrpPMOPPSARUbng==",
+ "license": "MIT",
+ "dependencies": {
+ "@ctrl/tinycolor": "^3.4.1",
+ "@element-plus/icons-vue": "^2.3.1",
+ "@floating-ui/dom": "^1.0.1",
+ "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7",
+ "@types/lodash": "^4.14.182",
+ "@types/lodash-es": "^4.17.6",
+ "@vueuse/core": "^9.1.0",
+ "async-validator": "^4.2.5",
+ "dayjs": "^1.11.13",
+ "escape-html": "^1.0.3",
+ "lodash": "^4.17.21",
+ "lodash-es": "^4.17.21",
+ "lodash-unified": "^1.0.2",
+ "memoize-one": "^6.0.0",
+ "normalize-wheel-es": "^1.2.0"
+ },
+ "peerDependencies": {
+ "vue": "^3.2.0"
+ }
+ },
"node_modules/elliptic": {
"version": "6.5.5",
"resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.5.tgz",
@@ -12610,8 +12662,7 @@
"node_modules/escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
- "dev": true
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
},
"node_modules/escape-string-regexp": {
"version": "1.0.5",
@@ -13065,15 +13116,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/esm": {
- "version": "3.2.25",
- "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz",
- "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/espree": {
"version": "9.6.1",
"dev": true,
@@ -14885,6 +14927,19 @@
}
}
},
+ "node_modules/html2canvas": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmmirror.com/html2canvas/-/html2canvas-1.4.1.tgz",
+ "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==",
+ "license": "MIT",
+ "dependencies": {
+ "css-line-break": "^2.1.0",
+ "text-segmentation": "^1.0.3"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
"node_modules/htmlparser2": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz",
@@ -15809,15 +15864,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/is-valid-glob": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz",
- "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/is-weakref": {
"version": "1.0.2",
"dev": true,
@@ -18358,82 +18404,16 @@
"node": ">=6"
}
},
- "node_modules/jsonc-eslint-parser": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-1.4.1.tgz",
- "integrity": "sha512-hXBrvsR1rdjmB2kQmUjf1rEIa+TqHBGMge8pwi++C+Si1ad7EjZrJcpgwym+QGK/pqTx+K7keFAtLlVNdLRJOg==",
+ "node_modules/jsonfile": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
"dev": true,
"dependencies": {
- "acorn": "^7.4.1",
- "eslint-utils": "^2.1.0",
- "eslint-visitor-keys": "^1.3.0",
- "espree": "^6.0.0",
- "semver": "^6.3.0"
+ "universalify": "^2.0.0"
},
- "engines": {
- "node": ">=8.10.0"
- }
- },
- "node_modules/jsonc-eslint-parser/node_modules/acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
- "dev": true,
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/jsonc-eslint-parser/node_modules/eslint-utils": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
- "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
- "dev": true,
- "dependencies": {
- "eslint-visitor-keys": "^1.1.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/mysticatea"
- }
- },
- "node_modules/jsonc-eslint-parser/node_modules/eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/jsonc-eslint-parser/node_modules/espree": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz",
- "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==",
- "dev": true,
- "dependencies": {
- "acorn": "^7.1.1",
- "acorn-jsx": "^5.2.0",
- "eslint-visitor-keys": "^1.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
- "dev": true,
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
}
},
"node_modules/jsprim": {
@@ -18896,6 +18876,23 @@
"version": "4.17.21",
"license": "MIT"
},
+ "node_modules/lodash-es": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz",
+ "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
+ "license": "MIT"
+ },
+ "node_modules/lodash-unified": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.3.tgz",
+ "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/lodash-es": "*",
+ "lodash": "*",
+ "lodash-es": "*"
+ }
+ },
"node_modules/lodash._reinterpolate": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
@@ -19363,6 +19360,12 @@
"node": ">= 4.0.0"
}
},
+ "node_modules/memoize-one": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz",
+ "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==",
+ "license": "MIT"
+ },
"node_modules/memory-fs": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
@@ -19789,7 +19792,9 @@
"optional": true
},
"node_modules/nanoid": {
- "version": "3.3.7",
+ "version": "3.3.11",
+ "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz",
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
"funding": [
{
"type": "github",
@@ -20114,6 +20119,12 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/normalize-wheel-es": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz",
+ "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==",
+ "license": "BSD-3-Clause"
+ },
"node_modules/npm-run-path": {
"version": "2.0.2",
"dev": true,
@@ -21606,9 +21617,10 @@
"dev": true
},
"node_modules/picocolors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
- "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew=="
+ "version": "1.1.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "license": "ISC"
},
"node_modules/picomatch": {
"version": "2.3.1",
@@ -21727,9 +21739,9 @@
}
},
"node_modules/postcss": {
- "version": "8.4.39",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz",
- "integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==",
+ "version": "8.5.5",
+ "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.5.tgz",
+ "integrity": "sha512-d/jtm+rdNT8tpXuHY5MMtcbJFBkhXE6593XVR9UoGCH8jSFGci7jGvMGH5RYd5PBJW+00NZQt6gf7CbagJCrhg==",
"funding": [
{
"type": "opencollective",
@@ -21744,10 +21756,11 @@
"url": "https://github.com/sponsors/ai"
}
],
+ "license": "MIT",
"dependencies": {
- "nanoid": "^3.3.7",
- "picocolors": "^1.0.1",
- "source-map-js": "^1.2.0"
+ "nanoid": "^3.3.11",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
},
"engines": {
"node": "^10 || ^12 || >=14"
@@ -23052,6 +23065,12 @@
"node": ">= 10.13.0"
}
},
+ "node_modules/recordrtc": {
+ "version": "5.6.2",
+ "resolved": "https://registry.npmmirror.com/recordrtc/-/recordrtc-5.6.2.tgz",
+ "integrity": "sha512-1QNKKNtl7+KcwD1lyOgP3ZlbiJ1d0HtXnypUy7yq49xEERxk31PHvE9RCciDrulPCY7WJ+oz0R9hpNxgsIurGQ==",
+ "license": "MIT"
+ },
"node_modules/reduce": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/reduce/-/reduce-1.0.3.tgz",
@@ -23690,6 +23709,18 @@
"url": "https://opencollective.com/webpack"
}
},
+ "node_modules/screenfull": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmmirror.com/screenfull/-/screenfull-6.0.2.tgz",
+ "integrity": "sha512-AQdy8s4WhNvUZ6P8F6PB21tSPIYKniic+Ogx0AacBMjKP1GUHN2E9URxQHtCusiwxudnCKkdy4GrHXPPJSkCCw==",
+ "license": "MIT",
+ "engines": {
+ "node": "^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/section-matter": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz",
@@ -24308,9 +24339,10 @@
}
},
"node_modules/source-map-js": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
- "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
@@ -25124,6 +25156,13 @@
"url": "https://opencollective.com/unts"
}
},
+ "node_modules/tailwindcss": {
+ "version": "4.1.10",
+ "resolved": "https://registry.npmmirror.com/tailwindcss/-/tailwindcss-4.1.10.tgz",
+ "integrity": "sha512-P3nr6WkvKV/ONsTzj6Gb57sWPMX29EPNPopo7+FcpkQaNsrNpZ1pv8QmrYI2RqEKD7mlGqLnGovlcYnBK0IqUA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/tapable": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
@@ -25243,6 +25282,15 @@
"node": ">=8"
}
},
+ "node_modules/text-segmentation": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmmirror.com/text-segmentation/-/text-segmentation-1.0.3.tgz",
+ "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==",
+ "license": "MIT",
+ "dependencies": {
+ "utrie": "^1.0.2"
+ }
+ },
"node_modules/text-table": {
"version": "0.2.0",
"dev": true,
@@ -26292,6 +26340,15 @@
"node": ">= 0.4.0"
}
},
+ "node_modules/utrie": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/utrie/-/utrie-1.0.2.tgz",
+ "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==",
+ "license": "MIT",
+ "dependencies": {
+ "base64-arraybuffer": "^1.0.2"
+ }
+ },
"node_modules/uuid": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
@@ -26402,81 +26459,6 @@
}
}
},
- "node_modules/vue-cli-plugin-i18n": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/vue-cli-plugin-i18n/-/vue-cli-plugin-i18n-2.3.1.tgz",
- "integrity": "sha512-1bNVZtLIAL9Pge8hiw986vixofyqF/tlgsqe4fF5JWn9c8xhsqVugEBuUeaYxevrE9efhhFk9mRmEDwBwQnbNg==",
- "dev": true,
- "dependencies": {
- "debug": "^4.3.0",
- "deepmerge": "^4.2.0",
- "dotenv": "^8.2.0",
- "flat": "^5.0.0",
- "rimraf": "^3.0.0",
- "vue": "^2.6.11",
- "vue-i18n": "^8.17.0",
- "vue-i18n-extract": "1.0.2"
- },
- "engines": {
- "node": ">= 12"
- }
- },
- "node_modules/vue-cli-plugin-i18n/node_modules/@vue/compiler-sfc": {
- "version": "2.7.16",
- "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.16.tgz",
- "integrity": "sha512-KWhJ9k5nXuNtygPU7+t1rX6baZeqOYLEforUPjgNDBnLicfHCoi48H87Q8XyLZOrNNsmhuwKqtpDQWjEFe6Ekg==",
- "dev": true,
- "dependencies": {
- "@babel/parser": "^7.23.5",
- "postcss": "^8.4.14",
- "source-map": "^0.6.1"
- },
- "optionalDependencies": {
- "prettier": "^1.18.2 || ^2.0.0"
- }
- },
- "node_modules/vue-cli-plugin-i18n/node_modules/dotenv": {
- "version": "8.6.0",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz",
- "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/vue-cli-plugin-i18n/node_modules/prettier": {
- "version": "2.8.8",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
- "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
- "dev": true,
- "optional": true,
- "bin": {
- "prettier": "bin-prettier.js"
- },
- "engines": {
- "node": ">=10.13.0"
- },
- "funding": {
- "url": "https://github.com/prettier/prettier?sponsor=1"
- }
- },
- "node_modules/vue-cli-plugin-i18n/node_modules/vue": {
- "version": "2.7.16",
- "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.16.tgz",
- "integrity": "sha512-4gCtFXaAA3zYZdTp5s4Hl2sozuySsgz4jy1EnpBHNfpMa9dK1ZCG7viqBPCwXtmgc8nHqUsAu3G4gtmXkkY3Sw==",
- "deprecated": "Vue 2 has reached EOL and is no longer actively maintained. See https://v2.vuejs.org/eol/ for more details.",
- "dev": true,
- "dependencies": {
- "@vue/compiler-sfc": "2.7.16",
- "csstype": "^3.1.0"
- }
- },
- "node_modules/vue-cli-plugin-i18n/node_modules/vue-i18n": {
- "version": "8.28.2",
- "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.28.2.tgz",
- "integrity": "sha512-C5GZjs1tYlAqjwymaaCPDjCyGo10ajUphiwA922jKt9n7KPpqR7oM1PCwYzhB/E7+nT3wfdG3oRre5raIT1rKA==",
- "dev": true
- },
"node_modules/vue-component-type-helpers": {
"version": "2.0.21",
"resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-2.0.21.tgz",
@@ -26583,12 +26565,13 @@
"dev": true
},
"node_modules/vue-i18n": {
- "version": "9.13.1",
- "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.13.1.tgz",
- "integrity": "sha512-mh0GIxx0wPtPlcB1q4k277y0iKgo25xmDPWioVVYanjPufDBpvu5ySTjP5wOrSvlYQ2m1xI+CFhGdauv/61uQg==",
+ "version": "10.0.5",
+ "resolved": "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-10.0.5.tgz",
+ "integrity": "sha512-9/gmDlCblz3i8ypu/afiIc/SUIfTTE1mr0mZhb9pk70xo2csHAM9mp2gdQ3KD2O0AM3Hz/5ypb+FycTj/lHlPQ==",
+ "license": "MIT",
"dependencies": {
- "@intlify/core-base": "9.13.1",
- "@intlify/shared": "9.13.1",
+ "@intlify/core-base": "10.0.5",
+ "@intlify/shared": "10.0.5",
"@vue/devtools-api": "^6.5.0"
},
"engines": {
@@ -26601,166 +26584,16 @@
"vue": "^3.0.0"
}
},
- "node_modules/vue-i18n-extract": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/vue-i18n-extract/-/vue-i18n-extract-1.0.2.tgz",
- "integrity": "sha512-+zwDKvle4KcfloXZnj5hF01ViKDiFr5RMx5507D7oyDXpSleRpekF5YHgZa/+Ra6Go68//z0Nya58J9tKFsCjw==",
- "dev": true,
- "dependencies": {
- "cli-table3": "^0.5.1",
- "dot-object": "^1.7.1",
- "esm": "^3.2.13",
- "glob": "^7.1.3",
- "is-valid-glob": "^1.0.0",
- "yargs": "^13.2.2"
- },
- "bin": {
- "vue-i18n-extract": "dist-node/index.bin.js"
- }
- },
- "node_modules/vue-i18n-extract/node_modules/ansi-regex": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz",
- "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/vue-i18n-extract/node_modules/cliui": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
- "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
- "dev": true,
- "dependencies": {
- "string-width": "^3.1.0",
- "strip-ansi": "^5.2.0",
- "wrap-ansi": "^5.1.0"
- }
- },
- "node_modules/vue-i18n-extract/node_modules/emoji-regex": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
- "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
- "dev": true
- },
- "node_modules/vue-i18n-extract/node_modules/find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "dev": true,
- "dependencies": {
- "locate-path": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/vue-i18n-extract/node_modules/is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/vue-i18n-extract/node_modules/locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "dev": true,
- "dependencies": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/vue-i18n-extract/node_modules/p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
- "dev": true,
- "dependencies": {
- "p-limit": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/vue-i18n-extract/node_modules/path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/vue-i18n-extract/node_modules/string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "dev": true,
- "dependencies": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/vue-i18n-extract/node_modules/strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^4.1.0"
- },
+ "node_modules/vue-i18n/node_modules/@intlify/shared": {
+ "version": "10.0.5",
+ "resolved": "https://registry.npmmirror.com/@intlify/shared/-/shared-10.0.5.tgz",
+ "integrity": "sha512-bmsP4L2HqBF6i6uaMqJMcFBONVjKt+siGluRq4Ca4C0q7W2eMaVZr8iCgF9dKbcVXutftkC7D6z2SaSMmLiDyA==",
+ "license": "MIT",
"engines": {
- "node": ">=6"
- }
- },
- "node_modules/vue-i18n-extract/node_modules/wrap-ansi": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
- "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^3.2.0",
- "string-width": "^3.0.0",
- "strip-ansi": "^5.0.0"
+ "node": ">= 16"
},
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/vue-i18n-extract/node_modules/y18n": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
- "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
- "dev": true
- },
- "node_modules/vue-i18n-extract/node_modules/yargs": {
- "version": "13.3.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
- "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
- "dev": true,
- "dependencies": {
- "cliui": "^5.0.0",
- "find-up": "^3.0.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^3.0.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^13.1.2"
+ "funding": {
+ "url": "https://github.com/sponsors/kazupon"
}
},
"node_modules/vue-loader": {
@@ -28620,26 +28453,6 @@
"node": ">= 6"
}
},
- "node_modules/yaml-eslint-parser": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-0.3.2.tgz",
- "integrity": "sha512-32kYO6kJUuZzqte82t4M/gB6/+11WAuHiEnK7FreMo20xsCKPeFH5tDBU7iWxR7zeJpNnMXfJyXwne48D0hGrg==",
- "dev": true,
- "dependencies": {
- "eslint-visitor-keys": "^1.3.0",
- "lodash": "^4.17.20",
- "yaml": "^1.10.0"
- }
- },
- "node_modules/yaml-eslint-parser/node_modules/eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/yargs": {
"version": "16.2.0",
"license": "MIT",
@@ -28805,6 +28618,21 @@
"resolved": "https://registry.npmjs.org/zepto/-/zepto-1.2.0.tgz",
"integrity": "sha512-C1x6lfvBICFTQIMgbt3JqMOno3VOtkWat/xEakLTOurskYIHPmzJrzd1e8BnmtdDVJlGuk5D+FxyCA8MPmkIyA==",
"dev": true
+ },
+ "node_modules/zrender": {
+ "version": "5.6.1",
+ "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.6.1.tgz",
+ "integrity": "sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "tslib": "2.3.0"
+ }
+ },
+ "node_modules/zrender/node_modules/tslib": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
+ "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==",
+ "license": "0BSD"
}
}
}
diff --git a/package.json b/package.json
index 0ca430739e4939b537e50f824caa634f9bfb3fdb..126d04c25151cd7087a582d068b0c98e7e42d164 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
"name": "webui-vue",
"version": "0.1.0",
"private": true,
- "description": "OpenBMC Web UI using the Vue.js front-end framework",
+ "description": "OurBMC Web UI using the Vue.js front-end framework",
"scripts": {
"serve": "check-node-version --package && vue-cli-service serve --mode development",
"build": "check-node-version --package && vue-cli-service build",
@@ -16,6 +16,7 @@
},
"dependencies": {
"@carbon/icons-vue": "10.49.1",
+ "@element-plus/icons-vue": "2.3.1",
"@novnc/novnc": "1.3.0",
"@vue/compat": "3.4.29",
"@vue/vue3-jest": "27.0.0",
@@ -28,8 +29,13 @@
"core-js": "3.23.4",
"date-fns": "2.28.0",
"date-fns-tz": "1.3.6",
+ "echarts": "5.6.0",
+ "element-plus": "2.9.10",
+ "html2canvas": "1.4.1",
"js-cookie": "3.0.1",
"lodash": "4.17.21",
+ "recordrtc": "5.6.2",
+ "screenfull": "6.0.2",
"vue": "3.4.29",
"vue-i18n": "10.0.5",
"vue-loader": "17.4.2",
@@ -61,10 +67,12 @@
"eslint-plugin-vue": "9.2.0",
"eslint-scope": "7.1.1",
"lint-staged": "13.0.3",
+ "postcss": "8.5.5",
"postcss-loader": "8.1.1",
"prettier": "3.2.5",
"sass": "1.75.0",
"sass-loader": "14.2.1",
+ "tailwindcss": "4.1.10",
"vue-style-loader": "4.1.3",
"vue-svg-inline-loader": "2.1.5",
"vuepress": "1.9.7"
diff --git a/postcss.config.cjs b/postcss.config.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..3ea9307f4036056cac91b327d2df0b9fd39edb2f
--- /dev/null
+++ b/postcss.config.cjs
@@ -0,0 +1,3 @@
+module.exports = {
+ plugins: [require('tailwindcss'), require('autoprefixer')],
+};
diff --git a/src/assets/styles/bmc/custom/_kvm.scss b/src/assets/styles/bmc/custom/_kvm.scss
index a722384406cf2dceeb93223f9e386c408c30c8e3..ba2c50822fc4061c22484f43f17ee6e131b0df5f 100644
--- a/src/assets/styles/bmc/custom/_kvm.scss
+++ b/src/assets/styles/bmc/custom/_kvm.scss
@@ -1,12 +1,14 @@
#terminal-kvm {
- height: calc(100vh - 300px);
- display: flex;
- &.full-window {
- height: calc(100vh - 80px);
+ display: block;
+ height: 427px;
+
+ & > div:nth-child(2) {
+ display: block !important;
+ overflow: hidden !important;
+ width: auto !important;
}
div:nth-child(1) {
background: transparent !important;
- display: block !important;
- overflow: hidden !important;
+ // display: block !important;
}
}
\ No newline at end of file
diff --git a/src/components/AppHeader/AppHeader.vue b/src/components/AppHeader/AppHeader.vue
index b7c417f4604b299f900e90bcdc4e4f3e7b639dec..75a35323316c3106b408d507cb69b1c73123d14a 100644
--- a/src/components/AppHeader/AppHeader.vue
+++ b/src/components/AppHeader/AppHeader.vue
@@ -38,7 +38,7 @@
@@ -66,6 +66,9 @@
{{ $t('appHeader.power') }}
+
+
+
{{ username }}
+ {{ $t('appHeader.switchLanguage') }}
+
@@ -397,4 +417,7 @@ export default {
outline: 0;
}
}
+.header-logo {
+ width: 150px;
+}
diff --git a/src/components/AppNavigation/AppNavigationMixin.js b/src/components/AppNavigation/AppNavigationMixin.js
index 89c1508b44bb12fac645f39123a3f1b5068b9d70..88f47853687221b42ef98a3331a23e09e4cc22e7 100644
--- a/src/components/AppNavigation/AppNavigationMixin.js
+++ b/src/components/AppNavigation/AppNavigationMixin.js
@@ -189,7 +189,7 @@ const AppNavigationMixin = {
{
id: 'power',
label: i18n.global.t('appNavigation.power'),
- route: '/resource-management/power',
+ route: '/resource-management/power-limit',
},
],
},
diff --git a/src/components/Global/BootTimeline.vue b/src/components/Global/BootTimeline.vue
new file mode 100644
index 0000000000000000000000000000000000000000..1dd5bde87050bb82648c625af1238fff06702058
--- /dev/null
+++ b/src/components/Global/BootTimeline.vue
@@ -0,0 +1,542 @@
+
+
+
+
+
+
+
+ ✓
+
+
+ !
+
+
+ ✓
+
+
+
+
+
+
+
+ {{ stage.TimeString }}
+
+
+ {{ stage.time }}
+
+
+
+
+
+
+
+
+
+ {{ stage.BiosVersion }}
+
+
+
+
+
+ {{ key }}: {{ value }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/Global/HelpButton.vue b/src/components/Global/HelpButton.vue
new file mode 100644
index 0000000000000000000000000000000000000000..090280c1e7c4e5a5e29e6c9ecc8d3302d5df49b7
--- /dev/null
+++ b/src/components/Global/HelpButton.vue
@@ -0,0 +1,137 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/Global/KvmRecorder.vue b/src/components/Global/KvmRecorder.vue
new file mode 100644
index 0000000000000000000000000000000000000000..169a10892bd8c38946254fee81cabededa3bb23f
--- /dev/null
+++ b/src/components/Global/KvmRecorder.vue
@@ -0,0 +1,120 @@
+
+
+
+
+
+
{{ $t('pageKvm.recording') }}: {{ recordingTime }}
+
+
+
+
+
+
+
diff --git a/src/components/Global/NoteBlock.vue b/src/components/Global/NoteBlock.vue
new file mode 100644
index 0000000000000000000000000000000000000000..f4b9e0a3a6d1121e0e064b3c17c7293ae580f713
--- /dev/null
+++ b/src/components/Global/NoteBlock.vue
@@ -0,0 +1,41 @@
+
+
+
+ {{ $t('appPageHelp.note') }}
+
+
+
+
+
+
diff --git a/src/components/Global/PageTitle.vue b/src/components/Global/PageTitle.vue
index f6b561d5960bc03a98e994e7c141118d8c8ca852..ca914bb2296924f457b672291f8b8ed949a46418 100644
--- a/src/components/Global/PageTitle.vue
+++ b/src/components/Global/PageTitle.vue
@@ -6,7 +6,7 @@
+
+
diff --git a/src/components/Global/ScreenShot.vue b/src/components/Global/ScreenShot.vue
new file mode 100644
index 0000000000000000000000000000000000000000..24f7ecad2bf80455c72edc459c33959b5a52b1b2
--- /dev/null
+++ b/src/components/Global/ScreenShot.vue
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/HelpDocument/EventLogsHelp.vue b/src/components/HelpDocument/EventLogsHelp.vue
new file mode 100644
index 0000000000000000000000000000000000000000..68b54e7cf0a43cae82a6ddd4a9baf1a412ded472
--- /dev/null
+++ b/src/components/HelpDocument/EventLogsHelp.vue
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
-
+ {{ $t('appPageHelp.title1') }}
+
+
-
+
{{ $t('appPageHelp.inventoryHelp.introduce.message1') }}
+
+ -
+ {{ $t('appPageHelp.inventoryHelp.introduce.message2') }}
+
+ -
+ {{ $t('appPageHelp.inventoryHelp.introduce.message3') }}
+
+
+
+
+
{{ $t('appPageHelp.OverviewHelp.introduce.message6') }}
+
+
+
+
+
+
-
+ {{ $t('appPageHelp.title2') }}
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/HelpDocument/LoginHelp.vue b/src/components/HelpDocument/LoginHelp.vue
new file mode 100644
index 0000000000000000000000000000000000000000..925f0ef4251d6bd26cb4f202ee7b04d8c02269db
--- /dev/null
+++ b/src/components/HelpDocument/LoginHelp.vue
@@ -0,0 +1,160 @@
+
+
+
+
+
+
+
-
+ {{ $t('appPageHelp.title1') }}
+
+
-
+
{{ $t('appPageHelp.loginHelp.introduce.message1') }}
+
+ - {{ $t('appPageHelp.loginHelp.introduce.message2') }}
+ - {{ $t('appPageHelp.loginHelp.introduce.message3') }}
+
+
+
+
{{ $t('appPageHelp.loginHelp.introduce.message4') }}
+
+
+
+
+
+
+
-
+ {{ $t('appPageHelp.title2') }}
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/HelpDocument/OperatingLogsHelp.vue b/src/components/HelpDocument/OperatingLogsHelp.vue
new file mode 100644
index 0000000000000000000000000000000000000000..952cacbe5137082046b015cb3f31a55736e7b9f1
--- /dev/null
+++ b/src/components/HelpDocument/OperatingLogsHelp.vue
@@ -0,0 +1,107 @@
+
+
+
+
+
+
+
-
+ {{ $t('appPageHelp.title1') }}
+
+
-
+
+ {{ $t('appPageHelp.operatingLogsHelp.introduce.message1') }}
+
+
+ -
+ {{ $t('appPageHelp.eventLogsHelp.introduce.message2') }}
+
+ -
+ {{ $t('appPageHelp.operatingLogsHelp.introduce.message3') }}
+
+
+
+
+
+
-
+ {{ $t('appPageHelp.title2') }}
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/HelpDocument/OverviewHelp.vue b/src/components/HelpDocument/OverviewHelp.vue
new file mode 100644
index 0000000000000000000000000000000000000000..13eb22ba9f585dd2ebc08d77cc5bc40f7516e0dc
--- /dev/null
+++ b/src/components/HelpDocument/OverviewHelp.vue
@@ -0,0 +1,171 @@
+
+
+
+
+
+
+
-
+ {{ $t('appPageHelp.title1') }}
+
+
-
+
{{ $t('appPageHelp.overviewHelp.introduce.message1') }}
+
+ -
+ {{ $t('appPageHelp.OverviewHelp.introduce.message2') }}
+
+ -
+ {{ $t('appPageHelp.OverviewHelp.introduce.message3') }}
+
+ -
+ {{ $t('appPageHelp.OverviewHelp.introduce.message4') }}
+
+ -
+ {{ $t('appPageHelp.OverviewHelp.introduce.message5') }}
+
+
+
+
+
{{ $t('appPageHelp.OverviewHelp.introduce.message6') }}
+
+
+
+
+
+
-
+ {{ $t('appPageHelp.title2') }}
+
+
-
+
+
+
+
+
+
+ {{ $t('appPageHelp.OverviewHelp.display.message1') }}
+
+
+ -
+ {{ $t('appPageHelp.OverviewHelp.display.message2') }}
+
+ -
+ {{ $t('appPageHelp.OverviewHelp.display.message3') }}
+
+ -
+ {{ $t('appPageHelp.OverviewHelp.display.message4') }}
+
+
+
+ {{ $t('appPageHelp.OverviewHelp.display.message5') }}
+
+
+
+
+ {{ $t('appPageHelp.OverviewHelp.display.message6') }}
+
+
+ -
+ {{ $t('appPageHelp.OverviewHelp.display.message7') }}
+
+ -
+ {{ $t('appPageHelp.OverviewHelp.display.message8') }}
+
+ -
+ {{ $t('appPageHelp.OverviewHelp.display.message9') }}
+
+ -
+ {{ $t('appPageHelp.OverviewHelp.display.message6') }}
+
+ -
+ {{ $t('appPageHelp.OverviewHelp.display.message10') }}
+
+ -
+ {{ $t('appPageHelp.OverviewHelp.display.message11') }}
+
+
+
+
+
+ {{ $t('appPageHelp.OverviewHelp.display.message12') }}
+
+
+
+ {{ $t('appPageHelp.OverviewHelp.display.message13') }}
+
+
+
+ {{ $t('appPageHelp.OverviewHelp.display.message14') }}
+
+
+ {{ $t('appPageHelp.OverviewHelp.display.message15') }}
+
+
+
+
+ {{ $t('appPageHelp.OverviewHelp.display.message16') }}
+
+
+ {{ $t('appPageHelp.OverviewHelp.display.message17') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/HelpDocument/PerformanceMonitorHelp.vue b/src/components/HelpDocument/PerformanceMonitorHelp.vue
new file mode 100644
index 0000000000000000000000000000000000000000..8f757c8479d662f6eb7c21f0968f6a7c5204b19a
--- /dev/null
+++ b/src/components/HelpDocument/PerformanceMonitorHelp.vue
@@ -0,0 +1,185 @@
+
+
+
+
+
+
+
-
+ {{ $t('appPageHelp.title1') }}
+
+
-
+
+ {{
+ $t('appPageHelp.performanceMonitorHelp.introduce.message1')
+ }}
+
+
+ -
+ {{
+ $t('appPageHelp.performanceMonitorHelp.introduce.message2')
+ }}
+
+ -
+ {{
+ $t('appPageHelp.performanceMonitorHelp.introduce.message3')
+ }}
+
+
+
+
+
{{ $t('appPageHelp.OverviewHelp.introduce.message6') }}
+
+
+
+
+
+
-
+ {{ $t('appPageHelp.title2') }}
+
+
-
+
+
+
+
+
+
+ {{
+ $t(
+ 'appPageHelp.performanceMonitorHelp.display.message1',
+ )
+ }}
+
+
+ -
+ {{
+ $t(
+ 'appPageHelp.performanceMonitorHelp.display.message2',
+ )
+ }}
+
+ -
+ {{
+ $t(
+ 'appPageHelp.performanceMonitorHelp.display.message3',
+ )
+ }}
+
+ -
+ {{
+ $t(
+ 'appPageHelp.performanceMonitorHelp.display.message4',
+ )
+ }}
+
+ -
+ {{
+ $t(
+ 'appPageHelp.performanceMonitorHelp.display.message5',
+ )
+ }}
+
+
+
+
+
+ {{
+ $t(
+ 'appPageHelp.performanceMonitorHelp.display.message6',
+ )
+ }}
+
+
+ -
+ {{
+ $t(
+ 'appPageHelp.performanceMonitorHelp.display.message7',
+ )
+ }}
+
+ -
+ {{
+ $t(
+ 'appPageHelp.performanceMonitorHelp.display.message8',
+ )
+ }}
+
+ -
+ {{
+ $t(
+ 'appPageHelp.performanceMonitorHelp.display.message9',
+ )
+ }}
+
+ -
+ {{
+ $t(
+ 'appPageHelp.performanceMonitorHelp.display.message10',
+ )
+ }}
+
+
+
+
+
+ {{
+ $t(
+ 'appPageHelp.performanceMonitorHelp.display.message11',
+ )
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/HelpDocument/PostCodeLogsHelp.vue b/src/components/HelpDocument/PostCodeLogsHelp.vue
new file mode 100644
index 0000000000000000000000000000000000000000..e687766933562094be1cb1acf51b968903eac07d
--- /dev/null
+++ b/src/components/HelpDocument/PostCodeLogsHelp.vue
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
-
+ {{ $t('appPageHelp.title1') }}
+
+
-
+
+ {{ $t('appPageHelp.postCodeLogsHelp.introduce.message1') }}
+
+
+ -
+ {{ $t('appPageHelp.eventLogsHelp.introduce.message2') }}
+
+ -
+ {{ $t('appPageHelp.eventLogsHelp.introduce.message3') }}
+
+
+
+
+
+
-
+ {{ $t('appPageHelp.title2') }}
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/HelpDocument/ProfileSettingsHelp.vue b/src/components/HelpDocument/ProfileSettingsHelp.vue
new file mode 100644
index 0000000000000000000000000000000000000000..f73208376239f311d40dc63e9f32b1eca413562b
--- /dev/null
+++ b/src/components/HelpDocument/ProfileSettingsHelp.vue
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+
-
+ {{ $t('appPageHelp.title1') }}
+
+
-
+
+ {{ $t('appPageHelp.profileSettingsHelp.introduce.message1') }}
+
+
+ -
+ {{ $t('appPageHelp.profileSettingsHelp.introduce.message2') }}
+
+ -
+ {{ $t('appPageHelp.profileSettingsHelp.introduce.message3') }}
+
+
+
+
+
{{ $t('appPageHelp.OverviewHelp.introduce.message6') }}
+
+
+
+
+
+
-
+ {{ $t('appPageHelp.title2') }}
+
+
-
+
+
+
+
+
+
+ -
+ {{
+ $t(
+ 'appPageHelp.profileSettingsHelp.introduce.message4',
+ )
+ }}
+
+ -
+ {{
+ $t(
+ 'appPageHelp.profileSettingsHelp.introduce.message5',
+ )
+ }}
+
+
+
+
+
+ -
+ {{
+ $t(
+ 'appPageHelp.profileSettingsHelp.introduce.message6',
+ )
+ }}
+
+ -
+ {{
+ $t(
+ 'appPageHelp.profileSettingsHelp.introduce.message7',
+ )
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/HelpDocument/RasLogsHelp.vue b/src/components/HelpDocument/RasLogsHelp.vue
new file mode 100644
index 0000000000000000000000000000000000000000..c009108767347c3a4f8c8ac112ffced539cb9ef5
--- /dev/null
+++ b/src/components/HelpDocument/RasLogsHelp.vue
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
-
+ {{ $t('appPageHelp.title1') }}
+
+
-
+
+ {{ $t('appPageHelp.RasLogsHelp.introduce.message1') }}
+
+
+ -
+ {{ $t('appPageHelp.eventLogsHelp.introduce.message2') }}
+
+ -
+ {{ $t('appPageHelp.rasLogsHelp.introduce.message3') }}
+
+
+
+
+
+
-
+ {{ $t('appPageHelp.title2') }}
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/HelpDocument/SensorsHelp.vue b/src/components/HelpDocument/SensorsHelp.vue
new file mode 100644
index 0000000000000000000000000000000000000000..fb50f1fc0195c8e1aa356894de2bd716387c7f92
--- /dev/null
+++ b/src/components/HelpDocument/SensorsHelp.vue
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
-
+ {{ $t('appPageHelp.title1') }}
+
+
-
+
+ {{ $t('appPageHelp.sensorsHelp.introduce.message1') }}
+
+
+ -
+ {{ $t('appPageHelp.sensorsHelp.introduce.message2') }}
+
+ -
+ {{ $t('appPageHelp.sensorsHelp.introduce.message3') }}
+
+
+
+
+
+
-
+ {{ $t('appPageHelp.title2') }}
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/HelpDocument/SystemInformationHelp.vue b/src/components/HelpDocument/SystemInformationHelp.vue
new file mode 100644
index 0000000000000000000000000000000000000000..68b54e7cf0a43cae82a6ddd4a9baf1a412ded472
--- /dev/null
+++ b/src/components/HelpDocument/SystemInformationHelp.vue
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
-
+ {{ $t('appPageHelp.title1') }}
+
+
-
+
{{ $t('appPageHelp.inventoryHelp.introduce.message1') }}
+
+ -
+ {{ $t('appPageHelp.inventoryHelp.introduce.message2') }}
+
+ -
+ {{ $t('appPageHelp.inventoryHelp.introduce.message3') }}
+
+
+
+
+
{{ $t('appPageHelp.OverviewHelp.introduce.message6') }}
+
+
+
+
+
+
-
+ {{ $t('appPageHelp.title2') }}
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/env/assets/images/OurBMC-logo.png b/src/env/assets/images/OurBMC-logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..8ded9f2a8de5cc6b003ff1a9e0ef34729c16f76f
Binary files /dev/null and b/src/env/assets/images/OurBMC-logo.png differ
diff --git a/src/env/assets/images/built-on-openbmc-logo.svg b/src/env/assets/images/built-on-openbmc-logo.svg
new file mode 100644
index 0000000000000000000000000000000000000000..5053ee8a07f1f3d45bf3066b4fd1519416c09910
--- /dev/null
+++ b/src/env/assets/images/built-on-openbmc-logo.svg
@@ -0,0 +1,77 @@
+
+
diff --git a/src/env/assets/images/login-company-logo.svg b/src/env/assets/images/login-company-logo.svg
new file mode 100644
index 0000000000000000000000000000000000000000..cc9966e67705f8575fde50400d7f8493adaaed38
--- /dev/null
+++ b/src/env/assets/images/login-company-logo.svg
@@ -0,0 +1,130 @@
+
+
diff --git a/src/env/assets/images/refresh.svg b/src/env/assets/images/refresh.svg
new file mode 100644
index 0000000000000000000000000000000000000000..3905113a403b0437148c8784597dd0600cf4fac7
--- /dev/null
+++ b/src/env/assets/images/refresh.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/env/assets/styles/_ourbmc.scss b/src/env/assets/styles/_ourbmc.scss
new file mode 100644
index 0000000000000000000000000000000000000000..8d787286956748cbc7452be4cc9f8b3fe49ecc88
--- /dev/null
+++ b/src/env/assets/styles/_ourbmc.scss
@@ -0,0 +1 @@
+// This file shall remain empty.
\ No newline at end of file
diff --git a/src/env/components/AppNavigation/ibm.js b/src/env/components/AppNavigation/ibm.js
index 85fbdc15a3254ea06c159d19a97481d62f6a1e63..f9691d5baeeca785a31fa8276d49dd58416e0229 100644
--- a/src/env/components/AppNavigation/ibm.js
+++ b/src/env/components/AppNavigation/ibm.js
@@ -133,9 +133,9 @@ const AppNavigationMixin = {
icon: 'iconResourceManagement',
children: [
{
- id: 'power',
+ id: 'power-limit',
label: i18n.global.t('appNavigation.power'),
- route: '/resource-management/power',
+ route: '/resource-management/power-limit',
},
],
},
diff --git a/src/env/components/AppNavigation/intel.js b/src/env/components/AppNavigation/intel.js
index e20b0ef4f87155e0a10c94dca215209edaf59259..d45811445c87f9bd0e18ea1421d5c52dc2e6c781 100644
--- a/src/env/components/AppNavigation/intel.js
+++ b/src/env/components/AppNavigation/intel.js
@@ -158,9 +158,9 @@ const AppNavigationMixin = {
icon: 'iconResourceManagement',
children: [
{
- id: 'power',
+ id: 'power-limit',
label: i18n.global.t('appNavigation.power'),
- route: '/resource-management/power',
+ route: '/resource-management/power-limit',
},
],
},
diff --git a/src/env/components/AppNavigation/ourbmc.js b/src/env/components/AppNavigation/ourbmc.js
new file mode 100644
index 0000000000000000000000000000000000000000..01c039e83205c323f74be248e5843f6d70c6241d
--- /dev/null
+++ b/src/env/components/AppNavigation/ourbmc.js
@@ -0,0 +1,281 @@
+import IconDashboard from '@carbon/icons-vue/es/dashboard/16';
+import IconTextLinkAnalysis from '@carbon/icons-vue/es/text-link--analysis/16';
+import IconDataCheck from '@carbon/icons-vue/es/data--check/16';
+import IconSettingsAdjust from '@carbon/icons-vue/es/settings--adjust/16';
+import IconSettings from '@carbon/icons-vue/es/settings/16';
+import IconSecurity from '@carbon/icons-vue/es/security/16';
+import IconChevronUp from '@carbon/icons-vue/es/chevron--up/16';
+import IconDataBase from '@carbon/icons-vue/es/data--base--alt/16';
+import i18n from '@/i18n';
+const roles = {
+ administrator: 'Administrator',
+ operator: 'Operator',
+ readonly: 'ReadOnly',
+ noaccess: 'NoAccess',
+};
+
+const AppNavigationMixin = {
+ components: {
+ iconOverview: IconDashboard,
+ iconLogs: IconTextLinkAnalysis,
+ iconHealth: IconDataCheck,
+ iconControl: IconSettingsAdjust,
+ iconSettings: IconSettings,
+ iconSecurityAndAccess: IconSecurity,
+ iconExpand: IconChevronUp,
+ iconResourceManagement: IconDataBase,
+ },
+ data() {
+ const logsChildren = [
+ {
+ id: 'event-logs',
+ label: i18n.global.t('appNavigation.eventLogs'),
+ route: '/logs/event-logs',
+ },
+ {
+ id: 'post-code-logs',
+ label: i18n.global.t('appNavigation.postCodeLogs'),
+ route: '/logs/post-code-logs',
+ },
+ ];
+ if (process.env.VUE_APP_LOGS !== 'false') {
+ if (process.env.VUE_APP_LOGS_OPERATING !== 'false') {
+ logsChildren.push({
+ id: 'operating-logs',
+ label: i18n.global.t('appNavigation.operatingLogs'),
+ route: '/logs/operating-logs',
+ });
+ }
+ if (process.env.VUE_APP_LOGS_RAS !== 'false') {
+ logsChildren.push({
+ id: 'ras-logs',
+ label: i18n.global.t('appNavigation.rasLogs'),
+ route: '/logs/ras-logs',
+ });
+ }
+ // if (process.env.VUE_APP_LOGS_SYSTEM !== 'false') {
+ // logsChildren.push({
+ // id: 'system-logs',
+ // label: i18n.global.t('appPageTitle.systemLogs'),
+ // route: '/logs/system-logs',
+ // });
+ // }
+ if (process.env.VUE_APP_LOGS_DUMPS !== 'false') {
+ logsChildren.push({
+ id: 'dumps',
+ label: i18n.global.t('appNavigation.dumps'),
+ route: '/logs/dumps',
+ });
+ }
+ }
+ const hardwareStatusChildren = [
+ {
+ id: 'inventory',
+ label: i18n.global.t('appNavigation.inventory'),
+ route: '/hardware-status/inventory',
+ },
+ {
+ id: 'sensors',
+ label: i18n.global.t('appNavigation.sensors'),
+ route: '/hardware-status/sensors',
+ },
+ ];
+ if (process.env.VUE_APP_HARDWARE_STATUS !== 'false') {
+ if (process.env.VUE_APP_HARDWARE_STATUS_MONITOR !== 'false') {
+ hardwareStatusChildren.push({
+ id: 'performance-monitor',
+ label: i18n.global.t('appNavigation.performanceMonitor'),
+ route: '/hardware-status/performance-monitor',
+ });
+ }
+ if (process.env.VUE_APP_HARDWARE_STATUS_POWER !== 'false') {
+ hardwareStatusChildren.push({
+ id: 'power',
+ label: i18n.global.t('appPageTitle.power'),
+ route: '/hardware-status/power',
+ });
+ }
+ if (process.env.VUE_APP_HARDWARE_STATUS_FAN !== 'false') {
+ hardwareStatusChildren.push({
+ id: 'fan-speed',
+ label: i18n.global.t('appPageTitle.fanSpeed'),
+ route: '/hardware-status/fan-speed',
+ });
+ }
+ }
+ const operationsChildren = [
+ {
+ id: 'key-clear',
+ label: i18n.global.t('appNavigation.keyClear'),
+ route: '/operations/key-clear',
+ },
+ ];
+ if (process.env.VUE_APP_OPERATIONS !== 'false') {
+ if (process.env.VUE_APP_OPERATIONS_RESET !== 'false') {
+ operationsChildren.push({
+ id: 'factory-reset',
+ label: i18n.global.t('appNavigation.factoryReset'),
+ route: '/operations/factory-reset',
+ });
+ }
+ if (process.env.VUE_APP_OPERATIONS_KVM !== 'false') {
+ operationsChildren.push({
+ id: 'kvm',
+ label: i18n.global.t('appNavigation.kvm'),
+ route: '/operations/kvm',
+ });
+ }
+ if (process.env.VUE_APP_OPERATIONS_SOL !== 'false') {
+ operationsChildren.push({
+ id: 'serial-over-lan',
+ label: i18n.global.t('appNavigation.serialOverLan'),
+ route: '/operations/serial-over-lan',
+ exclusiveToRoles: [roles.administrator],
+ });
+ }
+ if (process.env.VUE_APP_OPERATIONS_MEDIA !== 'false') {
+ operationsChildren.push({
+ id: 'virtual-media',
+ label: i18n.global.t('appNavigation.virtualMedia'),
+ route: '/operations/virtual-media',
+ exclusiveToRoles: [roles.administrator],
+ });
+ }
+ if (process.env.VUE_APP_OPERATIONS_FIRMWARE !== 'false') {
+ operationsChildren.push({
+ id: 'firmware',
+ label: i18n.global.t('appNavigation.firmware'),
+ route: '/operations/firmware',
+ });
+ }
+ if (process.env.VUE_APP_OPERATIONS_REBOOT !== 'false') {
+ operationsChildren.push({
+ id: 'reboot-bmc',
+ label: i18n.global.t('appNavigation.rebootBmc'),
+ route: '/operations/reboot-bmc',
+ });
+ }
+ if (process.env.VUE_APP_OPERATIONS_POWER !== 'false') {
+ operationsChildren.push({
+ id: 'server-power-operations',
+ label: i18n.global.t('appNavigation.serverPowerOperations'),
+ route: '/operations/server-power-operations',
+ });
+ }
+ if (process.env.VUE_APP_REMOTE_DEBUG !== 'false') {
+ operationsChildren.push({
+ id: 'remote-debug',
+ label: i18n.global.t('appNavigation.remoteDebug'),
+ route: '/operations/remote-debug',
+ });
+ }
+ }
+ const settingsChildren = [
+ {
+ id: 'date-time',
+ label: i18n.global.t('appNavigation.dateTime'),
+ route: '/settings/date-time',
+ },
+ {
+ id: 'network',
+ label: i18n.global.t('appNavigation.network'),
+ route: '/settings/network',
+ },
+ {
+ id: 'power-restore-policy',
+ label: i18n.global.t('appNavigation.powerRestorePolicy'),
+ route: '/settings/power-restore-policy',
+ },
+ ];
+ if (process.env.VUE_APP_SETTINGS !== 'false') {
+ if (process.env.VUE_APP_SETTINGS_ALARM !== 'false') {
+ settingsChildren.push({
+ id: 'snmp-alerts',
+ label: i18n.global.t('appNavigation.snmpAlerts'),
+ route: '/settings/snmp-alerts',
+ });
+ }
+ }
+ const navigationItems = [
+ {
+ id: 'overview',
+ label: i18n.global.t('appNavigation.overview'),
+ route: '/',
+ icon: 'iconOverview',
+ },
+ {
+ id: 'logs',
+ label: i18n.global.t('appNavigation.logs'),
+ icon: 'iconLogs',
+ children: logsChildren,
+ },
+ {
+ id: 'hardware-status',
+ label: i18n.global.t('appNavigation.hardwareStatus'),
+ icon: 'iconHealth',
+ children: hardwareStatusChildren,
+ },
+ {
+ id: 'operations',
+ label: i18n.global.t('appNavigation.operations'),
+ icon: 'iconControl',
+ children: operationsChildren,
+ },
+ {
+ id: 'settings',
+ label: i18n.global.t('appNavigation.settings'),
+ icon: 'iconSettings',
+ children: settingsChildren,
+ },
+ {
+ id: 'security-and-access',
+ label: i18n.global.t('appNavigation.securityAndAccess'),
+ icon: 'iconSecurityAndAccess',
+ children: [
+ {
+ id: 'sessions',
+ label: i18n.global.t('appNavigation.sessions'),
+ route: '/security-and-access/sessions',
+ },
+ {
+ id: 'ldap',
+ label: i18n.global.t('appNavigation.ldap'),
+ route: '/security-and-access/ldap',
+ },
+ {
+ id: 'user-management',
+ label: i18n.global.t('appNavigation.userManagement'),
+ route: '/security-and-access/user-management',
+ },
+ {
+ id: 'policies',
+ label: i18n.global.t('appNavigation.policies'),
+ route: '/security-and-access/policies',
+ },
+ {
+ id: 'certificates',
+ label: i18n.global.t('appNavigation.certificates'),
+ route: '/security-and-access/certificates',
+ },
+ ],
+ },
+ ];
+ if (process.env.VUE_APP_RESOURCE_MANAGEMENT !== 'false') {
+ navigationItems.push({
+ id: 'resource-management',
+ label: i18n.global.t('appNavigation.resourceManagement'),
+ icon: 'iconResourceManagement',
+ children: [
+ {
+ id: 'power-limit',
+ label: i18n.global.t('appNavigation.power'),
+ route: '/resource-management/power-limit',
+ },
+ ],
+ });
+ }
+ return { navigationItems };
+ },
+};
+
+export default AppNavigationMixin;
diff --git a/src/env/router/ibm.js b/src/env/router/ibm.js
index 0d6bf2b1239d552ad32678c586ca8a30e77d900b..7e06b67d3fe433c74fc0894b1a261ebed444f01b 100644
--- a/src/env/router/ibm.js
+++ b/src/env/router/ibm.js
@@ -25,7 +25,7 @@ import SerialOverLan from '@/views/Operations/SerialOverLan';
import SerialOverLanConsole from '@/views/Operations/SerialOverLan/SerialOverLanConsole';
import ServerPowerOperations from '@/views/Operations/ServerPowerOperations';
import Certificates from '@/views/SecurityAndAccess/Certificates';
-import Power from '@/views/ResourceManagement/Power';
+import PowerLimit from '@/views/ResourceManagement/PowerLimit';
import i18n from '@/i18n';
// Custom components
@@ -208,9 +208,9 @@ const routes = [
},
},
{
- path: '/resource-management/power',
- name: 'power',
- component: Power,
+ path: '/resource-management/power-limit',
+ name: 'power-limit',
+ component: PowerLimit,
meta: {
title: i18n.global.t('appPageTitle.power'),
},
diff --git a/src/env/router/intel.js b/src/env/router/intel.js
index 9abdc68dbf9f22b8a57b64fdea4917a12bd1287f..12eb3f57ee6503195e0695d72e446100c8ac4826 100644
--- a/src/env/router/intel.js
+++ b/src/env/router/intel.js
@@ -24,7 +24,7 @@ import SerialOverLanConsole from '@/views/Operations/SerialOverLan/SerialOverLan
import ServerPowerOperations from '@/views/Operations/ServerPowerOperations';
import Certificates from '@/views/SecurityAndAccess/Certificates';
import VirtualMedia from '@/views/Operations/VirtualMedia';
-import Power from '@/views/ResourceManagement/Power';
+import PowerLimit from '@/views/ResourceManagement/PowerLimit';
import i18n from '@/i18n';
const roles = {
@@ -203,9 +203,9 @@ const routes = [
},
},
{
- path: '/resource-management/power',
- name: 'power',
- component: Power,
+ path: '/resource-management/power-limit',
+ name: 'power-limit',
+ component: PowerLimit,
meta: {
title: i18n.global.t('appPageTitle.power'),
},
diff --git a/src/env/router/ourbmc.js b/src/env/router/ourbmc.js
new file mode 100644
index 0000000000000000000000000000000000000000..c9358c3db1d2e7abb6fd5d56201e4686f975b652
--- /dev/null
+++ b/src/env/router/ourbmc.js
@@ -0,0 +1,378 @@
+import AppLayout from '@/layouts/AppLayout.vue';
+import ChangePassword from '@/views/ChangePassword';
+import ConsoleLayout from '@/layouts/ConsoleLayout.vue';
+import DateTime from '@/views/Settings/DateTime';
+import EventLogs from '@/views/Logs/EventLogs';
+import FactoryReset from '@/views/Operations/FactoryReset';
+import FanSpeed from '@/views/HardwareStatus/FanSpeed';
+import Firmware from '@/views/Operations/Firmware';
+import Inventory from '@/views/HardwareStatus/Inventory';
+import PerformanceMonitor from '@/views/HardwareStatus/PerformanceMonitor';
+import Kvm from '@/views/Operations/Kvm';
+import KvmConsole from '@/views/Operations/Kvm/KvmConsole';
+import Sessions from '@/views/SecurityAndAccess/Sessions';
+import Ldap from '@/views/SecurityAndAccess/Ldap';
+import UserManagement from '@/views/SecurityAndAccess/UserManagement';
+import Login from '@/views/Login';
+import LoginLayout from '@/layouts/LoginLayout';
+import Network from '@/views/Settings/Network';
+import Overview from '@/views/Overview';
+import PageNotFound from '@/views/PageNotFound';
+import PostCodeLogs from '@/views/Logs/PostCodeLogs';
+import OperatingLogs from '@/views/Logs/OperatingLogs';
+import RasLogs from '@/views/Logs/RasLogs';
+// import SystemLogs from '@/views/Logs/SystemLogs';
+import PowerRestorePolicy from '@/views/Settings/PowerRestorePolicy';
+import ProfileSettings from '@/views/ProfileSettings';
+import RebootBmc from '@/views/Operations/RebootBmc';
+import Policies from '@/views/SecurityAndAccess/Policies';
+import KeyClear from '@/views/Operations/KeyClear';
+import Sensors from '@/views/HardwareStatus/Sensors';
+import SerialOverLan from '@/views/Operations/SerialOverLan';
+import SerialOverLanConsole from '@/views/Operations/SerialOverLan/SerialOverLanConsole';
+import ServerPowerOperations from '@/views/Operations/ServerPowerOperations';
+import Certificates from '@/views/SecurityAndAccess/Certificates';
+import VirtualMedia from '@/views/Operations/VirtualMedia';
+import RemoteDebug from '@/views/Operations/RemoteDebug';
+import PowerLimit from '@/views/ResourceManagement/PowerLimit';
+import Power from '@/views/HardwareStatus/Power';
+import SnmpAlerts from '@/views/Settings/SnmpAlerts';
+import i18n from '@/i18n';
+
+import Dumps from '@/views/Logs/Dumps';
+
+const roles = {
+ administrator: 'Administrator',
+ operator: 'Operator',
+ readonly: 'ReadOnly',
+ noaccess: 'NoAccess',
+};
+
+const routes = [
+ {
+ path: '/login',
+ component: LoginLayout,
+ children: [
+ {
+ path: '',
+ name: 'login',
+ component: Login,
+ meta: {
+ title: i18n.global.t('appPageTitle.login'),
+ },
+ },
+ {
+ path: '/change-password',
+ name: 'change-password',
+ component: ChangePassword,
+ meta: {
+ title: i18n.global.t('appPageTitle.changePassword'),
+ requiresAuth: true,
+ },
+ },
+ ],
+ },
+ {
+ path: '/console',
+ component: ConsoleLayout,
+ meta: {
+ requiresAuth: true,
+ },
+ children: [
+ {
+ path: 'serial-over-lan-console',
+ name: 'serial-over-lan-console',
+ component: SerialOverLanConsole,
+ meta: {
+ title: i18n.global.t('appPageTitle.serialOverLan'),
+ },
+ },
+ {
+ path: 'kvm',
+ name: 'kvm-console',
+ component: KvmConsole,
+ meta: {
+ title: i18n.global.t('appPageTitle.kvm'),
+ },
+ },
+ ],
+ },
+ {
+ path: '/',
+ meta: {
+ requiresAuth: true,
+ },
+ component: AppLayout,
+ children: [
+ {
+ path: '',
+ name: 'overview',
+ component: Overview,
+ meta: {
+ title: i18n.global.t('appPageTitle.overview'),
+ },
+ },
+ {
+ path: '/profile-settings',
+ name: 'profile-settings',
+ component: ProfileSettings,
+ meta: {
+ title: i18n.global.t('appPageTitle.profileSettings'),
+ },
+ },
+ {
+ path: '/logs/event-logs',
+ name: 'event-logs',
+ component: EventLogs,
+ meta: {
+ title: i18n.global.t('appPageTitle.eventLogs'),
+ },
+ },
+ {
+ path: '/logs/dumps',
+ name: 'dumps',
+ component: Dumps,
+ meta: {
+ title: i18n.global.t('appPageTitle.dumps'),
+ },
+ },
+ {
+ path: '/logs/post-code-logs',
+ name: 'post-code-logs',
+ component: PostCodeLogs,
+ meta: {
+ title: i18n.global.t('appPageTitle.postCodeLogs'),
+ },
+ },
+ {
+ path: '/logs/operating-logs',
+ name: 'operating-logs',
+ component: OperatingLogs,
+ meta: {
+ title: i18n.global.t('appPageTitle.operatingLogs'),
+ },
+ },
+ {
+ path: '/logs/ras-logs',
+ name: 'ras-logs',
+ component: RasLogs,
+ meta: {
+ title: i18n.global.t('appPageTitle.rasLogs'),
+ },
+ },
+ // {
+ // path: '/logs/system-logs',
+ // name: 'system-logs',
+ // component: SystemLogs,
+ // meta: {
+ // title: i18n.global.t('appPageTitle.systemLogs'),
+ // },
+ // },
+ {
+ path: '/hardware-status/inventory',
+ name: 'inventory',
+ component: Inventory,
+ meta: {
+ title: i18n.global.t('appPageTitle.inventory'),
+ },
+ },
+ {
+ path: '/hardware-status/fan-speed',
+ name: 'fan-speed',
+ component: FanSpeed,
+ meta: {
+ title: i18n.global.t('appPageTitle.fanSpeed'),
+ },
+ },
+ {
+ path: '/hardware-status/performance-monitor',
+ name: 'performance-monitor',
+ component: PerformanceMonitor,
+ meta: {
+ title: i18n.global.t('appPageTitle.performanceMonitor'),
+ },
+ },
+ {
+ path: '/hardware-status/sensors',
+ name: 'sensors',
+ component: Sensors,
+ meta: {
+ title: i18n.global.t('appPageTitle.sensors'),
+ },
+ },
+ {
+ path: '/security-and-access/sessions',
+ name: 'sessions',
+ component: Sessions,
+ meta: {
+ title: i18n.global.t('appPageTitle.sessions'),
+ },
+ },
+ {
+ path: '/security-and-access/ldap',
+ name: 'ldap',
+ component: Ldap,
+ meta: {
+ title: i18n.global.t('appPageTitle.ldap'),
+ },
+ },
+ {
+ path: '/security-and-access/user-management',
+ name: 'user-management',
+ component: UserManagement,
+ meta: {
+ title: i18n.global.t('appPageTitle.userManagement'),
+ },
+ },
+ {
+ path: '/security-and-access/policies',
+ name: 'policies',
+ component: Policies,
+ meta: {
+ title: i18n.global.t('appPageTitle.policies'),
+ },
+ },
+ {
+ path: '/security-and-access/certificates',
+ name: 'certificates',
+ component: Certificates,
+ meta: {
+ title: i18n.global.t('appPageTitle.certificates'),
+ },
+ },
+ {
+ path: '/settings/date-time',
+ name: 'date-time',
+ component: DateTime,
+ meta: {
+ title: i18n.global.t('appPageTitle.dateTime'),
+ },
+ },
+ {
+ path: '/settings/snmp-alerts',
+ name: 'snmp-alerts',
+ component: SnmpAlerts,
+ meta: {
+ title: i18n.global.t('appPageTitle.snmpAlerts'),
+ },
+ },
+ {
+ path: '/operations/factory-reset',
+ name: 'factory-reset',
+ component: FactoryReset,
+ meta: {
+ title: i18n.global.t('appPageTitle.factoryReset'),
+ },
+ },
+ {
+ path: '/operations/key-clear',
+ name: 'key-clear',
+ component: KeyClear,
+ meta: {
+ title: i18n.global.t('appPageTitle.keyClear'),
+ },
+ },
+ {
+ path: '/operations/kvm',
+ name: 'kvm',
+ component: Kvm,
+ meta: {
+ title: i18n.global.t('appPageTitle.kvm'),
+ },
+ },
+ {
+ path: '/operations/firmware',
+ name: 'firmware',
+ component: Firmware,
+ meta: {
+ title: i18n.global.t('appPageTitle.firmware'),
+ },
+ },
+ {
+ path: '/settings/network',
+ name: 'network',
+ component: Network,
+ meta: {
+ title: i18n.global.t('appPageTitle.network'),
+ },
+ },
+ {
+ path: '/settings/power-restore-policy',
+ name: 'power-restore-policy',
+ component: PowerRestorePolicy,
+ meta: {
+ title: i18n.global.t('appPageTitle.powerRestorePolicy'),
+ },
+ },
+ {
+ path: '/resource-management/power-limit',
+ name: 'power-limit',
+ component: PowerLimit,
+ meta: {
+ title: i18n.global.t('appPageTitle.powerLimit'),
+ },
+ },
+ {
+ path: '/hardware-status/power',
+ name: 'power',
+ component: Power,
+ meta: {
+ title: i18n.global.t('appPageTitle.power'),
+ },
+ },
+ {
+ path: '/operations/reboot-bmc',
+ name: 'reboot-bmc',
+ component: RebootBmc,
+ meta: {
+ title: i18n.global.t('appPageTitle.rebootBmc'),
+ },
+ },
+ {
+ path: '/operations/serial-over-lan',
+ name: 'serial-over-lan',
+ component: SerialOverLan,
+ meta: {
+ title: i18n.global.t('appPageTitle.serialOverLan'),
+ exclusiveToRoles: [roles.administrator],
+ },
+ },
+ {
+ path: '/operations/server-power-operations',
+ name: 'server-power-operations',
+ component: ServerPowerOperations,
+ meta: {
+ title: i18n.global.t('appPageTitle.serverPowerOperations'),
+ },
+ },
+ {
+ path: '/operations/virtual-media',
+ name: 'virtual-media',
+ component: VirtualMedia,
+ meta: {
+ title: i18n.global.t('appPageTitle.virtualMedia'),
+ exclusiveToRoles: [roles.administrator],
+ },
+ },
+ {
+ path: '/operations/remote-debug',
+ name: 'remote-debug',
+ component: RemoteDebug,
+ meta: {
+ title: i18n.global.t('appNavigation.remoteDebug'),
+ exclusiveToRoles: [roles.administrator],
+ },
+ },
+ {
+ path: '*',
+ name: 'page-not-found',
+ component: PageNotFound,
+ meta: {
+ title: i18n.global.t('appPageTitle.pageNotFound'),
+ },
+ },
+ ],
+ },
+];
+
+export { routes as default, roles };
diff --git a/src/env/store/ourbmc.js b/src/env/store/ourbmc.js
new file mode 100644
index 0000000000000000000000000000000000000000..4d088b5d6dd2d59879bdbc2dad9cd412647f44da
--- /dev/null
+++ b/src/env/store/ourbmc.js
@@ -0,0 +1,37 @@
+import store from '@/store';
+// import AlarmSettingStore from '@/store/modules/ServicesManagement/AlarmSetting/AlarmSettingStore';
+// import SertialOverLanStore from '@/store/modules/ServicesManagement/SerialOverLan/SertialOverLanStore';
+import FanSpeedStore from '@/store/modules/HardwareStatus/FanSpeedStore';
+import StorageStore from '@/store/modules/HardwareStatus/StorageStore';
+import OperatingLogsStore from '@/store/modules/Logs/OperatingLogStore';
+// import PciStore from '@/store/modules/SystemManagement/SystemInformation/PciStore';
+// import ConfugureManagementStore from '@/store/modules/Settings/ConfigureManagement';
+import RasLogsStore from '@/store/modules/Logs/RasLogsStore';
+// import PostCodeLogsStore from '@/store/modules/Diagnostic/PostCodeLogs/PostCodeLogsStore';
+import PerformanceMonitorStore from '@/store/modules/HardwareStatus/PerformanceMonitorStore';
+// import SensorsStore from '@/store/modules/SystemManagement/Sensor/SensorsStore';
+import PowerControlStore from '@/store/modules/HardwareStatus/PowerControlStore';
+import SystemLogsStore from '@/store/modules/Logs/SystemLogsStore';
+import RemoteDebugStore from '@/store/modules/Operations/RemoteDebugStore';
+// import TrustedComputingStore from '@/store/modules/TrustedCenter/TrustedComputing/TrustedComputingStore';
+// import ActiveMeasurementStore from '@/store/modules/TrustedCenter/ActiveMeasurement/ActiveMeasurementStore';
+// import DynamicMeasurementStore from '@/store/modules/TrustedCenter/DynamicMeasurement/DynamicMeasurementStore';
+
+// store.registerModule('alarmSetting', AlarmSettingStore);
+// store.registerModule('serialOverLan', SertialOverLanStore);
+store.registerModule('storage', StorageStore);
+store.registerModule('fanSpeed', FanSpeedStore);
+store.registerModule('operatingLogs', OperatingLogsStore);
+// store.registerModule('pci', PciStore);
+// store.registerModule('configure', ConfugureManagementStore);
+store.registerModule('rasLogs', RasLogsStore);
+// store.registerModule('postCodeLogs', PostCodeLogsStore);
+store.registerModule('performanceMonitor', PerformanceMonitorStore);
+// store.registerModule('sensors', SensorsStore);
+store.registerModule('powerControl', PowerControlStore);
+store.registerModule('systemLogs', SystemLogsStore);
+store.registerModule('remoteDebug', RemoteDebugStore);
+// store.registerModule('trustedComputing', TrustedComputingStore);
+// store.registerModule('activeMeasurement', ActiveMeasurementStore);
+// store.registerModule('dynamicMeasurement', DynamicMeasurementStore);
+export default store;
diff --git a/src/i18n.js b/src/i18n.js
index 2580784a0dc5a80fb5d12239c9ccbf972d9b9360..233961ce4d97f9a2f6123cef7825d78d82619f32 100644
--- a/src/i18n.js
+++ b/src/i18n.js
@@ -1,14 +1,12 @@
import { createI18n } from 'vue-i18n';
import en_us from './locales/en-US.json';
-import ru_ru from './locales/ru-RU.json';
-import ka_ge from './locales/ka-GE.json';
+import zh_cn from './locales/zh-CN.json';
function loadLocaleMessages() {
const messages = {
'en-US': en_us,
- 'ka-GE': ka_ge,
- 'ru-RU': ru_ru,
+ 'zh-CN': zh_cn,
};
return messages;
}
@@ -17,7 +15,7 @@ const i18n = createI18n({
// Get default locale from local storage
locale: window.localStorage.getItem('storedLanguage'),
// Locales that don't exist will fallback to English
- fallbackLocale: 'en-US',
+ fallbackLocale: 'zh-CN',
// Falling back to fallbackLocale generates two console warnings
// Silent fallback suppresses console warnings when using fallback
silentFallbackWarn: true,
diff --git a/src/layouts/LoginLayout.vue b/src/layouts/LoginLayout.vue
index 55b56928fb9ea2a3191e84a86d0311010d3f2d53..21e9a94105082b0a19cc31e90b343e6595947cbc 100644
--- a/src/layouts/LoginLayout.vue
+++ b/src/layouts/LoginLayout.vue
@@ -7,7 +7,7 @@
@@ -24,19 +24,25 @@
+
+
+
-
+
+
diff --git a/src/views/HardwareStatus/FanSpeed/FanSpeedChart.vue b/src/views/HardwareStatus/FanSpeed/FanSpeedChart.vue
new file mode 100644
index 0000000000000000000000000000000000000000..9052fa38b2e894e7579b187338e557f744f4edfd
--- /dev/null
+++ b/src/views/HardwareStatus/FanSpeed/FanSpeedChart.vue
@@ -0,0 +1,99 @@
+
+
+
+
+
diff --git a/src/views/HardwareStatus/FanSpeed/index.js b/src/views/HardwareStatus/FanSpeed/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..5b1c28dcf5f4d7847f21f352c2aa124c96e0ad20
--- /dev/null
+++ b/src/views/HardwareStatus/FanSpeed/index.js
@@ -0,0 +1,2 @@
+import FanSpeed from './FanSpeed.vue';
+export default FanSpeed;
diff --git a/src/views/HardwareStatus/Inventory/Inventory.vue b/src/views/HardwareStatus/Inventory/Inventory.vue
index a3f4d23edbb605362fc3bfaf2899b683778f4538..fcd8cb64b5d41c73a6c01d56bfdc482d6a4dd369 100644
--- a/src/views/HardwareStatus/Inventory/Inventory.vue
+++ b/src/views/HardwareStatus/Inventory/Inventory.vue
@@ -37,6 +37,12 @@
+
+
+
+
+
+
@@ -55,10 +61,12 @@ import TableSystem from './InventoryTableSystem';
import TablePowerSupplies from './InventoryTablePowerSupplies';
import TableDimmSlot from './InventoryTableDimmSlot';
import TableFans from './InventoryTableFans';
+import TableStorage from './InventoryTableStorage';
import TableBmcManager from './InventoryTableBmcManager';
import TableChassis from './InventoryTableChassis';
import TableProcessors from './InventoryTableProcessors';
import TableAssembly from './InventoryTableAssembly';
+import TablePci from './InventoryTablePci';
import LoadingBarMixin from '@/components/Mixins/LoadingBarMixin';
import PageSection from '@/components/Global/PageSection';
import JumpLink16 from '@carbon/icons-vue/es/jump-link/16';
@@ -75,10 +83,12 @@ export default {
TablePowerSupplies,
TableSystem,
TableFans,
+ TableStorage,
TableBmcManager,
TableChassis,
TableProcessors,
TableAssembly,
+ TablePci,
PageSection,
JumpLink: JumpLink16,
},
@@ -123,6 +133,18 @@ export default {
href: '#fans',
linkText: i18n.global.t('pageInventory.fans'),
},
+ {
+ id: 'storage',
+ dataRef: 'storage',
+ href: '#storage',
+ linkText: i18n.global.t('pageInventory.storage'),
+ },
+ {
+ id: 'pci',
+ dataRef: 'pci',
+ href: '#pci',
+ linkText: i18n.global.t('pageInventory.pcie'),
+ },
{
id: 'powerSupply',
dataRef: 'powerSupply',
@@ -164,6 +186,12 @@ export default {
const fansTablePromise = new Promise((resolve) => {
this.$root.$on('hardware-status-fans-complete', () => resolve());
});
+ const storageTablePromise = new Promise((resolve) => {
+ this.$root.$on('hardware-status-storage-complete', () => resolve());
+ });
+ const pciTablePromise = new Promise((resolve) => {
+ this.$root.$on('hardware-status-pci-complete', () => resolve());
+ });
const powerSuppliesTablePromise = new Promise((resolve) => {
this.$root.$on('hardware-status-power-supplies-complete', () =>
resolve(),
@@ -188,6 +216,8 @@ export default {
chassisTablePromise,
dimmSlotTablePromise,
fansTablePromise,
+ storageTablePromise,
+ pciTablePromise,
powerSuppliesTablePromise,
processorsTablePromise,
serviceIndicatorPromise,
diff --git a/src/views/HardwareStatus/Inventory/InventoryTablePci.vue b/src/views/HardwareStatus/Inventory/InventoryTablePci.vue
new file mode 100644
index 0000000000000000000000000000000000000000..d8743e8171314739189cae55c265bec791add098
--- /dev/null
+++ b/src/views/HardwareStatus/Inventory/InventoryTablePci.vue
@@ -0,0 +1,277 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ expandRowLabel }}
+
+
+
+
+
+
+ {{ value }}
+
+
+
+
+ {{ dataFormatter(value) }}
+
+
+
+
+ {{ dataFormatter(value) }}
+
+
+
+
+ {{ dataFormatter(value) }}
+
+
+
+
+ {{ dataFormatter(value) }}
+
+
+
+
+ {{ dataFormatter(value) }}
+
+
+
+
+ {{ dataFormatter(value) }}
+
+
+
+
+ {{ dataFormatter(value) }}
+
+
+
+
+ {{ dataFormatter(value) }}
+
+
+
+
+ {{ dataFormatter(value) }}
+
+
+
+
+ {{ dataFormatter(value) }}
+
+
+
+
+
+
+
+
+ - {{ $t('pageInventory.table.pcieAddress') }}:
+ - {{ dataFormatter(item.pcieAddress) }}
+
+
+
+ - {{ $t('pageInventory.table.deviceName') }}:
+ - {{ dataFormatter(item.deviceName) }}
+
+
+
+ - {{ $t('pageInventory.table.deviceClass') }}:
+ - {{ dataFormatter(item.deviceClass) }}
+
+
+
+ - {{ $t('pageInventory.table.vendor') }}:
+ - {{ dataFormatter(item.vendor) }}
+
+
+
+ -
+ {{ $t('pageInventory.table.macAddress') }}:
+
+ -
+ {{ dataFormatter(item.macAddress) }}
+
+
+
+
+
+
+ - {{ $t('pageInventory.table.deviceId') }}:
+ - {{ dataFormatter(item.deviceId) }}
+
+
+
+ - {{ $t('pageInventory.table.vendorId') }}:
+ - {{ dataFormatter(item.vendorId) }}
+
+
+
+ - {{ $t('pageInventory.table.subsystemVendorId') }}:
+ - {{ dataFormatter(item.subsystemVendorId) }}
+
+
+
+ - {{ $t('pageInventory.table.subsystemId') }}:
+ - {{ dataFormatter(item.subsystemId) }}
+
+
+
+ - {{ $t('pageInventory.table.classCode') }}:
+ - {{ dataFormatter(item.classCode) }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/HardwareStatus/Inventory/InventoryTableProcessors.vue b/src/views/HardwareStatus/Inventory/InventoryTableProcessors.vue
index 4bdff54bf6cb085ec1f05b59caf7753ee949f371..377f18923c3525e9146c9ea529318852148d5f46 100644
--- a/src/views/HardwareStatus/Inventory/InventoryTableProcessors.vue
+++ b/src/views/HardwareStatus/Inventory/InventoryTableProcessors.vue
@@ -151,6 +151,125 @@
+
+
+
+
+
+ {{ $t('pageInventory.table.cacheLevelL1') }}
+
+
+ {{ $t('pageInventory.table.cacheLevelL2') }}
+
+
+
+ {{ $t('pageInventory.table.cacheLevelL3') }}
+
+
+
+
+ -
+ {{ $t('pageInventory.table.associativity') }}:
+
+ -
+ {{ dataFormatter(cache.Associativity) }}
+
+ -
+ {{ $t('pageInventory.table.cacheLocation') }}:
+
+ -
+ {{ dataFormatter(cache.CacheLocation) }}
+
+ -
+ {{ $t('pageInventory.table.cacheSocketed') }}:
+
+ -
+ {{ dataFormatter(cache.CacheSocketed) }}
+
+ -
+ {{ $t('pageInventory.table.currentSRAMType') }}:
+
+ -
+ {{ dataFormatter(cache.CurrentSRAMType) }}
+
+ -
+ {{ $t('pageInventory.table.errorCorrectionType') }}:
+
+ -
+ {{ dataFormatter(cache.ErrorCorrectionType) }}
+
+ -
+ {{ $t('pageInventory.table.installedCacheSizeInKB') }}:
+
+ -
+ {{ dataFormatter(cache.InstalledCacheSizeInKB) }}
+
+ -
+ {{ $t('pageInventory.table.maxCacheSizeInKB') }}:
+
+ -
+ {{ dataFormatter(cache.MaxCacheSizeInKB) }}
+
+
+
+
+
+ -
+ {{ $t('pageInventory.table.operationalMode') }}:
+
+ -
+ {{ dataFormatter(cache.OperationalMode) }}
+
+ -
+ {{ $t('pageInventory.table.socketDesignation') }}:
+
+ -
+ {{ dataFormatter(cache.SocketDesignation) }}
+
+ -
+ {{ $t('pageInventory.table.speed') }}:
+
+ -
+ {{ dataFormatter(cache.Speed) }}
+
+ -
+ {{ $t('pageInventory.table.state') }}:
+
+ -
+ {{ dataFormatter(cache.Status) }}
+
+ -
+ {{ $t('pageInventory.table.supportedSRAMType') }}:
+
+ -
+
+ ,
+ {{ dataFormatter(type) }}
+
+
+ -
+ {{ $t('pageInventory.table.systemCacheType') }}:
+
+ -
+ {{ dataFormatter(cache.SystemCacheType) }}
+
+
+
+
+
diff --git a/src/views/HardwareStatus/Inventory/InventoryTableStorage.vue b/src/views/HardwareStatus/Inventory/InventoryTableStorage.vue
new file mode 100644
index 0000000000000000000000000000000000000000..121639be76071d65063819212d21ae3e33f30055
--- /dev/null
+++ b/src/views/HardwareStatus/Inventory/InventoryTableStorage.vue
@@ -0,0 +1,225 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ expandRowLabel }}
+
+
+
+
+
+
+ {{ value }}
+
+
+
+
+
+
+
+
+ - {{ $t('pageInventory.table.id') }}:
+ - {{ dataFormatter(item.id) }}
+
+
+
+ - {{ $t('pageInventory.table.serialNumber') }}:
+ - {{ dataFormatter(item.serialNumber) }}
+
+
+
+ - {{ $t('pageInventory.table.partNumber') }}:
+ - {{ dataFormatter(item.partNumber) }}
+
+
+
+ - {{ $t('pageInventory.table.mediaType') }}:
+ - {{ dataFormatter(item.mediaType) }}
+
+
+
+
+
+ - {{ $t('pageInventory.table.statusState') }}:
+ - {{ dataFormatter(item.statusState) }}
+
+
+
+ - {{ $t('pageInventory.table.model') }}:
+ - {{ dataFormatter(item.model) }}
+
+
+
+ - {{ $t('pageInventory.table.manufacturer') }}:
+ - {{ dataFormatter(item.manufacturer) }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/HardwareStatus/Inventory/InventoryTableSystem.vue b/src/views/HardwareStatus/Inventory/InventoryTableSystem.vue
index 23beb47a20c46603229fcf52a72fd172a651262c..ffe65a0ac2ff882112954999f162460f8693b022 100644
--- a/src/views/HardwareStatus/Inventory/InventoryTableSystem.vue
+++ b/src/views/HardwareStatus/Inventory/InventoryTableSystem.vue
@@ -135,6 +135,31 @@
+
+
+
+
+ {{ $t('pageInventory.table.hostname') }}:
+
+ {{ dataFormatter(item.HostName) }}
+
+ {{ $t('pageInventory.table.kernelVersion') }}:
+
+
+ {{ dataFormatter(item.KernelVersion) }}
+
+
+ {{ $t('pageInventory.table.memorySize') }}:
+
+
+ {{ dataFormatter(item.MemorySize) }}
+
+
+ {{ $t('pageInventory.table.osName') }}:
+
+ {{ dataFormatter(item.OsName) }}
+
+
diff --git a/src/views/HardwareStatus/PerformanceMonitor/PerformanceMonitor.vue b/src/views/HardwareStatus/PerformanceMonitor/PerformanceMonitor.vue
new file mode 100644
index 0000000000000000000000000000000000000000..255830d73b5825a82ccc449c8b036a86d01c8006
--- /dev/null
+++ b/src/views/HardwareStatus/PerformanceMonitor/PerformanceMonitor.vue
@@ -0,0 +1,274 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('pagePerformanceMonitor.NIC') }}
+ {{
+ $t('pagePerformanceMonitor.downSpeed')
+ }}
+ {{
+ $t('pagePerformanceMonitor.upSpeed')
+ }}
+ {{
+ $t('pagePerformanceMonitor.maxSpeed')
+ }}
+
+
+ {{ compName }}
+ {{
+ roundToTwoDecimals(compData[compData.length - 1].downSpeed) +
+ compData[compData.length - 1].unit
+ }}
+ {{
+ roundToTwoDecimals(compData[compData.length - 1].upSpeed) +
+ compData[compData.length - 1].unit
+ }}
+ {{
+ roundToTwoDecimals(compData[compData.length - 1].maxSpeed) +
+ compData[compData.length - 1].unit
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ historyBlockName(hardwareName) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/HardwareStatus/PerformanceMonitor/PerformanceMonitorHistoryChart.vue b/src/views/HardwareStatus/PerformanceMonitor/PerformanceMonitorHistoryChart.vue
new file mode 100644
index 0000000000000000000000000000000000000000..dbac5b038549b25227bcbba89147465d9d6e5a38
--- /dev/null
+++ b/src/views/HardwareStatus/PerformanceMonitor/PerformanceMonitorHistoryChart.vue
@@ -0,0 +1,506 @@
+
+
+
+
+
diff --git a/src/views/HardwareStatus/PerformanceMonitor/PerformanceMonitorPanel.vue b/src/views/HardwareStatus/PerformanceMonitor/PerformanceMonitorPanel.vue
new file mode 100644
index 0000000000000000000000000000000000000000..38a37e1c05a073c0537be4f9a080e462a61cbc29
--- /dev/null
+++ b/src/views/HardwareStatus/PerformanceMonitor/PerformanceMonitorPanel.vue
@@ -0,0 +1,109 @@
+
+
+
+
+
diff --git a/src/views/HardwareStatus/PerformanceMonitor/index.js b/src/views/HardwareStatus/PerformanceMonitor/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..a1b59c07af2b36bd96daf840db59a4128e80a5f9
--- /dev/null
+++ b/src/views/HardwareStatus/PerformanceMonitor/index.js
@@ -0,0 +1,2 @@
+import PerformanceMonitor from './PerformanceMonitor.vue';
+export default PerformanceMonitor;
diff --git a/src/views/HardwareStatus/Power/Power.vue b/src/views/HardwareStatus/Power/Power.vue
new file mode 100644
index 0000000000000000000000000000000000000000..91b99fcc96e017b7f02930bc2c1cca88ca4d7ecc
--- /dev/null
+++ b/src/views/HardwareStatus/Power/Power.vue
@@ -0,0 +1,209 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('pagePower.buttons.button1') }}
+
+
+
+
+ {{ $t('pagePower.buttons.button2') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/HardwareStatus/Power/PowerChart1.vue b/src/views/HardwareStatus/Power/PowerChart1.vue
new file mode 100644
index 0000000000000000000000000000000000000000..6acf94bde65c48fcb4823ff9913c64913d577e38
--- /dev/null
+++ b/src/views/HardwareStatus/Power/PowerChart1.vue
@@ -0,0 +1,130 @@
+
+
+
+
+
diff --git a/src/views/HardwareStatus/Power/PowerChart2.vue b/src/views/HardwareStatus/Power/PowerChart2.vue
new file mode 100644
index 0000000000000000000000000000000000000000..f4852f54790960143b71aa35fb36ca65d46ed5c2
--- /dev/null
+++ b/src/views/HardwareStatus/Power/PowerChart2.vue
@@ -0,0 +1,204 @@
+
+
+
+
+
diff --git a/src/views/HardwareStatus/Power/PowerTabs.vue b/src/views/HardwareStatus/Power/PowerTabs.vue
new file mode 100644
index 0000000000000000000000000000000000000000..86ffd66d0817a619704fa812278c3e539f850931
--- /dev/null
+++ b/src/views/HardwareStatus/Power/PowerTabs.vue
@@ -0,0 +1,352 @@
+
+
+
+
+
+
+
+ {{ $t('pagePower.tabs.tab1.powerInfo.empty') }}
+
+
+
+
+
+
+
+
+ {{
+ $t('pagePower.tabs.tab1.power') + `${index1 + 1}`
+ }}
+
+
+
+ {{ tab1.powerNumber }}
+
+ {{ tab1.unit }}
+
+
+
+
+
+
+ {{ $t('pagePower.tabs.tab1.status') }}
+
+
+
+
+
+
+ {{ key2 }}
+
+ {{ value2 }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ $t('pagePower.tabs.tab2.powerStatus')
+ }}
+
+
+
+
+
+ W
+
+
+ BTU/h
+
+
+
+
+
+
+
+
+
+
+ {{ $t('pagePower.tabs.tab2.statisticStart') }}:
+ {{ formatDate(startTime) }}
+ {{ formatTime(startTime) }}
+
+
+
+
+
+ {{ $t('pagePower.tabs.tab2.reset') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ value }}
+
+
+
+ {{ tab2.powerCapInformation.value[key] }}
+
+
+ {{
+ (
+ tab2.powerCapInformation.value[key] * multiple
+ ).toFixed(1)
+ }}
+
+ {{ tab2.unit }}
+
+
+
+
+
+
+
+
+ {{ tab2.totalConsumedPower.fieldName }}
+
+
+
+ {{
+ (
+ tab2.totalConsumedPower.value /
+ 1000 /
+ 3600
+ ).toFixed(1)
+ }}
+
+
+ {{
+ (
+ (tab2.totalConsumedPower.value * multiple) /
+ 3600
+ ).toFixed(1)
+ }}
+
+ {{ tab2.totalConsumedPower.unit }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/HardwareStatus/Power/index.js b/src/views/HardwareStatus/Power/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..5882decdab59dd92725472c54c8c60dd0d71bdbb
--- /dev/null
+++ b/src/views/HardwareStatus/Power/index.js
@@ -0,0 +1,2 @@
+import Power from './Power.vue';
+export default Power;
diff --git a/src/views/HardwareStatus/Sensors/Sensors.vue b/src/views/HardwareStatus/Sensors/Sensors.vue
index ac70e40338cb6ebd90b056538ecb36854f13da1c..01c391f6fbe245b47b7c350f3c698fb1dd681dca 100644
--- a/src/views/HardwareStatus/Sensors/Sensors.vue
+++ b/src/views/HardwareStatus/Sensors/Sensors.vue
@@ -42,7 +42,6 @@
sort-icon-left
hover
no-sort-reset
- sticky-header="75vh"
sort-by="status"
show-empty
:no-border-collapse="true"
diff --git a/src/views/Login/Login.vue b/src/views/Login/Login.vue
index 5212f92f05714a6c1a8d16e50ebe2eab35a5a6a5..658bb2e82a79753756ad3c4cb32244aa28d0f36b 100644
--- a/src/views/Login/Login.vue
+++ b/src/views/Login/Login.vue
@@ -2,7 +2,7 @@
- {{ $t('pageLogin.alert.message') }}
+ {{ authErrorMessage }}
@@ -71,6 +71,7 @@ import { ref, watch } from 'vue';
import { useI18n } from 'vue-i18n';
import Alert from '@/components/Global/Alert';
import InputPasswordToggle from '@/components/Global/InputPasswordToggle';
+import i18n from '@/i18n';
export default {
name: 'Login',
@@ -98,23 +99,29 @@ export default {
disableSubmitButton: false,
languages: [
{
- value: 'en-US',
- text: 'English',
+ value: 'zh-CN',
+ text: '简体中文',
},
{
- value: 'ka-GE',
- text: 'ქართული',
- },
- {
- value: 'ru-RU',
- text: 'Русский',
+ value: 'en-US',
+ text: 'English',
},
],
+ loginErrorMessage: '',
};
},
computed: {
authError() {
- return this.$store.getters['authentication/authError'];
+ return (
+ this.$store.getters['authentication/authError'] ||
+ this.loginErrorMessage !== ''
+ );
+ },
+ authErrorMessage() {
+ if (this.loginErrorMessage) {
+ return this.loginErrorMessage;
+ }
+ return i18n.global.t('pageLogin.alert.message');
},
},
validations: {
@@ -147,7 +154,34 @@ export default {
this.$router.push('/');
}
})
- .catch((error) => console.log(error))
+ .catch((error) => {
+ if (error.response && error.response.status === 401) {
+ const errorData = error.response.data.error;
+ const errorCode = errorData.Oem.OurBMC.ErrorCode;
+ if (errorCode === 'INVALID_PASSWORD') {
+ const userFailedAttempts =
+ errorData.Oem.OurBMC.UserFailedAttempts || 0;
+ const maxLoginAttempts =
+ errorData.Oem.OurBMC.MaxLoginAttemptBeforeLockout || 0;
+ this.loginErrorMessage = i18n.global.t(
+ 'pageLogin.alert.invalidPassword',
+ {
+ failed: userFailedAttempts,
+ max: maxLoginAttempts,
+ },
+ );
+ } else if (errorCode === 'USER_LOCKED') {
+ this.loginErrorMessage = i18n.global.t(
+ 'pageLogin.alert.userLocked',
+ );
+ } else {
+ this.loginErrorMessage = i18n.global.t('pageLogin.alert.message');
+ }
+ } else {
+ this.loginErrorMessage = i18n.global.t('pageLogin.alert.message');
+ }
+ console.log(error);
+ })
.finally(() => (this.disableSubmitButton = false));
},
},
diff --git a/src/views/Logs/EventLogs/EventLogs.vue b/src/views/Logs/EventLogs/EventLogs.vue
index 392125c7f228b1f6ef6f81bbec98172b6b145ff6..ec7993681a6d7945357485f21fb85479e1842536 100644
--- a/src/views/Logs/EventLogs/EventLogs.vue
+++ b/src/views/Logs/EventLogs/EventLogs.vue
@@ -50,7 +50,7 @@
@batch-action="onBatchAction"
>
-
+
--
-
-
- {{ $t('pageEventLogs.additionalDataUri') }}
-
-
@@ -172,40 +167,14 @@
-
-
- {{ $t('pageEventLogs.resolved') }}
-
- {{ $t('pageEventLogs.unresolved') }}
-
+
+ {{ $t('pageEventLogs.resolved') }}
+
+ {{ $t('pageEventLogs.unresolved') }}
{{ value }}
-
-
-
-
-
-
-
-
-
-
@@ -241,10 +210,8 @@
diff --git a/src/views/Logs/OperatingLogs/index.js b/src/views/Logs/OperatingLogs/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..91ba25a24d63f02db39fda9dc377ea1e0ebbf76b
--- /dev/null
+++ b/src/views/Logs/OperatingLogs/index.js
@@ -0,0 +1,2 @@
+import OperatingLogs from './OperatingLogs.vue';
+export default OperatingLogs;
diff --git a/src/views/Logs/PostCodeLogs/PostCodeLogs.vue b/src/views/Logs/PostCodeLogs/PostCodeLogs.vue
index 6d8ff9076ec96872f0b6b97c4fbb61f1586dcd63..3e99a661788698e2f9779617f6395508489720f7 100644
--- a/src/views/Logs/PostCodeLogs/PostCodeLogs.vue
+++ b/src/views/Logs/PostCodeLogs/PostCodeLogs.vue
@@ -228,21 +228,34 @@ export default {
sortable: false,
},
{
- key: 'date',
- label: i18n.global.t('pagePostCodeLogs.table.created'),
+ key: 'Id',
+ label: 'ID',
sortable: true,
+ tdClass: 'text-nowrap',
},
{
- key: 'timeStampOffset',
- label: i18n.global.t('pagePostCodeLogs.table.timeStampOffset'),
+ key: 'Severity',
+ label: i18n.global.t('pagePostCodeLogs.table.Severity'),
+ thClass: 'text-nowrap',
+ tdClass: 'text-nowrap',
},
{
- key: 'bootCount',
- label: i18n.global.t('pagePostCodeLogs.table.bootCount'),
+ key: 'CodeType',
+ label: i18n.global.t('pagePostCodeLogs.table.CodeType'),
},
{
- key: 'postCode',
- label: i18n.global.t('pagePostCodeLogs.table.postCode'),
+ key: 'date',
+ label: i18n.global.t('pagePostCodeLogs.table.Created'),
+ sortable: true,
+ },
+ {
+ key: 'Message',
+ label: i18n.global.t('pagePostCodeLogs.table.Message'),
+ },
+ {
+ key: 'timeStampOffset',
+ label: i18n.global.t('pagePostCodeLogs.table.timeStampOffset'),
+ thClass: 'text-nowrap',
},
{
key: 'actions',
diff --git a/src/views/Logs/RasLogs/RasLogs.vue b/src/views/Logs/RasLogs/RasLogs.vue
new file mode 100644
index 0000000000000000000000000000000000000000..fcb2d51fa01d722e52598c7de1b161ae2086ed75
--- /dev/null
+++ b/src/views/Logs/RasLogs/RasLogs.vue
@@ -0,0 +1,569 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('global.action.deleteAll') }}
+
+
+ {{ $t('global.action.downloadAll') }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('global.table.selectAll') }}
+
+
+
+
+ {{ $t('global.table.selectItem') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ - {{ $t('pageEventLogs.table.name') }}:
+ - {{ dataFormatter(item.name) }}
+
+
+
+ - {{ $t('pageEventLogs.table.type') }}:
+ - {{ dataFormatter(item.type) }}
+
+
+
+ -
+ {{ $t('pageEventLogs.table.MessageArgs') }}:
+
+ -
+ {{ dataFormatter(messageArg) }}
+
+ -
+ {{ dataFormatter(messageArg) }}
+
+
+
+
+
+
+
+
+
+
+ {{ value }}
+
+
+
+ {{ formatDate(value) }}
+ {{ formatTime(value) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('pagepageRasLogs.notSupport') }}
+
+
+
+
+
+
+
+
diff --git a/src/views/Logs/RasLogs/index.js b/src/views/Logs/RasLogs/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..22b2bcf1d138c734e24f69fecf4228108e595943
--- /dev/null
+++ b/src/views/Logs/RasLogs/index.js
@@ -0,0 +1,2 @@
+import RasLogs from './RasLogs.vue';
+export default RasLogs;
diff --git a/src/views/Logs/SystemLogs/SystemLogs.vue b/src/views/Logs/SystemLogs/SystemLogs.vue
new file mode 100644
index 0000000000000000000000000000000000000000..2e50a0dd7e815c6d79cda47ef7c2719b53dad535
--- /dev/null
+++ b/src/views/Logs/SystemLogs/SystemLogs.vue
@@ -0,0 +1,158 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/Logs/SystemLogs/index.js b/src/views/Logs/SystemLogs/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..3880bfa55fc1761e03335f638cf1ef9bf6d609d5
--- /dev/null
+++ b/src/views/Logs/SystemLogs/index.js
@@ -0,0 +1,2 @@
+import SystemLogs from './SystemLogs.vue';
+export default SystemLogs;
diff --git a/src/views/Operations/FactoryReset/FactoryReset.vue b/src/views/Operations/FactoryReset/FactoryReset.vue
index f59b0a21533bcc50d941252800cfa110bad6a080..1322bffbd443f7d0538a8e082699defc030c4eee 100644
--- a/src/views/Operations/FactoryReset/FactoryReset.vue
+++ b/src/views/Operations/FactoryReset/FactoryReset.vue
@@ -12,18 +12,6 @@
v-model="resetOption"
stacked
>
-
- {{ $t('pageFactoryReset.form.resetBiosOptionLabel') }}
-
-
- {{ $t('pageFactoryReset.form.resetBiosOptionHelperText') }}
-
-
+
+
@@ -42,6 +44,7 @@ import AlertsServerPower from './FirmwareAlertServerPower';
import BmcCards from './FirmwareCardsBmc';
import FormUpdate from './FirmwareFormUpdate';
import BiosCards from './FirmwareCardsBios';
+import PbfCards from './FirmwareCardsPBF';
import PageSection from '@/components/Global/PageSection';
import PageTitle from '@/components/Global/PageTitle';
@@ -55,6 +58,7 @@ export default {
BmcCards,
FormUpdate,
BiosCards,
+ PbfCards,
PageSection,
PageTitle,
},
diff --git a/src/views/Operations/Firmware/FirmwareCardsPBF.vue b/src/views/Operations/Firmware/FirmwareCardsPBF.vue
new file mode 100644
index 0000000000000000000000000000000000000000..ecd8a2607b535fa23732c48d7984b80dd51843da
--- /dev/null
+++ b/src/views/Operations/Firmware/FirmwareCardsPBF.vue
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+ {{ $t('pageFirmware.cardTitleRunning') }}
+
+
+
+ - {{ $t('pageFirmware.cardBodyVersion') }}
+ - {{ runningVersion }}
+
+
+
+
+
+
+
+
+
diff --git a/src/views/Operations/Firmware/FirmwareFormUpdate.vue b/src/views/Operations/Firmware/FirmwareFormUpdate.vue
index 43467474d14218ecf82c1a365bb3c44edfd410fe..366b8a3f38efba718929302942c19eb7847b95f9 100644
--- a/src/views/Operations/Firmware/FirmwareFormUpdate.vue
+++ b/src/views/Operations/Firmware/FirmwareFormUpdate.vue
@@ -36,7 +36,7 @@
-
+
@@ -77,10 +77,16 @@ export default {
$t: useI18n().t,
loading,
file: null,
+ updateFirmware: {},
isServerPowerOffRequired:
process.env.VUE_APP_SERVER_OFF_REQUIRED === 'true',
};
},
+ computed: {
+ hostFirmware() {
+ return this.$store.state.firmware.biosFirmware;
+ },
+ },
validations: {
file: {
required,
@@ -90,10 +96,34 @@ export default {
this.$store.dispatch('firmware/getUpdateServiceSettings');
},
methods: {
- updateFirmware() {
- this.startLoader();
+ async update(rebootTime) {
+ // Init some state values in firmware.
+ this.$bvModal.show('modal-update-firmware-bios-progress');
+ this.infoToast(i18n.global.t('pageFirmware.toast.updateStartedMessage'), {
+ title: i18n.global.t('pageFirmware.toast.updateStarted'),
+ timestamp: true,
+ });
+ // Used for resetting basicFirmware informations.
+ await this.$store.dispatch('firmware/getFirmwareInventory');
+ /* Clear redundant Hostfirmware. this can be used in special cases such as
+ getting power off in updating. */
+ if (this.hostFirmware.length > 1) {
+ let redundantHostFirmware = this.hostFirmware.filter((item) => {
+ return item.id != this.$store.state.firmware.biosActiveFirmwareId;
+ });
+ this.$store.commit(
+ 'firmware/setHostFirmware',
+ this.hostFirmware.filter((item) => {
+ return item.id == this.$store.state.firmware.biosActiveFirmwareId;
+ }),
+ );
+ for (let item of redundantHostFirmware) {
+ this.$store.dispatch('firmware/deleteBrokenFirmware', item.id);
+ }
+ }
+ // It is time to verify update status.
const timerId = setTimeout(() => {
- this.endLoader();
+ this.$bvModal.hide('modal-update-firmware-bios-progress');
this.infoToast(
i18n.global.t('pageFirmware.toast.verifyUpdateMessage'),
{
@@ -102,21 +132,122 @@ export default {
},
);
}, 360000);
- this.infoToast(i18n.global.t('pageFirmware.toast.updateStartedMessage'), {
- title: i18n.global.t('pageFirmware.toast.updateStarted'),
- timestamp: true,
+ // this flag used for validating while post successfully or not.
+ let updateFlag = true;
+ let updatingFirmware = {};
+ updatingFirmware = await this.dispatchWorkstationUpload(
+ timerId,
+ rebootTime,
+ )
+ .then((data) => data)
+ .catch(() => {
+ updateFlag = false;
+ });
+ if (!updateFlag) return;
+ // Deliver to FirmwareModalUpdateFirmware.vue
+ this.updateFirmware = updatingFirmware;
+ // Used for compare the version of the active firmware.
+ // Watch progress in real-time and stop watching when lose progress value.
+ if (
+ updatingFirmware['type'] == 'Host' ||
+ updatingFirmware['type'] == 'Cpld' ||
+ updatingFirmware['type'] == 'Mcu'
+ ) {
+ const timerId2 = setInterval(async () => {
+ await this.$store
+ .dispatch('firmware/getUpdateinfo', updatingFirmware.taskUrl)
+ .then(async (data) => {
+ if (
+ data.TaskState == 'Completed' ||
+ data.TaskState == 'Exception'
+ )
+ clearTimeout(timerId2);
+ // Get the version of the active bios firmware.
+ if (data.TaskState == 'Completed') {
+ this.$store.commit('firmware/setUpdateProgress', 100);
+ setTimeout(async () => {
+ clearTimeout(timerId);
+ this.$bvModal.hide('modal-update-firmware-bios-progress');
+ this.successToast(
+ i18n.global.t('pageFirmware.toast.updateSuccessfully'),
+ );
+ this.infoToast(
+ i18n.global.t('pageFirmware.toast.verifyUpdateMessage'),
+ {
+ title: i18n.global.t(
+ 'pageFirmware.toast.updateSuccessfully',
+ ),
+ timestamp: true,
+ },
+ );
+ // Reset basic states.
+ this.$store.commit('firmware/setUpdateProgress', 0);
+ this.$store.dispatch('firmware/getFirmwareInventory');
+ }, 5000);
+ }
+ if (data.TaskState == 'Exception') {
+ clearTimeout(timerId);
+ this.$bvModal.hide('modal-update-firmware-bios-progress');
+ this.errorToast(
+ i18n.global.t('pageFirmware.toast.errorUpdate'),
+ );
+ this.$store.commit('firmware/setUpdateProgress', 0);
+ this.$store.dispatch('firmware/getFirmwareInventory');
+ }
+ });
+ }, 2000);
+ }
+ if (updatingFirmware['type'] == 'BMC') {
+ this.$bvModal.hide('modal-update-firmware-bios-progress');
+ this.$bvModal.show('modal-update-firmware-bmc-progress');
+ this.bmcUpdate(updatingFirmware.taskUrl, rebootTime);
+ }
+ },
+ bmcUpdate(taskUrl, rebootTime) {
+ this.$store.dispatch('firmware/getUpdateinfo', taskUrl).then((data) => {
+ if (data.TaskState == 'Completed' && data.TaskStatus == 'OK') {
+ this.$bvModal.hide('modal-update-firmware-bmc-progress');
+ if (rebootTime) {
+ this.successToast(
+ i18n.global.t('pageFirmware.toast.UpdatingRebootBmc'),
+ );
+ } else {
+ this.successToast(
+ i18n.global.t('pageFirmware.toast.OnResetUpdating'),
+ );
+ }
+ } else if (data.TaskState == 'Stopping' && data.TaskStatus == 'OK') {
+ this.$bvModal.hide('modal-update-firmware-bmc-progress');
+ this.$bvModal.show('modal-warning-evengts');
+ } else if (
+ data.TaskState == 'Exception' &&
+ data.TaskStatus == 'Warning'
+ ) {
+ this.$bvModal.hide('modal-update-firmware-bmc-progress');
+ this.errorToast(i18n.global.t('pageFirmware.toast.errorChecked'));
+ } else if (
+ data.TaskState == 'Cancelled' &&
+ data.TaskStatus == 'Warning'
+ ) {
+ this.$bvModal.hide('modal-update-firmware-bmc-progress');
+ this.errorToast(i18n.global.t('pageFirmware.toast.TimeoutCancelled'));
+ } else if (data.TaskState == 'Running' && data.TaskStatus == 'OK') {
+ this.bmcUpdate(taskUrl, rebootTime);
+ }
});
- this.dispatchWorkstationUpload(timerId);
},
- dispatchWorkstationUpload(timerId) {
- this.$store
+ async dispatchWorkstationUpload(timerId, rebootTime) {
+ return await this.$store
.dispatch('firmware/uploadFirmware', {
image: this.file,
+ rebootTime,
})
+ .then((data) => data)
.catch(({ message }) => {
- this.endLoader();
+ this.$bvModal.hide('modal-update-firmware-bios-progress');
this.errorToast(message);
clearTimeout(timerId);
+ throw message;
});
},
onSubmitUpload() {
diff --git a/src/views/Operations/Firmware/FirmwareModalUpdateFirmware.vue b/src/views/Operations/Firmware/FirmwareModalUpdateFirmware.vue
index 183cab75a784d4dace7eb1fc5fce1203c5010f64..ae07855acec936c310b942478dc06f91f35d29fe 100644
--- a/src/views/Operations/Firmware/FirmwareModalUpdateFirmware.vue
+++ b/src/views/Operations/Firmware/FirmwareModalUpdateFirmware.vue
@@ -1,41 +1,122 @@
-
-
-
- {{ $t('pageFirmware.modal.updateFirmwareInfo') }}
+
+
+
+
+ {{ $t('pageFirmware.modal.updateFirmwareInfo') }}
+
+
+ {{
+ $t('pageFirmware.modal.updateFirmwareInfo2', {
+ running: runningBmcVersion,
+ })
+ }}
+
+
+ {{ $t('pageFirmware.modal.updateFirmwareInfo3') }}
+
+
+
+ {{ $t('pageFirmware.modal.updateFirmwareInfoDefault') }}
+
+
+ {{ $t('pageFirmware.modal.biosTips') }}
-
- {{
- $t('pageFirmware.modal.updateFirmwareInfo2', {
- running: runningBmcVersion,
- })
- }}
+
+ {{ $t('pageFirmware.modal.rebootTime') }}
+
+
+
+
+
+
+
+
+ {{ complete }}: {{ updateProgress }}%
+
+
+ {{ $t('pageFirmware.modal.bmcUpdatingMessage') }}
+
+
+
+
+
+
+
+ {{ $t('pageFirmware.toast.errorStop') }}
-
- {{ $t('pageFirmware.modal.updateFirmwareInfo3') }}
-
-
-
- {{ $t('pageFirmware.modal.updateFirmwareInfoDefault') }}
-
-
+
+
diff --git a/src/views/Operations/Kvm/Kvm.vue b/src/views/Operations/Kvm/Kvm.vue
index 1a41baaf9e0c7ff438b0832acd53382223fa5eae..c2f86175b1be37af7d01f057c76875bc4901db91 100644
--- a/src/views/Operations/Kvm/Kvm.vue
+++ b/src/views/Operations/Kvm/Kvm.vue
@@ -1,8 +1,8 @@
-
+
-
+
@@ -14,11 +14,26 @@ import KvmConsole from './KvmConsole';
export default {
name: 'Kvm',
components: { PageTitle, KvmConsole },
+ provide() {
+ return {
+ setIsFullWindow: this.setIsFullWindow,
+ };
+ },
+ data() {
+ return {
+ isFullWindow: false,
+ };
+ },
+ methods: {
+ setIsFullWindow(status) {
+ this.isFullWindow = status;
+ },
+ },
};
diff --git a/src/views/Operations/Kvm/KvmConsole.vue b/src/views/Operations/Kvm/KvmConsole.vue
index 64ee8977dbf25b5d5ee556de366763bc3be70ae6..640165740ed1fa2181459fed8dd7ddb55b2833d8 100644
--- a/src/views/Operations/Kvm/KvmConsole.vue
+++ b/src/views/Operations/Kvm/KvmConsole.vue
@@ -1,6 +1,6 @@
-
diff --git a/src/views/Operations/RemoteDebug/RemoteDebug.vue b/src/views/Operations/RemoteDebug/RemoteDebug.vue
new file mode 100644
index 0000000000000000000000000000000000000000..5c5e397c832fb165f2a3d9c37b48eb7595b1d146
--- /dev/null
+++ b/src/views/Operations/RemoteDebug/RemoteDebug.vue
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/Operations/RemoteDebug/RemoteDebugConsole.vue b/src/views/Operations/RemoteDebug/RemoteDebugConsole.vue
new file mode 100644
index 0000000000000000000000000000000000000000..2a947d42b98f0902ebc296fcfd80de7077365f0b
--- /dev/null
+++ b/src/views/Operations/RemoteDebug/RemoteDebugConsole.vue
@@ -0,0 +1,496 @@
+
+
+
+
+
+ -
+ {{ $t('pageRemoteDebug.status') }}:
+
+ -
+ {{ connectionStatus }}
+
+
+
+
+
+
+ Debug {{ $t('global.status.enabled') }}
+
+ Debug {{ $t('global.status.disabled') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/Operations/RemoteDebug/index.js b/src/views/Operations/RemoteDebug/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..102fbf93234eef3b9b1200540b6724287fa916af
--- /dev/null
+++ b/src/views/Operations/RemoteDebug/index.js
@@ -0,0 +1,2 @@
+import RemoteDebug from './RemoteDebug.vue';
+export default RemoteDebug;
diff --git a/src/views/Operations/SerialOverLan/SerialOverLanConsole.vue b/src/views/Operations/SerialOverLan/SerialOverLanConsole.vue
index 8f1c4bc6d7b9e094fc5c13c4cfdb0be827f9350a..9f2bf7a86cd8dc84c57121d8c7e87b99b8578e93 100644
--- a/src/views/Operations/SerialOverLan/SerialOverLanConsole.vue
+++ b/src/views/Operations/SerialOverLan/SerialOverLanConsole.vue
@@ -30,7 +30,12 @@
-
+
+
+ {{ $t('pageSystemLogs.logMessage.HostSerialPortLogs') }}
+
+
+
@@ -51,6 +56,8 @@ import { throttle } from 'lodash';
import IconLaunch from '@carbon/icons-vue/es/launch/20';
import StatusIcon from '@/components/Global/StatusIcon';
import { useI18n } from 'vue-i18n';
+import IconDownload from '@carbon/icons-vue/es/document--download/20';
+import BVToastMixin from '@/components/Mixins/BVToastMixin';
export default {
name: 'SerialOverLanConsole',
@@ -58,7 +65,9 @@ export default {
Alert,
IconLaunch,
StatusIcon,
+ IconDownload,
},
+ mixins: [BVToastMixin],
props: {
isFullWindow: {
type: Boolean,
@@ -158,6 +167,16 @@ export default {
'directories=no,titlebar=no,toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=yes,width=600,height=550',
);
},
+ downloadLog() {
+ this.$store
+ .dispatch('systemLogs/download')
+ .then((value) => {
+ this.successToast(value);
+ })
+ .catch((message) => {
+ this.errorToast(message);
+ });
+ },
},
};
@@ -173,4 +192,8 @@ export default {
width: 97%;
margin: 1.5%;
}
+.download-icon :hover {
+ cursor: pointer;
+ color: blue;
+}
diff --git a/src/views/Operations/ServerPowerOperations/ServerPowerOperations.vue b/src/views/Operations/ServerPowerOperations/ServerPowerOperations.vue
index 491dc7f92189b570642cb5fe76f044d7dc707dac..923a788d56b0402c2e0bab5fb80dcac4e9cf95f2 100644
--- a/src/views/Operations/ServerPowerOperations/ServerPowerOperations.vue
+++ b/src/views/Operations/ServerPowerOperations/ServerPowerOperations.vue
@@ -162,6 +162,17 @@
+
+
+
+
+
+
+
+
+
@@ -173,12 +184,20 @@ import BootSettings from './BootSettings';
import LoadingBarMixin from '@/components/Mixins/LoadingBarMixin';
import Alert from '@/components/Global/Alert';
import InfoTooltip from '@/components/Global/InfoTooltip';
+import BootTimeline from '@/components/Global/BootTimeline';
import { useI18n } from 'vue-i18n';
import i18n from '@/i18n';
export default {
name: 'ServerPowerOperations',
- components: { PageTitle, PageSection, BootSettings, Alert, InfoTooltip },
+ components: {
+ PageTitle,
+ PageSection,
+ BootSettings,
+ Alert,
+ InfoTooltip,
+ BootTimeline,
+ },
mixins: [BVToastMixin, LoadingBarMixin],
beforeRouteLeave(to, from, next) {
this.hideLoader();
@@ -191,6 +210,8 @@ export default {
rebootOption: 'orderly',
shutdownOption: 'orderly',
},
+ pollInterval: null,
+ pollIntervalTime: 100, // 0.1秒轮询次
};
},
computed: {
@@ -211,6 +232,9 @@ export default {
this.$store.getters['serverBootSettings/bootSourceOptions'];
return bootOptions.length !== 0;
},
+ bootHistory() {
+ return this.$store.getters['serverBootSettings/bootHistory'] || [];
+ },
},
created() {
this.startLoader();
@@ -225,6 +249,21 @@ export default {
bootSettingsPromise,
]).finally(() => this.endLoader());
},
+ mounted() {
+ // 页面加载后立即轮询BootHistory
+ this.fetchBootHistory();
+ this.pollInterval = setInterval(
+ this.fetchBootHistory,
+ this.pollIntervalTime,
+ );
+ },
+ beforeUnmount() {
+ // 页面销毁时清除轮询
+ if (this.pollInterval) {
+ clearInterval(this.pollInterval);
+ this.pollInterval = null;
+ }
+ },
methods: {
powerOn() {
this.$store.dispatch('controls/serverPowerOn');
@@ -284,6 +323,17 @@ export default {
});
}
},
+ async fetchBootHistory() {
+ try {
+ await this.$store.dispatch('serverBootSettings/getBootHistory');
+ } catch (error) {
+ console.error('Error fetching boot history:', error);
+ }
+ },
},
};
+
+
diff --git a/src/views/Overview/Overview.vue b/src/views/Overview/Overview.vue
index 2bf4205fa3fa185b6289433400461baf9ba26d4d..37f37f0e0b6a8d962deddd8abe4ad352c1324968 100644
--- a/src/views/Overview/Overview.vue
+++ b/src/views/Overview/Overview.vue
@@ -1,18 +1,18 @@
-
+
-
+
-
+
@@ -57,7 +57,17 @@ export default {
data() {
return {
$t: useI18n().t,
- showDumps: process.env.VUE_APP_ENV_NAME === 'ibm',
+ showDumps:
+ process.env.VUE_APP_ENV_NAME === 'ibm' &&
+ process.env.VUE_APP_LOGS_DUMPS !== 'false' &&
+ process.env.VUE_APP_LOGS !== 'false',
+ showSOL:
+ process.env.VUE_APP_OPERATIONS !== 'false' &&
+ process.env.VUE_APP_OPERATIONS_SOL !== 'false',
+ showFirmware:
+ process.env.VUE_APP_OPERATIONS !== 'false' &&
+ process.env.VUE_APP_OPERATIONS_FIRMWARE !== 'false',
+ showPowerLimit: process.env.VUE_APP_RESOURCE_MANAGEMENT !== 'false',
};
},
created() {
@@ -89,14 +99,14 @@ export default {
const promises = [
eventsPromise,
- firmwarePromise,
inventoryPromise,
networkPromise,
- powerPromise,
- quicklinksPromise,
serverPromise,
];
if (this.showDumps) promises.push(dumpsPromise);
+ if (this.showSOL) promises.push(quicklinksPromise);
+ if (this.showFirmware) promises.push(firmwarePromise);
+ if (this.showPowerLimit) promises.push(powerPromise);
Promise.all(promises).finally(() => this.endLoader());
},
};
diff --git a/src/views/Overview/OverviewFirmware.vue b/src/views/Overview/OverviewFirmware.vue
index 0be920fe882e32803b30cf1e4e51c2aa6de3f545..e7af84b765f6118fd400099343b9a301b6faf25e 100644
--- a/src/views/Overview/OverviewFirmware.vue
+++ b/src/views/Overview/OverviewFirmware.vue
@@ -16,6 +16,8 @@
- {{ $t('pageOverview.firmwareVersion') }}
- {{ dataFormatter(firmwareVersion) }}
+ - {{ $t('pageOverview.PBFVersion') }}
+ - {{ dataFormatter(pbfVersion) }}
@@ -51,12 +53,18 @@ export default {
activeBmcFirmware() {
return this.$store.getters[`firmware/activeBmcFirmware`];
},
+ activeBiosFirmware() {
+ return this.$store.getters[`firmware/activeBiosFirmware`];
+ },
firmwareVersion() {
return this.server?.firmwareVersion;
},
runningVersion() {
return this.activeBmcFirmware?.version;
},
+ pbfVersion() {
+ return this.activeBiosFirmware?.pbfVersion;
+ },
}),
},
created() {
diff --git a/src/views/Overview/OverviewPower.vue b/src/views/Overview/OverviewPower.vue
index 74a737e20af1f7adf353e3ecaf5808c4e7a019f6..2b8cbb92b445240d8f0db957f28d348b152cb2d2 100644
--- a/src/views/Overview/OverviewPower.vue
+++ b/src/views/Overview/OverviewPower.vue
@@ -1,7 +1,7 @@
@@ -41,12 +41,12 @@ export default {
},
computed: {
...mapGetters({
- powerCapValue: 'powerControl/powerCapValue',
- powerConsumptionValue: 'powerControl/powerConsumptionValue',
+ powerCapValue: 'powerLimit/powerCapValue',
+ powerConsumptionValue: 'powerLimit/powerConsumptionValue',
}),
},
created() {
- this.$store.dispatch('powerControl/getPowerControl').finally(() => {
+ this.$store.dispatch('powerLimit/getPowerControl').finally(() => {
this.$root.$emit('overview-power-complete');
});
},
diff --git a/src/views/ProfileSettings/ProfileSettings.vue b/src/views/ProfileSettings/ProfileSettings.vue
index 561816e00b03d7c3dff9dfc09013a9b57b674bdf..73ee63f0f61d383ec42b360a969bdac9e637ee5b 100644
--- a/src/views/ProfileSettings/ProfileSettings.vue
+++ b/src/views/ProfileSettings/ProfileSettings.vue
@@ -207,7 +207,7 @@ export default {
maxLength: maxLength(this.passwordRequirements.maxLength),
},
confirmPassword: {
- sameAsPassword: sameAs('newPassword'),
+ sameAsPassword: sameAs(this.form.newPassword),
},
},
};
diff --git a/src/views/ResourceManagement/Power.vue b/src/views/ResourceManagement/PowerLimit.vue
similarity index 67%
rename from src/views/ResourceManagement/Power.vue
rename to src/views/ResourceManagement/PowerLimit.vue
index ac700915985a09304de3f3ebe86016c3d7999a92..405dda1f929fcdbbaa809d013e1016f9293cee22 100644
--- a/src/views/ResourceManagement/Power.vue
+++ b/src/views/ResourceManagement/PowerLimit.vue
@@ -44,7 +44,7 @@
{{
$t('pagePower.powerCapLabelTextInfo', {
min: 1,
- max: 10000,
+ max: 1000,
})
}}
@@ -63,7 +63,7 @@
{{ $t('global.form.fieldRequired') }}
-
+
{{ $t('global.form.invalidValue') }}
@@ -90,12 +90,12 @@ import VuelidateMixin from '@/components/Mixins/VuelidateMixin.js';
import { useVuelidate } from '@vuelidate/core';
import BVToastMixin from '@/components/Mixins/BVToastMixin';
-import { requiredIf, between } from '@vuelidate/validators';
+import { requiredIf } from '@vuelidate/validators';
import { mapGetters } from 'vuex';
import { useI18n } from 'vue-i18n';
export default {
- name: 'Power',
+ name: 'PowerLimit',
components: { PageTitle },
mixins: [VuelidateMixin, BVToastMixin, LoadingBarMixin],
beforeRouteLeave(to, from, next) {
@@ -111,11 +111,12 @@ export default {
return {
$t: useI18n().t,
loading,
+ powerCapCheckboxState: false, // Track checkbox state independently
};
},
computed: {
...mapGetters({
- powerConsumptionValue: 'powerControl/powerConsumptionValue',
+ powerConsumptionValue: 'powerLimit/powerConsumptionValue',
}),
/**
@@ -124,52 +125,69 @@ export default {
**/
isPowerCapFieldEnabled: {
get() {
- return this.powerCapValue !== null;
+ // The field is enabled if the checkbox was explicitly checked
+ // Only controlled by the checkbox, not by the input value
+ return this.powerCapCheckboxState;
},
set(value) {
this.v$.$reset();
- let newValue = null;
- if (value) {
- if (this.powerCapValue) {
- newValue = this.powerCapValue;
- } else {
- newValue = '';
- }
+ // Only update the checkbox state, don't touch the input value
+ this.powerCapCheckboxState = value;
+ // If unchecking, we might want to clear the value
+ if (!value) {
+ this.$store.dispatch('powerLimit/setPowerCapUpdatedValue', null);
}
- this.$store.dispatch('powerControl/setPowerCapUpdatedValue', newValue);
},
},
powerCapValue: {
get() {
- return this.$store.getters['powerControl/powerCapValue'];
+ return this.$store.getters['powerLimit/powerCapValue'];
},
set(value) {
this.v$.$touch();
- this.$store.dispatch('powerControl/setPowerCapUpdatedValue', value);
+ const newValue = value === '' || value === null ? null : Number(value);
+ this.$store.dispatch('powerLimit/setPowerCapUpdatedValue', newValue);
+ // Don't change checkbox state when user edits the input
},
},
},
created() {
this.startLoader();
- this.$store
- .dispatch('powerControl/getPowerControl')
- .finally(() => this.endLoader());
+ this.$store.dispatch('powerLimit/getPowerControl').finally(() => {
+ // Initialize checkbox state based on whether power cap is set
+ this.powerCapCheckboxState =
+ this.powerCapValue !== null && this.powerCapValue !== undefined;
+ this.endLoader();
+ });
},
- validations: {
- powerCapValue: {
- between: between(1, 10000),
- required: requiredIf(function () {
- return this.isPowerCapFieldEnabled;
- }),
- },
+ validations() {
+ return {
+ powerCapValue: {
+ required: requiredIf(() => this.powerCapCheckboxState),
+ validateRange(value) {
+ // If field is disabled (checkbox not checked), always pass
+ if (!this.powerCapCheckboxState) {
+ return true;
+ }
+ // Check if value is between 1 and 1000
+ const num = Number(value);
+ return !isNaN(num) && num >= 1 && num <= 1000;
+ },
+ },
+ };
},
methods: {
submitForm() {
this.v$.$touch();
if (this.v$.$invalid) return;
+
+ const valueToSave = this.powerCapCheckboxState
+ ? Number(this.powerCapValue)
+ : null;
+
this.startLoader();
this.$store
- .dispatch('powerControl/setPowerControl', this.powerCapValue)
+ .dispatch('powerLimit/setPowerControl', valueToSave)
.then((message) => this.successToast(message))
.catch(({ message }) => this.errorToast(message))
.finally(() => this.endLoader());
diff --git a/src/views/ResourceManagement/index.js b/src/views/ResourceManagement/index.js
index 5882decdab59dd92725472c54c8c60dd0d71bdbb..09bef0a04ba51ccb0d7c1ea8a1749a0f5683e5c3 100644
--- a/src/views/ResourceManagement/index.js
+++ b/src/views/ResourceManagement/index.js
@@ -1,2 +1,2 @@
-import Power from './Power.vue';
-export default Power;
+import PowerLimit from './PowerLimit.vue';
+export default PowerLimit;
diff --git a/src/views/SecurityAndAccess/Certificates/CsrCountryCodes.js b/src/views/SecurityAndAccess/Certificates/CsrCountryCodes.js
index 8e8b213fcadbaad6a99f00150eb8a32de70f5277..68c3745f8b890215219246bf68e5d2921a67efcc 100644
--- a/src/views/SecurityAndAccess/Certificates/CsrCountryCodes.js
+++ b/src/views/SecurityAndAccess/Certificates/CsrCountryCodes.js
@@ -1,347 +1,431 @@
-//import i18n from '@/i18n';
+import i18n from '@/i18n';
+
+// export const COUNTRY_LIST = [];
-export const COUNTRY_LIST = [];
-/*
export const COUNTRY_LIST = [
- { name: 'Afghanistan', code: 'AF', label: i18n.t('countries.AF') },
- { name: 'Albania', code: 'AL', label: i18n.t('countries.AL') },
- { name: 'Algeria', code: 'DZ', label: i18n.t('countries.DZ') },
- { name: 'American Samoa', code: 'AS', label: i18n.t('countries.AS') },
- { name: 'Andorra', code: 'AD', label: i18n.t('countries.AD') },
- { name: 'Angola', code: 'AO', label: i18n.t('countries.AO') },
- { name: 'Anguilla', code: 'AI', label: i18n.t('countries.AI') },
- { name: 'Antarctica', code: 'AQ', label: i18n.t('countries.AQ') },
- { name: 'Antigua and Barbuda', code: 'AG', label: i18n.t('countries.AG') },
- { name: 'Argentina', code: 'AR', label: i18n.t('countries.AR') },
- { name: 'Armenia', code: 'AM', label: i18n.t('countries.AM') },
- { name: 'Aruba', code: 'AW', label: i18n.t('countries.AW') },
- { name: 'Australia', code: 'AU', label: i18n.t('countries.AU') },
- { name: 'Austria', code: 'AT', label: i18n.t('countries.AT') },
- { name: 'Azerbaijan', code: 'AZ', label: i18n.t('countries.AZ') },
- { name: 'Bahamas, The', code: 'BS', label: i18n.t('countries.BS') },
- { name: 'Bahrain', code: 'BH', label: i18n.t('countries.BH') },
- { name: 'Bangladesh', code: 'BD', label: i18n.t('countries.BD') },
- { name: 'Barbados', code: 'BB', label: i18n.t('countries.BB') },
- { name: 'Belarus', code: 'BY', label: i18n.t('countries.BY') },
- { name: 'Belgium', code: 'BE', label: i18n.t('countries.BE') },
- { name: 'Belize', code: 'BZ', label: i18n.t('countries.BZ') },
- { name: 'Benin', code: 'BJ', label: i18n.t('countries.BJ') },
- { name: 'Bermuda', code: 'BM', label: i18n.t('countries.BM') },
- { name: 'Bhutan', code: 'BT', label: i18n.t('countries.BT') },
- { name: 'Bolivia', code: 'BO', label: i18n.t('countries.BO') },
+ { name: 'Afghanistan', code: 'AF', label: i18n.global.t('countries.AF') },
+ { name: 'Albania', code: 'AL', label: i18n.global.t('countries.AL') },
+ { name: 'Algeria', code: 'DZ', label: i18n.global.t('countries.DZ') },
+ { name: 'American Samoa', code: 'AS', label: i18n.global.t('countries.AS') },
+ { name: 'Andorra', code: 'AD', label: i18n.global.t('countries.AD') },
+ { name: 'Angola', code: 'AO', label: i18n.global.t('countries.AO') },
+ { name: 'Anguilla', code: 'AI', label: i18n.global.t('countries.AI') },
+ { name: 'Antarctica', code: 'AQ', label: i18n.global.t('countries.AQ') },
+ {
+ name: 'Antigua and Barbuda',
+ code: 'AG',
+ label: i18n.global.t('countries.AG'),
+ },
+ { name: 'Argentina', code: 'AR', label: i18n.global.t('countries.AR') },
+ { name: 'Armenia', code: 'AM', label: i18n.global.t('countries.AM') },
+ { name: 'Aruba', code: 'AW', label: i18n.global.t('countries.AW') },
+ { name: 'Australia', code: 'AU', label: i18n.global.t('countries.AU') },
+ { name: 'Austria', code: 'AT', label: i18n.global.t('countries.AT') },
+ { name: 'Azerbaijan', code: 'AZ', label: i18n.global.t('countries.AZ') },
+ { name: 'Bahamas, The', code: 'BS', label: i18n.global.t('countries.BS') },
+ { name: 'Bahrain', code: 'BH', label: i18n.global.t('countries.BH') },
+ { name: 'Bangladesh', code: 'BD', label: i18n.global.t('countries.BD') },
+ { name: 'Barbados', code: 'BB', label: i18n.global.t('countries.BB') },
+ { name: 'Belarus', code: 'BY', label: i18n.global.t('countries.BY') },
+ { name: 'Belgium', code: 'BE', label: i18n.global.t('countries.BE') },
+ { name: 'Belize', code: 'BZ', label: i18n.global.t('countries.BZ') },
+ { name: 'Benin', code: 'BJ', label: i18n.global.t('countries.BJ') },
+ { name: 'Bermuda', code: 'BM', label: i18n.global.t('countries.BM') },
+ { name: 'Bhutan', code: 'BT', label: i18n.global.t('countries.BT') },
+ { name: 'Bolivia', code: 'BO', label: i18n.global.t('countries.BO') },
{
name: 'Bonaire, Sint Eustatius and Saba',
code: 'BQ',
- label: i18n.t('countries.BQ'),
+ label: i18n.global.t('countries.BQ'),
},
{
name: 'Bosnia and Herzegovina ',
code: 'BA',
- label: i18n.t('countries.BA'),
+ label: i18n.global.t('countries.BA'),
},
- { name: 'Bostwana', code: 'BW', label: i18n.t('countries.BW') },
- { name: 'Bouvet Island', code: 'BV', label: i18n.t('countries.BV') },
- { name: 'Brazil', code: 'BR', label: i18n.t('countries.BR') },
+ { name: 'Bostwana', code: 'BW', label: i18n.global.t('countries.BW') },
+ { name: 'Bouvet Island', code: 'BV', label: i18n.global.t('countries.BV') },
+ { name: 'Brazil', code: 'BR', label: i18n.global.t('countries.BR') },
{
name: 'British Indian Ocean Territory',
code: 'IO',
- label: i18n.t('countries.IO'),
- },
- { name: 'Brunei Darussalam ', code: 'BN', label: i18n.t('countries.BN') },
- { name: 'Bulgaria', code: 'BG', label: i18n.t('countries.BG') },
- { name: 'Burkina Faso', code: 'BF', label: i18n.t('countries.BF') },
- { name: 'Burundi', code: 'BI', label: i18n.t('countries.BI') },
- { name: 'Cabo Verde', code: 'CV', label: i18n.t('countries.CV') },
- { name: 'Cambodia', code: 'KH', label: i18n.t('countries.KH') },
- { name: 'Cameroon', code: 'CM', label: i18n.t('countries.CM') },
- { name: 'Canada', code: 'CA', label: i18n.t('countries.CA') },
- { name: 'Cayman Islands', code: 'KY', label: i18n.t('countries.KY') },
+ label: i18n.global.t('countries.IO'),
+ },
+ {
+ name: 'Brunei Darussalam ',
+ code: 'BN',
+ label: i18n.global.t('countries.BN'),
+ },
+ { name: 'Bulgaria', code: 'BG', label: i18n.global.t('countries.BG') },
+ { name: 'Burkina Faso', code: 'BF', label: i18n.global.t('countries.BF') },
+ { name: 'Burundi', code: 'BI', label: i18n.global.t('countries.BI') },
+ { name: 'Cabo Verde', code: 'CV', label: i18n.global.t('countries.CV') },
+ { name: 'Cambodia', code: 'KH', label: i18n.global.t('countries.KH') },
+ { name: 'Cameroon', code: 'CM', label: i18n.global.t('countries.CM') },
+ { name: 'Canada', code: 'CA', label: i18n.global.t('countries.CA') },
+ { name: 'Cayman Islands', code: 'KY', label: i18n.global.t('countries.KY') },
{
name: 'Central African Republic',
code: 'CF',
- label: i18n.t('countries.CF'),
+ label: i18n.global.t('countries.CF'),
+ },
+ { name: 'Chad', code: 'TD', label: i18n.global.t('countries.TD') },
+ { name: 'Chile', code: 'CL', label: i18n.global.t('countries.CL') },
+ { name: 'China', code: 'CN', label: i18n.global.t('countries.CN') },
+ {
+ name: 'Christmas Island ',
+ code: 'CX',
+ label: i18n.global.t('countries.CX'),
+ },
+ {
+ name: 'Cocos(Keeling) Islands',
+ code: 'CC',
+ label: i18n.global.t('countries.CC'),
},
- { name: 'Chad', code: 'TD', label: i18n.t('countries.TD') },
- { name: 'Chile', code: 'CL', label: i18n.t('countries.CL') },
- { name: 'China', code: 'CN', label: i18n.t('countries.CN') },
- { name: 'Christmas Island ', code: 'CX', label: i18n.t('countries.CX') },
- { name: 'Cocos(Keeling) Islands', code: 'CC', label: i18n.t('countries.CC') },
- { name: 'Columbia', code: 'CO', label: i18n.t('countries.CO') },
- { name: 'Comoros', code: 'KM', label: i18n.t('countries.KM') },
+ { name: 'Columbia', code: 'CO', label: i18n.global.t('countries.CO') },
+ { name: 'Comoros', code: 'KM', label: i18n.global.t('countries.KM') },
{
name: 'Congo, The Democratic Republic of the',
code: 'CD',
- label: i18n.t('countries.CD'),
- },
- { name: 'Congo', code: 'CG', label: i18n.t('countries.CG') },
- { name: 'Cook Islands', code: 'CK', label: i18n.t('countries.CK') },
- { name: 'Costa Rica', code: 'CR', label: i18n.t('countries.CR') },
- { name: 'Croatia', code: 'HR', label: i18n.t('countries.HR') },
- { name: 'Cuba', code: 'CU', label: i18n.t('countries.CU') },
- { name: 'Curaçao', code: 'CW', label: i18n.t('countries.CW') },
- { name: 'Cyprus', code: 'CY', label: i18n.t('countries.CY') },
- { name: 'Czechia', code: 'CZ', label: i18n.t('countries.CZ') },
- { name: "Côte d'Ivoire", code: 'CI', label: i18n.t('countries.CI') },
- { name: 'Denmark', code: 'DK', label: i18n.t('countries.DK') },
- { name: 'Djibouti', code: 'DJ', label: i18n.t('countries.DJ') },
- { name: 'Dominica', code: 'DM', label: i18n.t('countries.DM') },
- { name: 'Dominican Republic', code: 'DO', label: i18n.t('countries.DO') },
- { name: 'Ecuador', code: 'EC', label: i18n.t('countries.EC') },
- { name: 'Egypt', code: 'EG', label: i18n.t('countries.EG') },
- { name: 'El Salvador', code: 'SV', label: i18n.t('countries.SV') },
- { name: 'Equatorial Guinea ', code: 'GQ', label: i18n.t('countries.GQ') },
- { name: 'Eritrea', code: 'ER', label: i18n.t('countries.ER') },
- { name: 'Estonia', code: 'EE', label: i18n.t('countries.EE') },
- { name: 'Eswatini', code: 'SZ', label: i18n.t('countries.SZ') },
- { name: 'Ethiopia', code: 'ET', label: i18n.t('countries.ET') },
+ label: i18n.global.t('countries.CD'),
+ },
+ { name: 'Congo', code: 'CG', label: i18n.global.t('countries.CG') },
+ { name: 'Cook Islands', code: 'CK', label: i18n.global.t('countries.CK') },
+ { name: 'Costa Rica', code: 'CR', label: i18n.global.t('countries.CR') },
+ { name: 'Croatia', code: 'HR', label: i18n.global.t('countries.HR') },
+ { name: 'Cuba', code: 'CU', label: i18n.global.t('countries.CU') },
+ { name: 'Curaçao', code: 'CW', label: i18n.global.t('countries.CW') },
+ { name: 'Cyprus', code: 'CY', label: i18n.global.t('countries.CY') },
+ { name: 'Czechia', code: 'CZ', label: i18n.global.t('countries.CZ') },
+ { name: "Côte d'Ivoire", code: 'CI', label: i18n.global.t('countries.CI') },
+ { name: 'Denmark', code: 'DK', label: i18n.global.t('countries.DK') },
+ { name: 'Djibouti', code: 'DJ', label: i18n.global.t('countries.DJ') },
+ { name: 'Dominica', code: 'DM', label: i18n.global.t('countries.DM') },
+ {
+ name: 'Dominican Republic',
+ code: 'DO',
+ label: i18n.global.t('countries.DO'),
+ },
+ { name: 'Ecuador', code: 'EC', label: i18n.global.t('countries.EC') },
+ { name: 'Egypt', code: 'EG', label: i18n.global.t('countries.EG') },
+ { name: 'El Salvador', code: 'SV', label: i18n.global.t('countries.SV') },
+ {
+ name: 'Equatorial Guinea ',
+ code: 'GQ',
+ label: i18n.global.t('countries.GQ'),
+ },
+ { name: 'Eritrea', code: 'ER', label: i18n.global.t('countries.ER') },
+ { name: 'Estonia', code: 'EE', label: i18n.global.t('countries.EE') },
+ { name: 'Eswatini', code: 'SZ', label: i18n.global.t('countries.SZ') },
+ { name: 'Ethiopia', code: 'ET', label: i18n.global.t('countries.ET') },
{
name: 'Falkland Islands (Malvinas)',
code: 'FK',
- label: i18n.t('countries.FK'),
+ label: i18n.global.t('countries.FK'),
+ },
+ { name: 'Faroe Islands', code: 'FO', label: i18n.global.t('countries.FO') },
+ { name: 'Fiji', code: 'FJ', label: i18n.global.t('countries.FJ') },
+ { name: 'Finland', code: 'FI', label: i18n.global.t('countries.FI') },
+ { name: 'France', code: 'FR', label: i18n.global.t('countries.FR') },
+ { name: 'French Guiana', code: 'GF', label: i18n.global.t('countries.GF') },
+ {
+ name: 'French Polynesia',
+ code: 'PF',
+ label: i18n.global.t('countries.PF'),
},
- { name: 'Faroe Islands', code: 'FO', label: i18n.t('countries.FO') },
- { name: 'Fiji', code: 'FJ', label: i18n.t('countries.FJ') },
- { name: 'Finland', code: 'FI', label: i18n.t('countries.FI') },
- { name: 'France', code: 'FR', label: i18n.t('countries.FR') },
- { name: 'French Guiana', code: 'GF', label: i18n.t('countries.GF') },
- { name: 'French Polynesia', code: 'PF', label: i18n.t('countries.PF') },
{
name: 'French Southern Territories',
code: 'TF',
- label: i18n.t('countries.TF'),
- },
- { name: 'Gabon', code: 'GA', label: i18n.t('countries.GA') },
- { name: 'Gambia, The', code: 'GM', label: i18n.t('countries.GM') },
- { name: 'Georgia', code: 'GE', label: i18n.t('countries.GE') },
- { name: 'Germany', code: 'DE', label: i18n.t('countries.DE') },
- { name: 'Ghana', code: 'GH', label: i18n.t('countries.GH') },
- { name: 'Gibraltar', code: 'GI', label: i18n.t('countries.GI') },
- { name: 'Greece', code: 'GR', label: i18n.t('countries.GR') },
- { name: 'Greenland', code: 'GL', label: i18n.t('countries.GL') },
- { name: 'Grenada', code: 'GD', label: i18n.t('countries.GD') },
- { name: 'Guadeloupe', code: 'GP', label: i18n.t('countries.GP') },
- { name: 'Guam', code: 'GU', label: i18n.t('countries.GU') },
- { name: 'Guatemala', code: 'GT', label: i18n.t('countries.GT') },
- { name: 'Guernsey', code: 'GG', label: i18n.t('countries.GG') },
- { name: 'Guinea', code: 'GN', label: i18n.t('countries.GN') },
- { name: 'Guinea-Bissau', code: 'GW', label: i18n.t('countries.GW') },
- { name: 'Guyana', code: 'GY', label: i18n.t('countries.GY') },
- { name: 'Haiti', code: 'HT', label: i18n.t('countries.HT') },
+ label: i18n.global.t('countries.TF'),
+ },
+ { name: 'Gabon', code: 'GA', label: i18n.global.t('countries.GA') },
+ { name: 'Gambia, The', code: 'GM', label: i18n.global.t('countries.GM') },
+ { name: 'Georgia', code: 'GE', label: i18n.global.t('countries.GE') },
+ { name: 'Germany', code: 'DE', label: i18n.global.t('countries.DE') },
+ { name: 'Ghana', code: 'GH', label: i18n.global.t('countries.GH') },
+ { name: 'Gibraltar', code: 'GI', label: i18n.global.t('countries.GI') },
+ { name: 'Greece', code: 'GR', label: i18n.global.t('countries.GR') },
+ { name: 'Greenland', code: 'GL', label: i18n.global.t('countries.GL') },
+ { name: 'Grenada', code: 'GD', label: i18n.global.t('countries.GD') },
+ { name: 'Guadeloupe', code: 'GP', label: i18n.global.t('countries.GP') },
+ { name: 'Guam', code: 'GU', label: i18n.global.t('countries.GU') },
+ { name: 'Guatemala', code: 'GT', label: i18n.global.t('countries.GT') },
+ { name: 'Guernsey', code: 'GG', label: i18n.global.t('countries.GG') },
+ { name: 'Guinea', code: 'GN', label: i18n.global.t('countries.GN') },
+ { name: 'Guinea-Bissau', code: 'GW', label: i18n.global.t('countries.GW') },
+ { name: 'Guyana', code: 'GY', label: i18n.global.t('countries.GY') },
+ { name: 'Haiti', code: 'HT', label: i18n.global.t('countries.HT') },
{
name: 'Heard Island and McDonald Islands',
code: 'HM',
- label: i18n.t('countries.HM'),
+ label: i18n.global.t('countries.HM'),
},
- { name: 'Holy See', code: 'VA', label: i18n.t('countries.VA') },
- { name: 'Honduras', code: 'HN', label: i18n.t('countries.HN') },
- { name: 'Hong Kong', code: 'HK', label: i18n.t('countries.HK') },
- { name: 'Hungary', code: 'HU', label: i18n.t('countries.HU') },
- { name: 'Iceland', code: 'IS', label: i18n.t('countries.IS') },
- { name: 'India', code: 'IN', label: i18n.t('countries.IN') },
- { name: 'Indonesia', code: 'ID', label: i18n.t('countries.ID') },
+ { name: 'Holy See', code: 'VA', label: i18n.global.t('countries.VA') },
+ { name: 'Honduras', code: 'HN', label: i18n.global.t('countries.HN') },
+ { name: 'Hong Kong', code: 'HK', label: i18n.global.t('countries.HK') },
+ { name: 'Hungary', code: 'HU', label: i18n.global.t('countries.HU') },
+ { name: 'Iceland', code: 'IS', label: i18n.global.t('countries.IS') },
+ { name: 'India', code: 'IN', label: i18n.global.t('countries.IN') },
+ { name: 'Indonesia', code: 'ID', label: i18n.global.t('countries.ID') },
{
name: 'Iran, Islamic Republic of',
code: 'IR',
- label: i18n.t('countries.IR'),
- },
- { name: 'Iraq', code: 'IQ', label: i18n.t('countries.IQ') },
- { name: 'Ireland', code: 'IE', label: i18n.t('countries.IE') },
- { name: 'Isle of Man', code: 'IM', label: i18n.t('countries.IM') },
- { name: 'Israel', code: 'IL', label: i18n.t('countries.IL') },
- { name: 'Italy', code: 'IT', label: i18n.t('countries.IT') },
- { name: 'Jamaica', code: 'JM', label: i18n.t('countries.JM') },
- { name: 'Japan', code: 'JP', label: i18n.t('countries.JP') },
- { name: 'Jersey', code: 'JE', label: i18n.t('countries.JE') },
- { name: 'Jordan', code: 'JO', label: i18n.t('countries.JO') },
- { name: 'Kazakhstan', code: 'KZ', label: i18n.t('countries.KZ') },
- { name: 'Kenya', code: 'KE', label: i18n.t('countries.KE') },
- { name: 'Kiribati', code: 'KI', label: i18n.t('countries.KI') },
- { name: 'Korea, Republic of', code: 'KR', label: i18n.t('countries.KR') },
+ label: i18n.global.t('countries.IR'),
+ },
+ { name: 'Iraq', code: 'IQ', label: i18n.global.t('countries.IQ') },
+ { name: 'Ireland', code: 'IE', label: i18n.global.t('countries.IE') },
+ { name: 'Isle of Man', code: 'IM', label: i18n.global.t('countries.IM') },
+ { name: 'Israel', code: 'IL', label: i18n.global.t('countries.IL') },
+ { name: 'Italy', code: 'IT', label: i18n.global.t('countries.IT') },
+ { name: 'Jamaica', code: 'JM', label: i18n.global.t('countries.JM') },
+ { name: 'Japan', code: 'JP', label: i18n.global.t('countries.JP') },
+ { name: 'Jersey', code: 'JE', label: i18n.global.t('countries.JE') },
+ { name: 'Jordan', code: 'JO', label: i18n.global.t('countries.JO') },
+ { name: 'Kazakhstan', code: 'KZ', label: i18n.global.t('countries.KZ') },
+ { name: 'Kenya', code: 'KE', label: i18n.global.t('countries.KE') },
+ { name: 'Kiribati', code: 'KI', label: i18n.global.t('countries.KI') },
+ {
+ name: 'Korea, Republic of',
+ code: 'KR',
+ label: i18n.global.t('countries.KR'),
+ },
{
name: "Korea, Democratic People's Republic of",
code: 'KP',
- label: i18n.t('countries.KP'),
+ label: i18n.global.t('countries.KP'),
},
- { name: 'Kuwait', code: 'KW', label: i18n.t('countries.KW') },
- { name: 'Kyrgyzstan', code: 'KG', label: i18n.t('countries.KG') },
+ { name: 'Kuwait', code: 'KW', label: i18n.global.t('countries.KW') },
+ { name: 'Kyrgyzstan', code: 'KG', label: i18n.global.t('countries.KG') },
{
name: "Lao People's Democratic Republic",
code: 'LA',
- label: i18n.t('countries.LA'),
- },
- { name: 'Latvia', code: 'LV', label: i18n.t('countries.LV') },
- { name: 'Lebanon', code: 'LB', label: i18n.t('countries.LB') },
- { name: 'Lesotho', code: 'LS', label: i18n.t('countries.LS') },
- { name: 'Liberia', code: 'LR', label: i18n.t('countries.LR') },
- { name: 'Libya', code: 'LY', label: i18n.t('countries.LY') },
- { name: 'Liechtenstein', code: 'LI', label: i18n.t('countries.LI') },
- { name: 'Lithuania', code: 'LT', label: i18n.t('countries.LT') },
- { name: 'Luxembourg', code: 'LU', label: i18n.t('countries.LU') },
- { name: 'Macao', code: 'MO', label: i18n.t('countries.MO') },
+ label: i18n.global.t('countries.LA'),
+ },
+ { name: 'Latvia', code: 'LV', label: i18n.global.t('countries.LV') },
+ { name: 'Lebanon', code: 'LB', label: i18n.global.t('countries.LB') },
+ { name: 'Lesotho', code: 'LS', label: i18n.global.t('countries.LS') },
+ { name: 'Liberia', code: 'LR', label: i18n.global.t('countries.LR') },
+ { name: 'Libya', code: 'LY', label: i18n.global.t('countries.LY') },
+ { name: 'Liechtenstein', code: 'LI', label: i18n.global.t('countries.LI') },
+ { name: 'Lithuania', code: 'LT', label: i18n.global.t('countries.LT') },
+ { name: 'Luxembourg', code: 'LU', label: i18n.global.t('countries.LU') },
+ { name: 'Macao', code: 'MO', label: i18n.global.t('countries.MO') },
{
name: 'Macedonia, The Former Yugoslav Republic of',
code: 'MK',
- label: i18n.t('countries.MK'),
- },
- { name: 'Madagascar', code: 'MG', label: i18n.t('countries.MG') },
- { name: 'Malawi', code: 'MW', label: i18n.t('countries.MW') },
- { name: 'Malaysia', code: 'MY', label: i18n.t('countries.MY') },
- { name: 'Maldives', code: 'MV', label: i18n.t('countries.MV') },
- { name: 'Mali', code: 'ML', label: i18n.t('countries.ML') },
- { name: 'Malta', code: 'MT', label: i18n.t('countries.MT') },
- { name: 'Marshall Islands', code: 'MH', label: i18n.t('countries.MH') },
- { name: 'Martinique', code: 'MQ', label: i18n.t('countries.MQ') },
- { name: 'Mauritania', code: 'MR', label: i18n.t('countries.MR') },
- { name: 'Mauritius', code: 'MU', label: i18n.t('countries.MU') },
- { name: 'Mayotte', code: 'YT', label: i18n.t('countries.YT') },
- { name: 'Mexico', code: 'MX', label: i18n.t('countries.MX') },
+ label: i18n.global.t('countries.MK'),
+ },
+ { name: 'Madagascar', code: 'MG', label: i18n.global.t('countries.MG') },
+ { name: 'Malawi', code: 'MW', label: i18n.global.t('countries.MW') },
+ { name: 'Malaysia', code: 'MY', label: i18n.global.t('countries.MY') },
+ { name: 'Maldives', code: 'MV', label: i18n.global.t('countries.MV') },
+ { name: 'Mali', code: 'ML', label: i18n.global.t('countries.ML') },
+ { name: 'Malta', code: 'MT', label: i18n.global.t('countries.MT') },
+ {
+ name: 'Marshall Islands',
+ code: 'MH',
+ label: i18n.global.t('countries.MH'),
+ },
+ { name: 'Martinique', code: 'MQ', label: i18n.global.t('countries.MQ') },
+ { name: 'Mauritania', code: 'MR', label: i18n.global.t('countries.MR') },
+ { name: 'Mauritius', code: 'MU', label: i18n.global.t('countries.MU') },
+ { name: 'Mayotte', code: 'YT', label: i18n.global.t('countries.YT') },
+ { name: 'Mexico', code: 'MX', label: i18n.global.t('countries.MX') },
{
name: 'Micronesia, Federated States of',
code: 'FM',
- label: i18n.t('countries.FM'),
- },
- { name: 'Moldova, Republic of', code: 'MD', label: i18n.t('countries.MD') },
- { name: 'Monaco', code: 'MC', label: i18n.t('countries.MC') },
- { name: 'Mongolia', code: 'MN', label: i18n.t('countries.MN') },
- { name: 'Montenegro', code: 'ME', label: i18n.t('countries.ME') },
- { name: 'Montserrat', code: 'MS', label: i18n.t('countries.MS') },
- { name: 'Morocco', code: 'MA', label: i18n.t('countries.MA') },
- { name: 'Mozambique', code: 'MZ', label: i18n.t('countries.MZ') },
- { name: 'Myanmar', code: 'MM', label: i18n.t('countries.MM') },
- { name: 'Namibia', code: 'NA', label: i18n.t('countries.NA') },
- { name: 'Nauru', code: 'NR', label: i18n.t('countries.NR') },
- { name: 'Nepal', code: 'NP', label: i18n.t('countries.NP') },
- { name: 'Netherlands', code: 'NL', label: i18n.t('countries.NL') },
- { name: 'New Caledonia', code: 'NC', label: i18n.t('countries.NC') },
- { name: 'New Zealand', code: 'NZ', label: i18n.t('countries.NZ') },
- { name: 'Nicaragua', code: 'NI', label: i18n.t('countries.NI') },
- { name: 'Niger', code: 'NE', label: i18n.t('countries.NE') },
- { name: 'Nigeria', code: 'NG', label: i18n.t('countries.NG') },
- { name: 'Niue', code: 'NU', label: i18n.t('countries.NU') },
- { name: 'Norfolk Island', code: 'NF', label: i18n.t('countries.NF') },
+ label: i18n.global.t('countries.FM'),
+ },
+ {
+ name: 'Moldova, Republic of',
+ code: 'MD',
+ label: i18n.global.t('countries.MD'),
+ },
+ { name: 'Monaco', code: 'MC', label: i18n.global.t('countries.MC') },
+ { name: 'Mongolia', code: 'MN', label: i18n.global.t('countries.MN') },
+ { name: 'Montenegro', code: 'ME', label: i18n.global.t('countries.ME') },
+ { name: 'Montserrat', code: 'MS', label: i18n.global.t('countries.MS') },
+ { name: 'Morocco', code: 'MA', label: i18n.global.t('countries.MA') },
+ { name: 'Mozambique', code: 'MZ', label: i18n.global.t('countries.MZ') },
+ { name: 'Myanmar', code: 'MM', label: i18n.global.t('countries.MM') },
+ { name: 'Namibia', code: 'NA', label: i18n.global.t('countries.NA') },
+ { name: 'Nauru', code: 'NR', label: i18n.global.t('countries.NR') },
+ { name: 'Nepal', code: 'NP', label: i18n.global.t('countries.NP') },
+ { name: 'Netherlands', code: 'NL', label: i18n.global.t('countries.NL') },
+ { name: 'New Caledonia', code: 'NC', label: i18n.global.t('countries.NC') },
+ { name: 'New Zealand', code: 'NZ', label: i18n.global.t('countries.NZ') },
+ { name: 'Nicaragua', code: 'NI', label: i18n.global.t('countries.NI') },
+ { name: 'Niger', code: 'NE', label: i18n.global.t('countries.NE') },
+ { name: 'Nigeria', code: 'NG', label: i18n.global.t('countries.NG') },
+ { name: 'Niue', code: 'NU', label: i18n.global.t('countries.NU') },
+ { name: 'Norfolk Island', code: 'NF', label: i18n.global.t('countries.NF') },
{
name: 'Northern Mariana Islands',
code: 'MP',
- label: i18n.t('countries.MP'),
- },
- { name: 'Norway', code: 'NO', label: i18n.t('countries.NO') },
- { name: 'Oman', code: 'OM', label: i18n.t('countries.OM') },
- { name: 'Pakistan', code: 'PK', label: i18n.t('countries.PK') },
- { name: 'Palau', code: 'PW', label: i18n.t('countries.PW') },
- { name: 'Palestine', code: 'PS', label: i18n.t('countries.PS') },
- { name: 'Panama', code: 'PA', label: i18n.t('countries.PA') },
- { name: 'Papua New Guinea', code: 'PG', label: i18n.t('countries.PG') },
- { name: 'Paraguay', code: 'PY', label: i18n.t('countries.PY') },
- { name: 'Peru', code: 'PE', label: i18n.t('countries.PE') },
- { name: 'Philippines', code: 'PH', label: i18n.t('countries.PH') },
- { name: 'Pitcairn', code: 'PN', label: i18n.t('countries.PN') },
- { name: 'Poland', code: 'PL', label: i18n.t('countries.PL') },
- { name: 'Portugal', code: 'PT', label: i18n.t('countries.PT') },
- { name: 'Puerto Rico', code: 'PR', label: i18n.t('countries.PR') },
- { name: 'Qatar', code: 'QA', label: i18n.t('countries.QA') },
- { name: 'Romania', code: 'RO', label: i18n.t('countries.RO') },
- { name: 'Russian Federation', code: 'RU', label: i18n.t('countries.RU') },
- { name: 'Rwanda', code: 'RW', label: i18n.t('countries.RW') },
- { name: 'Réunion', code: 'RE', label: i18n.t('countries.RE') },
- { name: 'Saint Barthélemy', code: 'BL', label: i18n.t('countries.BL') },
+ label: i18n.global.t('countries.MP'),
+ },
+ { name: 'Norway', code: 'NO', label: i18n.global.t('countries.NO') },
+ { name: 'Oman', code: 'OM', label: i18n.global.t('countries.OM') },
+ { name: 'Pakistan', code: 'PK', label: i18n.global.t('countries.PK') },
+ { name: 'Palau', code: 'PW', label: i18n.global.t('countries.PW') },
+ { name: 'Palestine', code: 'PS', label: i18n.global.t('countries.PS') },
+ { name: 'Panama', code: 'PA', label: i18n.global.t('countries.PA') },
+ {
+ name: 'Papua New Guinea',
+ code: 'PG',
+ label: i18n.global.t('countries.PG'),
+ },
+ { name: 'Paraguay', code: 'PY', label: i18n.global.t('countries.PY') },
+ { name: 'Peru', code: 'PE', label: i18n.global.t('countries.PE') },
+ { name: 'Philippines', code: 'PH', label: i18n.global.t('countries.PH') },
+ { name: 'Pitcairn', code: 'PN', label: i18n.global.t('countries.PN') },
+ { name: 'Poland', code: 'PL', label: i18n.global.t('countries.PL') },
+ { name: 'Portugal', code: 'PT', label: i18n.global.t('countries.PT') },
+ { name: 'Puerto Rico', code: 'PR', label: i18n.global.t('countries.PR') },
+ { name: 'Qatar', code: 'QA', label: i18n.global.t('countries.QA') },
+ { name: 'Romania', code: 'RO', label: i18n.global.t('countries.RO') },
+ {
+ name: 'Russian Federation',
+ code: 'RU',
+ label: i18n.global.t('countries.RU'),
+ },
+ { name: 'Rwanda', code: 'RW', label: i18n.global.t('countries.RW') },
+ { name: 'Réunion', code: 'RE', label: i18n.global.t('countries.RE') },
+ {
+ name: 'Saint Barthélemy',
+ code: 'BL',
+ label: i18n.global.t('countries.BL'),
+ },
{
name: 'Saint Helena, Ascension and Tristan da Cunha',
code: 'SH',
- label: i18n.t('countries.SH'),
+ label: i18n.global.t('countries.SH'),
},
- { name: 'Saint Kitts and Nevis ', code: 'KN', label: i18n.t('countries.KN') },
- { name: 'Saint Lucia', code: 'LC', label: i18n.t('countries.LC') },
- { name: 'Saint Martin', code: 'MF', label: i18n.t('countries.MF') },
+ {
+ name: 'Saint Kitts and Nevis ',
+ code: 'KN',
+ label: i18n.global.t('countries.KN'),
+ },
+ { name: 'Saint Lucia', code: 'LC', label: i18n.global.t('countries.LC') },
+ { name: 'Saint Martin', code: 'MF', label: i18n.global.t('countries.MF') },
{
name: 'Saint Pierre and Miquelon',
code: 'PM',
- label: i18n.t('countries.PM'),
+ label: i18n.global.t('countries.PM'),
},
{
name: 'Saint Vincent and the Grenadines',
code: 'VC',
- label: i18n.t('countries.VC'),
- },
- { name: 'Samoa', code: 'WS', label: i18n.t('countries.WS') },
- { name: 'San Marino ', code: 'SM', label: i18n.t('countries.SM') },
- { name: 'Sao Tome and Principe', code: 'ST', label: i18n.t('countries.ST') },
- { name: 'Saudi Arabia', code: 'SA', label: i18n.t('countries.SA') },
- { name: 'Senegal', code: 'SN', label: i18n.t('countries.SN') },
- { name: 'Serbia', code: 'RS', label: i18n.t('countries.RS') },
- { name: 'Seychelles', code: 'SC', label: i18n.t('countries.SC') },
- { name: 'Sierra Leone', code: 'SL', label: i18n.t('countries.SL') },
- { name: 'Singapore', code: 'SG', label: i18n.t('countries.SG') },
- { name: 'Sint Maarten', code: 'SX', label: i18n.t('countries.SX') },
- { name: 'Slovakia', code: 'SK', label: i18n.t('countries.SK') },
- { name: 'Slovenia', code: 'SI', label: i18n.t('countries.SI') },
- { name: 'Solomon Islands', code: 'SB', label: i18n.t('countries.SB') },
- { name: 'Somalia', code: 'SO', label: i18n.t('countries.SO') },
- { name: 'South Africa ', code: 'ZA', label: i18n.t('countries.ZA') },
+ label: i18n.global.t('countries.VC'),
+ },
+ { name: 'Samoa', code: 'WS', label: i18n.global.t('countries.WS') },
+ { name: 'San Marino ', code: 'SM', label: i18n.global.t('countries.SM') },
+ {
+ name: 'Sao Tome and Principe',
+ code: 'ST',
+ label: i18n.global.t('countries.ST'),
+ },
+ { name: 'Saudi Arabia', code: 'SA', label: i18n.global.t('countries.SA') },
+ { name: 'Senegal', code: 'SN', label: i18n.global.t('countries.SN') },
+ { name: 'Serbia', code: 'RS', label: i18n.global.t('countries.RS') },
+ { name: 'Seychelles', code: 'SC', label: i18n.global.t('countries.SC') },
+ { name: 'Sierra Leone', code: 'SL', label: i18n.global.t('countries.SL') },
+ { name: 'Singapore', code: 'SG', label: i18n.global.t('countries.SG') },
+ { name: 'Sint Maarten', code: 'SX', label: i18n.global.t('countries.SX') },
+ { name: 'Slovakia', code: 'SK', label: i18n.global.t('countries.SK') },
+ { name: 'Slovenia', code: 'SI', label: i18n.global.t('countries.SI') },
+ { name: 'Solomon Islands', code: 'SB', label: i18n.global.t('countries.SB') },
+ { name: 'Somalia', code: 'SO', label: i18n.global.t('countries.SO') },
+ { name: 'South Africa ', code: 'ZA', label: i18n.global.t('countries.ZA') },
{
name: 'South Georgia and the South Sandwich Islands',
code: 'GS',
- label: i18n.t('countries.GS'),
- },
- { name: 'South Sudan', code: 'SS', label: i18n.t('countries.SS') },
- { name: 'Spain', code: 'ES', label: i18n.t('countries.ES') },
- { name: 'Sri Lanka', code: 'LK', label: i18n.t('countries.LK') },
- { name: 'Sudan', code: 'SD', label: i18n.t('countries.SD') },
- { name: 'Suriname', code: 'SR', label: i18n.t('countries.SR') },
- { name: 'Svalbard and Jan Mayen', code: 'SJ', label: i18n.t('countries.SJ') },
- { name: 'Sweden', code: 'SE', label: i18n.t('countries.SE') },
- { name: 'Switzerland', code: 'CH', label: i18n.t('countries.CH') },
- { name: 'Syrian Arab Republic', code: 'SY', label: i18n.t('countries.SY') },
- { name: 'Taiwan', code: 'TW', label: i18n.t('countries.TW') },
- { name: 'Tajikistan', code: 'TJ', label: i18n.t('countries.TJ') },
+ label: i18n.global.t('countries.GS'),
+ },
+ { name: 'South Sudan', code: 'SS', label: i18n.global.t('countries.SS') },
+ { name: 'Spain', code: 'ES', label: i18n.global.t('countries.ES') },
+ { name: 'Sri Lanka', code: 'LK', label: i18n.global.t('countries.LK') },
+ { name: 'Sudan', code: 'SD', label: i18n.global.t('countries.SD') },
+ { name: 'Suriname', code: 'SR', label: i18n.global.t('countries.SR') },
+ {
+ name: 'Svalbard and Jan Mayen',
+ code: 'SJ',
+ label: i18n.global.t('countries.SJ'),
+ },
+ { name: 'Sweden', code: 'SE', label: i18n.global.t('countries.SE') },
+ { name: 'Switzerland', code: 'CH', label: i18n.global.t('countries.CH') },
+ {
+ name: 'Syrian Arab Republic',
+ code: 'SY',
+ label: i18n.global.t('countries.SY'),
+ },
+ { name: 'Taiwan', code: 'TW', label: i18n.global.t('countries.TW') },
+ { name: 'Tajikistan', code: 'TJ', label: i18n.global.t('countries.TJ') },
{
name: 'Tanzania, United Republic of',
code: 'TZ',
- label: i18n.t('countries.TZ'),
- },
- { name: 'Thailand', code: 'TH', label: i18n.t('countries.TH') },
- { name: 'Timor-Leste', code: 'TL', label: i18n.t('countries.TL') },
- { name: 'Togo', code: 'TG', label: i18n.t('countries.TG') },
- { name: 'Tokelau', code: 'TK', label: i18n.t('countries.TK') },
- { name: 'Tonga', code: 'TO', label: i18n.t('countries.TO') },
- { name: 'Trinidad and Tobago', code: 'TT', label: i18n.t('countries.TT') },
- { name: 'Tunisia', code: 'TN', label: i18n.t('countries.TN') },
- { name: 'Turkey', code: 'TR', label: i18n.t('countries.TR') },
- { name: 'Turkmenistan', code: 'TM', label: i18n.t('countries.TM') },
+ label: i18n.global.t('countries.TZ'),
+ },
+ { name: 'Thailand', code: 'TH', label: i18n.global.t('countries.TH') },
+ { name: 'Timor-Leste', code: 'TL', label: i18n.global.t('countries.TL') },
+ { name: 'Togo', code: 'TG', label: i18n.global.t('countries.TG') },
+ { name: 'Tokelau', code: 'TK', label: i18n.global.t('countries.TK') },
+ { name: 'Tonga', code: 'TO', label: i18n.global.t('countries.TO') },
+ {
+ name: 'Trinidad and Tobago',
+ code: 'TT',
+ label: i18n.global.t('countries.TT'),
+ },
+ { name: 'Tunisia', code: 'TN', label: i18n.global.t('countries.TN') },
+ { name: 'Turkey', code: 'TR', label: i18n.global.t('countries.TR') },
+ { name: 'Turkmenistan', code: 'TM', label: i18n.global.t('countries.TM') },
{
name: 'Turks and Caicos Islands',
code: 'TC',
- label: i18n.t('countries.TC'),
+ label: i18n.global.t('countries.TC'),
},
- { name: 'Tuvalu', code: 'TV', label: i18n.t('countries.TV') },
- { name: 'Uganda', code: 'UG', label: i18n.t('countries.UG') },
- { name: 'Ukraine', code: 'UA', label: i18n.t('countries.UA') },
- { name: 'United Arab Emirates', code: 'AE', label: i18n.t('countries.AE') },
- { name: 'United Kingdom', code: 'GB', label: i18n.t('countries.GB') },
+ { name: 'Tuvalu', code: 'TV', label: i18n.global.t('countries.TV') },
+ { name: 'Uganda', code: 'UG', label: i18n.global.t('countries.UG') },
+ { name: 'Ukraine', code: 'UA', label: i18n.global.t('countries.UA') },
+ {
+ name: 'United Arab Emirates',
+ code: 'AE',
+ label: i18n.global.t('countries.AE'),
+ },
+ { name: 'United Kingdom', code: 'GB', label: i18n.global.t('countries.GB') },
{
name: 'United States Minor Outlying Islands',
code: 'UM',
- label: i18n.t('countries.UM'),
+ label: i18n.global.t('countries.UM'),
},
{
name: 'United States of America',
code: 'US',
- label: i18n.t('countries.US'),
+ label: i18n.global.t('countries.US'),
},
- { name: 'Uruguay', code: 'UY', label: i18n.t('countries.UY') },
- { name: 'Uzbekistan', code: 'UZ', label: i18n.t('countries.UZ') },
- { name: 'Vanuatu', code: 'VU', label: i18n.t('countries.VU') },
- { name: 'Venezuela', code: 'VE', label: i18n.t('countries.VE') },
- { name: 'Viet Nam', code: 'VN', label: i18n.t('countries.VN') },
+ { name: 'Uruguay', code: 'UY', label: i18n.global.t('countries.UY') },
+ { name: 'Uzbekistan', code: 'UZ', label: i18n.global.t('countries.UZ') },
+ { name: 'Vanuatu', code: 'VU', label: i18n.global.t('countries.VU') },
+ { name: 'Venezuela', code: 'VE', label: i18n.global.t('countries.VE') },
+ { name: 'Viet Nam', code: 'VN', label: i18n.global.t('countries.VN') },
{
name: 'Virgin Islands, British',
code: 'VG',
- label: i18n.t('countries.VG'),
- },
- { name: 'Virgin Islands, U.S', code: 'VI', label: i18n.t('countries.VI') },
- { name: 'Wallis and Futuna', code: 'WF', label: i18n.t('countries.WF') },
- { name: 'Western Sahara', code: 'EH', label: i18n.t('countries.EH') },
- { name: 'Yemen', code: 'YE', label: i18n.t('countries.YE') },
- { name: 'Zambia', code: 'ZM', label: i18n.t('countries.ZM') },
- { name: 'Zimbabwe', code: 'ZW', label: i18n.t('countries.ZW') },
- { name: 'Åland Islands', code: 'AX', label: i18n.t('countries.AX') },
-];*/
+ label: i18n.global.t('countries.VG'),
+ },
+ {
+ name: 'Virgin Islands, U.S',
+ code: 'VI',
+ label: i18n.global.t('countries.VI'),
+ },
+ {
+ name: 'Wallis and Futuna',
+ code: 'WF',
+ label: i18n.global.t('countries.WF'),
+ },
+ { name: 'Western Sahara', code: 'EH', label: i18n.global.t('countries.EH') },
+ { name: 'Yemen', code: 'YE', label: i18n.global.t('countries.YE') },
+ { name: 'Zambia', code: 'ZM', label: i18n.global.t('countries.ZM') },
+ { name: 'Zimbabwe', code: 'ZW', label: i18n.global.t('countries.ZW') },
+ { name: 'Åland Islands', code: 'AX', label: i18n.global.t('countries.AX') },
+];
diff --git a/src/views/SecurityAndAccess/Certificates/ModalGenerateCsr.vue b/src/views/SecurityAndAccess/Certificates/ModalGenerateCsr.vue
index a74a1e46122b0c10c7b3e48b3d299ff24e86b556..8033e967b4053e961f83c5c8d9c9688fe7cb2b51 100644
--- a/src/views/SecurityAndAccess/Certificates/ModalGenerateCsr.vue
+++ b/src/views/SecurityAndAccess/Certificates/ModalGenerateCsr.vue
@@ -424,30 +424,29 @@ export default {
}, []);
},
},
- validations: {
- form: {
- certificateType: { required },
- country: { required },
- state: { required },
- city: { required },
- companyName: { required },
- companyUnit: { required },
- commonName: { required },
- contactPerson: {},
- emailAddress: {},
- alternateName: {},
- keyPairAlgorithm: { required },
- keyCurveId: {
- reuired: requiredIf(function (form) {
- return form.keyPairAlgorithm === 'EC';
- }),
- },
- keyBitLength: {
- reuired: requiredIf(function (form) {
- return form.keyPairAlgorithm === 'RSA';
- }),
+ validations() {
+ const self = this;
+ return {
+ form: {
+ certificateType: { required },
+ country: { required },
+ state: { required },
+ city: { required },
+ companyName: { required },
+ companyUnit: { required },
+ commonName: { required },
+ contactPerson: {},
+ emailAddress: {},
+ alternateName: {},
+ keyPairAlgorithm: { required },
+ keyCurveId: {
+ required: requiredIf(() => self.form.keyPairAlgorithm === 'EC'),
+ },
+ keyBitLength: {
+ required: requiredIf(() => self.form.keyPairAlgorithm === 'RSA'),
+ },
},
- },
+ };
},
methods: {
handleSubmit() {
@@ -459,6 +458,10 @@ export default {
this.csrString = CSRString;
this.$bvModal.show('csr-string');
this.v$.$reset();
+ })
+ .catch((error) => {
+ this.errorToast(this.$t('pageCertificates.errorGeneratingCsr'));
+ console.error('Error generating CSR:', error);
});
},
resetForm() {
diff --git a/src/views/SecurityAndAccess/Ldap/TableRoleGroups.vue b/src/views/SecurityAndAccess/Ldap/TableRoleGroups.vue
index f73d927615f2524ecfbaf5cc2660045528612890..3d7f2823a9ed18afe435b8a85918eb2f397707b4 100644
--- a/src/views/SecurityAndAccess/Ldap/TableRoleGroups.vue
+++ b/src/views/SecurityAndAccess/Ldap/TableRoleGroups.vue
@@ -41,6 +41,7 @@
:items="tableItems"
:fields="fields"
:empty-text="$t('global.table.emptyMessage')"
+ class="table"
@row-selected="onRowSelected($event, tableItems.length)"
>
@@ -272,3 +273,8 @@ export default {
},
};
+
diff --git a/src/views/SecurityAndAccess/UserManagement/ModalUser.vue b/src/views/SecurityAndAccess/UserManagement/ModalUser.vue
index 3b334871f65a8b0bec208a00374deed690ee6bcb..0ebccbc6f1c92b889a47158e84c05957b5711e8d 100644
--- a/src/views/SecurityAndAccess/UserManagement/ModalUser.vue
+++ b/src/views/SecurityAndAccess/UserManagement/ModalUser.vue
@@ -96,6 +96,9 @@
{{ $t('global.form.invalidFormat') }}
+
+ {{ $t('global.form.userNameExists') }}
+
0 ||
+ this.form.passwordConfirmation?.length > 0
+ );
+ },
},
watch: {
user: function (value) {
@@ -308,21 +321,26 @@ export default {
username: {
required,
maxLength: maxLength(16),
- pattern: helpers.regex('pattern', /^([a-zA-Z_][a-zA-Z0-9_]*)/),
+ pattern: helpers.regex('pattern', /^([a-zA-Z_][a-zA-Z0-9_]*)$/),
+ uniqueUsername: helpers.withParams({ type: 'notExist' }, (value) => {
+ if (!this.newUser) return true;
+ if (!value) return true;
+ return !this.allusername.includes(value);
+ }),
},
privilege: {
required,
},
password: {
required: requiredIf(function () {
- return this.requirePassword();
+ return this.requirePasswordFlag;
}),
minLength: minLength(this.passwordRequirements.minLength),
maxLength: maxLength(this.passwordRequirements.maxLength),
},
passwordConfirmation: {
required: requiredIf(function () {
- return this.requirePassword();
+ return this.requirePasswordFlag;
}),
sameAsPassword: sameAs('password'),
},
@@ -385,12 +403,6 @@ export default {
this.v$.$reset();
this.$emit('hidden');
},
- requirePassword() {
- if (this.newUser) return true;
- if (this.v$.form.password.$dirty) return true;
- if (this.v$.form.passwordConfirmation.$dirty) return true;
- return false;
- },
onOk(bvModalEvt) {
// prevent modal close
bvModalEvt.preventDefault();
diff --git a/src/views/SecurityAndAccess/UserManagement/UserManagement.vue b/src/views/SecurityAndAccess/UserManagement/UserManagement.vue
index cb057a7cdf493fda413f57c4ef595b1024e8ca52..d9a6edda7f66a616f293503397ce96f1ed3e5b4f 100644
--- a/src/views/SecurityAndAccess/UserManagement/UserManagement.vue
+++ b/src/views/SecurityAndAccess/UserManagement/UserManagement.vue
@@ -40,7 +40,7 @@
@row-selected="onRowSelected($event, tableItems.length)"
>
-
+
{{ $t('global.table.selectItem') }}
@@ -106,6 +109,7 @@
@@ -165,6 +169,7 @@ export default {
fields: [
{
key: 'checkbox',
+ label: '',
},
{
key: 'username',
@@ -201,6 +206,7 @@ export default {
selectedRows: selectedRows,
tableHeaderCheckboxModel: tableHeaderCheckboxModel,
tableHeaderCheckboxIndeterminate: tableHeaderCheckboxIndeterminate,
+ loginUser: null,
};
},
computed: {
@@ -227,7 +233,7 @@ export default {
{
value: 'delete',
enabled:
- user.UserName === this.$store.getters['global/username']
+ user.UserName === this.loginUser
? false
: true && user.UserName === 'root'
? false
@@ -239,6 +245,9 @@ export default {
};
});
},
+ allUserName() {
+ return this.allUsers.map((user) => user.UserName);
+ },
settings() {
return this.$store.getters['userManagement/accountSettings'];
},
@@ -254,10 +263,11 @@ export default {
});
this.$store.dispatch('userManagement/getAccountSettings');
this.$store.dispatch('userManagement/getAccountRoles');
+ this.loginUser = this.$store.getters['global/username'];
},
methods: {
editEnable(user) {
- if ('root' === this.$store.getters['global/username']) {
+ if ('root' === this.loginUser) {
return true;
} else {
return user.UserName === 'root' ? false : true;
diff --git a/src/views/Settings/DateTime/DateTime.vue b/src/views/Settings/DateTime/DateTime.vue
index b723530b2d01e56a3c66299a8165f3504dba7d8a..ff779e77ca8f67d4a6d33524ce6aec1c63aefacd 100644
--- a/src/views/Settings/DateTime/DateTime.vue
+++ b/src/views/Settings/DateTime/DateTime.vue
@@ -139,16 +139,9 @@
-
-
- {{ $t('global.form.fieldRequired') }}
-
-
@@ -212,10 +205,10 @@ import { mapState } from 'vuex';
import { requiredIf } from '@vuelidate/validators';
import { helpers } from 'vuelidate/lib/validators';
import { useI18n } from 'vue-i18n';
+import i18n from '@/i18n';
const isoDateRegex = /([12]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$)/;
const isoTimeRegex = /^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/;
-
export default {
name: 'DateTime',
components: { Alert, IconCalendar, PageTitle, PageSection },
@@ -266,13 +259,6 @@ export default {
pattern: helpers.regex('pattern', isoTimeRegex),
},
},
- ntp: {
- firstAddress: {
- required: requiredIf(function () {
- return this.form.configurationSelected === 'ntp';
- }),
- },
- },
},
};
},
@@ -374,7 +360,11 @@ export default {
// Filter the ntpArray to remove empty strings,
// per Redfish spec there should be no empty strings or null on the ntp array.
const ntpArrayFiltered = ntpArray.filter((x) => x);
-
+ if (ntpArrayFiltered.length === 0) {
+ this.errorToast(i18n.global.t('global.form.fieldRequired'));
+ this.endLoader();
+ return;
+ }
dateTimeForm.ntpServersArray = [...ntpArrayFiltered];
[this.ntpServers[0], this.ntpServers[1], this.ntpServers[2]] = [
diff --git a/src/views/Settings/Network/TableIpv4.vue b/src/views/Settings/Network/TableIpv4.vue
index b95e7d397b934beee6221690dcd31e8f252755f2..5b4350d9acd317d44ab97832923f81e2bb4bc67f 100644
--- a/src/views/Settings/Network/TableIpv4.vue
+++ b/src/views/Settings/Network/TableIpv4.vue
@@ -192,16 +192,16 @@ export default {
this.deleteIpv4TableRow(index);
}
},
- deleteIpv4TableRow(index) {
- this.form.ipv4TableItems.splice(index, 1);
- const newIpv4Array = this.form.ipv4TableItems.map((ipv4) => {
- const { Address, SubnetMask, Gateway } = ipv4;
- return {
- Address,
- SubnetMask,
- Gateway,
- };
+ deleteIpv4TableRow(deleteIndex) {
+ const staticItemsWithIndex = this.form.ipv4TableItems
+ .map((item, index) => ({ ...item, __originalIndex: index }))
+ .filter((item) => item.AddressOrigin === 'Static');
+ const newIpv4Array = staticItemsWithIndex.map((item) => {
+ return item.__originalIndex === deleteIndex ? null : {};
});
+ if (newIpv4Array.length === 0) {
+ return;
+ }
this.$store
.dispatch('network/editIpv4Address', newIpv4Array)
.then((message) => this.successToast(message))
diff --git a/tailwind.config.js b/tailwind.config.js
new file mode 100644
index 0000000000000000000000000000000000000000..e2d86cec4421500558928a9ecd6d694c27fdd0f3
--- /dev/null
+++ b/tailwind.config.js
@@ -0,0 +1,1014 @@
+/** @type {import('tailwindcss').Config} */
+module.exports = {
+ content: ['./index.html', './src/**/*.{vue,js,ts,jsx,tsx}'],
+ presets: [],
+ darkMode: 'media', // or 'class'
+ important: true,
+ theme: {
+ accentColor: ({ theme }) => ({
+ ...theme('colors'),
+ auto: 'auto',
+ }),
+ animation: {
+ none: 'none',
+ spin: 'spin 1s linear infinite',
+ ping: 'ping 1s cubic-bezier(0, 0, 0.2, 1) infinite',
+ pulse: 'pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite',
+ bounce: 'bounce 1s infinite',
+ },
+ aria: {
+ checked: 'checked="true"',
+ disabled: 'disabled="true"',
+ expanded: 'expanded="true"',
+ hidden: 'hidden="true"',
+ pressed: 'pressed="true"',
+ readonly: 'readonly="true"',
+ required: 'required="true"',
+ selected: 'selected="true"',
+ },
+ aspectRatio: {
+ auto: 'auto',
+ square: '1 / 1',
+ video: '16 / 9',
+ },
+ backdropBlur: ({ theme }) => theme('blur'),
+ backdropBrightness: ({ theme }) => theme('brightness'),
+ backdropContrast: ({ theme }) => theme('contrast'),
+ backdropGrayscale: ({ theme }) => theme('grayscale'),
+ backdropHueRotate: ({ theme }) => theme('hueRotate'),
+ backdropInvert: ({ theme }) => theme('invert'),
+ backdropOpacity: ({ theme }) => theme('opacity'),
+ backdropSaturate: ({ theme }) => theme('saturate'),
+ backdropSepia: ({ theme }) => theme('sepia'),
+ backgroundColor: ({ theme }) => theme('colors'),
+ backgroundImage: {
+ none: 'none',
+ 'gradient-to-t': 'linear-gradient(to top, var(--tw-gradient-stops))',
+ 'gradient-to-tr':
+ 'linear-gradient(to top right, var(--tw-gradient-stops))',
+ 'gradient-to-r': 'linear-gradient(to right, var(--tw-gradient-stops))',
+ 'gradient-to-br':
+ 'linear-gradient(to bottom right, var(--tw-gradient-stops))',
+ 'gradient-to-b': 'linear-gradient(to bottom, var(--tw-gradient-stops))',
+ 'gradient-to-bl':
+ 'linear-gradient(to bottom left, var(--tw-gradient-stops))',
+ 'gradient-to-l': 'linear-gradient(to left, var(--tw-gradient-stops))',
+ 'gradient-to-tl':
+ 'linear-gradient(to top left, var(--tw-gradient-stops))',
+ },
+ backgroundOpacity: ({ theme }) => theme('opacity'),
+ backgroundPosition: {
+ bottom: 'bottom',
+ center: 'center',
+ left: 'left',
+ 'left-bottom': 'left bottom',
+ 'left-top': 'left top',
+ right: 'right',
+ 'right-bottom': 'right bottom',
+ 'right-top': 'right top',
+ top: 'top',
+ },
+ backgroundSize: {
+ auto: 'auto',
+ cover: 'cover',
+ contain: 'contain',
+ },
+ blur: {
+ 0: '0',
+ none: '0',
+ sm: '4px',
+ DEFAULT: '8px',
+ md: '12px',
+ lg: '16px',
+ xl: '24px',
+ '2xl': '40px',
+ '3xl': '64px',
+ },
+ borderColor: ({ theme }) => ({
+ ...theme('colors'),
+ DEFAULT: theme('colors.gray.200', 'currentColor'),
+ }),
+ borderOpacity: ({ theme }) => theme('opacity'),
+ borderRadius: {
+ none: '0px',
+ sm: '0.125rem',
+ DEFAULT: '0.25rem',
+ md: '0.375rem',
+ lg: '0.5rem',
+ xl: '0.75rem',
+ '2xl': '1rem',
+ '3xl': '1.5rem',
+ full: '9999px',
+ },
+ borderSpacing: ({ theme }) => ({
+ ...theme('spacing'),
+ }),
+ borderWidth: {
+ DEFAULT: '1px',
+ 0: '0px',
+ 2: '2px',
+ 4: '4px',
+ 8: '8px',
+ },
+ boxShadow: {
+ sm: '0 1px 2px 0 rgb(0 0 0 / 0.05)',
+ DEFAULT: '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)',
+ md: '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)',
+ lg: '0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)',
+ xl: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',
+ '2xl': '0 25px 50px -12px rgb(0 0 0 / 0.25)',
+ inner: 'inset 0 2px 4px 0 rgb(0 0 0 / 0.05)',
+ none: 'none',
+ },
+ boxShadowColor: ({ theme }) => theme('colors'),
+ brightness: {
+ 0: '0',
+ 50: '.5',
+ 75: '.75',
+ 90: '.9',
+ 95: '.95',
+ 100: '1',
+ 105: '1.05',
+ 110: '1.1',
+ 125: '1.25',
+ 150: '1.5',
+ 200: '2',
+ },
+ caretColor: ({ theme }) => theme('colors'),
+ colors: ({ colors }) => ({
+ inherit: colors.inherit,
+ current: colors.current,
+ transparent: colors.transparent,
+ black: colors.black,
+ white: colors.white,
+ slate: colors.slate,
+ gray: colors.gray,
+ zinc: colors.zinc,
+ neutral: colors.neutral,
+ stone: colors.stone,
+ red: colors.red,
+ orange: colors.orange,
+ amber: colors.amber,
+ yellow: colors.yellow,
+ lime: colors.lime,
+ green: colors.green,
+ emerald: colors.emerald,
+ teal: colors.teal,
+ cyan: colors.cyan,
+ sky: colors.sky,
+ blue: colors.blue,
+ indigo: colors.indigo,
+ violet: colors.violet,
+ purple: colors.purple,
+ fuchsia: colors.fuchsia,
+ pink: colors.pink,
+ rose: colors.rose,
+ cover: {
+ 100: 'rgba(var(--color-cover), 0.1)',
+ 200: 'rgba(var(--color-cover), 0.2)',
+ 300: 'rgba(var(--color-cover), 0.3)',
+ 400: 'rgba(var(--color-cover), 0.4)',
+ 500: 'rgba(var(--color-cover), 0.5)',
+ 600: 'rgba(var(--color-cover), 0.6)',
+ 700: 'rgba(var(--color-cover), 0.7)',
+ 800: 'rgba(var(--color-cover), 0.8)',
+ 900: 'rgba(var(--color-cover), 0.9)',
+ },
+ }),
+ columns: {
+ auto: 'auto',
+ 1: '1',
+ 2: '2',
+ 3: '3',
+ 4: '4',
+ 5: '5',
+ 6: '6',
+ 7: '7',
+ 8: '8',
+ 9: '9',
+ 10: '10',
+ 11: '11',
+ 12: '12',
+ '3xs': '16rem',
+ '2xs': '18rem',
+ xs: '20rem',
+ sm: '24rem',
+ md: '28rem',
+ lg: '32rem',
+ xl: '36rem',
+ '2xl': '42rem',
+ '3xl': '48rem',
+ '4xl': '56rem',
+ '5xl': '64rem',
+ '6xl': '72rem',
+ '7xl': '80rem',
+ },
+ container: {},
+ content: {
+ none: 'none',
+ },
+ contrast: {
+ 0: '0',
+ 50: '.5',
+ 75: '.75',
+ 100: '1',
+ 125: '1.25',
+ 150: '1.5',
+ 200: '2',
+ },
+ cursor: {
+ auto: 'auto',
+ default: 'default',
+ pointer: 'pointer',
+ wait: 'wait',
+ text: 'text',
+ move: 'move',
+ help: 'help',
+ 'not-allowed': 'not-allowed',
+ none: 'none',
+ 'context-menu': 'context-menu',
+ progress: 'progress',
+ cell: 'cell',
+ crosshair: 'crosshair',
+ 'vertical-text': 'vertical-text',
+ alias: 'alias',
+ copy: 'copy',
+ 'no-drop': 'no-drop',
+ grab: 'grab',
+ grabbing: 'grabbing',
+ 'all-scroll': 'all-scroll',
+ 'col-resize': 'col-resize',
+ 'row-resize': 'row-resize',
+ 'n-resize': 'n-resize',
+ 'e-resize': 'e-resize',
+ 's-resize': 's-resize',
+ 'w-resize': 'w-resize',
+ 'ne-resize': 'ne-resize',
+ 'nw-resize': 'nw-resize',
+ 'se-resize': 'se-resize',
+ 'sw-resize': 'sw-resize',
+ 'ew-resize': 'ew-resize',
+ 'ns-resize': 'ns-resize',
+ 'nesw-resize': 'nesw-resize',
+ 'nwse-resize': 'nwse-resize',
+ 'zoom-in': 'zoom-in',
+ 'zoom-out': 'zoom-out',
+ },
+ divideColor: ({ theme }) => theme('borderColor'),
+ divideOpacity: ({ theme }) => theme('borderOpacity'),
+ divideWidth: ({ theme }) => theme('borderWidth'),
+ dropShadow: {
+ sm: '0 1px 1px rgb(0 0 0 / 0.05)',
+ DEFAULT: ['0 1px 2px rgb(0 0 0 / 0.1)', '0 1px 1px rgb(0 0 0 / 0.06)'],
+ md: ['0 4px 3px rgb(0 0 0 / 0.07)', '0 2px 2px rgb(0 0 0 / 0.06)'],
+ lg: ['0 10px 8px rgb(0 0 0 / 0.04)', '0 4px 3px rgb(0 0 0 / 0.1)'],
+ xl: ['0 20px 13px rgb(0 0 0 / 0.03)', '0 8px 5px rgb(0 0 0 / 0.08)'],
+ '2xl': '0 25px 25px rgb(0 0 0 / 0.15)',
+ none: '0 0 #0000',
+ },
+ fill: ({ theme }) => ({
+ none: 'none',
+ ...theme('colors'),
+ }),
+ flex: {
+ 1: '1 1 0%',
+ auto: '1 1 auto',
+ initial: '0 1 auto',
+ none: 'none',
+ },
+ flexBasis: ({ theme }) => ({
+ auto: 'auto',
+ ...theme('spacing'),
+ '1/2': '50%',
+ '1/3': '33.333333%',
+ '2/3': '66.666667%',
+ '1/4': '25%',
+ '2/4': '50%',
+ '3/4': '75%',
+ '1/5': '20%',
+ '2/5': '40%',
+ '3/5': '60%',
+ '4/5': '80%',
+ '1/6': '16.666667%',
+ '2/6': '33.333333%',
+ '3/6': '50%',
+ '4/6': '66.666667%',
+ '5/6': '83.333333%',
+ '1/12': '8.333333%',
+ '2/12': '16.666667%',
+ '3/12': '25%',
+ '4/12': '33.333333%',
+ '5/12': '41.666667%',
+ '6/12': '50%',
+ '7/12': '58.333333%',
+ '8/12': '66.666667%',
+ '9/12': '75%',
+ '10/12': '83.333333%',
+ '11/12': '91.666667%',
+ full: '100%',
+ }),
+ flexGrow: {
+ 0: '0',
+ DEFAULT: '1',
+ },
+ flexShrink: {
+ 0: '0',
+ DEFAULT: '1',
+ },
+ fontFamily: {
+ sans: [
+ 'ui-sans-serif',
+ 'system-ui',
+ '-apple-system',
+ 'BlinkMacSystemFont',
+ '"Segoe UI"',
+ 'Roboto',
+ '"Helvetica Neue"',
+ 'Arial',
+ '"Noto Sans"',
+ 'sans-serif',
+ '"Apple Color Emoji"',
+ '"Segoe UI Emoji"',
+ '"Segoe UI Symbol"',
+ '"Noto Color Emoji"',
+ ],
+ serif: [
+ 'ui-serif',
+ 'Georgia',
+ 'Cambria',
+ '"Times New Roman"',
+ 'Times',
+ 'serif',
+ ],
+ mono: [
+ 'ui-monospace',
+ 'SFMono-Regular',
+ 'Menlo',
+ 'Monaco',
+ 'Consolas',
+ '"Liberation Mono"',
+ '"Courier New"',
+ 'monospace',
+ ],
+ },
+ fontSize: {
+ xs: ['0.75rem', { lineHeight: '1rem' }],
+ sm: ['0.875rem', { lineHeight: '1.25rem' }],
+ base: ['1rem', { lineHeight: '1.5rem' }],
+ lg: ['1.125rem', { lineHeight: '1.75rem' }],
+ xl: ['1.25rem', { lineHeight: '1.75rem' }],
+ '2xl': ['1.5rem', { lineHeight: '2rem' }],
+ '3xl': ['1.875rem', { lineHeight: '2.25rem' }],
+ '4xl': ['2.25rem', { lineHeight: '2.5rem' }],
+ '5xl': ['3rem', { lineHeight: '1' }],
+ '6xl': ['3.75rem', { lineHeight: '1' }],
+ '7xl': ['4.5rem', { lineHeight: '1' }],
+ '8xl': ['6rem', { lineHeight: '1' }],
+ '9xl': ['8rem', { lineHeight: '1' }],
+ },
+ fontWeight: {
+ thin: '100',
+ extralight: '200',
+ light: '300',
+ normal: '400',
+ medium: '500',
+ semibold: '600',
+ bold: '700',
+ extrabold: '800',
+ black: '900',
+ },
+ gap: ({ theme }) => theme('spacing'),
+ gradientColorStops: ({ theme }) => theme('colors'),
+ gradientColorStopPositions: {
+ '0%': '0%',
+ '5%': '5%',
+ '10%': '10%',
+ '15%': '15%',
+ '20%': '20%',
+ '25%': '25%',
+ '30%': '30%',
+ '35%': '35%',
+ '40%': '40%',
+ '45%': '45%',
+ '50%': '50%',
+ '55%': '55%',
+ '60%': '60%',
+ '65%': '65%',
+ '70%': '70%',
+ '75%': '75%',
+ '80%': '80%',
+ '85%': '85%',
+ '90%': '90%',
+ '95%': '95%',
+ '100%': '100%',
+ },
+ grayscale: {
+ 0: '0',
+ DEFAULT: '100%',
+ },
+ gridAutoColumns: {
+ auto: 'auto',
+ min: 'min-content',
+ max: 'max-content',
+ fr: 'minmax(0, 1fr)',
+ },
+ gridAutoRows: {
+ auto: 'auto',
+ min: 'min-content',
+ max: 'max-content',
+ fr: 'minmax(0, 1fr)',
+ },
+ gridColumn: {
+ auto: 'auto',
+ 'span-1': 'span 1 / span 1',
+ 'span-2': 'span 2 / span 2',
+ 'span-3': 'span 3 / span 3',
+ 'span-4': 'span 4 / span 4',
+ 'span-5': 'span 5 / span 5',
+ 'span-6': 'span 6 / span 6',
+ 'span-7': 'span 7 / span 7',
+ 'span-8': 'span 8 / span 8',
+ 'span-9': 'span 9 / span 9',
+ 'span-10': 'span 10 / span 10',
+ 'span-11': 'span 11 / span 11',
+ 'span-12': 'span 12 / span 12',
+ 'span-full': '1 / -1',
+ },
+ gridColumnEnd: {
+ auto: 'auto',
+ 1: '1',
+ 2: '2',
+ 3: '3',
+ 4: '4',
+ 5: '5',
+ 6: '6',
+ 7: '7',
+ 8: '8',
+ 9: '9',
+ 10: '10',
+ 11: '11',
+ 12: '12',
+ 13: '13',
+ },
+ gridColumnStart: {
+ auto: 'auto',
+ 1: '1',
+ 2: '2',
+ 3: '3',
+ 4: '4',
+ 5: '5',
+ 6: '6',
+ 7: '7',
+ 8: '8',
+ 9: '9',
+ 10: '10',
+ 11: '11',
+ 12: '12',
+ 13: '13',
+ },
+ gridRow: {
+ auto: 'auto',
+ 'span-1': 'span 1 / span 1',
+ 'span-2': 'span 2 / span 2',
+ 'span-3': 'span 3 / span 3',
+ 'span-4': 'span 4 / span 4',
+ 'span-5': 'span 5 / span 5',
+ 'span-6': 'span 6 / span 6',
+ 'span-full': '1 / -1',
+ },
+ gridRowEnd: {
+ auto: 'auto',
+ 1: '1',
+ 2: '2',
+ 3: '3',
+ 4: '4',
+ 5: '5',
+ 6: '6',
+ 7: '7',
+ },
+ gridRowStart: {
+ auto: 'auto',
+ 1: '1',
+ 2: '2',
+ 3: '3',
+ 4: '4',
+ 5: '5',
+ 6: '6',
+ 7: '7',
+ },
+ gridTemplateColumns: {
+ none: 'none',
+ 1: 'repeat(1, minmax(0, 1fr))',
+ 2: 'repeat(2, minmax(0, 1fr))',
+ 3: 'repeat(3, minmax(0, 1fr))',
+ 4: 'repeat(4, minmax(0, 1fr))',
+ 5: 'repeat(5, minmax(0, 1fr))',
+ 6: 'repeat(6, minmax(0, 1fr))',
+ 7: 'repeat(7, minmax(0, 1fr))',
+ 8: 'repeat(8, minmax(0, 1fr))',
+ 9: 'repeat(9, minmax(0, 1fr))',
+ 10: 'repeat(10, minmax(0, 1fr))',
+ 11: 'repeat(11, minmax(0, 1fr))',
+ 12: 'repeat(12, minmax(0, 1fr))',
+ },
+ gridTemplateRows: {
+ none: 'none',
+ 1: 'repeat(1, minmax(0, 1fr))',
+ 2: 'repeat(2, minmax(0, 1fr))',
+ 3: 'repeat(3, minmax(0, 1fr))',
+ 4: 'repeat(4, minmax(0, 1fr))',
+ 5: 'repeat(5, minmax(0, 1fr))',
+ 6: 'repeat(6, minmax(0, 1fr))',
+ },
+ height: ({ theme }) => ({
+ auto: 'auto',
+ ...theme('spacing'),
+ '1/2': '50%',
+ '1/3': '33.333333%',
+ '2/3': '66.666667%',
+ '1/4': '25%',
+ '2/4': '50%',
+ '3/4': '75%',
+ '1/5': '20%',
+ '2/5': '40%',
+ '3/5': '60%',
+ '4/5': '80%',
+ '1/6': '16.666667%',
+ '2/6': '33.333333%',
+ '3/6': '50%',
+ '4/6': '66.666667%',
+ '5/6': '83.333333%',
+ full: '100%',
+ screen: '100vh',
+ min: 'min-content',
+ max: 'max-content',
+ fit: 'fit-content',
+ }),
+ hueRotate: {
+ 0: '0deg',
+ 15: '15deg',
+ 30: '30deg',
+ 60: '60deg',
+ 90: '90deg',
+ 180: '180deg',
+ },
+ inset: ({ theme }) => ({
+ auto: 'auto',
+ ...theme('spacing'),
+ '1/2': '50%',
+ '1/3': '33.333333%',
+ '2/3': '66.666667%',
+ '1/4': '25%',
+ '2/4': '50%',
+ '3/4': '75%',
+ full: '100%',
+ }),
+ invert: {
+ 0: '0',
+ DEFAULT: '100%',
+ },
+ keyframes: {
+ spin: {
+ to: {
+ transform: 'rotate(360deg)',
+ },
+ },
+ ping: {
+ '75%, 100%': {
+ transform: 'scale(2)',
+ opacity: '0',
+ },
+ },
+ pulse: {
+ '50%': {
+ opacity: '.5',
+ },
+ },
+ bounce: {
+ '0%, 100%': {
+ transform: 'translateY(-25%)',
+ animationTimingFunction: 'cubic-bezier(0.8,0,1,1)',
+ },
+ '50%': {
+ transform: 'none',
+ animationTimingFunction: 'cubic-bezier(0,0,0.2,1)',
+ },
+ },
+ },
+ letterSpacing: {
+ tighter: '-0.05em',
+ tight: '-0.025em',
+ normal: '0em',
+ wide: '0.025em',
+ wider: '0.05em',
+ widest: '0.1em',
+ },
+ lineHeight: {
+ none: '1',
+ tight: '1.25',
+ snug: '1.375',
+ normal: '1.5',
+ relaxed: '1.625',
+ loose: '2',
+ 3: '.75rem',
+ 4: '1rem',
+ 5: '1.25rem',
+ 6: '1.5rem',
+ 7: '1.75rem',
+ 8: '2rem',
+ 9: '2.25rem',
+ 10: '2.5rem',
+ },
+ listStyleType: {
+ none: 'none',
+ disc: 'disc',
+ decimal: 'decimal',
+ },
+ listStyleImage: {
+ none: 'none',
+ },
+ margin: ({ theme }) => ({
+ auto: 'auto',
+ ...theme('spacing'),
+ }),
+ lineClamp: {
+ 1: '1',
+ 2: '2',
+ 3: '3',
+ 4: '4',
+ 5: '5',
+ 6: '6',
+ },
+ maxHeight: ({ theme }) => ({
+ ...theme('spacing'),
+ none: 'none',
+ full: '100%',
+ screen: '100vh',
+ min: 'min-content',
+ max: 'max-content',
+ fit: 'fit-content',
+ }),
+ maxWidth: ({ theme, breakpoints }) => ({
+ none: 'none',
+ 0: '0rem',
+ xs: '20rem',
+ sm: '24rem',
+ md: '28rem',
+ lg: '32rem',
+ xl: '36rem',
+ '2xl': '42rem',
+ '3xl': '48rem',
+ '4xl': '56rem',
+ '5xl': '64rem',
+ '6xl': '72rem',
+ '7xl': '80rem',
+ full: '100%',
+ min: 'min-content',
+ max: 'max-content',
+ fit: 'fit-content',
+ prose: '65ch',
+ ...breakpoints(theme('screens')),
+ }),
+ minHeight: {
+ 0: '0px',
+ full: '100%',
+ screen: '100vh',
+ min: 'min-content',
+ max: 'max-content',
+ fit: 'fit-content',
+ },
+ minWidth: {
+ 0: '0px',
+ full: '100%',
+ min: 'min-content',
+ max: 'max-content',
+ fit: 'fit-content',
+ },
+ objectPosition: {
+ bottom: 'bottom',
+ center: 'center',
+ left: 'left',
+ 'left-bottom': 'left bottom',
+ 'left-top': 'left top',
+ right: 'right',
+ 'right-bottom': 'right bottom',
+ 'right-top': 'right top',
+ top: 'top',
+ },
+ opacity: {
+ 0: '0',
+ 5: '0.05',
+ 10: '0.1',
+ 20: '0.2',
+ 25: '0.25',
+ 30: '0.3',
+ 40: '0.4',
+ 50: '0.5',
+ 60: '0.6',
+ 70: '0.7',
+ 75: '0.75',
+ 80: '0.8',
+ 90: '0.9',
+ 95: '0.95',
+ 100: '1',
+ },
+ order: {
+ first: '-9999',
+ last: '9999',
+ none: '0',
+ 1: '1',
+ 2: '2',
+ 3: '3',
+ 4: '4',
+ 5: '5',
+ 6: '6',
+ 7: '7',
+ 8: '8',
+ 9: '9',
+ 10: '10',
+ 11: '11',
+ 12: '12',
+ },
+ outlineColor: ({ theme }) => theme('colors'),
+ outlineOffset: {
+ 0: '0px',
+ 1: '1px',
+ 2: '2px',
+ 4: '4px',
+ 8: '8px',
+ },
+ outlineWidth: {
+ 0: '0px',
+ 1: '1px',
+ 2: '2px',
+ 4: '4px',
+ 8: '8px',
+ },
+ padding: ({ theme }) => theme('spacing'),
+ placeholderColor: ({ theme }) => theme('colors'),
+ placeholderOpacity: ({ theme }) => theme('opacity'),
+ ringColor: ({ theme }) => ({
+ DEFAULT: theme('colors.blue.500', '#3b82f6'),
+ ...theme('colors'),
+ }),
+ ringOffsetColor: ({ theme }) => theme('colors'),
+ ringOffsetWidth: {
+ 0: '0px',
+ 1: '1px',
+ 2: '2px',
+ 4: '4px',
+ 8: '8px',
+ },
+ ringOpacity: ({ theme }) => ({
+ DEFAULT: '0.5',
+ ...theme('opacity'),
+ }),
+ ringWidth: {
+ DEFAULT: '3px',
+ 0: '0px',
+ 1: '1px',
+ 2: '2px',
+ 4: '4px',
+ 8: '8px',
+ },
+ rotate: {
+ 0: '0deg',
+ 1: '1deg',
+ 2: '2deg',
+ 3: '3deg',
+ 6: '6deg',
+ 12: '12deg',
+ 45: '45deg',
+ 90: '90deg',
+ 180: '180deg',
+ },
+ saturate: {
+ 0: '0',
+ 50: '.5',
+ 100: '1',
+ 150: '1.5',
+ 200: '2',
+ },
+ scale: {
+ 0: '0',
+ 50: '.5',
+ 75: '.75',
+ 90: '.9',
+ 95: '.95',
+ 100: '1',
+ 105: '1.05',
+ 110: '1.1',
+ 125: '1.25',
+ 150: '1.5',
+ },
+ screens: {
+ sm: '768px',
+ md: '992px',
+ lg: '1200px',
+ xl: '1920px',
+ },
+ scrollMargin: ({ theme }) => ({
+ ...theme('spacing'),
+ }),
+ scrollPadding: ({ theme }) => theme('spacing'),
+ sepia: {
+ 0: '0',
+ DEFAULT: '100%',
+ },
+ skew: {
+ 0: '0deg',
+ 1: '1deg',
+ 2: '2deg',
+ 3: '3deg',
+ 6: '6deg',
+ 12: '12deg',
+ },
+ space: ({ theme }) => ({
+ ...theme('spacing'),
+ }),
+ spacing: {
+ px: '1px',
+ 0: '0px',
+ 0.5: '0.125rem',
+ 1: '0.25rem',
+ 1.5: '0.375rem',
+ 2: '0.5rem',
+ 2.5: '0.625rem',
+ 3: '0.75rem',
+ 3.5: '0.875rem',
+ 4: '1rem',
+ 5: '1.25rem',
+ 6: '1.5rem',
+ 7: '1.75rem',
+ 8: '2rem',
+ 9: '2.25rem',
+ 10: '2.5rem',
+ 11: '2.75rem',
+ 12: '3rem',
+ 14: '3.5rem',
+ 16: '4rem',
+ 20: '5rem',
+ 24: '6rem',
+ 28: '7rem',
+ 32: '8rem',
+ 36: '9rem',
+ 40: '10rem',
+ 44: '11rem',
+ 48: '12rem',
+ 52: '13rem',
+ 56: '14rem',
+ 60: '15rem',
+ 64: '16rem',
+ 72: '18rem',
+ 80: '20rem',
+ 96: '24rem',
+ },
+ stroke: ({ theme }) => ({
+ none: 'none',
+ ...theme('colors'),
+ }),
+ strokeWidth: {
+ 0: '0',
+ 1: '1',
+ 2: '2',
+ },
+ supports: {},
+ data: {},
+ textColor: ({ theme }) => theme('colors'),
+ textDecorationColor: ({ theme }) => theme('colors'),
+ textDecorationThickness: {
+ auto: 'auto',
+ 'from-font': 'from-font',
+ 0: '0px',
+ 1: '1px',
+ 2: '2px',
+ 4: '4px',
+ 8: '8px',
+ },
+ textIndent: ({ theme }) => ({
+ ...theme('spacing'),
+ }),
+ textOpacity: ({ theme }) => theme('opacity'),
+ textUnderlineOffset: {
+ auto: 'auto',
+ 0: '0px',
+ 1: '1px',
+ 2: '2px',
+ 4: '4px',
+ 8: '8px',
+ },
+ transformOrigin: {
+ center: 'center',
+ top: 'top',
+ 'top-right': 'top right',
+ right: 'right',
+ 'bottom-right': 'bottom right',
+ bottom: 'bottom',
+ 'bottom-left': 'bottom left',
+ left: 'left',
+ 'top-left': 'top left',
+ },
+ transitionDelay: {
+ 0: '0s',
+ 75: '75ms',
+ 100: '100ms',
+ 150: '150ms',
+ 200: '200ms',
+ 300: '300ms',
+ 500: '500ms',
+ 700: '700ms',
+ 1000: '1000ms',
+ },
+ transitionDuration: {
+ DEFAULT: '150ms',
+ 0: '0s',
+ 75: '75ms',
+ 100: '100ms',
+ 150: '150ms',
+ 200: '200ms',
+ 300: '300ms',
+ 500: '500ms',
+ 700: '700ms',
+ 1000: '1000ms',
+ },
+ transitionProperty: {
+ none: 'none',
+ all: 'all',
+ DEFAULT:
+ 'color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter',
+ colors:
+ 'color, background-color, border-color, text-decoration-color, fill, stroke',
+ opacity: 'opacity',
+ shadow: 'box-shadow',
+ transform: 'transform',
+ },
+ transitionTimingFunction: {
+ DEFAULT: 'cubic-bezier(0.4, 0, 0.2, 1)',
+ linear: 'linear',
+ in: 'cubic-bezier(0.4, 0, 1, 1)',
+ out: 'cubic-bezier(0, 0, 0.2, 1)',
+ 'in-out': 'cubic-bezier(0.4, 0, 0.2, 1)',
+ },
+ translate: ({ theme }) => ({
+ ...theme('spacing'),
+ '1/2': '50%',
+ '1/3': '33.333333%',
+ '2/3': '66.666667%',
+ '1/4': '25%',
+ '2/4': '50%',
+ '3/4': '75%',
+ full: '100%',
+ }),
+ width: ({ theme }) => ({
+ auto: 'auto',
+ ...theme('spacing'),
+ '1/2': '50%',
+ '1/3': '33.333333%',
+ '2/3': '66.666667%',
+ '1/4': '25%',
+ '2/4': '50%',
+ '3/4': '75%',
+ '1/5': '20%',
+ '2/5': '40%',
+ '3/5': '60%',
+ '4/5': '80%',
+ '1/6': '16.666667%',
+ '2/6': '33.333333%',
+ '3/6': '50%',
+ '4/6': '66.666667%',
+ '5/6': '83.333333%',
+ '1/12': '8.333333%',
+ '2/12': '16.666667%',
+ '3/12': '25%',
+ '4/12': '33.333333%',
+ '5/12': '41.666667%',
+ '6/12': '50%',
+ '7/12': '58.333333%',
+ '8/12': '66.666667%',
+ '9/12': '75%',
+ '10/12': '83.333333%',
+ '11/12': '91.666667%',
+ full: '100%',
+ screen: '100vw',
+ min: 'min-content',
+ max: 'max-content',
+ fit: 'fit-content',
+ }),
+ willChange: {
+ auto: 'auto',
+ scroll: 'scroll-position',
+ contents: 'contents',
+ transform: 'transform',
+ },
+ zIndex: {
+ auto: 'auto',
+ 0: '0',
+ 10: '10',
+ 20: '20',
+ 30: '30',
+ 40: '40',
+ 50: '50',
+ },
+ },
+ plugins: [],
+};
diff --git a/tests/unit/AppHeader.spec.js b/tests/unit/AppHeader.spec.js
deleted file mode 100644
index 80460b90ad93028a58c0e23db21c9e1664a1e931..0000000000000000000000000000000000000000
--- a/tests/unit/AppHeader.spec.js
+++ /dev/null
@@ -1,80 +0,0 @@
-import { mount, createWrapper } from '@vue/test-utils';
-import { createStore } from 'vuex';
-import AppHeader from '@/components/AppHeader';
-
-describe('AppHeader.vue', () => {
- const actions = {
- 'global/getServerStatus': jest.fn(),
- 'eventLog/getEventLogData': jest.fn(),
- 'authentication/resetStoreState': jest.fn(),
- 'global/getSystemInfo': jest.fn(),
- };
-
- // VueX requires that all modules be present, even if they aren't used
- // in the test, so invent a Fake auth module and install it.
- const modules = {
- authentication: {
- namespaced: true,
- },
- };
-
- const store = createStore({ actions, modules });
- const wrapper = mount(AppHeader, {
- store,
- mocks: {
- $t: (key) => key,
- },
- });
-
- // Reset dispatch between tests so that multiple
- // actions are not dispatched for each test
- beforeEach(() => {
- store.dispatch = jest.fn();
- });
-
- it('should exist', () => {
- expect(wrapper.exists()).toBe(true);
- });
-
- it('should render correctly', () => {
- expect(wrapper.element).toMatchSnapshot();
- });
-
- it('refresh button click should emit refresh event', async () => {
- wrapper.get('#app-header-refresh').trigger('click');
- await wrapper.vm.$nextTick();
- expect(wrapper.emitted('refresh')).toBeTruthy();
- });
-
- it('nav-trigger button click should emit toggle-navigation event', async () => {
- const rootWrapper = createWrapper(wrapper.vm.$root);
- wrapper.get('#app-header-trigger').trigger('click');
- await wrapper.vm.$nextTick();
- expect(rootWrapper.emitted('toggle-navigation')).toBeTruthy();
- });
-
- it('logout button should dispatch authentication/logout', async () => {
- wrapper.get('[data-test-id="appHeader-link-logout"]').trigger('click');
- await wrapper.vm.$nextTick();
- expect(store.dispatch).toHaveBeenCalledTimes(1);
- });
-
- it('change:isNavigationOpen event should set isNavigationOpen prop to false', async () => {
- const rootWrapper = createWrapper(wrapper.vm.$root);
- rootWrapper.vm.$emit('change-is-navigation-open', false);
- await rootWrapper.vm.$nextTick();
- expect(wrapper.vm.isNavigationOpen).toEqual(false);
- });
-
- describe('Created lifecycle hook', () => {
- it('getSystemInfo should dispatch global/getSystemInfo', () => {
- wrapper.vm.getSystemInfo();
- expect(store.dispatch).toHaveBeenCalledTimes(1);
- });
-
- it('getEvents should dispatch eventLog/getEventLogData', () => {
- wrapper.vm.getEvents();
- expect(store.dispatch).toHaveBeenCalledTimes(1);
- });
- });
-});
diff --git a/tests/unit/AppNavigation.spec.js b/tests/unit/AppNavigation.spec.js
deleted file mode 100644
index ca8a95714643b8b6a61a28cea9e94bb4b5b90ee5..0000000000000000000000000000000000000000
--- a/tests/unit/AppNavigation.spec.js
+++ /dev/null
@@ -1,56 +0,0 @@
-import { mount, createWrapper } from '@vue/test-utils';
-import AppNavigation from '@/components/AppNavigation';
-import { createApp } from 'vue';
-import Vuex from 'vuex';
-import VueRouter from 'vue-router';
-//import { BootstrapVue } from 'bootstrap-vue';
-
-describe('AppNavigation.vue', () => {
- let wrapper;
- const router = new VueRouter();
- const actions = {
- 'global/userPrivilege': jest.fn(),
- };
- const store = new Vuex.Store({ actions });
- const app = createApp();
- //app.use(BootstrapVue);
- app.use(VueRouter);
-
- wrapper = mount(AppNavigation, {
- store,
- router,
- mocks: {
- $t: (key) => key,
- },
- });
-
- it('should exist', async () => {
- expect(wrapper.exists()).toBe(true);
- });
-
- it('should render correctly', () => {
- expect(wrapper.element).toMatchSnapshot();
- });
-
- it('should render with nav-container open', () => {
- wrapper.vm.isNavigationOpen = true;
- expect(wrapper.element).toMatchSnapshot();
- });
-
- it('Nav Overlay click should emit change-is-navigation-open event', async () => {
- const rootWrapper = createWrapper(wrapper.vm.$root);
- const navOverlay = wrapper.find('#nav-overlay');
- navOverlay.trigger('click');
- await wrapper.vm.$nextTick();
- expect(rootWrapper.emitted('change-is-navigation-open')).toBeTruthy();
- });
-
- it('toggle-navigation event should toggle isNavigation data prop value', async () => {
- const rootWrapper = createWrapper(wrapper.vm.$root);
- wrapper.vm.isNavigationOpen = false;
- rootWrapper.vm.$emit('toggle-navigation');
- expect(wrapper.vm.isNavigationOpen).toBe(true);
- rootWrapper.vm.$emit('toggle-navigation');
- expect(wrapper.vm.isNavigationOpen).toBe(false);
- });
-});
diff --git a/tests/unit/Global/InfoTooltip.spec.js b/tests/unit/Global/InfoTooltip.spec.js
deleted file mode 100644
index 2d7e74f44e7f8564a2125fda53b8fb549e2a7078..0000000000000000000000000000000000000000
--- a/tests/unit/Global/InfoTooltip.spec.js
+++ /dev/null
@@ -1,21 +0,0 @@
-import { mount } from '@vue/test-utils';
-import InfoTooltip from '@/components/Global/InfoTooltip';
-
-process.env.BOOTSTRAP_VUE_NO_WARN = true;
-
-describe('InfoTooltip.vue', () => {
- const wrapper = mount(InfoTooltip, {
- propsData: {
- title: 'A tooltip test title',
- },
- mocks: {
- $t: (key) => key,
- },
- });
- it('should exist', () => {
- expect(wrapper.exists()).toBe(true);
- });
- it('should render correctly', () => {
- expect(wrapper.element).toMatchSnapshot();
- });
-});
diff --git a/tests/unit/Global/InputPasswordToggle.spec.js b/tests/unit/Global/InputPasswordToggle.spec.js
deleted file mode 100644
index ed616ff5122d7427a4f142d0e20b229d13a80bb1..0000000000000000000000000000000000000000
--- a/tests/unit/Global/InputPasswordToggle.spec.js
+++ /dev/null
@@ -1,28 +0,0 @@
-import { mount } from '@vue/test-utils';
-import InputPasswordToggle from '@/components/Global/InputPasswordToggle';
-
-describe('InputPasswordToggle.vue', () => {
- const wrapper = mount(InputPasswordToggle, {
- data() {
- return {
- isVisible: false,
- };
- },
- mocks: {
- $t: (key) => key,
- },
- });
- it('should exist', () => {
- expect(wrapper.exists()).toBe(true);
- });
- it('should not render isVisible class', () => {
- expect(wrapper.find('.isVisible').exists()).toBe(false);
- });
- it('should render isVisible class when button is clicked', async () => {
- await wrapper.find('button').trigger('click');
- expect(wrapper.find('.isVisible').exists()).toBe(true);
- });
- it('should render correctly', () => {
- expect(wrapper.element).toMatchSnapshot();
- });
-});
diff --git a/tests/unit/Global/LoadingBar.spec.js b/tests/unit/Global/LoadingBar.spec.js
deleted file mode 100644
index 5191212d516e48e36bd7cfe3f7e0f524ed6ec45f..0000000000000000000000000000000000000000
--- a/tests/unit/Global/LoadingBar.spec.js
+++ /dev/null
@@ -1,38 +0,0 @@
-import { mount } from '@vue/test-utils';
-import LoadingBar from '@/components/Global/LoadingBar';
-
-describe('LoadingBar.vue', () => {
- const wrapper = mount(LoadingBar, {
- data() {
- return {
- loadingIndicatorValue: 0,
- isLoadingComplete: false,
- };
- },
- mocks: {
- $t: (key) => key,
- },
- });
- it('should exist', () => {
- expect(wrapper.exists()).toBe(true);
- });
- it('should show loading bar element', async () => {
- await wrapper.setData({
- isLoadingComplete: false,
- loadingIndicatorValue: 100,
- });
- expect(wrapper.vm.isLoadingComplete).toBe(false);
- expect(wrapper.find('.progress').exists()).toBe(true);
- });
- it('should hide loading bar element', async () => {
- await wrapper.setData({
- isLoadingComplete: true,
- loadingIndicatorValue: 0,
- });
- expect(wrapper.vm.isLoadingComplete).toBe(true);
- expect(wrapper.find('.progress').exists()).toBe(false);
- });
- it('should render correctly', () => {
- expect(wrapper.element).toMatchSnapshot();
- });
-});
diff --git a/tests/unit/Global/PageContainer.spec.js b/tests/unit/Global/PageContainer.spec.js
deleted file mode 100644
index 2d3a124da0b4727d9805e8befddc56ea46bcb40f..0000000000000000000000000000000000000000
--- a/tests/unit/Global/PageContainer.spec.js
+++ /dev/null
@@ -1,19 +0,0 @@
-import { mount } from '@vue/test-utils';
-import PageContainer from '@/components/Global/PageContainer';
-
-describe('PageContainer.vue', () => {
- const wrapper = mount(PageContainer, {
- mocks: {
- $t: (key) => key,
- },
- });
- it('should exist', () => {
- expect(wrapper.exists()).toBe(true);
- });
- it('should render main element', () => {
- expect(wrapper.find('main').exists()).toBe(true);
- });
- it('should render correctly', () => {
- expect(wrapper.element).toMatchSnapshot();
- });
-});
diff --git a/tests/unit/Global/PageTitle.spec.js b/tests/unit/Global/PageTitle.spec.js
deleted file mode 100644
index 933212ca14feae8344760bcd3ff1f2b8ffd3779d..0000000000000000000000000000000000000000
--- a/tests/unit/Global/PageTitle.spec.js
+++ /dev/null
@@ -1,30 +0,0 @@
-import { mount } from '@vue/test-utils';
-import PageTitle from '@/components/Global/PageTitle';
-
-describe('PageTitle.vue', () => {
- const wrapper = mount(PageTitle, {
- propsData: {
- description: 'A page title test description',
- },
- mocks: {
- $t: (key) => key,
- $route: {
- meta: {
- title: 'Page Title',
- },
- },
- },
- });
- it('should exist', () => {
- expect(wrapper.exists()).toBe(true);
- });
- it('should render h1 element', () => {
- expect(wrapper.find('h1').exists()).toBe(true);
- });
- it('should render p element', () => {
- expect(wrapper.find('p').exists()).toBe(true);
- });
- it('should render correctly', () => {
- expect(wrapper.element).toMatchSnapshot();
- });
-});
diff --git a/tests/unit/Global/Search.spec.js b/tests/unit/Global/Search.spec.js
deleted file mode 100644
index 7942db0a987e0dc6b24cdd5deac07846fb85d1e5..0000000000000000000000000000000000000000
--- a/tests/unit/Global/Search.spec.js
+++ /dev/null
@@ -1,25 +0,0 @@
-import { mount } from '@vue/test-utils';
-import Search from '@/components/Global/Search';
-
-describe('Search.vue', () => {
- const wrapper = mount(Search, {
- mocks: {
- $t: (key) => key,
- },
- });
- it('should exist', () => {
- expect(wrapper.exists()).toBe(true);
- });
- it('should emit change-search on triggering onChangeInput', () => {
- wrapper.find('input').trigger('input');
- expect(wrapper.emitted('change-search')).toHaveLength(1);
- });
- it('should emit clear-search on triggering onClearSearch', async () => {
- await wrapper.setData({ filter: 'true' });
- wrapper.find('button').trigger('click');
- expect(wrapper.emitted('clear-search')).toHaveLength(1);
- });
- it('should render correctly', () => {
- expect(wrapper.element).toMatchSnapshot();
- });
-});
diff --git a/tests/unit/Global/TableCellCount.spec.js b/tests/unit/Global/TableCellCount.spec.js
deleted file mode 100644
index 7ab73bf31244cc54b76bb148efb0e2cb18a930ef..0000000000000000000000000000000000000000
--- a/tests/unit/Global/TableCellCount.spec.js
+++ /dev/null
@@ -1,27 +0,0 @@
-import { mount } from '@vue/test-utils';
-import TableCellCount from '@/components/Global/TableCellCount';
-
-describe('TableCellCount.vue', () => {
- const wrapper = mount(TableCellCount, {
- propsData: {
- filteredItemsCount: 5,
- totalNumberOfCells: 100,
- },
- mocks: {
- $t: (key) => key,
- },
- });
- it('should exist', () => {
- expect(wrapper.exists()).toBe(true);
- });
- it('should render filtered and totalnumber of items', () => {
- expect(wrapper.text()).toContain('global.table.selectedItems');
- });
- it('should render only totalnumber of items', async () => {
- await wrapper.setProps({ filteredItemsCount: 5, totalNumberOfCells: 5 });
- expect(wrapper.text()).toContain('global.table.items');
- });
- it('should render correctly', () => {
- expect(wrapper.element).toMatchSnapshot();
- });
-});
diff --git a/tests/unit/Global/TableToolbar.spec.js b/tests/unit/Global/TableToolbar.spec.js
deleted file mode 100644
index a3bcf3b914fba1dac828a75ee6b1d7a00622c9ac..0000000000000000000000000000000000000000
--- a/tests/unit/Global/TableToolbar.spec.js
+++ /dev/null
@@ -1,23 +0,0 @@
-import { mount } from '@vue/test-utils';
-import TableToolbar from '@/components/Global/TableToolbar';
-
-describe('TableToolbar.vue', () => {
- const wrapper = mount(TableToolbar, {
- propsData: {
- selectedItemsCount: 0,
- },
- mocks: {
- $t: (key) => key,
- },
- });
- it('should exist', () => {
- expect(wrapper.exists()).toBe(true);
- });
- it('should render class toolbar-container when selectedItemsCount is greater than 0', async () => {
- await wrapper.setProps({ selectedItemsCount: 12 });
- expect(wrapper.find('.toolbar-container').exists()).toBe(true);
- });
- it('should render correctly', () => {
- expect(wrapper.element).toMatchSnapshot();
- });
-});
diff --git a/tests/unit/Global/__snapshots__/InfoTooltip.spec.js.snap b/tests/unit/Global/__snapshots__/InfoTooltip.spec.js.snap
deleted file mode 100644
index 9f988f53ceed81bcd866c1221141e990576fb9ea..0000000000000000000000000000000000000000
--- a/tests/unit/Global/__snapshots__/InfoTooltip.spec.js.snap
+++ /dev/null
@@ -1,33 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`InfoTooltip.vue should render correctly 1`] = `
-
-`;
diff --git a/tests/unit/Global/__snapshots__/InputPasswordToggle.spec.js.snap b/tests/unit/Global/__snapshots__/InputPasswordToggle.spec.js.snap
deleted file mode 100644
index f691df24338287f9950905c307442522cdcc8738..0000000000000000000000000000000000000000
--- a/tests/unit/Global/__snapshots__/InputPasswordToggle.spec.js.snap
+++ /dev/null
@@ -1,38 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`InputPasswordToggle.vue should render correctly 1`] = `
-
-`;
diff --git a/tests/unit/Global/__snapshots__/LoadingBar.spec.js.snap b/tests/unit/Global/__snapshots__/LoadingBar.spec.js.snap
deleted file mode 100644
index 3c32790a7015e1d451c40224dadb16bdd4b856b5..0000000000000000000000000000000000000000
--- a/tests/unit/Global/__snapshots__/LoadingBar.spec.js.snap
+++ /dev/null
@@ -1,9 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`LoadingBar.vue should render correctly 1`] = `
-
-
-
-`;
diff --git a/tests/unit/Global/__snapshots__/PageContainer.spec.js.snap b/tests/unit/Global/__snapshots__/PageContainer.spec.js.snap
deleted file mode 100644
index b98d4485dd3a9ff5ee4d53b0f2fc3e4c219fc492..0000000000000000000000000000000000000000
--- a/tests/unit/Global/__snapshots__/PageContainer.spec.js.snap
+++ /dev/null
@@ -1,8 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`PageContainer.vue should render correctly 1`] = `
-
-`;
diff --git a/tests/unit/Global/__snapshots__/PageTitle.spec.js.snap b/tests/unit/Global/__snapshots__/PageTitle.spec.js.snap
deleted file mode 100644
index 7c1bca744095dfd288160345c07c6f71c2144c6e..0000000000000000000000000000000000000000
--- a/tests/unit/Global/__snapshots__/PageTitle.spec.js.snap
+++ /dev/null
@@ -1,15 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`PageTitle.vue should render correctly 1`] = `
-
-
- Page Title
-
-
-
- A page title test description
-
-
-`;
diff --git a/tests/unit/Global/__snapshots__/Search.spec.js.snap b/tests/unit/Global/__snapshots__/Search.spec.js.snap
deleted file mode 100644
index cd94a3451cdd3fcbb18b4dbde3ac605a72ba7954..0000000000000000000000000000000000000000
--- a/tests/unit/Global/__snapshots__/Search.spec.js.snap
+++ /dev/null
@@ -1,62 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`Search.vue should render correctly 1`] = `
-
-`;
diff --git a/tests/unit/Global/__snapshots__/TableCellCount.spec.js.snap b/tests/unit/Global/__snapshots__/TableCellCount.spec.js.snap
deleted file mode 100644
index c0a1cdb67675c3fbd1f931d02bd4e234c5d98515..0000000000000000000000000000000000000000
--- a/tests/unit/Global/__snapshots__/TableCellCount.spec.js.snap
+++ /dev/null
@@ -1,13 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`TableCellCount.vue should render correctly 1`] = `
-
-
-
- global.table.items
-
-
-
-`;
diff --git a/tests/unit/Global/__snapshots__/TableToolbar.spec.js.snap b/tests/unit/Global/__snapshots__/TableToolbar.spec.js.snap
deleted file mode 100644
index ecaabf2ca035af6a4d3b566bb7bf6265f5df97d9..0000000000000000000000000000000000000000
--- a/tests/unit/Global/__snapshots__/TableToolbar.spec.js.snap
+++ /dev/null
@@ -1,37 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`TableToolbar.vue should render correctly 1`] = `
-
-
-
-`;
diff --git a/tests/unit/__snapshots__/AppHeader.spec.js.snap b/tests/unit/__snapshots__/AppHeader.spec.js.snap
deleted file mode 100644
index b5e122288e9aec7b80e74c122f62f8e0424688c8..0000000000000000000000000000000000000000
--- a/tests/unit/__snapshots__/AppHeader.spec.js.snap
+++ /dev/null
@@ -1,213 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`AppHeader.vue should render correctly 1`] = `
-
-
-
-
-
-
-
-
-
-`;
diff --git a/tests/unit/__snapshots__/AppNavigation.spec.js.snap b/tests/unit/__snapshots__/AppNavigation.spec.js.snap
deleted file mode 100644
index 7ef2cd67d42e5359d91a75713319d04d2092a76d..0000000000000000000000000000000000000000
--- a/tests/unit/__snapshots__/AppNavigation.spec.js.snap
+++ /dev/null
@@ -1,1359 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`AppNavigation.vue should render correctly 1`] = `
-
-
-
-
-
-
-
-
-
-`;
-
-exports[`AppNavigation.vue should render with nav-container open 1`] = `
-
-
-
-
-
-
-
-
-
-`;