yangxiaokun 2 năm trước cách đây
mục cha
commit
ef1917adb3

+ 0 - 1
.gitignore

@@ -22,7 +22,6 @@ target/
 ### NetBeans ###
 /nbproject/private/
 /nbbuild/
-/dist/
 /nbdist/
 /.nb-gradle/
 build/

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
dist/css/app.4f1d56d4.css


BIN
dist/favicon.ico


BIN
dist/fonts/element-icons.535877f5.woff


BIN
dist/fonts/element-icons.732389de.ttf


BIN
dist/img/bg.59f1ed01.png


BIN
dist/img/logo.e8ecd770.png


BIN
dist/img/satellite.b2fe43aa.png


+ 1 - 0
dist/index.html

@@ -0,0 +1 @@
+<!DOCTYPE html><html lang="ch"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><title>BMS</title><link rel="stylesheet" href="static/css/common.css"><script src="https://webapi.amap.com/maps?v=2.0&key=ddbf8bc912a1c79be34e7d646f8fd726"></script><link href="/css/app.4f1d56d4.css" rel="preload" as="style"><link href="/js/app.ce874635.js" rel="preload" as="script"><link href="/js/chunk-vendors.08e9afcf.js" rel="preload" as="script"><link href="/css/app.4f1d56d4.css" rel="stylesheet"></head><body><div id="app"></div><script src="/js/chunk-vendors.08e9afcf.js"></script><script src="/js/app.ce874635.js"></script></body></html>

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
dist/js/app.ce874635.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
dist/js/app.ce874635.js.map


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
dist/js/chunk-vendors.08e9afcf.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
dist/js/chunk-vendors.08e9afcf.js.map


+ 99 - 0
dist/static/css/common.css

@@ -0,0 +1,99 @@
+a {
+    text-decoration: none;
+}
+
+::-webkit-scrollbar {
+    width: 7px;
+}
+
+::-webkit-scrollbar-thumb {
+    background: #b9b9b9;
+    border-radius: 10px;
+}
+
+::-webkit-scrollbar-track-piece {
+    background: transparent;
+}
+
+/*自定义公共样式*/
+html,
+body {
+    margin: 0;
+    padding: 0;
+    height: 100%;
+    width: 100%;
+    overflow: hidden;
+}
+
+/* 表格样式 */
+.zy-table-header-cell {
+    height: 55px !important;
+    color: #8A8F99 !important;
+    font-size: 14px !important;
+    font-weight: normal !important;
+    background: #f5f7fa !important;
+}
+
+.zy-table-cell {
+    font-size: 14px !important;
+    color: #1F2533 !important;
+}
+
+.zy-table-pagination {
+    float: right;
+    margin-top: 30px;
+}
+
+
+/* 模块通用样式 */
+.zy-module {
+    overflow: hidden;
+    box-sizing: border-box;
+    border-radius: 5px;
+    width: 100%;
+    background: white;
+    padding: 20px;
+    margin-bottom: 20px;
+}
+
+.zy-template {
+    width: 100%;
+}
+
+/* 小标题 */
+.zy-main-title {
+    width: 100%;
+    height: 20px;
+    font-size: 15px;
+    overflow: hidden;
+    line-height: 20px;
+    margin-bottom: 20px;
+    box-sizing: border-box;
+}
+
+.zy-main-title::after {
+    border-radius: 5px;
+    content: "";
+    width: 4px;
+    height: 100%;
+    background: #0054FE;
+    float: left;
+    margin-right: 10px;
+}
+
+/* 搜索框中表单样式 */
+.zy-search-form-item {
+    width: 250px;
+    display: inline-block;
+    margin-right: 30px;
+    margin-bottom: 10px !important;
+}
+
+/*颜色*/
+.green {
+    color: #39b54a;
+}
+
+.red {
+    color: #e54d42;
+}

BIN
dist/static/img/point.png


+ 6 - 5
src/router/index.js

@@ -8,6 +8,7 @@ import Logs from "../views/monitor/logs";
 import Item from "../views/system/item";
 import Group from "../views/system/group";
 import DevicesLp from "../views/devices/lp";
+import DevicesUbi from "../views/devices/ubi";
 import MapLp from "../views/map/lp";
 import Users from "../views/system/users";
 
@@ -25,6 +26,11 @@ const routes = [{
 				name: "DevicesLp",
 				component: DevicesLp
 			},
+			{
+				path: "/devices/ubi",
+				name: "DevicesUbi",
+				component: DevicesUbi
+			},
 			{
 				path: "/map/lp",
 				name: "MapLp",
@@ -39,11 +45,6 @@ const routes = [{
 				path: "/users",
 				name: "Users",
 				component: Users
-			},
-			{
-				path: "/items",
-				name: "Item",
-				component: Item
 			}
 		]
 	},

+ 12 - 21
src/static/js/global.js

@@ -1,8 +1,11 @@
+// const server = "http://lq.ailishi.org:4032/bms/api/operate/";
 const server = "http://localhost:8081/bms/api/operate/";
 
 const URL = {
 	//登录
 	login: server + "admin/login.do",
+	//注销
+	logout: server + "admin/logout.do",
 	//验证token
 	verify: server + "admin/verify.do",
 
@@ -26,38 +29,26 @@ const URL = {
 		//设备详情
 		detail: server + "device/lp/detail.do",
 	},
+	//普适型
+	ubi: {
+		//分页列表
+		listPage: server + "device/ubi/listPage.do",
+		//设备详情
+		detail: server + "device/ubi/detail.do",
+	},
 	//mqtt日志
 	logs: {
 		//列表
 		listPage: server + "logs/listPage.do",
 		//全部指令
-		instructions: server + "logs/getAllInstruction.do",
+		instructions: server + "logs/instruction.do",
 	},
-
-	//项目管理
-	item: {
-		//列表
-		listPage: server + "item/listPage.do",
-		//全部的项目列表
-		allList: server + "item/listAll.do",
-		//增
-		save: server + "item/save.do",
-		//禁用
-		forbidden: server + "item/forbidden.do",
-		//启用
-		permit: server + "item/permit.do",
-		//更新
-		update: server + "item/update.do",
-	},
-
-	//项目组管理
+	//设备组管理
 	group: {
 		//列表
 		listPage: server + "group/listPage.do",
 		//增
 		save: server + "group/save.do",
-		//查重
-		isRepeat: server + "group/isRepeat.do",
 		//查询全部设备组
 		listAll: server + "group/listAll.do",
 		//更新

+ 1 - 2
src/views/devices/lp.vue

@@ -105,7 +105,7 @@
 			 */
 			pagination: function(current) {
 				const param = {
-					current: 1,
+					current: current,
 					size: this.page.size,
 					groupId: this.query.groupId,
 					openNum: this.query.openNum,
@@ -117,7 +117,6 @@
 			 * 查看详情
 			 */
 			detailHandler: function(openNum) {
-				console.log(openNum);
 				this.detailDialog = true;
 				this.getDeviceDetail(openNum);
 			},

+ 163 - 0
src/views/devices/ubi.vue

@@ -0,0 +1,163 @@
+<template>
+	<div class="zy-template">
+		<div class="zy-main-title">设备列表-普适型</div>
+		<div class="zy-module">
+			<el-form ref="form" :model="query" label-width="60px">
+				<el-form-item label="设备码:" class="zy-search-form-item">
+					<el-input v-model="query.openNum" size="mini" clearable></el-input>
+				</el-form-item>
+				<el-form-item label="设备组:" class="zy-search-form-item">
+					<el-select v-model="query.groupId" filterable clearable placeholder=" " size="mini">
+						<el-option v-for="item in groups" :key="item" :value="item" />
+					</el-select>
+				</el-form-item>
+				<el-button type="primary" size="mini" @click="submit">查询</el-button>
+			</el-form>
+		</div>
+
+		<div class="zy-module">
+			<el-table :data="page.records" header-cell-class-name="zy-table-header-cell" cell-class-name='zy-table-cell'
+				stripe>
+				<el-table-column prop="openNum" label="设备码" min-width="180">
+					<template #default="scope">IMEI{{scope.row.openNum}}</template>
+				</el-table-column>
+				<el-table-column prop="groupId" label="设备组" min-width="120" />
+				<el-table-column prop="createTime" label="创建时间" min-width="180" />
+				<el-table-column prop="powerVolt" label="电池电压" min-width="100" />
+				<el-table-column prop="signal4g" label="4G信号" min-width="80" />
+				<el-table-column prop="oemType" label="板卡类型" min-width="100" />
+				<el-table-column prop="version" label="软件版本号" min-width="100" />
+				<el-table-column label="状态" min-width="100">
+					<template #default="scope">
+						<el-tag type="success" v-if="scope.row.status===1" size="small">在线</el-tag>
+						<el-tag type="danger" v-if="scope.row.status===0" size="small">离线</el-tag>
+					</template>
+				</el-table-column>
+				<el-table-column prop="updateTime" label="最近通讯时间" min-width="180" />
+				<el-table-column label="操作" min-width="80">
+					<template #default="scope">
+						<el-button @click="detailHandler(scope.row.openNum)" type="text" size="small">详情</el-button>
+					</template>
+				</el-table-column>
+			</el-table>
+			<el-pagination class="zy-table-pagination" background layout="prev, pager, next"
+				:current-page="page.current" :total="page.total" :page-size="page.size" @current-change="pagination" />
+		</div>
+
+		<el-dialog title="设备详情" v-model="detailDialog" width="500px">
+			<el-descriptions :column="2" border>
+				<el-descriptions-item label="设备码:">{{detail.openNum}}</el-descriptions-item>
+				<el-descriptions-item label="唤醒间隔:">{{detail.wakeInt}}</el-descriptions-item>
+				<el-descriptions-item label="阈值:">{{detail.thresh}}</el-descriptions-item>
+				<el-descriptions-item label="温度:">{{detail.temp}}</el-descriptions-item>
+				<el-descriptions-item label="电量:">{{detail.battery}}</el-descriptions-item>
+				<el-descriptions-item label="信号:">{{detail.s4g}}</el-descriptions-item>
+				<el-descriptions-item label="上传类型:">{{detail.dataType}}</el-descriptions-item>
+				<el-descriptions-item label="X:">{{detail.x}}</el-descriptions-item>
+				<el-descriptions-item label="Y:">{{detail.y}}</el-descriptions-item>
+				<el-descriptions-item label="Z:">{{detail.z}}</el-descriptions-item>
+				<el-descriptions-item label="angleX:">{{detail.anglex}}</el-descriptions-item>
+				<el-descriptions-item label="angleY:">{{detail.angley}}</el-descriptions-item>
+				<el-descriptions-item label="angleZ:">{{detail.anglexz}}</el-descriptions-item>
+				<el-descriptions-item label="经度:">{{detail.lon}}</el-descriptions-item>
+				<el-descriptions-item label="纬度:">{{detail.lat}}</el-descriptions-item>
+				<el-descriptions-item label="定位模式:">{{detail.mode==1?'GPS':'基站'}}</el-descriptions-item>
+			</el-descriptions>
+		</el-dialog>
+
+	</div>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				query: {
+					openNum: "",
+					type: null,
+				},
+				page: {
+					current: 1,
+					size: 20,
+				},
+				groups: [], //设备组
+				detailDialog: false, //详情弹出框
+				detail: {}, //设备详情
+			};
+		},
+		mounted() {
+			this.getDevicesList();
+			this.getGroupList();
+		},
+		methods: {
+			/**
+			 * 提交查询条件
+			 */
+			submit: function() {
+				const param = {
+					current: 1,
+					size: this.page.size,
+					groupId: this.query.groupId,
+					openNum: this.query.openNum,
+				};
+				this.getDevicesList(param);
+			},
+			/**
+			 * 分页点击事件
+			 */
+			pagination: function(current) {
+				const param = {
+					current: current,
+					size: this.page.size,
+					groupId: this.query.groupId,
+					openNum: this.query.openNum,
+				};
+				this.getDevicesList(param);
+			},
+
+			/**
+			 * 查看详情
+			 */
+			detailHandler: function(openNum) {
+				this.detailDialog = true;
+				this.getDeviceDetail(openNum);
+			},
+
+			/**
+			 * 获取设备列表
+			 */
+			getDevicesList: function(params) {
+				this.$http.Get(this.$global.ubi.listPage, params).then(res => {
+					this.page = res.data;
+				})
+			},
+
+			/**
+			 * 获取设备详情
+			 */
+			getDeviceDetail: function(openNum) {
+				const params = {
+					openNum: openNum
+				}
+				this.$http.Get(this.$global.ubi.detail, params).then(res => {
+					this.detail = res.data;
+				})
+			},
+
+			/**
+			 * 获取设备组
+			 */
+			getGroupList() {
+				this.$http.Get(this.$global.group.listAll, {}).then(res => {
+					const arr = [];
+					this.groups = res.data.forEach(item => {
+						if (item.type == 'gnss') {
+							arr.push(item.code)
+						}
+					});
+					this.groups = arr;
+				})
+			}
+		}
+	};
+</script>

+ 126 - 121
src/views/layout/layout.vue

@@ -1,145 +1,150 @@
 <template>
-    <el-container class="container">
-        <el-aside width="200px">
-            <div class="logo">
-                <img src="./static/logo.png" alt="logo">
-            </div>
-            <el-menu default-active="1" background-color="#141B2E" text-color="#E4ECFF">
-                <el-submenu index="1">
-                    <template #title><i class="el-icon-monitor"></i>设备管理</template>
-                    <router-link to="/map">
-                        <el-menu-item index="1-1">位置分布</el-menu-item>
-                    </router-link>
-                    <router-link to="/devices/lp">
-                        <el-menu-item index="1-2">设备列表-路牌</el-menu-item>
-                    </router-link>
-                </el-submenu>
+	<el-container class="container">
+		<el-aside width="200px">
+			<div class="logo">
+				<img src="./static/logo.png" alt="logo">
+			</div>
+			<el-menu default-active="1" background-color="#141B2E" text-color="#E4ECFF">
+				<el-submenu index="1">
+					<template #title><i class="el-icon-monitor"></i>设备管理</template>
+					<router-link to="/map/lp">
+						<el-menu-item index="1-1">位置分布</el-menu-item>
+					</router-link>
+					<router-link to="/devices/lp">
+						<el-menu-item index="1-2">设备列表-路牌</el-menu-item>
+					</router-link>
+					<router-link to="/devices/ubi">
+						<el-menu-item index="1-3">设备列表-普适型</el-menu-item>
+					</router-link>
+				</el-submenu>
 
-                <el-submenu index="2">
-                    <template #title><i class="el-icon-monitor"></i>设备监控</template>
-                    <router-link to="/logs">
-                        <el-menu-item index="2-1">MQTT消息日志</el-menu-item>
-                    </router-link>
-                </el-submenu>
+				<el-submenu index="2">
+					<template #title><i class="el-icon-monitor"></i>设备监控</template>
+					<router-link to="/logs">
+						<el-menu-item index="2-1">MQTT消息日志</el-menu-item>
+					</router-link>
+				</el-submenu>
 
-                <el-submenu index="3">
-                    <template #title><i class="el-icon-setting"></i>系统设置</template>
-                    <router-link to="/apply">
-                        <el-menu-item index="3-1">用户管理</el-menu-item>
-                    </router-link>
-                    <router-link to="/item">
-                        <el-menu-item index="3-2">项目管理</el-menu-item>
-                    </router-link>
-                    <router-link to="/apply">
-                        <el-menu-item index="3-3">设备组管理</el-menu-item>
-                    </router-link>
-                    <router-link to="/apply">
-                        <el-menu-item index="3-4">权限申请记录</el-menu-item>
-                    </router-link>
-                </el-submenu>
+				<el-submenu index="3">
+					<template #title><i class="el-icon-setting"></i>系统设置</template>
+					<router-link to="/users">
+						<el-menu-item index="3-1">用户管理</el-menu-item>
+					</router-link>
+					<router-link to="/groups">
+						<el-menu-item index="3-2">设备组管理</el-menu-item>
+					</router-link>
+				</el-submenu>
 
-            </el-menu>
-        </el-aside>
-        <el-container>
-            <el-header class='header' style="height: 50px;">
-                <div class="dropdown">
-                    <el-dropdown trigger="click">
+			</el-menu>
+		</el-aside>
+		<el-container>
+			<el-header class='header' style="height: 50px;">
+				<div class="dropdown">
+					<el-dropdown trigger="click">
 						<span class="el-dropdown-link">
 							{{nickname}}<i class="el-icon-arrow-down el-icon--right"></i>
 						</span>
-                        <template #dropdown>
-                            <el-dropdown-menu>
-                                <el-dropdown-item>退出登录</el-dropdown-item>
-                            </el-dropdown-menu>
-                        </template>
-                    </el-dropdown>
-                </div>
-            </el-header>
-            <el-main>
-                <!-- vue3.0配置-->
-                <router-view v-slot="{Component}">
-                    <keep-alive>
-                        <component :is="Component"/>
-                    </keep-alive>
-                </router-view>
-            </el-main>
-        </el-container>
-    </el-container>
+						<template #dropdown>
+							<el-dropdown-menu>
+								<el-dropdown-item @click="logout">退出登录</el-dropdown-item>
+							</el-dropdown-menu>
+						</template>
+					</el-dropdown>
+				</div>
+			</el-header>
+			<el-main>
+				<!-- vue3.0配置-->
+				<router-view v-slot="{Component}">
+					<keep-alive>
+						<component :is="Component" />
+					</keep-alive>
+				</router-view>
+			</el-main>
+		</el-container>
+	</el-container>
 </template>
 
 <script>
-    import TokenManager from '../../static/js/token.js'
+	import TokenManager from '../../static/js/token.js'
 
-    export default {
-        data() {
-            return {
-                nickname: '管理员',
-            };
-        },
-        mounted() {
-            //this.initToken();
-        },
-        methods: {
-            /**
-             * 查看token信息
-             */
-            initToken: function () {
-                this.$http.Get(this.$global.verify, {}).then(res => {
-                    const obj = JSON.parse(TokenManager.getToken());
-                    console.log(obj);
-                    this.nickname = obj.nickname;
-                })
-            }
-        }
-    };
+	export default {
+		data() {
+			return {
+				nickname: '管理员',
+			};
+		},
+		mounted() {
+			this.initToken();
+		},
+		methods: {
+			/**
+			 * 查看token信息
+			 */
+			initToken: function() {
+				this.$http.Get(this.$global.verify, {}).then(res => {
+					const obj = JSON.parse(TokenManager.getToken());
+					this.nickname = obj.nickname;
+				})
+			},
+			/**
+			 * 退出
+			 */
+			logout: function() {
+				this.$http.Get(this.$global.logout, {}).then(res => {
+					this.$router.replace("/login");
+					TokenManager.removeToken();
+				})
+			}
+		}
+	};
 </script>
 
 <style scoped lang="scss">
-    .container {
-        height: 100%;
+	.container {
+		height: 100%;
 
-        & .logo {
-            box-sizing: border-box;
-            padding-top: 10px;
-            padding-left: 20px;
-            width: 100%;
-            height: 60px;
+		& .logo {
+			box-sizing: border-box;
+			padding-top: 10px;
+			padding-left: 20px;
+			width: 100%;
+			height: 60px;
 
-            & img {
-                width: 40px;
-                height: 40px;
-            }
+			& img {
+				width: 40px;
+				height: 40px;
+			}
 
-        }
+		}
 
-        & .header {
-            background: #f3f5f9;
+		& .header {
+			background: #f3f5f9;
 
-            & .dropdown {
-                float: right;
-                margin-right: 30px;
-                cursor: pointer;
-                line-height: 50px;
-            }
-        }
+			& .dropdown {
+				float: right;
+				margin-right: 30px;
+				cursor: pointer;
+				line-height: 50px;
+			}
+		}
 
-        & .el-main {
-            background: #f3f5f9;
-            height: 100%;
-            overflow-x: hidden;
-            overflow-y: scroll;
-            box-sizing: border-box;
-            padding: 0 15px 20px 20px;
+		& .el-main {
+			background: #f3f5f9;
+			height: 100%;
+			overflow-x: hidden;
+			overflow-y: scroll;
+			box-sizing: border-box;
+			padding: 0 15px 20px 20px;
 
-        }
+		}
 
-        & .el-aside {
-            height: 100%;
-            background: #141b2e;
+		& .el-aside {
+			height: 100%;
+			background: #141b2e;
 
-            & .el-menu {
-                border: none;
-            }
-        }
-    }
+			& .el-menu {
+				border: none;
+			}
+		}
+	}
 </style>

+ 68 - 43
src/views/map/lp.vue

@@ -1,26 +1,38 @@
 <template>
 	<div class="zy-template">
-		<div class="zy-main-title">设备列表-路牌</div>
-		<div class="zy-module">
-			<el-select v-model="selectedNum" filterable clearable placeholder=" " size="mini">
-				<el-option v-for="item in openNumList" :key="item" :value="item" />
-			</el-select>
-			<el-button type="primary" plain size="mini" style="margin-left: 30px;" @click="searchSubmit()">搜索
-			</el-button>
+		<div class="zy-main-title title">设备列表-路牌</div>
+		<div class="zy-module search">
+			<el-form ref="form" :model="form" label-width="60px">
+				<el-form-item label="设备码:" class="zy-search-form-item">
+					<el-select v-model="form.openNum" filterable clearable placeholder=" " size="mini">
+						<el-option v-for="item in openNumList" :key="item" :value="item" />
+					</el-select>
+				</el-form-item>
+				<el-button type="primary" size="mini" @click="submit">查询</el-button>
+			</el-form>
 		</div>
 
 		<div id="map" class="map">
-			<div class="map__panel" v-if="selectedDevice != null">
-				<p>设 备 号: {{selectedDevice.deviceId}}</p>
-				<p>电 量: {{selectedDevice.batteryNum}}</p>
-				<p>信号强度: {{selectedDevice.signalNum}}</p>
-				<p>定位模式: {{selectedDevice.mode==1?"GPS定位":"基站定位"}}</p>
-				<p>经 度: {{selectedDevice.lon}}</p>
-				<p>纬 度: {{selectedDevice.lat}}</p>
-				<p>移动速度: {{selectedDevice.speed}}</p>
-				<p>卫星颗数: {{selectedDevice.num}}</p>
-				<p>上传时间: {{selectedDevice.dataCreateTime}}</p>
-				<p>位置: {{selectedDevice.site}}</p>
+			<div class="map__panel" v-if="device != null">
+				<p>设 备 号: {{device.openNum}}</p>
+				<p>设 备 组: {{device.groupId}}</p>
+				<p>状 态: {{device.status==1?"在线":"离线"}}</p>
+				<p>电 量: {{device.battery}}</p>
+				<p>温 度: {{device.temp}}</p>
+				<p>信号强度: {{device.s4g}}</p>
+				<p>唤醒间隔(小时): {{device.wakeInt}}</p>
+				<p>阈值: {{device.thresh}}</p>
+				<p>X: {{device.x}}</p>
+				<p>Y: {{device.y}}</p>
+				<p>Z: {{device.z}}</p>
+				<p>angleX: {{device.anglex}}</p>
+				<p>angleY: {{device.angley}}</p>
+				<p>angleZ: {{device.anglez}}</p>
+				<p>经 度: {{device.lon}}</p>
+				<p>纬 度: {{device.lat}}</p>
+				<p>定位模式: {{device.mode==1?"GPS":"基站"}}</p>
+				<p>上传时间: {{device.updateTime}}</p>
+				<p>位置: {{device.site}}</p>
 			</div>
 		</div>
 	</div>
@@ -33,10 +45,12 @@
 				map: null, //地图对象
 				markers: [], //地图中已经有的标记
 				icon: '', //地图中的图标
-				selectedNum: '', //搜索选择的设备号
+				form: {
+					openNum: ""
+				}, //搜索选择的设备号
 				openNumList: [], // 选择框匹配的设备号
 				deviceList: [], //全部的设备集合
-				selectedDevice: null, //选中的设备对象
+				device: null, //选中的设备对象
 			}
 		},
 		activated() {
@@ -50,30 +64,34 @@
 			 */
 			initMap: function() {
 				const option = {
-					zoom: 5
+					zoom: 6
 				};
 				this.map = new AMap.Map('map', option);
 				//默认图标样式
 				this.icon = new AMap.Icon({
-					size: [45, 45],
 					image: "/static/img/point.png",
-					imageSize: [45, 45]
+					size: [40, 40],
+					imageSize: [40, 40]
 				})
 			},
 
 			/**
 			 * 提交搜索
 			 */
-			searchSubmit: function() {
-				if (this.selectedNum === "") return;
+			submit: function() {
+				if (this.form.openNum === "") return;
 				this.deviceList.forEach(item => {
-					if (this.selectedNum === item.deviceId) {
-						this.map.setZoomAndCenter(11, [parseFloat(item.lon), parseFloat(item.lat)]);
-						this.selectedDevice = item;
+					if (this.form.openNum === item.openNum) {
+						if (item.latGcj != null && item.lonGcj != null) {
+							this.map.setZoomAndCenter(16, [item.lonGcj, item.latGcj]);
+						} else {
+							this.$message.warning("该设备暂无定位信息")
+						}
+						this.device = item;
 					}
 				})
 			},
-			
+
 			/**
 			 * 向地图中添加标记
 			 */
@@ -89,12 +107,7 @@
 						markers.push(that.buildMarker(item))
 					}
 				});
-				var marker = new AMap.Marker({
-				    position: new AMap.LngLat(116.406315,39.908775),   // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9]
-				    title: '北京',
-					offset: new AMap.Pixel(-10, -10),
-				});
-				this.map.add(marker);
+				this.map.add(markers);
 				this.markers = markers;
 			},
 
@@ -104,15 +117,14 @@
 			buildMarker: function(item) {
 				const that = this;
 				return new AMap.Marker({
-					position: [parseFloat(item.lonGcj), parseFloat(item.latGcj)],
+					position: [item.lonGcj, item.latGcj],
 					icon: this.icon, // 添加 Icon 图标 URL
-					// title: item.deviceId,
-					// animation: "AMAP_ANIMATION_DROP"
+					title: item.deviceId,
+					animation: "AMAP_ANIMATION_DROP"
+				}).on("click", function() {
+					that.map.setZoomAndCenter(16, [item.lonGcj, item.latGcj]);
+					that.device = item;
 				})
-				// .on("click", function() {
-				// 	that.map.setZoomAndCenter(16, [parseFloat(item.lonGcj), parseFloat(item.latGcj)]);
-				// 	that.selectedDevice = item;
-				// })
 			},
 
 			/**
@@ -135,8 +147,21 @@
 
 <style scoped lang="scss">
 	.zy-template {
+		position: relative;
+		box-sizing: border-box;
+		padding-top: 150px;
 		height: 100%;
 
+		.title {
+			position: absolute;
+			top: 0px;
+		}
+
+		.search {
+			position: absolute;
+			top: 40px;
+		}
+
 		.map {
 			width: 100%;
 			height: 100%;
@@ -149,7 +174,7 @@
 				position: absolute;
 				right: 10px;
 				top: 10px;
-				width: 350px;
+				width: 220px;
 				padding: 10px;
 				border-radius: 5px;
 				background: rgba(0, 0, 0, .5);

+ 10 - 4
src/views/monitor/logs.vue

@@ -27,14 +27,20 @@
 		<div class="zy-module">
 			<el-table :data="page.records" header-cell-class-name="zy-table-header-cell" cell-class-name='zy-table-cell'
 				stripe>
-				<el-table-column prop="openNum" label="设备ID" width="180" />
+				<el-table-column prop="openNum" label="设备ID" width="150" />
 				<el-table-column label="类型" width="80">
 					<template #default="scope">{{scope.row.type==0?'接收':'发送'}}</template>
 				</el-table-column>
-				<el-table-column label="类型" width="180">
-					<template #default="scope">{{scope.row.m}} ({{scope.row.remark}})</template>
+				<el-table-column label="指令" width="80">
+					<template #default="scope">
+						<el-popover placement="bottom" :width="120" trigger="click" :content="scope.row.remark">
+							<template #reference>
+								<el-tag style="cursor: pointer;">{{scope.row.m}}</el-tag>
+							</template>
+						</el-popover>
+					</template>
 				</el-table-column>
-				<el-table-column prop="content" label="内容" min-width="10%" />
+				<el-table-column prop="content" label="内容" min-width="500" />
 				<el-table-column prop="createTime" label="时间" width="180" />
 			</el-table>
 

+ 9 - 85
src/views/system/group.vue

@@ -4,21 +4,9 @@
 		<div class="zy-module">
 			<el-form :model="query" label-width="80px">
 				<el-form-item label="关键字" class="zy-search-form-item">
-					<el-input v-model="query.name" size="mini" placeholder="名称/编号" clearable></el-input>
+					<el-input v-model="query.name" size="mini" placeholder="编号/名称/备注" clearable></el-input>
 				</el-form-item>
 
-				<el-form-item label="项目" class="zy-search-form-item">
-					<el-select v-model="query.itemId" size="mini" clearable placeholder="不选默认全部">
-						<el-option :label="item.name" :value="item.id" v-for="item in itemList" />
-					</el-select>
-				</el-form-item>
-
-				<el-form-item label="状态" class="zy-search-form-item">
-					<el-select v-model="query.status" size="mini" clearable placeholder="不选默认全部">
-						<el-option label="禁用" value="0" />
-						<el-option label="启用" value="1" />
-					</el-select>
-				</el-form-item>
 				<el-button type="primary" size="mini" @click="submit">查询</el-button>
 			</el-form>
 		</div>
@@ -30,27 +18,15 @@
 				<el-table-column prop="code" label="设备组编号" width="100" />
 				<el-table-column prop="name" label="设备组名称" width="120" />
 				<el-table-column prop="item" label="所属项目" width="150" />
-				<el-table-column label="备注" min-width="30%">
-					<template #default="scope">
-						<div style="height: 24px; overflow: hidden;">
-							{{scope.row.remark}}
-						</div>
-					</template>
-				</el-table-column>
-				<el-table-column label="状态" width="60">
+				<el-table-column label="备注" min-width="500">
 					<template #default="scope">
-						<el-tag type="danger" size="mini" v-if="scope.row.status==0">禁用</el-tag>
-						<el-tag type="success" size="mini" v-if="scope.row.status==1">启用</el-tag>
+						{{scope.row.remark}}
 					</template>
 				</el-table-column>
 				<el-table-column prop="createTime" label="创建时间" width="180" />
 				<el-table-column label="操作" width="100" min-width="10%">
 					<template #default="scope">
-						<el-button @click="handleUpdate(scope.row)" type="text" size="small">修改</el-button>
-						<el-button @click="handlePass(scope.row.id)" type="text" size="small" style="color: #67c23a"
-							v-if="scope.row.status==0">启用</el-button>
-						<el-button @click="handleRefuse(scope.row.id)" type="text" size="small" style="color: #f56c6c;"
-							v-if="scope.row.status==1">禁用</el-button>
+						<el-button @click="handleUpdate(scope.row)" type="text" size="small">编辑</el-button>
 					</template>
 				</el-table-column>
 			</el-table>
@@ -68,16 +44,11 @@
 					<el-input v-model="addForm.name" maxlength="30"></el-input>
 				</el-form-item>
 
-				<el-form-item label="所属项目:">
-					<el-select v-model="addForm.itemId" clearable placeholder="可以为空,但不建议">
-						<el-option :label="item.name" :value="item.id" v-for="item in itemList" />
-					</el-select>
-				</el-form-item>
-
 				<el-form-item label="备注:">
 					<el-input type="textarea" v-model="addForm.remark" maxlength="100"></el-input>
 				</el-form-item>
 			</el-form>
+			
 			<template #footer>
 				<span class="dialog-footer">
 					<el-button @click="addDialog = false">取 消</el-button>
@@ -96,12 +67,6 @@
 					<el-input v-model="updateForm.name" maxlength="30"></el-input>
 				</el-form-item>
 
-				<el-form-item label="所属项目:">
-					<el-select v-model="updateForm.itemId" clearable placeholder="可以为空,但不建议">
-						<el-option :label="item.name" :value="item.id" :key="item.id" v-for="item in itemList" />
-					</el-select>
-				</el-form-item>
-
 				<el-form-item label="备注:">
 					<el-input type="textarea" v-model="updateForm.remark" maxlength="100"></el-input>
 				</el-form-item>
@@ -121,27 +86,18 @@
 		data() {
 			return {
 				query: {
-					name: null,
-					itemId: null,
-					status: null,
+					key: null,
 				},
 				page: {
 					current: 1,
-					size: 10,
+					size: 20,
 				},
-				itemList: null, //项目列表
 				addDialog: false, //增加表单
 				updateDialog: false, //更新表单
-				updateForm: { //更新表单
-					code: null,
-					name: null,
-					itemId: null,
-					remark: null
-				},
+				updateForm: {}, //更新表单
 				addForm: { //添加表单
 					code: null,
 					name: null,
-					itemId: null,
 					remark: null
 				},
 				rules: {
@@ -156,7 +112,6 @@
 		},
 		mounted: function() {
 			this.getListPage(this.page);
-			this.allItem();
 		},
 		methods: {
 			/**
@@ -177,8 +132,6 @@
 			pagination: function(current) {
 				const params = {
 					name: this.query.name,
-					itemId: this.query.itemId,
-					status: this.query.status,
 					current: current,
 					size: this.page.size,
 				};
@@ -194,25 +147,16 @@
 				})
 			},
 
-			/**
-			 * 增加设备组
-			 */
-			handleAdd: function(obj) {
-				this.addDialog = true;
-			},
-
 			/**
 			 * 更新设备组
 			 */
 			handleUpdate: function(obj) {
 				this.updateForm = {
-					id:obj.id,
+					id: obj.id,
 					code: obj.code,
 					name: obj.name,
-					itemId: parseInt(obj.itemId),
 					remark: obj.remark
 				}
-				console.log(obj);
 				this.updateDialog = true;
 			},
 
@@ -245,24 +189,6 @@
 				});
 			},
 
-			/**
-			 * 禁用
-			 */
-			forbidden: function(id) {},
-
-			/**
-			 * 启用
-			 */
-			permit: function(id) {},
-
-			/**
-			 * 全部的项目组
-			 */
-			allItem: function() {
-				this.$http.Get(this.$global.item.allList, {}).then(res => {
-					this.itemList = res.data;
-				})
-			},
 			/**
 			 * 刷新列表
 			 */
@@ -271,8 +197,6 @@
 				this.updateDialog = false;
 				const params = {
 					key: this.query.key,
-					itemId: this.query.itemId,
-					status: this.query.status,
 					current: this.page.current,
 					size: this.page.size,
 				}

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác