From 3efe2606474fba1905fa4edab82b713b9cfb5ef3 Mon Sep 17 00:00:00 2001
From: baoshiwei <baoshiwei@shlanbao.cn>
Date: 星期二, 01 八月 2023 08:22:03 +0800
Subject: [PATCH] 完成车间大屏

---
 src/views/dry/bigScreen/BigWorkShop.vue |  360 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 356 insertions(+), 4 deletions(-)

diff --git a/src/views/dry/bigScreen/BigWorkShop.vue b/src/views/dry/bigScreen/BigWorkShop.vue
index 4370abf..902e6c9 100644
--- a/src/views/dry/bigScreen/BigWorkShop.vue
+++ b/src/views/dry/bigScreen/BigWorkShop.vue
@@ -1,14 +1,366 @@
 <template>
-  <dv-full-screen-container>
-     
-  </dv-full-screen-container>
+	<dv-full-screen-container>
+		<div class="fbg">
+			<div class="bgImage">
+				<div class="head">
+					<div style="width: 600px; height: 50px"> <dv-decoration-8 style="width: 500px; height: 50px" /></div>
+
+					<div class="title">
+						<span>鍏版郸鏅鸿兘骞茬嚗杞﹂棿</span>
+
+						<dv-decoration-5 :dur="20" style="margin-top: -40px; width: 700px; height: 80px" />
+					</div>
+					<div style="width: 600px; height: 50px; display: flex; justify-content: end">
+						<dv-decoration-8 :reverse="true" style="width: 500px; height: 50px"
+					/></div>
+				</div>
+				<div class="body">
+					<div class="humiture">
+						<div style="display: flex; width: 120px">
+							<Icon style="color: #f7b733" icon="solar:temperature-line-duotone" :size="28" />
+							&nbsp;
+							<div style="font-size: 20px; line-height: 26px"> 26 鈩� </div>
+						</div>
+						<div style="display: flex">
+							<Icon style="color: #f7b733" icon="material-symbols:humidity-percentage-outline" :size="28" />
+							&nbsp;
+							<div style="font-size: 20px; line-height: 26px"> 53 %rh </div>
+						</div>
+					</div>
+					<div class="up">
+						<div v-for="num in eqpNum" :key="num" :class="{ one: num === 1, two: num === 2, three: num === 3, four: num === 4 }">
+							<div class="eqpInfoup" @click="gotoeqp(num - 1)">
+								<div class="eqp-title">
+									<div class="eqp-name">{{ eqpMap.get(eqpCodes[num - 1])?.name || '棰勭暀' }}</div>
+									<!-- <div class="process"> </div> -->
+									<Progress
+										:stroke-color="{
+											from: '#108ee9',
+											to: '#87d068',
+										}"
+										:percent="parseFloat(realTime.get(eqpCodes[num - 1])?.percent || '0')"
+										status="active"
+										trailColor="#2b2b2b2b"
+										:show-info="false"
+									/>
+									<!-- <div class="eqp-name">50%</div> -->
+								</div>
+								<div class="eqp-info-up">
+									<div class="herb">{{ realTime.get(eqpCodes[num - 1])?.herbName || '鏆傛棤' }}</div>
+								</div>
+								<div class="water">
+									<div class="temp">
+										<div style="line-height: 28px"><Icon style="color: #2a5a63" icon="ic:twotone-water-drop" :size="28" /> </div>
+										<div class="font">
+											<span class="value"> {{ realTime.get(eqpCodes[num - 1])?.trendVo.moisture || '0' }}</span> %
+										</div>
+									</div>
+									<div class="temp">
+										<div style="line-height: 28px"><Icon style="color: #6c5b7b" icon="solar:temperature-bold-duotone" :size="30" /> </div>
+										<div class="font">
+											<span class="value">{{ realTime.get(eqpCodes[num - 1])?.trendVo.bellowsTemp || '0' }} </span> 鈩�
+										</div>
+									</div>
+								</div>
+							</div>
+						</div>
+					</div>
+					<div class="down">
+						<div v-for="num in eqpNum" :key="num" :class="{ one: num === 1, two: num === 2, three: num === 3, four: num === 4 }">
+							<div class="eqpInfodown" @click="gotoeqp(num + 3)">
+								<div class="eqp-info-down">
+									<div class="herb">{{ realTime.get(eqpCodes[num + 3])?.herbName || '鏆傛棤' }}</div>
+								</div>
+								<div class="water">
+									<div class="temp">
+										<div style="line-height: 28px">
+											<Icon style="color: #2a5a63" icon="ic:twotone-water-drop" :size="28" />
+										</div>
+										<div class="font">
+											<span class="value">{{ realTime.get(eqpCodes[num + 3])?.trendVo.moisture || '0' }}</span> %
+										</div>
+									</div>
+									<div class="temp">
+										<div style="line-height: 28px"><Icon style="color: #6c5b7b" icon="solar:temperature-bold-duotone" :size="30" /> </div>
+										<div class="font">
+											<span class="value">{{ realTime.get(eqpCodes[num + 3])?.trendVo.bellowsTemp || '0' }}</span> 鈩�
+										</div>
+									</div>
+								</div>
+
+								<div style="height: 70px"></div>
+								<div class="eqp-title">
+									<!-- <div class="process"> </div> -->
+									<Progress
+										:stroke-color="{
+											from: '#108ee9',
+											to: '#87d068',
+										}"
+										:percent="parseFloat(realTime.get(eqpCodes[num + 3])?.percent || '0')"
+										status="active"
+										trailColor="#2b2b2b2b"
+										:show-info="false"
+									/>
+									<!-- <div class="eqp-name">50%</div> -->
+									<div class="eqp-name-down">{{ eqpMap.get(eqpCodes[num + 3])?.name || '棰勭暀' }}</div>
+								</div>
+							</div>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+	</dv-full-screen-container>
 </template>
 
 <script setup lang="ts">
+	import { Progress } from 'ant-design-vue'
+	import { onMounted, ref, onUnmounted } from 'vue'
+	import { Icon, IconPicker, SvgIcon } from '/@/components/Icon/index'
+	import { listAll } from '../api/DryEquipment.api'
+	import { dryEquipment } from '../dataDefine/DryEquipment.data'
+	import { router } from '/@/router'
+	import { defHttp } from '/@/utils/http/axios'
+	import { useUserStore } from '/@/store/modules/user'
+	const eqpNum = ref(4)
+	const eqpMap = ref(new Map())
+	const eqpCodes = ref(['GM001', 'GM002', 'GM003', 'GM004', 'GM005', 'GM006'])
+	const eqps = ref([] as dryEquipment[])
 
+	const userStore = useUserStore()
+	const Timer = ref()
 
+	const realTime = ref(new Map())
+
+	function listAllEqp() {
+		listAll({ enable: 'Y' })
+			.then((result) => {
+				//console.log(`output->result`, result)
+				eqps.value = result
+
+				result.forEach((item) => {
+					eqpMap.value.set(item.code, item)
+				})
+				updateRealTime()
+			})
+			.catch((err) => {
+				console.log(`output->err`, err)
+			})
+	}
+
+	function updateRealTime() {
+		//console.log(`output->瀹氭椂鍒锋柊鏁版嵁`)
+		eqps.value.forEach((item) => {
+			queryRealTime(item)
+		})
+	}
+
+	function queryRealTime(eqp: dryEquipment) {
+		let tenantId = userStore.getTenant
+		let eqpCode = eqp.code
+		let queryRealTimeUrl = '/dry/real/getRealTimeData'
+		defHttp.get({ url: queryRealTimeUrl, params: { tenantid: tenantId, machineid: eqpCode } }).then((res) => {
+			//console.log(`output->res`, res)
+			if (res && res.trendVo) {
+				res.tempValue = [res.windTemp, 100]
+				res.percent = ((res.dryTime / (res.dryTime + res.remain)) * 100).toFixed(2)
+			} else {
+				res = {
+					tempValue: [0, 100],
+					percent: 0,
+					mois: [],
+				}
+			}
+
+			realTime.value.set(eqp.code, res)
+		})
+	}
+	function gotoeqp(num) {
+		if (num < eqpCodes.value.length) {
+			router.push({ path: '/bigEqp', query: { num: num } })
+		}
+	}
+
+	listAllEqp()
+	onMounted(() => {
+		Timer.value = setInterval(updateRealTime, 3000)
+	})
+
+	onUnmounted(() => {
+		clearInterval(Timer.value)
+		Timer.value = null
+	})
 </script>
 
 <style scoped>
+	.fbg {
+		height: 1080px;
+		width: 1920px;
+		background-image: url(/src/assets/images/dry/bg/bg5.png);
+		background-repeat: no-repeat;
+	}
+	.bgImage {
+		height: 1080px;
+		width: 1920px;
+		background-image: url(/src/assets/images/dry/bg/wksp2.png);
+		background-repeat: no-repeat;
+		background-size: 100%;
+		background-position: 0% 50%;
+	}
 
-</style>
\ No newline at end of file
+	.head {
+		display: flex;
+		align-content: center;
+		justify-content: center;
+	}
+
+	.body {
+		height: 980px;
+		width: 100%;
+		margin-top: -100px;
+		font-size: 20px;
+	}
+	.title {
+		height: 200px;
+		padding: 20px;
+		font-size: 30px;
+		font-weight: bold;
+		text-align: center;
+		color: white;
+	}
+
+	.humiture {
+		height: 0px;
+		justify-content: center;
+		color: white;
+		display: flex;
+	}
+
+	.up {
+		padding-left: 100px;
+		padding-top: 00px;
+		display: flex;
+
+		align-content: center;
+		justify-content: flex-start;
+	}
+	.down {
+		padding-left: 392px;
+		margin-top: -334px;
+		display: flex;
+
+		align-content: center;
+		justify-content: flex-start;
+	}
+	.eqpInfoup {
+		width: 280px;
+		height: 300px;
+		margin: 0 41px;
+		display: flex;
+		flex-direction: column;
+	}
+
+	.eqpInfodown {
+		width: 280px;
+		height: 300px;
+		margin: 0 41px;
+		display: flex;
+		flex-direction: column;
+		justify-content: flex-start;
+	}
+
+	.one {
+		margin-top: 280px;
+	}
+
+	.two {
+		margin-top: 220px;
+	}
+
+	.three {
+		margin-top: 160px;
+	}
+
+	.four {
+		margin-top: 100px;
+	}
+
+	.eqp-title {
+		height: 30px;
+		border-radius: 20px;
+		/* background: rgb(182, 182, 182);
+		border: 1px solid green; */
+		width: 100%;
+	}
+
+	.eqp-name {
+		line-height: 30px;
+		text-align: center;
+		color: white;
+		margin-top: -30px;
+	}
+
+	.eqp-name-down {
+		line-height: 40px;
+		text-align: center;
+		color: white;
+	}
+
+	.process {
+		width: 50%;
+		height: 100%;
+		overflow: hidden;
+		border-radius: 20px;
+		background: #3f4c6b;
+	}
+
+	.eqp-info-up {
+		flex: 1;
+		padding-top: 120px;
+		display: flex;
+	}
+
+	.eqp-info-down {
+		flex: 1;
+		padding-top: 50px;
+		display: flex;
+	}
+
+	.herb {
+		height: 30px;
+		background: #3f4c6b;
+		color: white;
+		line-height: 30px;
+		padding: 0 10px;
+	}
+	.water {
+		height: 120px;
+		width: 110px;
+		margin-left: 170px;
+		display: flex;
+		flex-wrap: wrap;
+		align-content: space-evenly;
+	}
+
+	.temp {
+		display: flex;
+	}
+	.font {
+		line-height: 26px;
+	}
+
+	.value {
+	}
+	:deep() .progress {
+		padding: 25px 25px;
+
+		width: 360px;
+		display: flex;
+	}
+	:deep() .ant-progress-bg {
+		height: 25px !important;
+	}
+	:deep() .ant-progress-inner {
+		background-color: rgb(197 197 197 / 52%) !important;
+	}
+</style>

--
Gitblit v1.9.3