From 346c9a61f4407be8180aff944bf75bed9c5efd00 Mon Sep 17 00:00:00 2001 From: baoshiwei <baoshiwei@shlanbao.cn> Date: 星期五, 06 十二月 2024 16:08:40 +0800 Subject: [PATCH] 完成设备大屏,新增报警大屏 --- src/views/dry/bigScreen/BigFault.vue | 1372 +++++++++++++++++++++++++ src/views/dashboard/map/index.vue | 233 ++++ src/enums/pageEnum.ts | 2 src/views/sys/login/TokenLoginPage.vue | 2 .env | 2 src/views/system/tenant/tenant.api.ts | 6 src/views/dry/bigScreen/BigEqpCloud.vue | 187 ++ src/layouts/default/header/index.vue | 2 package.json | 2 src/views/system/loginmini/MiniLogin.vue | 74 src/views/dry/bigScreen/BigEqp.vue | 416 ++++++ src/router/routes/index.ts | 11 src/views/dry/bigScreen/BigFaultCloud.vue | 905 +++++++++++----- 13 files changed, 2,778 insertions(+), 436 deletions(-) diff --git a/.env b/.env index a2cd447..c0dab3c 100644 --- a/.env +++ b/.env @@ -2,7 +2,7 @@ VITE_PORT = 3100 # 缃戠珯鏍囬 -VITE_GLOB_APP_TITLE = 鍏版郸鏅鸿兘绉戞妧 +VITE_GLOB_APP_TITLE = 鍏版郸涓嵂骞茬嚗浜戝钩鍙� # 绠�绉帮紝鐢ㄤ簬閰嶇疆鏂囦欢鍚嶅瓧 涓嶈鍑虹幇绌烘牸銆佹暟瀛楀紑澶寸瓑鐗规畩瀛楃 VITE_GLOB_APP_SHORT_NAME = JeecgBootAdmin diff --git a/package.json b/package.json index 1634a5e..5449600 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "gen:icon": "esno ./build/generate/icon/index.ts" }, "dependencies": { + "@amap/amap-jsapi-loader": "^1.0.1", "@ant-design/colors": "^6.0.0", "@ant-design/icons-vue": "^6.1.0", "@dataview/datav-vue3": "^0.0.0-test.1672506674342", @@ -82,6 +83,7 @@ "tinymce": "^5.10.3", "vditor": "^3.8.13", "vue": "^3.2.33", + "vue-amap": "^0.5.10", "vue-cropper": "^0.5.6", "vue-cropperjs": "^5.0.0", "vue-i18n": "^9.1.9", diff --git a/src/enums/pageEnum.ts b/src/enums/pageEnum.ts index 7c48680..37deed3 100644 --- a/src/enums/pageEnum.ts +++ b/src/enums/pageEnum.ts @@ -2,7 +2,7 @@ // basic login path BASE_LOGIN = '/login', // basic home path - BASE_HOME = '/dashboard/workshop', + BASE_HOME = '/dashboard/map', // error page path ERROR_PAGE = '/exception', // error log page path diff --git a/src/layouts/default/header/index.vue b/src/layouts/default/header/index.vue index de8ea79..ba59bb1 100644 --- a/src/layouts/default/header/index.vue +++ b/src/layouts/default/header/index.vue @@ -11,7 +11,7 @@ /> <LayoutBreadcrumb v-if="getShowContent && getShowBread" :theme="getHeaderTheme" /> <!-- 娆㈣繋璇� --> - <span v-if="getShowContent && getShowBreadTitle && !getIsMobile" :class="[prefixCls, `${prefixCls}--${getHeaderTheme}`,'headerIntroductionClass']"> 娆㈣繋杩涘叆 {{ '涓嵂杞﹂棿鏅鸿兘鐢熶骇绠$悊绯荤粺' }} </span> + <span v-if="getShowContent && getShowBreadTitle && !getIsMobile" :class="[prefixCls, `${prefixCls}--${getHeaderTheme}`,'headerIntroductionClass']"> 娆㈣繋杩涘叆 {{ '鍏版郸涓嵂骞茬嚗浜戝钩鍙�' }} </span> </div> <!-- left end --> diff --git a/src/router/routes/index.ts b/src/router/routes/index.ts index 2128c2e..3d24577 100644 --- a/src/router/routes/index.ts +++ b/src/router/routes/index.ts @@ -81,6 +81,15 @@ }, } +export const BigFault: AppRouteRecordRaw = { + path: '/bigFault', + name: 'BigFault', + component: () => import('/@/views/dry/bigScreen/BigFault.vue'), + meta: { + title: t('big.screen.fault'), + }, +} + //update-begin---author:wangshuai ---date:20220629 for锛歛uth2鐧诲綍椤甸潰璺敱------------ export const Oauth2LoginRoute: AppRouteRecordRaw = { path: '/oauth2-app/login', @@ -108,4 +117,4 @@ } // Basic routing without permission -export const basicRoutes = [LoginRoute, RootRoute, ...mainOutRoutes, REDIRECT_ROUTE, PAGE_NOT_FOUND_ROUTE, TokenLoginRoute, Oauth2LoginRoute,BigScreen,BigScreenN,BigEqp,BigEqpCloud,BigFaultCloud] +export const basicRoutes = [LoginRoute, RootRoute, ...mainOutRoutes, REDIRECT_ROUTE, PAGE_NOT_FOUND_ROUTE, TokenLoginRoute, Oauth2LoginRoute,BigScreen,BigScreenN,BigEqp,BigEqpCloud,BigFaultCloud,BigFault] diff --git a/src/views/dashboard/map/index.vue b/src/views/dashboard/map/index.vue new file mode 100644 index 0000000..1bd6800 --- /dev/null +++ b/src/views/dashboard/map/index.vue @@ -0,0 +1,233 @@ +<template> + <div class="home_div"> + <div id="container" style="height: 100%; width: 100%"></div> + </div> +</template> +<script setup lang="ts"> + import AMapLoader from '@amap/amap-jsapi-loader' + import { listAllTenant } from '../../system/tenant/tenant.api' + import { onMounted, ref } from 'vue' + import { router } from '/@/router' + const tenants = ref([]) + const points = ref([]) + + const initMap = () => { + window._AMapSecurityConfig = { + securityJsCode: 'c1fa6ceb212b62bf9489da9c9986eb5e', + } + AMapLoader.load({ + key: '1582675884a1ef3c90b5ae1769c765a7', // 鐢宠濂界殑Web绔紑鍙戣�匥ey锛岄娆¤皟鐢� load 鏃跺繀濉� + version: '2.0', // 鎸囧畾瑕佸姞杞界殑 JSAPI 鐨勭増鏈紝缂虹渷鏃堕粯璁や负 1.4.15 + plugins: ['AMap.Scale'], //闇�瑕佷娇鐢ㄧ殑鐨勬彃浠跺垪琛紝濡傛瘮渚嬪昂'AMap.Scale'锛屾敮鎸佹坊鍔犲涓锛歔'...','...'] + }).then((AMap) => { + var map = new AMap.Map('container', { + viewMode: '2D', // 鏄惁涓�3D鍦板浘妯″紡 + zoom: 5, // 鍦板浘鏄剧ず鐨勭缉鏀剧骇鍒� + zooms: [2, 22], // 鍦板浘缂╂斁鑼冨洿 + // center: arr, // 鍦板浘涓績鐐瑰潗鏍� + layers: [new AMap.createDefaultLayer()], //璁剧疆鍥惧眰,鍙缃垚鍖呭惈涓�涓垨澶氫釜鍥惧眰鐨勬暟缁� + mapStyle: 'amap://styles/whitesmoke', //璁剧疆鍦板浘鐨勬樉绀烘牱寮� + resizeEnable: true, // 鏄惁鐩戞帶鍦板浘瀹瑰櫒灏哄鍙樺寲 + }) + + var clusterIndexSet = { + //瀹氫箟鐐硅仛鍚堣鍒� + city: { + minZoom: 2, + maxZoom: 9, + }, + district: { + minZoom: 9, + maxZoom: 11, + }, + building: { + minZoom: 11, + maxZoom: 22, + }, + } + + function getStyle(context) { + var clusterData = context.clusterData // 鑱氬悎涓寘鍚暟鎹� + var index = context.index // 鑱氬悎鐨勬潯浠� + var count = context.count // 鑱氬悎涓偣鐨勬�绘暟 + var marker = context.marker // 鑱氬悎缁樺埗鐐� Marker 瀵硅薄 + var color = ['66,130,198', '107,174,214', '78,200,211'] + var indexs = ['city', 'district', 'building'] + var i = indexs.indexOf(index['mainKey']) + var text = clusterData[0][index['mainKey']] + var size = Math.round(30 + Math.pow(count / points.value.length, 1 / 5) * 70) + if (i <= 1) { + var extra = '<span class="showCount">' + context.count + '瀹�</span>' + text = '<span class="showName">' + text + '</span>' + text += extra + } else { + size = 12 * text.length + 20 + } + var style = { + bgColor: 'rgba(' + color[i] + ',.8)', + borderColor: 'rgba(' + color[i] + ',1)', + text: text, + size: size, + index: i, + color: '#ffffff', + textAlign: 'center', + boxShadow: '0px 0px 3px rgba(0,0,0,0.6)', + } + return style + } + function getPosition(context) { + var key = context.index.mainKey + var dataItem = context.clusterData && context.clusterData[0] + var districtName = dataItem[key] + if (!district[districtName]) { + return null + } + var center = district[districtName].center.split(',') + var centerLnglat = new AMap.LngLat(center[0], center[1]) + return centerLnglat + } + function _customRender(data) { + const keys = Object.keys(data.clusterData) + let markers = [] + for (var i = 0; i < keys.length; i++) { + var key = keys[i] + var cluster = data.clusterData[key] + var position = cluster.data[0].lnglat + var marker = new AMap.LabelMarker({ + position: position, + text: { + content: cluster.data.length.toString(), + style: { + fillColor: '#ffffff', + }, + }, + }) + markers.push(marker) + } + return { + type: 'type', + layer: null, + markers: markers, + } + } + + //鑱氬悎鐐规牱寮� + // var _renderClusterMarker = function (context) { + // //context 涓哄洖璋冨弬鏁帮紝 + // console.log("context", context) + // //鍖呭惈濡備笅灞炴�� marker:褰撳墠鑱氬悎鐐癸紝count:褰撳墠鑱氬悎鐐瑰唴鐨勭偣鏁伴噺 + // var clusterCount = context.count //鑱氬悎鐐瑰唴鐐规暟閲� + // context.marker.setContent('<div style="background-color:#00ff00">' + clusterCount + '</div>') + // } + // 鑷畾涔夎仛鍚堢偣鏍峰紡 + function _renderClusterMarker(context) { + var clusterData = context.clusterData // 鑱氬悎涓寘鍚暟鎹� + var index = context.index // 鑱氬悎鐨勬潯浠� + var count = context.count // 鑱氬悎涓偣鐨勬�绘暟 + var marker = context.marker // 鑱氬悎鐐规爣璁板璞� + var styleObj = getStyle(context) + // 鑷畾涔夌偣鏍囪鏍峰紡 + var div = document.createElement('div') + div.className = 'amap-cluster' + div.style.backgroundColor = styleObj.bgColor + div.style.width = styleObj.size + 'px' + if (styleObj.index <= 1) { + div.style.height = styleObj.size + 'px' + // 鑷畾涔夌偣鍑讳簨浠� + context.marker.on('click', function (e) { + console.log(e) + var curZoom = map.getZoom() + if (curZoom < 9) { + curZoom = 9 + } else if (curZoom < 11) { + curZoom = 11 + } + map.setZoomAndCenter(curZoom, e.lnglat) + }) + } else { + // 鑷畾涔夌偣鍑讳簨浠� + context.marker.on('click', function (e) { + let innerText = e.target.dom.innerText; + tenants.value.forEach(item => { + if(item.companyAddress.includes(innerText)) { + //router.push({ path: '/tongjitang/bigworkshop', params: { tenant: item.id } }) + // router.push( {path: '/tongjitang/bigworkshop/' + item.id} ) + // router.push( '/tongjitang/bigworkshop/' + item.id ) + let href = '/tongjitang/bigworkshop/' + item.id; + window.open(href, '_blank'); + } + }) + }) + console.log(router) + } + div.style.border = 'solid 1px ' + styleObj.borderColor + div.style.borderRadius = styleObj.size + 'px' + div.innerHTML = styleObj.text + div.style.color = styleObj.color + div.style.textAlign = styleObj.textAlign + div.style.boxShadow = styleObj.boxShadow + context.marker.setContent(div) + // 鑷畾涔夎仛鍚堢偣鏍囪鏄剧ず浣嶇疆 + // var position = getPosition(context); + // if(position){ + // context.marker.setPosition(position); + // } + context.marker.setAnchor('center') + } + + map.plugin(['AMap.IndexCluster'], function () { + console.log('cluster', points.value) + var indexCluster = new AMap.IndexCluster(map, points.value, { + renderClusterMarker: _renderClusterMarker, //鑷畾涔夎仛鍚堢偣鏍峰紡 + clusterIndexSet: clusterIndexSet, //鑱氬悎瑙勫垯 + }) + }) + }) + } + + const getTenants = () => { + listAllTenant().then((res) => { + tenants.value = res + res.forEach((item) => { + let point = JSON.parse(item.companyAddress) + points.value.push(point) + }) + initMap() + //console.log('points', points.value) + }) + } + + getTenants() + onMounted(() => {}) +</script> +<style> +.amap-cluster { + display: flex; + justify-content: center; + flex-direction: column; + align-items: center; + font-size: 12px; +} +.showName { + font-size: 14px; +} +.showCount, +.showName { + display: block; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + width: 80%; +} +</style> +<style scoped lang="less"> + .home_div { + height: 100%; + width: 100%; + padding: 0px; + margin: 0px; + position: relative; + } + +</style> + diff --git a/src/views/dry/bigScreen/BigEqp.vue b/src/views/dry/bigScreen/BigEqp.vue index 7f8f689..97b590d 100644 --- a/src/views/dry/bigScreen/BigEqp.vue +++ b/src/views/dry/bigScreen/BigEqp.vue @@ -118,45 +118,236 @@ > {{ statusTxt }} </div> - <div v-if="realData?.warning" style=" - margin-left: 100px; - font-size: 22px; - background: sandybrown; +<!-- <div v-if="realData?.warning" style=" --> +<!-- margin-left: 100px;--> +<!-- font-size: 22px;--> +<!-- background: sandybrown;--> - border-radius: 10px; - line-height: 25px; - max-width: 500px; - padding: 15px; - font-weight: bold;" > - {{ realData?.warnMsg }} - </div> - +<!-- border-radius: 10px;--> +<!-- line-height: 25px;--> +<!-- max-width: 500px;--> +<!-- padding: 15px;--> +<!-- font-weight: bold;" >--> +<!-- {{ realData?.warnMsg }}--> +<!-- </div>--> +<!-- --> - <div - v-if="realData?.isError" - class="eqpInfoText blingbling outDiv" - style=" - position: absolute; - font-size: 30px; - max-height: 200px; - max-width: 720px; - margin-top: 300px; - border-radius: 10px; - background-color: #ce0000; - color: white; - padding: 10px 30px; - " - > - <div class="outDiv"> - <div><Icon icon="bx:error" :size="30" /> </div> - <div - ><span>{{ realData?.errorMsg }}</span></div - > - </div> - </div> +<!-- <div--> +<!-- v-if="realData?.isError"--> +<!-- class="eqpInfoText blingbling outDiv"--> +<!-- style="--> +<!-- position: absolute;--> +<!-- font-size: 30px;--> +<!-- max-height: 200px;--> +<!-- max-width: 720px;--> +<!-- margin-top: 300px;--> +<!-- border-radius: 10px;--> +<!-- background-color: #ce0000;--> +<!-- color: white;--> +<!-- padding: 10px 30px;--> +<!-- "--> +<!-- >--> +<!-- <div class="outDiv">--> +<!-- <div><Icon icon="bx:error" :size="30" /> </div>--> +<!-- <div--> +<!-- ><span>{{ realData?.errorMsg }}</span></div--> +<!-- >--> +<!-- </div>--> +<!-- </div>--> </div> </div> + <div style="width: 848px; height: 485px; position: absolute;" @click="showFault"> + <div v-if="zuoqianjiting" class="error-div" style=" top:309px; left:418px"> + <div class="blingbling error-marker" ></div> + <div class="error-msg" style="width: 70px;"> + 宸﹀墠鎬ュ仠 + </div> + </div> + <div v-if="shebeijiting" class="error-div" style=" top:111px; left:484px"> + <div class="blingbling error-marker" ></div> + <div class="error-msg" style=" width: 106px;"> + 璁惧鎬ュ仠锛堟�伙級 + </div> + </div> + <div v-if="chuliaojiting" class="error-div" style=" top:300px; left:129px"> + <div class="blingbling error-marker" ></div> + <div class="error-msg" style=" width: 70px;"> + 鍑烘枡鎬ュ仠 + </div> + </div> + <div v-if="mianbanjiting" class="error-div" style=" top:258px; left:659px"> + <div class="blingbling error-marker" ></div> + <div class="error-msg" style=" width: 70px;"> + 闈㈡澘鎬ュ仠 + </div> + </div> + <div v-if="fengxiangsheng" class="error-div" style=" top:294px; left:517px"> + <div class="blingbling error-marker" ></div> + <div class="error-msg" style=" width: 86px;"> + 椋庣鍗囧紓甯� + </div> + </div> + <div v-if="fengxiangjiang" class="error-div" style=" top:319px; left:517px"> + <div class="blingbling error-marker" ></div> + <div class="error-msg" style=" width: 86px;"> + 椋庣闄嶅紓甯� + </div> + </div> + <div v-if="fengjiguoliu" class="error-div" style=" top:335px; left:655px"> + <div class="blingbling error-marker" ></div> + <div class="error-msg" style=" width: 70px;"> + 椋庢満杩囨祦 + </div> + </div> + <div v-if="guntongsheng" class="error-div" style=" top:198px; left:517px"> + <div class="blingbling error-marker" ></div> + <div class="error-msg" style=" width: 86px;"> + 婊氱瓛鍗囧紓甯� + </div> + </div> + <div v-if="guntongjiang" class="error-div" style=" top:223px; left:517px"> + <div class="blingbling error-marker" ></div> + <div class="error-msg" style=" width: 86px;"> + 婊氱瓛闄嶅紓甯� + </div> + </div> + <div v-if="guntongguoliu" class="error-div" style=" top:209px; left:642px"> + <div class="blingbling error-marker" ></div> + <div class="error-msg" style=" width: 70px;"> + 婊氱瓛杩囨祦 + </div> + </div> + <div v-if="wendubaojing" class="error-div" style=" top:234px; left:659px"> + <div class="blingbling error-marker" ></div> + <div class="error-msg" style=" width: 70px;"> + 娓╁害鎶ヨ + </div> + </div> + + <div v-if="zuoqianmen" class="error-div" style=" top:388px; left:415px"> + <div class="blingbling warn-marker" ></div> + <div class="warn-msg" style=" width: 80px;"> + 宸﹀墠闂ㄦ姤璀� + </div> + </div> + <div v-if="zuohoumen" class="error-div" style=" top:367px; left:587px"> + <div class="blingbling warn-marker" ></div> + <div class="warn-msg" style=" width: 80px;"> + 宸﹀悗闂ㄦ姤璀� + </div> + </div> + <div v-if="youqianmen" class="error-div" style=" top:388px; left:284px"> + <div class="blingbling warn-marker" ></div> + <div class="warn-msg" style=" width: 80px;"> + 鍙冲墠闂ㄦ姤璀� + </div> + </div> + <div v-if="youhoumen" class="error-div" style=" top:367px; left:478px"> + <div class="blingbling warn-marker" ></div> + <div class="warn-msg" style=" width: 80px;"> + 鍙冲悗闂ㄦ姤璀� + </div> + </div> + + <div v-if="guntongbuzaigaowei" class="error-div" style=" top:173px; left:517px"> + <div class="blingbling warn-marker" ></div> + <div class="warn-msg" style=" width: 100px;"> + 婊氱瓛涓嶅湪楂樹綅 + </div> + </div> + <div v-if="fengxiangbuzaigaowei" class="error-div" style=" top:269px; left:517px"> + <div class="blingbling warn-marker" ></div> + <div class="warn-msg" style=" width: 100px;"> + 椋庣涓嶅湪楂樹綅 + </div> + </div> + <div v-if="fengxiangbuzaidiwei" class="error-div" style=" top:343px; left:517px"> + <div class="blingbling warn-marker" ></div> + <div class="warn-msg" style=" width: 100px;"> + 椋庣涓嶅湪浣庝綅 + </div> + </div> + <div v-if="jiareweichuanganqi" class="error-div" style=" top:283px; left:642px"> + <div class="blingbling warn-marker" ></div> + <div class="warn-msg" style=" width: 126px;"> + 鍔犵儹浣嶄紶鎰熷櫒鎶ヨ + </div> + </div> + <div v-if="zuoqianfengxianggaowei" class="error-div" style=" top:334px; left:362px"> + <div class="blingbling warn-marker" ></div> + <div class="warn-msg" style=" width: 126px;"> + 宸﹀墠椋庣涓嶅湪楂樹綅 + </div> + </div> + <div v-if="zuoqianfengxiangdiwei" class="error-div" style=" top:334px; left:362px"> + <div class="blingbling warn-marker" ></div> + <div class="warn-msg" style=" width: 126px;"> + 宸﹀墠椋庣涓嶅湪浣庝綅 + </div> + </div> + <div v-if="zuohoufengxianggaowei" class="error-div" style=" top:309px; left:642px"> + <div class="blingbling warn-marker" ></div> + <div class="warn-msg" style=" width: 126px;"> + 宸﹀悗椋庣涓嶅湪楂樹綅 + </div> + </div> + <div v-if="zuohoufengxiangdiwei" class="error-div" style=" top:309px; left:642px"> + <div class="blingbling warn-marker" ></div> + <div class="warn-msg" style=" width: 126px;"> + 宸﹀悗椋庣涓嶅湪浣庝綅 + </div> + </div> + <div v-if="youqianfengxianggaowei" class="error-div" style=" top:272px; left:300px"> + <div class="blingbling warn-marker" ></div> + <div class="warn-msg" style=" width: 126px;"> + 鍙冲墠椋庣涓嶅湪楂樹綅 + </div> + </div> + <div v-if="youqianfengxiangdiwei" class="error-div" style=" top:272px; left:300px"> + <div class="blingbling warn-marker" ></div> + <div class="warn-msg" style=" width: 126px;"> + 鍙冲墠椋庣涓嶅湪浣庝綅 + </div> + </div> + <div v-if="youhoufengxianggaowei" class="error-div" style=" top:246px; left:506px"> + <div class="blingbling warn-marker" ></div> + <div class="warn-msg" style=" width: 126px;"> + 鍙冲悗椋庣涓嶅湪楂樹綅 + </div> + </div> + <div v-if="youhoufengxiangdiwei" class="error-div" style=" top:246px; left:506px"> + <div class="blingbling warn-marker" ></div> + <div class="warn-msg" style=" width: 126px;"> + 鍙冲悗椋庣涓嶅湪浣庝綅 + </div> + </div> + <div v-if="zuoqianguntongdiwei" class="error-div" style=" top:175px; left:358px"> + <div class="blingbling warn-marker" ></div> + <div class="warn-msg" style=" width: 126px;"> + 宸﹀墠婊氱瓛涓嶅湪浣庝綅 + </div> + </div> + <div v-if="zuohouguntongdiwei" class="error-div" style=" top:158px; left:643px"> + <div class="blingbling warn-marker" ></div> + <div class="warn-msg" style=" width: 126px;"> + 宸﹀悗婊氱瓛涓嶅湪浣庝綅 + </div> + </div> + <div v-if="youqianguntongdiwei" class="error-div" style=" top:150px; left:268px"> + <div class="blingbling warn-marker" ></div> + <div class="warn-msg" style=" width: 126px;"> + 鍙冲墠婊氱瓛涓嶅湪浣庝綅 + </div> + </div> + <div v-if="youhouguntongdiwei" class="error-div" style=" top:135px; left:506px"> + <div class="blingbling warn-marker" ></div> + <div class="warn-msg" style=" width: 126px;"> + 鍙冲悗婊氱瓛涓嶅湪浣庝綅 + </div> + </div> + + </div> </dv-border-box7> <dv-border-box7 class="infoChart" style="margin-left: 0px; margin-right: 10px"> <div class="chartTittle">椋庣娓╁害</div> @@ -524,6 +715,40 @@ var efficiencyLineChart: echarts.ECharts var compareChart: echarts.ECharts + + //----------------error---------------- + const shebeijiting = ref(false) + const chuliaojiting = ref(false) + const zuoqianjiting = ref(false) + const mianbanjiting = ref(false) + const fengxiangsheng = ref(false) + const fengxiangjiang = ref(false) + const fengjiguoliu = ref(false) + const guntongsheng = ref(false) + const guntongjiang = ref(false) + const guntongguoliu = ref(false) + const wendubaojing = ref(false) + //--------------warning------------ + const zuoqianmen = ref(false) + const zuohoumen = ref(false) + const youqianmen = ref(false) + const youhoumen = ref(false) + const guntongbuzaigaowei = ref(false) + const fengxiangbuzaigaowei = ref(false) + const fengxiangbuzaidiwei = ref(false) + const jiareweichuanganqi = ref(false) + const zuoqianfengxianggaowei = ref(false) + const zuohoufengxianggaowei = ref(false) + const youqianfengxianggaowei = ref(false) + const youhoufengxianggaowei = ref(false) + const zuoqianfengxiangdiwei = ref(false) + const zuohoufengxiangdiwei = ref(false) + const youqianfengxiangdiwei = ref(false) + const youhoufengxiangdiwei = ref(false) + const zuoqianguntongdiwei = ref(false) + const zuohouguntongdiwei = ref(false) + const youqianguntongdiwei = ref(false) + const youhouguntongdiwei = ref(false) function initCharts() { let domId = 'moisChart' @@ -1327,7 +1552,11 @@ statusGif = 'chaiwangban-1' setTimeout(shangliao, 7000) } + function showFault () { + console.log('showFault') + router.push({ path: '/bigFault', query: { num: num } }) + } function shangliao() { statusGif = 'shangliao-N' setTimeout(() => { @@ -1722,17 +1951,114 @@ } else if (res.herbName == '妗戠櫧鐨�') { res.herbImage = 'sangbaipi.png' } - - res.isError = false - if (res.fault) { - res.isError = true - res.errorMsg = res.fault - } - if (res.warning) { - res.isWarning = true - res.warnMsg = res.warning - } + res.isError = false + if (res.fault) { + res.isError = true + res.errorMsg = res.fault; + const faults = res.fault; + console.log('errorMsg:', res.fault) + if (faults.includes('鎬ュ仠鎶ヨ')) { + shebeijiting.value = true; + } + if (faults.includes('宸﹀墠鎬ュ仠')) { + zuoqianjiting.value = true; + } + if (faults.includes('闈㈡澘鎬ュ仠')) { + mianbanjiting.value = true; + } + if (faults.includes('鍑烘枡鎬ュ仠')) { + chuliaojiting.value = true; + } + if (faults.includes('娓╁害澶辨帶')) { + wendubaojing.value = true; + } + if (faults.includes('婊氱瓛鍗�')) { + guntongsheng.value = true; + } + if (faults.includes('婊氱瓛闄�')) { + guntongjiang.value = true; + } + if (faults.includes('婊氱瓛鐢垫満杩囨祦')) { + guntongguoliu.value = true; + } + if (faults.includes('椋庣鍗�')) { + fengxiangsheng.value = true; + } + if (faults.includes('椋庣闄�')) { + fengxiangjiang.value = true; + } + if (faults.includes('椋庣椋庢満杩囨祦')) { + fengjiguoliu.value = true; + } + } + + if (res.warning) { + res.isWarning = true + res.warnMsg = res.warning + const warnings = res.warning; + console.log('warnMsg:', res.warning) + if (warnings.includes('宸﹀墠闂�')) { + zuoqianmen.value = true; + } + if (warnings.includes('鍙冲墠闂�')) { + youqianmen.value = true; + } + if (warnings.includes('宸﹀悗闂�')) { + zuohoumen.value = true; + } + if (warnings.includes('鍙冲悗闂�')) { + youhoumen.value = true; + } + if (warnings.includes('婊氱瓛涓嶅湪楂樹綅')) { + guntongbuzaigaowei.value = true; + } + if (warnings.includes('椋庣涓嶅湪浣庝綅')) { + fengxiangbuzaidiwei.value = true; + } + if (warnings.includes('椋庣涓嶅湪楂樹綅')) { + fengxiangbuzaigaowei.value = true; + } + if (warnings.includes('鍔犵儹浣嶄紶鎰熷櫒')) { + jiareweichuanganqi.value = true; + } + if (warnings.includes('宸﹀墠椋庣楂樹綅浼犳劅鍣�')) { + zuoqianfengxianggaowei.value = true; + } + if (warnings.includes('鍙冲墠椋庣楂樹綅浼犳劅鍣�')) { + youqianfengxianggaowei.value = true; + } + if (warnings.includes('宸﹀悗椋庣楂樹綅浼犳劅鍣�')) { + zuohoufengxianggaowei.value = true; + } + if (warnings.includes('鍙冲悗椋庣楂樹綅浼犳劅鍣�')) { + youhoufengxianggaowei.value = true; + } + if (warnings.includes('宸﹀墠椋庣浣庝綅浼犳劅鍣�')) { + zuoqianfengxiangdiwei.value = true; + } + if (warnings.includes('鍙冲墠椋庣浣庝綅浼犳劅鍣�')) { + youqianfengxiangdiwei.value = true; + } + if (warnings.includes('宸﹀悗椋庣浣庝綅浼犳劅鍣�')) { + zuohoufengxiangdiwei.value = true; + } + if (warnings.includes('鍙冲悗椋庣浣庝綅浼犳劅鍣�')) { + youhoufengxiangdiwei.value = true; + } + if (warnings.includes('宸﹀墠婊氱瓛浣庝綅浼犳劅鍣�')) { + zuoqianguntongdiwei.value = true; + } + if (warnings.includes('鍙冲墠婊氱瓛浣庝綅浼犳劅鍣�')) { + youqianguntongdiwei.value = true; + } + if (warnings.includes('宸﹀悗婊氱瓛浣庝綅浼犳劅鍣�')) { + zuohouguntongdiwei.value = true; + } + if (warnings.includes('鍙冲悗婊氱瓛浣庝綅浼犳劅鍣�')) { + youhouguntongdiwei.value = true; + } + } } else { res = { mois: [], @@ -1883,7 +2209,7 @@ margin-top: -30px; } .leftTop0 { - height: 600px; + height: 260px; width: 848px; display: flex; justify-content: center; diff --git a/src/views/dry/bigScreen/BigEqpCloud.vue b/src/views/dry/bigScreen/BigEqpCloud.vue index f87b9a6..4c97ddb 100644 --- a/src/views/dry/bigScreen/BigEqpCloud.vue +++ b/src/views/dry/bigScreen/BigEqpCloud.vue @@ -158,189 +158,189 @@ </div> </div> <div style="width: 848px; height: 485px; position: absolute;" @click="showFault"> - <div v-if="true | zuoqianjiting" class="error-div" style=" top:309px; left:418px"> + <div v-if="zuoqianjiting" class="error-div" style=" top:309px; left:418px"> <div class="blingbling error-marker" ></div> <div class="error-msg" style="width: 70px;"> 宸﹀墠鎬ュ仠 </div> </div> - <div v-if="true | shebeijiting" class="error-div" style=" top:111px; left:484px"> + <div v-if="shebeijiting" class="error-div" style=" top:111px; left:484px"> <div class="blingbling error-marker" ></div> <div class="error-msg" style=" width: 106px;"> 璁惧鎬ュ仠锛堟�伙級 </div> </div> - <div v-if="true | chuliaojiting" class="error-div" style=" top:300px; left:129px"> + <div v-if="chuliaojiting" class="error-div" style=" top:300px; left:129px"> <div class="blingbling error-marker" ></div> <div class="error-msg" style=" width: 70px;"> 鍑烘枡鎬ュ仠 </div> </div> - <div v-if="true | mianbanjiting" class="error-div" style=" top:258px; left:659px"> + <div v-if="mianbanjiting" class="error-div" style=" top:258px; left:659px"> <div class="blingbling error-marker" ></div> <div class="error-msg" style=" width: 70px;"> 闈㈡澘鎬ュ仠 </div> </div> - <div v-if="true | fengxiangsheng" class="error-div" style=" top:294px; left:517px"> + <div v-if="fengxiangsheng" class="error-div" style=" top:294px; left:517px"> <div class="blingbling error-marker" ></div> <div class="error-msg" style=" width: 86px;"> 椋庣鍗囧紓甯� </div> </div> - <div v-if="true | fengxiangjiang" class="error-div" style=" top:319px; left:517px"> + <div v-if="fengxiangjiang" class="error-div" style=" top:319px; left:517px"> <div class="blingbling error-marker" ></div> <div class="error-msg" style=" width: 86px;"> 椋庣闄嶅紓甯� </div> </div> - <div v-if="true | fengjiguoliu" class="error-div" style=" top:335px; left:655px"> + <div v-if="fengjiguoliu" class="error-div" style=" top:335px; left:655px"> <div class="blingbling error-marker" ></div> <div class="error-msg" style=" width: 70px;"> 椋庢満杩囨祦 </div> </div> - <div v-if="true | guntongsheng" class="error-div" style=" top:198px; left:517px"> + <div v-if="guntongsheng" class="error-div" style=" top:198px; left:517px"> <div class="blingbling error-marker" ></div> <div class="error-msg" style=" width: 86px;"> 婊氱瓛鍗囧紓甯� </div> </div> - <div v-if="true | guntongjiang" class="error-div" style=" top:223px; left:517px"> + <div v-if="guntongjiang" class="error-div" style=" top:223px; left:517px"> <div class="blingbling error-marker" ></div> <div class="error-msg" style=" width: 86px;"> 婊氱瓛闄嶅紓甯� </div> </div> - <div v-if="true | guntongguoliu" class="error-div" style=" top:209px; left:642px"> + <div v-if="guntongguoliu" class="error-div" style=" top:209px; left:642px"> <div class="blingbling error-marker" ></div> <div class="error-msg" style=" width: 70px;"> 婊氱瓛杩囨祦 </div> </div> - <div v-if="true | wendubaojing" class="error-div" style=" top:234px; left:659px"> + <div v-if="wendubaojing" class="error-div" style=" top:234px; left:659px"> <div class="blingbling error-marker" ></div> <div class="error-msg" style=" width: 70px;"> 娓╁害鎶ヨ </div> </div> - <div v-if="true | zuoqianmen" class="error-div" style=" top:388px; left:415px"> + <div v-if="zuoqianmen" class="error-div" style=" top:388px; left:415px"> <div class="blingbling warn-marker" ></div> <div class="warn-msg" style=" width: 80px;"> 宸﹀墠闂ㄦ姤璀� </div> </div> - <div v-if="true | zuohoumen" class="error-div" style=" top:367px; left:587px"> + <div v-if="zuohoumen" class="error-div" style=" top:367px; left:587px"> <div class="blingbling warn-marker" ></div> <div class="warn-msg" style=" width: 80px;"> 宸﹀悗闂ㄦ姤璀� </div> </div> - <div v-if="true | youqianmen" class="error-div" style=" top:388px; left:284px"> + <div v-if="youqianmen" class="error-div" style=" top:388px; left:284px"> <div class="blingbling warn-marker" ></div> <div class="warn-msg" style=" width: 80px;"> 鍙冲墠闂ㄦ姤璀� </div> </div> - <div v-if="true | youhoumen" class="error-div" style=" top:367px; left:478px"> + <div v-if="youhoumen" class="error-div" style=" top:367px; left:478px"> <div class="blingbling warn-marker" ></div> <div class="warn-msg" style=" width: 80px;"> 鍙冲悗闂ㄦ姤璀� </div> </div> - <div v-if="true | guntongbuzaigaowei" class="error-div" style=" top:173px; left:517px"> + <div v-if="guntongbuzaigaowei" class="error-div" style=" top:173px; left:517px"> <div class="blingbling warn-marker" ></div> <div class="warn-msg" style=" width: 100px;"> 婊氱瓛涓嶅湪楂樹綅 </div> </div> - <div v-if="true | fengxiangbuzaigaowei" class="error-div" style=" top:269px; left:517px"> + <div v-if="fengxiangbuzaigaowei" class="error-div" style=" top:269px; left:517px"> <div class="blingbling warn-marker" ></div> <div class="warn-msg" style=" width: 100px;"> 椋庣涓嶅湪楂樹綅 </div> </div> - <div v-if="true | fengxiangbuzaidiwei" class="error-div" style=" top:343px; left:517px"> + <div v-if="fengxiangbuzaidiwei" class="error-div" style=" top:343px; left:517px"> <div class="blingbling warn-marker" ></div> <div class="warn-msg" style=" width: 100px;"> 椋庣涓嶅湪浣庝綅 </div> </div> - <div v-if="true | jiareweichuanganqi" class="error-div" style=" top:283px; left:642px"> + <div v-if="jiareweichuanganqi" class="error-div" style=" top:283px; left:642px"> <div class="blingbling warn-marker" ></div> <div class="warn-msg" style=" width: 126px;"> 鍔犵儹浣嶄紶鎰熷櫒鎶ヨ </div> </div> - <div v-if="true | zuoqianfengxianggaowei" class="error-div" style=" top:334px; left:362px"> + <div v-if="zuoqianfengxianggaowei" class="error-div" style=" top:334px; left:362px"> <div class="blingbling warn-marker" ></div> <div class="warn-msg" style=" width: 126px;"> 宸﹀墠椋庣涓嶅湪楂樹綅 </div> </div> - <div v-if="true | zuoqianfengxiangdiwei" class="error-div" style=" top:334px; left:362px"> + <div v-if="zuoqianfengxiangdiwei" class="error-div" style=" top:334px; left:362px"> <div class="blingbling warn-marker" ></div> <div class="warn-msg" style=" width: 126px;"> 宸﹀墠椋庣涓嶅湪浣庝綅 </div> </div> - <div v-if="true | zuohoufengxianggaowei" class="error-div" style=" top:309px; left:642px"> + <div v-if="zuohoufengxianggaowei" class="error-div" style=" top:309px; left:642px"> <div class="blingbling warn-marker" ></div> <div class="warn-msg" style=" width: 126px;"> 宸﹀悗椋庣涓嶅湪楂樹綅 </div> </div> - <div v-if="true | zuohoufengxiangdiwei" class="error-div" style=" top:309px; left:642px"> + <div v-if="zuohoufengxiangdiwei" class="error-div" style=" top:309px; left:642px"> <div class="blingbling warn-marker" ></div> <div class="warn-msg" style=" width: 126px;"> 宸﹀悗椋庣涓嶅湪浣庝綅 </div> </div> - <div v-if="true | youqianfengxianggaowei" class="error-div" style=" top:272px; left:300px"> + <div v-if="youqianfengxianggaowei" class="error-div" style=" top:272px; left:300px"> <div class="blingbling warn-marker" ></div> <div class="warn-msg" style=" width: 126px;"> 鍙冲墠椋庣涓嶅湪楂樹綅 </div> </div> - <div v-if="true | youqianfengxiangdiwei" class="error-div" style=" top:272px; left:300px"> + <div v-if="youqianfengxiangdiwei" class="error-div" style=" top:272px; left:300px"> <div class="blingbling warn-marker" ></div> <div class="warn-msg" style=" width: 126px;"> 鍙冲墠椋庣涓嶅湪浣庝綅 </div> </div> - <div v-if="true | youhoufengxianggaowei" class="error-div" style=" top:246px; left:506px"> + <div v-if="youhoufengxianggaowei" class="error-div" style=" top:246px; left:506px"> <div class="blingbling warn-marker" ></div> <div class="warn-msg" style=" width: 126px;"> 鍙冲悗椋庣涓嶅湪楂樹綅 </div> </div> - <div v-if="true | youhoufengxiangdiwei" class="error-div" style=" top:246px; left:506px"> + <div v-if="youhoufengxiangdiwei" class="error-div" style=" top:246px; left:506px"> <div class="blingbling warn-marker" ></div> <div class="warn-msg" style=" width: 126px;"> 鍙冲悗椋庣涓嶅湪浣庝綅 </div> </div> - <div v-if="true | zuoqianguntongdiwei" class="error-div" style=" top:175px; left:358px"> + <div v-if="zuoqianguntongdiwei" class="error-div" style=" top:175px; left:358px"> <div class="blingbling warn-marker" ></div> <div class="warn-msg" style=" width: 126px;"> 宸﹀墠婊氱瓛涓嶅湪浣庝綅 </div> </div> - <div v-if="true | zuohouguntongdiwei" class="error-div" style=" top:158px; left:643px"> + <div v-if="zuohouguntongdiwei" class="error-div" style=" top:158px; left:643px"> <div class="blingbling warn-marker" ></div> <div class="warn-msg" style=" width: 126px;"> 宸﹀悗婊氱瓛涓嶅湪浣庝綅 </div> </div> - <div v-if="true | youqianguntongdiwei" class="error-div" style=" top:150px; left:268px"> + <div v-if="youqianguntongdiwei" class="error-div" style=" top:150px; left:268px"> <div class="blingbling warn-marker" ></div> <div class="warn-msg" style=" width: 126px;"> 鍙冲墠婊氱瓛涓嶅湪浣庝綅 </div> </div> - <div v-if="true | youhouguntongdiwei" class="error-div" style=" top:135px; left:506px"> + <div v-if="youhouguntongdiwei" class="error-div" style=" top:135px; left:506px"> <div class="blingbling warn-marker" ></div> <div class="warn-msg" style=" width: 126px;"> 鍙冲悗婊氱瓛涓嶅湪浣庝綅 @@ -713,7 +713,7 @@ var progressBarChart: echarts.ECharts var efficiencyLineChart: echarts.ECharts - var compareChart: echarts.ECharts + var compareChart : echarts.ECharts //----------------error---------------- const shebeijiting = ref(false) @@ -1826,6 +1826,9 @@ res.zhengqi = lastTrend.steam / (res.originWeight - lastTrend.weight) } res.zhengqi = Number(res.zhengqi) + if (res.zhengqi < 0) { + res.zhengqi = 0 + } //eqp.value.steamConsumption = Number(eqp.value.steamConsumption) // res.zhengqi = eqp.value.steamConsumption - 3 // console.log(res); @@ -1850,7 +1853,10 @@ res.dian = lastTrend.watt / (res.originWeight - lastTrend.weight) } // res.dian = eqp.value.powerConsumption - 1.5 - res.dian = Number(res.dian) + res.dian = Number(res.dian) + if (res.dian < 0) { + res.dian = 0 + } //eqp.value.powerConsumption = Number(eqp.value.powerConsumption) if (res.dian > res.wattAvg) { console.log("dian::", res.dian,res.wattAvg ) @@ -1950,17 +1956,112 @@ } res.isError = false - if (res.fault) { - res.isError = true - res.errorMsg = res.fault - console.log("errorMsg:",res.fault) - } + if (res.fault) { + res.isError = true + res.errorMsg = res.fault; + const faults = res.fault; + console.log('errorMsg:', res.fault) + if (faults.includes('鎬ュ仠鎶ヨ')) { + shebeijiting.value = true; + } + if (faults.includes('宸﹀墠鎬ュ仠')) { + zuoqianjiting.value = true; + } + if (faults.includes('闈㈡澘鎬ュ仠')) { + mianbanjiting.value = true; + } + if (faults.includes('鍑烘枡鎬ュ仠')) { + chuliaojiting.value = true; + } + if (faults.includes('娓╁害澶辨帶')) { + wendubaojing.value = true; + } + if (faults.includes('婊氱瓛鍗�')) { + guntongsheng.value = true; + } + if (faults.includes('婊氱瓛闄�')) { + guntongjiang.value = true; + } + if (faults.includes('婊氱瓛鐢垫満杩囨祦')) { + guntongguoliu.value = true; + } + if (faults.includes('椋庣鍗�')) { + fengxiangsheng.value = true; + } + if (faults.includes('椋庣闄�')) { + fengxiangjiang.value = true; + } + if (faults.includes('椋庣椋庢満杩囨祦')) { + fengjiguoliu.value = true; + } + } - if (res.warning) { - res.isWarning = true - res.warnMsg = res.warning - console.log("warnMsg:",res.warning) - } + if (res.warning) { + res.isWarning = true + res.warnMsg = res.warning + const warnings = res.warning; + console.log('warnMsg:', res.warning) + if (warnings.includes('宸﹀墠闂�')) { + zuoqianmen.value = true; + } + if (warnings.includes('鍙冲墠闂�')) { + youqianmen.value = true; + } + if (warnings.includes('宸﹀悗闂�')) { + zuohoumen.value = true; + } + if (warnings.includes('鍙冲悗闂�')) { + youhoumen.value = true; + } + if (warnings.includes('婊氱瓛涓嶅湪楂樹綅')) { + guntongbuzaigaowei.value = true; + } + if (warnings.includes('椋庣涓嶅湪浣庝綅')) { + fengxiangbuzaidiwei.value = true; + } + if (warnings.includes('椋庣涓嶅湪楂樹綅')) { + fengxiangbuzaigaowei.value = true; + } + if (warnings.includes('鍔犵儹浣嶄紶鎰熷櫒')) { + jiareweichuanganqi.value = true; + } + if (warnings.includes('宸﹀墠椋庣楂樹綅浼犳劅鍣�')) { + zuoqianfengxianggaowei.value = true; + } + if (warnings.includes('鍙冲墠椋庣楂樹綅浼犳劅鍣�')) { + youqianfengxianggaowei.value = true; + } + if (warnings.includes('宸﹀悗椋庣楂樹綅浼犳劅鍣�')) { + zuohoufengxianggaowei.value = true; + } + if (warnings.includes('鍙冲悗椋庣楂樹綅浼犳劅鍣�')) { + youhoufengxianggaowei.value = true; + } + if (warnings.includes('宸﹀墠椋庣浣庝綅浼犳劅鍣�')) { + zuoqianfengxiangdiwei.value = true; + } + if (warnings.includes('鍙冲墠椋庣浣庝綅浼犳劅鍣�')) { + youqianfengxiangdiwei.value = true; + } + if (warnings.includes('宸﹀悗椋庣浣庝綅浼犳劅鍣�')) { + zuohoufengxiangdiwei.value = true; + } + if (warnings.includes('鍙冲悗椋庣浣庝綅浼犳劅鍣�')) { + youhoufengxiangdiwei.value = true; + } + if (warnings.includes('宸﹀墠婊氱瓛浣庝綅浼犳劅鍣�')) { + zuoqianguntongdiwei.value = true; + } + if (warnings.includes('鍙冲墠婊氱瓛浣庝綅浼犳劅鍣�')) { + youqianguntongdiwei.value = true; + } + if (warnings.includes('宸﹀悗婊氱瓛浣庝綅浼犳劅鍣�')) { + zuohouguntongdiwei.value = true; + } + if (warnings.includes('鍙冲悗婊氱瓛浣庝綅浼犳劅鍣�')) { + youhouguntongdiwei.value = true; + } + } } else { res = { mois: [], diff --git a/src/views/dry/bigScreen/BigFault.vue b/src/views/dry/bigScreen/BigFault.vue new file mode 100644 index 0000000..52fe7ba --- /dev/null +++ b/src/views/dry/bigScreen/BigFault.vue @@ -0,0 +1,1372 @@ +<template> + <dv-full-screen-container> + <div class="eqpBox"> + <div class="eqpRow"> + <div class="eqpImage" :style="{ 'background-position': position + 'px' }"> + <div class="leftEqp"> + <dv-border-box7 class="leftTop"> + <div class="leftTop0"> + <div style="padding-top: 20px; padding-left: 10px" @click="back"> + <Icon style="color: powderblue" icon="ion:caret-back-sharp" :size="35" /> + </div> + + <div class="leftTop1"> + + <Icon icon="emojione:hourglass-with-flowing-sand" :size="50" /> + <div> + <div class="mainInfo">{{ realData?.totalRemain | 0 }} Min</div> + <div class="subhead">鍓╀綑鏃堕棿</div> + </div> + </div> + <div class="leftTop1"> + <Icon icon="bi:fan" :size="50" /> + <div> + <div class="mainInfo">{{ realData?.trendVo?.fanFrequency | 0 }} Hz</div> + <div class="subhead">椋庢満棰戠巼</div> + </div> + </div> + <div class="leftTop3" :style="{ 'background-image': 'url(' + getStatusImageUrl(statusGif) + ')' }"></div> + <div class="outDiv eqpStatus"> + <div + style=" + font-size: 28px; + + color: white; + background-color: #1595ea; + height: 60px; + width: 180px; + line-height: 60px; + text-align: center; + border-radius: 10px; + font-weight: bold; + " + > + {{ statusTxt }} + </div> + </div> + </div> + <div style="width: 1200px; height: 798px; position: absolute"> + <div v-if="zuoqianjiting" class="error-div" style="top: 466px; left: 589px"> + <div class="blingbling error-marker"></div> + <div class="error-msg" style="width: 70px"> 宸﹀墠鎬ュ仠 </div> + </div> + <div v-if="shebeijiting" class="error-div" style="top: 170px; left: 702px"> + <div class="blingbling error-marker"></div> + <div class="error-msg" style="width: 106px"> 璁惧鎬ュ仠锛堟�伙級 </div> + </div> + <div v-if="chuliaojiting" class="error-div" style="top: 450px; left: 158px"> + <div class="blingbling error-marker"></div> + <div class="error-msg" style="width: 70px"> 鍑烘枡鎬ュ仠 </div> + </div> + <div v-if="mianbanjiting" class="error-div" style="top: 398px; left: 978px"> + <div class="blingbling error-marker"></div> + <div class="error-msg" style="width: 70px"> 闈㈡澘鎬ュ仠 </div> + </div> + <div v-if="fengxiangsheng" class="error-div" style="top: 476px; left: 753px"> + <div class="blingbling error-marker"></div> + <div class="error-msg" style="width: 86px"> 椋庣鍗囧紓甯� </div> + </div> + <div v-if="fengxiangjiang" class="error-div" style="top: 502px; left: 753px"> + <div class="blingbling error-marker"></div> + <div class="error-msg" style="width: 86px"> 椋庣闄嶅紓甯� </div> + </div> + <div v-if="fengjiguoliu" class="error-div" style="top: 510px; left: 975px"> + <div class="blingbling error-marker"></div> + <div class="error-msg" style="width: 70px"> 椋庢満杩囨祦 </div> + </div> + <div v-if="guntongsheng" class="error-div" style="top: 331px; left: 753px"> + <div class="blingbling error-marker"></div> + <div class="error-msg" style="width: 86px"> 婊氱瓛鍗囧紓甯� </div> + </div> + <div v-if="guntongjiang" class="error-div" style="top: 356px; left: 753px"> + <div class="blingbling error-marker"></div> + <div class="error-msg" style="width: 86px"> 婊氱瓛闄嶅紓甯� </div> + </div> + <div v-if="guntongguoliu" class="error-div" style="top: 324px; left: 916px"> + <div class="blingbling error-marker"></div> + <div class="error-msg" style="width: 70px"> 婊氱瓛杩囨祦 </div> + </div> + <div v-if="wendubaojing" class="error-div" style="top: 373px; left: 978px"> + <div class="blingbling error-marker"></div> + <div class="error-msg" style="width: 70px"> 娓╁害鎶ヨ </div> + </div> + + <div v-if="zuoqianmen" class="error-div" style="top: 595px; left: 591px"> + <div class="blingbling warn-marker"></div> + <div class="warn-msg" style="width: 80px"> 宸﹀墠闂ㄦ姤璀� </div> + </div> + <div v-if="zuohoumen" class="error-div" style="top: 565px; left: 868px"> + <div class="blingbling warn-marker"></div> + <div class="warn-msg" style="width: 80px"> 宸﹀悗闂ㄦ姤璀� </div> + </div> + <div v-if="youqianmen" class="error-div" style="top: 593px; left: 396px"> + <div class="blingbling warn-marker"></div> + <div class="warn-msg" style="width: 80px"> 鍙冲墠闂ㄦ姤璀� </div> + </div> + <div v-if="youhoumen" class="error-div" style="top: 565px; left: 697px"> + <div class="blingbling warn-marker"></div> + <div class="warn-msg" style="width: 80px"> 鍙冲悗闂ㄦ姤璀� </div> + </div> + + <div v-if="guntongbuzaigaowei" class="error-div" style="top: 304px; left: 753px"> + <div class="blingbling warn-marker"></div> + <div class="warn-msg" style="width: 100px"> 婊氱瓛涓嶅湪楂樹綅 </div> + </div> + <div v-if="fengxiangbuzaigaowei" class="error-div" style="top: 451px; left: 753px"> + <div class="blingbling warn-marker"></div> + <div class="warn-msg" style="width: 100px"> 椋庣涓嶅湪楂樹綅 </div> + </div> + <div v-if="fengxiangbuzaidiwei" class="error-div" style="top: 528px; left: 753px"> + <div class="blingbling warn-marker"></div> + <div class="warn-msg" style="width: 100px"> 椋庣涓嶅湪浣庝綅 </div> + </div> + <div v-if="jiareweichuanganqi" class="error-div" style="top: 433px; left: 904px"> + <div class="blingbling warn-marker"></div> + <div class="warn-msg" style="width: 126px"> 鍔犵儹浣嶄紶鎰熷櫒鎶ヨ </div> + </div> + <div v-if="zuoqianfengxianggaowei" class="error-div" style="top: 502px; left: 535px"> + <div class="blingbling warn-marker"></div> + <div class="warn-msg" style="width: 126px"> 宸﹀墠椋庣涓嶅湪楂樹綅 </div> + </div> + <div v-if="zuoqianfengxiangdiwei" class="error-div" style="top: 528px; left: 535px"> + <div class="blingbling warn-marker"></div> + <div class="warn-msg" style="width: 126px"> 宸﹀墠椋庣涓嶅湪浣庝綅 </div> + </div> + <div v-if="zuohoufengxianggaowei" class="error-div" style="top: 459px; left: 904px"> + <div class="blingbling warn-marker"></div> + <div class="warn-msg" style="width: 126px"> 宸﹀悗椋庣涓嶅湪楂樹綅 </div> + </div> + <div v-if="zuohoufengxiangdiwei" class="error-div" style="top: 484px; left: 904px"> + <div class="blingbling warn-marker"></div> + <div class="warn-msg" style="width: 126px"> 宸﹀悗椋庣涓嶅湪浣庝綅 </div> + </div> + <div v-if="youqianfengxianggaowei" class="error-div" style="top: 447px; left: 420px"> + <div class="blingbling warn-marker"></div> + <div class="warn-msg" style="width: 126px"> 鍙冲墠椋庣涓嶅湪楂樹綅 </div> + </div> + <div v-if="youqianfengxiangdiwei" class="error-div" style="top: 473px; left: 420px"> + <div class="blingbling warn-marker"></div> + <div class="warn-msg" style="width: 126px"> 鍙冲墠椋庣涓嶅湪浣庝綅 </div> + </div> + <div v-if="youhoufengxianggaowei" class="error-div" style="top: 383px; left: 805px"> + <div class="blingbling warn-marker"></div> + <div class="warn-msg" style="width: 126px"> 鍙冲悗椋庣涓嶅湪楂樹綅 </div> + </div> + <div v-if="youhoufengxiangdiwei" class="error-div" style="top: 408px; left: 805px"> + <div class="blingbling warn-marker"></div> + <div class="warn-msg" style="width: 126px"> 鍙冲悗椋庣涓嶅湪浣庝綅 </div> + </div> + <div v-if="zuoqianguntongdiwei" class="error-div" style="top: 343px; left: 530px"> + <div class="blingbling warn-marker"></div> + <div class="warn-msg" style="width: 126px"> 宸﹀墠婊氱瓛涓嶅湪浣庝綅 </div> + </div> + <div v-if="zuohouguntongdiwei" class="error-div" style="top: 296px; left: 916px"> + <div class="blingbling warn-marker"></div> + <div class="warn-msg" style="width: 126px"> 宸﹀悗婊氱瓛涓嶅湪浣庝綅 </div> + </div> + <div v-if="youqianguntongdiwei" class="error-div" style="top: 316px; left: 419px"> + <div class="blingbling warn-marker"></div> + <div class="warn-msg" style="width: 126px"> 鍙冲墠婊氱瓛涓嶅湪浣庝綅 </div> + </div> + <div v-if="youhouguntongdiwei" class="error-div" style="top: 270px; left: 797px"> + <div class="blingbling warn-marker"></div> + <div class="warn-msg" style="width: 126px"> 鍙冲悗婊氱瓛涓嶅湪浣庝綅 </div> + </div> + </div> + </dv-border-box7> + </div> + <div class="rightInfo"> + <div class="rightTop"> + <dv-border-box7 class="tempMoisChart"> + <a-row> + <a-col :span="7">鏁呴殰鍚嶇О</a-col> + <a-col :span="7">寮�濮嬫椂闂�</a-col> + <a-col :span="7">缁撴潫鏃堕棿</a-col> + <a-col :span="3">鎸佺画鏃堕暱</a-col> + </a-row> + <div ref="scrollContainer" class="scroll-container"> + <a-row v-for="item in faultList" :key="item.id"> + <a-col :span="7">{{ item.faultName }}</a-col> + <a-col :span="7">{{ item.startTime }}</a-col> + <a-col :span="7">{{ item.endTime }}</a-col> + <a-col :span="3">{{ item.totalTime }}</a-col> + </a-row> + </div> + </dv-border-box7> + </div> + <div class="rightTwo"> + <dv-border-box7 class="infoChart"> + <div class="chartTittle"> 鏁呴殰鏃堕暱缁熻 </div> + <!-- <div class="outDiv" style="padding-top: 20px">--> + <!-- --> + <!-- </div>--> + <div :id="'chartDom'" style="width: 340px; height: 280px"></div> + </dv-border-box7> + + <dv-border-box7 class="infoChart"> + <div class="chartTittle">鏁呴殰娆℃暟绾� </div> + <div :id="'chartDom2'" style="width: 340px; height: 280px"></div> + </dv-border-box7> + <dv-border-box7 class="infoChart"> + <div class="chartTittle">璀﹀憡鏃堕暱缁熻</div> + <div :id="'chartDom3'" style="width: 340px; height: 280px"></div> + </dv-border-box7> + <dv-border-box7 class="infoChart"> + <div class="chartTittle"> + <div> 璀﹀憡娆℃暟缁熻</div> + </div> + <div :id="'chartDom4'" style="width: 340px; height: 280px"></div> + </dv-border-box7> + </div> + </div> + </div> + </div> + </div> + </dv-full-screen-container> +</template> + +<script setup lang="ts"> + import { useFullscreen } from '@vueuse/core' + import { BorderBox7 as DvBorderBox7 } from '@kjgl77/datav-vue3' + import { router } from '/@/router' + import { onMounted, ref, onUnmounted } from 'vue' + import { Progress } from 'ant-design-vue' + import * as echarts from 'echarts' + import 'echarts-liquidfill' + import { Icon, IconPicker, SvgIcon } from '/@/components/Icon/index' + import { defHttp } from '/@/utils/http/axios' + import { queryById, listAll } from '../api/DryEquipment.api' + import { queryByOrderId } from '../dryFaultRecord/DryFaultRecord.api' + import { dryEquipment } from '../dataDefine/DryEquipment.data' + import { useUserStore } from '/@/store/modules/user' + import { getTenantId, getToken } from '/@/utils/auth' + const domRef = ref<Nullable<HTMLElement>>(null) + const { enter, toggle, exit, isFullscreen } = useFullscreen() + + const { toggle: toggleDom } = useFullscreen(domRef) + const Timer = ref() + const Timer2 = ref() + const scrollContainer = ref(null) + let scrollInterval = null + const isScrolling = ref(false) // 鎺у埗鏄惁姝e湪婊氬姩浠ラ槻姝㈤噸澶嶈Е鍙� + const eqps = ref([] as dryEquipment[]) + console.log(`output->router.currentRoute.value.params.num `, router.currentRoute.value.query) + const eqp = ref({} as dryEquipment) + const eqpNum = ref(router.currentRoute.value.query.num || 1) + const userStore = useUserStore() + const realData = ref({ + code: 0, + }) + + const position = ref(1) + //realData.value.tempValue = [0, 100] + realData.value.mois = [0.5, 0.35, 0.2] + statusGif = 'tmrefeng2' + realData.value.herbImage = 'yaocai1.png' + // const faultConst = ['鎬ュ仠鎶ヨ','宸﹀墠鎬ュ仠','闈㈡澘鎬ュ仠','鍑烘枡鎬ュ仠','娓╁害澶辨帶','婊氱瓛鍗�','婊氱瓛闄�','婊氱瓛鐢垫満杩囨祦','椋庣鍗�','椋庣闄�','椋庣椋庢満杩囨祦'] + // const warningConst = ['宸﹀墠闂�','鍙冲墠闂�','宸﹀悗闂�','鍙冲悗闂�','婊氱瓛涓嶅湪楂樹綅','椋庣涓嶅湪浣庝綅','椋庣涓嶅湪楂樹綅','鍔犵儹浣嶄紶鎰熷櫒','宸﹀墠椋庣楂樹綅浼犳劅鍣�','鍙冲墠椋庣楂樹綅浼犳劅鍣�','宸﹀悗椋庣楂樹綅浼犳劅鍣�','鍙冲悗椋庣楂樹綅浼犳劅鍣�','宸﹀墠椋庣浣庝綅浼犳劅鍣�','鍙冲墠椋庣浣庝綅浼犳劅鍣�','宸﹀悗椋庣浣庝綅浼犳劅鍣�','鍙冲悗椋庣浣庝綅浼犳劅鍣�','宸﹀墠婊氱瓛浣庝綅浼犳劅鍣�','鍙冲墠婊氱瓛浣庝綅浼犳劅鍣�','宸﹀悗婊氱瓛浣庝綅浼犳劅鍣�','鍙冲悗婊氱瓛浣庝綅浼犳劅鍣�'] + + //----------------error---------------- + const shebeijiting = ref(false) + const chuliaojiting = ref(false) + const zuoqianjiting = ref(false) + const mianbanjiting = ref(false) + const fengxiangsheng = ref(false) + const fengxiangjiang = ref(false) + const fengjiguoliu = ref(false) + const guntongsheng = ref(false) + const guntongjiang = ref(false) + const guntongguoliu = ref(false) + const wendubaojing = ref(false) + //--------------warning------------ + const zuoqianmen = ref(false) + const zuohoumen = ref(false) + const youqianmen = ref(false) + const youhoumen = ref(false) + const guntongbuzaigaowei = ref(false) + const fengxiangbuzaigaowei = ref(false) + const fengxiangbuzaidiwei = ref(false) + const jiareweichuanganqi = ref(false) + const zuoqianfengxianggaowei = ref(false) + const zuohoufengxianggaowei = ref(false) + const youqianfengxianggaowei = ref(false) + const youhoufengxianggaowei = ref(false) + const zuoqianfengxiangdiwei = ref(false) + const zuohoufengxiangdiwei = ref(false) + const youqianfengxiangdiwei = ref(false) + const youhoufengxiangdiwei = ref(false) + const zuoqianguntongdiwei = ref(false) + const zuohouguntongdiwei = ref(false) + const youqianguntongdiwei = ref(false) + const youhouguntongdiwei = ref(false) + + const faultList = ref([]) + var chart1: echarts.ECharts + var chart2: echarts.ECharts + var chart3: echarts.ECharts + var chart4: echarts.ECharts + // 鍔ㄦ�佽鍙栧浘鐗� + function getHerbImageUrl(name: string) { + return new URL(`/src/assets/images/dry/yaocai/${name}`, import.meta.url).href + } + + // 鍔ㄦ�佽鍙栧浘鐗� + function getStatusImageUrl(name: string) { + if (name == 'zanting') { + return new URL(`/src/assets/images/dry/${name}.png`, import.meta.url).href + } else { + return new URL(`/src/assets/images/dry/${name}.gif`, import.meta.url).href + } + } + function queryEqp() { + queryById({ id: router.currentRoute.value.params.id }).then((res) => { + // console.log(`output->res`, res) + eqp.value = res + eqp.value.dryEfficiency = res.dryEfficiency + eqp.value.steamConsumption = res.steamConsumption + eqp.value.powerConsumption = res.powerConsumption + queryRealTime() + }) + } + + function listAllEqp() { + listAll({ enable: 'Y' }) + .then((result) => { + //console.log(`output->result`, result) + eqps.value = result + // result.forEach((item) => { + // eqpCodes.push(item.code) + // }) + queryRealTime() + }) + .catch((err) => { + //console.log(`output->err`, err) + }) + } + + function initCharts() { + let chartDom1: HTMLElement = document.getElementById('chartDom') as HTMLElement + let chartDom2: HTMLElement = document.getElementById('chartDom2') as HTMLElement + let chartDom3: HTMLElement = document.getElementById('chartDom3') as HTMLElement + let chartDom4: HTMLElement = document.getElementById('chartDom4') as HTMLElement + + chart1 = echarts.init(chartDom1) + chart2 = echarts.init(chartDom2) + chart3 = echarts.init(chartDom3) + chart4 = echarts.init(chartDom4) + + const option2 = { + grid: { + left: '13%', // 宸﹁竟璺濓紝涔熷彲浠ユ槸鍏蜂綋鐨勫儚绱犲�硷紝渚嬪 50 + right: '6%', // 鍙宠竟璺� + top: '13%', // 涓婅竟璺� + bottom: '35%', // 璁剧疆涓嬭竟璺濓紝渚嬪杩欓噷璁剧疆涓�15% + }, + xAxis: { + type: 'category', + data: [], + axisLabel: { + rotate: 55, // 杩欓噷璁剧疆鏃嬭浆鐨勮搴︼紝姝e�艰〃绀洪『鏃堕拡鏃嬭浆 + interval: 0, // 寮哄埗鏄剧ず鎵�鏈夋爣绛撅紝涓嶈繘琛岄棿闅旀樉绀� + color: '#fff', // 璁剧疆X杞存爣绛惧瓧浣撻鑹� + }, + }, + yAxis: { + type: 'value', + axisLabel: { + color: '#fff', // 璁剧疆Y杞存爣绛惧瓧浣撻鑹� + }, + splitLine: { show: false }, // 涓嶆樉绀篩杞村垎鍓茬嚎锛堢綉鏍肩嚎锛� + }, + series: [ + { + data: [], + type: 'bar', + itemStyle: { + color: '#3398DB', // 鎸囧畾鏌卞瓙鐨勯鑹� + }, + }, + ], + } + const option1 = { + tooltip: { + trigger: 'item', + }, + + series: [ + { + data: [], + type: 'pie', + radius: '50%', + emphasis: { + itemStyle: { + shadowBlur: 10, + shadowOffsetX: 0, + shadowColor: 'rgba(0, 0, 0, 0.5)', + }, + }, + label: { + show: true, // 鏄剧ず鏍囩 + //position: 'outside', // 鏍囩鐨勪綅缃紝鍙互鏄� 'outside', 'inside', 'center' + //formatter: '{b}: {c} ({d}%)', // 鏍囩鍐呭鏍煎紡鍖栧嚱鏁版垨瀛楃涓叉ā鏉� + fontSize: 12, // 璁剧疆瀛椾綋澶у皬 + // fontWeight: 'bold', // 璁剧疆瀛椾綋绮楃粏 + color: '#fff', // 璁剧疆瀛椾綋棰滆壊 + }, + }, + ], + } + const option4 = { + grid: { + left: '13%', // 宸﹁竟璺濓紝涔熷彲浠ユ槸鍏蜂綋鐨勫儚绱犲�硷紝渚嬪 50 + right: '6%', // 鍙宠竟璺� + top: '13%', // 涓婅竟璺� + bottom: '35%', // 璁剧疆涓嬭竟璺濓紝渚嬪杩欓噷璁剧疆涓�15% + }, + xAxis: { + type: 'category', + data: [], + axisLabel: { + rotate: 55, // 杩欓噷璁剧疆鏃嬭浆鐨勮搴︼紝姝e�艰〃绀洪『鏃堕拡鏃嬭浆 + interval: 0, // 寮哄埗鏄剧ず鎵�鏈夋爣绛撅紝涓嶈繘琛岄棿闅旀樉绀� + color: '#fff', // 璁剧疆X杞存爣绛惧瓧浣撻鑹� + }, + }, + yAxis: { + type: 'value', + axisLabel: { + color: '#fff', // 璁剧疆Y杞存爣绛惧瓧浣撻鑹� + }, + splitLine: { show: false }, // 涓嶆樉绀篩杞村垎鍓茬嚎锛堢綉鏍肩嚎锛� + }, + series: [ + { + data: [], + type: 'bar', + itemStyle: { + color: '#3398DB', // 鎸囧畾鏌卞瓙鐨勯鑹� + }, + }, + ], + } + const option3 = { + tooltip: { + trigger: 'item', + }, + + series: [ + { + data: [], + type: 'pie', + radius: '50%', + emphasis: { + itemStyle: { + shadowBlur: 10, + shadowOffsetX: 0, + shadowColor: 'rgba(0, 0, 0, 0.5)', + }, + }, + label: { + show: true, // 鏄剧ず鏍囩 + //position: 'outside', // 鏍囩鐨勪綅缃紝鍙互鏄� 'outside', 'inside', 'center' + //formatter: '{b}: {c} ({d}%)', // 鏍囩鍐呭鏍煎紡鍖栧嚱鏁版垨瀛楃涓叉ā鏉� + fontSize: 12, // 璁剧疆瀛椾綋澶у皬 + //fontWeight: 'bold', // 璁剧疆瀛椾綋绮楃粏 + color: '#fff', // 璁剧疆瀛椾綋棰滆壊 + }, + }, + ], + } + + option1 && chart1.setOption(option1) + option2 && chart2.setOption(option2) + option3 && chart3.setOption(option3) + option4 && chart4.setOption(option4) + } + + var shangliaoFlag = false + var statusGif = 'tmrefeng2' + var statusTxt = '姝e湪骞茬嚗' + + function chaiwangban() { + statusGif = 'chaiwangban-1' + setTimeout(shangliao, 7000) + } + + function shangliao() { + statusGif = 'shangliao-N' + setTimeout(() => { + statusGif = 'zhuangwangban' + setTimeout(() => { + statusGif = 'guanmen1' + setTimeout(() => { + shangliaoFlag = false + }, 4000) + }, 7000) + }, 15000) + } + function back() { + router.back() + } + /** + * 鏌ヨ瀹炴椂鏁版嵁 + */ + function queryRealTime() { + if (eqp.value) { + eqp.value = eqps.value[eqpNum.value] + // console.log("888",eqp.value); + let tenantId = getTenantId() + let eqpCode = eqp.value.code + let queryRealTimeUrl = '/dry/real/getRealTimeData' + defHttp.get({ url: queryRealTimeUrl, params: { tenantid: tenantId, machineid: eqpCode } }).then((res) => { + if (res && res.trendVo) { + console.log(`output->re11s`, res) + var totalTime = 0 + + /**姘存淮鍥惧惈姘撮噺 */ + res.mois = [ + (res.trendVo.moisture / 100).toFixed(2), + (res.trendVo.moisture / 100 / 1.5).toFixed(2), + (res.trendVo.moisture / 100 / 3).toFixed(2), + ] + + /**鐘舵��/gif鍔ㄥ浘 */ + if (!shangliaoFlag) { + if (res.orderStatus == 0) { + statusGif = 'zanting' + statusTxt = '鍑嗗' + } else if (res.orderStatus == 1) { + shangliaoFlag = true + statusGif = 'kaimen1' + statusTxt = '涓婃枡' + setTimeout(chaiwangban, 4000) + } else if (res.orderStatus == 2) { + // statusTxt = res.level + // statusGif = 'zanting' + // if (res.level === '鍑嗗闃舵') { + // console.log("鍑嗗闃舵" + statusGif); + // statusGif = 'zanting' + // } else if (res.level === '骞茬嚗闃舵' || res.level === '姝e湪骞茬嚗') { + // statusGif = 'tmrefeng2' + // } else if (res.level === '缈绘枡闃舵') { + // statusGif = 'fanliao-N' + // } else if (res.level === '鍑烘枡闃舵') { + // statusGif = 'chuliao-N' + // } + + // if (res.state_fan == 1) { + statusGif = 'tmrefeng2' + statusTxt = '姝e湪骞茬嚗' + // } + + // if (res.state_roller == 4) { + // statusGif = 'fanliao-N' + // statusTxt = '姝e湪缈绘枡' + // } + + // if (res.state_roller == 5) { + // statusGif = 'chuliao-N' + // statusTxt = '姝e湪鍑烘枡' + // } + + // if (res.state_windbox == 2 || res.state_windbox == 3) { + // statusGif = 'fengxiangsheng-1' + // statusTxt = '姝e湪骞茬嚗' + // } + } else if (res.orderStatus == 3) { + statusGif = 'zanting' + statusTxt = '鏆傚仠' + } else if (res.orderStatus == 4) { + statusGif = 'zanting' + statusTxt = '骞茬嚗瀹屾垚' + } + } + res.herbImage = 'yaocai1.png' + + if (res.herbName == '鐧借姳铔囪垖鑽�') { + res.herbImage = 'baihuasheshecao.png' + } else if (res.herbName == '绯ョɑ鏍�') { + res.herbImage = 'nuodaogen.png' + } else if (res.herbName == '娣緤钘�') { + res.herbImage = 'yinyanghuo.png' + } else if (res.herbName == '椹娇鑻�') { + res.herbImage = 'machixian.png' + } else if (res.herbName == '澧ㄦ棻鑾�') { + res.herbImage = 'mohanlian.png' + } else if (res.herbName == '妗戠櫧鐨�') { + res.herbImage = 'sangbaipi.png' + } + + res.isError = false + if (res.fault) { + res.isError = true + res.errorMsg = res.fault + const faults = res.fault; + console.log('errorMsg:', res.fault) + if (faults.includes('鎬ュ仠鎶ヨ')) { + shebeijiting.value = true; + } + if (faults.includes('宸﹀墠鎬ュ仠')) { + zuoqianjiting.value = true; + } + if (faults.includes('闈㈡澘鎬ュ仠')) { + mianbanjiting.value = true; + } + if (faults.includes('鍑烘枡鎬ュ仠')) { + chuliaojiting.value = true; + } + if (faults.includes('娓╁害澶辨帶')) { + wendubaojing.value = true; + } + if (faults.includes('婊氱瓛鍗�')) { + guntongsheng.value = true; + } + if (faults.includes('婊氱瓛闄�')) { + guntongjiang.value = true; + } + if (faults.includes('婊氱瓛鐢垫満杩囨祦')) { + guntongguoliu.value = true; + } + if (faults.includes('椋庣鍗�')) { + fengxiangsheng.value = true; + } + if (faults.includes('椋庣闄�')) { + fengxiangjiang.value = true; + } + if (faults.includes('椋庣椋庢満杩囨祦')) { + fengjiguoliu.value = true; + } + } + + if (res.warning) { + res.isWarning = true + res.warnMsg = res.warning + const warnings = res.warning; + console.log('warnMsg:', res.warning) + if (warnings.includes('宸﹀墠闂�')) { + zuoqianmen.value = true; + } + if (warnings.includes('鍙冲墠闂�')) { + youqianmen.value = true; + } + if (warnings.includes('宸﹀悗闂�')) { + zuohoumen.value = true; + } + if (warnings.includes('鍙冲悗闂�')) { + youhoumen.value = true; + } + if (warnings.includes('婊氱瓛涓嶅湪楂樹綅')) { + guntongbuzaigaowei.value = true; + } + if (warnings.includes('椋庣涓嶅湪浣庝綅')) { + fengxiangbuzaidiwei.value = true; + } + if (warnings.includes('椋庣涓嶅湪楂樹綅')) { + fengxiangbuzaigaowei.value = true; + } + if (warnings.includes('鍔犵儹浣嶄紶鎰熷櫒')) { + jiareweichuanganqi.value = true; + } + if (warnings.includes('宸﹀墠椋庣楂樹綅浼犳劅鍣�')) { + zuoqianfengxianggaowei.value = true; + } + if (warnings.includes('鍙冲墠椋庣楂樹綅浼犳劅鍣�')) { + youqianfengxianggaowei.value = true; + } + if (warnings.includes('宸﹀悗椋庣楂樹綅浼犳劅鍣�')) { + zuohoufengxianggaowei.value = true; + } + if (warnings.includes('鍙冲悗椋庣楂樹綅浼犳劅鍣�')) { + youhoufengxianggaowei.value = true; + } + if (warnings.includes('宸﹀墠椋庣浣庝綅浼犳劅鍣�')) { + zuoqianfengxiangdiwei.value = true; + } + if (warnings.includes('鍙冲墠椋庣浣庝綅浼犳劅鍣�')) { + youqianfengxiangdiwei.value = true; + } + if (warnings.includes('宸﹀悗椋庣浣庝綅浼犳劅鍣�')) { + zuohoufengxiangdiwei.value = true; + } + if (warnings.includes('鍙冲悗椋庣浣庝綅浼犳劅鍣�')) { + youhoufengxiangdiwei.value = true; + } + if (warnings.includes('宸﹀墠婊氱瓛浣庝綅浼犳劅鍣�')) { + zuoqianguntongdiwei.value = true; + } + if (warnings.includes('鍙冲墠婊氱瓛浣庝綅浼犳劅鍣�')) { + youqianguntongdiwei.value = true; + } + if (warnings.includes('宸﹀悗婊氱瓛浣庝綅浼犳劅鍣�')) { + zuohouguntongdiwei.value = true; + } + if (warnings.includes('鍙冲悗婊氱瓛浣庝綅浼犳劅鍣�')) { + youhouguntongdiwei.value = true; + } + } + getRealFault() + } else { + res = { + mois: [], + gif: 'tmrefeng2', + herbImage: 'yaocai1.png', + } + } + + res.totalRemain = res.remain - (res.dryTime - totalTime) > 0 ? res.remain - (res.dryTime - totalTime) : 0 + // console.log(`output->res`, res.detailList[res.detailList.length-1]) + realData.value = res + + }) + } + } + + /** + * 鏌ヨ褰撳墠宸ュ崟鏁呴殰鏄庣粏 + */ + function getRealFault() { + return new Promise(() => { + let tenantId = getTenantId() + queryByOrderId({ orderId: realData.value.code, tenantId: tenantId }).then((res) => { + const faultStats = {} + const warningStats = {} + // 寰幆鍒楄〃锛屾牴鎹粨鏉熸椂闂村拰寮�濮嬫椂闂达紝璁$畻鏁呴殰鏃堕暱 + res.forEach((item) => { + const faultName = item.faultName + item.totalTime = new Date(item.endTime) - new Date(item.startTime) + item.totalTime = item.totalTime / 1000 + + if (item.faultType === 1) { + if (!faultStats[faultName]) { + faultStats[faultName] = { + count: 0, + totalDuration: 0, // 姣 + } + } + // 鏇存柊缁熻鏁版嵁 + faultStats[faultName].count += 1 + faultStats[faultName].totalDuration += item.totalTime + } else if (item.faultType === 2) { + if (!warningStats[faultName]) { + warningStats[faultName] = { + count: 0, + totalDuration: 0, // 姣 + } + } + // 鏇存柊缁熻鏁版嵁 + warningStats[faultName].count += 1 + warningStats[faultName].totalDuration += item.totalTime + } + }) + console.log(`output->res`, res) + faultList.value = res + const prepareFault = prepareData(faultStats) + const prepareWarning = prepareData(warningStats) + console.log('prePareFault', prepareFault) + console.log('prePareWarning', prepareWarning) + chart1.setOption({ + + series: [{ data: prepareFault.duration }], + }) + chart2.setOption({ + xAxis: { data: prepareFault.faultNames }, + series: [{ data: prepareFault.count }], + }) + chart3.setOption({ + series: [{ data: prepareWarning.duration }], + }) + chart4.setOption({ + xAxis: { data: prepareWarning.faultNames }, + series: [{ data: prepareWarning.count }], + }) + }) + }) + } + // 灏嗙粺璁℃暟鎹浆鎹负閫傚悎ECharts浣跨敤鐨勬牸寮� + function prepareData(stats) { + const faultNames = Object.keys(stats) + const durationSorted = faultNames.sort((a, b) => stats[b].totalDuration - stats[a].totalDuration) + const countSorted = faultNames.sort((a, b) => stats[b].count - stats[a].count) + + return { + faultNames: faultNames, + duration: durationSorted.map((name) => ({ name, value: stats[name].totalDuration })), + count: countSorted.map((name) => ({ name, value: stats[name].count })), + } + } + var move = true + function moveImage() { + if (move) { + position.value -= 0.3 + } else { + position.value += 0.3 + } + if (position.value < -240) { + move = false + } + if (position.value > -1) { + move = true + } + } + + // 寮�濮嬭嚜鍔ㄦ粴鍔� + const startAutoScroll = () => { + console.log('寮�濮嬭嚜鍔ㄦ粴鍔�') + scrollInterval = setInterval(() => { + if (isScrolling.value) return + isScrolling.value = true + + const container = scrollContainer.value + + // 婊氬姩瀹瑰櫒 + container.scrollTop += 1 + // 褰撴粴鍔ㄥ埌搴曢儴鏃讹紝閲嶇疆鍒伴《閮� + if (container.scrollTop >= container.scrollHeight - container.clientHeight) { + setTimeout(() => { + container.scrollTop = 0 + isScrolling.value = false // 绔嬪嵆鍏佽涓嬩竴娆℃粴鍔ㄥ紑濮� + return + }, 2000) + } + if (container.scrollTop < container.scrollHeight - container.clientHeight) { + setTimeout(() => { + isScrolling.value = false + }, 20) // 纭繚姣忔婊氬姩闂撮殧瓒冲闀匡紝閬垮厤杩炵画瑙﹀彂 + } + }, 20) // 鎺у埗婊氬姩閫熷害锛屾暟鍊艰秺灏忔粴鍔ㄨ秺蹇� + + } + + // 鍋滄鑷姩婊氬姩 + const stopAutoScroll = () => { + if (scrollInterval) { + clearInterval(scrollInterval) + } + } + + listAllEqp() + //queryEqp() + // DOM鎸傝浇瀹屾垚鍚庢覆鏌撳浘琛� + onMounted(() => { + Timer.value = setInterval(queryRealTime, 3000) + Timer2.value = setInterval(moveImage, 50) + startAutoScroll() + setTimeout(initCharts, 500) + }) + + onUnmounted(() => { + clearInterval(Timer.value) + clearInterval(Timer2.value) + Timer.value = null + Timer2.value = null + stopAutoScroll() + }) +</script> + +<style scoped> + .eqpBox { + height: 100%; + } + .eqpRow { + } + .eqpImage { + height: 1080px; + width: 1920px; + background-image: url(/src/assets/images/dry/bg.png); + background-repeat: no-repeat; + color: white; + /*background-position: 160px 280px; */ + /* background-color: red; */ + background-size: 120%; + padding: 10px; + display: flex; + flex-wrap: wrap; + align-content: flex-start; + } + + .leftEqp { + height: 1080px; + width: 1200px; + display: flex; + flex-wrap: wrap; + align-content: flex-start; + + /* background-color: white; + background-image: url(/src/assets/images/dry/shebei1.png); + background-repeat: no-repeat; + background-size: 125%; + border-radius: 10px; + background-position: -119px 293px; */ + } + + .leftTop { + height: 1060px; + width: 1200px; + display: flex; + justify-content: center; + align-content: flex-start; + background-image: url(/src/assets/images/dry/ganzaoji-x.png); + background-repeat: no-repeat; + background-size: 86%; + border-radius: 10px; + flex-wrap: wrap; + background-position: 85px 279px; + } + .leftMid { + width: 850px; + height: 300px; + /* border: 1px solid; */ + margin-top: 10px; + border-radius: 10px; + /* background: white; */ + } + .mainInfo { + line-height: 33px; + padding-left: 10px; + font-size: 30px; + color: white; + } + .subhead { + color: #a19f9c; + font-size: 16px; + padding-left: 10px; + } + + .mainInfo2 { + line-height: 20px; + padding-left: 0px; + font-size: 16px; + } + .subhead2 { + color: #a19f9c; + font-size: 10px; + padding-left: 0px; + } + .zhengqi { + height: 180px; + width: 200px; + background-image: url(/src/assets/images/dry/liuliangji.png); + background-repeat: no-repeat; + background-size: 160px; + /* border-radius: 10px; */ + background-position: 17px -6px; + } + + .liuliangji { + } + .leftData { + height: 250px; + width: 120px; + } + .rightChart { + height: 270px; + width: 170px; + margin-top: -30px; + } + .leftTop0 { + height: 260px; + width: 1200px; + display: flex; + justify-content: center; + align-content: flex-start; + flex-wrap: wrap; + } + .leftTop1 { + width: 360px; + height: 200px; + text-align: center; + display: flex; + justify-content: center; + align-items: center; + font-size: 30px; + color: #727272; + } + .leftTop2 { + width: 250px; + height: 200px; + text-align: center; + display: flex; + justify-content: center; + align-items: center; + font-size: 30px; + color: #727272; + } + .leftTop3 { + width: 340px; + height: 200px; + /* background-image: url(/src/assets/images/dry/fanliao.gif); */ + background-repeat: no-repeat; + background-position: 0px 20px; + background-size: 300px; + border-radius: 50px; + } + + .eqpStatus { + width: 848px; + } + .rightInfo { + display: flex; + flex-wrap: wrap; + align-content: flex-start; + height: 1060px; + width: 700px; + } + + .rightTop { + display: flex; + height: 340px; + padding-left: 10px; + } + .rightTwo { + display: flex; + flex-wrap: wrap; + } + + .infoChart { + width: 340px; + height: 350px; + /* background: white; */ + margin-left: 10px; + margin-top: 10px; + border-radius: 10px; + } + .chartTittle { + width: 340px; + height: 30px; + font-size: 16px; + display: flex; + justify-content: space-between; + padding: 15px 15px; + } + .chartInfo { + width: 60px; + height: 180px; + } + + .compareBar { + width: 55px; + height: 140px; + } + .margintop-30 { + margin-top: -30px; + } + + .barTop { + width: 55px; + height: 30px; + } + .barBack { + width: 30px; + height: 100px; + /* border: 1px solid black; */ + display: flex; + flex-wrap: wrap; + align-content: flex-end; + } + .barDiv { + width: 100%; + + background-color: #1595ea; + } + .bad { + background-color: #973535; + } + .rightLabel { + width: 110px; + display: flex; + justify-content: space-between; + } + .label { + color: white; + text-align: center; + width: 50px; + border-radius: 4px; + height: 20px; + font-size: 10px; + line-height: 21px; + } + .good { + background-color: #0d6e24; + } + + .mainInfo3 { + font-size: 24px; + } + .herbInfo { + width: 340px; + height: 440px; + color: #727272; + } + + .curEqp { + width: 340px; + height: 170px; + + /* background: white; + border-radius: 10px; */ + } + .curHerb { + margin-top: 10px; + width: 340px; + height: 260px; + /* background: white; + border-radius: 10px; */ + + background-repeat: no-repeat; + background-size: 200px; + background-position: 0px 10px; + } + .tempMoisChart { + width: 690px; + height: 340px; + /* background: white; */ + + padding: 20px; + border-radius: 10px; + } + .topLeft { + margin: 20px 40px 60px 20px; + padding: 15px; + /* background: white; */ + border-radius: 10px; + height: 325px; + width: 440px; + /* background-image: url(/src/assets/images/dry/yaocai.jpg); */ + background-repeat: no-repeat; + background-size: 164px 132px; + background-position: 239px 65px; + display: flex; + } + .topMid { + margin: 20px 20px 60px 40px; + /* background: white; */ + border-radius: 10px; + background-image: url(/src/assets/images/dry/fanliao.gif); + background-repeat: no-repeat; + background-position: 0px 20px; + background-size: 400px; + width: 400px; + + padding: 20px; + } + .topRight { + margin: 20px 20px 60px 20px; + /* background: white; */ + border-radius: 10px; + width: 700px; + padding: 20px; + } + .midLeft { + height: 450px; + width: 600px; + display: flex; + padding: 0 20px 20px 20px; + } + .midMid { + width: 500px; + padding-top: 50px; + } + + .midRight { + background-image: url(/src/assets/images/dry/fengjixz.gif); + background-repeat: no-repeat; + background-position: 150px 260px; + background-size: 120px 120px; + width: 600px; + } + + .shangJianTou { + margin-left: 140px; + width: 70px; + height: 100px; + background-image: url(/src/assets/images/dry/shangjiantoutou.gif); + background-repeat: no-repeat; + background-position: 0px 0px; + background-size: 70px 100px; + } + + .zoujiantou { + margin-left: 225px; + margin-top: 30px; + width: 100px; + height: 70px; + background-image: url(/src/assets/images/dry/zuojiantou.gif); + background-repeat: no-repeat; + background-position: 0px 0px; + background-size: 100px 70px; + } + .fault { + padding: 10px; + height: 60px; + font-size: 26px; + width: 100%; + text-align: right; + color: red; + } + .eqpName { + padding: 20px; + + height: 160px; + } + + .formula { + display: flex; + width: 340px; + height: 40px; + padding: 0 20px; + justify-content: space-around; + justify-items: center; + } + + .formulaItem { + display: flex; + justify-content: center; + width: 85px; + height: 40px; + } + + .eqpInfoText { + font-size: 18px; + font-weight: bold; + } + + :deep() .ant-slider-mark-text { + padding-left: 15px; + font-size: 10px; + } + :deep() .ant-slider-mark-text::before { + content: ''; + display: block; + width: 6px; + height: 1px; + background-color: #1890ff; + + position: absolute; + top: 10px; + left: 0px; + } + :deep() .ant-slider-rail { + width: 10px !important; + border-radius: 6px 6px 0 0; + background: linear-gradient(to top, #ce0000 0%, #ce0000 40%, #ce0000 75%, rgb(160, 160, 160) 100%); + } + :deep() .ant-slider-track { + background: rgb(216, 216, 216); + + height: 20px; + width: 10px !important; + border-radius: 6px 6px 0 0; + } + :deep() .ant-slider-track:hover { + } + :deep() .ant-slider-handle { + display: none; + } + :deep() .ant-slider-dot { + display: none; + } + :deep() .ant-slider-step { + width: 10px !important; + } + :deep() .ant-slider-step > :first-child { + display: block !important; + width: 30px !important; + height: 30px !important; + bottom: -26px !important; + left: -6px; + border: none; + background: #ce0000; + } + :deep() .progress { + padding: 25px 25px; + + width: 360px; + display: flex; + } + :deep() .ant-progress-bg { + height: 25px !important; + } + .outDiv { + display: flex; + justify-content: center; + justify-items: center; + } + .blingbling { + -webkit-animation: scaleout 1s infinite ease-in-out; + animation: scaleout 1s infinite ease-in-out; + } + .center { + display: flex; + justify-content: center; + justify-items: center; + align-items: center; + flex-wrap: wrap; + text-align: center; + } + + .centerText { + width: 100%; + text-align: center; + } + + @-webkit-keyframes scaleout { + 0% { + -webkit-transform: scale(1); + } + + 100% { + -webkit-transform: scale(1.1); + opacity: 0; + } + } + + @keyframes scaleout { + 0% { + transform: scale(1); + -webkit-transform: scale(1); + } + + 100% { + transform: scale(1.1); + -webkit-transform: scale(1.1); + opacity: 0; + } + } + .error-div { + position: absolute; + display: flex; + align-items: center; + } + .error-marker { + width: 18px; + height: 18px; + background: red; + border-radius: 50%; + } + .error-msg { + margin-left: 6px; + height: 24px; + background: gray; + border-radius: 5px; + font-weight: bold; + color: red; + } + .warn-marker { + width: 18px; + height: 18px; + background: orange; + border-radius: 50%; + } + .warn-msg { + margin-left: 6px; + height: 24px; + background: gray; + border-radius: 5px; + font-weight: bold; + color: orange; + } + .scroll-container { + height: 280px; /* 璁剧疆浣犳兂瑕佺殑楂樺害 */ + overflow: hidden; + } +</style> diff --git a/src/views/dry/bigScreen/BigFaultCloud.vue b/src/views/dry/bigScreen/BigFaultCloud.vue index 3ec3f30..86dad08 100644 --- a/src/views/dry/bigScreen/BigFaultCloud.vue +++ b/src/views/dry/bigScreen/BigFaultCloud.vue @@ -4,10 +4,14 @@ <div class="eqpRow"> <div class="eqpImage" :style="{ 'background-position': position + 'px' }"> <div class="leftEqp"> - <dv-border-box7 class="leftTop"> <div class="leftTop0"> + <div style="padding-top: 20px; padding-left: 10px" @click="back"> + <Icon style="color: powderblue" icon="ion:caret-back-sharp" :size="35" /> + </div> + <div class="leftTop1"> + <Icon icon="emojione:hourglass-with-flowing-sand" :size="50" /> <div> <div class="mainInfo">{{ realData?.totalRemain | 0 }} Min</div> @@ -41,241 +45,177 @@ </div> </div> </div> - <div style="width: 1200px; height: 798px; position: absolute;"> - <div v-if="true | zuoqianjiting" class="error-div" style=" top:466px; left:589px"> - <div class="blingbling error-marker" ></div> - <div class="error-msg" style="width: 70px;"> - 宸﹀墠鎬ュ仠 - </div> - </div> - <div v-if="true | shebeijiting" class="error-div" style=" top:170px; left:702px"> - <div class="blingbling error-marker" ></div> - <div class="error-msg" style=" width: 106px;"> - 璁惧鎬ュ仠锛堟�伙級 - </div> - </div> - <div v-if="true | chuliaojiting" class="error-div" style=" top:450px; left:158px"> - <div class="blingbling error-marker" ></div> - <div class="error-msg" style=" width: 70px;"> - 鍑烘枡鎬ュ仠 - </div> - </div> - <div v-if="true | mianbanjiting" class="error-div" style=" top:398px; left:978px"> - <div class="blingbling error-marker" ></div> - <div class="error-msg" style=" width: 70px;"> - 闈㈡澘鎬ュ仠 - </div> - </div> - <div v-if="true | fengxiangsheng" class="error-div" style=" top:476px; left:753px"> - <div class="blingbling error-marker" ></div> - <div class="error-msg" style=" width: 86px;"> - 椋庣鍗囧紓甯� - </div> - </div> - <div v-if="true | fengxiangjiang" class="error-div" style=" top:502px; left:753px"> - <div class="blingbling error-marker" ></div> - <div class="error-msg" style=" width: 86px;"> - 椋庣闄嶅紓甯� - </div> - </div> - <div v-if="true | fengjiguoliu" class="error-div" style=" top:510px; left:975px"> - <div class="blingbling error-marker" ></div> - <div class="error-msg" style=" width: 70px;"> - 椋庢満杩囨祦 - </div> - </div> - <div v-if="true | guntongsheng" class="error-div" style=" top:331px; left:753px"> - <div class="blingbling error-marker" ></div> - <div class="error-msg" style=" width: 86px;"> - 婊氱瓛鍗囧紓甯� - </div> - </div> - <div v-if="true | guntongjiang" class="error-div" style=" top:356px; left:753px"> - <div class="blingbling error-marker" ></div> - <div class="error-msg" style=" width: 86px;"> - 婊氱瓛闄嶅紓甯� - </div> - </div> - <div v-if="true | guntongguoliu" class="error-div" style=" top:324px; left:916px"> - <div class="blingbling error-marker" ></div> - <div class="error-msg" style=" width: 70px;"> - 婊氱瓛杩囨祦 - </div> - </div> - <div v-if="true | wendubaojing" class="error-div" style=" top:373px; left:978px"> - <div class="blingbling error-marker" ></div> - <div class="error-msg" style=" width: 70px;"> - 娓╁害鎶ヨ - </div> - </div> + <div style="width: 1200px; height: 798px; position: absolute"> + <div v-if="zuoqianjiting" class="error-div" style="top: 466px; left: 589px"> + <div class="blingbling error-marker"></div> + <div class="error-msg" style="width: 70px"> 宸﹀墠鎬ュ仠 </div> + </div> + <div v-if="shebeijiting" class="error-div" style="top: 170px; left: 702px"> + <div class="blingbling error-marker"></div> + <div class="error-msg" style="width: 106px"> 璁惧鎬ュ仠锛堟�伙級 </div> + </div> + <div v-if="chuliaojiting" class="error-div" style="top: 450px; left: 158px"> + <div class="blingbling error-marker"></div> + <div class="error-msg" style="width: 70px"> 鍑烘枡鎬ュ仠 </div> + </div> + <div v-if="mianbanjiting" class="error-div" style="top: 398px; left: 978px"> + <div class="blingbling error-marker"></div> + <div class="error-msg" style="width: 70px"> 闈㈡澘鎬ュ仠 </div> + </div> + <div v-if="fengxiangsheng" class="error-div" style="top: 476px; left: 753px"> + <div class="blingbling error-marker"></div> + <div class="error-msg" style="width: 86px"> 椋庣鍗囧紓甯� </div> + </div> + <div v-if="fengxiangjiang" class="error-div" style="top: 502px; left: 753px"> + <div class="blingbling error-marker"></div> + <div class="error-msg" style="width: 86px"> 椋庣闄嶅紓甯� </div> + </div> + <div v-if="fengjiguoliu" class="error-div" style="top: 510px; left: 975px"> + <div class="blingbling error-marker"></div> + <div class="error-msg" style="width: 70px"> 椋庢満杩囨祦 </div> + </div> + <div v-if="guntongsheng" class="error-div" style="top: 331px; left: 753px"> + <div class="blingbling error-marker"></div> + <div class="error-msg" style="width: 86px"> 婊氱瓛鍗囧紓甯� </div> + </div> + <div v-if="guntongjiang" class="error-div" style="top: 356px; left: 753px"> + <div class="blingbling error-marker"></div> + <div class="error-msg" style="width: 86px"> 婊氱瓛闄嶅紓甯� </div> + </div> + <div v-if="guntongguoliu" class="error-div" style="top: 324px; left: 916px"> + <div class="blingbling error-marker"></div> + <div class="error-msg" style="width: 70px"> 婊氱瓛杩囨祦 </div> + </div> + <div v-if="wendubaojing" class="error-div" style="top: 373px; left: 978px"> + <div class="blingbling error-marker"></div> + <div class="error-msg" style="width: 70px"> 娓╁害鎶ヨ </div> + </div> - <div v-if="true | zuoqianmen" class="error-div" style=" top:595px; left:591px"> - <div class="blingbling warn-marker" ></div> - <div class="warn-msg" style=" width: 80px;"> - 宸﹀墠闂ㄦ姤璀� - </div> - </div> - <div v-if="true | zuohoumen" class="error-div" style=" top:565px; left:868px"> - <div class="blingbling warn-marker" ></div> - <div class="warn-msg" style=" width: 80px;"> - 宸﹀悗闂ㄦ姤璀� - </div> - </div> - <div v-if="true | youqianmen" class="error-div" style=" top:593px; left:396px"> - <div class="blingbling warn-marker" ></div> - <div class="warn-msg" style=" width: 80px;"> - 鍙冲墠闂ㄦ姤璀� - </div> - </div> - <div v-if="true | youhoumen" class="error-div" style=" top:565px; left:697px"> - <div class="blingbling warn-marker" ></div> - <div class="warn-msg" style=" width: 80px;"> - 鍙冲悗闂ㄦ姤璀� - </div> - </div> + <div v-if="zuoqianmen" class="error-div" style="top: 595px; left: 591px"> + <div class="blingbling warn-marker"></div> + <div class="warn-msg" style="width: 80px"> 宸﹀墠闂ㄦ姤璀� </div> + </div> + <div v-if="zuohoumen" class="error-div" style="top: 565px; left: 868px"> + <div class="blingbling warn-marker"></div> + <div class="warn-msg" style="width: 80px"> 宸﹀悗闂ㄦ姤璀� </div> + </div> + <div v-if="youqianmen" class="error-div" style="top: 593px; left: 396px"> + <div class="blingbling warn-marker"></div> + <div class="warn-msg" style="width: 80px"> 鍙冲墠闂ㄦ姤璀� </div> + </div> + <div v-if="youhoumen" class="error-div" style="top: 565px; left: 697px"> + <div class="blingbling warn-marker"></div> + <div class="warn-msg" style="width: 80px"> 鍙冲悗闂ㄦ姤璀� </div> + </div> - <div v-if="true | guntongbuzaigaowei" class="error-div" style=" top:304px; left:753px"> - <div class="blingbling warn-marker" ></div> - <div class="warn-msg" style=" width: 100px;"> - 婊氱瓛涓嶅湪楂樹綅 - </div> - </div> - <div v-if="true | fengxiangbuzaigaowei" class="error-div" style=" top:451px; left:753px"> - <div class="blingbling warn-marker" ></div> - <div class="warn-msg" style=" width: 100px;"> - 椋庣涓嶅湪楂樹綅 - </div> - </div> - <div v-if="true | fengxiangbuzaidiwei" class="error-div" style=" top:528px; left:753px"> - <div class="blingbling warn-marker" ></div> - <div class="warn-msg" style=" width: 100px;"> - 椋庣涓嶅湪浣庝綅 - </div> - </div> - <div v-if="true | jiareweichuanganqi" class="error-div" style=" top:433px; left:904px"> - <div class="blingbling warn-marker" ></div> - <div class="warn-msg" style=" width: 126px;"> - 鍔犵儹浣嶄紶鎰熷櫒鎶ヨ - </div> - </div> - <div v-if="true | zuoqianfengxianggaowei" class="error-div" style=" top:502px; left:535px"> - <div class="blingbling warn-marker" ></div> - <div class="warn-msg" style=" width: 126px;"> - 宸﹀墠椋庣涓嶅湪楂樹綅 - </div> - </div> - <div v-if="true | zuoqianfengxiangdiwei" class="error-div" style=" top:528px; left:535px"> - <div class="blingbling warn-marker" ></div> - <div class="warn-msg" style=" width: 126px;"> - 宸﹀墠椋庣涓嶅湪浣庝綅 - </div> - </div> - <div v-if="true | zuohoufengxianggaowei" class="error-div" style=" top:459px; left:904px"> - <div class="blingbling warn-marker" ></div> - <div class="warn-msg" style=" width: 126px;"> - 宸﹀悗椋庣涓嶅湪楂樹綅 - </div> - </div> - <div v-if="true | zuohoufengxiangdiwei" class="error-div" style=" top:484px; left:904px"> - <div class="blingbling warn-marker" ></div> - <div class="warn-msg" style=" width: 126px;"> - 宸﹀悗椋庣涓嶅湪浣庝綅 - </div> - </div> - <div v-if="true | youqianfengxianggaowei" class="error-div" style=" top:447px; left:420px"> - <div class="blingbling warn-marker" ></div> - <div class="warn-msg" style=" width: 126px;"> - 鍙冲墠椋庣涓嶅湪楂樹綅 - </div> - </div> - <div v-if="true | youqianfengxiangdiwei" class="error-div" style=" top:473px; left:420px"> - <div class="blingbling warn-marker" ></div> - <div class="warn-msg" style=" width: 126px;"> - 鍙冲墠椋庣涓嶅湪浣庝綅 - </div> - </div> - <div v-if="true | youhoufengxianggaowei" class="error-div" style=" top:383px; left:805px"> - <div class="blingbling warn-marker" ></div> - <div class="warn-msg" style=" width: 126px;"> - 鍙冲悗椋庣涓嶅湪楂樹綅 - </div> - </div> - <div v-if="true | youhoufengxiangdiwei" class="error-div" style=" top:408px; left:805px"> - <div class="blingbling warn-marker" ></div> - <div class="warn-msg" style=" width: 126px;"> - 鍙冲悗椋庣涓嶅湪浣庝綅 - </div> - </div> - <div v-if="true | zuoqianguntongdiwei" class="error-div" style=" top:343px; left:530px"> - <div class="blingbling warn-marker" ></div> - <div class="warn-msg" style=" width: 126px;"> - 宸﹀墠婊氱瓛涓嶅湪浣庝綅 - </div> - </div> - <div v-if="true | zuohouguntongdiwei" class="error-div" style=" top:296px; left:916px"> - <div class="blingbling warn-marker" ></div> - <div class="warn-msg" style=" width: 126px;"> - 宸﹀悗婊氱瓛涓嶅湪浣庝綅 - </div> - </div> - <div v-if="true | youqianguntongdiwei" class="error-div" style=" top:316px; left:419px"> - <div class="blingbling warn-marker" ></div> - <div class="warn-msg" style=" width: 126px;"> - 鍙冲墠婊氱瓛涓嶅湪浣庝綅 - </div> - </div> - <div v-if="true | youhouguntongdiwei" class="error-div" style=" top:270px; left:797px"> - <div class="blingbling warn-marker" ></div> - <div class="warn-msg" style=" width: 126px;"> - 鍙冲悗婊氱瓛涓嶅湪浣庝綅 - </div> - </div> - - </div> + <div v-if="guntongbuzaigaowei" class="error-div" style="top: 304px; left: 753px"> + <div class="blingbling warn-marker"></div> + <div class="warn-msg" style="width: 100px"> 婊氱瓛涓嶅湪楂樹綅 </div> + </div> + <div v-if="fengxiangbuzaigaowei" class="error-div" style="top: 451px; left: 753px"> + <div class="blingbling warn-marker"></div> + <div class="warn-msg" style="width: 100px"> 椋庣涓嶅湪楂樹綅 </div> + </div> + <div v-if="fengxiangbuzaidiwei" class="error-div" style="top: 528px; left: 753px"> + <div class="blingbling warn-marker"></div> + <div class="warn-msg" style="width: 100px"> 椋庣涓嶅湪浣庝綅 </div> + </div> + <div v-if="jiareweichuanganqi" class="error-div" style="top: 433px; left: 904px"> + <div class="blingbling warn-marker"></div> + <div class="warn-msg" style="width: 126px"> 鍔犵儹浣嶄紶鎰熷櫒鎶ヨ </div> + </div> + <div v-if="zuoqianfengxianggaowei" class="error-div" style="top: 502px; left: 535px"> + <div class="blingbling warn-marker"></div> + <div class="warn-msg" style="width: 126px"> 宸﹀墠椋庣涓嶅湪楂樹綅 </div> + </div> + <div v-if="zuoqianfengxiangdiwei" class="error-div" style="top: 528px; left: 535px"> + <div class="blingbling warn-marker"></div> + <div class="warn-msg" style="width: 126px"> 宸﹀墠椋庣涓嶅湪浣庝綅 </div> + </div> + <div v-if="zuohoufengxianggaowei" class="error-div" style="top: 459px; left: 904px"> + <div class="blingbling warn-marker"></div> + <div class="warn-msg" style="width: 126px"> 宸﹀悗椋庣涓嶅湪楂樹綅 </div> + </div> + <div v-if="zuohoufengxiangdiwei" class="error-div" style="top: 484px; left: 904px"> + <div class="blingbling warn-marker"></div> + <div class="warn-msg" style="width: 126px"> 宸﹀悗椋庣涓嶅湪浣庝綅 </div> + </div> + <div v-if="youqianfengxianggaowei" class="error-div" style="top: 447px; left: 420px"> + <div class="blingbling warn-marker"></div> + <div class="warn-msg" style="width: 126px"> 鍙冲墠椋庣涓嶅湪楂樹綅 </div> + </div> + <div v-if="youqianfengxiangdiwei" class="error-div" style="top: 473px; left: 420px"> + <div class="blingbling warn-marker"></div> + <div class="warn-msg" style="width: 126px"> 鍙冲墠椋庣涓嶅湪浣庝綅 </div> + </div> + <div v-if="youhoufengxianggaowei" class="error-div" style="top: 383px; left: 805px"> + <div class="blingbling warn-marker"></div> + <div class="warn-msg" style="width: 126px"> 鍙冲悗椋庣涓嶅湪楂樹綅 </div> + </div> + <div v-if="youhoufengxiangdiwei" class="error-div" style="top: 408px; left: 805px"> + <div class="blingbling warn-marker"></div> + <div class="warn-msg" style="width: 126px"> 鍙冲悗椋庣涓嶅湪浣庝綅 </div> + </div> + <div v-if="zuoqianguntongdiwei" class="error-div" style="top: 343px; left: 530px"> + <div class="blingbling warn-marker"></div> + <div class="warn-msg" style="width: 126px"> 宸﹀墠婊氱瓛涓嶅湪浣庝綅 </div> + </div> + <div v-if="zuohouguntongdiwei" class="error-div" style="top: 296px; left: 916px"> + <div class="blingbling warn-marker"></div> + <div class="warn-msg" style="width: 126px"> 宸﹀悗婊氱瓛涓嶅湪浣庝綅 </div> + </div> + <div v-if="youqianguntongdiwei" class="error-div" style="top: 316px; left: 419px"> + <div class="blingbling warn-marker"></div> + <div class="warn-msg" style="width: 126px"> 鍙冲墠婊氱瓛涓嶅湪浣庝綅 </div> + </div> + <div v-if="youhouguntongdiwei" class="error-div" style="top: 270px; left: 797px"> + <div class="blingbling warn-marker"></div> + <div class="warn-msg" style="width: 126px"> 鍙冲悗婊氱瓛涓嶅湪浣庝綅 </div> + </div> + </div> </dv-border-box7> - - </div> <div class="rightInfo"> <div class="rightTop"> <dv-border-box7 class="tempMoisChart"> - + <a-row> + <a-col :span="7">鏁呴殰鍚嶇О</a-col> + <a-col :span="7">寮�濮嬫椂闂�</a-col> + <a-col :span="7">缁撴潫鏃堕棿</a-col> + <a-col :span="3">鎸佺画鏃堕暱</a-col> + </a-row> + <div ref="scrollContainer" class="scroll-container"> + <a-row v-for="item in faultList" :key="item.id"> + <a-col :span="7">{{ item.faultName }}</a-col> + <a-col :span="7">{{ item.startTime }}</a-col> + <a-col :span="7">{{ item.endTime }}</a-col> + <a-col :span="3">{{ item.totalTime }}</a-col> + </a-row> + </div> </dv-border-box7> </div> <div class="rightTwo"> <dv-border-box7 class="infoChart"> - <div class="chartTittle"> - 鏁呴殰鏃堕暱缁熻 - - </div> - <div class="outDiv" style="padding-top: 20px"> - - </div> + <div class="chartTittle"> 鏁呴殰鏃堕暱缁熻 </div> + <!-- <div class="outDiv" style="padding-top: 20px">--> + <!-- --> + <!-- </div>--> + <div :id="'chartDom'" style="width: 340px; height: 280px"></div> </dv-border-box7> <dv-border-box7 class="infoChart"> - <div class="chartTittle" - >鏁呴殰娆℃暟绾� - - </div> - <div class="outDiv" style="padding-top: 20px"> - - </div> + <div class="chartTittle">鏁呴殰娆℃暟绾� </div> + <div :id="'chartDom2'" style="width: 340px; height: 280px"></div> </dv-border-box7> <dv-border-box7 class="infoChart"> <div class="chartTittle">璀﹀憡鏃堕暱缁熻</div> - <div class="outDiv" style="padding-top: 10px"> - - </div> + <div :id="'chartDom3'" style="width: 340px; height: 280px"></div> </dv-border-box7> <dv-border-box7 class="infoChart"> <div class="chartTittle"> <div> 璀﹀憡娆℃暟缁熻</div> - </div> - <div class="outDiv" style="padding-top: 20px"> - - </div> + <div :id="'chartDom4'" style="width: 340px; height: 280px"></div> </dv-border-box7> </div> </div> @@ -296,7 +236,7 @@ import { Icon, IconPicker, SvgIcon } from '/@/components/Icon/index' import { defHttp } from '/@/utils/http/axios' import { queryById, listAll } from '../api/DryEquipment.api' - import { queryByOrderId } from '../dryFaultRecord/DryFaultRecord.api' + import { queryByOrderId } from '../dryFaultRecord/DryFaultRecord.api' import { dryEquipment } from '../dataDefine/DryEquipment.data' import { useUserStore } from '/@/store/modules/user' const domRef = ref<Nullable<HTMLElement>>(null) @@ -305,58 +245,66 @@ const { toggle: toggleDom } = useFullscreen(domRef) const Timer = ref() const Timer2 = ref() - + const scrollContainer = ref(null) + let scrollInterval = null + const isScrolling = ref(false) // 鎺у埗鏄惁姝e湪婊氬姩浠ラ槻姝㈤噸澶嶈Е鍙� const eqps = ref([] as dryEquipment[]) console.log(`output->router.currentRoute.value.params.num `, router.currentRoute.value.query) const eqp = ref({} as dryEquipment) const eqpNum = ref(router.currentRoute.value.query.num || 1) - const tenant = ref(router.currentRoute.value.query.tenant) + const tenant = ref(router.currentRoute.value.query.tenant) const userStore = useUserStore() - const realData = ref({}) - + const realData = ref({ + code: 0, + }) const position = ref(1) //realData.value.tempValue = [0, 100] realData.value.mois = [0.5, 0.35, 0.2] statusGif = 'tmrefeng2' realData.value.herbImage = 'yaocai1.png' + // const faultConst = ['鎬ュ仠鎶ヨ','宸﹀墠鎬ュ仠','闈㈡澘鎬ュ仠','鍑烘枡鎬ュ仠','娓╁害澶辨帶','婊氱瓛鍗�','婊氱瓛闄�','婊氱瓛鐢垫満杩囨祦','椋庣鍗�','椋庣闄�','椋庣椋庢満杩囨祦'] + // const warningConst = ['宸﹀墠闂�','鍙冲墠闂�','宸﹀悗闂�','鍙冲悗闂�','婊氱瓛涓嶅湪楂樹綅','椋庣涓嶅湪浣庝綅','椋庣涓嶅湪楂樹綅','鍔犵儹浣嶄紶鎰熷櫒','宸﹀墠椋庣楂樹綅浼犳劅鍣�','鍙冲墠椋庣楂樹綅浼犳劅鍣�','宸﹀悗椋庣楂樹綅浼犳劅鍣�','鍙冲悗椋庣楂樹綅浼犳劅鍣�','宸﹀墠椋庣浣庝綅浼犳劅鍣�','鍙冲墠椋庣浣庝綅浼犳劅鍣�','宸﹀悗椋庣浣庝綅浼犳劅鍣�','鍙冲悗椋庣浣庝綅浼犳劅鍣�','宸﹀墠婊氱瓛浣庝綅浼犳劅鍣�','鍙冲墠婊氱瓛浣庝綅浼犳劅鍣�','宸﹀悗婊氱瓛浣庝綅浼犳劅鍣�','鍙冲悗婊氱瓛浣庝綅浼犳劅鍣�'] + //----------------error---------------- + const shebeijiting = ref(false) + const chuliaojiting = ref(false) + const zuoqianjiting = ref(false) + const mianbanjiting = ref(false) + const fengxiangsheng = ref(false) + const fengxiangjiang = ref(false) + const fengjiguoliu = ref(false) + const guntongsheng = ref(false) + const guntongjiang = ref(false) + const guntongguoliu = ref(false) + const wendubaojing = ref(false) + //--------------warning------------ + const zuoqianmen = ref(false) + const zuohoumen = ref(false) + const youqianmen = ref(false) + const youhoumen = ref(false) + const guntongbuzaigaowei = ref(false) + const fengxiangbuzaigaowei = ref(false) + const fengxiangbuzaidiwei = ref(false) + const jiareweichuanganqi = ref(false) + const zuoqianfengxianggaowei = ref(false) + const zuohoufengxianggaowei = ref(false) + const youqianfengxianggaowei = ref(false) + const youhoufengxianggaowei = ref(false) + const zuoqianfengxiangdiwei = ref(false) + const zuohoufengxiangdiwei = ref(false) + const youqianfengxiangdiwei = ref(false) + const youhoufengxiangdiwei = ref(false) + const zuoqianguntongdiwei = ref(false) + const zuohouguntongdiwei = ref(false) + const youqianguntongdiwei = ref(false) + const youhouguntongdiwei = ref(false) - //----------------error---------------- - const shebeijiting = ref(false) - const chuliaojiting = ref(false) - const zuoqianjiting = ref(false) - const mianbanjiting = ref(false) - const fengxiangsheng = ref(false) - const fengxiangjiang = ref(false) - const fengjiguoliu = ref(false) - const guntongsheng = ref(false) - const guntongjiang = ref(false) - const guntongguoliu = ref(false) - const wendubaojing = ref(false) - //--------------warning------------ - const zuoqianmen = ref(false) - const zuohoumen = ref(false) - const youqianmen = ref(false) - const youhoumen = ref(false) - const guntongbuzaigaowei = ref(false) - const fengxiangbuzaigaowei = ref(false) - const fengxiangbuzaidiwei = ref(false) - const jiareweichuanganqi = ref(false) - const zuoqianfengxianggaowei = ref(false) - const zuohoufengxianggaowei = ref(false) - const youqianfengxianggaowei = ref(false) - const youhoufengxianggaowei = ref(false) - const zuoqianfengxiangdiwei = ref(false) - const zuohoufengxiangdiwei = ref(false) - const youqianfengxiangdiwei = ref(false) - const youhoufengxiangdiwei = ref(false) - const zuoqianguntongdiwei = ref(false) - const zuohouguntongdiwei = ref(false) - const youqianguntongdiwei = ref(false) - const youhouguntongdiwei = ref(false) - - + const faultList = ref([]) + var chart1: echarts.ECharts + var chart2: echarts.ECharts + var chart3: echarts.ECharts + var chart4: echarts.ECharts // 鍔ㄦ�佽鍙栧浘鐗� function getHerbImageUrl(name: string) { return new URL(`/src/assets/images/dry/yaocai/${name}`, import.meta.url).href @@ -364,12 +312,11 @@ // 鍔ㄦ�佽鍙栧浘鐗� function getStatusImageUrl(name: string) { - if (name =='zanting') { + if (name == 'zanting') { return new URL(`/src/assets/images/dry/${name}.png`, import.meta.url).href } else { return new URL(`/src/assets/images/dry/${name}.gif`, import.meta.url).href } - } function queryEqp() { queryById({ id: router.currentRoute.value.params.id }).then((res) => { @@ -397,8 +344,145 @@ }) } - var num = eqpNum.value + function initCharts() { + let chartDom1: HTMLElement = document.getElementById('chartDom') as HTMLElement + let chartDom2: HTMLElement = document.getElementById('chartDom2') as HTMLElement + let chartDom3: HTMLElement = document.getElementById('chartDom3') as HTMLElement + let chartDom4: HTMLElement = document.getElementById('chartDom4') as HTMLElement + chart1 = echarts.init(chartDom1) + chart2 = echarts.init(chartDom2) + chart3 = echarts.init(chartDom3) + chart4 = echarts.init(chartDom4) + + const option2 = { + grid: { + left: '13%', // 宸﹁竟璺濓紝涔熷彲浠ユ槸鍏蜂綋鐨勫儚绱犲�硷紝渚嬪 50 + right: '6%', // 鍙宠竟璺� + top: '13%', // 涓婅竟璺� + bottom: '35%', // 璁剧疆涓嬭竟璺濓紝渚嬪杩欓噷璁剧疆涓�15% + }, + xAxis: { + type: 'category', + data: [], + axisLabel: { + rotate: 55, // 杩欓噷璁剧疆鏃嬭浆鐨勮搴︼紝姝e�艰〃绀洪『鏃堕拡鏃嬭浆 + interval: 0, // 寮哄埗鏄剧ず鎵�鏈夋爣绛撅紝涓嶈繘琛岄棿闅旀樉绀� + color: '#fff', // 璁剧疆X杞存爣绛惧瓧浣撻鑹� + }, + }, + yAxis: { + type: 'value', + axisLabel: { + color: '#fff', // 璁剧疆Y杞存爣绛惧瓧浣撻鑹� + }, + splitLine: { show: false }, // 涓嶆樉绀篩杞村垎鍓茬嚎锛堢綉鏍肩嚎锛� + }, + series: [ + { + data: [], + type: 'bar', + itemStyle: { + color: '#3398DB', // 鎸囧畾鏌卞瓙鐨勯鑹� + }, + }, + ], + } + const option1 = { + tooltip: { + trigger: 'item', + }, + + series: [ + { + data: [], + type: 'pie', + radius: '50%', + emphasis: { + itemStyle: { + shadowBlur: 10, + shadowOffsetX: 0, + shadowColor: 'rgba(0, 0, 0, 0.5)', + }, + }, + label: { + show: true, // 鏄剧ず鏍囩 + //position: 'outside', // 鏍囩鐨勪綅缃紝鍙互鏄� 'outside', 'inside', 'center' + //formatter: '{b}: {c} ({d}%)', // 鏍囩鍐呭鏍煎紡鍖栧嚱鏁版垨瀛楃涓叉ā鏉� + fontSize: 12, // 璁剧疆瀛椾綋澶у皬 + // fontWeight: 'bold', // 璁剧疆瀛椾綋绮楃粏 + color: '#fff', // 璁剧疆瀛椾綋棰滆壊 + }, + }, + ], + } + const option4 = { + grid: { + left: '13%', // 宸﹁竟璺濓紝涔熷彲浠ユ槸鍏蜂綋鐨勫儚绱犲�硷紝渚嬪 50 + right: '6%', // 鍙宠竟璺� + top: '13%', // 涓婅竟璺� + bottom: '35%', // 璁剧疆涓嬭竟璺濓紝渚嬪杩欓噷璁剧疆涓�15% + }, + xAxis: { + type: 'category', + data: [], + axisLabel: { + rotate: 55, // 杩欓噷璁剧疆鏃嬭浆鐨勮搴︼紝姝e�艰〃绀洪『鏃堕拡鏃嬭浆 + interval: 0, // 寮哄埗鏄剧ず鎵�鏈夋爣绛撅紝涓嶈繘琛岄棿闅旀樉绀� + color: '#fff', // 璁剧疆X杞存爣绛惧瓧浣撻鑹� + }, + }, + yAxis: { + type: 'value', + axisLabel: { + color: '#fff', // 璁剧疆Y杞存爣绛惧瓧浣撻鑹� + }, + splitLine: { show: false }, // 涓嶆樉绀篩杞村垎鍓茬嚎锛堢綉鏍肩嚎锛� + }, + series: [ + { + data: [], + type: 'bar', + itemStyle: { + color: '#3398DB', // 鎸囧畾鏌卞瓙鐨勯鑹� + }, + }, + ], + } + const option3 = { + tooltip: { + trigger: 'item', + }, + + series: [ + { + data: [], + type: 'pie', + radius: '50%', + emphasis: { + itemStyle: { + shadowBlur: 10, + shadowOffsetX: 0, + shadowColor: 'rgba(0, 0, 0, 0.5)', + }, + }, + label: { + show: true, // 鏄剧ず鏍囩 + //position: 'outside', // 鏍囩鐨勪綅缃紝鍙互鏄� 'outside', 'inside', 'center' + //formatter: '{b}: {c} ({d}%)', // 鏍囩鍐呭鏍煎紡鍖栧嚱鏁版垨瀛楃涓叉ā鏉� + fontSize: 12, // 璁剧疆瀛椾綋澶у皬 + //fontWeight: 'bold', // 璁剧疆瀛椾綋绮楃粏 + color: '#fff', // 璁剧疆瀛椾綋棰滆壊 + }, + }, + ], + } + + option1 && chart1.setOption(option1) + option2 && chart2.setOption(option2) + option3 && chart3.setOption(option3) + option4 && chart4.setOption(option4) + } var shangliaoFlag = false var statusGif = 'tmrefeng2' @@ -421,7 +505,12 @@ }, 7000) }, 15000) } - + function back() { + router.back() + } + /** + * 鏌ヨ瀹炴椂鏁版嵁 + */ function queryRealTime() { if (eqp.value) { eqp.value = eqps.value[eqpNum.value] @@ -432,6 +521,7 @@ defHttp.get({ url: queryRealTimeUrl, params: { tenantid: tenant.value, machineid: eqpCode } }).then((res) => { if (res && res.trendVo) { console.log(`output->re11s`, res) + var totalTime = 0 /**姘存淮鍥惧惈姘撮噺 */ res.mois = [ @@ -439,7 +529,6 @@ (res.trendVo.moisture / 100 / 1.5).toFixed(2), (res.trendVo.moisture / 100 / 3).toFixed(2), ] - /**鐘舵��/gif鍔ㄥ浘 */ if (!shangliaoFlag) { @@ -466,8 +555,8 @@ // } // if (res.state_fan == 1) { - statusGif = 'tmrefeng2' - statusTxt = '姝e湪骞茬嚗' + statusGif = 'tmrefeng2' + statusTxt = '姝e湪骞茬嚗' // } // if (res.state_roller == 4) { @@ -507,19 +596,115 @@ } else if (res.herbName == '妗戠櫧鐨�') { res.herbImage = 'sangbaipi.png' } - + res.isError = false if (res.fault) { res.isError = true res.errorMsg = res.fault - console.log("errorMsg:",res.fault) + const faults = res.fault; + console.log('errorMsg:', res.fault) + if (faults.includes('鎬ュ仠鎶ヨ')) { + shebeijiting.value = true; + } + if (faults.includes('宸﹀墠鎬ュ仠')) { + zuoqianjiting.value = true; + } + if (faults.includes('闈㈡澘鎬ュ仠')) { + mianbanjiting.value = true; + } + if (faults.includes('鍑烘枡鎬ュ仠')) { + chuliaojiting.value = true; + } + if (faults.includes('娓╁害澶辨帶')) { + wendubaojing.value = true; + } + if (faults.includes('婊氱瓛鍗�')) { + guntongsheng.value = true; + } + if (faults.includes('婊氱瓛闄�')) { + guntongjiang.value = true; + } + if (faults.includes('婊氱瓛鐢垫満杩囨祦')) { + guntongguoliu.value = true; + } + if (faults.includes('椋庣鍗�')) { + fengxiangsheng.value = true; + } + if (faults.includes('椋庣闄�')) { + fengxiangjiang.value = true; + } + if (faults.includes('椋庣椋庢満杩囨祦')) { + fengjiguoliu.value = true; + } } if (res.warning) { res.isWarning = true res.warnMsg = res.warning - console.log("warnMsg:",res.warning) + const warnings = res.warning; + console.log('warnMsg:', res.warning) + if (warnings.includes('宸﹀墠闂�')) { + zuoqianmen.value = true; + } + if (warnings.includes('鍙冲墠闂�')) { + youqianmen.value = true; + } + if (warnings.includes('宸﹀悗闂�')) { + zuohoumen.value = true; + } + if (warnings.includes('鍙冲悗闂�')) { + youhoumen.value = true; + } + if (warnings.includes('婊氱瓛涓嶅湪楂樹綅')) { + guntongbuzaigaowei.value = true; + } + if (warnings.includes('椋庣涓嶅湪浣庝綅')) { + fengxiangbuzaidiwei.value = true; + } + if (warnings.includes('椋庣涓嶅湪楂樹綅')) { + fengxiangbuzaigaowei.value = true; + } + if (warnings.includes('鍔犵儹浣嶄紶鎰熷櫒')) { + jiareweichuanganqi.value = true; + } + if (warnings.includes('宸﹀墠椋庣楂樹綅浼犳劅鍣�')) { + zuoqianfengxianggaowei.value = true; + } + if (warnings.includes('鍙冲墠椋庣楂樹綅浼犳劅鍣�')) { + youqianfengxianggaowei.value = true; + } + if (warnings.includes('宸﹀悗椋庣楂樹綅浼犳劅鍣�')) { + zuohoufengxianggaowei.value = true; + } + if (warnings.includes('鍙冲悗椋庣楂樹綅浼犳劅鍣�')) { + youhoufengxianggaowei.value = true; + } + if (warnings.includes('宸﹀墠椋庣浣庝綅浼犳劅鍣�')) { + zuoqianfengxiangdiwei.value = true; + } + if (warnings.includes('鍙冲墠椋庣浣庝綅浼犳劅鍣�')) { + youqianfengxiangdiwei.value = true; + } + if (warnings.includes('宸﹀悗椋庣浣庝綅浼犳劅鍣�')) { + zuohoufengxiangdiwei.value = true; + } + if (warnings.includes('鍙冲悗椋庣浣庝綅浼犳劅鍣�')) { + youhoufengxiangdiwei.value = true; + } + if (warnings.includes('宸﹀墠婊氱瓛浣庝綅浼犳劅鍣�')) { + zuoqianguntongdiwei.value = true; + } + if (warnings.includes('鍙冲墠婊氱瓛浣庝綅浼犳劅鍣�')) { + youqianguntongdiwei.value = true; + } + if (warnings.includes('宸﹀悗婊氱瓛浣庝綅浼犳劅鍣�')) { + zuohouguntongdiwei.value = true; + } + if (warnings.includes('鍙冲悗婊氱瓛浣庝綅浼犳劅鍣�')) { + youhouguntongdiwei.value = true; + } } + getRealFault() } else { res = { mois: [], @@ -527,30 +712,87 @@ herbImage: 'yaocai1.png', } } - var totalTime = 0 - res.totalRemain = res.remain - (res.dryTime - totalTime) > 0 ? res.remain - (res.dryTime - totalTime) : 0 + + res.totalRemain = res.remain - (res.dryTime - totalTime) > 0 ? res.remain - (res.dryTime - totalTime) : 0 // console.log(`output->res`, res.detailList[res.detailList.length-1]) realData.value = res - getRealFault() + }) } } + /** + * 鏌ヨ褰撳墠宸ュ崟鏁呴殰鏄庣粏 + */ + function getRealFault() { + return new Promise(() => { + queryByOrderId({ orderId: realData.value.code, tenantId: tenant.value }).then((res) => { + const faultStats = {} + const warningStats = {} + // 寰幆鍒楄〃锛屾牴鎹粨鏉熸椂闂村拰寮�濮嬫椂闂达紝璁$畻鏁呴殰鏃堕暱 + res.forEach((item) => { + const faultName = item.faultName + item.totalTime = new Date(item.endTime) - new Date(item.startTime) + item.totalTime = item.totalTime / 1000 - function getRealFault() { - return new Promise((resolve, reject) => { - queryByOrderId({ orderId: realData.value.code, tenantId: tenant.value }).then((res) => { - console.log(`output->res`, res) + if (item.faultType === 1) { + if (!faultStats[faultName]) { + faultStats[faultName] = { + count: 0, + totalDuration: 0, // 姣 + } + } + // 鏇存柊缁熻鏁版嵁 + faultStats[faultName].count += 1 + faultStats[faultName].totalDuration += item.totalTime + } else if (item.faultType === 2) { + if (!warningStats[faultName]) { + warningStats[faultName] = { + count: 0, + totalDuration: 0, // 姣 + } + } + // 鏇存柊缁熻鏁版嵁 + warningStats[faultName].count += 1 + warningStats[faultName].totalDuration += item.totalTime + } + }) + console.log(`output->res`, res) + faultList.value = res + const prepareFault = prepareData(faultStats) + const prepareWarning = prepareData(warningStats) + console.log('prePareFault', prepareFault) + console.log('prePareWarning', prepareWarning) + chart1.setOption({ - // 寰幆鍒楄〃锛屾牴鎹粨鏉熸椂闂村拰寮�濮嬫椂闂达紝璁$畻鏁呴殰鏃堕暱 - res.forEach((item) => { - item.totalTime = item.endTime - item.startTime - }) -}) - }) - } + series: [{ data: prepareFault.duration }], + }) + chart2.setOption({ + xAxis: { data: prepareFault.faultNames }, + series: [{ data: prepareFault.count }], + }) + chart3.setOption({ + series: [{ data: prepareWarning.duration }], + }) + chart4.setOption({ + xAxis: { data: prepareWarning.faultNames }, + series: [{ data: prepareWarning.count }], + }) + }) + }) + } + // 灏嗙粺璁℃暟鎹浆鎹负閫傚悎ECharts浣跨敤鐨勬牸寮� + function prepareData(stats) { + const faultNames = Object.keys(stats) + const durationSorted = faultNames.sort((a, b) => stats[b].totalDuration - stats[a].totalDuration) + const countSorted = faultNames.sort((a, b) => stats[b].count - stats[a].count) - + return { + faultNames: faultNames, + duration: durationSorted.map((name) => ({ name, value: stats[name].totalDuration })), + count: countSorted.map((name) => ({ name, value: stats[name].count })), + } + } var move = true function moveImage() { if (move) { @@ -566,8 +808,39 @@ } } - function back() { - router.back() + // 寮�濮嬭嚜鍔ㄦ粴鍔� + const startAutoScroll = () => { + console.log('寮�濮嬭嚜鍔ㄦ粴鍔�') + scrollInterval = setInterval(() => { + if (isScrolling.value) return + isScrolling.value = true + + const container = scrollContainer.value + + // 婊氬姩瀹瑰櫒 + container.scrollTop += 1 + // 褰撴粴鍔ㄥ埌搴曢儴鏃讹紝閲嶇疆鍒伴《閮� + if (container.scrollTop >= container.scrollHeight - container.clientHeight) { + setTimeout(() => { + container.scrollTop = 0 + isScrolling.value = false // 绔嬪嵆鍏佽涓嬩竴娆℃粴鍔ㄥ紑濮� + return + }, 2000) + } + if (container.scrollTop < container.scrollHeight - container.clientHeight) { + setTimeout(() => { + isScrolling.value = false + }, 20) // 纭繚姣忔婊氬姩闂撮殧瓒冲闀匡紝閬垮厤杩炵画瑙﹀彂 + } + }, 20) // 鎺у埗婊氬姩閫熷害锛屾暟鍊艰秺灏忔粴鍔ㄨ秺蹇� + + } + + // 鍋滄鑷姩婊氬姩 + const stopAutoScroll = () => { + if (scrollInterval) { + clearInterval(scrollInterval) + } } listAllEqp() @@ -576,6 +849,8 @@ onMounted(() => { Timer.value = setInterval(queryRealTime, 3000) Timer2.value = setInterval(moveImage, 50) + startAutoScroll() + setTimeout(initCharts, 500) }) onUnmounted(() => { @@ -583,6 +858,7 @@ clearInterval(Timer2.value) Timer.value = null Timer2.value = null + stopAutoScroll() }) </script> @@ -726,7 +1002,6 @@ .eqpStatus { width: 848px; - } .rightInfo { display: flex; @@ -738,7 +1013,7 @@ .rightTop { display: flex; - height: 440px; + height: 340px; padding-left: 10px; } .rightTwo { @@ -748,7 +1023,7 @@ .infoChart { width: 340px; - height: 300px; + height: 350px; /* background: white; */ margin-left: 10px; margin-top: 10px; @@ -842,7 +1117,7 @@ } .tempMoisChart { width: 690px; - height: 440px; + height: 340px; /* background: white; */ padding: 20px; @@ -1016,8 +1291,8 @@ justify-items: center; } .blingbling { - -webkit-animation: scaleout 1.0s infinite ease-in-out; - animation: scaleout 1.0s infinite ease-in-out; + -webkit-animation: scaleout 1s infinite ease-in-out; + animation: scaleout 1s infinite ease-in-out; } .center { display: flex; @@ -1056,23 +1331,41 @@ opacity: 0; } } - .error-div { - position: absolute; display: flex; align-items: center; - } - .error-marker { - width: 18px; height: 18px; background: red; border-radius: 50%; - } - .error-msg { - margin-left: 6px; - height: 24px; - background: gray; border-radius: 5px; font-weight: bold; color: red - } - .warn-marker { - width: 18px; height: 18px; background: orange; border-radius: 50%; - } - .warn-msg { - margin-left: 6px; - height: 24px; - background: gray; border-radius: 5px; font-weight: bold; color: orange; - } + .error-div { + position: absolute; + display: flex; + align-items: center; + } + .error-marker { + width: 18px; + height: 18px; + background: red; + border-radius: 50%; + } + .error-msg { + margin-left: 6px; + height: 24px; + background: gray; + border-radius: 5px; + font-weight: bold; + color: red; + } + .warn-marker { + width: 18px; + height: 18px; + background: orange; + border-radius: 50%; + } + .warn-msg { + margin-left: 6px; + height: 24px; + background: gray; + border-radius: 5px; + font-weight: bold; + color: orange; + } + .scroll-container { + height: 280px; /* 璁剧疆浣犳兂瑕佺殑楂樺害 */ + overflow: hidden; + } </style> diff --git a/src/views/sys/login/TokenLoginPage.vue b/src/views/sys/login/TokenLoginPage.vue index 643f862..0f5fb3f 100644 --- a/src/views/sys/login/TokenLoginPage.vue +++ b/src/views/sys/login/TokenLoginPage.vue @@ -5,7 +5,7 @@ <div class="app-loading-dots"> <span class="dot dot-spin"><i></i><i></i><i></i><i></i></span> </div> - <div class="app-loading-title">涓嵂杞﹂棿鏅鸿兘鐢熶骇绠$悊绯荤粺</div> + <div class="app-loading-title">鍏版郸涓嵂骞茬嚗浜戝钩鍙�</div> </div> </div> </template> diff --git a/src/views/system/loginmini/MiniLogin.vue b/src/views/system/loginmini/MiniLogin.vue index d68028d..ca4d646 100644 --- a/src/views/system/loginmini/MiniLogin.vue +++ b/src/views/system/loginmini/MiniLogin.vue @@ -15,10 +15,10 @@ <div v-show="type === 'login'"> <div class="aui-content"> <div class="aui-container"> - <div class="aui-form"> + <div class="aui-form" style="min-height: 570px;"> <div class="aui-image"> <div>Lanpu</div> - <div>涓嵂杞﹂棿鏅鸿兘鐢熶骇绠$悊绯荤粺</div> + <div>鍏版郸涓嵂骞茬嚗浜戝钩鍙�</div> <!-- <div class="aui-image-text">--> <!-- <img :src="adTextImg" />--> <!-- </div>--> @@ -29,9 +29,9 @@ <div class="aui-flex-box" :class="activeIndex === 'accountLogin' ? 'activeNav on' : ''" @click="loginClick('accountLogin')" >{{ t('sys.login.signInFormTitle') }} </div> - <div class="aui-flex-box" :class="activeIndex === 'phoneLogin' ? 'activeNav on' : ''" @click="loginClick('phoneLogin')" - >{{ t('sys.login.mobileSignInFormTitle') }} - </div> +<!-- <div class="aui-flex-box" :class="activeIndex === 'phoneLogin' ? 'activeNav on' : ''" @click="loginClick('phoneLogin')"--> +<!-- >{{ t('sys.login.mobileSignInFormTitle') }}--> +<!-- </div>--> </div> <div class="aui-form-box" style="height: 180px"> <a-form ref="loginRef" :model="formData" v-if="activeIndex === 'accountLogin'" @keyup.enter.native="loginHandleClick"> @@ -94,43 +94,43 @@ {{ t('sys.login.loginButton') }}</a-button > </div> - <div class="aui-flex"> - <a class="aui-linek-code aui-flex-box" @click="codeHandleClick">{{ t('sys.login.qrSignInFormTitle') }}</a> - </div> +<!-- <div class="aui-flex">--> +<!-- <a class="aui-linek-code aui-flex-box" @click="codeHandleClick">{{ t('sys.login.qrSignInFormTitle') }}</a>--> +<!-- </div>--> <div class="aui-flex"> <a class="aui-linek-code aui-flex-box" @click="registerHandleClick">{{ t('sys.login.registerButton') }}</a> </div> </div> </div> - <a-form @keyup.enter.native="loginHandleClick"> - <div class="aui-flex aui-third-text"> - <div class="aui-flex-box aui-third-border"> - <span>{{ t('sys.login.otherSignIn') }}</span> - </div> - </div> - <div class="aui-flex" :class="`${prefixCls}-sign-in-way`"> - <div class="aui-flex-box"> - <div class="aui-third-login"> - <a title="github" @click="onThirdLogin('github')"><GithubFilled /></a> - </div> - </div> - <div class="aui-flex-box"> - <div class="aui-third-login"> - <a title="浼佷笟寰俊" @click="onThirdLogin('wechat_enterprise')"><icon-font class="item-icon" type="icon-qiyeweixin3" /></a> - </div> - </div> - <div class="aui-flex-box"> - <div class="aui-third-login"> - <a title="閽夐拤" @click="onThirdLogin('dingtalk')"><DingtalkCircleFilled /></a> - </div> - </div> - <div class="aui-flex-box"> - <div class="aui-third-login"> - <a title="寰俊" @click="onThirdLogin('wechat_open')"><WechatFilled /></a> - </div> - </div> - </div> - </a-form> +<!-- <a-form @keyup.enter.native="loginHandleClick">--> +<!-- <div class="aui-flex aui-third-text">--> +<!-- <div class="aui-flex-box aui-third-border">--> +<!-- <span>{{ t('sys.login.otherSignIn') }}</span>--> +<!-- </div>--> +<!-- </div>--> +<!-- <div class="aui-flex" :class="`${prefixCls}-sign-in-way`">--> +<!-- <div class="aui-flex-box">--> +<!-- <div class="aui-third-login">--> +<!-- <a title="github" @click="onThirdLogin('github')"><GithubFilled /></a>--> +<!-- </div>--> +<!-- </div>--> +<!-- <div class="aui-flex-box">--> +<!-- <div class="aui-third-login">--> +<!-- <a title="浼佷笟寰俊" @click="onThirdLogin('wechat_enterprise')"><icon-font class="item-icon" type="icon-qiyeweixin3" /></a>--> +<!-- </div>--> +<!-- </div>--> +<!-- <div class="aui-flex-box">--> +<!-- <div class="aui-third-login">--> +<!-- <a title="閽夐拤" @click="onThirdLogin('dingtalk')"><DingtalkCircleFilled /></a>--> +<!-- </div>--> +<!-- </div>--> +<!-- <div class="aui-flex-box">--> +<!-- <div class="aui-third-login">--> +<!-- <a title="寰俊" @click="onThirdLogin('wechat_open')"><WechatFilled /></a>--> +<!-- </div>--> +<!-- </div>--> +<!-- </div>--> +<!-- </a-form>--> </div> </div> </div> diff --git a/src/views/system/tenant/tenant.api.ts b/src/views/system/tenant/tenant.api.ts index 2ac4a05..d4b1531 100644 --- a/src/views/system/tenant/tenant.api.ts +++ b/src/views/system/tenant/tenant.api.ts @@ -19,6 +19,7 @@ recycleBinPageList = '/sys/tenant/recycleBinPageList', deleteLogicDeleted = '/sys/tenant/deleteLogicDeleted', revertTenantLogic = '/sys/tenant/revertTenantLogic', + listAll = '/sys/tenant/listAll', } /** @@ -174,3 +175,8 @@ handleSuccess(); }) }; + + +export const listAllTenant = (params) => { + return defHttp.get({url: Api.listAll, params}); +} -- Gitblit v1.9.3