Compare commits

...

23 Commits

Author SHA1 Message Date
wh1te909
e1dc8050e3 Release 0.101.37 2023-12-01 18:55:37 +00:00
wh1te909
49da10cf0b bump version 2023-12-01 18:53:26 +00:00
wh1te909
a3e10910bf wording 2023-12-01 18:52:01 +00:00
wh1te909
3ff9edc424 update reqs 2023-11-29 22:41:49 +00:00
sadnub
69414d4083 add unsaved changes to new scripts and close and cancel buttons 2023-11-29 10:24:13 -05:00
sadnub
e06b7a7775 add last_seen date to summary tab as a tooltip 2023-11-24 18:34:29 -05:00
sadnub
c006e4d922 make policy tasks sort ascending 2023-11-24 18:19:39 -05:00
sadnub
df6fe0863b change sort order for reports manager 2023-11-24 18:17:29 -05:00
sadnub
d55a29911c add trmm logo to community scripts in dropdown and improve img loading with es6 import 2023-11-24 17:47:07 -05:00
sadnub
d0e49d27fd add prompt for close if using esc in script manager 2023-11-24 17:02:45 -05:00
sadnub
1299bfc93e add trmm icon to builtin scripts 2023-11-24 16:19:33 -05:00
sadnub
be999646d4 make policy status width larger 2023-11-24 15:50:44 -05:00
sadnub
e57d32f122 add onboarding task in ui 2023-11-22 23:37:18 -05:00
wh1te909
3e6365574e Release 0.101.36 2023-11-23 00:03:20 +00:00
wh1te909
08fa8da735 bump version 2023-11-23 00:03:10 +00:00
sadnub
4ab31a529e update to node 18 2023-11-11 13:51:48 -05:00
wh1te909
466725d5c2 rework uninstall perm amidaware/tacticalrmm#1673 2023-11-10 01:20:25 +00:00
wh1te909
5114ff40aa Release 0.101.35 2023-11-07 17:25:24 +00:00
wh1te909
908b337797 bump version 2023-11-07 17:24:22 +00:00
wh1te909
fea5258903 update deps 2023-11-07 17:23:25 +00:00
Dan
5521e4ea3e Merge pull request #13 from silversword411/develop
Increase name field to show 50chars
2023-11-06 13:07:24 -08:00
silversword411
6cc01596cb Increase name field to show 50chars 2023-11-06 12:14:35 -05:00
sadnub
0694538482 fix editors not closing properly on Escape key press 2023-11-04 23:56:22 -04:00
16 changed files with 475 additions and 456 deletions

View File

@@ -1,9 +1,9 @@
version: '3.4' version: '3.7'
services: services:
app-dev: app-dev:
container_name: trmm-app-dev container_name: trmm-app-dev
image: node:16-alpine image: node:18-alpine
restart: always restart: always
command: /bin/sh -c "npm install --cache ~/.npm && npm run serve" command: /bin/sh -c "npm install --cache ~/.npm && npm run serve"
user: 1000:1000 user: 1000:1000

348
package-lock.json generated
View File

@@ -1,42 +1,42 @@
{ {
"name": "web", "name": "web",
"version": "0.101.32", "version": "0.101.37",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "web", "name": "web",
"version": "0.101.32", "version": "0.101.37",
"dependencies": { "dependencies": {
"@quasar/extras": "1.16.7", "@quasar/extras": "1.16.8",
"@vueuse/core": "10.5.0", "@vueuse/core": "10.6.1",
"@vueuse/shared": "10.5.0", "@vueuse/shared": "10.6.1",
"apexcharts": "3.44.0", "apexcharts": "3.44.0",
"axios": "1.6.0", "axios": "1.6.2",
"dotenv": "16.3.1", "dotenv": "16.3.1",
"monaco-editor": "0.44.0", "monaco-editor": "0.44.0",
"qrcode.vue": "3.4.1", "qrcode.vue": "3.4.1",
"quasar": "2.13.0", "quasar": "2.13.0",
"vue": "3.3.7", "vue": "3.3.9",
"vue-router": "4.2.5", "vue-router": "4.2.5",
"vue3-apexcharts": "1.4.4", "vue3-apexcharts": "1.4.4",
"vuedraggable": "4.1.0", "vuedraggable": "4.1.0",
"vuex": "4.1.0", "vuex": "4.1.0",
"yaml": "2.3.3" "yaml": "2.3.4"
}, },
"devDependencies": { "devDependencies": {
"@intlify/unplugin-vue-i18n": "1.4.0", "@intlify/unplugin-vue-i18n": "1.5.0",
"@quasar/app-vite": "1.6.2", "@quasar/app-vite": "1.6.2",
"@quasar/cli": "2.3.0", "@quasar/cli": "2.3.0",
"@types/node": "20.8.9", "@types/node": "20.10.0",
"@typescript-eslint/eslint-plugin": "6.9.0", "@typescript-eslint/eslint-plugin": "6.13.1",
"@typescript-eslint/parser": "6.9.0", "@typescript-eslint/parser": "6.13.1",
"autoprefixer": "10.4.16", "autoprefixer": "10.4.16",
"eslint": "8.52.0", "eslint": "8.54.0",
"eslint-config-prettier": "9.0.0", "eslint-config-prettier": "9.0.0",
"eslint-plugin-vue": "8.7.1", "eslint-plugin-vue": "8.7.1",
"prettier": "3.0.3", "prettier": "3.1.0",
"typescript": "5.2.2" "typescript": "5.3.2"
} }
}, },
"node_modules/@aashutoshrathi/word-wrap": { "node_modules/@aashutoshrathi/word-wrap": {
@@ -49,9 +49,9 @@
} }
}, },
"node_modules/@babel/parser": { "node_modules/@babel/parser": {
"version": "7.23.0", "version": "7.23.4",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.4.tgz",
"integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", "integrity": "sha512-vf3Xna6UEprW+7t6EtOmFpHNAuxw3xqPZghy+brsnusscJRW5BMUzzHZc5ICjULee81WeUV2jjakG09MDglJXQ==",
"bin": { "bin": {
"parser": "bin/babel-parser.js" "parser": "bin/babel-parser.js"
}, },
@@ -84,9 +84,9 @@
} }
}, },
"node_modules/@eslint/eslintrc": { "node_modules/@eslint/eslintrc": {
"version": "2.1.2", "version": "2.1.3",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz",
"integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"ajv": "^6.12.4", "ajv": "^6.12.4",
@@ -107,9 +107,9 @@
} }
}, },
"node_modules/@eslint/js": { "node_modules/@eslint/js": {
"version": "8.52.0", "version": "8.54.0",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.52.0.tgz", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.54.0.tgz",
"integrity": "sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==", "integrity": "sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0" "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -206,9 +206,9 @@
} }
}, },
"node_modules/@intlify/unplugin-vue-i18n": { "node_modules/@intlify/unplugin-vue-i18n": {
"version": "1.4.0", "version": "1.5.0",
"resolved": "https://registry.npmjs.org/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-1.4.0.tgz", "resolved": "https://registry.npmjs.org/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-1.5.0.tgz",
"integrity": "sha512-RGDchCRBlDTyVVFgPA1C1XC1uD4xYN81Ma+3EnU6GQ8pBEreraX/PWdPXXzOB6k9GWCQHuqii3atYXhcH3rpSg==", "integrity": "sha512-jW0MCCdwxybxcwjEfCunAcKjVoxyO3i+cnLL6v+MNGRLUHqrpELF6zQAJUhgAK2afhY7mCliy8RxTFWKdXm26w==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@intlify/bundle-utils": "^7.4.0", "@intlify/bundle-utils": "^7.4.0",
@@ -505,9 +505,9 @@
} }
}, },
"node_modules/@quasar/extras": { "node_modules/@quasar/extras": {
"version": "1.16.7", "version": "1.16.8",
"resolved": "https://registry.npmjs.org/@quasar/extras/-/extras-1.16.7.tgz", "resolved": "https://registry.npmjs.org/@quasar/extras/-/extras-1.16.8.tgz",
"integrity": "sha512-nYF3gVE/si1YJ/D4qmAiHGwxoJIDCvTT8NI6ZmbTMPrur4J8xBKhfhfhyLoQ4k2jJZP6Rx0rUcB71FBNC2C8vQ==", "integrity": "sha512-mNSwQ6wkIVoAemhYdLm9q/FVqLHmVONZgCYdLLeqpakKNsR0r/zHQnCngzdDaXI7veYEvE0uW1gJa1wdQsxXxA==",
"funding": { "funding": {
"type": "github", "type": "github",
"url": "https://donate.quasar.dev" "url": "https://donate.quasar.dev"
@@ -728,9 +728,9 @@
} }
}, },
"node_modules/@types/json-schema": { "node_modules/@types/json-schema": {
"version": "7.0.14", "version": "7.0.15",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.14.tgz", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
"integrity": "sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
"dev": true "dev": true
}, },
"node_modules/@types/mime": { "node_modules/@types/mime": {
@@ -740,9 +740,9 @@
"dev": true "dev": true
}, },
"node_modules/@types/node": { "node_modules/@types/node": {
"version": "20.8.9", "version": "20.10.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.9.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.0.tgz",
"integrity": "sha512-UzykFsT3FhHb1h7yD4CA4YhBHq545JC0YnEz41xkipN88eKQtL6rSgocL5tbAP6Ola9Izm/Aw4Ora8He4x0BHg==", "integrity": "sha512-D0WfRmU9TQ8I9PFx9Yc+EBHw+vSpIub4IDvQivcp26PtPrdMGAq5SDcpXEo/epqa/DXotVpekHiLNTg3iaKXBQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"undici-types": "~5.26.4" "undici-types": "~5.26.4"
@@ -770,9 +770,9 @@
"dev": true "dev": true
}, },
"node_modules/@types/semver": { "node_modules/@types/semver": {
"version": "7.5.4", "version": "7.5.6",
"resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.4.tgz", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz",
"integrity": "sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==", "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==",
"dev": true "dev": true
}, },
"node_modules/@types/send": { "node_modules/@types/send": {
@@ -797,21 +797,21 @@
} }
}, },
"node_modules/@types/web-bluetooth": { "node_modules/@types/web-bluetooth": {
"version": "0.0.18", "version": "0.0.20",
"resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.18.tgz", "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz",
"integrity": "sha512-v/ZHEj9xh82usl8LMR3GarzFY1IrbXJw5L4QfQhokjRV91q+SelFqxQWSep1ucXEZ22+dSTwLFkXeur25sPIbw==" "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow=="
}, },
"node_modules/@typescript-eslint/eslint-plugin": { "node_modules/@typescript-eslint/eslint-plugin": {
"version": "6.9.0", "version": "6.13.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.9.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.13.1.tgz",
"integrity": "sha512-lgX7F0azQwRPB7t7WAyeHWVfW1YJ9NIgd9mvGhfQpRY56X6AVf8mwM8Wol+0z4liE7XX3QOt8MN1rUKCfSjRIA==", "integrity": "sha512-5bQDGkXaxD46bPvQt08BUz9YSaO4S0fB1LB5JHQuXTfkGPI3+UUeS387C/e9jRie5GqT8u5kFTrMvAjtX4O5kA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@eslint-community/regexpp": "^4.5.1", "@eslint-community/regexpp": "^4.5.1",
"@typescript-eslint/scope-manager": "6.9.0", "@typescript-eslint/scope-manager": "6.13.1",
"@typescript-eslint/type-utils": "6.9.0", "@typescript-eslint/type-utils": "6.13.1",
"@typescript-eslint/utils": "6.9.0", "@typescript-eslint/utils": "6.13.1",
"@typescript-eslint/visitor-keys": "6.9.0", "@typescript-eslint/visitor-keys": "6.13.1",
"debug": "^4.3.4", "debug": "^4.3.4",
"graphemer": "^1.4.0", "graphemer": "^1.4.0",
"ignore": "^5.2.4", "ignore": "^5.2.4",
@@ -837,15 +837,15 @@
} }
}, },
"node_modules/@typescript-eslint/parser": { "node_modules/@typescript-eslint/parser": {
"version": "6.9.0", "version": "6.13.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.9.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.13.1.tgz",
"integrity": "sha512-GZmjMh4AJ/5gaH4XF2eXA8tMnHWP+Pm1mjQR2QN4Iz+j/zO04b9TOvJYOX2sCNIQHtRStKTxRY1FX7LhpJT4Gw==", "integrity": "sha512-fs2XOhWCzRhqMmQf0eicLa/CWSaYss2feXsy7xBD/pLyWke/jCIVc2s1ikEAtSW7ina1HNhv7kONoEfVNEcdDQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@typescript-eslint/scope-manager": "6.9.0", "@typescript-eslint/scope-manager": "6.13.1",
"@typescript-eslint/types": "6.9.0", "@typescript-eslint/types": "6.13.1",
"@typescript-eslint/typescript-estree": "6.9.0", "@typescript-eslint/typescript-estree": "6.13.1",
"@typescript-eslint/visitor-keys": "6.9.0", "@typescript-eslint/visitor-keys": "6.13.1",
"debug": "^4.3.4" "debug": "^4.3.4"
}, },
"engines": { "engines": {
@@ -865,13 +865,13 @@
} }
}, },
"node_modules/@typescript-eslint/scope-manager": { "node_modules/@typescript-eslint/scope-manager": {
"version": "6.9.0", "version": "6.13.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.9.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.13.1.tgz",
"integrity": "sha512-1R8A9Mc39n4pCCz9o79qRO31HGNDvC7UhPhv26TovDsWPBDx+Sg3rOZdCELIA3ZmNoWAuxaMOT7aWtGRSYkQxw==", "integrity": "sha512-BW0kJ7ceiKi56GbT2KKzZzN+nDxzQK2DS6x0PiSMPjciPgd/JRQGMibyaN2cPt2cAvuoH0oNvn2fwonHI+4QUQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@typescript-eslint/types": "6.9.0", "@typescript-eslint/types": "6.13.1",
"@typescript-eslint/visitor-keys": "6.9.0" "@typescript-eslint/visitor-keys": "6.13.1"
}, },
"engines": { "engines": {
"node": "^16.0.0 || >=18.0.0" "node": "^16.0.0 || >=18.0.0"
@@ -882,13 +882,13 @@
} }
}, },
"node_modules/@typescript-eslint/type-utils": { "node_modules/@typescript-eslint/type-utils": {
"version": "6.9.0", "version": "6.13.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.9.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.13.1.tgz",
"integrity": "sha512-XXeahmfbpuhVbhSOROIzJ+b13krFmgtc4GlEuu1WBT+RpyGPIA4Y/eGnXzjbDj5gZLzpAXO/sj+IF/x2GtTMjQ==", "integrity": "sha512-A2qPlgpxx2v//3meMqQyB1qqTg1h1dJvzca7TugM3Yc2USDY+fsRBiojAEo92HO7f5hW5mjAUF6qobOPzlBCBQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@typescript-eslint/typescript-estree": "6.9.0", "@typescript-eslint/typescript-estree": "6.13.1",
"@typescript-eslint/utils": "6.9.0", "@typescript-eslint/utils": "6.13.1",
"debug": "^4.3.4", "debug": "^4.3.4",
"ts-api-utils": "^1.0.1" "ts-api-utils": "^1.0.1"
}, },
@@ -909,9 +909,9 @@
} }
}, },
"node_modules/@typescript-eslint/types": { "node_modules/@typescript-eslint/types": {
"version": "6.9.0", "version": "6.13.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.9.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.13.1.tgz",
"integrity": "sha512-+KB0lbkpxBkBSiVCuQvduqMJy+I1FyDbdwSpM3IoBS7APl4Bu15lStPjgBIdykdRqQNYqYNMa8Kuidax6phaEw==", "integrity": "sha512-gjeEskSmiEKKFIbnhDXUyiqVma1gRCQNbVZ1C8q7Zjcxh3WZMbzWVfGE9rHfWd1msQtPS0BVD9Jz9jded44eKg==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": "^16.0.0 || >=18.0.0" "node": "^16.0.0 || >=18.0.0"
@@ -922,13 +922,13 @@
} }
}, },
"node_modules/@typescript-eslint/typescript-estree": { "node_modules/@typescript-eslint/typescript-estree": {
"version": "6.9.0", "version": "6.13.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.9.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.13.1.tgz",
"integrity": "sha512-NJM2BnJFZBEAbCfBP00zONKXvMqihZCrmwCaik0UhLr0vAgb6oguXxLX1k00oQyD+vZZ+CJn3kocvv2yxm4awQ==", "integrity": "sha512-sBLQsvOC0Q7LGcUHO5qpG1HxRgePbT6wwqOiGLpR8uOJvPJbfs0mW3jPA3ujsDvfiVwVlWUDESNXv44KtINkUQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@typescript-eslint/types": "6.9.0", "@typescript-eslint/types": "6.13.1",
"@typescript-eslint/visitor-keys": "6.9.0", "@typescript-eslint/visitor-keys": "6.13.1",
"debug": "^4.3.4", "debug": "^4.3.4",
"globby": "^11.1.0", "globby": "^11.1.0",
"is-glob": "^4.0.3", "is-glob": "^4.0.3",
@@ -949,17 +949,17 @@
} }
}, },
"node_modules/@typescript-eslint/utils": { "node_modules/@typescript-eslint/utils": {
"version": "6.9.0", "version": "6.13.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.9.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.13.1.tgz",
"integrity": "sha512-5Wf+Jsqya7WcCO8me504FBigeQKVLAMPmUzYgDbWchINNh1KJbxCgVya3EQ2MjvJMVeXl3pofRmprqX6mfQkjQ==", "integrity": "sha512-ouPn/zVoan92JgAegesTXDB/oUp6BP1v8WpfYcqh649ejNc9Qv+B4FF2Ff626kO1xg0wWwwG48lAJ4JuesgdOw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@eslint-community/eslint-utils": "^4.4.0", "@eslint-community/eslint-utils": "^4.4.0",
"@types/json-schema": "^7.0.12", "@types/json-schema": "^7.0.12",
"@types/semver": "^7.5.0", "@types/semver": "^7.5.0",
"@typescript-eslint/scope-manager": "6.9.0", "@typescript-eslint/scope-manager": "6.13.1",
"@typescript-eslint/types": "6.9.0", "@typescript-eslint/types": "6.13.1",
"@typescript-eslint/typescript-estree": "6.9.0", "@typescript-eslint/typescript-estree": "6.13.1",
"semver": "^7.5.4" "semver": "^7.5.4"
}, },
"engines": { "engines": {
@@ -974,12 +974,12 @@
} }
}, },
"node_modules/@typescript-eslint/visitor-keys": { "node_modules/@typescript-eslint/visitor-keys": {
"version": "6.9.0", "version": "6.13.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.9.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.13.1.tgz",
"integrity": "sha512-dGtAfqjV6RFOtIP8I0B4ZTBRrlTT8NHHlZZSchQx3qReaoDeXhYM++M4So2AgFK9ZB0emRPA6JI1HkafzA2Ibg==", "integrity": "sha512-NDhQUy2tg6XGNBGDRm1XybOHSia8mcXmlbKWoQP+nm1BIIMxa55shyJfZkHpEBN62KNPLrocSM2PdPcaLgDKMQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@typescript-eslint/types": "6.9.0", "@typescript-eslint/types": "6.13.1",
"eslint-visitor-keys": "^3.4.1" "eslint-visitor-keys": "^3.4.1"
}, },
"engines": { "engines": {
@@ -1010,36 +1010,36 @@
} }
}, },
"node_modules/@vue/compiler-core": { "node_modules/@vue/compiler-core": {
"version": "3.3.7", "version": "3.3.9",
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.7.tgz", "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.9.tgz",
"integrity": "sha512-pACdY6YnTNVLXsB86YD8OF9ihwpolzhhtdLVHhBL6do/ykr6kKXNYABRtNMGrsQXpEXXyAdwvWWkuTbs4MFtPQ==", "integrity": "sha512-+/Lf68Vr/nFBA6ol4xOtJrW+BQWv3QWKfRwGSm70jtXwfhZNF4R/eRgyVJYoxFRhdCTk/F6g99BP0ffPgZihfQ==",
"dependencies": { "dependencies": {
"@babel/parser": "^7.23.0", "@babel/parser": "^7.23.3",
"@vue/shared": "3.3.7", "@vue/shared": "3.3.9",
"estree-walker": "^2.0.2", "estree-walker": "^2.0.2",
"source-map-js": "^1.0.2" "source-map-js": "^1.0.2"
} }
}, },
"node_modules/@vue/compiler-dom": { "node_modules/@vue/compiler-dom": {
"version": "3.3.7", "version": "3.3.9",
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.7.tgz", "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.9.tgz",
"integrity": "sha512-0LwkyJjnUPssXv/d1vNJ0PKfBlDoQs7n81CbO6Q0zdL7H1EzqYRrTVXDqdBVqro0aJjo/FOa1qBAPVI4PGSHBw==", "integrity": "sha512-nfWubTtLXuT4iBeDSZ5J3m218MjOy42Vp2pmKVuBKo2/BLcrFUX8nCSr/bKRFiJ32R8qbdnnnBgRn9AdU5v0Sg==",
"dependencies": { "dependencies": {
"@vue/compiler-core": "3.3.7", "@vue/compiler-core": "3.3.9",
"@vue/shared": "3.3.7" "@vue/shared": "3.3.9"
} }
}, },
"node_modules/@vue/compiler-sfc": { "node_modules/@vue/compiler-sfc": {
"version": "3.3.7", "version": "3.3.9",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.7.tgz", "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.9.tgz",
"integrity": "sha512-7pfldWy/J75U/ZyYIXRVqvLRw3vmfxDo2YLMwVtWVNew8Sm8d6wodM+OYFq4ll/UxfqVr0XKiVwti32PCrruAw==", "integrity": "sha512-wy0CNc8z4ihoDzjASCOCsQuzW0A/HP27+0MDSSICMjVIFzk/rFViezkR3dzH+miS2NDEz8ywMdbjO5ylhOLI2A==",
"dependencies": { "dependencies": {
"@babel/parser": "^7.23.0", "@babel/parser": "^7.23.3",
"@vue/compiler-core": "3.3.7", "@vue/compiler-core": "3.3.9",
"@vue/compiler-dom": "3.3.7", "@vue/compiler-dom": "3.3.9",
"@vue/compiler-ssr": "3.3.7", "@vue/compiler-ssr": "3.3.9",
"@vue/reactivity-transform": "3.3.7", "@vue/reactivity-transform": "3.3.9",
"@vue/shared": "3.3.7", "@vue/shared": "3.3.9",
"estree-walker": "^2.0.2", "estree-walker": "^2.0.2",
"magic-string": "^0.30.5", "magic-string": "^0.30.5",
"postcss": "^8.4.31", "postcss": "^8.4.31",
@@ -1047,12 +1047,12 @@
} }
}, },
"node_modules/@vue/compiler-ssr": { "node_modules/@vue/compiler-ssr": {
"version": "3.3.7", "version": "3.3.9",
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.7.tgz", "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.9.tgz",
"integrity": "sha512-TxOfNVVeH3zgBc82kcUv+emNHo+vKnlRrkv8YvQU5+Y5LJGJwSNzcmLUoxD/dNzv0bhQ/F0s+InlgV0NrApJZg==", "integrity": "sha512-NO5oobAw78R0G4SODY5A502MGnDNiDjf6qvhn7zD7TJGc8XDeIEw4fg6JU705jZ/YhuokBKz0A5a/FL/XZU73g==",
"dependencies": { "dependencies": {
"@vue/compiler-dom": "3.3.7", "@vue/compiler-dom": "3.3.9",
"@vue/shared": "3.3.7" "@vue/shared": "3.3.9"
} }
}, },
"node_modules/@vue/devtools-api": { "node_modules/@vue/devtools-api": {
@@ -1061,69 +1061,69 @@
"integrity": "sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==" "integrity": "sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA=="
}, },
"node_modules/@vue/reactivity": { "node_modules/@vue/reactivity": {
"version": "3.3.7", "version": "3.3.9",
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.7.tgz", "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.9.tgz",
"integrity": "sha512-cZNVjWiw00708WqT0zRpyAgduG79dScKEPYJXq2xj/aMtk3SKvL3FBt2QKUlh6EHBJ1m8RhBY+ikBUzwc7/khg==", "integrity": "sha512-VmpIqlNp+aYDg2X0xQhJqHx9YguOmz2UxuUJDckBdQCNkipJvfk9yA75woLWElCa0Jtyec3lAAt49GO0izsphw==",
"dependencies": { "dependencies": {
"@vue/shared": "3.3.7" "@vue/shared": "3.3.9"
} }
}, },
"node_modules/@vue/reactivity-transform": { "node_modules/@vue/reactivity-transform": {
"version": "3.3.7", "version": "3.3.9",
"resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.7.tgz", "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.9.tgz",
"integrity": "sha512-APhRmLVbgE1VPGtoLQoWBJEaQk4V8JUsqrQihImVqKT+8U6Qi3t5ATcg4Y9wGAPb3kIhetpufyZ1RhwbZCIdDA==", "integrity": "sha512-HnUFm7Ry6dFa4Lp63DAxTixUp8opMtQr6RxQCpDI1vlh12rkGIeYqMvJtK+IKyEfEOa2I9oCkD1mmsPdaGpdVg==",
"dependencies": { "dependencies": {
"@babel/parser": "^7.23.0", "@babel/parser": "^7.23.3",
"@vue/compiler-core": "3.3.7", "@vue/compiler-core": "3.3.9",
"@vue/shared": "3.3.7", "@vue/shared": "3.3.9",
"estree-walker": "^2.0.2", "estree-walker": "^2.0.2",
"magic-string": "^0.30.5" "magic-string": "^0.30.5"
} }
}, },
"node_modules/@vue/runtime-core": { "node_modules/@vue/runtime-core": {
"version": "3.3.7", "version": "3.3.9",
"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.7.tgz", "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.9.tgz",
"integrity": "sha512-LHq9du3ubLZFdK/BP0Ysy3zhHqRfBn80Uc+T5Hz3maFJBGhci1MafccnL3rpd5/3wVfRHAe6c+PnlO2PAavPTQ==", "integrity": "sha512-xxaG9KvPm3GTRuM4ZyU8Tc+pMVzcu6eeoSRQJ9IE7NmCcClW6z4B3Ij6L4EDl80sxe/arTtQ6YmgiO4UZqRc+w==",
"dependencies": { "dependencies": {
"@vue/reactivity": "3.3.7", "@vue/reactivity": "3.3.9",
"@vue/shared": "3.3.7" "@vue/shared": "3.3.9"
} }
}, },
"node_modules/@vue/runtime-dom": { "node_modules/@vue/runtime-dom": {
"version": "3.3.7", "version": "3.3.9",
"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.7.tgz", "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.9.tgz",
"integrity": "sha512-PFQU1oeJxikdDmrfoNQay5nD4tcPNYixUBruZzVX/l0eyZvFKElZUjW4KctCcs52nnpMGO6UDK+jF5oV4GT5Lw==", "integrity": "sha512-e7LIfcxYSWbV6BK1wQv9qJyxprC75EvSqF/kQKe6bdZEDNValzeRXEVgiX7AHI6hZ59HA4h7WT5CGvm69vzJTQ==",
"dependencies": { "dependencies": {
"@vue/runtime-core": "3.3.7", "@vue/runtime-core": "3.3.9",
"@vue/shared": "3.3.7", "@vue/shared": "3.3.9",
"csstype": "^3.1.2" "csstype": "^3.1.2"
} }
}, },
"node_modules/@vue/server-renderer": { "node_modules/@vue/server-renderer": {
"version": "3.3.7", "version": "3.3.9",
"resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.7.tgz", "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.9.tgz",
"integrity": "sha512-UlpKDInd1hIZiNuVVVvLgxpfnSouxKQOSE2bOfQpBuGwxRV/JqqTCyyjXUWiwtVMyeRaZhOYYqntxElk8FhBhw==", "integrity": "sha512-w0zT/s5l3Oa3ZjtLW88eO4uV6AQFqU8X5GOgzq7SkQQu6vVr+8tfm+OI2kDBplS/W/XgCBuFXiPw6T5EdwXP0A==",
"dependencies": { "dependencies": {
"@vue/compiler-ssr": "3.3.7", "@vue/compiler-ssr": "3.3.9",
"@vue/shared": "3.3.7" "@vue/shared": "3.3.9"
}, },
"peerDependencies": { "peerDependencies": {
"vue": "3.3.7" "vue": "3.3.9"
} }
}, },
"node_modules/@vue/shared": { "node_modules/@vue/shared": {
"version": "3.3.7", "version": "3.3.9",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.7.tgz", "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.9.tgz",
"integrity": "sha512-N/tbkINRUDExgcPTBvxNkvHGu504k8lzlNQRITVnm6YjOjwa4r0nnbd4Jb01sNpur5hAllyRJzSK5PvB9PPwRg==" "integrity": "sha512-ZE0VTIR0LmYgeyhurPTpy4KzKsuDyQbMSdM49eKkMnT5X4VfFBLysMzjIZhLEFQYjjOVVfbvUDHckwjDFiO2eA=="
}, },
"node_modules/@vueuse/core": { "node_modules/@vueuse/core": {
"version": "10.5.0", "version": "10.6.1",
"resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.5.0.tgz", "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.6.1.tgz",
"integrity": "sha512-z/tI2eSvxwLRjOhDm0h/SXAjNm8N5ld6/SC/JQs6o6kpJ6Ya50LnEL8g5hoYu005i28L0zqB5L5yAl8Jl26K3A==", "integrity": "sha512-Pc26IJbqgC9VG1u6VY/xrXXfxD33hnvxBnKrLlA2LJlyHII+BSrRoTPJgGYq7qZOu61itITFUnm6QbacwZ4H8Q==",
"dependencies": { "dependencies": {
"@types/web-bluetooth": "^0.0.18", "@types/web-bluetooth": "^0.0.20",
"@vueuse/metadata": "10.5.0", "@vueuse/metadata": "10.6.1",
"@vueuse/shared": "10.5.0", "@vueuse/shared": "10.6.1",
"vue-demi": ">=0.14.6" "vue-demi": ">=0.14.6"
}, },
"funding": { "funding": {
@@ -1156,17 +1156,17 @@
} }
}, },
"node_modules/@vueuse/metadata": { "node_modules/@vueuse/metadata": {
"version": "10.5.0", "version": "10.6.1",
"resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.5.0.tgz", "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.6.1.tgz",
"integrity": "sha512-fEbElR+MaIYyCkeM0SzWkdoMtOpIwO72x8WsZHRE7IggiOlILttqttM69AS13nrDxosnDBYdyy3C5mR1LCxHsw==", "integrity": "sha512-qhdwPI65Bgcj23e5lpGfQsxcy0bMjCAsUGoXkJ7DsoeDUdasbZ2DBa4dinFCOER3lF4gwUv+UD2AlA11zdzMFw==",
"funding": { "funding": {
"url": "https://github.com/sponsors/antfu" "url": "https://github.com/sponsors/antfu"
} }
}, },
"node_modules/@vueuse/shared": { "node_modules/@vueuse/shared": {
"version": "10.5.0", "version": "10.6.1",
"resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.5.0.tgz", "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.6.1.tgz",
"integrity": "sha512-18iyxbbHYLst9MqU1X1QNdMHIjks6wC7XTVf0KNOv5es/Ms6gjVFCAAWTVP2JStuGqydg3DT+ExpFORUEi9yhg==", "integrity": "sha512-TECVDTIedFlL0NUfHWncf3zF9Gc4VfdxfQc8JFwoVZQmxpONhLxFrlm0eHQeidHj4rdTPL3KXJa0TZCk1wnc5Q==",
"dependencies": { "dependencies": {
"vue-demi": ">=0.14.6" "vue-demi": ">=0.14.6"
}, },
@@ -1483,9 +1483,9 @@
} }
}, },
"node_modules/axios": { "node_modules/axios": {
"version": "1.6.0", "version": "1.6.2",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.6.0.tgz", "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz",
"integrity": "sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==", "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==",
"dependencies": { "dependencies": {
"follow-redirects": "^1.15.0", "follow-redirects": "^1.15.0",
"form-data": "^4.0.0", "form-data": "^4.0.0",
@@ -3103,15 +3103,15 @@
} }
}, },
"node_modules/eslint": { "node_modules/eslint": {
"version": "8.52.0", "version": "8.54.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.52.0.tgz", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.54.0.tgz",
"integrity": "sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==", "integrity": "sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.6.1", "@eslint-community/regexpp": "^4.6.1",
"@eslint/eslintrc": "^2.1.2", "@eslint/eslintrc": "^2.1.3",
"@eslint/js": "8.52.0", "@eslint/js": "8.54.0",
"@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/config-array": "^0.11.13",
"@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/module-importer": "^1.0.1",
"@nodelib/fs.walk": "^1.2.8", "@nodelib/fs.walk": "^1.2.8",
@@ -5465,9 +5465,9 @@
} }
}, },
"node_modules/prettier": { "node_modules/prettier": {
"version": "3.0.3", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.0.tgz",
"integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", "integrity": "sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==",
"dev": true, "dev": true,
"bin": { "bin": {
"prettier": "bin/prettier.cjs" "prettier": "bin/prettier.cjs"
@@ -6748,9 +6748,9 @@
} }
}, },
"node_modules/typescript": { "node_modules/typescript": {
"version": "5.2.2", "version": "5.3.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.2.tgz",
"integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", "integrity": "sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==",
"devOptional": true, "devOptional": true,
"bin": { "bin": {
"tsc": "bin/tsc", "tsc": "bin/tsc",
@@ -6985,15 +6985,15 @@
} }
}, },
"node_modules/vue": { "node_modules/vue": {
"version": "3.3.7", "version": "3.3.9",
"resolved": "https://registry.npmjs.org/vue/-/vue-3.3.7.tgz", "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.9.tgz",
"integrity": "sha512-YEMDia1ZTv1TeBbnu6VybatmSteGOS3A3YgfINOfraCbf85wdKHzscD6HSS/vB4GAtI7sa1XPX7HcQaJ1l24zA==", "integrity": "sha512-sy5sLCTR8m6tvUk1/ijri3Yqzgpdsmxgj6n6yl7GXXCXqVbmW2RCXe9atE4cEI6Iv7L89v5f35fZRRr5dChP9w==",
"dependencies": { "dependencies": {
"@vue/compiler-dom": "3.3.7", "@vue/compiler-dom": "3.3.9",
"@vue/compiler-sfc": "3.3.7", "@vue/compiler-sfc": "3.3.9",
"@vue/runtime-dom": "3.3.7", "@vue/runtime-dom": "3.3.9",
"@vue/server-renderer": "3.3.7", "@vue/server-renderer": "3.3.9",
"@vue/shared": "3.3.7" "@vue/shared": "3.3.9"
}, },
"peerDependencies": { "peerDependencies": {
"typescript": "*" "typescript": "*"
@@ -7257,9 +7257,9 @@
"dev": true "dev": true
}, },
"node_modules/yaml": { "node_modules/yaml": {
"version": "2.3.3", "version": "2.3.4",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.3.tgz", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz",
"integrity": "sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==", "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==",
"engines": { "engines": {
"node": ">= 14" "node": ">= 14"
} }

View File

@@ -1,6 +1,6 @@
{ {
"name": "web", "name": "web",
"version": "0.101.34", "version": "0.101.37",
"private": true, "private": true,
"productName": "Tactical RMM", "productName": "Tactical RMM",
"scripts": { "scripts": {
@@ -10,34 +10,34 @@
"format": "prettier --write \"**/*.{js,ts,vue,,html,md,json}\" --ignore-path .gitignore" "format": "prettier --write \"**/*.{js,ts,vue,,html,md,json}\" --ignore-path .gitignore"
}, },
"dependencies": { "dependencies": {
"@quasar/extras": "1.16.7", "@quasar/extras": "1.16.8",
"apexcharts": "3.44.0", "apexcharts": "3.44.0",
"axios": "1.6.0", "axios": "1.6.2",
"dotenv": "16.3.1", "dotenv": "16.3.1",
"qrcode.vue": "3.4.1", "qrcode.vue": "3.4.1",
"quasar": "2.13.0", "quasar": "2.13.0",
"vue": "3.3.7", "vue": "3.3.9",
"vue3-apexcharts": "1.4.4", "vue3-apexcharts": "1.4.4",
"vuedraggable": "4.1.0", "vuedraggable": "4.1.0",
"vue-router": "4.2.5", "vue-router": "4.2.5",
"@vueuse/core": "10.5.0", "@vueuse/core": "10.6.1",
"@vueuse/shared": "10.5.0", "@vueuse/shared": "10.6.1",
"monaco-editor": "0.44.0", "monaco-editor": "0.44.0",
"vuex": "4.1.0", "vuex": "4.1.0",
"yaml": "2.3.3" "yaml": "2.3.4"
}, },
"devDependencies": { "devDependencies": {
"@quasar/cli": "2.3.0", "@quasar/cli": "2.3.0",
"@intlify/unplugin-vue-i18n": "1.4.0", "@intlify/unplugin-vue-i18n": "1.5.0",
"@quasar/app-vite": "1.6.2", "@quasar/app-vite": "1.6.2",
"@types/node": "20.8.9", "@types/node": "20.10.0",
"@typescript-eslint/eslint-plugin": "6.9.0", "@typescript-eslint/eslint-plugin": "6.13.1",
"@typescript-eslint/parser": "6.9.0", "@typescript-eslint/parser": "6.13.1",
"autoprefixer": "10.4.16", "autoprefixer": "10.4.16",
"eslint": "8.52.0", "eslint": "8.54.0",
"eslint-config-prettier": "9.0.0", "eslint-config-prettier": "9.0.0",
"eslint-plugin-vue": "8.7.1", "eslint-plugin-vue": "8.7.1",
"prettier": "3.0.3", "prettier": "3.1.0",
"typescript": "5.2.2" "typescript": "5.3.2"
} }
} }

BIN
src/assets/trmm_256.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -85,10 +85,6 @@
v-model="localRole.can_uninstall_agents" v-model="localRole.can_uninstall_agents"
label="Uninstall Agents" label="Uninstall Agents"
/> />
<q-checkbox
v-model="localRole.can_ping_agents"
label="Ping Agents"
/>
<q-checkbox <q-checkbox
v-model="localRole.can_update_agents" v-model="localRole.can_update_agents"
label="Update Agents" label="Update Agents"
@@ -447,7 +443,6 @@ export default {
can_uninstall_agents: false, can_uninstall_agents: false,
can_update_agents: false, can_update_agents: false,
can_edit_agent: false, can_edit_agent: false,
can_ping_agents: false,
can_manage_procs: false, can_manage_procs: false,
can_view_eventlogs: false, can_view_eventlogs: false,
can_send_cmd: false, can_send_cmd: false,

View File

@@ -34,7 +34,7 @@
:color="dash_warning_color" :color="dash_warning_color"
class="q-mr-sm" class="q-mr-sm"
> >
<q-tooltip>Agent offline</q-tooltip> <q-tooltip>{{ store.getters.formatDate(summary.last_seen) }}</q-tooltip>
</q-icon> </q-icon>
<q-icon <q-icon
v-else v-else
@@ -43,7 +43,7 @@
:color="dash_positive_color" :color="dash_positive_color"
class="q-mr-sm" class="q-mr-sm"
> >
<q-tooltip>Agent online</q-tooltip> <q-tooltip>{{ store.getters.formatDate(summary.last_seen) }}</q-tooltip>
</q-icon> </q-icon>
<b>{{ summary.hostname }}</b> <b>{{ summary.hostname }}</b>
<span v-if="summary.maintenance_mode"> <span v-if="summary.maintenance_mode">
@@ -311,7 +311,7 @@ export default {
const ret = []; const ret = [];
for (const customField of summary.value.custom_fields) { for (const customField of summary.value.custom_fields) {
const definition = customFieldsDefinitions.value.find( const definition = customFieldsDefinitions.value.find(
(def) => def.id === customField.field (def) => def.id === customField.field,
); );
if ( if (
definition && definition &&
@@ -381,6 +381,7 @@ export default {
dash_negative_color, dash_negative_color,
serial_number, serial_number,
cpu, cpu,
store,
// methods // methods
getSummary, getSummary,

View File

@@ -254,7 +254,7 @@ export default {
pagination: { pagination: {
rowsPerPage: 0, rowsPerPage: 0,
sortBy: "name", sortBy: "name",
descending: true, descending: false,
}, },
}; };
}, },
@@ -321,7 +321,7 @@ export default {
runTask(task) { runTask(task) {
if (!task.enabled) { if (!task.enabled) {
this.notifyError( this.notifyError(
"Task cannot be run when it's disabled. Enable it first." "Task cannot be run when it's disabled. Enable it first.",
); );
return; return;
} }

View File

@@ -1,6 +1,6 @@
<template> <template>
<q-dialog ref="dialog" @hide="onHide"> <q-dialog ref="dialog" @hide="onHide">
<q-card class="q-dialog-plugin" style="width: 90vw"> <q-card class="q-dialog-plugin" style="min-width: 70vw">
<q-bar> <q-bar>
{{ title.slice(0, 27) }} {{ title.slice(0, 27) }}
<q-space /> <q-space />

View File

@@ -1,17 +1,14 @@
<template> <template>
<q-dialog <q-dialog
ref="dialogRef" ref="dialogRef"
persistent maximized
@keydown.esc.stop="onDialogHide" no-esc-dismiss
:maximized="maximized"
@hide="onDialogHide" @hide="onDialogHide"
@show="loadEditor" @show="loadEditor"
@before-hide="unloadEditor" @before-hide="unloadEditor"
@keydown.esc.stop="closeEditor"
> >
<q-card <q-card class="q-dialog-plugin">
class="q-dialog-plugin"
:style="maximized ? '' : 'width: 90vw; max-width: 90vw'"
>
<q-bar> <q-bar>
<span class="q-pr-sm">{{ title }}</span> <span class="q-pr-sm">{{ title }}</span>
<q-btn <q-btn
@@ -25,29 +22,7 @@
@click="generateScriptOpenAI" @click="generateScriptOpenAI"
/> />
<q-space /> <q-space />
<q-btn <q-btn dense flat icon="close" @click="closeEditor">
dense
flat
icon="minimize"
@click="maximized = false"
:disable="!maximized"
>
<q-tooltip v-if="maximized" class="bg-white text-primary"
>Minimize</q-tooltip
>
</q-btn>
<q-btn
dense
flat
icon="crop_square"
@click="maximized = true"
:disable="maximized"
>
<q-tooltip v-if="!maximized" class="bg-white text-primary"
>Maximize</q-tooltip
>
</q-btn>
<q-btn dense flat icon="close" v-close-popup>
<q-tooltip class="bg-white text-primary">Close</q-tooltip> <q-tooltip class="bg-white text-primary">Close</q-tooltip>
</q-btn> </q-btn>
</q-bar> </q-bar>
@@ -78,7 +53,7 @@
opacity: '0.2', opacity: '0.2',
}" }"
class="col-4 q-mb-none q-pb-none" class="col-4 q-mb-none q-pb-none"
:style="{ height: `${maximized ? '82vh' : '64vh'}` }" :style="{ height: `${$q.screen.height - 106}px` }"
> >
<div class="q-gutter-sm q-pr-sm"> <div class="q-gutter-sm q-pr-sm">
<q-input <q-input
@@ -187,7 +162,7 @@
<div <div
ref="scriptEditor" ref="scriptEditor"
class="col-8 q-mb-none q-pb-none" class="col-8 q-mb-none q-pb-none"
:style="{ height: `${maximized ? '82vh' : '64vh'}` }" :style="{ height: `${$q.screen.height - 106}px` }"
></div> ></div>
</div> </div>
<q-card-actions> <q-card-actions>
@@ -217,7 +192,7 @@
</template> </template>
</tactical-dropdown> </tactical-dropdown>
<q-space /> <q-space />
<q-btn dense flat label="Cancel" v-close-popup /> <q-btn dense flat label="Cancel" @click="closeEditor" />
<q-btn <q-btn
v-if="!readonly" v-if="!readonly"
:loading="loading" :loading="loading"
@@ -296,7 +271,6 @@ const script: Script = props.script
}); });
if (props.clone) script.name = `(Copy) ${script.name}`; if (props.clone) script.name = `(Copy) ${script.name}`;
const maximized = ref(false);
const loading = ref(false); const loading = ref(false);
const agentLoading = ref(false); const agentLoading = ref(false);
@@ -391,7 +365,23 @@ function loadEditor() {
downloadScript(script.id, { with_snippets: props.readonly }).then((r) => { downloadScript(script.id, { with_snippets: props.readonly }).then((r) => {
script.script_body = r.code; script.script_body = r.code;
editor.setValue(r.code); editor.setValue(r.code);
// need to add this in the download function otherwise the above will trigger an edit
watch(
() => script.script_body,
() => {
edited.value = true;
},
);
}); });
else {
watch(
() => script.script_body,
() => {
edited.value = true;
},
);
}
// watch for changes in language // watch for changes in language
watch(lang, () => { watch(lang, () => {
@@ -422,6 +412,21 @@ function generateScriptOpenAI() {
}); });
} }
// add are you sure prompt to unsaved script
const edited = ref(false);
function closeEditor() {
if (edited.value)
$q.dialog({
title: "You have unsaved changes. Are you sure you want to close?",
cancel: true,
ok: true,
}).onOk(async () => {
unloadEditor();
});
else unloadEditor();
}
// component life cycle hooks // component life cycle hooks
onMounted(async () => { onMounted(async () => {
agentLoading.value = true; agentLoading.value = true;

View File

@@ -176,6 +176,13 @@
<q-tooltip> Shell </q-tooltip> <q-tooltip> Shell </q-tooltip>
</q-icon> </q-icon>
<!-- is community script icon -->
<img
v-if="props.row.script_type === 'builtin'"
:src="trmmLogo"
style="height: 20px; max-width: 20px"
/>
<span <span
class="q-pl-xs text-weight-bold" class="q-pl-xs text-weight-bold"
:style="{ color: props.node.hidden ? 'grey' : '' }" :style="{ color: props.node.hidden ? 'grey' : '' }"
@@ -488,6 +495,12 @@
:props="props" :props="props"
:style="{ color: props.row.hidden ? 'grey' : '' }" :style="{ color: props.row.hidden ? 'grey' : '' }"
> >
<!-- is community script icon -->
<img
v-if="props.row.script_type === 'builtin'"
:src="trmmLogo"
style="height: 20px; max-width: 20px"
/>
{{ truncateText(props.row.name, 50) }} {{ truncateText(props.row.name, 50) }}
<q-tooltip <q-tooltip
v-if="props.row.name.length >= 50" v-if="props.row.name.length >= 50"
@@ -550,6 +563,8 @@ import ScriptFormModal from "@/components/scripts/ScriptFormModal.vue";
import ScriptSnippets from "@/components/scripts/ScriptSnippets.vue"; import ScriptSnippets from "@/components/scripts/ScriptSnippets.vue";
import TacticalTable from "@/components/ui/TacticalTable.vue"; import TacticalTable from "@/components/ui/TacticalTable.vue";
import trmmLogo from "@/assets/trmm_256.png";
// static data // static data
const columns = [ const columns = [
{ {
@@ -620,7 +635,7 @@ export default {
// setup vuex store // setup vuex store
const store = useStore(); const store = useStore();
const showCommunityScripts = computed( const showCommunityScripts = computed(
() => store.state.showCommunityScripts () => store.state.showCommunityScripts,
); );
// setup quasar plugins // setup quasar plugins
@@ -721,7 +736,7 @@ export default {
return showCommunityScripts.value return showCommunityScripts.value
? scripts.value.filter((i) => !i.hidden) ? scripts.value.filter((i) => !i.hidden)
: scripts.value.filter( : scripts.value.filter(
(i) => i.script_type !== "builtin" && !i.hidden (i) => i.script_type !== "builtin" && !i.hidden,
); );
} }
}); });
@@ -884,6 +899,7 @@ export default {
loading, loading,
showCommunityScripts, showCommunityScripts,
showHiddenScripts, showHiddenScripts,
trmmLogo,
// computed // computed
visibleScripts, visibleScripts,

View File

@@ -1,17 +1,12 @@
<template> <template>
<q-dialog <q-dialog
ref="dialogRef" ref="dialogRef"
persistent maximized
@keydown.esc.stop="onDialogHide"
:maximized="maximized"
@hide="onDialogHide" @hide="onDialogHide"
@show="loadEditor" @show="loadEditor"
@before-hide="unloadEditor" @before-hide="unloadEditor"
> >
<q-card <q-card class="q-dialog-plugin">
class="q-dialog-plugin"
:style="maximized ? '' : 'width: 70vw; max-width: 90vw'"
>
<q-bar> <q-bar>
<span class="q-pr-sm">{{ title }}</span> <span class="q-pr-sm">{{ title }}</span>
<q-btn <q-btn
@@ -25,35 +20,13 @@
@click="generateScriptOpenAI" @click="generateScriptOpenAI"
/> />
<q-space /> <q-space />
<q-btn
dense
flat
icon="minimize"
@click="maximized = false"
:disable="!maximized"
>
<q-tooltip v-if="maximized" class="bg-white text-primary"
>Minimize</q-tooltip
>
</q-btn>
<q-btn
dense
flat
icon="crop_square"
@click="maximized = true"
:disable="maximized"
>
<q-tooltip v-if="!maximized" class="bg-white text-primary"
>Maximize</q-tooltip
>
</q-btn>
<q-btn dense flat icon="close" v-close-popup> <q-btn dense flat icon="close" v-close-popup>
<q-tooltip class="bg-white text-primary">Close</q-tooltip> <q-tooltip class="bg-white text-primary">Close</q-tooltip>
</q-btn> </q-btn>
</q-bar> </q-bar>
<div class="row"> <div class="row">
<q-input <q-input
:rules="[(val) => !!val || '*Required']" :rules="[(val: string) => !!val || '*Required']"
class="q-pa-sm col-4" class="q-pa-sm col-4"
v-model="snippet.name" v-model="snippet.name"
label="Name" label="Name"
@@ -82,7 +55,7 @@
<div <div
ref="snippetEditor" ref="snippetEditor"
:style="{ height: `${maximized ? '82vh' : '64vh'}` }" :style="{ height: `${$q.screen.height - 132}px` }"
></div> ></div>
<q-card-actions align="right"> <q-card-actions align="right">
@@ -139,7 +112,6 @@ const openAIEnabled = computed(() => store.state.openAIIntegrationEnabled);
const snippet: ScriptSnippet = props.snippet const snippet: ScriptSnippet = props.snippet
? reactive(Object.assign({}, props.snippet)) ? reactive(Object.assign({}, props.snippet))
: reactive({ name: "", code: "", shell: "powershell" }); : reactive({ name: "", code: "", shell: "powershell" });
const maximized = ref(false);
const loading = ref(false); const loading = ref(false);
const title = computed(() => { const title = computed(() => {

View File

@@ -87,181 +87,183 @@
:done="step > 2" :done="step > 2"
:error="!isValidStep2" :error="!isValidStep2"
> >
<q-form @submit.prevent="addAction"> <div class="scroll" style="max-height: 60vh">
<div class="row q-pa-sm q-gutter-x-xs items-center"> <q-form @submit.prevent="addAction">
<div class="text-subtitle2 col-12">Action Type:</div> <div class="row q-pa-sm q-gutter-x-xs items-center">
<q-option-group <div class="text-subtitle2 col-12">Action Type:</div>
class="col-12" <q-option-group
inline class="col-12"
v-model="actionType" inline
:options="[ v-model="actionType"
{ label: 'Script', value: 'script' }, :options="[
{ label: 'Command', value: 'cmd' }, { label: 'Script', value: 'script' },
]" { label: 'Command', value: 'cmd' },
/> ]"
/>
<tactical-dropdown <tactical-dropdown
v-if="actionType === 'script'" v-if="actionType === 'script'"
class="col-3" class="col-3"
label="Select script" label="Select script"
v-model="script" v-model="script"
:options="scriptOptions" :options="scriptOptions"
filled filled
mapOptions mapOptions
filterable filterable
/> />
<q-select <q-select
v-if="actionType === 'script'" v-if="actionType === 'script'"
class="col-3" class="col-3"
dense dense
label="Script Arguments (press Enter after typing each argument)" label="Script Arguments (press Enter after typing each argument)"
filled filled
v-model="defaultArgs" v-model="defaultArgs"
use-input use-input
use-chips use-chips
multiple multiple
hide-dropdown-icon hide-dropdown-icon
input-debounce="0" input-debounce="0"
new-value-mode="add" new-value-mode="add"
/> />
<q-select <q-select
v-if="actionType === 'script'" v-if="actionType === 'script'"
class="col-3" class="col-3"
dense dense
:label="envVarsLabel" :label="envVarsLabel"
filled filled
v-model="defaultEnvVars" v-model="defaultEnvVars"
use-input use-input
use-chips use-chips
multiple multiple
hide-dropdown-icon hide-dropdown-icon
input-debounce="0" input-debounce="0"
new-value-mode="add" new-value-mode="add"
/> />
<q-input <q-input
v-if="actionType === 'script'" v-if="actionType === 'script'"
class="col-2" class="col-2"
filled filled
dense dense
v-model.number="defaultTimeout" v-model.number="defaultTimeout"
type="number" type="number"
label="Timeout (seconds)" label="Timeout (seconds)"
/> />
<q-input <q-input
v-if="actionType === 'cmd'" v-if="actionType === 'cmd'"
label="Command" label="Command"
v-model="command" v-model="command"
dense
filled
class="col-7"
/>
<q-input
v-if="actionType === 'cmd'"
class="col-2"
filled
dense
v-model.number="defaultTimeout"
type="number"
label="Timeout (seconds)"
/>
<q-option-group
v-if="actionType === 'cmd'"
class="col-2 q-pl-sm"
inline
v-model="shell"
:options="[
{ label: 'Batch', value: 'cmd' },
{ label: 'Powershell', value: 'powershell' },
]"
/>
<q-btn
class="col-1"
type="submit"
style="width: 50px"
flat
dense
icon="add"
color="primary"
/>
</div>
</q-form>
<div class="text-subtitle2 q-pa-sm">
Actions:
<q-checkbox
class="float-right"
label="Continue on Errors"
v-model="state.continue_on_error"
dense dense
filled >
class="col-7" <q-tooltip>Continue task if an action fails</q-tooltip>
/> </q-checkbox>
<q-input
v-if="actionType === 'cmd'"
class="col-2"
filled
dense
v-model.number="defaultTimeout"
type="number"
label="Timeout (seconds)"
/>
<q-option-group
v-if="actionType === 'cmd'"
class="col-2 q-pl-sm"
inline
v-model="shell"
:options="[
{ label: 'Batch', value: 'cmd' },
{ label: 'Powershell', value: 'powershell' },
]"
/>
<q-btn
class="col-1"
type="submit"
style="width: 50px"
flat
dense
icon="add"
color="primary"
/>
</div> </div>
</q-form> <div class="q-pt-sm" style="height: 150px">
<div class="text-subtitle2 q-pa-sm"> <draggable
Actions: class="q-list"
<q-checkbox handle=".handle"
class="float-right" ghost-class="ghost"
label="Continue on Errors" v-model="state.actions"
v-model="state.continue_on_error" item-key="index"
dense >
> <template v-slot:item="{ index, element }">
<q-tooltip>Continue task if an action fails</q-tooltip> <q-item>
</q-checkbox> <q-item-section avatar>
</div>
<div class="scroll q-pt-sm" style="height: 40vh; max-height: 40vh">
<draggable
class="q-list"
handle=".handle"
ghost-class="ghost"
v-model="state.actions"
item-key="index"
>
<template v-slot:item="{ index, element }">
<q-item>
<q-item-section avatar>
<q-icon
class="handle"
style="cursor: move"
name="drag_handle"
/>
</q-item-section>
<q-item-section v-if="element.type === 'script'">
<q-item-label>
<q-icon size="sm" name="description" color="primary" />
&nbsp; {{ element.name }}
</q-item-label>
<q-item-label caption>
Arguments: {{ element.script_args }}
</q-item-label>
<q-item-label caption>
Env Vars: {{ element.env_vars }}
</q-item-label>
<q-item-label caption>
Timeout: {{ element.timeout }}
</q-item-label>
</q-item-section>
<q-item-section v-else>
<q-item-label>
<q-icon size="sm" name="terminal" color="primary" />
&nbsp;
<q-icon <q-icon
size="sm" class="handle"
:name=" style="cursor: move"
element.shell === 'cmd' name="drag_handle"
? 'mdi-microsoft-windows'
: 'mdi-powershell'
"
color="primary"
/> />
{{ element.command }} </q-item-section>
</q-item-label> <q-item-section v-if="element.type === 'script'">
<q-item-label caption> <q-item-label>
Timeout: {{ element.timeout }} <q-icon size="sm" name="description" color="primary" />
</q-item-label> &nbsp; {{ element.name }}
</q-item-section> </q-item-label>
<q-item-section side> <q-item-label caption>
<q-icon Arguments: {{ element.script_args }}
class="cursor-pointer" </q-item-label>
color="negative" <q-item-label caption>
name="close" Env Vars: {{ element.env_vars }}
@click="removeAction(index)" </q-item-label>
/> <q-item-label caption>
</q-item-section> Timeout: {{ element.timeout }}
</q-item> </q-item-label>
</template> </q-item-section>
</draggable> <q-item-section v-else>
<q-item-label>
<q-icon size="sm" name="terminal" color="primary" />
&nbsp;
<q-icon
size="sm"
:name="
element.shell === 'cmd'
? 'mdi-microsoft-windows'
: 'mdi-powershell'
"
color="primary"
/>
{{ element.command }}
</q-item-label>
<q-item-label caption>
Timeout: {{ element.timeout }}
</q-item-label>
</q-item-section>
<q-item-section side>
<q-icon
class="cursor-pointer"
color="negative"
name="close"
@click="removeAction(index)"
/>
</q-item-section>
</q-item>
</template>
</draggable>
</div>
</div> </div>
</q-step> </q-step>
@@ -283,7 +285,7 @@
<q-card-section <q-card-section
v-if=" v-if="
['runonce', 'daily', 'weekly', 'monthly'].includes( ['runonce', 'daily', 'weekly', 'monthly'].includes(
state.task_type state.task_type,
) )
" "
class="row" class="row"
@@ -314,6 +316,22 @@
/> />
</q-card-section> </q-card-section>
<q-card-section
v-if="
state.task_type === 'onboarding' ||
state.task_type === 'runonce'
"
class="row"
>
<span v-if="state.task_type === 'onboarding'"
>This task will run as soon as it's created on the
agent.</span
>
<span v-else-if="state.task_type === 'runonce'"
>Start Time must be in the future for run once tasks.</span
>
</q-card-section>
<!-- daily options --> <!-- daily options -->
<q-card-section v-if="state.task_type === 'daily'" class="row"> <q-card-section v-if="state.task_type === 'daily'" class="row">
<!-- daily interval --> <!-- daily interval -->
@@ -579,7 +597,8 @@
<q-card-section <q-card-section
v-if=" v-if="
state.task_type !== 'checkfailure' && state.task_type !== 'checkfailure' &&
state.task_type !== 'manual' state.task_type !== 'manual' &&
state.task_type !== 'onboarding'
" "
class="row" class="row"
> >
@@ -617,7 +636,7 @@
(val) => (val) =>
convertPeriodToSeconds(val) >= convertPeriodToSeconds(val) >=
convertPeriodToSeconds( convertPeriodToSeconds(
state.task_repetition_interval state.task_repetition_interval,
) || ) ||
'Repetition duration must be greater than repetition interval', 'Repetition duration must be greater than repetition interval',
]" ]"
@@ -712,7 +731,7 @@
@click=" @click="
validateStep( validateStep(
step === 1 ? $refs.taskGeneralForm : undefined, step === 1 ? $refs.taskGeneralForm : undefined,
$refs.stepper $refs.stepper,
) )
" "
color="primary" color="primary"
@@ -769,6 +788,7 @@ const taskTypeOptions = [
{ label: "Monthly", value: "monthly" }, { label: "Monthly", value: "monthly" },
{ label: "Run Once", value: "runonce" }, { label: "Run Once", value: "runonce" },
{ label: "On check failure", value: "checkfailure" }, { label: "On check failure", value: "checkfailure" },
{ label: "Onboarding", value: "onboarding" },
{ label: "Manual", value: "manual" }, { label: "Manual", value: "manual" },
]; ];
@@ -933,7 +953,7 @@ export default {
task.value.actions.push({ task.value.actions.push({
type: "script", type: "script",
name: scriptOptions.value.find( name: scriptOptions.value.find(
(option) => option.value === script.value (option) => option.value === script.value,
).label, ).label,
script: script.value, script: script.value,
timeout: defaultTimeout.value, timeout: defaultTimeout.value,
@@ -1019,13 +1039,13 @@ export default {
// remove milliseconds and Z to work with native date input // remove milliseconds and Z to work with native date input
task.value.run_time_date = formatDateInputField( task.value.run_time_date = formatDateInputField(
task.value.run_time_date, task.value.run_time_date,
true true,
); );
if (task.value.expire_date) if (task.value.expire_date)
task.value.expire_date = formatDateInputField( task.value.expire_date = formatDateInputField(
task.value.expire_date, task.value.expire_date,
true true,
); );
// set task type if monthlydow is being used // set task type if monthlydow is being used
@@ -1069,7 +1089,7 @@ export default {
task.value.monthly_weeks_of_month = []; task.value.monthly_weeks_of_month = [];
task.value.task_instance_policy = 0; task.value.task_instance_policy = 0;
task.value.expire_date = null; task.value.expire_date = null;
} },
); );
// check the collector box when editing task and custom field is set // check the collector box when editing task and custom field is set

View File

@@ -25,13 +25,21 @@
:key="mapOptions ? scope.opt.value : scope.opt" :key="mapOptions ? scope.opt.value : scope.opt"
> >
<q-item-section> <q-item-section>
<q-item-label <q-item-label v-html="mapOptions ? scope.opt.label : scope.opt" />
v-html="mapOptions ? scope.opt.label : scope.opt" </q-item-section>
></q-item-label> <q-item-section
v-if="
(filtered && mapOptions && scope.opt.cat) || scope.opt.img_right
"
side
>
{{ scope.opt.cat || "" }}
<img
v-if="scope.opt.img_right"
:src="scope.opt.img_right"
style="height: 20px; max-width: 20px"
/>
</q-item-section> </q-item-section>
<q-item-section v-if="filtered && mapOptions && scope.opt.cat" side>{{
scope.opt.cat
}}</q-item-section>
</q-item> </q-item>
<q-item-label <q-item-label
v-if="scope.opt.category" v-if="scope.opt.category"
@@ -80,7 +88,7 @@ export default {
if (!props.mapOptions) if (!props.mapOptions)
filteredOptions.value = props.options.filter( filteredOptions.value = props.options.filter(
(v) => v.toLowerCase().indexOf(needle) > -1 (v) => v.toLowerCase().indexOf(needle) > -1,
); );
else else
filteredOptions.value = props.options.filter((v) => { filteredOptions.value = props.options.filter((v) => {

View File

@@ -34,7 +34,7 @@ For details, see: https://license.tacticalrmm.com/ee
class="q-pr-sm" class="q-pr-sm"
filled filled
dense dense
style="width: 250px" style="width: 425px"
:error="!isNameValid" :error="!isNameValid"
hide-bottom-space hide-bottom-space
/> />

View File

@@ -32,7 +32,7 @@ For details, see: https://license.tacticalrmm.com/ee
:rows="reportTemplates" :rows="reportTemplates"
:columns="columns" :columns="columns"
:loading="isLoading" :loading="isLoading"
:pagination="{ rowsPerPage: 0, sortBy: 'name', descending: true }" :pagination="{ rowsPerPage: 0, sortBy: 'name', descending: false }"
:filter="search" :filter="search"
row-key="id" row-key="id"
binary-state-sort binary-state-sort

View File

@@ -1,5 +1,6 @@
import { date } from "quasar"; import { date } from "quasar";
import { validateTimePeriod } from "@/utils/validation"; import { validateTimePeriod } from "@/utils/validation";
import trmmLogo from "@/assets/trmm_256.png";
// dropdown options formatting // dropdown options formatting
export function removeExtraOptionCategories(array) { export function removeExtraOptionCategories(array) {
@@ -24,7 +25,7 @@ function _formatOptions(
flat = false, flat = false,
allowDuplicates = true, allowDuplicates = true,
appendToOptionObject = {}, appendToOptionObject = {},
} },
) { ) {
if (!flat) if (!flat)
// returns array of options in object format [{label: label, value: 1}] // returns array of options in object format [{label: label, value: 1}]
@@ -64,6 +65,7 @@ export function formatScriptOptions(data) {
data.forEach((script) => { data.forEach((script) => {
if (script.category === cat) { if (script.category === cat) {
tmp.push({ tmp.push({
img_right: script.script_type === "builtin" ? trmmLogo : undefined,
label: script.name, label: script.name,
value: script.id, value: script.id,
timeout: script.default_timeout, timeout: script.default_timeout,
@@ -100,7 +102,7 @@ export function formatScriptOptions(data) {
export function formatAgentOptions( export function formatAgentOptions(
data, data,
flat = false, flat = false,
value_field = "agent_id" value_field = "agent_id",
) { ) {
if (flat) { if (flat) {
// returns just agent hostnames in array // returns just agent hostnames in array
@@ -185,7 +187,7 @@ export function formatSiteOptions(data, flat = false) {
label: "name", label: "name",
flat: flat, flat: flat,
appendToOptionObject: { cat: client.name }, appendToOptionObject: { cat: client.name },
}) }),
); );
}); });
@@ -361,7 +363,7 @@ export function convertToBitArray(number) {
bitArray.push(1); bitArray.push(1);
} else { } else {
bitArray.push( bitArray.push(
parseInt(binary.slice(i), 2) - parseInt(binary.slice(i + 1), 2) parseInt(binary.slice(i), 2) - parseInt(binary.slice(i + 1), 2),
); );
} }
} }