From 10686c5e51ef98ca459ab000462c0701e0bb17ea Mon Sep 17 00:00:00 2001
From: 李旭东 <woaiguo66@sina.com>
Date: 星期五, 03 十一月 2023 17:18:52 +0800
Subject: [PATCH] 环境监测 设备管理

---
 sz_app/api/module/system.js                                             |    2 
 sz_app/pages/spotCheck/deviceSpot.vue                                   |   41 
 web/src/style/element-ui.scss                                           |    4 
 sz_app/pages/homeIndex/index.vue                                        |    1 
 web/src/router/index.js                                                 |    2 
 web/src/views/GreenBuild/WeldSmoke.vue                                  |   74 +
 sz_app/api/http.js                                                      |   10 
 web/src/api/modules/device.js                                           |  212 +----
 web/src/assets/sign_bg.png                                              |    0 
 web/src/views/EquipmentManage/EquipSpot.vue                             |    7 
 sz_app/pages/loginIndex/index.vue                                       |    6 
 web/src/views/EquipmentManage/EquipInfo/components/GeneralEquipment.vue |  758 ++++++++++++++++++++++
 web/src/views/EquipmentManage/EquipInfo/index.vue                       |   37 +
 sz_app/pages/spotCheck/index.vue                                        |   43 
 web/src/views/LayoutIndex/components/LayoutAside.vue                    |   14 
 web/src/views/ScanInfo/ScanDetail.vue                                   |   24 
 sz_app/pages/spotCheck/spotDetail.vue                                   |    1 
 sz_app/api/module/spot.js                                               |   22 
 web/src/views/EquipmentManage/EquipInfo/components/SpecialEquipment.vue |  759 ++++++++++++++++++++++
 19 files changed, 1,786 insertions(+), 231 deletions(-)

diff --git a/sz_app/api/http.js b/sz_app/api/http.js
index 6ffb703..69f9a09 100644
--- a/sz_app/api/http.js
+++ b/sz_app/api/http.js
@@ -1,13 +1,13 @@
 function Request() {}
-// export const basrUrl = 'https://pipe.thhy-tj.com/api';
-// export const basrUrl = 'http://192.168.0.170:8880';
-export const basrUrl = 'http://111.30.93.212:8089/suapi';
+// export const baseUrl = 'https://pipe.thhy-tj.com/api';
+// export const baseUrl = 'http://192.168.0.170:8880';
+export const baseUrl = 'http://111.30.93.212:8089/suapi';
 Request.prototype = {
 	post: function(url, params) {
 		return new Promise(function(resolve, reject) {
 			const userToken = uni.getStorageSync('userToken') || "";
 			uni.request({
-				url: `${basrUrl}${url}`,
+				url: `${baseUrl}${url}`,
 				data: params,
 				method: 'POST',
 				header: {
@@ -37,7 +37,7 @@
 			const userToken = uni.getStorageSync('userToken') || "";
 			uni.request({
 				method: 'GET',
-				url: `${basrUrl}${url}`,
+				url: `${baseUrl}${url}`,
 				data: params,
 				header: {
 					usertoken: userToken,
diff --git a/sz_app/api/module/spot.js b/sz_app/api/module/spot.js
index 2aa2063..8f64ee1 100644
--- a/sz_app/api/module/spot.js
+++ b/sz_app/api/module/spot.js
@@ -6,22 +6,17 @@
 	 */
 
 	// 查询字典信息
-	searchDictionary: params => {
-		return axios({
-			url: '/engineering/dict/dictList',
-			method: 'post',
+	searchDictionary: params =>
+		axios.post('/engineering/dict/dictList',{
 			...params,
 			header: {
 				pageNum: params.pageNum,
 				pageSize: params.pageSize
 			}
-		})
-	},
+		}),
 	// 查询设备点检列表信息
 	searchSpotCheckList: (params) =>
-		axios({
-			method: 'post',
-			url: '/m/checkDevice/findList',
+		axios.post('/m/checkDevice/findList',{
 			...params,
 			header: {
 				pageNum: params.pageNum,
@@ -30,17 +25,20 @@
 		}),
 	// 添加设备点检信息
 	insertSpotCheckInfo: (params) =>
-		axios.post('m/checkDevice/addCheckDevice', params),
+		axios.post('/m/checkDevice/addCheckDevice', params),
 	// 修改设备点检信息
 	updateSpotCheckInfo: (params) =>
-		axios.post('m/checkDevice/addCheckDevice', params),
+		axios.post('/m/checkDevice/addCheckDevice', params),
 	//删除设备点检信息
 	deleteSpotCheckInfo: (params) =>
 		axios.post('/m/checkDevice/delete', params),
 	// 获取点检详情
 	getSpotCheckDetail: (params) =>
-		axios.post('m/checkDevice/checkDeviceInfo', params),
+		axios.post('/m/checkDevice/checkDeviceInfo', params),
 	// 获取全部设备信息
 	getAllDeviceData: () =>
 		axios.post('/m/checkDevice/deviceList'),
+  // 获取设备信息详情
+  getDeviceDetails: (params) =>
+    axios.get('/engineering/bigDevice/bigDeviceInfo', params ),
 }
\ No newline at end of file
diff --git a/sz_app/api/module/system.js b/sz_app/api/module/system.js
index 87e2009..6d2dcef 100644
--- a/sz_app/api/module/system.js
+++ b/sz_app/api/module/system.js
@@ -6,7 +6,7 @@
   */
   // 登录
   userLogin: params => 
-    axios.post(`/usercore/login`, params),
+    axios.post(`/m/login`, params),
   // 退出登录
   logingOut: params =>
     axios.post('/usercore/login/logout', params),
diff --git a/sz_app/pages/homeIndex/index.vue b/sz_app/pages/homeIndex/index.vue
index d9a0698..bd7de73 100644
--- a/sz_app/pages/homeIndex/index.vue
+++ b/sz_app/pages/homeIndex/index.vue
@@ -43,6 +43,7 @@
 			this.height = (deviceInfo.windowWidth / 3) - 32;
 			const menuData = JSON.parse(uni.getStorageSync('menuData')) || [];
 			this.homeTabList = menuData.map(item => {
+				console.log(item.menuIcon);
 				item.menuIcon = `http://filemanage.thhy-tj.com:8888/${item.menuIcon}`
 				return item;
 			})
diff --git a/sz_app/pages/loginIndex/index.vue b/sz_app/pages/loginIndex/index.vue
index 34d58ca..86b9da2 100644
--- a/sz_app/pages/loginIndex/index.vue
+++ b/sz_app/pages/loginIndex/index.vue
@@ -64,8 +64,8 @@
 		data() {
 			return {
 				formLogin: {
-					username: '',
-					password: ''
+					username: '15010128058',
+					password: '123456'
 				},
 				rulesLogin: {
 					username: [{
@@ -107,7 +107,7 @@
 					if(valid) {
 						const params = Object.assign({}, this.formLogin);
 						this.$api.system.userLogin(params).then((res) => {
-							console.log(res.data, '----');
+							console.log(res, '----');
 							if(res.success) {
 								uni.$u.toast('登录成功!');
 								uni.setStorageSync('realName', res.data.realName);
diff --git a/sz_app/pages/spotCheck/deviceSpot.vue b/sz_app/pages/spotCheck/deviceSpot.vue
index 917dcff..1676e43 100644
--- a/sz_app/pages/spotCheck/deviceSpot.vue
+++ b/sz_app/pages/spotCheck/deviceSpot.vue
@@ -8,15 +8,15 @@
 				</view>
 				<view class="device_item_value">
 					<span class="label">设备名称:</span>
-					<span>混凝土搅拌机</span>
+					<span>{{deviceData.bigDeviceName}}</span>
 				</view>
 				<view class="device_item_value">
 					<span class="label">型号规格:</span>
-					<span>混凝土搅拌机</span>
+					<span>{{deviceData.bigDeviceModel}}</span>
 				</view>
 				<view class="device_item_value">
 					<span class="label">设备类型:</span>
-					<span>混凝土搅拌机</span>
+					<span>{{deviceData.bigType === 1 ? '特种设备' : '一般设备'}}</span>
 				</view>
 			</view>
 			<view class="device_form">
@@ -106,16 +106,16 @@
 			:columns="checkTypeData" 
 			keyName="dictName"
 			closeOnClickOverlay
-			@cancel="cancelCheckType()"
-			@confirm="confirmCheckType()"
+			@cancel="cancelCheckType"
+			@confirm="confirmCheckType"
 			@close="showCheckType = false"
 			></u-picker>
 	</view>
 </template>
 
 <script>
-	import baseUrl from '../../api/http.js';
-import { changeTime, throttle } from '../../plugins/public.js';
+	import { baseUrl } from '../../api/http.js';
+	import { changeTime, throttle } from '../../plugins/public.js';
 	export default {
 		data() {
 			return {
@@ -144,7 +144,10 @@
 				colorStyle: 'linear-gradient(to right, rgb(79, 142, 244), rgb(85, 109, 254))',
 				showTime: false,
 				defaultTime: Number(new Date()),
-				deviceId: ''
+				deviceId: '',
+				deviceData: {},
+				showCheckType: false,
+				checkTypeData: [],
 			}
 		},
 		onReady() {
@@ -152,7 +155,13 @@
 		},
 		onLoad(option) {
 			this.deviceId = option.deviceId;
+			console.log(option,'option')
 			this.getChackAllTypes();
+			this.$api.spot.getDeviceDetails({
+				bigDeviceId: option.deviceId
+			}).then((res) => {
+				this.deviceData = res.data;
+			})
 		},
 		methods: {
 			// 获取点检类型
@@ -162,11 +171,11 @@
             pageSize: 100000000,
             dictType: 'check_type'
 				});
-				this.checkTypeData = data.list;
+				this.checkTypeData.push(data.list);
       },
 			// 读取图片后
 			afterRead(event) {
-				console.log(event);
+				console.log(event,'event', `${baseUrl}/file/file/upload`);
 				this.fileList.push({
 					status: 'loading',
 					message: '上传中',
@@ -178,15 +187,17 @@
 					name: 'file',
 					success: (res) => {
 						const data = JSON.parse(res.data);
+						console.log(data,'?????');
 						this.$set(this.fileList, this.fileList.length - 1, {
 							id: this.fileList.length + 1,
 							status: 'success',
 							message: '',
 							data: data.data,
-							url: `http://filemanage.thhy-tj.com:8888/${data.data}`
+							url: `http://filemanage.thhy-tj.com:8888/suapi/${data.data}`
 						})
 					},
 					fail: (error) => {
+						console.log(error,'error');
 						uni.$u.toast('上传失败!');
 					}
 				})
@@ -224,14 +235,15 @@
 			},
 			// 点击选择点检类型
 			confirmCheckType({ value }) {
+				this.$set(this.formSpot, 'checkTypeName', value[0].dictName);
+				this.$set(this.formSpot, 'checkType', value[0].dictId);
 				this.showCheckType = false;
-				this.$set(this.formSpot, 'checkTypeName', value[0].checkTypeName);
-				this.$set(this.formSpot, 'checkType', value[0].checkType);
 			},
 			// 提交点检信息
 			submitForm: throttle(function() {
 				this.$refs.form.validate().then((valid) => {
 					if(valid) {
+						console.log(valid,'valid');
 						const params = Object.assign({}, this.formSpot);
 						delete params.checkTypeName;
 						params.deviceId = this.deviceId;
@@ -241,7 +253,10 @@
 									file: item.data
 								}
 							})
+						} else {
+							params.fileList = [];
 						}
+						console.log(params,'params');
 						this.$api.spot.insertSpotCheckInfo(params).then(res => {
 							if(res.success) {
 								uni.$u.toast('添加成功!');
diff --git a/sz_app/pages/spotCheck/index.vue b/sz_app/pages/spotCheck/index.vue
index bc8c683..9cfaaa2 100644
--- a/sz_app/pages/spotCheck/index.vue
+++ b/sz_app/pages/spotCheck/index.vue
@@ -19,11 +19,10 @@
 			<view 
 				class="spot_item"
 				v-for="item in spotList"
-				:key="item.id"
-				@click="navgetToDetail(item)">
+				:key="item.id">
 				<view class="spot_item_title">
 					<span>设备编号:{{item.bigNumber}}</span>
-					<span>详情</span>
+					<span @click="navgetToDetail(item)">详情</span>
 				</view>
 				<view class="spot_item_content">
 					<view class="">
@@ -36,7 +35,7 @@
 					</view>
 					<view class="">
 						<span class="label">设备类型:</span>
-						<span>{{item.bigTypeStr}}</span>
+						<span>{{item.bigType == 1 ? '特殊设备' : '一般设备'}}</span>
 					</view>
 					<view class="">
 						<span class="label">点检时间:</span>
@@ -84,11 +83,15 @@
 				pageNum: 1,
 				pageSize: 10,
 				loadPage: '',
-				spotList: [{id: 1}, {id: 2}, {id: 3}],
+				spotList: [],
 			}
 		},
 		onShow() {
 			this.searchData();
+		},
+		onUnload() {
+			// 移除监听事件
+			uni.$off('scancodedate');
 		},
 		methods: {
 			// 查询模具质检列表
@@ -97,6 +100,7 @@
 					pageNum: this.pageNum,
 					pageSize: this.pageSize
 				})
+				console.log(data);
 				return data;
 			},
 			// 查询信息
@@ -146,21 +150,22 @@
 				uni.$on('scancodedate', function(data) {
 					console.log(data.code);
 					if(data.code) {
-						uni.navigateTo({
-							url: './deviceSpot'
+						const list = data.code ? data.code.split('bigDeviceId=') : [];
+						const codeStr = list.length > 0 ? list[list.length - 1] : '';
+						that.$api.spot.getDeviceDetails({
+							bigDeviceId: codeStr
+						}).then((res) => {
+							if(res.success) {
+								uni.$u.toast('扫描完成!');
+								uni.navigateTo({
+									url: './deviceSpot?deviceId=' + codeStr
+								})
+							} else {
+								uni.$u.toast(res.statusMsg);
+							}
 						})
+						uni.$off('scancodedate');
 					}
-					// that.$api.spot.scanCheckMould({
-					// 	mouldNum: data.code
-					// }).then((res) => {
-					// 	if(res.success) {
-					// 		uni.$u.toast('扫描完成!');
-					// 		console.log(res,'===');
-					// 	} else {
-					// 		uni.$u.toast(res.statusMsg);
-					// 	}
-					// })
-					uni.$off('scancodedate');
 				})
 			},
 			// 跳转详情
@@ -169,7 +174,7 @@
 					url: './spotDetail?id=' + item.id
 				})
 			}
-		}
+		},
 	}
 </script>
 
diff --git a/sz_app/pages/spotCheck/spotDetail.vue b/sz_app/pages/spotCheck/spotDetail.vue
index 3aeae43..ebc4210 100644
--- a/sz_app/pages/spotCheck/spotDetail.vue
+++ b/sz_app/pages/spotCheck/spotDetail.vue
@@ -118,6 +118,7 @@
 				id: option.id
 			}).then((res) => {
 				this.formData = res.success ? res.data : {};
+				res.data.bigTypeStr = res.data.bigType == 1 ? '特殊设备' : '一般设备';
 			})
 		},
 		methods: {
diff --git a/web/src/api/modules/device.js b/web/src/api/modules/device.js
index 135e460..1363084 100644
--- a/web/src/api/modules/device.js
+++ b/web/src/api/modules/device.js
@@ -1,8 +1,69 @@
 /**
  * 设备管理
  */
- import axios from '../request';
- export default{
+import axios from '../request';
+export default {
+  /**
+   * 设备信息管理
+  */
+  // 查询设备列表信息
+  searchDeviceInfoList: (params) =>
+    axios.post('/engineering/bigDevice/bigDeviceList', params),
+  // 添加设备信息
+  insertDeviceInfo: (params) =>
+    axios.post('/engineering/bigDevice/bigDeviceInsert', params),
+  // 修改设备信息
+  updateDeviceInfo: (params) =>
+    axios.post('/engineering/bigDevice/bigDeviceUpdate', params),
+  // 删除设备信息
+  deleteDeviceInfo: (params) =>
+    axios.get('/engineering/bigDevice/bigDeviceDel', { params }),
+  // 获取设备信息详情
+  getDeviceDetails: (params) =>
+    axios.get('/engineering/bigDevice/bigDeviceInfo', { params }),
+  // 导出设备excel
+  exportDeviceExcel: (params) =>
+    axios({
+      method: 'post',
+      url: '/engineering/bigDevice/bigDeviceExcel',
+      responseType: 'blob',
+      data: params
+    }),
+
+  /**
+   *  设备点检
+  */
+  // 查询设备点检列表信息
+  searchSpotCheckList: (params) =>
+    axios({
+      method: 'post',
+      url: '/m/checkDevice/findList',
+      headers: {
+        pageNum: params.pageNum,
+        pageSize: params.pageSize
+      },
+      data: {
+        startTime: params.startTime,
+        endTime: params.endTime,
+        bigNumber: params.bigNumber
+      }
+    }),
+  // 添加设备点检信息
+  insertSpotCheckInfo: (params) =>
+    axios.post('m/checkDevice/addCheckDevice', params),
+  // 修改设备点检信息
+  updateSpotCheckInfo: (params) =>
+    axios.post('m/checkDevice/addCheckDevice', params),
+  //删除设备点检信息
+  deleteSpotCheckInfo: (params) =>
+    axios.post('/m/checkDevice/delete', params),
+  // 获取点检详情
+  getSpotCheckDetail: (params) =>
+    axios.post('m/checkDevice/checkDeviceInfo', params),
+  // 获取全部设备信息
+  getAllDeviceData: () =>
+    axios.post('/m/checkDevice/deviceList'),
+
     /**
      * 生产采集设备
      *
@@ -22,149 +83,4 @@
     // 删除设备信息
     deleteProductDevice: params =>
         axios.get('/engineering/device/deviceDel', {params}),
-
-    /**
-     * 视频监控
-     */
-    // 查询视频列表信息
-    searchDeviceInfo: params =>
-        axios.post('/materials/video/webVideoList', params),
-    // 添加视频信息
-    insertDeviceInfo: params =>
-        axios.post('/engineering/video/videoInsert', params),
-    // 修改视频信息
-    updateDeviceInfo: params =>
-        axios.post('/engineering/video/videoUpdate', params),
-    // 视频信息详情
-    detailsDeviceInfo: params =>
-        axios.get('/engineering/video/videoInfo', {params}),
-    // 删除视频信息
-    deleteDeviceInfo: params =>
-        axios.get('/engineering/video/videoDel', {params}),
-    //返回视频播放地址
-    backVideosUrlList: params =>
-        axios.post('/materials/video/videoListPath', params),
-
-    /**
-     * 大型生产设备
-     */
-    // 查询大型生产设备列表信息
-    searchBigDevice: params =>
-        axios.post('/engineering/bigDevice/bigDeviceList', params),
-    // 添加大型生产设备信息
-    insertBigDevice: params =>
-        axios.post('/engineering/bigDevice/bigDeviceInsert', params),
-    // 修改大型生产设备信息
-    updateBigDevice: params =>
-        axios.post('/engineering/bigDevice/bigDeviceUpdate', params),
-    // 大型生产设备信息详情
-    detailsBigDevice: params =>
-        axios.get('/engineering/bigDevice/bigDeviceInfo', {params}),
-    // 删除大型生产设备信息
-    deleteBigDevice: params =>
-        axios.get('/engineering/bigDevice/bigDeviceDel', {params}),
-    //大型生产设备下拉
-    getAllBigDevice: params =>
-        axios.get('/engineering/bigDevice/bigDevicePull', {params}),
-    //导出数据
-    exportBigDatas:params=>
-        axios({
-            method: 'post',
-            url: '/engineering/bigDevice/bigDeviceExcel',
-            responseType: 'blob',
-            data: params
-        }),
-
-    /**
-     * 设备检查
-     */
-
-    // 设备检查列表信息
-    searchCheckDevice: params =>
-        axios.post('/engineering/bigInspect/bigInspectList', params),
-    // 添加设备检查信息
-    insertCheckDevice: params =>
-        axios.post('/engineering/bigInspect/bigInspectInsert', params),
-    // 修改设备检查信息
-    updateCheckDevice: params =>
-        axios.post('/engineering/bigInspect/bigInspectUpdate', params),
-    // 设备检查信息详情
-    detailsCheckDevice: params =>
-        axios.get('/engineering/bigInspect/bigInspectInfo', {params}),
-    // 删除设备检查信息
-    deleteCheckDevice: params =>
-        axios.get('/engineering/bigInspect/bigInspectDel', {params}),
-
-    /**
-     * 设备保养
-     */
-
-    // 设备保养列表信息
-    searchKeepDevice: params =>
-        axios.post('/engineering/maintenance/maintenanceList', params),
-    // 添加设备保养信息
-    insertKeepDevice: params =>
-        axios.post('/engineering/maintenance/maintenanceInsert', params),
-    // 修改设备保养信息
-    updateKeepDevice: params =>
-        axios.post('/engineering/maintenance/maintenanceUpdate', params),
-    // 设备保养详情
-    detailsKeepDevice: params =>
-        axios.get('/engineering/maintenance/maintenanceInfo', {params}),
-    // 删除设备保养信息
-    deleteKeepDevice: params =>
-        axios.get('/engineering/maintenance/maintenanceDel', {params}),
-
-    /**
-     * 设备维修
-     */
-    // 设备维修列表信息
-    searchServiceDevice: params =>
-        axios.post('/engineering/overhaul/overhaulList', params),
-    // 添加设备维修信息
-    insertServiceDevice: params =>
-        axios.post('/engineering/overhaul/overhaulInsert', params),
-    // 修改设备维修信息
-    updateServiceDevice: params =>
-        axios.post('/engineering/overhaul/overhaulUpdate', params),
-    // 设备维修详情
-    detailsServiceDevice: params =>
-        axios.get('/engineering/overhaul/overhaulInfo', {params}),
-    // 删除设备维修信息
-    deleteServiceDevice: params =>
-        axios.get('/engineering/overhaul/overhaulDel', {params}),
-
-    /**
-     *  设备点检
-    */
-    // 查询设备点检列表信息
-    searchSpotCheckList: (params) =>
-        axios({
-            method: 'post',
-            url: '/m/checkDevice/findList',
-            headers: {
-                pageNum: params.pageNum,
-                pageSize: params.pageSize
-            },
-            data: {
-                startTime: params.startTime,
-                endTime: params.endTime,
-                bigNumber: params.bigNumber
-            }
-        }),
-    // 添加设备点检信息
-    insertSpotCheckInfo: (params) =>
-        axios.post('m/checkDevice/addCheckDevice', params),
-    // 修改设备点检信息
-    updateSpotCheckInfo: (params) =>
-    axios.post('m/checkDevice/addCheckDevice', params),
-    //删除设备点检信息
-    deleteSpotCheckInfo: (params) =>
-        axios.post('/m/checkDevice/delete', params),
-    // 获取点检详情
-    getSpotCheckDetail: (params) =>
-        axios.post('m/checkDevice/checkDeviceInfo', params),
-    // 获取全部设备信息
-    getAllDeviceData: () =>
-        axios.post('/m/checkDevice/deviceList'),
- }
\ No newline at end of file
+}
diff --git a/web/src/assets/sign_bg.png b/web/src/assets/sign_bg.png
new file mode 100644
index 0000000..4fb6cca
--- /dev/null
+++ b/web/src/assets/sign_bg.png
Binary files differ
diff --git a/web/src/router/index.js b/web/src/router/index.js
index 5e82559..040a817 100644
--- a/web/src/router/index.js
+++ b/web/src/router/index.js
@@ -26,7 +26,7 @@
     path: '/scanDetail',
     name: 'scanDetail',
     meta: {
-      title: '大型生产设备信息'
+      title: '设备信息'
     },
     component: () => import('../views/ScanInfo/ScanDetail.vue'),
   },
diff --git a/web/src/style/element-ui.scss b/web/src/style/element-ui.scss
index fca0c63..185fb79 100644
--- a/web/src/style/element-ui.scss
+++ b/web/src/style/element-ui.scss
@@ -335,4 +335,8 @@
 }
 .el-checkbox {
   color: #fff;
+}
+
+.el-month-table td .cell{
+  color: #FFFFFF;
 }
\ No newline at end of file
diff --git a/web/src/views/EquipmentManage/EquipInfo/components/GeneralEquipment.vue b/web/src/views/EquipmentManage/EquipInfo/components/GeneralEquipment.vue
new file mode 100644
index 0000000..f49b7d3
--- /dev/null
+++ b/web/src/views/EquipmentManage/EquipInfo/components/GeneralEquipment.vue
@@ -0,0 +1,758 @@
+<template>
+  <div class="main tabs_main">
+    <div class="main_header">
+      <div class="header_item">
+        <span class="header_label">设备名称:</span>
+        <el-input v-model="bigDeviceName" clearable placeholder="请输入设备名称"></el-input>
+      </div>
+      <div class="header_item">
+        <span class="header_label">设备编号:</span>
+        <el-input v-model="bigNumber" clearable placeholder="请输入设备编号"></el-input>
+      </div>
+      <div class="header_item">
+        <el-button icon="el-icon-search" @click="searchDeviceInfoList(true)">查询</el-button>
+        <el-button class="search_btn" icon="el-icon-plus" @click="propInsert()">新增</el-button>
+        <el-button icon="el-icon-upload2" @click="exportExcel()">导出Excel</el-button>
+      </div>
+    </div>
+    <div class="main_content">
+      <el-table
+        v-loading="loading"
+        :data="generalList"
+        height="100%">
+        <el-table-column label="序号" width="55" align="center">
+          <template #default="scope">
+            <span>{{(pageNum - 1) * pageSize + scope.$index + 1}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="bigDeviceName" label="设备名称" align="center" width="200"></el-table-column>
+        <el-table-column prop="bigDeviceModel" label="规格型号" align="center" width="200"></el-table-column>
+        <el-table-column prop="bigNumber" label="设备编号" align="center" width="200"></el-table-column>
+        <el-table-column prop="manufacturer" label="生产厂家" align="center" width="200"></el-table-column>
+        <el-table-column prop="dateOfProduction" label="出厂年月" align="center"></el-table-column>
+        <el-table-column prop="useYearMonth" label="使用年月" align="center"></el-table-column>
+        <el-table-column prop="useLife" label="使用年限" align="center"></el-table-column>
+        <el-table-column prop="shapeSize" label="外形尺寸mm(长*宽*高)" align="center" width="200"></el-table-column>
+        <el-table-column prop="totalPower" label="总功率(KW)" align="center" width="200"></el-table-column>
+        <el-table-column prop="totalWeight" label="总重量(KG)" align="center" width="200"></el-table-column>
+        <el-table-column prop="originalValue" label="原值(元)" align="center"></el-table-column>
+        <el-table-column prop="yearDepreciationRate" label="年折旧率" align="center"></el-table-column>
+        <el-table-column prop="accumulatedDepreciation" label="已提折旧" align="center"></el-table-column>
+        <el-table-column prop="netWorth" label="净值(元)" align="center"></el-table-column>
+        <el-table-column label="使用状况" align="center">
+          <template #default="{ row }">
+            <div>
+              {{ row.useStatus ? row.useStatus === 1 ? '良好' : '老化' : '' }}
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column label="是否满足需要" align="center" width="120">
+          <template #default="{ row }">
+            <div>
+              {{ row.isNeed ? row.isNeed === 1 ? '是' : '否' : '' }}
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column prop="deviceSource" label="设备来源" align="center"></el-table-column>
+        <el-table-column prop="deviceNexus" label="设备配属关系" align="center" width="150"></el-table-column>
+        <el-table-column prop="fixedPerson" label="定机人" align="center"></el-table-column>
+        <el-table-column label="操作" align="center" width="400">
+          <template #default="{ row }">
+            <el-button class="table_btn" size="mini" @click="propUpdate(row)">查看</el-button>
+            <el-button class="table_btn" size="mini" @click="propUpdate(row)">修改</el-button>
+            <el-button class="table_btn" size="mini" @click="propPlate(row)">设备标识牌</el-button>
+            <el-button class="table_btn" size="mini" @click="propPlate(row)">打印</el-button>
+            <el-button class="delete_btn" size="mini" @click="deleteInfo(row)">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+    </div>
+    <div class="main_footer">
+      <el-pagination
+        background
+        @current-change="changePageNum"
+        @size-change="changePageSize"
+        :current-page="pageNum"
+        :page-sizes="[10, 20, 50, 100]"
+        :page-size="pageSize"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total">
+      </el-pagination>
+    </div>
+    <!-- 新增 修改 -->
+    <el-dialog
+      class="prop_dialog"
+      :title="asyncTitle ? '新增特种设备' : '修改特种设备信息'"
+      :visible.sync="asyncDevice"
+      width="35%">
+      <el-form ref="form" :model="formDevice" :rules="rulesDevice" label-width="auto" class="rule_form">
+        <el-form-item label="设备名称:" prop="bigDeviceName">
+          <el-input v-model="formDevice.bigDeviceName" clearable placeholder="请输入设备名称"></el-input>
+        </el-form-item>
+        <el-form-item label="规格型号:" prop="bigDeviceModel">
+          <el-input v-model="formDevice.bigDeviceModel" clearable placeholder="请输入规格型号"></el-input>
+        </el-form-item>
+        <el-form-item label="设备编号:" prop="bigNumber">
+          <el-input v-model="formDevice.bigNumber" clearable placeholder="请输入设备编号"></el-input>
+        </el-form-item>
+        <el-form-item label="生产厂家:" prop="manufacturer">
+          <el-input v-model="formDevice.manufacturer" clearable placeholder="请输入生产厂家"></el-input>
+        </el-form-item>
+        <el-form-item label="出厂年月:" prop="dateOfProduction">
+          <el-date-picker 
+            v-model="formDevice.dateOfProduction" 
+            type="month" 
+            placeholder="请选择出厂年月"
+            value-format="yyyy-MM">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="使用年月:" prop="useYearMonth">
+          <el-date-picker 
+            v-model="formDevice.useYearMonth" 
+            type="month" 
+            placeholder="请选择使用年月"
+            value-format="yyyy-MM">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="使用年限:" prop="useLife">
+          <el-input-number 
+            v-model="formDevice.useLife" 
+            :controls="false"
+            :min="0"
+            placeholder="请输入使用年限">
+          </el-input-number>
+        </el-form-item>
+        <el-form-item label="外形尺寸:" prop="shapeSize">
+          <div class="form_flex">
+            <el-input-number 
+              v-model="formDevice.shapeSize" 
+              :controls="false"
+              :min="0"
+              placeholder="请输入外形尺寸">
+            </el-input-number>
+            <span class="form_flex_slot" style="min-width: 120px">mm(长*宽*高)</span>
+          </div>
+        </el-form-item>
+        <el-form-item label="总功率:" prop="totalPower">
+          <div class="form_flex">
+            <el-input-number 
+              v-model="formDevice.totalPower" 
+              :controls="false"
+              :min="0"
+              placeholder="请输入总功率">
+            </el-input-number>
+            <span class="form_flex_slot">KW</span>
+          </div>
+        </el-form-item>
+        <el-form-item label="总重量:" prop="totalWeight">
+          <div class="form_flex">
+            <el-input-number 
+              v-model="formDevice.totalWeight" 
+              :controls="false"
+              :min="0"
+              placeholder="请输入总重量">
+            </el-input-number>
+            <span class="form_flex_slot">KG</span>
+          </div>
+        </el-form-item>
+        <el-form-item label="原值:" prop="originalValue">
+          <div class="form_flex">
+            <el-input-number 
+              v-model="formDevice.originalValue" 
+              :controls="false"
+              :min="0"
+              placeholder="请输入原值">
+            </el-input-number>
+            <span class="form_flex_slot">元</span>
+          </div>
+        </el-form-item>
+        <el-form-item label="年折旧率:" prop="yearDepreciationRate">
+          <el-input-number 
+            v-model="formDevice.yearDepreciationRate" 
+            :controls="false"
+            :min="0"
+            placeholder="请输入年折旧率">
+          </el-input-number>
+        </el-form-item>
+        <el-form-item label="已提折旧:" prop="accumulatedDepreciation">
+          <el-input v-model="formDevice.accumulatedDepreciation" clearable placeholder="请输入已提折旧"></el-input>
+        </el-form-item>
+        <el-form-item label="净值:" prop="netWorth">
+          <div class="form_flex">
+            <el-input-number 
+              v-model="formDevice.netWorth" 
+              :controls="false"
+              :min="0"
+              placeholder="请输入净值">
+            </el-input-number>
+            <span class="form_flex_slot">元</span>
+          </div>
+        </el-form-item>
+        <el-form-item label="使用状况:" prop="useStatus">
+          <el-radio-group v-model="formDevice.useStatus">
+            <el-radio :label="1">良好</el-radio>
+            <el-radio :label="2">老化</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="是否满足需要:" prop="isNeed">
+          <el-radio-group v-model="formDevice.isNeed">
+            <el-radio :label="1">是</el-radio>
+            <el-radio :label="2">否</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="设备来源:" prop="deviceSource">
+          <el-input v-model="formDevice.deviceSource" clearable placeholder="请输入设备来源"></el-input>
+        </el-form-item>
+        <el-form-item label="设备配属关系:" prop="deviceNexus">
+          <el-input v-model="formDevice.deviceNexus" clearable placeholder="请输入设备配属关系"></el-input>
+        </el-form-item>
+        <el-form-item label="定机人:" prop="fixedPerson">
+          <el-select v-model="formDevice.fixedPerson" clearable placeholder="请选择定机人">
+            <el-option
+              v-for="item in plateUserData"
+              :key="item.userId"
+              :label="item.realName"
+              :value="item.realName">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="责任人:" prop="userId">
+          <el-select v-model="formDevice.userId" clearable placeholder="请选择责任人" @change="changePerson">
+            <el-option
+              v-for="item in plateUserData"
+              :key="item.userId"
+              :label="item.realName"
+              :value="item.userId">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="责任人联系电话:" prop="zrrPhone">
+          <el-input v-model="formDevice.zrrPhone" disabled placeholder="请输入责任人联系电话"></el-input>
+        </el-form-item>
+        <el-form-item label="管理员联系电话:" prop="adminPhone">
+          <el-input v-model="formDevice.adminPhone" clearable placeholder="请输入管理员联系电话:"></el-input>
+        </el-form-item>
+        <el-form-item label="备注:">
+          <el-input 
+            v-model="formDevice.bigNotes" 
+            clearable 
+            placeholder="请输入备注"
+            type="textarea">
+          </el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer">
+        <el-button @click="asyncDevice = false">取 消</el-button>
+        <el-button class="submit_btn" @click="asyncTitle ? submitInsertForm() : submitUpdateForm()">提 交</el-button>
+      </div>
+    </el-dialog>
+    <!-- 设备标识牌 -->
+    <el-dialog
+      class="prop_dialog"
+      title="设备标识牌"
+      :visible.sync="asyncPlate"
+      width="50%">
+      <div class="prop_plate">
+        <div class="prop_plate_header">
+          <img :src="`${baseUrl}/materials/steelPrint/test?bigDeviceId=${bigDeviceId}&type=1`" width="100px" height="100px">
+          <span>设备标识牌</span>
+        </div>
+        <div class="prop_plate_content">
+          <div 
+            v-for="item in plateList"
+            :key="item.id"
+            class="plate_item">
+            <span>{{item.label}}</span>
+            <span>{{plateData[item.value]}}</span>
+          </div>
+        </div>
+        <div class="prop_plate_footer">
+          <img src="../../../../assets/logos.png" width="44px" height="35px">
+          <span>中铁十四局集团房桥有限公司胶东分公司</span>
+        </div>
+      </div>
+      <div slot="footer">
+        <el-button @click="asyncPlate = false">取 消</el-button>
+        <el-button class="submit_btn" @click="asyncPlate = false">打 印</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { buttonPinia } from '../../../../pinia/index';
+import { downFiles, throttle } from '../../../../plugins/public';
+  export default {
+    name: 'SpecialEquipment',
+    data() {
+      return {
+        bigDeviceName: '',
+        bigNumber: '',
+        pageNum: 1,
+        pageSize: 10,
+        total: 0,
+        loading: false,
+        generalList: [],
+        asyncTitle: true, // true 新增  false 修改
+        asyncDevice: false,
+        formDevice: {},
+        rulesDevice: {
+          bigDeviceName: [{
+            required: true,
+            message: '请输入设备名称',
+            trigger: 'blur'
+          }],
+          bigDeviceModel: [{
+            required: true,
+            message: '请输入规格型号',
+            trigger: 'blur'
+          }],
+          bigNumber: [{
+            required: true,
+            message: '请输入设备编号',
+            trigger: 'blur'
+          }],
+          manufacturer: [{
+            required: true,
+            message: '请输入生产厂家',
+            trigger: 'blur'
+          }],
+          dateOfProduction: [{
+            required: true,
+            message: '请选择出厂年月',
+            trigger: ['blur', 'change']
+          }],
+          useYearMonth: [{
+            required: true,
+            message: '请选择使用年月',
+            trigger: ['blur', 'change']
+          }],
+          useLife: [{
+            required: true,
+            message: '请输入使用年限',
+            trigger: 'blur'
+          }],
+          shapeSize: [{
+            required: true,
+            message: '请输入外形尺寸',
+            trigger: 'blur'
+          }],
+          totalPower: [{
+            required: true,
+            message: '请输入总功率',
+            trigger: 'blur'
+          }],
+          totalWeight: [{
+            required: true,
+            message: '请输入总重量',
+            trigger: 'blur'
+          }],
+          originalValue: [{
+            required: true,
+            message: '请输入原值',
+            trigger: 'blur'
+          }],
+          yearDepreciationRate: [{
+            required: true,
+            message: '请输入年折旧率',
+            trigger: 'blur'
+          }],
+          accumulatedDepreciation: [{
+            required: true,
+            message: '请输入已提折旧',
+            trigger: 'blur'
+          }],
+          netWorth: [{
+            required: true,
+            message: '请输入净值',
+            trigger: 'blur'
+          }],
+          useStatus: [{
+            required: true,
+            message: '请选择使用状况',
+            trigger: ['blur', 'change']
+          }],
+          isNeed: [{
+            required: true,
+            message: '请选择是否满足需要',
+            trigger: ['blur', 'change']
+          }],
+          deviceSource: [{
+            required: true,
+            message: '请输入设备来源',
+            trigger: 'blur'
+          }],
+          deviceNexus: [{
+            required: true,
+            message: '请输入设备配属关系',
+            trigger: 'blur'
+          }],
+          fixedPerson: [{
+            required: true,
+            message: '请选择定机人',
+            trigger: ['blur', 'change']
+          }],
+          adminPhone: [{
+            required: true,
+            message: '请输入管理员联系电话',
+            trigger: 'blur'
+          }],
+          userId: [{
+            required: true,
+            message: '请选择责任人',
+            trigger: ['blur', 'change']
+          }],
+          zrrPhone: [{
+            required: true,
+            message: '请输入责任人联系电话',
+            trigger: 'blur'
+          }, {
+            validator: (rule, value, callback) => {
+              const reg = /^1[3456789]\d{9}$/
+              if(reg.test(value)) {
+                callback()
+              } else {
+                callback(new Error('请输入正确的电话格式'))
+              }
+            },
+            trigger: 'blur'
+          }]
+        },
+        baseUrl: process.env.VUE_APP_BASE_URL,
+        asyncPlate: false,
+        bigDeviceId: '',
+        plateList: [{
+          id: 1,
+          label: '设备名称',
+          value: 'bigDeviceName'
+        },{
+          id: 2,
+          label: '编号',
+          value: 'bigNumber'
+        },{
+          id: 3,
+          label: '规格型号',
+          value: 'bigDeviceModel'
+        },{
+          id: 4,
+          label: '生产厂家',
+          value: 'manufacturer'
+        },{
+          id: 5,
+          label: '设备状态',
+          value: 'useStatusName'
+        },{
+          id: 6,
+          label: '责任人',
+          value: 'realName'
+        },{
+          id: 7,
+          label: '设备管理员联系方式',
+          value: 'adminPhone'
+        },{
+          id: 8,
+          label: '责任人联系方式',
+          value: 'zrrPhone'
+        }],
+        plateData: {},
+        plateUserData: []
+      }
+    },
+    mounted() {
+      this.searchDeviceInfoList(true);
+    },
+    methods: {
+      // 获取全部人员
+      async getAllPlatUserpulldown() {
+        const { data } = await this.$api.Personnerl.GETSTAFFALLDATA();
+        this.plateUserData = data;
+      },
+      // 查询特种设备信息
+      searchDeviceInfoList(bol) {
+        if(bol) {
+          this.pageNum = 1;
+        }
+        this.loading = true;
+        this.generalList = [];
+        this.$api.Device.searchDeviceInfoList({
+          pageNum: this.pageNum,
+          pageSize: this.pageSize,
+          bigType: 2,
+          bigDeviceName: this.bigDeviceName,
+          bigNumber: this.bigNumber
+        }).then((result) => {
+          if(result.success) {
+            this.total = result.data.total;
+            this.generalList = result.data.list;
+          }
+          this.loading = false;
+        }).catch(() => {
+          this.loading = false;
+        });
+      },
+      // 打开添加信息
+      propInsert() {
+        this.asyncTitle = true;
+        this.asyncDevice  = true;
+      },
+      // 打开修改信息
+      propUpdate(row) {
+        this.asyncTitle = false;
+        this.asyncDevice = true;
+        this.$api.Device.getDeviceDetails({
+          bigDeviceId : row.bigDeviceId
+        }).then((res) => {
+          this.$set(this.formDevice, 'bigDeviceId', res.data.bigDeviceId);
+          this.$set(this.formDevice, 'bigDeviceName', res.data.bigDeviceName);
+          this.$set(this.formDevice, 'bigDeviceModel', res.data.bigDeviceModel);
+          this.$set(this.formDevice, 'bigNumber', res.data.bigNumber);
+          this.$set(this.formDevice, 'manufacturer', res.data.manufacturer);
+          this.$set(this.formDevice, 'dateOfProduction', res.data.dateOfProduction);
+          this.$set(this.formDevice, 'useYearMonth', res.data.useYearMonth);
+          this.$set(this.formDevice, 'useLife', res.data.useLife);
+          this.$set(this.formDevice, 'shapeSize', res.data.shapeSize);
+          this.$set(this.formDevice, 'totalPower', res.data.totalPower);
+          this.$set(this.formDevice, 'totalWeight', res.data.totalWeight);
+          this.$set(this.formDevice, 'originalValue', res.data.originalValue);
+          this.$set(this.formDevice, 'yearDepreciationRate', res.data.yearDepreciationRate);
+          this.$set(this.formDevice, 'accumulatedDepreciation', res.data.accumulatedDepreciation);
+          this.$set(this.formDevice, 'netWorth', res.data.netWorth);
+          this.$set(this.formDevice, 'useStatus', res.data.useStatus);
+          this.$set(this.formDevice, 'isNeed', res.data.isNeed);
+          this.$set(this.formDevice, 'deviceSource', res.data.deviceSource);
+          this.$set(this.formDevice, 'deviceNexus', res.data.deviceNexus);
+          this.$set(this.formDevice, 'fixedPerson', res.data.fixedPerson);
+          this.$set(this.formDevice, 'userId', res.data.userId);
+          this.$set(this.formDevice, 'zrrPhone', res.data.zrrPhone);
+          this.$set(this.formDevice, 'adminPhone', res.data.adminPhone);
+          this.$set(this.formDevice, 'bigNotes', res.data.bigNotes);
+        })
+      },
+      // 查看设备标识牌
+      propPlate(row) {
+        this.bigDeviceId = row.bigDeviceId;
+        this.asyncPlate = true;
+        this.$api.Device.getDeviceDetails({
+          bigDeviceId : row.bigDeviceId
+        }).then(res => {
+          this.plateData = res.data;
+        })
+      },
+      // 删除设备信息
+      deleteInfo(row) {
+        this.$confirm("该操作将删除该设备信息,是否继续删除?", "提示", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+       })
+       .then(() => {
+         this.$api.Device.deleteDeviceInfo({
+          bigDeviceId: row.bigDeviceId
+         })
+        .then(res => {
+          if(res.statusMsg === 'ok') {
+            this.searchDeviceInfoList(true);
+            this.$message.success("删除成功!");
+          } else {
+            this.$message.warning(res.statusMsg);
+          }
+        })
+       })
+       .catch(() => {
+         this.$message.warning("您已取消");
+       })
+      },
+      // 导出
+      exportExcel() {
+        this.$api.Device.exportDeviceExcel({
+          bigType: 2,
+          bigDeviceName: this.bigDeviceName,
+          bigNumber: this.bigNumber
+        }).then(res => {
+          downFiles(res, '一般设备信息', 'xls')
+        })
+      },
+      // 提交添加信息
+      submitInsertForm: throttle(function() {
+        this.$refs.form.validate((valid) => {
+          if(valid) {
+            const params = Object.assign({}, this.formDevice);
+            params.bigType = 2;
+            this.$api.Device.insertDeviceInfo(params).then((res) => {
+              if(res.success) {
+                this.asyncDevice = false;
+                this.$message.success('添加成功!');
+                this.searchDeviceInfoList(true);
+              } else {
+                this.$message.warning(res.statusMsg);
+              }
+            })
+          }
+        })
+      }, 3000),
+      // 提交修改信息
+      submitUpdateForm: throttle(function() {
+        this.$refs.form.validate((valid) => {
+          if(valid) {
+            const params = Object.assign({}, this.formDevice);
+            params.bigType = 2;
+            this.$api.Device.updateDeviceInfo(params).then((res) => {
+              if(res.success) {
+                this.asyncDevice = false;
+                this.$message.success('修改成功!');
+                this.searchDeviceInfoList(true);
+              } else {
+                this.$message.warning(res.statusMsg);
+              }
+            })
+          }
+        })
+      }, 3000),
+      // 
+      changePerson(data) {
+        if(data) {
+          const dataInfo = this.plateUserData.find(item => item.userId == data);
+          this.$set(this.formDevice, 'zrrPhone', dataInfo.phone);
+        } else {
+          this.$set(this.formDevice, 'zrrPhone', '');
+        }
+        
+      },
+      // 切换页数
+      changePageNum(page) {
+        this.pageNum = page;
+        this.searchDeviceInfoList();
+      },
+      // 切换每页条数
+      changePageSize(size) {
+        this.pageSize = size;
+        this.searchDeviceInfoList();
+      },
+      // 判断按钮权限信息
+      showButton(str) {
+        const pinia = buttonPinia();
+        return pinia.$state.buttonInfo.includes(str);
+      },
+    },
+    watch: {
+      asyncDevice(bol) {
+        if(!bol) {
+          this.formDevice = {};
+          this.$refs.form.resetFields();
+        } else {
+          this.getAllPlatUserpulldown();
+        }
+      },
+      asyncPlate(bol) {
+        if(!bol) {
+          this.plateData = {};
+        }
+      }
+    }
+  }
+</script>
+
+<style lang="scss" scoped>
+@import'@/style/layout-main.scss';
+
+.form_flex {
+  display: flex;
+  align-items: center;
+  width: 100%;
+
+  .form_flex_slot {
+    padding: 0 10px;;
+    min-width: 60px;
+    white-space: nowrap;
+    text-align: center;
+    color: #EAEAEA;
+    background: #0B5274;
+    border: 1px solid #1B428F;
+    border-radius: 0 2px 2px 0;
+  }
+}
+
+.prop_plate {
+  padding: 0 15px 10px 0;
+  height: 500px;
+
+  .prop_plate_header {
+    position: relative;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    height: 120px;
+    background: #153876;
+
+    img {
+      position: absolute;
+      top: 50%;
+      left: 35px;
+      transform: translateY(-50%);
+    }
+
+    span {
+      color: #FFFFFF;
+      font-size: 70px;
+      font-weight: 600;
+      letter-spacing: 32px;
+    }
+  }
+
+  .prop_plate_content {
+    position: relative;
+    display: flex;
+    flex-wrap: wrap;
+    padding: 40px 0;
+    height: 320px;
+    background: #FFFFFF;
+
+    &::before {
+      content: '';
+      position: absolute;
+      top: 2px;
+      width: 100%;
+      height: 100%;
+      background: url('../../../../assets/sign_bg.png') no-repeat;
+      background-size: 100% 100%;
+    }
+
+    .plate_item {
+      display: flex;
+      align-items: center;
+      padding: 5px 0 8px;
+      margin: 5px 20px 10px;
+      width: calc(50% - 40px);
+      color: #050402;
+      font-size: 22px;
+      letter-spacing: 2px;
+      border-bottom: 1px solid #E4E4E4;
+
+      & > span:last-child {
+        padding-left: 20px;
+        color: #555;
+        letter-spacing: 0;
+      } 
+    }
+  }
+
+  .prop_plate_footer {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    height: 50px;
+    color: #000;
+    font-size: 16px;
+    letter-spacing: 2px;
+    background: #FFFFFF;
+
+    span {
+      margin-left: 10px;
+    }
+  }
+}
+
+/deep/ .el-radio {
+  padding:  10px 0;
+}
+</style>
\ No newline at end of file
diff --git a/web/src/views/EquipmentManage/EquipInfo/components/SpecialEquipment.vue b/web/src/views/EquipmentManage/EquipInfo/components/SpecialEquipment.vue
new file mode 100644
index 0000000..9d29a66
--- /dev/null
+++ b/web/src/views/EquipmentManage/EquipInfo/components/SpecialEquipment.vue
@@ -0,0 +1,759 @@
+<template>
+  <div class="main tabs_main">
+    <div class="main_header">
+      <div class="header_item">
+        <span class="header_label">设备名称:</span>
+        <el-input v-model="bigDeviceName" clearable placeholder="请输入设备名称"></el-input>
+      </div>
+      <div class="header_item">
+        <span class="header_label">设备编号:</span>
+        <el-input v-model="bigNumber" clearable placeholder="请输入设备编号"></el-input>
+      </div>
+      <div class="header_item">
+        <el-button icon="el-icon-search" @click="searchDeviceInfoList(true)">查询</el-button>
+        <el-button class="search_btn" icon="el-icon-plus" @click="propInsert()">新增</el-button>
+        <el-button icon="el-icon-upload2" @click="exportExcel()">导出Excel</el-button>
+      </div>
+    </div>
+    <div class="main_content">
+      <el-table
+        v-loading="loading"
+        :data="specialList"
+        height="100%">
+        <el-table-column label="序号" width="55" align="center">
+          <template #default="scope">
+            <span>{{(pageNum - 1) * pageSize + scope.$index + 1}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="bigDeviceName" label="设备名称" align="center" width="200"></el-table-column>
+        <el-table-column prop="bigDeviceModel" label="规格型号" align="center" width="200"></el-table-column>
+        <el-table-column prop="bigNumber" label="设备编号" align="center" width="200"></el-table-column>
+        <el-table-column prop="manufacturer" label="生产厂家" align="center" width="200"></el-table-column>
+        <el-table-column prop="dateOfProduction" label="出厂年月" align="center"></el-table-column>
+        <el-table-column prop="useYearMonth" label="使用年月" align="center"></el-table-column>
+        <el-table-column prop="useLife" label="使用年限" align="center"></el-table-column>
+        <el-table-column prop="shapeSize" label="外形尺寸mm(长*宽*高)" align="center" width="200"></el-table-column>
+        <el-table-column prop="totalPower" label="总功率(KW)" align="center" width="200"></el-table-column>
+        <el-table-column prop="totalWeight" label="总重量(KG)" align="center" width="200"></el-table-column>
+        <el-table-column prop="originalValue" label="原值(元)" align="center"></el-table-column>
+        <el-table-column prop="yearDepreciationRate" label="年折旧率" align="center"></el-table-column>
+        <el-table-column prop="accumulatedDepreciation" label="已提折旧" align="center"></el-table-column>
+        <el-table-column prop="netWorth" label="净值(元)" align="center"></el-table-column>
+        <el-table-column label="使用状况" align="center">
+          <template #default="{ row }">
+            <div>
+              {{ row.useStatus ? row.useStatus === 1 ? '良好' : '老化' : '' }}
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column label="是否满足需要" align="center" width="120">
+          <template #default="{ row }">
+            <div>
+              {{ row.isNeed ? row.isNeed === 1 ? '是' : '否' : '' }}
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column prop="deviceSource" label="设备来源" align="center"></el-table-column>
+        <el-table-column prop="deviceNexus" label="设备配属关系" align="center" width="150"></el-table-column>
+        <el-table-column prop="fixedPerson" label="定机人" align="center"></el-table-column>
+        <el-table-column label="操作" align="center" width="400">
+          <template #default="{ row }">
+            <el-button class="table_btn" size="mini" @click="propUpdate(row)">查看</el-button>
+            <el-button class="table_btn" size="mini" @click="propUpdate(row)">修改</el-button>
+            <el-button class="table_btn" size="mini" @click="propPlate(row)">设备标识牌</el-button>
+            <el-button class="table_btn" size="mini" @click="propPlate(row)">打印</el-button>
+            <el-button class="delete_btn" size="mini" @click="deleteInfo(row)">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+    </div>
+    <div class="main_footer">
+      <el-pagination
+        background
+        @current-change="changePageNum"
+        @size-change="changePageSize"
+        :current-page="pageNum"
+        :page-sizes="[10, 20, 50, 100]"
+        :page-size="pageSize"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total">
+      </el-pagination>
+    </div>
+    <!-- 新增 修改 -->
+    <el-dialog
+      class="prop_dialog"
+      :title="asyncTitle ? '新增特种设备' : '修改特种设备信息'"
+      :visible.sync="asyncDevice"
+      width="35%">
+      <el-form ref="form" :model="formDevice" :rules="rulesDevice" label-width="auto" class="rule_form">
+        <el-form-item label="设备名称:" prop="bigDeviceName">
+          <el-input v-model="formDevice.bigDeviceName" clearable placeholder="请输入设备名称"></el-input>
+        </el-form-item>
+        <el-form-item label="规格型号:" prop="bigDeviceModel">
+          <el-input v-model="formDevice.bigDeviceModel" clearable placeholder="请输入规格型号"></el-input>
+        </el-form-item>
+        <el-form-item label="设备编号:" prop="bigNumber">
+          <el-input v-model="formDevice.bigNumber" clearable placeholder="请输入设备编号"></el-input>
+        </el-form-item>
+        <el-form-item label="生产厂家:" prop="manufacturer">
+          <el-input v-model="formDevice.manufacturer" clearable placeholder="请输入生产厂家"></el-input>
+        </el-form-item>
+        <el-form-item label="出厂年月:" prop="dateOfProduction">
+          <el-date-picker 
+            v-model="formDevice.dateOfProduction" 
+            type="month" 
+            placeholder="请选择出厂年月"
+            value-format="yyyy-MM">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="使用年月:" prop="useYearMonth">
+          <el-date-picker 
+            v-model="formDevice.useYearMonth" 
+            type="month" 
+            placeholder="请选择使用年月"
+            value-format="yyyy-MM">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="使用年限:" prop="useLife">
+          <el-input-number 
+            v-model="formDevice.useLife" 
+            :controls="false"
+            :min="0"
+            placeholder="请输入使用年限">
+          </el-input-number>
+        </el-form-item>
+        <el-form-item label="外形尺寸:" prop="shapeSize">
+          <div class="form_flex">
+            <el-input-number 
+              v-model="formDevice.shapeSize" 
+              :controls="false"
+              :min="0"
+              placeholder="请输入外形尺寸">
+            </el-input-number>
+            <span class="form_flex_slot" style="min-width: 120px">mm(长*宽*高)</span>
+          </div>
+        </el-form-item>
+        <el-form-item label="总功率:" prop="totalPower">
+          <div class="form_flex">
+            <el-input-number 
+              v-model="formDevice.totalPower" 
+              :controls="false"
+              :min="0"
+              placeholder="请输入总功率">
+            </el-input-number>
+            <span class="form_flex_slot">KW</span>
+          </div>
+        </el-form-item>
+        <el-form-item label="总重量:" prop="totalWeight">
+          <div class="form_flex">
+            <el-input-number 
+              v-model="formDevice.totalWeight" 
+              :controls="false"
+              :min="0"
+              placeholder="请输入总重量">
+            </el-input-number>
+            <span class="form_flex_slot">KG</span>
+          </div>
+        </el-form-item>
+        <el-form-item label="原值:" prop="originalValue">
+          <div class="form_flex">
+            <el-input-number 
+              v-model="formDevice.originalValue" 
+              :controls="false"
+              :min="0"
+              placeholder="请输入原值">
+            </el-input-number>
+            <span class="form_flex_slot">元</span>
+          </div>
+        </el-form-item>
+        <el-form-item label="年折旧率:" prop="yearDepreciationRate">
+          <el-input-number 
+            v-model="formDevice.yearDepreciationRate" 
+            :controls="false"
+            :min="0"
+            placeholder="请输入年折旧率">
+          </el-input-number>
+        </el-form-item>
+        <el-form-item label="已提折旧:" prop="accumulatedDepreciation">
+          <el-input v-model="formDevice.accumulatedDepreciation" clearable placeholder="请输入已提折旧"></el-input>
+        </el-form-item>
+        <el-form-item label="净值:" prop="netWorth">
+          <div class="form_flex">
+            <el-input-number 
+              v-model="formDevice.netWorth" 
+              :controls="false"
+              :min="0"
+              placeholder="请输入净值">
+            </el-input-number>
+            <span class="form_flex_slot">元</span>
+          </div>
+        </el-form-item>
+        <el-form-item label="使用状况:" prop="useStatus">
+          <el-radio-group v-model="formDevice.useStatus">
+            <el-radio :label="1">良好</el-radio>
+            <el-radio :label="2">老化</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="是否满足需要:" prop="isNeed">
+          <el-radio-group v-model="formDevice.isNeed">
+            <el-radio :label="1">是</el-radio>
+            <el-radio :label="2">否</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="设备来源:" prop="deviceSource">
+          <el-input v-model="formDevice.deviceSource" clearable placeholder="请输入设备来源"></el-input>
+        </el-form-item>
+        <el-form-item label="设备配属关系:" prop="deviceNexus">
+          <el-input v-model="formDevice.deviceNexus" clearable placeholder="请输入设备配属关系"></el-input>
+        </el-form-item>
+        <el-form-item label="定机人:" prop="fixedPerson">
+          <el-select v-model="formDevice.fixedPerson" clearable placeholder="请选择定机人">
+            <el-option
+              v-for="item in plateUserData"
+              :key="item.userId"
+              :label="item.realName"
+              :value="item.realName">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="责任人:" prop="userId">
+          <el-select v-model="formDevice.userId" clearable placeholder="请选择责任人" @change="changePerson">
+            <el-option
+              v-for="item in plateUserData"
+              :key="item.userId"
+              :label="item.realName"
+              :value="item.userId">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="责任人联系电话:" prop="zrrPhone">
+          <el-input v-model="formDevice.zrrPhone" disabled placeholder="请输入责任人联系电话"></el-input>
+        </el-form-item>
+        <el-form-item label="管理员联系电话:" prop="adminPhone">
+          <el-input v-model="formDevice.adminPhone" clearable placeholder="请输入管理员联系电话:"></el-input>
+        </el-form-item>
+        <el-form-item label="备注:">
+          <el-input 
+            v-model="formDevice.bigNotes" 
+            clearable 
+            placeholder="请输入备注"
+            type="textarea">
+          </el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer">
+        <el-button @click="asyncDevice = false">取 消</el-button>
+        <el-button class="submit_btn" @click="asyncTitle ? submitInsertForm() : submitUpdateForm()">提 交</el-button>
+      </div>
+    </el-dialog>
+    <!-- 设备标识牌 -->
+    <el-dialog
+      class="prop_dialog"
+      title="设备标识牌"
+      :visible.sync="asyncPlate"
+      width="50%">
+      <div class="prop_plate">
+        <div class="prop_plate_header">
+          <img :src="`${baseUrl}/materials/steelPrint/test?bigDeviceId=${bigDeviceId}&type=1`" width="100px" height="100px">
+          <span>设备标识牌</span>
+        </div>
+        <div class="prop_plate_content">
+          <div 
+            v-for="item in plateList"
+            :key="item.id"
+            class="plate_item">
+            <span>{{item.label}}</span>
+            <span>{{plateData[item.value]}}</span>
+          </div>
+        </div>
+        <div class="prop_plate_footer">
+          <img src="../../../../assets/logos.png" width="44px" height="35px">
+          <span>中铁十四局集团房桥有限公司胶东分公司</span>
+        </div>
+      </div>
+      <div slot="footer">
+        <el-button @click="asyncPlate = false">取 消</el-button>
+        <el-button class="submit_btn" @click="asyncPlate = false">打 印</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { buttonPinia } from '../../../../pinia/index';
+import { throttle } from '../../../../plugins/public';
+import { downFiles } from '@/plugins/public';
+  export default {
+    name: 'SpecialEquipment',
+    data() {
+      return {
+        bigDeviceName: '',
+        bigNumber: '',
+        pageNum: 1,
+        pageSize: 10,
+        total: 0,
+        loading: false,
+        specialList: [],
+        asyncTitle: true, // true 新增  false 修改
+        asyncDevice: false,
+        formDevice: {},
+        rulesDevice: {
+          bigDeviceName: [{
+            required: true,
+            message: '请输入设备名称',
+            trigger: 'blur'
+          }],
+          bigDeviceModel: [{
+            required: true,
+            message: '请输入规格型号',
+            trigger: 'blur'
+          }],
+          bigNumber: [{
+            required: true,
+            message: '请输入设备编号',
+            trigger: 'blur'
+          }],
+          manufacturer: [{
+            required: true,
+            message: '请输入生产厂家',
+            trigger: 'blur'
+          }],
+          dateOfProduction: [{
+            required: true,
+            message: '请选择出厂年月',
+            trigger: ['blur', 'change']
+          }],
+          useYearMonth: [{
+            required: true,
+            message: '请选择使用年月',
+            trigger: ['blur', 'change']
+          }],
+          useLife: [{
+            required: true,
+            message: '请输入使用年限',
+            trigger: 'blur'
+          }],
+          shapeSize: [{
+            required: true,
+            message: '请输入外形尺寸',
+            trigger: 'blur'
+          }],
+          totalPower: [{
+            required: true,
+            message: '请输入总功率',
+            trigger: 'blur'
+          }],
+          totalWeight: [{
+            required: true,
+            message: '请输入总重量',
+            trigger: 'blur'
+          }],
+          originalValue: [{
+            required: true,
+            message: '请输入原值',
+            trigger: 'blur'
+          }],
+          yearDepreciationRate: [{
+            required: true,
+            message: '请输入年折旧率',
+            trigger: 'blur'
+          }],
+          accumulatedDepreciation: [{
+            required: true,
+            message: '请输入已提折旧',
+            trigger: 'blur'
+          }],
+          netWorth: [{
+            required: true,
+            message: '请输入净值',
+            trigger: 'blur'
+          }],
+          useStatus: [{
+            required: true,
+            message: '请选择使用状况',
+            trigger: ['blur', 'change']
+          }],
+          isNeed: [{
+            required: true,
+            message: '请选择是否满足需要',
+            trigger: ['blur', 'change']
+          }],
+          deviceSource: [{
+            required: true,
+            message: '请输入设备来源',
+            trigger: 'blur'
+          }],
+          deviceNexus: [{
+            required: true,
+            message: '请输入设备配属关系',
+            trigger: 'blur'
+          }],
+          fixedPerson: [{
+            required: true,
+            message: '请选择定机人',
+            trigger: ['blur', 'change']
+          }],
+          adminPhone: [{
+            required: true,
+            message: '请输入管理员联系电话',
+            trigger: 'blur'
+          }],
+          userId: [{
+            required: true,
+            message: '请选择责任人',
+            trigger: ['blur', 'change']
+          }],
+          zrrPhone: [{
+            required: true,
+            message: '请输入责任人联系电话',
+            trigger: 'blur'
+          }, {
+            validator: (rule, value, callback) => {
+              const reg = /^1[3456789]\d{9}$/
+              if(reg.test(value)) {
+                callback()
+              } else {
+                callback(new Error('请输入正确的电话格式'))
+              }
+            },
+            trigger: 'blur'
+          }]
+        },
+        baseUrl: process.env.VUE_APP_BASE_URL,
+        asyncPlate: false,
+        bigDeviceId: '',
+        plateList: [{
+          id: 1,
+          label: '设备名称',
+          value: 'bigDeviceName'
+        },{
+          id: 2,
+          label: '编号',
+          value: 'bigNumber'
+        },{
+          id: 3,
+          label: '规格型号',
+          value: 'bigDeviceModel'
+        },{
+          id: 4,
+          label: '生产厂家',
+          value: 'manufacturer'
+        },{
+          id: 5,
+          label: '设备状态',
+          value: 'useStatusName'
+        },{
+          id: 6,
+          label: '责任人',
+          value: 'realName'
+        },{
+          id: 7,
+          label: '设备管理员联系方式',
+          value: 'adminPhone'
+        },{
+          id: 8,
+          label: '责任人联系方式',
+          value: 'zrrPhone'
+        }],
+        plateData: {},
+        plateUserData: []
+      }
+    },
+    mounted() {
+      this.searchDeviceInfoList(true);
+    },
+    methods: {
+      // 获取全部人员
+      async getAllPlatUserpulldown() {
+        const { data } = await this.$api.Personnerl.GETSTAFFALLDATA();
+        this.plateUserData = data;
+      },
+      // 查询特种设备信息
+      searchDeviceInfoList(bol) {
+        if(bol) {
+          this.pageNum = 1;
+        }
+        this.loading = true;
+        this.specialList = [];
+        this.$api.Device.searchDeviceInfoList({
+          pageNum: this.pageNum,
+          pageSize: this.pageSize,
+          bigType: 1,
+          bigDeviceName: this.bigDeviceName,
+          bigNumber: this.bigNumber
+        }).then((result) => {
+          if(result.success) {
+            this.total = result.data.total;
+            this.specialList = result.data.list;
+          }
+          this.loading = false;
+        }).catch(() => {
+          this.loading = false;
+        });
+      },
+      // 打开添加信息
+      propInsert() {
+        this.asyncTitle = true;
+        this.asyncDevice  = true;
+      },
+      // 打开修改信息
+      propUpdate(row) {
+        this.asyncTitle = false;
+        this.asyncDevice = true;
+        this.$api.Device.getDeviceDetails({
+          bigDeviceId : row.bigDeviceId
+        }).then((res) => {
+          this.$set(this.formDevice, 'bigDeviceId', res.data.bigDeviceId);
+          this.$set(this.formDevice, 'bigDeviceName', res.data.bigDeviceName);
+          this.$set(this.formDevice, 'bigDeviceModel', res.data.bigDeviceModel);
+          this.$set(this.formDevice, 'bigNumber', res.data.bigNumber);
+          this.$set(this.formDevice, 'manufacturer', res.data.manufacturer);
+          this.$set(this.formDevice, 'dateOfProduction', res.data.dateOfProduction);
+          this.$set(this.formDevice, 'useYearMonth', res.data.useYearMonth);
+          this.$set(this.formDevice, 'useLife', res.data.useLife);
+          this.$set(this.formDevice, 'shapeSize', res.data.shapeSize);
+          this.$set(this.formDevice, 'totalPower', res.data.totalPower);
+          this.$set(this.formDevice, 'totalWeight', res.data.totalWeight);
+          this.$set(this.formDevice, 'originalValue', res.data.originalValue);
+          this.$set(this.formDevice, 'yearDepreciationRate', res.data.yearDepreciationRate);
+          this.$set(this.formDevice, 'accumulatedDepreciation', res.data.accumulatedDepreciation);
+          this.$set(this.formDevice, 'netWorth', res.data.netWorth);
+          this.$set(this.formDevice, 'useStatus', res.data.useStatus);
+          this.$set(this.formDevice, 'isNeed', res.data.isNeed);
+          this.$set(this.formDevice, 'deviceSource', res.data.deviceSource);
+          this.$set(this.formDevice, 'deviceNexus', res.data.deviceNexus);
+          this.$set(this.formDevice, 'fixedPerson', res.data.fixedPerson);
+          this.$set(this.formDevice, 'userId', res.data.userId);
+          this.$set(this.formDevice, 'zrrPhone', res.data.zrrPhone);
+          this.$set(this.formDevice, 'adminPhone', res.data.adminPhone);
+          this.$set(this.formDevice, 'bigNotes', res.data.bigNotes);
+        })
+      },
+      // 查看设备标识牌
+      propPlate(row) {
+        this.bigDeviceId = row.bigDeviceId;
+        this.asyncPlate = true;
+        this.$api.Device.getDeviceDetails({
+          bigDeviceId : row.bigDeviceId
+        }).then(res => {
+          this.plateData = res.data;
+        })
+      },
+      // 导出
+      exportExcel() {
+        this.$api.Device.exportDeviceExcel({
+          bigType: 1,
+          bigDeviceName: this.bigDeviceName,
+          bigNumber: this.bigNumber
+        }).then(res => {
+          downFiles(res, '特种设备信息', 'xls')
+        })
+      },
+      // 删除设备信息
+      deleteInfo(row) {
+        this.$confirm("该操作将删除该设备信息,是否继续删除?", "提示", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+       })
+       .then(() => {
+         this.$api.Device.deleteDeviceInfo({
+          bigDeviceId: row.bigDeviceId
+         })
+        .then(res => {
+          if(res.statusMsg === 'ok') {
+            this.searchDeviceInfoList(true);
+            this.$message.success("删除成功!");
+          } else {
+            this.$message.warning(res.statusMsg);
+          }
+        })
+       })
+       .catch(() => {
+         this.$message.warning("您已取消");
+       })
+      },
+      // 提交添加信息
+      submitInsertForm: throttle(function() {
+        this.$refs.form.validate((valid) => {
+          if(valid) {
+            const params = Object.assign({}, this.formDevice);
+            params.bigType = 1;
+            this.$api.Device.insertDeviceInfo(params).then((res) => {
+              if(res.success) {
+                this.asyncDevice = false;
+                this.$message.success('添加成功!');
+                this.searchDeviceInfoList(true);
+              } else {
+                this.$message.warning(res.statusMsg);
+              }
+            })
+          }
+        })
+      }, 3000),
+      // 提交修改信息
+      submitUpdateForm: throttle(function() {
+        this.$refs.form.validate((valid) => {
+          if(valid) {
+            const params = Object.assign({}, this.formDevice);
+            params.bigType = 1;
+            this.$api.Device.updateDeviceInfo(params).then((res) => {
+              if(res.success) {
+                this.asyncDevice = false;
+                this.$message.success('修改成功!');
+                this.searchDeviceInfoList(true);
+              } else {
+                this.$message.warning(res.statusMsg);
+              }
+            })
+          }
+        })
+      }, 3000),
+      // 
+      changePerson(data) {
+        if(data) {
+          const dataInfo = this.plateUserData.find(item => item.userId == data);
+          this.$set(this.formDevice, 'zrrPhone', dataInfo.phone);
+        } else {
+          this.$set(this.formDevice, 'zrrPhone', '');
+        }
+        
+      },
+      // 切换页数
+      changePageNum(page) {
+        this.pageNum = page;
+        this.searchDeviceInfoList();
+      },
+      // 切换每页条数
+      changePageSize(size) {
+        this.pageSize = size;
+        this.searchDeviceInfoList();
+      },
+      // 判断按钮权限信息
+      showButton(str) {
+        const pinia = buttonPinia();
+        return pinia.$state.buttonInfo.includes(str);
+      },
+    },
+    watch: {
+      asyncDevice(bol) {
+        if(!bol) {
+          this.formDevice = {};
+          this.$refs.form.resetFields();
+        } else {
+          this.getAllPlatUserpulldown();
+        }
+      },
+      asyncPlate(bol) {
+        if(!bol) {
+          this.plateData = {};
+        }
+      }
+    }
+  }
+</script>
+
+<style lang="scss" scoped>
+@import'@/style/layout-main.scss';
+
+.form_flex {
+  display: flex;
+  align-items: center;
+  width: 100%;
+
+  .form_flex_slot {
+    padding: 0 10px;;
+    min-width: 60px;
+    white-space: nowrap;
+    text-align: center;
+    color: #EAEAEA;
+    background: #0B5274;
+    border: 1px solid #1B428F;
+    border-radius: 0 2px 2px 0;
+  }
+}
+
+.prop_plate {
+  padding: 0 15px 10px 0;
+  height: 500px;
+
+  .prop_plate_header {
+    position: relative;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    height: 120px;
+    background: #153876;
+
+    img {
+      position: absolute;
+      top: 50%;
+      left: 35px;
+      transform: translateY(-50%);
+    }
+
+    span {
+      color: #FFFFFF;
+      font-size: 70px;
+      font-weight: 600;
+      letter-spacing: 32px;
+    }
+  }
+
+  .prop_plate_content {
+    position: relative;
+    display: flex;
+    flex-wrap: wrap;
+    padding: 40px 0;
+    height: 320px;
+    background: #FFFFFF;
+
+    &::before {
+      content: '';
+      position: absolute;
+      top: 2px;
+      width: 100%;
+      height: 100%;
+      background: url('../../../../assets/sign_bg.png') no-repeat;
+      background-size: 100% 100%;
+    }
+
+    .plate_item {
+      display: flex;
+      align-items: center;
+      padding: 5px 0 8px;
+      margin: 5px 20px 10px;
+      width: calc(50% - 40px);
+      color: #050402;
+      font-size: 22px;
+      letter-spacing: 2px;
+      border-bottom: 1px solid #E4E4E4;
+
+      & > span:last-child {
+        padding-left: 20px;
+        color: #555;
+        letter-spacing: 0;
+      } 
+    }
+  }
+
+  .prop_plate_footer {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    height: 50px;
+    color: #000;
+    font-size: 16px;
+    letter-spacing: 2px;
+    background: #FFFFFF;
+
+    span {
+      margin-left: 10px;
+    }
+  }
+}
+
+/deep/ .el-radio {
+  padding:  10px 0;
+}
+</style>
\ No newline at end of file
diff --git a/web/src/views/EquipmentManage/EquipInfo/index.vue b/web/src/views/EquipmentManage/EquipInfo/index.vue
new file mode 100644
index 0000000..9b71c6f
--- /dev/null
+++ b/web/src/views/EquipmentManage/EquipInfo/index.vue
@@ -0,0 +1,37 @@
+<template>
+  <div class="main">
+    <div class="main_tabs">
+      <el-tabs v-model="activeName">
+        <el-tab-pane label="特种设备" name="first"></el-tab-pane>
+        <el-tab-pane label="一般设备" name="second"></el-tab-pane>
+      </el-tabs>
+    </div>
+    <div class="main_content">
+      <component :is="activeName === 'first' ? 'SpecialEquipment' : 'GeneralEquipment'"></component>
+    </div>
+  </div>
+</template>
+
+<script>
+import SpecialEquipment from './components/SpecialEquipment.vue';
+import GeneralEquipment from './components/GeneralEquipment.vue';
+  export default {
+    components: {
+      SpecialEquipment,
+      GeneralEquipment
+    },
+    data() {
+      return {
+        activeName: 'first'
+      }
+    }
+  }
+</script>
+
+<style lang="scss" scoped>
+@import '../../../style/layout-main.scss';
+
+/deep/.main {
+  background: none;
+}
+</style>
\ No newline at end of file
diff --git a/web/src/views/EquipmentManage/EquipSpot.vue b/web/src/views/EquipmentManage/EquipSpot.vue
index 9feb288..5281d6d 100644
--- a/web/src/views/EquipmentManage/EquipSpot.vue
+++ b/web/src/views/EquipmentManage/EquipSpot.vue
@@ -144,7 +144,10 @@
 						required: true,
 						message: '请选择设备',
 						trigger: ['blur', 'change']
-					}]
+					}],
+          bigDeviceModel: [{
+            
+          }]
 				},
         deviceData: [],
         checkTypeData: []
@@ -300,10 +303,12 @@
       // 切换页数
       changePageNum(page) {
         this.pageNum = page;
+        this.searchSpotCheckList();
       },
       // 切换每页条数
       changePageSize(size) {
         this.pageSize = size;
+        this.searchSpotCheckList();
       }
     },
     watch: {
diff --git a/web/src/views/GreenBuild/WeldSmoke.vue b/web/src/views/GreenBuild/WeldSmoke.vue
index dc7e116..7927f60 100644
--- a/web/src/views/GreenBuild/WeldSmoke.vue
+++ b/web/src/views/GreenBuild/WeldSmoke.vue
@@ -29,25 +29,67 @@
             </div>
           </template>
         </el-table-column>
-        <el-table-column prop="bigDeviceName" label="采集时间" align="center" ></el-table-column>
-        <el-table-column prop="bigNumber" label="设备" align="center"></el-table-column>
-        <el-table-column prop="dc" label="粉尘浓度(mg/m³)" align="center" ></el-table-column>
-        <el-table-column prop="t" label="温度(℃)" align="center" ></el-table-column>
-        <el-table-column prop="dp" label="压差(pa)" align="center" ></el-table-column>
-        <el-table-column prop="oc" label="氧气浓度(%)" align="center" ></el-table-column>
-        <el-table-column prop="fans" label="风速(m/s)" align="center" ></el-table-column>
-        <el-table-column prop="alarm" label="设备报警" align="center" ></el-table-column>
-        <el-table-column label="风机启动" align="center" >
+        <el-table-column label="当前焊接机开启台数" align="center" width="150">
           <template #default="{ row }">
             <div>
-              {{row.fanrun ? row.fanrun == 1 ? '运行' : '未运行' : ''}}
+              {{row.vb0 + ' 台'}}
+            </div>
+          </template>
+        </el-table-column>
+        <template
+          v-for="(item, index) in 10">
+          <el-table-column 
+            :prop="`i${index <= 7 ? '0'+index : index + 2}`" 
+            :label="`${index + 1}#焊机开机信号`" 
+            align="center" 
+            :key="index"
+            width="150">
+          </el-table-column>
+        </template>
+        <template
+          v-for="(item, index) in 6">
+          <el-table-column 
+            :prop="`q${index <= 10 ? '0'+index : index}`" 
+            :label="`${index + 1}#除尘器运行状态`" 
+            align="center" 
+            :key="index"
+            width="150">
+          </el-table-column>
+        </template>
+        <el-table-column label="第一组除尘器延时关闭计时" align="center" width="200">
+          <template #default="{ row }">
+            <div>
+              {{row.vb10 + ' 秒'}}
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column label="第二组除尘器延时关闭计时" align="center" width="200">
+          <template #default="{ row }">
+            <div>
+              {{row.vb11 + ' 秒'}}
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column label="第三组除尘器延时关闭计时" align="center" width="200">
+          <template #default="{ row }">
+            <div>
+              {{row.vb12 + ' 秒'}}
             </div>
           </template>
         </el-table-column>
       </el-table>
     </div>
     <div class="main_footer">
-
+      <el-pagination
+        background
+        @current-change="changePageNum"
+        @size-change="changePageSize"
+        :current-page="pageNum"
+        :page-sizes="[10, 20, 50, 100]"
+        :page-size="pageSize"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total">
+      </el-pagination>
     </div>
   </div>
 </template>
@@ -91,6 +133,16 @@
         this.loading = false;
       })
     },
+    // 切换页数
+    changePageNum(page) {
+      this.pageNum = page;
+      this.searchSmokeList();
+    },
+    // 切换每页条数
+    changePageSize(size) {
+      this.pageSize = size;
+      this.searchSmokeList();
+    },
     // 判断按钮权限信息
     showButton(str) {
       const pinia = buttonPinia();
diff --git a/web/src/views/LayoutIndex/components/LayoutAside.vue b/web/src/views/LayoutIndex/components/LayoutAside.vue
index 8d29a32..04e1cc0 100644
--- a/web/src/views/LayoutIndex/components/LayoutAside.vue
+++ b/web/src/views/LayoutIndex/components/LayoutAside.vue
@@ -26,7 +26,11 @@
                       <span>{{three.meta.title}}</span>
                     </template>
                     <template v-for="items in three.children">
-                      <el-menu-item :index="items.path" :key="items.name">{{items.meta.title}}</el-menu-item>
+                      <el-menu-item
+                        :index="items.path" 
+                        :key="items.name">
+                        {{items.meta.title}}
+                      </el-menu-item>
                     </template>
                   </el-submenu>
                 </template>
@@ -133,8 +137,8 @@
 /deep/ .el-menu-item.is-active {
   padding-left: 45px!important;
   position: relative;
-  margin-left: 10px;
-  color: #3DC8FF;
+  // margin-left: 10px;
+  color: #EAEAEA;
   border-radius: 3px;
   background: linear-gradient(
   90deg, 
@@ -154,6 +158,10 @@
     }
 }
 
+.three_item {
+  background: #0B5274 !important;
+}
+
 /deep/ .el-submenu .el-submenu__title:hover {
   color: #3DC8FF;
   background: rgba(57,181,254,0.7) !important;
diff --git a/web/src/views/ScanInfo/ScanDetail.vue b/web/src/views/ScanInfo/ScanDetail.vue
index 43e06bc..3d90553 100644
--- a/web/src/views/ScanInfo/ScanDetail.vue
+++ b/web/src/views/ScanInfo/ScanDetail.vue
@@ -15,28 +15,24 @@
                 <div class="scan_row_data">{{devicesInfo&&devicesInfo.bigNumber}}</div>
             </div>
             <div class="scan_row">
-                <div class="scan_row_text">设备类型:</div>
-                <div class="scan_row_data">{{devicesInfo&&devicesInfo.bigTypeName}}</div>
-            </div>
-            <div class="scan_row">
-                <div class="scan_row_text">安装位置:</div>
-                <div class="scan_row_data">{{devicesInfo&&devicesInfo.bigPosition}}</div>
+                <div class="scan_row_text">生产厂家:</div>
+                <div class="scan_row_data">{{devicesInfo&&devicesInfo.manufacturer}}</div>
             </div>
             <div class="scan_row">
                 <div class="scan_row_text">设备状态:</div>
-                <div class="scan_row_data">{{devicesInfo&&devicesInfo.bigState===1?'在线':'离线'}}</div>
+                <div class="scan_row_data">{{devicesInfo&&devicesInfo.useStatus === 1 ? '良好' : '老化'}}</div>
             </div>
             <div class="scan_row">
                 <div class="scan_row_text">责任人:</div>
-                <div class="scan_row_data">{{devicesInfo&&devicesInfo.realName===null?'':devicesInfo.realName}}</div>
+                <div class="scan_row_data">{{devicesInfo&&devicesInfo.realName ? devicesInfo.realName : ''}}</div>
             </div>
             <div class="scan_row">
-                <div class="scan_row_text">供应商:</div>
-                <div class="scan_row_data">{{devicesInfo&&devicesInfo.supplierName}}</div>
+                <div class="scan_row_text">责任人电话:</div>
+                <div class="scan_row_data">{{devicesInfo&&devicesInfo.zrrPhone}}</div>
             </div>
             <div class="scan_row">
-                <div class="scan_row_text">钥匙柜编号:</div>
-                <div class="scan_row_data">{{devicesInfo&&devicesInfo.keyCabinet}}</div>
+                <div class="scan_row_text">设备管理员联系方式:</div>
+                <div class="scan_row_data">{{devicesInfo&&devicesInfo.adminPhone}}</div>
             </div>
             <div class="scan_row">
                 <div class="scan_row_text">使用年限:</div>
@@ -60,8 +56,8 @@
         //获取设备信息
         getDeviceInnfo(){
             this.url = window.location.href.split('?')[1].split('=')[1]
-            window.document.title="大型生产设备"
-            this.$api.Device.detailsBigDevice({bigDeviceId:this.url}).then(res=>{
+            window.document.title="设备信息"
+            this.$api.Device.getDeviceDetails({bigDeviceId: this.url}).then(res=>{
                 if(res.statusMsg === 'ok'){
                     this.devicesInfo = res.data
                 }else{

--
Gitblit v1.9.3