From dd0cc539598b599240ac3d95a74170544ed5741c Mon Sep 17 00:00:00 2001
From: lzhe <lzhe@example.com>
Date: 星期五, 21 六月 2024 09:51:15 +0800
Subject: [PATCH] Merge branch 'master' of http://www.beijingsoft.cn:9090/r/smart-web

---
 src/views/home/widgets/components/mdcRunning.vue      |   11 +
 src/views/home/widgets/components/mdcEquipmentRun.vue |  315 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/views/home/widgets/index.vue                      |    1 
 3 files changed, 325 insertions(+), 2 deletions(-)

diff --git a/src/views/home/widgets/components/mdcEquipmentRun.vue b/src/views/home/widgets/components/mdcEquipmentRun.vue
new file mode 100644
index 0000000..3199004
--- /dev/null
+++ b/src/views/home/widgets/components/mdcEquipmentRun.vue
@@ -0,0 +1,315 @@
+<!--
+ * @Author: lzhe lzhe@example.com
+ * @Date: 2024-04-16 15:22:46
+ * @LastEditors: lzhe lzhe@example.com
+ * @LastEditTime: 2024-06-21 01:45:18
+ * @FilePath: /CPSnew/smart-web/src/views/home/widgets/components/mdcDeviceStatus.vue
+ * @Description: 杩欐槸榛樿璁剧疆,璇疯缃甡customMade`, 鎵撳紑koroFileHeader鏌ョ湅閰嶇疆 杩涜璁剧疆: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+-->
+<template>
+	<el-card shadow="hover" header="璁惧绋煎姩鐜囨帓鍚�" style="height: 100%;" class="running">
+		<div class="running-icon">
+			<el-icon><RefreshLeft /></el-icon>
+			<el-icon @click="showSearch"><Filter /></el-icon>
+		</div>
+		<div class="no-list">{{oeeTitle}}</div>
+		<div :id="'equipment'" style="height:160px;"></div>
+
+		<div class="advance-box" v-show="isSearch">
+			<div class="advance-header">绛涢��
+				<el-icon @click="isSearch = false"><Close /></el-icon>
+			</div>
+			<div class="advance-content">
+				<div>
+					<div>
+						<div class="advance-title">閫夋嫨宸ヤ綅</div>
+						<el-tree-select
+							multiple
+							show-checkbox
+							default-expand-all
+							size="small"
+							@change = "parentIdChange"
+						    v-model="search.workStationIdList"
+						    clearable
+							node-key="id"
+						    placeholder="涓婄骇鑿滃崟"
+							ref="parentTree"
+						    :data="parentData"
+						    :props="{ label: 'title' }"
+						    style="width:80%;"
+							:render-after-expand="false" />
+					</div>
+					<div>
+						<div class="advance-title">閫夋嫨闇�瑕佹帓鍚嶇殑鏃堕棿</div>
+						<el-select v-model="search.timeLevel" size="small" style="width:80%;">
+							<template #prefix><span style="margin-right: 6px;color: #409eff;">杩慛灏忔椂</span></template>
+							<el-option v-for="item in timeLevelList" :key="item.value" :label="item.label" :value="item.value"/>
+						</el-select>
+					</div>
+					<div>
+						<div class="advance-title">閫夋嫨璁惧鎺掑悕</div>
+						<el-select v-model="search.top" size="small" style="width:80%;">
+							<template #prefix><span style="margin-right: 6px;color: #409eff;" placeholder="鎵�鏈�">璁惧TOP</span></template>
+							<el-option v-for="item in topList" :key="item.value" :label="item.label" :value="item.value"/>
+						</el-select>
+					</div>
+				</div>
+			</div>
+			<div style="width: 100%;text-align: right;margin-right: 12px;margin-top: 12px;">
+				<el-button type="primary" @click="serchSubmit">绛涢��</el-button>
+			</div>
+		</div>
+	</el-card>
+
+</template>
+
+<script>
+	import * as echarts from 'echarts';
+	import * as ElementPlusIconsVue from '@element-plus/icons-vue'
+	let icons = []
+	for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
+	    icons.push(key)
+	}
+	export default {
+		title: "璁惧绋煎姩鐜囨帓鍚�",
+		icon: "el-icon-data-line",
+		description: "蹇�熸煡鐪嬭澶囩鍔ㄧ巼",
+		data() {
+			return {
+				oeeTitle: "",
+				parentData: {},
+				list: [],
+				timeLevelList: [],
+				topList: [],
+				search: {
+					workStationIdList: [],
+					timeLevel: "",
+					top: ""
+				},
+				isSearch: false,
+				timeLevel: "",
+				top: "",
+				apiResource: {
+					workStationIdList: []
+				},
+				cardData: {},
+				option: {  
+					grid: {
+						top: '0',
+						bottom: '0',
+						containLabel: true
+					},
+					yAxis: {  
+						type: 'category',  
+						data: [],  
+						axisLine: {  
+							show: false // 闅愯棌y杞磋酱绾�  
+						},  
+						axisTick: {  
+							show: false // 闅愯棌y杞村埢搴︾嚎  
+						},
+						splitLine: {  
+							show: false // 闅愯棌y杞寸綉鏍肩嚎  
+						}
+					},  
+					xAxis: {  
+						type: 'value',  
+						axisLabel: {  
+						show: false // 闅愯棌x杞存暟鎹爣绛�  
+						}  
+					},  
+					series: [  
+						{  
+						data: [3.96, 3.95, 3.93, 3.91, 3.91, 3.9, 3.85],  
+						type: 'bar',  
+						label: {  
+							show: true, // 鏄剧ず鏍囩  
+							position: 'right', // 鏍囩浣嶇疆璁剧疆涓烘煴瀛愮殑鍙充晶  
+							formatter: function(params) {  
+							// 杩斿洖鏁版嵁鍊煎拰鎮ㄦ兂瑕佹坊鍔犵殑瀛楃涓茬殑缁勫悎  
+							return params.value + '%'; // 渚嬪锛岃繑鍥� '3.96 鏂囧瓧'  
+							}  
+						}  
+						}  
+					]  
+					},
+			}
+		},
+		components: {...ElementPlusIconsVue},
+		mounted() {
+			this.getParentData();
+			var arr = [];
+			for(var i=1;i<=30;i++) {
+				this.timeLevelList.push({value:i,label:i});
+				this.topList.push({value:i,label:i});
+			}
+		},
+		methods: {
+			showSearch() {
+				this.search.timeLevel = this.timeLevel;
+				this.search.top = this.top;
+				this.isSearch = true;
+			},
+			serchSubmit() {
+				this.apiResource = this.search;
+				this.getRunData();
+			},
+			setCurrentKey(v) {
+				if (this.firstWorkKey) return
+				if (v.isWorkstation) {
+					this.firstWorkKey = v.id
+				}
+			},
+			formatData(data, current) {
+				let newData = []
+				if (!current) {
+					newData = data.filter(item => item.parentId == 0).map(v => {
+						//if (!v.isWorkstation) v.disabled = true
+						v.children = this.formatData(data, v).sort((a, b) => {
+							return b.sort - a.sort
+						})
+						this.setCurrentKey(v)
+						return v
+					})
+				} else {
+					let res = data.filter(v => v.parentId == current.id)
+					res = res.map(item => {
+						//if (!item.isWorkstation) item.disabled = true
+						item.children = this.formatData(data, item).sort((a, b) => {
+							return b.sort - a.sort
+						})
+						this.setCurrentKey(item)
+						return item
+					})
+					return res
+				}
+				return newData
+			},
+			getParentData() {
+				this.$HTTP.post('/api/blade-cps/group/groupWorkstation/type', {
+					groupCategory: 1,
+					groupType: "group_workstation"
+				}).then(({ code, data }) => {
+					if (code === 200) {
+						this.data = this.formatData(data)
+						this.$nextTick(() => {
+							this.parentData = this.data;
+							this.getList();
+						})
+					}
+				})
+			},
+			parentIdChange(val) {
+				// var $parentId = this.$refs.parentTree.getCurrentNode().title;
+				// this.formAddMenu.$parentId = $parentId;
+			},
+			getList() {
+				this.cardData = this.$CONFIG.DEFAULT_GRID.data;
+				this.cardData.forEach(item=> {
+					if(item.cardKey == "mdcEquipmentRun") {
+						this.getRunData();
+					}
+				})
+			},
+			getRunData() {
+				var ids = this.extractLastLevelIds(this.parentData); 
+				var obj = {
+					timeLevel: 24,
+					top: 7,
+					workStationIdList: ids
+				}
+				this.$HTTP.post(`/api/blade-visual/status/oee-top`,obj).then(res=> {
+					if(res.code == 200) {
+						this.isSearch = false;
+						var recordDom = document.getElementById('equipment');
+						if(res.data.categories.length == 0) return;
+						this.option.yAxis.data = res.data.categories;
+						this.option.series[0].data = res.data.series[0].data;
+						this.oeeTitle = res.data.series[0].name;
+						var myChart = echarts.init(recordDom);
+						myChart.setOption(this.option);
+					}
+				})
+			},
+			goPage(item) {
+				
+			},
+			extractLastLevelIds(items, result = []) {  //閫掑綊鑾峰彇children鏈�鍚庝竴绾х殑id鐨勬暟缁�
+			  items.forEach(item => {  
+			    // 濡傛灉褰撳墠椤规湁id灞炴�т笖娌℃湁children鎴朿hildren涓虹┖鏁扮粍  
+			    if (item.id && (!item.children || item.children.length === 0)) {  
+			      result.push(item.id);  
+			    }  
+			  
+			    // 濡傛灉褰撳墠椤规湁children灞炴�т笖鏄暟缁勶紝鍒欓�掑綊璋冪敤collectIds  
+			    if (Array.isArray(item.children)) {  
+			      this.extractLastLevelIds(item.children, result);  
+			    }  
+			  });  
+			  
+			  // 杩斿洖鏀堕泦鍒扮殑id鏁扮粍  
+			  return result;  
+			},
+		},
+	}
+</script>
+<style scoped>
+	.running /deep/ .el-card__body {
+		padding: 12px 12px 12px;
+	}
+	.running {
+		position: relative;
+	}
+	.running-icon {
+		position: absolute;
+		right: 0;
+		top: 15px;
+	}
+	.running-icon i {
+		font-size: 16px;
+		cursor: pointer;
+		margin-right: 15px;
+	}
+	.no-list {
+		display: flex;
+    	justify-content: center;
+		font-weight: 500;
+		font-size: 14px;
+		color: #666;
+		align-items: center;
+	}
+	.advance-box{
+		width: 330px;
+		height: 100%;
+		padding: 15px 16px;
+		border-radius: 2px;
+		box-sizing: border-box;
+		border: 1px solid #ebeef5;
+		position: absolute;
+		right: 0;
+		top: 0;
+		background-color: #fff;
+	}
+	.advance-header {
+		width: 100%;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		font-weight: 700;
+		font-size: 16px;
+		color: #333;
+	}
+	.advance-header i {
+		cursor: pointer;
+	}
+	.advance-content {
+		height: calc(100% - 54px);
+		overflow: auto;
+	}
+	.advance-title {
+		margin: 20px 0 12px;
+		font-weight: 400;
+		font-size: 14px;
+		color: #666;
+	}
+</style>
\ No newline at end of file
diff --git a/src/views/home/widgets/components/mdcRunning.vue b/src/views/home/widgets/components/mdcRunning.vue
index 8b38032..25eadef 100644
--- a/src/views/home/widgets/components/mdcRunning.vue
+++ b/src/views/home/widgets/components/mdcRunning.vue
@@ -10,7 +10,7 @@
 	<el-card shadow="hover" header="璁惧杩愯鏃堕暱鎺掑悕" style="height: 100%;" class="running">
 		<div class="running-icon">
 			<el-icon><RefreshLeft /></el-icon>
-			<el-icon @click="isSearch = true"><Filter /></el-icon>
+			<el-icon @click="showSearch"><Filter /></el-icon>
 		</div>
 		<div class="no-list">璁惧杩愯鏃堕暱{{timeLevel}}灏忔椂鍐呭墠{{top}}鍚�</div>
 		<div :id="'running'" style="height:160px;"></div>
@@ -145,8 +145,14 @@
 			}
 		},
 		methods: {
+			showSearch() {
+				this.search.timeLevel = this.timeLevel;
+				this.search.top = this.top;
+				this.isSearch = true;
+			},
 			serchSubmit() {
-
+				this.apiResource = this.search;
+				this.getRunData();
 			},
 			setCurrentKey(v) {
 				if (this.firstWorkKey) return
@@ -213,6 +219,7 @@
 			getRunData() {
 				this.$HTTP.post(`/api/blade-visual/status/running-top`,this.apiResource).then(res=> {
 					if(res.code == 200) {
+						this.isSearch = false;
 						var recordDom = document.getElementById('running');
 						if(res.data.categories.length == 0) return;
 						this.option.yAxis.data = res.data.categories;
diff --git a/src/views/home/widgets/index.vue b/src/views/home/widgets/index.vue
index 7f90f83..ead9fad 100644
--- a/src/views/home/widgets/index.vue
+++ b/src/views/home/widgets/index.vue
@@ -111,6 +111,7 @@
 			this.getWorkbenchCarList();
 		},
 		mounted() {
+			console.log(this.allComps,this.element,this.grid.layout)
 			this.$emit('on-mounted')
 		},
 		computed: {

--
Gitblit v1.9.3