diff --git a/package-lock.json b/package-lock.json index f01b3c1..a38e88d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,11 +9,13 @@ "version": "0.0.1", "dependencies": { "@kjgl77/datav-vue3": "^1.7.4", + "@vueuse/core": "^13.4.0", "axios": "1.7.7", "codess": "^1.1.5", "copy-to-clipboard": "3.3.3", "cropperjs": "1.6.2", "echarts": "5.5.1", + "flv.js": "^1.6.2", "glob": "11.0.0", "mime": "4.0.4", "mitt": "3.0.1", @@ -31,6 +33,7 @@ "vuedraggable": "4.1.0" }, "devDependencies": { + "@vicons/ionicons5": "^0.13.0", "@vitejs/plugin-vue": "5.1.2", "naive-ui": "^2.42.0", "vite": "5.4.1" @@ -627,6 +630,74 @@ "@vueuse/core": "^10.11.1" } }, + "node_modules/@kjgl77/datav-vue3/node_modules/@types/web-bluetooth": { + "version": "0.0.20", + "resolved": "https://repo.huaweicloud.com/repository/npm/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", + "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==", + "license": "MIT" + }, + "node_modules/@kjgl77/datav-vue3/node_modules/@vueuse/core": { + "version": "10.11.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vueuse/core/-/core-10.11.1.tgz", + "integrity": "sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.20", + "@vueuse/metadata": "10.11.1", + "@vueuse/shared": "10.11.1", + "vue-demi": ">=0.14.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@kjgl77/datav-vue3/node_modules/@vueuse/metadata": { + "version": "10.11.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vueuse/metadata/-/metadata-10.11.1.tgz", + "integrity": "sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@kjgl77/datav-vue3/node_modules/@vueuse/shared": { + "version": "10.11.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vueuse/shared/-/shared-10.11.1.tgz", + "integrity": "sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==", + "license": "MIT", + "dependencies": { + "vue-demi": ">=0.14.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@kjgl77/datav-vue3/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://repo.huaweicloud.com/repository/npm/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -914,9 +985,16 @@ } }, "node_modules/@types/web-bluetooth": { - "version": "0.0.20", - "resolved": "https://repo.huaweicloud.com/repository/npm/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", - "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==", + "version": "0.0.21", + "resolved": "https://repo.huaweicloud.com/repository/npm/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", + "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", + "license": "MIT" + }, + "node_modules/@vicons/ionicons5": { + "version": "0.13.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vicons/ionicons5/-/ionicons5-0.13.0.tgz", + "integrity": "sha512-zvZKBPjEXKN7AXNo2Na2uy+nvuv6SP4KAMQxpKL2vfHMj0fSvuw7JZcOPCjQC3e7ayssKnaoFVAhbYcW6v41qQ==", + "dev": true, "license": "MIT" }, "node_modules/@vitejs/plugin-vue": { @@ -1029,90 +1107,41 @@ "integrity": "sha512-L2MCDD8l7yC62Te5UUyPVpmexhL9ipVnYRw9CsWfm/BGRL5FwDX4a25bcJ/OJSD3+Hx+k/a8LDKcG2AFdJV3BA==" }, "node_modules/@vueuse/core": { - "version": "10.11.1", - "resolved": "https://repo.huaweicloud.com/repository/npm/@vueuse/core/-/core-10.11.1.tgz", - "integrity": "sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==", + "version": "13.4.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vueuse/core/-/core-13.4.0.tgz", + "integrity": "sha512-OnK7zW3bTq/QclEk17+vDFN3tuAm8ONb9zQUIHrYQkkFesu3WeGUx/3YzpEp+ly53IfDAT9rsYXgGW6piNZC5w==", "license": "MIT", "dependencies": { - "@types/web-bluetooth": "^0.0.20", - "@vueuse/metadata": "10.11.1", - "@vueuse/shared": "10.11.1", - "vue-demi": ">=0.14.8" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@vueuse/core/node_modules/vue-demi": { - "version": "0.14.10", - "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz", - "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", - "hasInstallScript": true, - "bin": { - "vue-demi-fix": "bin/vue-demi-fix.js", - "vue-demi-switch": "bin/vue-demi-switch.js" - }, - "engines": { - "node": ">=12" + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "13.4.0", + "@vueuse/shared": "13.4.0" }, "funding": { "url": "https://github.com/sponsors/antfu" }, "peerDependencies": { - "@vue/composition-api": "^1.0.0-rc.1", - "vue": "^3.0.0-0 || ^2.6.0" - }, - "peerDependenciesMeta": { - "@vue/composition-api": { - "optional": true - } + "vue": "^3.5.0" } }, "node_modules/@vueuse/metadata": { - "version": "10.11.1", - "resolved": "https://repo.huaweicloud.com/repository/npm/@vueuse/metadata/-/metadata-10.11.1.tgz", - "integrity": "sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==", + "version": "13.4.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vueuse/metadata/-/metadata-13.4.0.tgz", + "integrity": "sha512-CPDQ/IgOeWbqItg1c/pS+Ulum63MNbpJ4eecjFJqgD/JUCJ822zLfpw6M9HzSvL6wbzMieOtIAW/H8deQASKHg==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/antfu" } }, "node_modules/@vueuse/shared": { - "version": "10.11.1", - "resolved": "https://repo.huaweicloud.com/repository/npm/@vueuse/shared/-/shared-10.11.1.tgz", - "integrity": "sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==", + "version": "13.4.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vueuse/shared/-/shared-13.4.0.tgz", + "integrity": "sha512-+AxuKbw8R1gYy5T21V5yhadeNM7rJqb4cPaRI9DdGnnNl3uqXh+unvQ3uCaA2DjYLbNr1+l7ht/B4qEsRegX6A==", "license": "MIT", - "dependencies": { - "vue-demi": ">=0.14.8" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@vueuse/shared/node_modules/vue-demi": { - "version": "0.14.10", - "resolved": "https://repo.huaweicloud.com/repository/npm/vue-demi/-/vue-demi-0.14.10.tgz", - "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", - "hasInstallScript": true, - "license": "MIT", - "bin": { - "vue-demi-fix": "bin/vue-demi-fix.js", - "vue-demi-switch": "bin/vue-demi-switch.js" - }, - "engines": { - "node": ">=12" - }, "funding": { "url": "https://github.com/sponsors/antfu" }, "peerDependencies": { - "@vue/composition-api": "^1.0.0-rc.1", - "vue": "^3.0.0-0 || ^2.6.0" - }, - "peerDependenciesMeta": { - "@vue/composition-api": { - "optional": true - } + "vue": "^3.5.0" } }, "node_modules/acorn": { @@ -1869,6 +1898,12 @@ "node": ">= 0.4" } }, + "node_modules/es6-promise": { + "version": "4.2.8", + "resolved": "https://repo.huaweicloud.com/repository/npm/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "license": "MIT" + }, "node_modules/esbuild": { "version": "0.21.5", "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.21.5.tgz", @@ -2014,6 +2049,16 @@ "node": ">=8" } }, + "node_modules/flv.js": { + "version": "1.6.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/flv.js/-/flv.js-1.6.2.tgz", + "integrity": "sha512-xre4gUbX1MPtgQRKj2pxJENp/RnaHaxYvy3YToVVCrSmAWUu85b9mug6pTXF6zakUjNP2lFWZ1rkSX7gxhB/2A==", + "license": "Apache-2.0", + "dependencies": { + "es6-promise": "^4.2.8", + "webworkify-webpack": "^2.1.5" + } + }, "node_modules/follow-redirects": { "version": "1.15.9", "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.9.tgz", @@ -4464,6 +4509,12 @@ "resolved": "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==" }, + "node_modules/webworkify-webpack": { + "version": "2.1.5", + "resolved": "https://repo.huaweicloud.com/repository/npm/webworkify-webpack/-/webworkify-webpack-2.1.5.tgz", + "integrity": "sha512-2akF8FIyUvbiBBdD+RoHpoTbHMQF2HwjcxfDvgztAX5YwbZNyrtfUMgvfgFVsgDhDPVTlkbb5vyasqDHfIDPQw==", + "license": "MIT" + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", diff --git a/package.json b/package.json index 35af119..3c2984c 100644 --- a/package.json +++ b/package.json @@ -12,11 +12,13 @@ }, "dependencies": { "@kjgl77/datav-vue3": "^1.7.4", + "@vueuse/core": "^13.4.0", "axios": "1.7.7", "codess": "^1.1.5", "copy-to-clipboard": "3.3.3", "cropperjs": "1.6.2", "echarts": "5.5.1", + "flv.js": "^1.6.2", "glob": "11.0.0", "mime": "4.0.4", "mitt": "3.0.1", @@ -34,6 +36,7 @@ "vuedraggable": "4.1.0" }, "devDependencies": { + "@vicons/ionicons5": "^0.13.0", "@vitejs/plugin-vue": "5.1.2", "naive-ui": "^2.42.0", "vite": "5.4.1" diff --git a/src/assets/demo.png b/src/assets/demo.png new file mode 100644 index 0000000..6d5fcf0 Binary files /dev/null and b/src/assets/demo.png differ diff --git a/src/components/DialogModal/index.vue b/src/components/DialogModal/index.vue new file mode 100644 index 0000000..e781858 --- /dev/null +++ b/src/components/DialogModal/index.vue @@ -0,0 +1,73 @@ + + + + + diff --git a/src/components/FlvPlayer/index.vue b/src/components/FlvPlayer/index.vue new file mode 100644 index 0000000..53bbc3f --- /dev/null +++ b/src/components/FlvPlayer/index.vue @@ -0,0 +1,140 @@ + + + + + diff --git a/src/http/request.js b/src/http/request.js index db8b715..56a28d6 100644 --- a/src/http/request.js +++ b/src/http/request.js @@ -11,7 +11,7 @@ const timeout = 13000 //api请求超时时间 export const service = axios.create({ //可创建多个 axios实例 - baseURL: baseApiURL, //设置公共的请求前缀 + baseURL: '', //设置公共的请求前缀 timeout: timeout, //超时终止请求 }) @@ -38,10 +38,11 @@ service.interceptors.response.use( msg: '请求发生错误', }) } - const status = data.status + const status = data?.status || response.status switch (status) { case 200: - return data + // return data + return Promise.resolve(response) case 401: //表示需要重新登录 if (!modelShow) { modelShow = true diff --git a/src/store/user.js b/src/store/user.js index 21e3659..fddf613 100644 --- a/src/store/user.js +++ b/src/store/user.js @@ -1,15 +1,15 @@ /** 用户全局数据 */ -import { defineStore } from 'pinia'; -import allStorage from '@/action/storageManage'; +import { defineStore } from 'pinia' +import allStorage from '@/action/storageManage' export const userDataStore = defineStore('userDataStore', { state: () => { - const userStorage = allStorage.userStorage(); + const userStorage = allStorage.userStorage() /** 校验数据 */ - let userInfo = userStorage.value; + let userInfo = userStorage.value if (typeof userInfo !== 'object') { - userInfo = {}; + userInfo = {} } return { userInfo: userInfo || {}, //当前登录用户的基础数据 @@ -18,30 +18,30 @@ export const userDataStore = defineStore('userDataStore', { userMenuList: [], //用于展示的菜单列表,结构树形化 tagsMap: {}, // 页面标签MAP,layoutName为键名 iframeList: [], //iframe 数组,iframe也属于标签,跟标签挂钩 - }; + } }, getters: {}, actions: { setUserInfo(value) { - this.userInfo = value || {}; + this.userInfo = value || {} /** 存入缓存 */ - const userStorage = allStorage.userStorage(); - userStorage.value = value; + const userStorage = allStorage.userStorage() + userStorage.value = value }, setUserMenuConfigNameMap(value) { - this.userMenuConfigNameMap = value || {}; + this.userMenuConfigNameMap = value || {} }, setUserMenuConfigPathMap(value) { - this.userMenuConfigPathMap = value || {}; + this.userMenuConfigPathMap = value || {} }, setUserMenuList(value) { - this.userMenuList = value || []; + this.userMenuList = value || [] }, setTagsMap(value) { - this.tagsMap = value || {}; + this.tagsMap = value || {} }, setIframeList(value) { - this.iframeList = value || []; + this.iframeList = value || [] }, }, -}); +}) diff --git a/src/utils/initLogin.js b/src/utils/initLogin.js new file mode 100644 index 0000000..4e4e39b --- /dev/null +++ b/src/utils/initLogin.js @@ -0,0 +1,19 @@ +import { service } from '@/http/request' +// 初始化登录 +export const initLoginApi = (data) => { + return service.post('/third-party/login', data) +} + +// 获取设备的URL地址 +export const getDeviceUrlApi = (data) => { + return service.post('/third-party/stream/live', data) +} + +// 调整设备的摄像机视角 +export const changeDeviceCameraApi = (data) => { + return service.post('/third-party/ptz/start/turn', data) +} +// 停止设备的摄像机视角 +export const stopDeviceCameraApi = (data) => { + return service.post('/third-party/ptz/stop/turn', data) +} diff --git a/src/views/home/components/center-one.vue b/src/views/home/components/center-one.vue index 492b562..0df5df0 100644 --- a/src/views/home/components/center-one.vue +++ b/src/views/home/components/center-one.vue @@ -1,16 +1,33 @@ - + diff --git a/src/views/home/components/modal-content/inspection-task.vue b/src/views/home/components/modal-content/inspection-task.vue new file mode 100644 index 0000000..63b6db2 --- /dev/null +++ b/src/views/home/components/modal-content/inspection-task.vue @@ -0,0 +1,242 @@ + + + + + diff --git a/src/views/home/components/modal-content/preset-setting.vue b/src/views/home/components/modal-content/preset-setting.vue new file mode 100644 index 0000000..04738c0 --- /dev/null +++ b/src/views/home/components/modal-content/preset-setting.vue @@ -0,0 +1,258 @@ + + + + + diff --git a/src/views/home/components/preset-setting.vue b/src/views/home/components/preset-setting.vue new file mode 100644 index 0000000..04738c0 --- /dev/null +++ b/src/views/home/components/preset-setting.vue @@ -0,0 +1,258 @@ + + + + + diff --git a/src/views/home/components/right-one.vue b/src/views/home/components/right-one.vue index 7c55974..28c9577 100644 --- a/src/views/home/components/right-one.vue +++ b/src/views/home/components/right-one.vue @@ -39,7 +39,7 @@ > diff --git a/src/views/home/index.vue b/src/views/home/index.vue index 85a2ad8..4f74e7a 100644 --- a/src/views/home/index.vue +++ b/src/views/home/index.vue @@ -4,54 +4,56 @@ -
+
-
+
-
+
-
- +
+
-
+
-
+
-
+
-
- -
-
- -
-
- -
-
+
@@ -69,6 +71,7 @@