whx 6 kuukautta sitten
vanhempi
commit
dfd6872ee1
60 muutettua tiedostoa jossa 964 lisäystä ja 575 poistoa
  1. BIN
      virgo.wzfrontend/console/public/assets/model/yuanzhui.fbx
  2. 26 0
      virgo.wzfrontend/console/src/assets/scss/index.scss
  3. 6 2
      virgo.wzfrontend/console/src/components/flow/flowDetail.vue
  4. 46 0
      virgo.wzfrontend/console/src/config/demo1.js
  5. 88 21
      virgo.wzfrontend/console/src/uitls/controls.js
  6. 201 63
      virgo.wzfrontend/console/src/views/work/bim/distribution.vue
  7. 35 5
      virgo.wzfrontend/console/src/views/work/property/change.vue
  8. 250 224
      virgo.wzfrontend/console/src/views/work/property/depreciation.vue
  9. 251 220
      virgo.wzfrontend/console/src/views/work/property/inventory.vue
  10. 33 13
      virgo.wzfrontend/console/src/views/work/property/register.vue
  11. BIN
      virgo.wzfrontend/src/main/resources/static/console/assets/model/yuanzhui.fbx
  12. 1 1
      virgo.wzfrontend/src/main/resources/static/console/index.html
  13. 1 1
      virgo.wzfrontend/src/main/resources/static/console/static/css/9906.274261e1.css
  14. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/css/2042.b104e88f.css
  15. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/css/5127.d878ce6b.css
  16. 0 0
      virgo.wzfrontend/src/main/resources/static/console/static/css/7729.d878ce6b.css
  17. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/css/app.78388f7d.css
  18. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/css/app.ef440b7e.css
  19. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/1216-legacy.1d283ab6.js
  20. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/1234-legacy.bcbd6d41.js
  21. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/1234.1497ac43.js
  22. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/1703-legacy.84092482.js
  23. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/1703.8bab3c28.js
  24. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/2042.2e21ca91.js
  25. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/2385-legacy.1b8388d6.js
  26. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/2385.febffcf3.js
  27. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/2565-legacy.07b82af4.js
  28. 1 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/3082-legacy.feab66c3.js
  29. 1 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/324.28bafd73.js
  30. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/3620-legacy.8726361e.js
  31. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/3620.d6f21564.js
  32. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/383-legacy.3e44e51a.js
  33. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/383.a0054506.js
  34. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/4610-legacy.3521354d.js
  35. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/4610-legacy.88c62725.js
  36. 1 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/4635.a1898ec0.js
  37. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/4639-legacy.1029a16e.js
  38. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/4639-legacy.72d8b6aa.js
  39. 1 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/4639.caf5a156.js
  40. 1 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/5497.d5328bcf.js
  41. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/5411-legacy.3166e770.js
  42. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/5411-legacy.3aa583c5.js
  43. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/5567.1ddb5251.js
  44. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/5567.a92bb820.js
  45. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/6462-legacy.4233efc8.js
  46. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/6462.cd8b7c67.js
  47. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/7431-legacy.d2ee38a8.js
  48. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/7431.19b7dfec.js
  49. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/7437-legacy.190ca518.js
  50. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/7437-legacy.3fbb7b58.js
  51. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/7456-legacy.da13cc42.js
  52. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/7456.e09ab755.js
  53. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/7729-legacy.b2c5c7c3.js
  54. 1 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/9023.059fc9c1.js
  55. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/9906-legacy.c4857c5d.js
  56. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/9906.36cfd945.js
  57. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/app-legacy.9f71e80d.js
  58. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/app-legacy.bcc3ef59.js
  59. 0 1
      virgo.wzfrontend/src/main/resources/static/console/static/js/app.2280c4cc.js
  60. 1 0
      virgo.wzfrontend/src/main/resources/static/console/static/js/app.90f6f6b7.js

BIN
virgo.wzfrontend/console/public/assets/model/yuanzhui.fbx


+ 26 - 0
virgo.wzfrontend/console/src/assets/scss/index.scss

@@ -215,6 +215,12 @@
 	
 	.hui-table {
 		padding: 12px 20px;
+		
+		.cell{
+			overflow: hidden;
+			white-space: nowrap;
+			text-overflow: ellipsis;
+		}
 		
 		.tr-center{
 			display: flex;
@@ -1440,4 +1446,24 @@
 	.el-icon-warning::before {
 		content: '\e73b';
 	}
+}
+.custom-tree-node{
+	width: 100%;
+	display: flex;
+	align-items: center;
+	padding-right: 10px;
+	
+	.label{
+		flex: 1;
+		width: 0;
+		overflow: hidden;
+	}
+	
+	.iconfont{
+		font-size: 19px;
+	}
+	
+	.active{
+		color: $--color-primary;
+	}
 }

+ 6 - 2
virgo.wzfrontend/console/src/components/flow/flowDetail.vue

@@ -100,13 +100,17 @@
 			initFlow(flowUserList) {
 				getUserFlowAction(this.detail.projectFlowId).then(res => {
 					if (res.state) {
-						this.activeList = res.data.filter(node => node.viewName != '查看');
+						this.activeList = res.data.filter(node => {
+							if (node.viewName == '提交') return this.detail.createdByUserId === this.$store
+								.getters.user.userId;
+							return node.viewName != '查看'
+						});
 					}
 				});
 				getFlowApprove(this.detail.projectFlowId).then(res => {
 					if (res.state) {
 						let approverList = res.data.approverList;
-						let submiterId = res.data.submiter.userId;
+						let submiterId = res.data.submiter && res.data.submiter.userId;
 						//提交者
 						let activityList = []
 						if (res.data.statusStr != '待提交') {

+ 46 - 0
virgo.wzfrontend/console/src/config/demo1.js

@@ -26,6 +26,52 @@ export default {
 		"coordinateSystem": "world"
 	},
 	roamAngle: {},
+	monitorList: [{
+		"x": 44400,
+		"y": 57044,
+		"z": 18500
+	}, {
+		"x": 44400,
+		"y": 45004.2191162346,
+		"z": 18500
+	}, {
+		"x": 44400,
+		"y": 31604.498550295837,
+		"z": 18500
+	}, {
+		"x": 44400,
+		"y": 17977.972158239107,
+		"z": 18500
+	}, {
+		"x": 44400,
+		"y": 5672.596355887273,
+		"z": 18500
+	}, {
+		"x": 8200,
+		"y": 57560.35251214507,
+		"z": 18500
+	}, {
+		"x": 8200,
+		"y": 45065.02445997126,
+		"z": 18500
+	}, {
+		"x": 8200,
+		"y": 31513.93081369907,
+		"z": 18500
+	}, {
+		"x": 8200,
+		"y": 18002.746128895247,
+		"z": 18500
+	}, {
+		"x": 8200,
+		"y": 3585.106191952311,
+		"z": 18500
+	}],
+	deviceList: [{
+		"x": 19394,
+		"y": 64194,
+		"z": 18500
+	}],
 	roomList: [{
 		"roomId": 1,
 		"boundary": [{

+ 88 - 21
virgo.wzfrontend/console/src/uitls/controls.js

@@ -6,8 +6,9 @@ import {
 class bimView {
 	constructor(arg) {
 		let viewToken, dom, app, viewer3D, model3D, viewerGIS, renderSuccess, index = 0,
-			click, hover, roomSaved, change, marker3D, roomManager, layerMng, layerId, walk, elementColor, type,
-			map, background, initHomeViewer, extObjIds = [],
+			click, hover, roomSaved, change, marker3D, drawableContainer, roomManager, layerMng, layerId, walk,
+			elementColor, type, map, background, initHomeViewer, fanScanEffectConfig, planeScanEffect,
+			extObjIds = [],
 			elementObject = {
 				fileId: '',
 				objectId: ''
@@ -185,9 +186,11 @@ class bimView {
 		}
 		this.addDrawable = (option, successCallback) => {
 			// 初始化DrawableContainer
-			let drawableConfig = new Glodon.Bimface.Plugins.Drawable.DrawableContainerConfig();
-			drawableConfig.viewer = viewer3D;
-			let drawableContainer = new Glodon.Bimface.Plugins.Drawable.DrawableContainer(drawableConfig);
+			if (!drawableContainer) {
+				let drawableConfig = new Glodon.Bimface.Plugins.Drawable.DrawableContainerConfig();
+				drawableConfig.viewer = viewer3D;
+				drawableContainer = new Glodon.Bimface.Plugins.Drawable.DrawableContainer(drawableConfig);
+			}
 			// 创建自定义元素,可以是一个dom element,也可以是个字符串
 			let config = new Glodon.Bimface.Plugins.Drawable.CustomItemConfig();
 			config.content = option.html;
@@ -200,24 +203,13 @@ class bimView {
 			if (option.visibleDistance) config.visibleDistance = option.visibleDistance;
 			//生成customItem实例
 			let customItem = new Glodon.Bimface.Plugins.Drawable.CustomItem(config);
-			// customItem.hide();
 			// 添加自定义标签
 			drawableContainer.addItem(customItem);
-			// 开启标签的深度检测
-			// customItem.enableDepthTest(true);
-
-			// // 设置标签遮挡状态变化事件
-			// customItem.onObstructionChanged(function(data) {
-			// 	if (data) {
-			// 		// 被遮挡时隐藏标签
-			// 		customItem.hide();
-			// 	} else {
-			// 		// 未遮挡时显示标签
-			// 		customItem.show();
-			// 	}
-			// });
 			customItem.onClick(successCallback);
 		}
+		this.clearDrawable = () => {
+			if (drawableContainer) drawableContainer.clear();
+		}
 		this.setNavigationMode = () => {
 			viewer3D.setNavigationMode(Glodon.Bimface.Viewer.NavigationMode3D.Walk);
 		}
@@ -474,8 +466,7 @@ class bimView {
 			model3D.overrideAllComponentsColor(color);
 			viewer3D.render();
 		}
-		this.overrideComponentsColorByObjectData = (conditions, color) => {
-			console.log(color);
+		this.overrideComponentsColorByObjectData = (conditions, color) => {
 			let colors = new Glodon.Web.Graphics.Color("#cecece", 1);
 			model3D.overrideComponentsColorByObjectData(conditions, colors);
 			viewer3D.render();
@@ -635,6 +626,82 @@ class bimView {
 			viewer3D.setView(Glodon.Bimface.Viewer.ViewOption[type])
 			viewer3D.render();
 		}
+		this.insertExternalObject = (fbxUrl, position, i) => {
+			// 将FBX对象添加为外部构件
+			extObjMng = new Glodon.Bimface.Plugins.ExternalObject.ExternalObjectManager(viewer3D);
+			extObjMng.loadObject({
+				name: 'robot' + i,
+				url: {
+					objectUrl: fbxUrl
+				}
+			}, function() {
+				let fbxId = extObjMng.getObjectIdByName("robot" + i);
+				// 将构件移至初始位置
+				extObjMng.translate(fbxId, new THREE.Vector3(position.x, position.y, position.z));
+				extObjMng.scale(fbxId, new THREE.Vector3(240, 400, 240));
+				extObjMng.rotateX(fbxId, Math.PI);
+				extObjMng.rotateZ(fbxId, i < 5 ? -Math.PI / 4 : Math.PI / 4);
+				extObjMng.offsetY(fbxId, -11600)
+				extObjMng.overrideColor({
+					ids: [fbxId]
+				}, new Glodon.Web.Graphics.Color("#28e991", 0.3))
+				viewer3D.render();
+			});
+		}
+		this.inserttFanScanEffect = (position) => {
+			// 构造扇形扫描效果配置项
+			if (!fanScanEffectConfig) {
+				fanScanEffectConfig = new Glodon.Bimface.Plugins.Animation.FanScanEffectConfig();
+				// 配置Viewer对象、背景颜色、扫描颜色、持续时间、扇形角度、位置、扫描半径等参数
+				fanScanEffectConfig.viewer = viewer3D;
+				fanScanEffectConfig.backgroundColor = new Glodon.Web.Graphics.Color(0, 0, 0, 0.05);
+				fanScanEffectConfig.color = new Glodon.Web.Graphics.Color(17, 218, 183, 0.8);
+				fanScanEffectConfig.duration = 2000;
+				fanScanEffectConfig.fanAngle = Math.PI;
+			}
+			fanScanEffectConfig.originPosition = position;
+			fanScanEffectConfig.radius = 5000;
+			// 构造扇形扫描效果对象
+			fanScanEffect = new Glodon.Bimface.Plugins.Animation.FanScanEffect(fanScanEffectConfig);
+			viewer3D.render();
+		}
+		this.setPlaneScanEffect = () => {
+			if (!planeScanEffect) {
+				// 构造平面扫描效果配置项
+				let planeScanEffectConfig = new Glodon.Bimface.Plugins.Animation.PlaneScanEffectConfig();
+				let materialConfig = new Glodon.Bimface.Plugins.Material.MaterialConfig();
+				materialConfig.viewer = viewer3D;
+				materialConfig.src =
+					"https://static.bimface.com/attach/3e8cedfed7a04c8e9cb115ce192e209f_big.png";
+				let material = new Glodon.Bimface.Plugins.Material.Material(materialConfig);
+				// 配置Viewer对象、方向、持续时间、边界
+				planeScanEffectConfig.viewer = viewer3D;
+				planeScanEffectConfig.direction = {
+					x: 0.6,
+					y: 0.8,
+					z: 0
+				};
+				planeScanEffectConfig.duration = 2000;
+				planeScanEffectConfig.ids = [{
+					"modelId": "10000892771892",
+					"objectIds": ["417146"]
+				}];
+				// 设置水平扫描颜色
+				planeScanEffectConfig.color = new Glodon.Web.Graphics.Color(0, 215, 89, 1.0);
+				// 设置水平扫描材质
+				planeScanEffectConfig.material = material;
+				// 设置材质与颜色的混合参数
+				planeScanEffectConfig.blendingRatio = 0.3;
+				// 构造水平扫描效果对象
+				planeScanEffect = new Glodon.Bimface.Plugins.Animation.PlaneScanEffect(planeScanEffectConfig);
+			} else {
+				planeScanEffect.show();
+			}
+		}
+		this.clearPlaneScanEffect = () => {
+			if (!planeScanEffect) return;
+			planeScanEffect.hide();
+		}
 		this.destroy = () => {
 			console.log('销毁场景');
 			app.destroy();

+ 201 - 63
virgo.wzfrontend/console/src/views/work/bim/distribution.vue

@@ -1,5 +1,11 @@
 <template>
 	<div id="distribution" class="distribution-index">
+		<div class="left-button" v-if="renderSuccess">
+			<div :class="'menu-item pangmenzhengdao' + (node.id == pathNode.id ? ' active' :'')"
+				v-for="(node,index) in titleList" :key="node.id" @click="selectItem(node)">
+				{{node.name}}
+			</div>
+		</div>
 		<div :id="'previewBim'+_uid" class="previewBim"></div>
 	</div>
 </template>
@@ -14,18 +20,33 @@
 	export default {
 		data() {
 			return {
-				room: {
-					id: 14
-				},
+				roomId: 1,
 				form: {
 					color: 'rgba(19, 206, 102, 0.6)'
 				},
 				bimViewer: null,
 				positionData: [],
 				roomList: bimData.roomList,
+				monitorList: bimData.monitorList,
+				deviceList: bimData.deviceList,
 				cameraState: bimData.cameraState,
 				isRender: false,
-				roamAngle: bimData.roamAngle
+				roamAngle: bimData.roamAngle,
+				titleList: [{
+					id: 1,
+					name: '楼层'
+				}, {
+					id: 2,
+					name: '监控'
+				}, {
+					id: 3,
+					name: '设备'
+				}, {
+					id: 4,
+					name: '灯光'
+				}],
+				pathNode: {},
+				renderSuccess: false
 			}
 		},
 		created() {
@@ -41,10 +62,86 @@
 			init() {
 				getBimViewToken(bimData.fileId).then(this.successFunc);
 			},
+			selectItem(item) {
+				this.bimViewer.setStatus(this.cameraState);
+				if (this.pathNode.id === item.id) return;
+				if (this.pathNode.id === 1) this.clearFloor();
+				if (this.pathNode.id === 2) this.clearMonitor();
+				if (this.pathNode.id === 3) this.clearDevice();
+				this.pathNode = item;
+				if (item.id === 1) this.setFloor();
+				if (item.id === 2) this.setMonitor();
+				if (item.id === 3) this.setDevice();
+			},
+			clearFloor() { //清楚房间
+				this.bimViewer.clearAllRooms();
+				this.bimViewer.clearDrawable();
+			},
+			setFloor() { //设置房间
+				for (var i = 0; i < this.roomList.length; i++) {
+					this.bimViewer.insertRooms({
+						id: this.roomList[i].roomId,
+						boundary: {
+							"outer": this.roomList[i].boundary
+						},
+						height: this.roomList[i].height,
+						roomColor: this.returnRGBA(this.roomList[i].color)
+					})
+					if (this.roomList[i].name) {
+						this.bimViewer.addDrawable({
+							position: this.roomList[i].position,
+							offsetX: -75,
+							offsetY: -40,
+							html: `	<div class="tips-4">${this.roomList[i].name}<i class="iconfont huifont-sanjiaojiantou-xia"></i></div>`,
+							id: this.roomList[i].roomId
+						}, data => {
+							this.insertDom(data.id, data.clientPosition.x,
+								data.clientPosition
+								.y);
+						})
+					}
+					if (this.roomList[i].floorName) {
+						this.bimViewer.addDrawable({
+							position: this.roomList[i].position,
+							offsetX: -30,
+							offsetY: 5,
+							html: `	<div class="floor-name">${this.roomList[i].floorName}</div>`,
+							id: this.roomList[i].roomId
+						}, data => {
+							this.insertDom(data.id, data.clientPosition.x,
+								data.clientPosition
+								.y);
+						})
+					}
+				}
+			},
+			setMonitor() {
+				for (var i = 0; i < this.monitorList.length; i++) {
+					this.bimViewer.add3DMaker('image', this.monitorList[i],
+						'./assets/shexiangtou.png', (data) => {
+							console.log(data);
+						}, i);
+					this.bimViewer.insertExternalObject('./assets/model/yuanzhui.fbx', this.monitorList[i], i);
+				}
+			},
+			clearMonitor() {
+				this.bimViewer.clear3DMaker();
+				this.bimViewer.clearALlPlane();
+			},
+			setDevice() {
+				for (var i = 0; i < this.deviceList.length; i++) {
+					this.bimViewer.add3DMaker('image', this.deviceList[i],
+						'http://static.bimface.com/resources/3DMarker/warner/warner_red.png', (data) => {
+							console.log(data);
+						}, i);
+				}
+			},
+			clearDevice() {
+				this.bimViewer.clear3DMaker();
+			},
 			insertDom(roomId, left, top) {
 				let _self = this;
 				let box = document.getElementById('distribution');
-				console.log(roomId);
 				let data = this.roomList.find(node => node.roomId == roomId) || {
 					floorName: '-'
 				};
@@ -146,6 +243,28 @@
 				console.log(this.bimViewer.getCameraState());
 				// this.bimViewer.setStatus(this.cameraState);
 			},
+			setRoom(data) {
+				let point = data.worldPosition;
+				if (!point) return this.$message.warning('请点击模型范围内的点');
+				this.positionData.push(point);
+				this.bimViewer.add3DMaker('image', point);
+				if (this.positionData.length == 3) {
+					this.bimViewer.insertRooms({
+						id: this.roomId,
+						boundary: {
+							"outer": this.positionData
+						},
+						height: 500,
+						roomColor: this.returnRGBA(this.form.color)
+					})
+					this.bimViewer.clear3DMaker();
+					this.positionData = [];
+					this.bimViewer.editRoom({
+						roomId: this.roomId
+					})
+					this.roomId++;
+				}
+			},
 			successFunc(res) {
 				if (res.state) {
 					this.bimViewer = new bimView({
@@ -154,11 +273,11 @@
 						roamAngle: this.roamAngle,
 						initHomeViewer: this.cameraState,
 						renderSuccess: () => {
+							this.renderSuccess = true;
 							this.bimViewer.setStatus(this.cameraState);
-							this.bimViewer.setToolbars(true);
+							// this.bimViewer.setToolbars(true);
 							if (bimData.fileId == '10000892771892') {
 								this.bimViewer.HideOthers();
-								console.log('-----');
 								this.bimViewer.overrideComponentsColorByObjectData([{
 									"family": "楼板",
 									"levelName": "A_4F(14.500)"
@@ -173,68 +292,13 @@
 									"levelName": "A_4F(14.500)"
 								}])
 							}
-							for (var i = 0; i < this.roomList.length; i++) {
-								this.bimViewer.insertRooms({
-									id: this.roomList[i].roomId,
-									boundary: {
-										"outer": this.roomList[i].boundary
-									},
-									height: this.roomList[i].height,
-									roomColor: this.returnRGBA(this.roomList[i].color)
-								})
-								if (this.roomList[i].name) {
-									this.bimViewer.addDrawable({
-										position: this.roomList[i].position,
-										offsetX: -75,
-										offsetY: -40,
-										html: `	<div class="tips-4">${this.roomList[i].name}<i class="iconfont huifont-sanjiaojiantou-xia"></i></div>`,
-										id: this.roomList[i].roomId
-									}, data => {
-										this.insertDom(data.id, data.clientPosition.x,
-											data.clientPosition
-											.y);
-									})
-								}
-								if (this.roomList[i].floorName) {
-									this.bimViewer.addDrawable({
-										position: this.roomList[i].position,
-										offsetX: -30,
-										offsetY: 5,
-										html: `	<div class="floor-name">${this.roomList[i].floorName}</div>`,
-										id: this.roomList[i].roomId
-									}, data => {
-										this.insertDom(data.id, data.clientPosition.x,
-											data.clientPosition
-											.y);
-									})
-								}
-							}
 						},
 						roomSaved: data => {
 							console.log(data);
 						},
 						click: data => {
 							console.log(data);
-							let point = data.worldPosition;
-							if (!point) return this.$message.warning('请点击模型范围内的点');
-							this.positionData.push(point);
-							this.bimViewer.add3DMaker('image', point);
-							if (this.positionData.length == 3) {
-								this.bimViewer.insertRooms({
-									id: this.room.id,
-									boundary: {
-										"outer": this.positionData
-									},
-									height: 500,
-									roomColor: this.returnRGBA(this.form.color)
-								})
-								this.bimViewer.clear3DMaker();
-								this.positionData = [];
-								this.bimViewer.editRoom({
-									roomId: this.room.id
-								})
-								this.room.id++;
-							}
+							// this.setRoom(data);
 						}
 					})
 				}
@@ -256,6 +320,50 @@
 			cursor: pointer;
 		}
 
+		.yuanzhui {
+			margin: auto;
+			position: relative;
+			width: 200px;
+			height: 300px;
+		}
+
+		.yuanzhui::before {
+			position: absolute;
+			content: "";
+			width: 0;
+			height: 0;
+			border-bottom: 200px solid #9dc831;
+			border-left: 80px solid transparent;
+			border-top: 80px solid transparent;
+			transform: skewY(20deg);
+			filter: drop-shadow(3px 3px 5px rgba(0, 0, 0, .5));
+		}
+
+		.yuanzhui::after {
+			position: absolute;
+			content: "";
+			left: 80px;
+			width: 0;
+			height: 0;
+			border-bottom: 200px solid #669300;
+			border-right: 80px solid transparent;
+			border-top: 80px solid transparent;
+			transform: skewY(-20deg);
+			filter: drop-shadow(6px 6px 5px rgba(0, 0, 0, .5));
+		}
+
+		.yuanzhui div {
+			position: absolute;
+			bottom: 7px;
+			left: 78px;
+			width: 4px;
+			height: 192px;
+			background: #fff;
+			z-index: 9;
+			opacity: .3;
+			box-shadow: 0px -2px 4px 1px #fff;
+		}
+
 		.floor-name {
 			cursor: pointer;
 			width: 60px;
@@ -263,6 +371,36 @@
 			color: #fff;
 		}
 
+		.left-button {
+			position: absolute;
+			z-index: 998;
+			display: flex;
+			justify-content: center;
+			left: 0;
+			bottom: 30px;
+			width: 100%;
+		}
+
+		.menu-item {
+			width: 100px;
+			height: 32px;
+			font-size: 16px;
+			color: #AAB5C7;
+			line-height: 30px;
+			letter-spacing: 2px;
+			text-align: center;
+			background-image: url(../../../assets/image/common/tab.png);
+			background-size: 100% 100%;
+			margin: 0 15px;
+			cursor: pointer;
+		}
+
+		.menu-item.active,
+		.menu-item:hover {
+			color: #fff;
+			background-image: url(../../../assets/image/common/tab_active.png);
+		}
+
 		.previewBim {
 			flex: 1;
 			height: 0;

+ 35 - 5
virgo.wzfrontend/console/src/views/work/property/change.vue

@@ -14,7 +14,16 @@
 								<span class="el-collapse-name">{{item.name}}</span>
 							</template>
 							<div>
-								<el-tree :data="item.children" :props="defaultProps" :expand-on-click-node="false">
+								<el-tree :data="item.children" :props="defaultProps">
+									<div class="custom-tree-node" slot-scope="{ node, data }">
+										<div class="label">{{node.label}}</div>
+										<div :class="nowData.id === data.id ? 'active':''"
+											@click.stop="filterDevice(data)">
+											<i
+												:class="'iconfont ' + (data.deviceId ? 'huifont-shebeiguanli' : 'huifont-xiangmuguanli')">
+											</i>
+										</div>
+									</div>
 								</el-tree>
 							</div>
 						</el-collapse-item>
@@ -38,6 +47,7 @@
 									</template>
 								</el-table-column>
 								<el-table-column label="资产名称" prop="name"></el-table-column>
+								<el-table-column label="资产编码" prop="assetNumber"></el-table-column>
 								<el-table-column label="单位建筑" prop="projectItemName"></el-table-column>
 								<el-table-column label="具体位置" prop="projectItemTargetName"></el-table-column>
 								<el-table-column label="创建者" prop="createdByUserName"></el-table-column>
@@ -133,7 +143,9 @@
 				visible: false,
 				isUpdate: false,
 				detailId: '',
-				drawer: false
+				drawer: false,
+				nowData: {},
+				filterOption: {}
 			}
 		},
 		created() {
@@ -142,13 +154,16 @@
 		},
 		methods: {
 			init() {
-				getFlowList(this.currPage, this.pageSize, {
+				let filterOption = {
 					projectId: this.$store.getters.project.id,
 					flowType: this.flowType
-				}).then(res => {
+				};
+				filterOption = Object.assign(filterOption, this.filterOption);
+				getFlowList(this.currPage, this.pageSize, filterOption).then(res => {
 					if (res.state) {
 						this.tableData = res.data.dataList.map(node => {
 							node = Object.assign(node, JSON.parse(node.flowData));
+							if (node.operateDevice) node['assetNumber'] = node.operateDevice.assetNumber;
 							return node;
 						});;
 						this.totalCount = res.data.totalCount;
@@ -161,7 +176,7 @@
 						if (res.data.length === 0) {
 							initDevicePartList(this.$store.getters.organization.id, this.$store.getters.project.id)
 								.then(res => {
-									if (res.state) this.initDevicePartList();
+									if (res.state) this.initDeviceList();
 								})
 						} else {
 							this.treeData = res.data;
@@ -169,6 +184,21 @@
 						}
 					}
 				})
+			},
+			filterDevice(data) {
+				this.filterOption = {};
+				if (this.nowData.id === data.id) {
+					this.nowData = {};
+				} else {
+					this.nowData = data;
+					if (this.nowData.deviceId) {
+						this.filterOption['deviceId'] = this.nowData.deviceId;
+					} else {
+						this.filterOption['deviceLevelId'] = this.nowData.id;
+					}
+				}
+				this.currPage = 1;
+				this.init();
 			},
 			returnChildren(data) {
 				data.forEach(item => {

+ 250 - 224
virgo.wzfrontend/console/src/views/work/property/depreciation.vue

@@ -1,229 +1,255 @@
-<template>
-	<div class="hui-flex">
-		<div class="hui-flex-box yui-tree-box">
-			<div class="hui-left-tree">
-				<div class="hui-left-tree-title">
-					<svg-icon name="zhuangshi" width="16" height="20"></svg-icon>
-					<span class="hui-left-tree-sub">资产列表</span>
-				</div>
-				<div class="hui-left-tree-content">
-					<el-collapse>
-						<el-collapse-item v-for="item in treeData" :key="item.id">
-							<template slot="title">
-								<i class="iconfont huifont-shuzhuangcaidantubiao"></i>
-								<span class="el-collapse-name">{{item.name}}</span>
-							</template>
-							<div>
-								<el-tree :data="item.children" :props="defaultProps" :expand-on-click-node="false">
-								</el-tree>
-							</div>
-						</el-collapse-item>
-					</el-collapse>
-				</div>
-			</div>
-			<div class="hui-tree-content">
-				<div class="hui-flex hui-content box-background">
-					<div class="hui-content-title">
-						<div class="hui-title-item active">资产折旧</div>
-					</div>
-					<div class="hui-flex-box hui-flex hui-table">
-						<div class="hui-content-insert">
-							<el-button type="primary" size="medium" @click="insert">新增折旧</el-button>
-						</div>
-						<div class="hui-flex-box">
-							<el-table :data="tableData" row-key="id" border height="100%">
-								<el-table-column label="序号" width="50">
-									<template slot-scope="scope">
-										<div style="text-align: center;">{{scope.$index + 1}}</div>
-									</template>
-								</el-table-column>
-								<el-table-column label="资产名称" prop="name"></el-table-column>
-								<el-table-column label="折旧内容" prop="depreciationContent"></el-table-column>
-								<el-table-column label="折旧描述" prop="remark"></el-table-column>
-								<el-table-column label="创建者" prop="createdByUserName"></el-table-column>
-								<el-table-column label="状态">
-									<template slot-scope="scope">
-										<div v-if="!scope.row.state" class="hui-state">
-											<span class="hui-state-bage hui-state-primary"></span>
-											<span class="hui-state-label">待生成</span>
-										</div>
-										<div v-if="scope.row.state == -1 || scope.row.state == 1" class="hui-state">
-											<span class="hui-state-bage hui-state-primary"></span>
-											<span class="hui-state-label">待审核</span>
-										</div>
-										<div v-if="scope.row.state == 2" class="hui-state">
-											<span class="hui-state-bage hui-state-info"></span>
-											<span class="hui-state-label">审核中</span>
-										</div>
-										<div v-if="scope.row.state == 3" class="hui-state">
-											<span class="hui-state-bage hui-state-success"></span>
-											<span class="hui-state-label">通过</span>
-										</div>
-										<div v-if="scope.row.state == 4" class="hui-state">
-											<span class="hui-state-bage hui-state-error"></span>
-											<span class="hui-state-label">未通过</span>
-										</div>
-									</template>
-								</el-table-column>
-								<el-table-column label="操作" width="150">
-									<template slot-scope="scope">
-										<div class="hui-table-operation">
-											<span class="table-operation" @click="lookFlow(scope.row)">
-												详情
-											</span>
-											<span class="table-operation" v-if="!scope.row.projectFlowId"
-												@click="updateFlow(scope.row)">
-												编辑
-											</span>
-											<span class="table-operation" v-if="!scope.row.projectFlowId"
-												@click="deleteFlow(scope.row)">
-												删除
-											</span>
-										</div>
-									</template>
-								</el-table-column>
-								<template slot="empty">
-									<empty description="暂无数据"></empty>
-								</template>
-							</el-table>
-						</div>
-						<div class="hui-content-pagination">
-							<el-pagination :pager-count="9" layout="prev, pager, next" :total="totalCount"
-								@current-change="currentChange">
-							</el-pagination>
-						</div>
-					</div>
-				</div>
-			</div>
-		</div>
-		<el-dialog :close-on-click-modal="false" :title="isUpdate?'编辑':'新增'" :visible.sync="visible" width="1200px" :append-to-body="true">
-			<flow-form v-if="visible" :isUpdate="isUpdate" @callback="callback" :detailId="detailId"
-				:flowType="flowType">
-			</flow-form>
-		</el-dialog>
-		<el-drawer title="流程详情" :visible.sync="drawer" :size="400" :append-to-body="true">
-			<flow-detail v-if="drawer" @callback="callback" :detailId="detailId"></flow-detail>
-		</el-drawer>
-	</div>
-</template>
-
-<script>
-	import {
-		initDevicePartList,
-		getDevicePartList,
-		getFlowList,
-		deleteFlow
-	} from '@/httpApi/property'
-	import flowForm from '@/components/flow/flowForm'
-	import flowDetail from '@/components/flow/flowDetail'
-	export default {
-		data() {
-			return {
-				flowType: 3,
-				tableData: [],
-				currPage: 1,
-				pageSize: 10,
-				totalCount: 0,
-				treeData: [],
-				defaultProps: {
-					children: 'children',
-					label: 'name'
-				},
-				visible: false,
-				isUpdate: false,
-				detailId: '',
-				drawer: false
-			}
-		},
-		created() {
-			getDevicePartList(this.$store.getters.organization.id, this.$store.getters.project.id).then(res => {
-				if (res.state) {
-					if (res.data.length === 0) {
-						initDevicePartList(this.$store.getters.organization.id, this.$store.getters.project.id)
-							.then(res => {
-								if (res.state) {
-									getDevicePartList(this.$store.getters.organization.id, this.$store.getters
-										.project.id).then(res => {
-										if (res.state) {
-											this.treeData = res.data;
-											this.returnChildren(this.treeData);
-										}
-									})
-								}
-							})
+<template>
+	<div class="hui-flex">
+		<div class="hui-flex-box yui-tree-box">
+			<div class="hui-left-tree">
+				<div class="hui-left-tree-title">
+					<svg-icon name="zhuangshi" width="16" height="20"></svg-icon>
+					<span class="hui-left-tree-sub">资产列表</span>
+				</div>
+				<div class="hui-left-tree-content">
+					<el-collapse>
+						<el-collapse-item v-for="item in treeData" :key="item.id">
+							<template slot="title">
+								<i class="iconfont huifont-shuzhuangcaidantubiao"></i>
+								<span class="el-collapse-name">{{item.name}}</span>
+							</template>
+							<div>
+								<el-tree :data="item.children" :props="defaultProps">
+									<div class="custom-tree-node" slot-scope="{ node, data }">
+										<div class="label">{{node.label}}</div>
+										<div :class="nowData.id === data.id ? 'active':''"
+											@click.stop="filterDevice(data)">
+											<i
+												:class="'iconfont ' + (data.deviceId ? 'huifont-shebeiguanli' : 'huifont-xiangmuguanli')">
+											</i>
+										</div>
+									</div>
+								</el-tree>
+							</div>
+						</el-collapse-item>
+					</el-collapse>
+				</div>
+			</div>
+			<div class="hui-tree-content">
+				<div class="hui-flex hui-content box-background">
+					<div class="hui-content-title">
+						<div class="hui-title-item active">资产折旧</div>
+					</div>
+					<div class="hui-flex-box hui-flex hui-table">
+						<div class="hui-content-insert">
+							<el-button type="primary" size="medium" @click="insert">新增折旧</el-button>
+						</div>
+						<div class="hui-flex-box">
+							<el-table :data="tableData" row-key="id" border height="100%">
+								<el-table-column label="序号" width="50">
+									<template slot-scope="scope">
+										<div style="text-align: center;">{{scope.$index + 1}}</div>
+									</template>
+								</el-table-column>
+								<el-table-column label="资产名称" prop="name"></el-table-column>
+								<el-table-column label="资产编码" prop="assetNumber"></el-table-column>
+								<el-table-column label="折旧内容" prop="depreciationContent"></el-table-column>
+								<el-table-column label="折旧描述" prop="remark"></el-table-column>
+								<el-table-column label="创建者" prop="createdByUserName"></el-table-column>
+								<el-table-column label="状态">
+									<template slot-scope="scope">
+										<div v-if="!scope.row.state" class="hui-state">
+											<span class="hui-state-bage hui-state-primary"></span>
+											<span class="hui-state-label">待生成</span>
+										</div>
+										<div v-if="scope.row.state == -1 || scope.row.state == 1" class="hui-state">
+											<span class="hui-state-bage hui-state-primary"></span>
+											<span class="hui-state-label">待审核</span>
+										</div>
+										<div v-if="scope.row.state == 2" class="hui-state">
+											<span class="hui-state-bage hui-state-info"></span>
+											<span class="hui-state-label">审核中</span>
+										</div>
+										<div v-if="scope.row.state == 3" class="hui-state">
+											<span class="hui-state-bage hui-state-success"></span>
+											<span class="hui-state-label">通过</span>
+										</div>
+										<div v-if="scope.row.state == 4" class="hui-state">
+											<span class="hui-state-bage hui-state-error"></span>
+											<span class="hui-state-label">未通过</span>
+										</div>
+									</template>
+								</el-table-column>
+								<el-table-column label="操作" width="150">
+									<template slot-scope="scope">
+										<div class="hui-table-operation">
+											<span class="table-operation" @click="lookFlow(scope.row)">
+												详情
+											</span>
+											<span class="table-operation" v-if="!scope.row.projectFlowId"
+												@click="updateFlow(scope.row)">
+												编辑
+											</span>
+											<span class="table-operation" v-if="!scope.row.projectFlowId"
+												@click="deleteFlow(scope.row)">
+												删除
+											</span>
+										</div>
+									</template>
+								</el-table-column>
+								<template slot="empty">
+									<empty description="暂无数据"></empty>
+								</template>
+							</el-table>
+						</div>
+						<div class="hui-content-pagination">
+							<el-pagination :pager-count="9" layout="prev, pager, next" :total="totalCount"
+								@current-change="currentChange">
+							</el-pagination>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+		<el-dialog :close-on-click-modal="false" :title="isUpdate?'编辑':'新增'" :visible.sync="visible" width="1200px"
+			:append-to-body="true">
+			<flow-form v-if="visible" :isUpdate="isUpdate" @callback="callback" :detailId="detailId"
+				:flowType="flowType">
+			</flow-form>
+		</el-dialog>
+		<el-drawer title="流程详情" :visible.sync="drawer" :size="400" :append-to-body="true">
+			<flow-detail v-if="drawer" @callback="callback" :detailId="detailId"></flow-detail>
+		</el-drawer>
+	</div>
+</template>
+
+<script>
+	import {
+		initDevicePartList,
+		getDevicePartList,
+		getFlowList,
+		deleteFlow
+	} from '@/httpApi/property'
+	import flowForm from '@/components/flow/flowForm'
+	import flowDetail from '@/components/flow/flowDetail'
+	export default {
+		data() {
+			return {
+				flowType: 3,
+				tableData: [],
+				currPage: 1,
+				pageSize: 10,
+				totalCount: 0,
+				treeData: [],
+				defaultProps: {
+					children: 'children',
+					label: 'name'
+				},
+				visible: false,
+				isUpdate: false,
+				detailId: '',
+				drawer: false,
+				nowData: {},
+				filterOption: {}
+			}
+		},
+		created() {
+			this.initDeviceList();
+			this.init();
+		},
+		methods: {
+			init() {
+				let filterOption = {
+					projectId: this.$store.getters.project.id,
+					flowType: this.flowType
+				};
+				filterOption = Object.assign(filterOption, this.filterOption);
+				getFlowList(this.currPage, this.pageSize, filterOption).then(res => {
+					if (res.state) {
+						this.tableData = res.data.dataList.map(node => {
+							node = Object.assign(node, JSON.parse(node.flowData));
+							if (node.operateDevice) node['assetNumber'] = node.operateDevice.assetNumber;
+							return node;
+						});;
+						this.totalCount = res.data.totalCount;
+					}
+				})
+			},
+			initDeviceList() {
+				getDevicePartList(this.$store.getters.organization.id, this.$store.getters.project.id).then(res => {
+					if (res.state) {
+						if (res.data.length === 0) {
+							initDevicePartList(this.$store.getters.organization.id, this.$store.getters.project.id)
+								.then(res => {
+									if (res.state) this.initDeviceList();
+								})
+						} else {
+							this.treeData = res.data;
+							this.returnChildren(this.treeData);
+						}
+					}
+				})
+			},
+			filterDevice(data) {
+				this.filterOption = {};
+				if (this.nowData.id === data.id) {
+					this.nowData = {};
+				} else {
+					this.nowData = data;
+					if (this.nowData.deviceId) {
+						this.filterOption['deviceId'] = this.nowData.deviceId;
 					} else {
-						this.treeData = res.data;
-						this.returnChildren(this.treeData);
+						this.filterOption['deviceLevelId'] = this.nowData.id;
 					}
 				}
-			})
-			this.init();
-		},
-		methods: {
-			init() {
-				getFlowList(this.currPage, this.pageSize, {
-					projectId: this.$store.getters.project.id,
-					flowType: this.flowType
-				}).then(res => {
-					if (res.state) {
-						this.tableData = res.data.dataList.map(node => {
-							node = Object.assign(node, JSON.parse(node.flowData));
-							return node;
-						});;
-						this.totalCount = res.data.totalCount;
-					}
-				})
-			},
-			returnChildren(data) {
-				data.forEach(item => {
-					if (item.children && item.deviceList) {
-						let obj = item.deviceList.map(res => {
-							res['deviceId'] = res.id;
-							res['id'] = -res.id;
-							return res;
-						})
-						item.children = item.children.concat(obj);
-					}
-					if (item.children && item.children.length > 0) this.returnChildren(item.children);
-				});
-			},
-			currentChange(currPage) {
-				this.currPage = currPage;
+				this.currPage = 1;
 				this.init();
-			},
-			insert() {
-				this.visible = true;
-				this.isUpdate = false;
-			},
-			lookFlow(val) {
-				this.detailId = val.id;
-				this.drawer = true;
-			},
-			updateFlow(val) {
-				this.detailId = val.id;
-				this.isUpdate = true;
-				this.visible = true;
-			},
-			deleteFlow(val) {
-				this.$confirm('确定要删除该流程?', () => {
-					deleteFlow(val.id).then(res => {
-						if (res.state) {
-							this.$message.success('操作成功');
-							this.init();
-						}
-					})
-				});
-			},
-			callback(type) {
-				this.visible = false;
-				if (type === 'init') this.init();
-			}
-		},
-		components: {
-			flowForm,
-			flowDetail
-		},
-	}
-</script>
-
+			},
+			returnChildren(data) {
+				data.forEach(item => {
+					if (item.children && item.deviceList) {
+						let obj = item.deviceList.map(res => {
+							res['deviceId'] = res.id;
+							res['id'] = -res.id;
+							return res;
+						})
+						item.children = item.children.concat(obj);
+					}
+					if (item.children && item.children.length > 0) this.returnChildren(item.children);
+				});
+			},
+			currentChange(currPage) {
+				this.currPage = currPage;
+				this.init();
+			},
+			insert() {
+				this.visible = true;
+				this.isUpdate = false;
+			},
+			lookFlow(val) {
+				this.detailId = val.id;
+				this.drawer = true;
+			},
+			updateFlow(val) {
+				this.detailId = val.id;
+				this.isUpdate = true;
+				this.visible = true;
+			},
+			deleteFlow(val) {
+				this.$confirm('确定要删除该流程?', () => {
+					deleteFlow(val.id).then(res => {
+						if (res.state) {
+							this.$message.success('操作成功');
+							this.init();
+						}
+					})
+				});
+			},
+			callback(type) {
+				this.visible = false;
+				if (type === 'init') this.init();
+			}
+		},
+		components: {
+			flowForm,
+			flowDetail
+		},
+	}
+</script>
+
 <style lang="scss"></style>

+ 251 - 220
virgo.wzfrontend/console/src/views/work/property/inventory.vue

@@ -1,224 +1,255 @@
-<template>
-	<div class="hui-flex">
-		<div class="hui-flex-box yui-tree-box">
-			<div class="hui-left-tree">
-				<div class="hui-left-tree-title">
-					<svg-icon name="zhuangshi" width="16" height="20"></svg-icon>
-					<span class="hui-left-tree-sub">资产列表</span>
-				</div>
-				<div class="hui-left-tree-content">
-					<el-collapse>
-						<el-collapse-item v-for="item in treeData" :key="item.id">
-							<template slot="title">
-								<i class="iconfont huifont-shuzhuangcaidantubiao"></i>
-								<span class="el-collapse-name">{{item.name}}</span>
-							</template>
-							<div>
-								<el-tree :data="item.children" :props="defaultProps" :expand-on-click-node="false">
-								</el-tree>
-							</div>
-						</el-collapse-item>
-					</el-collapse>
-				</div>
-			</div>
-			<div class="hui-tree-content">
-				<div class="hui-flex hui-content box-background">
-					<div class="hui-content-title">
-						<div class="hui-title-item active">资产盘点</div>
-					</div>
-					<div class="hui-flex-box hui-flex hui-table">
-						<div class="hui-content-insert">
-							<el-button type="primary" size="medium" @click="insert">新增盘点</el-button>
-						</div>
-						<div class="hui-flex-box">
-							<el-table :data="tableData" row-key="id" border height="100%">
-								<el-table-column label="序号" width="50">
-									<template slot-scope="scope">
-										<div style="text-align: center;">{{scope.$index + 1}}</div>
-									</template>
-								</el-table-column>
-								<el-table-column label="资产名称" prop="name"></el-table-column>
-								<el-table-column label="盘点内容" prop="depreciationContent"></el-table-column>
-								<el-table-column label="盘点描述" prop="remark"></el-table-column>
-								<el-table-column label="创建者" prop="createdByUserName"></el-table-column>
-								<el-table-column label="状态">
-									<template slot-scope="scope">
-										<div v-if="!scope.row.state" class="hui-state">
-											<span class="hui-state-bage hui-state-primary"></span>
-											<span class="hui-state-label">待生成</span>
-										</div>
-										<div v-if="scope.row.state == -1 || scope.row.state == 1" class="hui-state">
-											<span class="hui-state-bage hui-state-primary"></span>
-											<span class="hui-state-label">待审核</span>
-										</div>
-										<div v-if="scope.row.state == 2" class="hui-state">
-											<span class="hui-state-bage hui-state-info"></span>
-											<span class="hui-state-label">审核中</span>
-										</div>
-										<div v-if="scope.row.state == 3" class="hui-state">
-											<span class="hui-state-bage hui-state-success"></span>
-											<span class="hui-state-label">通过</span>
-										</div>
-										<div v-if="scope.row.state == 4" class="hui-state">
-											<span class="hui-state-bage hui-state-error"></span>
-											<span class="hui-state-label">未通过</span>
-										</div>
-									</template>
-								</el-table-column>
-								<el-table-column label="操作" width="150">
-									<template slot-scope="scope">
-										<div class="hui-table-operation">
-											<span class="table-operation" @click="lookFlow(scope.row)">
-												详情
-											</span>
-											<span class="table-operation" v-if="!scope.row.projectFlowId"
-												@click="updateFlow(scope.row)">
-												编辑
-											</span>
-											<span class="table-operation" v-if="!scope.row.projectFlowId"
-												@click="deleteFlow(scope.row)">
-												删除
-											</span>
-										</div>
-									</template>
-								</el-table-column>
-								<template slot="empty">
-									<empty description="暂无数据"></empty>
-								</template>
-							</el-table>
-						</div>
-						<div class="hui-content-pagination">
-							<el-pagination :pager-count="9" layout="prev, pager, next" :total="totalCount"
-								@current-change="currentChange">
-							</el-pagination>
-						</div>
-					</div>
-				</div>
-			</div>
-		</div>
-		<el-dialog :close-on-click-modal="false" :title="isUpdate?'编辑':'新增'" :visible.sync="visible" width="1200px" :append-to-body="true">
-			<flow-form v-if="visible" :isUpdate="isUpdate" @callback="callback" :detailId="detailId"
-				:flowType="flowType">
-			</flow-form>
-		</el-dialog>
-		<el-drawer title="流程详情" :visible.sync="drawer" :size="400" :append-to-body="true">
-			<flow-detail v-if="drawer" @callback="callback" :detailId="detailId"></flow-detail>
-		</el-drawer>
-	</div>
-</template>
-
-<script>
-	import {
-		initDevicePartList,
-		getDevicePartList,
-		getFlowList,
-		deleteFlow
-	} from '@/httpApi/property'
-	import flowForm from '@/components/flow/flowForm'
-	import flowDetail from '@/components/flow/flowDetail'
-	export default {
-		data() {
-			return {
-				flowType: 4,
-				tableData: [],
-				currPage: 1,
-				pageSize: 10,
-				totalCount: 0,
-				treeData: [],
-				defaultProps: {
-					children: 'children',
-					label: 'name'
-				},
-				visible: false,
-				isUpdate: false,
-				detailId: '',
-				drawer: false
-			}
-		},
-		created() {
-			this.initDeviceList();
-			this.init();
-		},
-		methods: {
-			init() {
-				getFlowList(this.currPage, this.pageSize, {
-					projectId: this.$store.getters.project.id,
-					flowType: this.flowType
-				}).then(res => {
-					if (res.state) {
-						this.tableData = res.data.dataList.map(node => {
-							node = Object.assign(node, JSON.parse(node.flowData));
-							return node;
-						});;
-						this.totalCount = res.data.totalCount;
-					}
-				})
-			},
-			initDeviceList() {
-				getDevicePartList(this.$store.getters.organization.id, this.$store.getters.project.id).then(res => {
-					if (res.state) {
-						if (res.data.length === 0) {
-							initDevicePartList(this.$store.getters.organization.id, this.$store.getters.project.id)
-								.then(res => {
-									if (res.state) this.initDevicePartList();
-								})
-						} else {
-							this.treeData = res.data;
-							this.returnChildren(this.treeData);
-						}
-					}
-				})
+<template>
+	<div class="hui-flex">
+		<div class="hui-flex-box yui-tree-box">
+			<div class="hui-left-tree">
+				<div class="hui-left-tree-title">
+					<svg-icon name="zhuangshi" width="16" height="20"></svg-icon>
+					<span class="hui-left-tree-sub">资产列表</span>
+				</div>
+				<div class="hui-left-tree-content">
+					<el-collapse>
+						<el-collapse-item v-for="item in treeData" :key="item.id">
+							<template slot="title">
+								<i class="iconfont huifont-shuzhuangcaidantubiao"></i>
+								<span class="el-collapse-name">{{item.name}}</span>
+							</template>
+							<div>
+								<el-tree :data="item.children" :props="defaultProps">
+									<div class="custom-tree-node" slot-scope="{ node, data }">
+										<div class="label">{{node.label}}</div>
+										<div :class="nowData.id === data.id ? 'active':''"
+											@click.stop="filterDevice(data)">
+											<i
+												:class="'iconfont ' + (data.deviceId ? 'huifont-shebeiguanli' : 'huifont-xiangmuguanli')">
+											</i>
+										</div>
+									</div>
+								</el-tree>
+							</div>
+						</el-collapse-item>
+					</el-collapse>
+				</div>
+			</div>
+			<div class="hui-tree-content">
+				<div class="hui-flex hui-content box-background">
+					<div class="hui-content-title">
+						<div class="hui-title-item active">资产盘点</div>
+					</div>
+					<div class="hui-flex-box hui-flex hui-table">
+						<div class="hui-content-insert">
+							<el-button type="primary" size="medium" @click="insert">新增盘点</el-button>
+						</div>
+						<div class="hui-flex-box">
+							<el-table :data="tableData" row-key="id" border height="100%">
+								<el-table-column label="序号" width="50">
+									<template slot-scope="scope">
+										<div style="text-align: center;">{{scope.$index + 1}}</div>
+									</template>
+								</el-table-column>
+								<el-table-column label="资产名称" prop="name"></el-table-column>
+								<el-table-column label="资产编码" prop="assetNumber"></el-table-column>
+								<el-table-column label="盘点内容" prop="inventoryContent"></el-table-column>
+								<el-table-column label="盘点描述" prop="remark"></el-table-column>
+								<el-table-column label="创建者" prop="createdByUserName"></el-table-column>
+								<el-table-column label="状态">
+									<template slot-scope="scope">
+										<div v-if="!scope.row.state" class="hui-state">
+											<span class="hui-state-bage hui-state-primary"></span>
+											<span class="hui-state-label">待生成</span>
+										</div>
+										<div v-if="scope.row.state == -1 || scope.row.state == 1" class="hui-state">
+											<span class="hui-state-bage hui-state-primary"></span>
+											<span class="hui-state-label">待审核</span>
+										</div>
+										<div v-if="scope.row.state == 2" class="hui-state">
+											<span class="hui-state-bage hui-state-info"></span>
+											<span class="hui-state-label">审核中</span>
+										</div>
+										<div v-if="scope.row.state == 3" class="hui-state">
+											<span class="hui-state-bage hui-state-success"></span>
+											<span class="hui-state-label">通过</span>
+										</div>
+										<div v-if="scope.row.state == 4" class="hui-state">
+											<span class="hui-state-bage hui-state-error"></span>
+											<span class="hui-state-label">未通过</span>
+										</div>
+									</template>
+								</el-table-column>
+								<el-table-column label="操作" width="150">
+									<template slot-scope="scope">
+										<div class="hui-table-operation">
+											<span class="table-operation" @click="lookFlow(scope.row)">
+												详情
+											</span>
+											<span class="table-operation" v-if="!scope.row.projectFlowId"
+												@click="updateFlow(scope.row)">
+												编辑
+											</span>
+											<span class="table-operation" v-if="!scope.row.projectFlowId"
+												@click="deleteFlow(scope.row)">
+												删除
+											</span>
+										</div>
+									</template>
+								</el-table-column>
+								<template slot="empty">
+									<empty description="暂无数据"></empty>
+								</template>
+							</el-table>
+						</div>
+						<div class="hui-content-pagination">
+							<el-pagination :pager-count="9" layout="prev, pager, next" :total="totalCount"
+								@current-change="currentChange">
+							</el-pagination>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+		<el-dialog :close-on-click-modal="false" :title="isUpdate?'编辑':'新增'" :visible.sync="visible" width="1200px"
+			:append-to-body="true">
+			<flow-form v-if="visible" :isUpdate="isUpdate" @callback="callback" :detailId="detailId"
+				:flowType="flowType">
+			</flow-form>
+		</el-dialog>
+		<el-drawer title="流程详情" :visible.sync="drawer" :size="400" :append-to-body="true">
+			<flow-detail v-if="drawer" @callback="callback" :detailId="detailId"></flow-detail>
+		</el-drawer>
+	</div>
+</template>
+
+<script>
+	import {
+		initDevicePartList,
+		getDevicePartList,
+		getFlowList,
+		deleteFlow
+	} from '@/httpApi/property'
+	import flowForm from '@/components/flow/flowForm'
+	import flowDetail from '@/components/flow/flowDetail'
+	export default {
+		data() {
+			return {
+				flowType: 4,
+				tableData: [],
+				currPage: 1,
+				pageSize: 10,
+				totalCount: 0,
+				treeData: [],
+				defaultProps: {
+					children: 'children',
+					label: 'name'
+				},
+				visible: false,
+				isUpdate: false,
+				detailId: '',
+				drawer: false,
+				nowData: {},
+				filterOption: {}
+			}
+		},
+		created() {
+			this.initDeviceList();
+			this.init();
+		},
+		methods: {
+			init() {
+				let filterOption = {
+					projectId: this.$store.getters.project.id,
+					flowType: this.flowType
+				};
+				filterOption = Object.assign(filterOption, this.filterOption);
+				getFlowList(this.currPage, this.pageSize, filterOption).then(res => {
+					if (res.state) {
+						this.tableData = res.data.dataList.map(node => {
+							node = Object.assign(node, JSON.parse(node.flowData));
+							if (node.operateDevice) node['assetNumber'] = node.operateDevice.assetNumber;
+							return node;
+						});;
+						this.totalCount = res.data.totalCount;
+					}
+				})
+			},
+			initDeviceList() {
+				getDevicePartList(this.$store.getters.organization.id, this.$store.getters.project.id).then(res => {
+					if (res.state) {
+						if (res.data.length === 0) {
+							initDevicePartList(this.$store.getters.organization.id, this.$store.getters.project.id)
+								.then(res => {
+									if (res.state) this.initDeviceList();
+								})
+						} else {
+							this.treeData = res.data;
+							this.returnChildren(this.treeData);
+						}
+					}
+				})
 			},
-			returnChildren(data) {
-				data.forEach(item => {
-					if (item.children && item.deviceList) {
-						let obj = item.deviceList.map(res => {
-							res['deviceId'] = res.id;
-							res['id'] = -res.id;
-							return res;
-						})
-						item.children = item.children.concat(obj);
+			filterDevice(data) {
+				this.filterOption = {};
+				if (this.nowData.id === data.id) {
+					this.nowData = {};
+				} else {
+					this.nowData = data;
+					if (this.nowData.deviceId) {
+						this.filterOption['deviceId'] = this.nowData.deviceId;
+					} else {
+						this.filterOption['deviceLevelId'] = this.nowData.id;
 					}
-					if (item.children && item.children.length > 0) this.returnChildren(item.children);
-				});
-			},
-			currentChange(currPage) {
-				this.currPage = currPage;
+				}
+				this.currPage = 1;
 				this.init();
-			},
-			insert() {
-				this.visible = true;
-				this.isUpdate = false;
-			},
-			lookFlow(val) {
-				this.detailId = val.id;
-				this.drawer = true;
-			},
-			updateFlow(val) {
-				this.detailId = val.id;
-				this.isUpdate = true;
-				this.visible = true;
-			},
-			deleteFlow(val) {
-				this.$confirm('确定要删除该流程?', () => {
-					deleteFlow(val.id).then(res => {
-						if (res.state) {
-							this.$message.success('操作成功');
-							this.init();
-						}
-					})
-				});
-			},
-			callback(type) {
-				this.visible = false;
-				if (type === 'init') this.init();
-			}
-		},
-		components: {
-			flowForm,
-			flowDetail
-		},
-	}
-</script>
-
+			},
+			returnChildren(data) {
+				data.forEach(item => {
+					if (item.children && item.deviceList) {
+						let obj = item.deviceList.map(res => {
+							res['deviceId'] = res.id;
+							res['id'] = -res.id;
+							return res;
+						})
+						item.children = item.children.concat(obj);
+					}
+					if (item.children && item.children.length > 0) this.returnChildren(item.children);
+				});
+			},
+			currentChange(currPage) {
+				this.currPage = currPage;
+				this.init();
+			},
+			insert() {
+				this.visible = true;
+				this.isUpdate = false;
+			},
+			lookFlow(val) {
+				this.detailId = val.id;
+				this.drawer = true;
+			},
+			updateFlow(val) {
+				this.detailId = val.id;
+				this.isUpdate = true;
+				this.visible = true;
+			},
+			deleteFlow(val) {
+				this.$confirm('确定要删除该流程?', () => {
+					deleteFlow(val.id).then(res => {
+						if (res.state) {
+							this.$message.success('操作成功');
+							this.init();
+						}
+					})
+				});
+			},
+			callback(type) {
+				this.visible = false;
+				if (type === 'init') this.init();
+			}
+		},
+		components: {
+			flowForm,
+			flowDetail
+		},
+	}
+</script>
+
 <style lang="scss"></style>

+ 33 - 13
virgo.wzfrontend/console/src/views/work/property/register.vue

@@ -14,7 +14,16 @@
 								<span class="el-collapse-name">{{item.name}}</span>
 							</template>
 							<div>
-								<el-tree :data="item.children" :props="defaultProps" :expand-on-click-node="false">
+								<el-tree :data="item.children" :props="defaultProps">
+									<div class="custom-tree-node" slot-scope="{ node, data }">
+										<div class="label">{{node.label}}</div>
+										<div :class="nowData.id === data.id ? 'active':''"
+											@click.stop="filterDevice(data)">
+											<i
+												:class="'iconfont ' + (data.deviceId ? 'huifont-shebeiguanli' : 'huifont-xiangmuguanli')">
+											</i>
+										</div>
+									</div>
 								</el-tree>
 							</div>
 						</el-collapse-item>
@@ -135,7 +144,9 @@
 				visible: false,
 				isUpdate: false,
 				detailId: '',
-				drawer: false
+				drawer: false,
+				nowData: {},
+				filterOption: {}
 			}
 		},
 		created() {
@@ -144,10 +155,12 @@
 		},
 		methods: {
 			init() {
-				getFlowList(this.currPage, this.pageSize, {
+				let filterOption = {
 					projectId: this.$store.getters.project.id,
 					flowType: this.flowType
-				}).then(res => {
+				};
+				filterOption = Object.assign(filterOption, this.filterOption);
+				getFlowList(this.currPage, this.pageSize, filterOption).then(res => {
 					if (res.state) {
 						this.tableData = res.data.dataList.map(node => {
 							node = Object.assign(node, JSON.parse(node.flowData));
@@ -163,7 +176,7 @@
 						if (res.data.length === 0) {
 							initDevicePartList(this.$store.getters.organization.id, this.$store.getters.project.id)
 								.then(res => {
-									if (res.state) this.init();
+									if (res.state) this.initDeviceList();
 								})
 						} else {
 							this.treeData = res.data;
@@ -174,17 +187,24 @@
 			},
 			returnChildren(data) {
 				data.forEach(item => {
-					if (item.children && item.deviceList) {
-						let obj = item.deviceList.map(res => {
-							res['deviceId'] = res.id;
-							res['id'] = -res.id;
-							return res;
-						})
-						item.children = item.children.concat(obj);
-					}
 					if (item.children && item.children.length > 0) this.returnChildren(item.children);
 				});
 			},
+			filterDevice(data) {
+				this.filterOption = {};
+				if (this.nowData.id === data.id) {
+					this.nowData = {};
+				} else {
+					this.nowData = data;
+					if (this.nowData.deviceId) {
+						this.filterOption['deviceId'] = this.nowData.deviceId;
+					} else {
+						this.filterOption['deviceLevelId'] = this.nowData.id;
+					}
+				}
+				this.currPage = 1;
+				this.init();
+			},
 			currentChange(currPage) {
 				this.currPage = currPage;
 				this.init();

BIN
virgo.wzfrontend/src/main/resources/static/console/assets/model/yuanzhui.fbx


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/console/index.html


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/console/static/css/9906.274261e1.css


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/console/static/css/2042.b104e88f.css


virgo.wzfrontend/src/main/resources/static/console/static/css/2565.d878ce6b.css → virgo.wzfrontend/src/main/resources/static/console/static/css/5127.d878ce6b.css


virgo.wzfrontend/src/main/resources/static/console/static/css/5497.d878ce6b.css → virgo.wzfrontend/src/main/resources/static/console/static/css/7729.d878ce6b.css


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/console/static/css/app.78388f7d.css


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/console/static/css/app.ef440b7e.css


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/console/static/js/1216-legacy.1d283ab6.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/console/static/js/1234-legacy.bcbd6d41.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/console/static/js/1234.1497ac43.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/console/static/js/1703-legacy.84092482.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/console/static/js/1703.8bab3c28.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/console/static/js/2042.2e21ca91.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/2385-legacy.1b8388d6.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/2385.febffcf3.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/2565-legacy.07b82af4.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/3082-legacy.feab66c3.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/324.28bafd73.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/console/static/js/3620-legacy.8726361e.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/console/static/js/3620.d6f21564.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/383-legacy.3e44e51a.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/383.a0054506.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/4610-legacy.3521354d.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/console/static/js/4610-legacy.88c62725.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/4635.a1898ec0.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/console/static/js/4639-legacy.1029a16e.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/4639-legacy.72d8b6aa.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/4639.caf5a156.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/5497.d5328bcf.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/5411-legacy.3166e770.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/console/static/js/5411-legacy.3aa583c5.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/console/static/js/5567.1ddb5251.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/5567.a92bb820.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/6462-legacy.4233efc8.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/6462.cd8b7c67.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/console/static/js/7431-legacy.d2ee38a8.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/console/static/js/7431.19b7dfec.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/7437-legacy.190ca518.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/console/static/js/7437-legacy.3fbb7b58.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/7456-legacy.da13cc42.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/7456.e09ab755.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/console/static/js/7729-legacy.b2c5c7c3.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/9023.059fc9c1.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/9906-legacy.c4857c5d.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/9906.36cfd945.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/app-legacy.9f71e80d.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/console/static/js/app-legacy.bcc3ef59.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/console/static/js/app.2280c4cc.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/console/static/js/app.90f6f6b7.js