From 647eb16956784c5f5545e37f9fe95d994a265af3 Mon Sep 17 00:00:00 2001
From: air <30444667+sszdot@users.noreply.github.com>
Date: Fri, 13 Jun 2025 20:07:33 +0800
Subject: [PATCH] =?UTF-8?q?=E3=80=90=E7=B1=BB=20=20=E5=9E=8B=E3=80=91?=
=?UTF-8?q?=EF=BC=9Afeat=20=E3=80=90=E5=8E=9F=20=20=E5=9B=A0=E3=80=91?=
=?UTF-8?q?=EF=BC=9A=E9=9C=80=E8=A6=81=E6=A0=B9=E6=8D=AE=E7=94=A8=E6=88=B7?=
=?UTF-8?q?=E9=80=89=E6=8B=A9=E5=B1=95=E7=A4=BA=E9=A3=9E=E8=A1=8C=E6=97=B6?=
=?UTF-8?q?=E9=95=BF=E3=80=81=E9=A3=9E=E8=A1=8C=E8=B7=9D=E7=A6=BB=E3=80=81?=
=?UTF-8?q?=E6=B6=88=E8=80=97=E7=94=B5=E9=87=8F=E7=9A=84=E4=B8=8D=E5=90=8C?=
=?UTF-8?q?=E7=BB=9F=E8=AE=A1=E5=9B=BE=E8=A1=A8=20=E3=80=90=E8=BF=87=20=20?=
=?UTF-8?q?=E7=A8=8B=E3=80=91=EF=BC=9A=20-=20=E6=96=B0=E5=A2=9E=20radioCla?=
=?UTF-8?q?ss=20=E7=8A=B6=E6=80=81=E5=88=87=E6=8D=A2=E9=80=BB=E8=BE=91=20-?=
=?UTF-8?q?=20=E6=A0=B9=E6=8D=AE=E9=80=89=E6=8B=A9=E5=8A=A8=E6=80=81?=
=?UTF-8?q?=E5=A4=84=E7=90=86=20flyDataList=EF=BC=8C=E8=AE=A1=E7=AE=97?=
=?UTF-8?q?=E4=B8=8D=E5=90=8C=E7=B1=BB=E5=9E=8B=E5=AD=97=E6=AE=B5=EF=BC=88?=
=?UTF-8?q?=E5=A6=82=E6=97=B6=E9=95=BF=E3=80=81=E8=B7=9D=E7=A6=BB=E3=80=81?=
=?UTF-8?q?=E7=94=B5=E9=87=8F=EF=BC=89=20-=20=E5=8A=A8=E6=80=81=E7=94=9F?=
=?UTF-8?q?=E6=88=90=20ECharts=20dataset.source=20=E5=92=8C=20series=20?=
=?UTF-8?q?=E9=85=8D=E7=BD=AE=20-=20=E7=BB=9F=E4=B8=80=E5=A4=84=E7=90=86?=
=?UTF-8?q?=E6=97=B6=E9=97=B4=E7=B2=92=E5=BA=A6=EF=BC=88=E6=97=A5=20/=20?=
=?UTF-8?q?=E6=9C=88=20/=20=E5=B9=B4=EF=BC=89=20-=20=E4=BF=9D=E6=8C=81?=
=?UTF-8?q?=E5=9B=BE=E8=A1=A8=E5=93=8D=E5=BA=94=E5=BC=8F=E5=92=8C=E8=81=94?=
=?UTF-8?q?=E5=8A=A8=E9=A5=BC=E5=9B=BE=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
【影 响】:
用户可通过单选按钮自由切换三种维度图表
---
package-lock.json | 59 ++++
package.json | 11 +-
src/components/DateRangePicker.vue | 131 ++++++++
src/router/index.js | 11 +
src/store/modules/app.js | 12 +-
src/utils/api/table.js | 17 +
.../components/main/register/flyData.vue | 303 ++++++++++++++++++
.../layout/components/main/register/index.vue | 12 +
8 files changed, 548 insertions(+), 8 deletions(-)
create mode 100644 src/components/DateRangePicker.vue
create mode 100644 src/views/layout/components/main/register/flyData.vue
diff --git a/package-lock.json b/package-lock.json
index c3e83c8..e865e3e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11,6 +11,7 @@
"dependencies": {
"axios": "^1.9.0",
"core-js": "^3.6.5",
+ "echarts": "^5.6.0",
"element-ui": "^2.15.14",
"lodash": "^4.17.21",
"mapbox-gl": "^2.15.0",
@@ -6291,6 +6292,20 @@
"safer-buffer": "^2.1.0"
}
},
+ "node_modules/echarts": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.6.0.tgz",
+ "integrity": "sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==",
+ "dependencies": {
+ "tslib": "2.3.0",
+ "zrender": "5.6.1"
+ }
+ },
+ "node_modules/echarts/node_modules/tslib": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
+ "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
+ },
"node_modules/ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@@ -17487,6 +17502,19 @@
"resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
"integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==",
"dev": true
+ },
+ "node_modules/zrender": {
+ "version": "5.6.1",
+ "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.6.1.tgz",
+ "integrity": "sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==",
+ "dependencies": {
+ "tslib": "2.3.0"
+ }
+ },
+ "node_modules/zrender/node_modules/tslib": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
+ "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
}
},
"dependencies": {
@@ -22265,6 +22293,22 @@
"safer-buffer": "^2.1.0"
}
},
+ "echarts": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.6.0.tgz",
+ "integrity": "sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==",
+ "requires": {
+ "tslib": "2.3.0",
+ "zrender": "5.6.1"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
+ "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
+ }
+ }
+ },
"ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@@ -31208,6 +31252,21 @@
"dev": true
}
}
+ },
+ "zrender": {
+ "version": "5.6.1",
+ "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.6.1.tgz",
+ "integrity": "sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==",
+ "requires": {
+ "tslib": "2.3.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
+ "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
+ }
+ }
}
}
}
diff --git a/package.json b/package.json
index 6f41495..23d1da7 100644
--- a/package.json
+++ b/package.json
@@ -9,18 +9,19 @@
"lint": "eslint --ext .js,.vue src"
},
"dependencies": {
- "core-js": "^3.6.5",
- "vue": "^2.6.11",
- "vuex": "^3.4.0",
"axios": "^1.9.0",
+ "core-js": "^3.6.5",
+ "echarts": "^5.6.0",
"element-ui": "^2.15.14",
"lodash": "^4.17.21",
"mapbox-gl": "^2.15.0",
"mqtt": "^2.18.9",
"normalize.css": "^8.0.1",
"nprogress": "^0.2.0",
+ "vue": "^2.6.11",
"vue-router": "^3.6.5",
- "vue-template-compiler": "^2.7.16"
+ "vue-template-compiler": "^2.7.16",
+ "vuex": "^3.4.0"
},
"devDependencies": {
"@mapbox/mapbox-gl-draw": "^1.5.0",
@@ -45,4 +46,4 @@
"main": ".eslintrc.js",
"author": "",
"license": "ISC"
-}
\ No newline at end of file
+}
diff --git a/src/components/DateRangePicker.vue b/src/components/DateRangePicker.vue
new file mode 100644
index 0000000..63f342d
--- /dev/null
+++ b/src/components/DateRangePicker.vue
@@ -0,0 +1,131 @@
+
+
+
+
+
diff --git a/src/router/index.js b/src/router/index.js
index 9a73165..57ce50b 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -99,6 +99,17 @@ const routes = [
roles: ['admin', 'editor'],
tapName: 'plane'
}
+ },
+ {
+ path: '/register/flyData',
+ component: () => import('@/views/layout/components/main/register/flyData'),
+ meta: {
+ title: '飞行数据统计',
+ icon: 'el-icon-data-line',
+ roles: ['admin', 'editor'],
+ tapName: 'plane',
+ hidden: true
+ }
}
]
},
diff --git a/src/store/modules/app.js b/src/store/modules/app.js
index e6d0297..64cbde2 100644
--- a/src/store/modules/app.js
+++ b/src/store/modules/app.js
@@ -5,10 +5,11 @@ const state = {
isWideScreen: window.innerWidth < 480, // 屏幕宽度是否小于480
defaultLonLat: null, // 地图默认经纬度
defaultZoom: null, // 地图默认缩放
- orderSerch: null, // 订单列表页搜索条件
- /* 页面临时传参 */
- toMessageIdArr: [] // 用户管理 发布公告页面 id临时传参
+ /* 页面参数 */
+ orderSerch: null, // 订单列表页搜索条件
+ toMessageIdArr: [], // 用户管理 发布公告页面 id临时传参
+ toFlyDataIdArr: [] // 飞机飞行数据 临时传参
}
const mutations = {
@@ -56,8 +57,13 @@ const mutations = {
},
/* 临时传参 */
+ // 管理员管理 发布公告页面 传递id数组
setToMessageIdArr (state, idArr) {
state.toMessageIdArr = idArr
+ },
+ // 飞机飞行数据 传递id数组
+ setToFlyDataIdArr (state, idArr) {
+ state.toFlyDataIdArr = idArr
}
}
diff --git a/src/utils/api/table.js b/src/utils/api/table.js
index 7c15488..683dd52 100644
--- a/src/utils/api/table.js
+++ b/src/utils/api/table.js
@@ -161,3 +161,20 @@ export async function pubMessage (tit, message, idArr, endTime) {
const res = await api.post('pubMessage', params, 'Admin') // 模块名根据你实际配置来
return res
}
+
+/**
+ * @abstract 获取指定飞机组的飞行数据(按时间范围)
+ * @param {Array} idArr 飞机ID数组
+ * @param {Number} startTime 开始时间
+ * @param {Number} endTime 结束时间
+ * @returns 飞行数据列表
+ */
+export async function getFlyData (idArr, startTime, endTime) {
+ const params = new URLSearchParams()
+ params.append('idArr', idArr.join(',')) // 后端只收字符串,用逗号分隔
+ params.append('startTime', startTime)
+ params.append('endTime', endTime)
+
+ const res = await api.post('getFlyDataByIdArr', params, 'Plane')
+ return res
+}
diff --git a/src/views/layout/components/main/register/flyData.vue b/src/views/layout/components/main/register/flyData.vue
new file mode 100644
index 0000000..ad097b4
--- /dev/null
+++ b/src/views/layout/components/main/register/flyData.vue
@@ -0,0 +1,303 @@
+
+
+
+
+
+
+
diff --git a/src/views/layout/components/main/register/index.vue b/src/views/layout/components/main/register/index.vue
index bd0c902..4924826 100644
--- a/src/views/layout/components/main/register/index.vue
+++ b/src/views/layout/components/main/register/index.vue
@@ -6,6 +6,7 @@
删除
编辑
+ 飞行数据
@@ -116,6 +117,17 @@ export default {
this.$message.error('只能选择一条记录')
}
},
+ /**
+ * @description: 跳转到飞机数据统计页面
+ */
+ toFlyDataPage (selIdArr) {
+ if (selIdArr.length === 0) {
+ this.$message.error('请选择至少一架飞机')
+ } else {
+ this.$store.commit('app/setToFlyDataIdArr', selIdArr)// 传参
+ this.$router.push('/register/flyData/')
+ }
+ },
/**
* @description: 删除飞机
*/