From 9a57e4aaabf2097581e673ee171239dc7c59a777 Mon Sep 17 00:00:00 2001 From: luojie Date: Thu, 16 Nov 2023 10:52:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9C=AC=E5=9C=B0=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hd-glasses-app/deployHD.js | 20 + hd-glasses-app/package-lock.json | 545 +++++++++++------- hd-glasses-app/package.json | 5 +- hd-glasses-app/public/srs/srs.sdk.js | 34 +- hd-glasses-app/src/pages/call_room.vue | 91 ++- hd-glasses-app/src/pages/hd_map.vue | 30 +- .../src/pages/hd_show_patrolTmp_history.vue | 10 +- .../src/pages/hd_show_patrol_history.vue | 4 +- hd-glasses-app/src/utils/publicFun.js | 3 +- .../build/im-service-1.0.0-SNAPSHOT.jar | Bin 71905239 -> 71906444 bytes .../lld/im/service/file/FileController.java | 8 +- im-uniapp/App.vue | 90 +-- im-uniapp/common/config.js | 9 +- im-uniapp/common/socketTask.js | 15 +- im-uniapp/common/utils.js | 42 +- im-uniapp/wx/chatWindow/index.vue | 207 ++++--- im-uniapp/wx/login/index.vue | 1 + im-uniapp/wx/tabbar1/index.vue | 70 ++- 18 files changed, 700 insertions(+), 484 deletions(-) create mode 100644 hd-glasses-app/deployHD.js diff --git a/hd-glasses-app/deployHD.js b/hd-glasses-app/deployHD.js new file mode 100644 index 0000000..ce86d52 --- /dev/null +++ b/hd-glasses-app/deployHD.js @@ -0,0 +1,20 @@ +const client = require('scp2'); +const ora = require('ora'); +const chalk = require('chalk'); +const spinner = ora(chalk.green('正在发布到服务器...')); +spinner.start(); + +client.scp('./dist/', { // 本地打包文件的位置 + "host": '172.16.3.19', // IP地址 + "port": '22', // 服务器端口 + "username": 'root', // 用户名 + "password": 'Huawei@123', // 密码 + "path": '/home/workplace/im/hd-glasses-app' // 项目路径 +}, err =>{ + spinner.stop(); + if (!err) { + console.log(chalk.green("服务器部署完毕。")) + } else { + console.log("err", err) + } +}) diff --git a/hd-glasses-app/package-lock.json b/hd-glasses-app/package-lock.json index c775cc2..16aa955 100644 --- a/hd-glasses-app/package-lock.json +++ b/hd-glasses-app/package-lock.json @@ -39,6 +39,19 @@ "requires": { "@babel/highlight": "^7.22.13", "chalk": "^2.4.2" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } } }, "@babel/compat-data": { @@ -334,6 +347,19 @@ "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", "js-tokens": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } } }, "@babel/parser": { @@ -2038,29 +2064,6 @@ "webpack-merge": "^5.7.3", "webpack-virtual-modules": "^0.4.2", "whatwg-fetch": "^3.6.2" - }, - "dependencies": { - "@vue/vue-loader-v15": { - "version": "npm:vue-loader@15.10.2", - "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-15.10.2.tgz", - "integrity": "sha512-ndeSe/8KQc/nlA7TJ+OBhv2qalmj1s+uBs7yHDRFaAXscFTApBzY9F1jES3bautmgWjDlDct0fw8rPuySDLwxw==", - "dev": true, - "requires": { - "@vue/component-compiler-utils": "^3.1.0", - "hash-sum": "^1.0.2", - "loader-utils": "^1.1.0", - "vue-hot-reload-api": "^2.3.0", - "vue-style-loader": "^4.1.0" - }, - "dependencies": { - "hash-sum": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz", - "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", - "dev": true - } - } - } } }, "@vue/cli-shared-utils": { @@ -2092,6 +2095,27 @@ "color-convert": "^2.0.1" } }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", @@ -2102,6 +2126,15 @@ "supports-color": "^7.1.0" } }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", @@ -2123,6 +2156,28 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", @@ -2132,6 +2187,33 @@ "yallist": "^4.0.0" } }, + "ora": { + "version": "5.4.1", + "resolved": "https://registry.npmmirror.com/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "requires": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + } + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, "semver": { "version": "7.5.4", "resolved": "https://registry.npmmirror.com/semver/-/semver-7.5.4.tgz", @@ -2225,6 +2307,27 @@ } } }, + "@vue/vue-loader-v15": { + "version": "npm:vue-loader@15.11.1", + "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-15.11.1.tgz", + "integrity": "sha512-0iw4VchYLePqJfJu9s62ACWUXeSqM30SQqlIftbYWM3C+jpPcEHKSPUZBLjSF9au4HTHQ/naF6OGnO3Q/qGR3Q==", + "dev": true, + "requires": { + "@vue/component-compiler-utils": "^3.1.0", + "hash-sum": "^1.0.2", + "loader-utils": "^1.1.0", + "vue-hot-reload-api": "^2.3.0", + "vue-style-loader": "^4.1.0" + }, + "dependencies": { + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true + } + } + }, "@vue/web-component-wrapper": { "version": "1.3.0", "resolved": "https://registry.npmmirror.com/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz", @@ -2502,14 +2605,12 @@ "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -2557,6 +2658,14 @@ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmmirror.com/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, "astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/astral-regex/-/astral-regex-2.0.0.tgz", @@ -2680,8 +2789,7 @@ "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "base64-js": { "version": "1.5.1", @@ -2707,17 +2815,6 @@ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, "bluebird": { "version": "3.7.2", "resolved": "https://registry.npmmirror.com/bluebird/-/bluebird-3.7.2.tgz", @@ -2789,7 +2886,6 @@ "version": "1.1.11", "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2816,16 +2912,6 @@ "update-browserslist-db": "^1.0.13" } }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz", @@ -2895,14 +2981,48 @@ "dev": true }, "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } } }, "chokidar": { @@ -2957,7 +3077,6 @@ "version": "3.1.0", "resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, "requires": { "restore-cursor": "^3.1.0" } @@ -3030,8 +3149,7 @@ "cli-spinners": { "version": "2.9.1", "resolved": "https://registry.npmmirror.com/cli-spinners/-/cli-spinners-2.9.1.tgz", - "integrity": "sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==", - "dev": true + "integrity": "sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==" }, "clipboardy": { "version": "2.3.0", @@ -3058,8 +3176,7 @@ "clone": { "version": "1.0.4", "resolved": "https://registry.npmmirror.com/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" }, "clone-deep": { "version": "4.0.1", @@ -3087,7 +3204,6 @@ "version": "1.9.3", "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "requires": { "color-name": "1.1.3" } @@ -3095,8 +3211,7 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "colord": { "version": "2.9.3", @@ -3180,8 +3295,7 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "connect-history-api-fallback": { "version": "2.0.0", @@ -3283,8 +3397,7 @@ "core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "cosmiconfig": { "version": "7.1.0", @@ -3670,7 +3783,6 @@ "version": "1.0.4", "resolved": "https://registry.npmmirror.com/defaults/-/defaults-1.0.4.tgz", "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, "requires": { "clone": "^1.0.2" } @@ -3965,8 +4077,7 @@ "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" }, "eslint": { "version": "7.32.0", @@ -4734,8 +4845,7 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "fsevents": { "version": "2.3.3", @@ -4907,8 +5017,7 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, "has-property-descriptors": { "version": "1.0.0", @@ -5158,7 +5267,6 @@ "version": "1.0.6", "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -5167,8 +5275,7 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ipaddr.js": { "version": "2.1.0", @@ -5248,8 +5355,7 @@ "is-interactive": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" }, "is-number": { "version": "7.0.0", @@ -5275,12 +5381,6 @@ "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "dev": true }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, "is-what": { "version": "3.14.1", "resolved": "https://registry.npmmirror.com/is-what/-/is-what-3.14.1.tgz", @@ -5674,62 +5774,21 @@ "dev": true }, "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmmirror.com/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "chalk": "^2.4.2" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "version": "2.4.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } } } @@ -5934,8 +5993,7 @@ "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" }, "mini-css-extract-plugin": { "version": "2.7.6", @@ -5997,7 +6055,6 @@ "version": "3.1.2", "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -6061,6 +6118,11 @@ "thunky": "^1.0.2" } }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmmirror.com/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, "mz": { "version": "2.7.0", "resolved": "https://registry.npmmirror.com/mz/-/mz-2.7.0.tgz", @@ -6291,7 +6353,6 @@ "version": "1.4.0", "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "requires": { "wrappy": "1" } @@ -6300,7 +6361,6 @@ "version": "5.1.2", "resolved": "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, "requires": { "mimic-fn": "^2.1.0" } @@ -6337,71 +6397,18 @@ } }, "ora": { - "version": "5.4.1", - "resolved": "https://registry.npmmirror.com/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/ora/-/ora-4.1.1.tgz", + "integrity": "sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==", "requires": { - "bl": "^4.1.0", - "chalk": "^4.1.0", + "chalk": "^3.0.0", "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", + "cli-spinners": "^2.2.0", "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", + "log-symbols": "^3.0.0", + "mute-stream": "0.0.8", "strip-ansi": "^6.0.0", "wcwidth": "^1.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "p-finally": { @@ -6538,8 +6545,7 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" }, "path-key": { "version": "2.0.1", @@ -7131,6 +7137,19 @@ "chalk": "^2.1.0", "figures": "^2.0.0", "log-update": "^2.3.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } } }, "protocol-buffers-schema": { @@ -7563,7 +7582,6 @@ "version": "3.1.0", "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, "requires": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -7627,6 +7645,42 @@ "ajv-keywords": "^3.5.2" } }, + "scp2": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/scp2/-/scp2-0.5.0.tgz", + "integrity": "sha512-HzPWuOHM/qVjVYhjmgfBKyUXQsI+9+SdI5l+5E0S98bUHirf1NoTynfrAPb0kr0oJKg/JFdFSlZwq7FnqLttvw==", + "requires": { + "async": "~0.9.0", + "glob": "~7.0.3", + "lodash": "~4.11.1", + "ssh2": "~0.4.10" + }, + "dependencies": { + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmmirror.com/async/-/async-0.9.2.tgz", + "integrity": "sha512-l6ToIJIotphWahxxHyzK9bnLR6kM4jJIIgLShZeqLY7iboHoGkdgFl7W2/Ivi4SkMJYGKqW8vSuk0uKUj6qsSw==" + }, + "glob": { + "version": "7.0.6", + "resolved": "https://registry.npmmirror.com/glob/-/glob-7.0.6.tgz", + "integrity": "sha512-f8c0rE8JiCxpa52kWPAOa3ZaYEnzofDzCQLCn3Vdk0Z5OVLq3BsRFJI4S4ykpeVW6QMGBUkMeUpoEgWnMTnw5Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "lodash": { + "version": "4.11.2", + "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.11.2.tgz", + "integrity": "sha512-kzYAjjUS0vKRLVcNZgK2k7NJOT5cQoFO3w8ddED6mDBdgu3AIL9xhAktXJ5Dm6GD1x+eqqyu1wKAzEt8Uq77NQ==" + } + } + }, "select-hose": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/select-hose/-/select-hose-2.0.0.tgz", @@ -7833,8 +7887,7 @@ "signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "sirv": { "version": "2.0.3", @@ -8005,6 +8058,71 @@ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, + "ssh2": { + "version": "0.4.15", + "resolved": "https://registry.npmmirror.com/ssh2/-/ssh2-0.4.15.tgz", + "integrity": "sha512-/KEtwbNly4LtP92bBfgY4RCj8YAvKaXg89nLaCINNMu1X5d++W5DOZz+yX2xwjlSmdw8we7AC9LYnAzBkA4OwA==", + "requires": { + "readable-stream": "~1.0.0", + "ssh2-streams": "~0.0.22" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmmirror.com/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + } + } + }, + "ssh2-streams": { + "version": "0.0.23", + "resolved": "https://registry.npmmirror.com/ssh2-streams/-/ssh2-streams-0.0.23.tgz", + "integrity": "sha512-llhegJ0WOuEZQoWvh+ZB/ZQpJNjuDVPVAh+UjIsi0YLM7GeKPX7xMnh5LJtjOBAChumuUg7hNfIUfKjrxfNNYg==", + "requires": { + "asn1": "~0.2.0", + "readable-stream": "~1.0.0", + "streamsearch": "~0.1.2" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmmirror.com/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + } + } + }, "ssr-window": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/ssr-window/-/ssr-window-2.0.0.tgz", @@ -8037,6 +8155,11 @@ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true }, + "streamsearch": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/streamsearch/-/streamsearch-0.1.2.tgz", + "integrity": "sha512-jos8u++JKm0ARcSUTAZXOVC0mSox7Bhn6sBgty73P1f3JGf7yG2clTbBNHUdde/kdvP2FESam+vM6l8jBrNxHA==" + }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", @@ -8061,7 +8184,6 @@ "version": "6.0.1", "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -8104,7 +8226,6 @@ "version": "5.5.0", "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -8715,7 +8836,6 @@ "version": "1.0.1", "resolved": "https://registry.npmmirror.com/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, "requires": { "defaults": "^1.0.3" } @@ -9074,8 +9194,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "ws": { "version": "7.5.9", diff --git a/hd-glasses-app/package.json b/hd-glasses-app/package.json index 7e3e7c3..5022337 100644 --- a/hd-glasses-app/package.json +++ b/hd-glasses-app/package.json @@ -6,13 +6,16 @@ "local-server": "vue-cli-service serve --mode local", "serve": "vue-cli-service serve --mode dev", "prod-serve": "vue-cli-service serve --mode hd", - "build:hd": "vue-cli-service build --mode hd", + "build:hd": "vue-cli-service build --mode hd && node deployHD.js", "build:online": "vue-cli-service build --mode dev", "lint": "vue-cli-service lint" }, "dependencies": { "amfe-flexible": "^2.2.1", "axios": "^1.5.1", + "scp2": "^0.5.0", + "ora": "^4.0.0", + "chalk": "^3.0.0", "core-js": "^3.8.3", "dayjs": "^1.11.10", "less": "^4.2.0", diff --git a/hd-glasses-app/public/srs/srs.sdk.js b/hd-glasses-app/public/srs/srs.sdk.js index a457ca6..ebe04fb 100644 --- a/hd-glasses-app/public/srs/srs.sdk.js +++ b/hd-glasses-app/public/srs/srs.sdk.js @@ -28,18 +28,25 @@ function SrsRtcPublisherAsync() { var self = {}; - self.cameraIndex=0 + self.cameraIndex = 0 self.cameraDevices = [] - self.url="" + self.url = "" + + self.turn = { + iceServers: [{ + urls: 'turns:172.16.3.19:3478', 'credential': 'huashiai', + 'username': 'huashiai' + }] + }; // https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia self.constraints = { audio: true, video: { - deviceId:{ - exact:"136e115ef37b7ec8361207a61d42cd39818381aa0e99728e35eb9746bedce6b4" + deviceId: { + exact: "136e115ef37b7ec8361207a61d42cd39818381aa0e99728e35eb9746bedce6b4" }, width: {ideal: 320, max: 576} } @@ -74,15 +81,15 @@ function SrsRtcPublisherAsync() { console.log('navigator.getUserMedia error: ', error); } - self.changeCamera = async function(){ + self.changeCamera = async function () { // console.log('navigator.getUserMedia') // console.log(self.cameraDevices) - self.cameraIndex=self.cameraIndex+1==self.cameraDevices.length?0:self.cameraIndex+1 - let deviceId={ - exact:"" + self.cameraIndex = self.cameraIndex + 1 == self.cameraDevices.length ? 0 : self.cameraIndex + 1 + let deviceId = { + exact: "" } - deviceId.exact=self.cameraDevices[self.cameraIndex].deviceId - self.constraints.video.deviceId=deviceId + deviceId.exact = self.cameraDevices[self.cameraIndex].deviceId + self.constraints.video.deviceId = deviceId self.publish(self.url) @@ -110,16 +117,15 @@ function SrsRtcPublisherAsync() { // or any other information, will pass-by in the query: // webrtc://r.ossrs.net/live/livestream?vhost=xxx // webrtc://r.ossrs.net/live/livestream?token=xxx - self.publish = async function (url,constraints={}) { + self.publish = async function (url, constraints = {}) { - self.url=url; + self.url = url; var conf = self.__internal.prepareUrl(url); self.pc.addTransceiver("audio", {direction: "sendonly"}); self.pc.addTransceiver("video", {direction: "sendonly"}); - var stream = await navigator.mediaDevices.getUserMedia(constraints); // @see https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/addStream#Migrating_to_addTrack @@ -319,7 +325,7 @@ function SrsRtcPublisherAsync() { } }; - self.pc = new RTCPeerConnection(null); + self.pc = new RTCPeerConnection(self.turn); // To keep api consistent between player and publisher. // @see https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/addStream#Migrating_to_addTrack diff --git a/hd-glasses-app/src/pages/call_room.vue b/hd-glasses-app/src/pages/call_room.vue index 5300b80..0bce2c0 100644 --- a/hd-glasses-app/src/pages/call_room.vue +++ b/hd-glasses-app/src/pages/call_room.vue @@ -46,8 +46,8 @@ import axios from "axios"; import Swiper from 'swiper'; // 注意引入的是Swiper import 'swiper/css/swiper.min.css' // 注意这里的引入 import {Notify, Dialog} from 'vant'; - -import {getStatisFileUrl} from '../utils/publicFun' +import service from "@/utils/service"; +import {getStatisFileUrl, getUrlParam} from '../utils/publicFun' /* eslint-disable */ export default { @@ -93,21 +93,30 @@ export default { console.log(location.href) console.log(location.href) - this.isPublish = this.$route.query.isPublish; - this.isPlayer = this.$route.query.isPlayer; - this.uid = this.$route.query.uid; - this.roomId = this.$route.query.room; - this.inviteName = this.$route.query.inviteName || ''; - this.topVideo = this.uid; - this.showConfirmDialog = this.$route.query.showConfirmDialog; - this.showInviteConfirmDialog = this.$route.query.showInviteConfirmDialog; - + this.isPublish = getUrlParam("isPublish"); + this.isPlayer = getUrlParam("isPlayer"); + this.uid = getUrlParam("uid"); + this.uname = getUrlParam("uname"); + this.roomId = getUrlParam("room"); + this.inviteName = getUrlParam("inviteName"); + console.log("this.inviteName" + this.inviteName) + this.topVideo = getUrlParam("uid"); + this.showConfirmDialog = getUrlParam("showConfirmDialog"); + this.showInviteConfirmDialog = getUrlParam("showInviteConfirmDialog"); this.voiceImg = getStatisFileUrl("/media/voice_open.png") this.cameraImg = getStatisFileUrl("/media/camera_open.png") this.switchCameraImg = getStatisFileUrl("/media/switch.png") this.callDwonImg = getStatisFileUrl("/media/call_down.png") + if (getUrlParam("hasVideo") != 1) { + // hasVideo + this.constraints.video = false + this.isCloseCamera = true + this.cameraImg = getStatisFileUrl("/media/camera_close.png") + + } + this.token = this.$route.query.token || ""; if (this.token > 10) { localStorage.setItem("hd_token", this.token) @@ -130,12 +139,17 @@ export default { Dialog.confirm({ title: '提示', message: `确认是否发起视频聊天?`, + }).then(() => { + console.log("确认") + try { + this.init(); + } catch (e) { + console.log(e) + } + // on confirm }) - .then(() => { - this.init(); - // on confirm - }) .catch(() => { + console.log("取消") window.history.go(-1); // on cancel }); @@ -190,6 +204,7 @@ export default { this.beginPublish() }, closeCamera() { + this.constraints.video = false; //如果视频是开启状态 if (!this.isCloseCamera) { @@ -198,7 +213,7 @@ export default { this.cameraImg = getStatisFileUrl("/media/camera_close.png") } else { let deviceId = { - exact: "" + exact: this.cameraDevices[this.cameraIndex].deviceId } deviceId.exact = this.cameraDevices[this.cameraIndex].deviceId this.constraints.video = {} @@ -206,6 +221,8 @@ export default { this.isCloseCamera = false this.cameraImg = getStatisFileUrl("/media/camera_open.png") } + console.log(this.constraints) + // return; this.beginPublish() }, switchCamera() { @@ -327,7 +344,7 @@ export default { video.onloadedmetadata = function (e) { if (publishId == _this.uid) video.volume = 0 - video.play(); + video.play(); }; // $('#rtc_media_player').prop('srcObject', sdk.stream); @@ -444,14 +461,40 @@ export default { }, videoDownAction() { - location.href = "uniwebview://action?function=restartCamera"; - this.publishSdk.close(); - if (this.showConfirmDialog == 1) { - console.log("挂断视频") - location.href = "uniwebview://action?function=refuseVideoInvite"; - } else { - window.history.go(-1); + const roomInfo = { + roomId: this.roomId } + + console.log("============videoDownAction") + console.log("============videoDownAction") + console.log("============videoDownAction") + + service.post(`/api/im/app/wsMsg`, { + msgType: "10000", + msgId: JSON.stringify(roomInfo), + cmd: "hangUp", + msgTxt: this.uname || "" + }).then((res) => { + if (res.status == 200) { + + } + }) + + try { + // location.href = "uniwebview://action?function=restartCamera"; + // location.href = "uniwebview://action?function=refuseVideoInvite"; + // + // this.publishSdk.close(); + // if (this.showConfirmDialog == 1) { + // console.log("挂断视频") + // location.href = "uniwebview://action?function=refuseVideoInvite"; + // } else { + // window.history.go(-1); + // } + } catch (e) { + console.log(e) + } + } } } diff --git a/hd-glasses-app/src/pages/hd_map.vue b/hd-glasses-app/src/pages/hd_map.vue index 3ebf9f5..f173465 100644 --- a/hd-glasses-app/src/pages/hd_map.vue +++ b/hd-glasses-app/src/pages/hd_map.vue @@ -59,7 +59,7 @@ import * as interaction from 'ol/interaction'; // 交互 import {OL as ol} from "plot-ol/plottingol"; import GeoJSON from 'ol/format/GeoJSON' import service from "@/utils/service"; -import {appInit, getStatisFileUrl} from "../utils/publicFun"; +import {appInit, getStatisFileUrl, getUrlParam} from "../utils/publicFun"; export default { @@ -131,12 +131,11 @@ export default { this.page = this.$route.query.page; this.pageType = this.$route.query.type; - this.token = this.$route.query.token || ""; - if (this.token > 10) { + this.token = getUrlParam("token") + if (this.token !=null) { localStorage.setItem("hd_token", this.token) } - setInterval(() => { let hd_gps_location = localStorage.getItem("hd_gps_location") if (hd_gps_location) { @@ -580,6 +579,7 @@ export default { pageNo: 1, pageSize: 50 } + }).then((res) => { if (res.status == 200) { this.map.removeLayer(this.equipmentLayer) @@ -739,11 +739,19 @@ export default { // anchor: [0.5, 0.5], scale: 0.4, }), + text: new Text({ + testAlign: 'center', + text: [record.equipmentName, 'bold 16px sans-serif', '\n',''], + font: 'bold 20px 微软雅黑', + fill: new Fill({ + color: 'rgb(155, 155, 155)', + }), + offsetY: 36 + }) }) ); } - if (record.isOnline == "true") { // 未接受告警数量为0,全部都接受 绿色 if(alarmNum==0){ @@ -755,6 +763,14 @@ export default { // anchor: [0.5, 0.5], scale: 0.4, }), + text: new Text({ + testAlign: 'center', + text: [record.equipmentName, 'bold 16px sans-serif', '\n',''], + font: 'bold 20px 微软雅黑', + fill: new Fill({ + color: 'rgb(22, 206, 129)', + }) + }) }) ); } @@ -769,10 +785,10 @@ export default { }), text:new Text({ testAlign: 'center', - text: `${alarmNum}条告警未接受`, + text: [record.equipmentName, 'bold 16px sans-serif', '\n','',`${alarmNum}条告警未接受`, 'bold 16px sans-serif',], font: 'bold 16px 微软雅黑', fill: new Fill({ - color: '#369FFF', + color: 'rgb(54, 159, 255)', }), // offsetX: 40, offsetY: 26 diff --git a/hd-glasses-app/src/pages/hd_show_patrolTmp_history.vue b/hd-glasses-app/src/pages/hd_show_patrolTmp_history.vue index f07cf4c..cd4ddf0 100644 --- a/hd-glasses-app/src/pages/hd_show_patrolTmp_history.vue +++ b/hd-glasses-app/src/pages/hd_show_patrolTmp_history.vue @@ -158,8 +158,14 @@ export default { this.moveUserId = this.$route.query.uerId||getUrlParam("uerId"); this.workOrderNo = this.$route.query.workOrderNo||getUrlParam("workOrderNo"); - this.token = this.$route.query.token ||getUrlParam("page"); - localStorage.setItem("hd_token", this.token) + if(this.token!=null){ + if (this.token.length > 16) { + console.log("获取到token") + localStorage.setItem("hd_token", this.token) + }else { + console.log("未获取到token") + } + } setInterval(() => { diff --git a/hd-glasses-app/src/pages/hd_show_patrol_history.vue b/hd-glasses-app/src/pages/hd_show_patrol_history.vue index b6d6b02..bcc4945 100644 --- a/hd-glasses-app/src/pages/hd_show_patrol_history.vue +++ b/hd-glasses-app/src/pages/hd_show_patrol_history.vue @@ -177,8 +177,8 @@ export default { this.token = getUrlParam("token") - if(this.token){ - if (this.token.length > 10) { + if(this.token!=null){ + if (this.token.length > 16) { console.log("获取到token") localStorage.setItem("hd_token", this.token) }else { diff --git a/hd-glasses-app/src/utils/publicFun.js b/hd-glasses-app/src/utils/publicFun.js index 8d180e9..40b314c 100644 --- a/hd-glasses-app/src/utils/publicFun.js +++ b/hd-glasses-app/src/utils/publicFun.js @@ -17,11 +17,10 @@ export function getUrlParam(name) { if (search) { var r = search.substr(0).match(reg); if (r !== null) { - return unescape(r[2]); + return decodeURIComponent(r[2]); } return null; } else return null; - } diff --git a/hs-im-server/build/im-service-1.0.0-SNAPSHOT.jar b/hs-im-server/build/im-service-1.0.0-SNAPSHOT.jar index 27fdab7ab88e3be95da192fa3e862b6c5c91907d..c21291e7c1dfdc3203040bdf66f16b71126f393c 100644 GIT binary patch delta 19897 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 delta 18611 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 E1D+}TA^-pY diff --git a/hs-im-server/im-service/src/main/java/com/lld/im/service/file/FileController.java b/hs-im-server/im-service/src/main/java/com/lld/im/service/file/FileController.java index 8c40c5d..14de227 100644 --- a/hs-im-server/im-service/src/main/java/com/lld/im/service/file/FileController.java +++ b/hs-im-server/im-service/src/main/java/com/lld/im/service/file/FileController.java @@ -30,7 +30,13 @@ public class FileController { @PostMapping("/upload") public ResponseVO PostMapping(@RequestParam("file") MultipartFile file) { - final String upload = MinioUtil.upload(file, "/test"); + String upload = MinioUtil.upload(file, "/test"); + log.info("====================Upload=================="); + log.info("====================Upload=================="); + log.info("====================Upload=================="); + + upload = upload.replaceAll("http://172.16.2.1:9000","https://172.16.2.3:19443"); + return ResponseVO.successResponse(upload); } diff --git a/im-uniapp/App.vue b/im-uniapp/App.vue index 3fa5df6..48374f2 100644 --- a/im-uniapp/App.vue +++ b/im-uniapp/App.vue @@ -15,107 +15,29 @@ export default { onLaunch: function() { localStorage.setItem("appId",10000) + appInit(500).then((res)=>{ console.log("获取到token,创建长链接") this.$store.dispatch('getAddressList'); setTimeout(()=>{ this.$socketTask.connectSocket() - },2500) + uni.setStorageSync("initReady",1) + },1000) }).then((error)=>{ console.log("未获取到IM的token") + console.log(error) }) - // #ifdef H5 - console.log( - `%c 考拉Team ${name} %c v${version} `, - 'background:#35495e ; padding: 1px; border-radius: 3px 0 0 3px; color: #fff', - 'background:#007aff ;padding: 1px; border-radius: 0 3px 3px 0; color: #fff; font-weight: bold;' - ) + console.log(consoleImgs.fz) // todo 下列两行 uni.setStorageSync('device', 'H5'); uni.setStorageSync('version', versionName); - // #endif - console.log('App Launch') - let token= uni.getStorageSync('imUserSign'); - if (!token) { - //不存在则跳转至登录页 - // #ifdef APP-PLUS - plus.navigator.closeSplashscreen(); - // #endif - } else { - // #ifdef H5 - this.$socketTask.connectSocket() - // #endif - this.$store.dispatch('get_UserInfo').then(res=>{ - // #ifdef APP-PLUS - var nickName=res.nickName - var portrait=res.portrait - this.$http.request({ - url: '/trtc/getSign', - success: (res) => { - var sdkAppID=res.data.data.appId - var userID=res.data.data.userId - var userSig=res.data.data.sign - TUICalling.login({//登录音视频 - sdkAppID: sdkAppID, - userID: userID, - userSig: userSig - },(res) => { - console.log('音视频登录成功') - TUICalling.setUserNickname({ - nickName: nickName - }) - TUICalling.setUserAvatar({ - avatar: portrait - }) - plus.io.requestFileSystem(plus.io.PRIVATE_WWW, function(fs) { - fs.root.getFile('/static/longcall.mp3', { - create: false - }, function(fileEntry) { - fileEntry.file(function(file) { - TUICalling.setCallingBell({ - ringtone: file.fullPath - },(res) => { - console.log(JSON.stringify(res)) - }) - }); - }); - }); - - }) - } - }); - var nowCid=plus.push.getClientInfo().clientid - this.$http.request({ - url: '/my/bindCid/'+nowCid, - success: (res) => { - console.log('新cid'+nowCid) - uni.setStorageSync('cid', nowCid); - } - }); - // #endif - }) - uni.reLaunch({ - url: "wx/tabbar1/index", - }).then(res=>{ - // #ifdef APP-PLUS - plus.navigator.closeSplashscreen(); - // #endif - }) - } - // #ifdef APP-PLUS - - uni.onNetworkStatusChange( (res)=> { - if(res.isConnected){ - this.$store.dispatch('get_UserInfo') - } - }); - // #endif }, onShow: function() { console.log('App Show') + uni.getStorage({ key: 'call', success: (res) => { diff --git a/im-uniapp/common/config.js b/im-uniapp/common/config.js index 097202b..82c9d00 100644 --- a/im-uniapp/common/config.js +++ b/im-uniapp/common/config.js @@ -11,6 +11,7 @@ export default class config{ } } } + static getBaseApiUrl(){ //return process.env.NODE_ENV === 'development' ? 'http://119.45.242.222:8989' :'http://172.16.2.3:8989'; return process.env.NODE_ENV === 'development' ? 'http://119.45.242.222:8989' :'/base_api'; @@ -22,14 +23,14 @@ export default class config{ static getImAppId(){ return 10000; } - static getVideoRoomUrl(room,userid,isPublish=0,isPlayer=1){ + static getVideoRoomUrl(room,userid,isPublish=0,isPlayer=1,hasVideo=1){ if(process.env.NODE_ENV === 'development' ){ - return `http://localhost:8080/hd-glasses-app/#/call_room?showInviteConfirmDialog=1&isPublish=${isPublish}&isPlayer=${isPlayer}&uid=${userid}&room=${room}` + return `http://localhost:8080/hd-glasses-app/#/call_room?showInviteConfirmDialog=1&isPublish=${isPublish}&isPlayer=${isPlayer}&uid=${userid}&room=${room}&hasVideo=${hasVideo}` }else{ if(this.prod=="online"){ - return `https://119.45.242.222/hd-glasses-app/#/call_room?showInviteConfirmDialog=1&isPublish=${isPublish}&isPlayer=${isPlayer}&uid=${userid}&room=${room}` + return `https://119.45.242.222/hd-glasses-app/#/call_room?showInviteConfirmDialog=1&isPublish=${isPublish}&isPlayer=${isPlayer}&uid=${userid}&room=${room}&hasVideo=${hasVideo}` }else{ - return `https://172.16.3.19/hd-glasses-app/#/call_room?showInviteConfirmDialog=1&isPublish=${isPublish}&isPlayer=${isPlayer}&uid=${userid}&room=${room}` + return `https://172.16.3.19/hd-glasses-app/#/call_room?showInviteConfirmDialog=1&isPublish=${isPublish}&isPlayer=${isPlayer}&uid=${userid}&room=${room}&hasVideo=${hasVideo}` } } } diff --git a/im-uniapp/common/socketTask.js b/im-uniapp/common/socketTask.js index 635ab64..7e243b2 100644 --- a/im-uniapp/common/socketTask.js +++ b/im-uniapp/common/socketTask.js @@ -73,6 +73,7 @@ export default { const userId = uni.getStorageSync("userId") + const imUserSign = uni.getStorageSync("imUserSign") var listeners = {}; @@ -95,6 +96,16 @@ export default { console.log(this.socketTask) console.log('sdk 成功连接的回调, 可以使用 sdk 请求数据了.'); + + + sdk.getSingleUserInfo(userId).then(res=>{ + console.log("获取到自己的用户信息") + console.log(res) + if(res.code==200){ + uni.setStorageSync('userInfo', res.data); + } + }) + // sdk.getAllFriend().then(res => { // console.warn(res) // }) @@ -106,9 +117,7 @@ export default { console.warn(res) }) - return uni.switchTab({ - url: "/pages/tabbar/index/index" - }) + } else { console.log('sdk 初始化失败.'); } diff --git a/im-uniapp/common/utils.js b/im-uniapp/common/utils.js index b28f111..ad7ee42 100644 --- a/im-uniapp/common/utils.js +++ b/im-uniapp/common/utils.js @@ -1,22 +1,3 @@ -/** - * getUrlKey 截取地址栏参数 - * @param value - * @returns {String} - */ -export function getUrlParam(name) { - var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)'); - let url = window.location.href.split('#')[0]; - let search = url.split('?')[1]; - console.log(search); - if (search) { - var r = search.substr(0).match(reg); - if (r !== null) { - return unescape(r[2]); - } - return null; - } else return null; - -} export function appInit(ms) { return new Promise((resolve, reject) => { @@ -26,6 +7,7 @@ export function appInit(ms) { var hd_userId = uni.getStorageSync("hd_userid") if(hd_userId){ uni.setStorageSync("userId",hd_userId) + }else{ console.log("============未获取到hd_userid") } @@ -46,9 +28,29 @@ export function appInit(ms) { resolve("ok") } - } + }else{ + uni.setStorageSync("initReady",null) + } }, ms); }) } +/** + * getUrlKey 截取地址栏参数 + * @param value + * @returns {String} + */ +export function getUrlParam(name) { + var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)'); + let url = window.location.href + let search = url.split('?')[1]; + console.log(search); + if (search) { + var r = search.substr(0).match(reg); + if (r !== null) { + return unescape(r[2]); + } + return null; + } else return null; +} \ No newline at end of file diff --git a/im-uniapp/wx/chatWindow/index.vue b/im-uniapp/wx/chatWindow/index.vue index 00e60e1..04fd82d 100644 --- a/im-uniapp/wx/chatWindow/index.vue +++ b/im-uniapp/wx/chatWindow/index.vue @@ -436,56 +436,74 @@ } }); }, - sendVideoCall() { + sendVideoCall(hasVideo = 1) { //发起视频 uni.showLoading({ - title: '发起视频通话' + title: '发起通话' }); - var formdata = { - userId: this.talkTo.userId, - msgType: 'TRTC_VIDEO_START', - content: 'TRTC_VIDEO_START' - }; - // this.sendMsg(formdata,formdata.msgType) + var formdata = null; - const userId=localStorage.getItem("userId") - - const roomId=userId - - const roomInfo={ - roomId:userId,//后面改成发起人的手机号或者id - roomName:`${userId}发起的视频聊天`, - creatorId:userId, - creatorName:userId, - publishId:userId, - publishName:userId, - isOver:0, - webrtcUrl:config.getSRSUrl()+`/${roomId}/${userId}`, - type:"webrtc", - offline:0, - invitedUserList:[this.talkTo.userId] + if (hasVideo == 1) { + formdata = { + userId: this.talkTo.userId, + msgType: 'TRTC_VIDEO_START', + content: 'TRTC_VIDEO_START' + } + } else if (hasVideo == 0) { + formdata = { + userId: this.talkTo.userId, + msgType: 'TRTC_VOICE_START', + content: 'TRTC_VOICE_START' + } } + + + // this.sendMsg(formdata,formdata.msgType) + + const userId = localStorage.getItem("userId") + + const roomId = userId + + const userInfo = uni.getStorageSync("userInfo") + const roomInfo = { + roomId: userId, //后面改成发起人的手机号或者id + roomName: `${userInfo.nickName}发起的视频聊天`, + creatorId: userId, + creatorName: userInfo.nickName, + publishId: userId, + publishName: userInfo.nickName, + isOver: 0, + webrtcUrl: config.getSRSUrl() + `/${roomId}/${userId}`, + type: "webrtc", + offline: 0, + invitedUserList: [this.talkTo.userId], + hasVideo:hasVideo, + isForce:0 + } + this.$store .dispatch('createRoom', roomInfo) .then(res => { - customHttp.customHttp.post("/api/im/app/wsMsg",{ - msgType:"10000", - msgId:JSON.stringify(roomInfo), - cmd:"", - msgTxt:"" - },{ + customHttp.customHttp.post("/api/im/app/wsMsg", { + msgType: "10000", + msgId: JSON.stringify(roomInfo), + cmd: "", + msgTxt: "" + }, { dataType: 'json', - custom: {target: "znzq"} , - }).then((res1)=>{ - location.href=config.getVideoRoomUrl(roomInfo.roomId,roomInfo.creatorId,1,1) + custom: { + target: "znzq" + }, + }).then((res1) => { + location.href = config.getVideoRoomUrl(roomInfo.roomId, roomInfo.creatorId, 1, 1,hasVideo) }) }) - if(1>0){ - return false; - } - this.$http.request({ + if (1 > 0) { + return false; + } + this.$http.request({ url: '/chat/sendMsg', method: 'POST', data: JSON.stringify(formdata), @@ -540,22 +558,21 @@ this.open(); break; case '音视频': - this.sendVideoCall(); - // uni.showActionSheet({ - // itemList: ['视频通话', '语音通话'], - // success: res => { - // switch (res.tapIndex) { - // case 0: - // this.sendVideoCall(); - // break; - // case 1: - // this.sendVoiceCall(); - // break; - // default: - // break; - // } - // } - // }); + uni.showActionSheet({ + itemList: ['视频通话', '语音通话'], + success: res => { + switch (res.tapIndex) { + case 0: + this.sendVideoCall(1); + break; + case 1: + this.sendVideoCall(0); + break; + default: + break; + } + } + }); break; case '收藏': this.openpopup('popupfavorites'); @@ -703,44 +720,46 @@ function sendPhoto(filePath) { //TODO //发送图片 - customHttp.upload(config.getImApiUrl() + '/file/upload', { - params: {}, /* 会加在url上 */ - // #ifdef APP-PLUS || H5 - files: [], // 需要上传的文件列表。使用 files 时,filePath 和 name 不生效。App、H5( 2.6.15+) - // #endif - // #ifdef MP-ALIPAY - fileType: 'image/video/audio', // 仅支付宝小程序,且必填。 - // #endif - filePath: filePath, // 要上传文件资源的路径。 - // 注:如果局部custom与全局custom有同名属性,则后面的属性会覆盖前面的属性,相当于Object.assign(全局,局部) - name: 'file', // 文件对应的 key , 开发者在服务器端通过这个 key 可以获取到文件二进制内容 - // #ifdef H5 || APP-PLUS - timeout: 60000, // H5(HBuilderX 2.9.9+)、APP(HBuilderX 2.9.9+) - // #endif - header: {}, /* 会与全局header合并,如有同名属性,局部覆盖全局 */ - formData: {}, // HTTP 请求中其他额外的 form data - // 返回当前请求的task, options。请勿在此处修改options。非必填 - getTask: (task, options) => { - // task.onProgressUpdate((res) => { - // console.log('上传进度' + res.progress); - // console.log('已经上传的数据长度' + res.totalBytesSent); - // console.log('预期需要上传的数据总长度' + res.totalBytesExpectedToSend); - // - // // 测试条件,取消上传任务。 - // if (res.progress > 50) { - // uploadTask.abort(); - // } - // }); - }, - //validateStatus: (statusCode) => { // statusCode 必存在。此处示例为全局默认配置。演示,非必填选项 - // return statusCode >= 200 && statusCode < 300 - //} - }).then(res => { - // 返回的res.data 已经进行JSON.parse - }).catch(err => { - - }) - + customHttp.upload(config.getImApiUrl() + '/file/upload', { + params: {}, + /* 会加在url上 */ + // #ifdef APP-PLUS || H5 + files: [], // 需要上传的文件列表。使用 files 时,filePath 和 name 不生效。App、H5( 2.6.15+) + // #endif + // #ifdef MP-ALIPAY + fileType: 'image/video/audio', // 仅支付宝小程序,且必填。 + // #endif + filePath: filePath, // 要上传文件资源的路径。 + // 注:如果局部custom与全局custom有同名属性,则后面的属性会覆盖前面的属性,相当于Object.assign(全局,局部) + name: 'file', // 文件对应的 key , 开发者在服务器端通过这个 key 可以获取到文件二进制内容 + // #ifdef H5 || APP-PLUS + timeout: 60000, // H5(HBuilderX 2.9.9+)、APP(HBuilderX 2.9.9+) + // #endif + header: {}, + /* 会与全局header合并,如有同名属性,局部覆盖全局 */ + formData: {}, // HTTP 请求中其他额外的 form data + // 返回当前请求的task, options。请勿在此处修改options。非必填 + getTask: (task, options) => { + // task.onProgressUpdate((res) => { + // console.log('上传进度' + res.progress); + // console.log('已经上传的数据长度' + res.totalBytesSent); + // console.log('预期需要上传的数据总长度' + res.totalBytesExpectedToSend); + // + // // 测试条件,取消上传任务。 + // if (res.progress > 50) { + // uploadTask.abort(); + // } + // }); + }, + //validateStatus: (statusCode) => { // statusCode 必存在。此处示例为全局默认配置。演示,非必填选项 + // return statusCode >= 200 && statusCode < 300 + //} + }).then(res => { + // 返回的res.data 已经进行JSON.parse + }).catch(err => { + + }) + _this.$http.uploadFile({ url: config.getImApiUrl() + '/file/upload', filePath: filePath, @@ -787,8 +806,8 @@ } }, sendMsg(e, msgType) { - - + + if (!e) { return; } @@ -1078,4 +1097,4 @@ justify-content: center; align-items: center; } - + \ No newline at end of file diff --git a/im-uniapp/wx/login/index.vue b/im-uniapp/wx/login/index.vue index b3f1a16..6fc1bf5 100644 --- a/im-uniapp/wx/login/index.vue +++ b/im-uniapp/wx/login/index.vue @@ -179,6 +179,7 @@ }, loginDone(data) { uni.setStorageSync('appId', data.appId); + uni.setStorageSync('im_userId', data.id); uni.setStorageSync('userId', data.id); uni.setStorageSync('im_userCSign', data.userSign); diff --git a/im-uniapp/wx/tabbar1/index.vue b/im-uniapp/wx/tabbar1/index.vue index 949df40..49aa1a0 100644 --- a/im-uniapp/wx/tabbar1/index.vue +++ b/im-uniapp/wx/tabbar1/index.vue @@ -21,7 +21,9 @@