diff --git a/package-lock.json b/package-lock.json index 4fad924..4253b72 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,10 +8,14 @@ "name": "wetlandguard-admin", "version": "0.0.0", "dependencies": { + "@dataview/datav-vue3": "^0.0.0-test.1672506674342", "@element-plus/icons-vue": "^2.3.1", + "@kjgl77/datav-vue3": "^1.7.4", "axios": "^1.7.9", + "datav-vue3": "^1.0.0", "echarts": "^5.6.0", "element-plus": "^2.9.3", + "flv.js": "^1.6.2", "json-server": "^1.0.0-beta.3", "pinia": "^2.3.1", "vue": "^3.5.13", @@ -61,6 +65,17 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/runtime": { + "version": "7.26.9", + "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.26.9.tgz", + "integrity": "sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/types": { "version": "7.26.7", "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.26.7.tgz", @@ -83,6 +98,27 @@ "node": ">=10" } }, + "node_modules/@dataview/datav-vue3": { + "version": "0.0.0-test.1672506674342", + "resolved": "https://registry.npmmirror.com/@dataview/datav-vue3/-/datav-vue3-0.0.0-test.1672506674342.tgz", + "integrity": "sha512-d0oT/msAi592CTvWmQl0umkLpHgMwtTN2+peyo0L2GHNG7b4cKeO9meEF5o28DgFzRwOLeNQW73vKCF4JC+ihw==", + "dependencies": { + "@jiaminghi/color": "^0.1.1", + "classnames": "^2.3.2", + "lodash-es": "^4.17.21" + }, + "peerDependencies": { + "vue": ">=3.2.0" + } + }, + "node_modules/@dataview/datav-vue3/node_modules/@jiaminghi/color": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/@jiaminghi/color/-/color-0.1.1.tgz", + "integrity": "sha512-M09+Sb5HGqVim0zo+nG5gU1v+6gXT8ptr0BZR6dMGt83XmCJgnZtO8s7llTW4hLFFFM5co6geZvTekqLpSPAAQ==", + "dependencies": { + "@babel/runtime": "^7.5.5" + } + }, "node_modules/@element-plus/icons-vue": { "version": "2.3.1", "resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz", @@ -542,12 +578,102 @@ "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==", "license": "MIT" }, + "node_modules/@jiaminghi/bezier-curve": { + "version": "0.0.9", + "resolved": "https://registry.npmmirror.com/@jiaminghi/bezier-curve/-/bezier-curve-0.0.9.tgz", + "integrity": "sha512-u9xJPOEl6Dri2E9FfmJoGxYQY7vYJkURNX04Vj64tdi535tPrpkuf9Sm0lNr3QTKdHQh0DdNRsaa62FLQNQEEw==", + "dependencies": { + "@babel/runtime": "^7.5.5" + } + }, + "node_modules/@jiaminghi/c-render": { + "version": "0.4.3", + "resolved": "https://registry.npmmirror.com/@jiaminghi/c-render/-/c-render-0.4.3.tgz", + "integrity": "sha512-FJfzj5hGj7MLqqqI2D7vEzHKbQ1Ynnn7PJKgzsjXaZpJzTqs2Yw5OSeZnm6l7Qj7jyPAP53lFvEQNH4o4j6s+Q==", + "dependencies": { + "@babel/runtime": "^7.5.5", + "@jiaminghi/bezier-curve": "*", + "@jiaminghi/color": "*", + "@jiaminghi/transition": "*" + } + }, + "node_modules/@jiaminghi/charts": { + "version": "0.2.18", + "resolved": "https://registry.npmmirror.com/@jiaminghi/charts/-/charts-0.2.18.tgz", + "integrity": "sha512-K+HXaOOeWG9OOY1VG6M4mBreeeIAPhb9X+khG651AbnwEwL6G2UtcAQ8GWCq6GzhczcLwwhIhuaHqRygwHC0sA==", + "dependencies": { + "@babel/runtime": "^7.5.5", + "@jiaminghi/c-render": "^0.4.3" + } + }, + "node_modules/@jiaminghi/color": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/@jiaminghi/color/-/color-1.1.3.tgz", + "integrity": "sha512-ZY3hdorgODk4OSTbxyXBPxAxHPIVf9rPlKJyK1C1db46a50J0reFKpAvfZG8zMG3lvM60IR7Qawgcu4ZDO3+Hg==" + }, + "node_modules/@jiaminghi/transition": { + "version": "1.1.11", + "resolved": "https://registry.npmmirror.com/@jiaminghi/transition/-/transition-1.1.11.tgz", + "integrity": "sha512-owBggipoHMikDHHDW5Gc7RZYlVuvxHADiU4bxfjBVkHDAmmck+fCkm46n2JzC3j33hWvP9nSCAeh37t6stgWeg==", + "dependencies": { + "@babel/runtime": "^7.5.5" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.0", "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", "license": "MIT" }, + "node_modules/@kjgl77/datav-vue3": { + "version": "1.7.4", + "resolved": "https://registry.npmmirror.com/@kjgl77/datav-vue3/-/datav-vue3-1.7.4.tgz", + "integrity": "sha512-zYVTVKkklUxwtiNKS1qPBilm4rTW+WItfp0zVpaRAI8wgXkLSPbDR9xPq2+UcU/Jft7/DVdMfBp709E2ResuPQ==", + "dependencies": { + "@jiaminghi/c-render": "^0.4.3", + "@jiaminghi/charts": "^0.2.18", + "@jiaminghi/color": "^1.1.3", + "@vueuse/core": "^10.11.1" + } + }, + "node_modules/@kjgl77/datav-vue3/node_modules/@types/web-bluetooth": { + "version": "0.0.20", + "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", + "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==" + }, + "node_modules/@kjgl77/datav-vue3/node_modules/@vueuse/core": { + "version": "10.11.1", + "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-10.11.1.tgz", + "integrity": "sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==", + "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://registry.npmmirror.com/@vueuse/metadata/-/metadata-10.11.1.tgz", + "integrity": "sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@kjgl77/datav-vue3/node_modules/@vueuse/shared": { + "version": "10.11.1", + "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-10.11.1.tgz", + "integrity": "sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==", + "dependencies": { + "vue-demi": ">=0.14.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/@parcel/watcher": { "version": "2.5.1", "resolved": "https://registry.npmmirror.com/@parcel/watcher/-/watcher-2.5.1.tgz", @@ -1745,6 +1871,11 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" + }, "node_modules/colorette": { "version": "2.0.20", "resolved": "https://registry.npmmirror.com/colorette/-/colorette-2.0.20.tgz", @@ -1769,6 +1900,19 @@ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", "license": "MIT" }, + "node_modules/datav-vue3": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/datav-vue3/-/datav-vue3-1.0.0.tgz", + "integrity": "sha512-ehQgoAxyZHZwLtZBJ8mlEe41bOjGH816bPH0XhtjR6saVYUgt/HUslcE2M18lm0FfmTlLOcvPtvoDBlitIyehg==", + "dependencies": { + "@jiaminghi/color": "1.1.3", + "classnames": "^2.3.2", + "lodash-es": "^4.17.21" + }, + "peerDependencies": { + "vue": ">=3.2.0" + } + }, "node_modules/dayjs": { "version": "1.11.13", "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz", @@ -1877,6 +2021,11 @@ "node": ">=12.x" } }, + "node_modules/es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmmirror.com/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + }, "node_modules/esbuild": { "version": "0.24.2", "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.24.2.tgz", @@ -1956,6 +2105,15 @@ "node": ">=8" } }, + "node_modules/flv.js": { + "version": "1.6.2", + "resolved": "https://registry.npmmirror.com/flv.js/-/flv.js-1.6.2.tgz", + "integrity": "sha512-xre4gUbX1MPtgQRKj2pxJENp/RnaHaxYvy3YToVVCrSmAWUu85b9mug6pTXF6zakUjNP2lFWZ1rkSX7gxhB/2A==", + "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", @@ -2412,6 +2570,11 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, "node_modules/regexparam": { "version": "2.0.2", "resolved": "https://registry.npmmirror.com/regexparam/-/regexparam-2.0.2.tgz", @@ -2751,6 +2914,11 @@ "typescript": ">=5.0.0" } }, + "node_modules/webworkify-webpack": { + "version": "2.1.5", + "resolved": "https://registry.npmmirror.com/webworkify-webpack/-/webworkify-webpack-2.1.5.tgz", + "integrity": "sha512-2akF8FIyUvbiBBdD+RoHpoTbHMQF2HwjcxfDvgztAX5YwbZNyrtfUMgvfgFVsgDhDPVTlkbb5vyasqDHfIDPQw==" + }, "node_modules/wetlandguard-admin": { "resolved": "", "link": true diff --git a/package.json b/package.json index 4f50e9b..faf5c52 100644 --- a/package.json +++ b/package.json @@ -9,10 +9,14 @@ "preview": "vite preview" }, "dependencies": { + "@dataview/datav-vue3": "^0.0.0-test.1672506674342", "@element-plus/icons-vue": "^2.3.1", + "@kjgl77/datav-vue3": "^1.7.4", "axios": "^1.7.9", + "datav-vue3": "^1.0.0", "echarts": "^5.6.0", "element-plus": "^2.9.3", + "flv.js": "^1.6.2", "json-server": "^1.0.0-beta.3", "pinia": "^2.3.1", "vue": "^3.5.13", diff --git a/src/api/chart/index.js b/src/api/chart/index.js new file mode 100644 index 0000000..3af7330 --- /dev/null +++ b/src/api/chart/index.js @@ -0,0 +1,10 @@ +import request from '@/utils/request' + +/** + * 生成图表数据 + * @param {Object} params - 图表参数 + * @returns {Promise} 返回图表配置数据 + */ +export function generateChartData(params = {}) { + return request.post('/api/ai/chart/generate', params) +} \ No newline at end of file diff --git a/src/api/device/index.js b/src/api/device/index.js new file mode 100644 index 0000000..bbfd56b --- /dev/null +++ b/src/api/device/index.js @@ -0,0 +1,51 @@ +import request from '@/utils/request' + +/** + * 获取设备列表 + * @param {Object} params - 查询参数 + * @param {number} [params.page=1] - 页码 + * @param {number} [params.page_size=10] - 每页条数 + * @param {string} [params.device_type] - 设备类型:10000-摄像头,10001-无人机 + * @returns {Promise} 返回设备列表数据 + */ +export function getDeviceList(params = {}) { + console.log('请求参数:', params) + return request.get('/api/device/list', { + params: { + page: params.page || 1, + page_size: params.page_size || 10, + device_type: params.device_type + } + }).then(res => { + console.log('API返回数据:', res) + return res + }) +} + +/** + * 添加设备 + * @param {Object} data - 设备数据 + * @returns {Promise} 返回添加结果 + */ +export function addDevice(data) { + return request.post('/api/device/add', data) +} + +/** + * 更新设备 + * @param {string|number} id - 设备ID + * @param {Object} data - 更新数据 + * @returns {Promise} 返回更新结果 + */ +export function updateDevice(id, data) { + return request.put(`/api/device/${id}`, data) +} + +/** + * 删除设备 + * @param {string|number} id - 设备ID + * @returns {Promise} 返回删除结果 + */ +export function deleteDevice(id) { + return request.delete(`/api/device/${id}`) +} \ No newline at end of file diff --git a/src/assets/harmonyos-sound/notification_accomplished_08.wav b/src/assets/harmonyos-sound/notification_accomplished_08.wav new file mode 100644 index 0000000..b6ca0ba Binary files /dev/null and b/src/assets/harmonyos-sound/notification_accomplished_08.wav differ diff --git a/src/assets/harmonyos-sound/notification_wrong_04.wav b/src/assets/harmonyos-sound/notification_wrong_04.wav new file mode 100644 index 0000000..a43bf8d Binary files /dev/null and b/src/assets/harmonyos-sound/notification_wrong_04.wav differ diff --git a/src/layout/AdminLayout.vue b/src/layout/AdminLayout.vue index cefa5fa..b18598b 100644 --- a/src/layout/AdminLayout.vue +++ b/src/layout/AdminLayout.vue @@ -138,6 +138,16 @@ const handleLogout = () => { 安防事件 + + + 摄像头管理 + 传感器管理 + 无人机管理 + +