From 0ed65d2b6b8dbfeaeda4720964ee5fbf3f42197e Mon Sep 17 00:00:00 2001 From: baoshiwei <baoshiwei@shlanbao.cn> Date: 星期一, 04 八月 2025 16:03:54 +0800 Subject: [PATCH] feat(bigScreen): 添加大屏故障页面并更新相关路由和权限- 在 pageEnum.ts 中添加 BIG_FAULT 路径 - 在 permissionGuard.ts 中添加 BIG_FAULT_PATH 到白名单路径列表 - 更新路由配置,将 BigFault组件指向新的 BigFault-tjt.vue 文件 - 新增 BigEqp-two.vue 组件,用于展示设备分割图像 --- src/views/dry/dataDefine/DryEquipment.data.ts | 146 +- src/views/dry/bigScreen/BigEqp-two.vue | 94 + src/views/dry/bigScreen/BigEqp-tjt.vue | 2659 +++++++++++++++++++++++++++++++++++++ src/views/dry/bigScreen/BigFault-tjt.vue | 1237 +++++++++++++++++ src/enums/pageEnum.ts | 2 .env.production | 2 src/assets/images/dry/bg/tjtbg@0.5x.png | 0 src/assets/images/dry/bg/tjtbg.png | 0 src/views/dry/bigScreen/BigWorkShop-tjt.vue | 81 src/router/guard/permissionGuard.ts | 4 src/router/routes/index.ts | 2 11 files changed, 4,096 insertions(+), 131 deletions(-) diff --git a/.env.production b/.env.production index 4e0c2bf..c4add44 100644 --- a/.env.production +++ b/.env.production @@ -19,7 +19,7 @@ VITE_GLOB_API_URL=/herb #鍚庡彴鎺ュ彛鍏ㄨ矾寰勫湴鍧�(蹇呭~) -VITE_GLOB_DOMAIN_URL=http://127.0.0.1:8800/herb/ +VITE_GLOB_DOMAIN_URL=http://127.0.0.1/herb/ # 鎺ュ彛鐖惰矾寰勫墠缂� VITE_GLOB_API_URL_PREFIX= diff --git a/src/assets/images/dry/bg/tjtbg.png b/src/assets/images/dry/bg/tjtbg.png new file mode 100644 index 0000000..2769443 --- /dev/null +++ b/src/assets/images/dry/bg/tjtbg.png Binary files differ diff --git a/src/assets/images/dry/bg/tjtbg@0.5x.png b/src/assets/images/dry/bg/tjtbg@0.5x.png new file mode 100644 index 0000000..88a17e8 --- /dev/null +++ b/src/assets/images/dry/bg/tjtbg@0.5x.png Binary files differ diff --git a/src/enums/pageEnum.ts b/src/enums/pageEnum.ts index adae3bf..8469fa8 100644 --- a/src/enums/pageEnum.ts +++ b/src/enums/pageEnum.ts @@ -5,6 +5,8 @@ BIG_SCREEN = '/bigScreen', BIG_EQP = '/bigEqp', + + BIG_FAULT = '/bigFault', // basic home path BASE_HOME = '/dashboard/workshop', // error page path diff --git a/src/router/guard/permissionGuard.ts b/src/router/guard/permissionGuard.ts index d535e68..d698ec9 100644 --- a/src/router/guard/permissionGuard.ts +++ b/src/router/guard/permissionGuard.ts @@ -15,6 +15,8 @@ const BIG_SCREEN_PATH = PageEnum.BIG_SCREEN; +const BIG_FAULT_PATH = PageEnum.BIG_FAULT; + const BIG_EQP_PATH = PageEnum.BIG_EQP; //auth2鐧诲綍璺敱 const OAUTH2_LOGIN_PAGE_PATH = PageEnum.OAUTH2_LOGIN_PAGE_PATH; @@ -26,7 +28,7 @@ //update-begin---author:wangshuai ---date:20220629 for锛歔issues/I5BG1I]vue3涓嶆敮鎸乤uth2鐧诲綍------------ //update-begin---author:wangshuai ---date:20221111 for: [VUEN-2472]鍒嗕韩鍏嶇櫥褰�------------ -const whitePathList: PageEnum[] = [LOGIN_PATH, OAUTH2_LOGIN_PAGE_PATH,SYS_FILES_PATH,BIG_SCREEN_PATH, BIG_EQP_PATH]; +const whitePathList: PageEnum[] = [LOGIN_PATH, OAUTH2_LOGIN_PAGE_PATH,SYS_FILES_PATH,BIG_SCREEN_PATH, BIG_EQP_PATH, BIG_FAULT_PATH]; //update-end---author:wangshuai ---date:20221111 for: [VUEN-2472]鍒嗕韩鍏嶇櫥褰�------------ //update-end---author:wangshuai ---date:20220629 for锛歔issues/I5BG1I]vue3涓嶆敮鎸乤uth2鐧诲綍------------ diff --git a/src/router/routes/index.ts b/src/router/routes/index.ts index faef76e..853938a 100644 --- a/src/router/routes/index.ts +++ b/src/router/routes/index.ts @@ -84,7 +84,7 @@ export const BigFault: AppRouteRecordRaw = { path: '/bigFault', name: 'BigFault', - component: () => import('/@/views/dry/bigScreen/BigFault.vue'), + component: () => import('/@/views/dry/bigScreen/BigFault-tjt.vue'), meta: { title: t('big.screen.fault'), }, diff --git a/src/views/dry/bigScreen/BigEqp-tjt.vue b/src/views/dry/bigScreen/BigEqp-tjt.vue index bf99859..0dc81a2 100644 --- a/src/views/dry/bigScreen/BigEqp-tjt.vue +++ b/src/views/dry/bigScreen/BigEqp-tjt.vue @@ -3,10 +3,559 @@ <div class="eqpBox"> <div class="eqpRow"> <div class="eqpImage" :style="{ 'background-position': position + 'px' }"> - <eqp-split :num="eqpNum"></eqp-split> - <div style="width: 10px"></div> - <eqp-split :num="eqpNum2"></eqp-split> + <div class="leftEqp"> + <div style="width: 350px"> + <div class="herbInfo"> + <dv-border-box7 class="curEqp"> + <div style="display: flex"> + <div style="padding-top: 20px; padding-left: 10px" @click="back"> + <Icon style="color: powderblue" icon="ion:caret-back-sharp" :size="35" /> + </div> + <div class="eqpName" style="text-align: right" @click="changeEqp"> + <div class="mainInfo" style="font-size: 26px">{{ eqp?.name }}</div> + <div class="subhead">{{ eqp?.type }}</div> + <dv-decoration-1 style="width: 240px; height: 90px; margin-left: 20px" /> + <!-- 璁惧锛歿{ eqp.name }}</div> + <div class="eqpName">鍨嬪彿锛歿{ eqp.type }}</div> --> + </div> + </div> + </dv-border-box7> + <dv-border-box7 class="curHerb" :style="{ 'background-image': 'url(' + getHerbImageUrl(realData?.herbImage) + ')' }"> + <div class="eqpName" style="margin-left: 156px; height: 190px"> + <div class="mainInfo" style="font-size: 26px">{{ realData?.herbName }}</div> + <div class="subhead">骞茬嚗閰嶆柟</div> + </div> + <div class="formula"> + <div class="formulaItem"> + <Icon style="color: powderblue" icon="la:box" :size="38" /> + <div> + <div class="mainInfo2">{{ realData?.feed || 0 }} 绛�</div> + <div class="subhead2">鎶曟枡閲�</div> + </div> + </div> + <div class="formulaItem"> + <Icon style="color: red" icon="bx:wind" :size="35" /> + <div> + <div class="mainInfo2">{{ realData?.windTemp || 0 }} 掳C</div> + <div class="subhead2">鐑</div> + </div> + </div> + <div class="formulaItem"> + <Icon style="color: green" icon="tabler:target-arrow" :size="35" /> + <div> + <div class="mainInfo2">{{ realData?.target || 0 }} %</div> + <div class="subhead2">鐩爣</div> + </div> + </div> + </div> + <!-- <div class="eqpName">{{ realData?.herbName }}</div> + <div class="eqpName">{{ realData?.feed }} 绛�</div> --> + </dv-border-box7> + </div> + <!-- <dv-border-box7 class="infoChart" style="margin-left: 0px;"> + <div class="chartTittle">椋庢満棰戠巼</div> + <div class="outDiv" style="padding-top: 10px"> + <div id="fanFreq" style="width: 240px; height: 240px"></div> + </div> + </dv-border-box7> --> + <dv-border-box7 class="infoChart" style="margin-left: 0px"> + <div class="chartTittle">鍚按鐜�</div> + <div class="outDiv" style="padding-top: 20px"> + <div class="leftData"> + <div class="center" style="height: 50%"> + <div class="centerText"> + <div class="mainInfo3" + ><span>{{ realData?.target || 0 }}</span> % + </div> + <div class="subhead2">鐩爣鍚按鐜�</div> + </div> + </div> + <div class="center" style="height: 50%"> + <div> + <div class="mainInfo3" + ><span>{{ realData?.initial || 0 }}</span> %</div + > + <div class="subhead2">鏉ユ枡鍚按鐜�</div> + </div> + </div> + </div> + <div id="moisture" style="width: 170px; height: 170px"></div> + </div> + <div class="subhead2" style="margin-top: -37px; padding-left: 205px; font-weight: bold">瀹炴椂鍚按鐜�</div> + </dv-border-box7> + </div> + <dv-border-box7 class="leftTop"> + <div class="leftTop0"> + <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 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>--> +<!-- --> + + +<!-- <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-show="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-show="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-show="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-show="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-show="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-show="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-show="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-show="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-show="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-show="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-show="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-show="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-show="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-show="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-show="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-show="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-show="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-show="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-show="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-show="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-show="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-show="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-show="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-show="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-show="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-show="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-show="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-show="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-show="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-show="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-show="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> + <div class="outDiv"> + <div id="bellowsTemp" style="width: 230px; height: 230px"> + <Icon icon="emojione:hourglass-with-flowing-sand" :size="50" /> + </div> + </div> + </dv-border-box7> + <dv-border-box7 class="leftMid"> + <div class="chartTittle">瀹炴椂杩涘害</div> + <div id="efficiencyLine" style="width: 848px; height: 180px; margin-top: -10px"></div> + <div style="height: 10px; display: flex; width: 848px; padding: 0 60px; justify-content: space-between"> + <div style="width: 100px; height: 20px">{{ realData?.dryTime | 0 }} min</div> + <div style="width: 100px; height: 20px; text-align: right">{{ realData?.totalTime | 0 }} min</div> + </div> + <div id="progressBar" style="width: 848px; height: 80px"></div> + </dv-border-box7> + + <!-- <div class="outDiv"> + <div style="height: 100px; width: 400px"> + <Progress + :stroke-color="{ + from: '#108ee9', + to: '#87d068', + }" + :percent="realData?.percent" + status="active" + :show-info="false" + /> + <div style="padding-top: 10px; display: flex; justify-content: space-between; font-weight: bold"> + <span>骞茬嚗 52 Min</span> + <span>棰勮 120 Min</span> + </div> + </div> + </div> --> + </div> + <div class="rightInfo"> + <div class="rightTop"> + <dv-border-box7 class="tempMoisChart"> + <div :id="'moisChart'" style="width: 690px; height: 420px"></div> + </dv-border-box7> + </div> + <div class="rightTwo"> + <dv-border-box7 class="infoChart"> + <div class="chartTittle"> + 骞茬嚗鏁堢巼(kg/h) + <div class="rightLabel"> + <div class="label good">>{{ realData?.efficAvg?.toFixed(2) }} 浼� </div> + <div class="label bad"><{{ ((realData?.efficAvg|0) * 0.9)?.toFixed(2) }} 宸�</div> + </div> + </div> + <div class="outDiv" style="padding-top: 20px"> + <div class="leftData"> + <div class="center" style="height: 50%"> + <div class="centerText"> + <div class="mainInfo3" + ><span>{{ (realData?.originWeight - realData?.yield) | 0 }}</span> kg + </div> + <div class="subhead2">姘村垎钂稿彂</div> + </div> + </div> + <div class="center" style="height: 50%"> + <div> + <div class="mainInfo3">{{ realData?.dryTime | 0 }} min</div> + <div class="subhead2">骞茬嚗鐢ㄦ椂</div> + </div> + </div> + </div> + <div class="rightChart center"> + <div class="center compareBar"> + <div class="barTop">{{ realData?.efficAvg?.toFixed(2) }}</div> + <div class="barBack"> + <div class="barDiv" :style="{ height: realData?.xlsHeight }"></div> + </div> + <div style="line-height: 20px"> + 棰濆畾 + <br /> + 鏁堢巼 + </div> + </div> + <div class="center compareBar"> + <div class="barTop">{{ realData?.xiaolv?.toFixed(2) || 0 }}</div> + <div class="barBack"> + <div + class="barDiv" + :class="{ good: realData?.xlgood, bad: realData?.xlbad }" + :style="[realData?.xlrHeight && { height: realData?.xlrHeight }]" + > + </div> + </div> + <div style="line-height: 20px"> + 瀹炴椂 + <br /> + 鏁堢巼 + </div> + </div> + </div> + </div> + </dv-border-box7> + + <dv-border-box7 class="infoChart"> + <div class="chartTittle" + >钂告苯娑堣��(m鲁/kg) + <div class="rightLabel"> + <div class="label bad">>{{ realData?.steamAvg?.toFixed(2) }} 宸�</div> + <div class="label good"><{{ ((realData?.steamAvg|0) * 0.9).toFixed(2) }} 浼�</div> + </div> + </div> + <div class="outDiv" style="padding-top: 20px"> + <div class="leftData"> + <div class="center" style="height: 100%"> + <div class="centerText"> + <div class="mainInfo3" + ><span>{{ realData?.steam }}</span> m鲁 + </div> + <div class="subhead2">钂告苯鐢ㄩ噺</div> + </div> + </div> + </div> + <div class="rightChart center"> + <div class="center compareBar"> + <div class="barTop">{{ realData?.steamAvg?.toFixed(2) }}</div> + <div class="barBack"> + <div class="barDiv" :style="{ height: realData?.zqsHeight }"></div> + </div> + <div style="line-height: 20px"> + 棰濆畾 + <br /> + 娑堣�� + </div> + </div> + <div class="center compareBar"> + <div class="barTop">{{ realData?.zhengqi?.toFixed(2) || 0 }}</div> + <div class="barBack"> + <div + class="barDiv" + :class="{ good: realData?.zqgood, bad: realData?.zqbad }" + :style="[realData?.zqrHeight && { height: realData?.zqrHeight }]" + > + </div> + </div> + <div style="line-height: 20px"> + 瀹炴椂 + <br /> + 娑堣�� + </div> + </div> + </div> + </div> + </dv-border-box7> + <dv-border-box7 class="infoChart"> + <div class="chartTittle">鏁堢巼瀵规瘮</div> + <div class="outDiv" style="padding-top: 10px"> + <div id="compare" style="width: 300px; height: 250px"></div> + </div> + </dv-border-box7> + <dv-border-box7 class="infoChart"> + <div class="chartTittle"> + <div> 鐢佃兘娑堣��(kWh/kg)</div> + <div class="rightLabel"> + <div class="label bad">>{{ realData?.wattAvg?.toFixed(3) }} 宸�</div> + <div class="label good"><{{ ((realData?.wattAvg|0) * 0.9).toFixed(3) }} 浼�</div> + </div> + </div> + <div class="outDiv" style="padding-top: 20px"> + <div class="leftData"> + <div class="center" style="height: 100%"> + <div class="centerText"> + <div class="mainInfo3" + ><span>{{ realData?.watt }}</span> kWh + </div> + <div class="subhead2">鐢佃兘鐢ㄩ噺</div> + </div> + </div> + </div> + <div class="rightChart center"> + <div class="center compareBar"> + <div class="barTop">{{ realData?.wattAvg?.toFixed(3) }}</div> + <div class="barBack"> + <div class="barDiv" :style="{ height: realData?.dnsHeight }"></div> + </div> + <div style="line-height: 20px"> + 棰濆畾 + <br /> + 娑堣�� + </div> + </div> + <div class="center compareBar"> + <div class="barTop">{{ realData?.dian?.toFixed(3) || 0 }}</div> + <div class="barBack"> + <div + class="barDiv" + :class="{ good: realData?.dngood, bad: realData?.dnbad }" + :style="[realData?.dnrHeight && { height: realData?.dnrHeight }]" + ></div> + </div> + <div style="line-height: 20px"> + 瀹炴椂 + <br /> + 娑堣�� + </div> + </div> + </div> + </div> + </dv-border-box7> + </div> + </div> </div> </div> </div> @@ -15,57 +564,1644 @@ <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 } from '../api/DryEquipment.api' import { dryEquipment } from '../dataDefine/DryEquipment.data' - import EqpSplit from "/@/views/dry/bigScreen/EqpSplit.vue"; - + 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 position = ref(1) + const Timer = ref() const Timer2 = ref() - - + const marks = ref<Record<number, any>>({ + 0: '0掳C', + 1: '', + 2: '', + 3: '', + 4: '', + 5: '', + 6: '', + 7: '', + 8: '', + 9: '', + 10: '', + 11: '', + 12: '', + 13: '', + 14: '', + 15: '', + 16: '', + 17: '', + 18: '', + 19: '', + 20: '', + 21: '', + 22: '', + 23: '', + 24: '', + 25: '25掳C', + 26: '', + 27: '', + 28: '', + 29: '', + 30: '', + 31: '', + 32: '', + 33: '', + 34: '', + 35: '', + 36: '', + 37: '', + 38: '', + 39: '', + 40: '', + 41: '', + 42: '', + 43: '', + 44: '', + 45: '', + 46: '', + 47: '', + 48: '', + 49: '', + 50: '50掳C', + 51: '', + 52: '', + 53: '', + 54: '', + 55: '', + 56: '', + 57: '', + 58: '', + 59: '', + 60: '', + 61: '', + 62: '', + 63: '', + 64: '', + 65: '', + 66: '', + 67: '', + 68: '', + 69: '', + 70: '', + 71: '', + 72: '', + 73: '', + 74: '', + 75: '75掳C', + 76: '', + 77: '', + 78: '', + 79: '', + 80: '', + 81: '', + 82: '', + 83: '', + 84: '', + 85: '', + 86: '', + 87: '', + 88: '', + 89: '', + 90: '', + 91: '', + 92: '', + 93: '', + 94: '', + 95: '', + 96: '', + 97: '', + 98: '', + 99: '', + 100: '100掳C', + }) + 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 || 0) - const eqpNum2 = ref(parseInt(router.currentRoute.value.query.num) + 1 || 1) + const eqpNum = ref(router.currentRoute.value.query.num || 1) + const userStore = useUserStore() + const realData = ref({}) + const standard = ref({ + xiaolv: 220, + xlMin: 200, + zhengqi: 50, + zqMin: 45, + dian: 8, + dMin: 7.5, + }) + 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' + var moisChart: echarts.ECharts + var waterChart: echarts.ECharts + var bellowsTempChart: echarts.ECharts + // var fanFreqChart: echarts.ECharts + var progressBarChart: echarts.ECharts + var efficiencyLineChart: echarts.ECharts - 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 - } + 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' + let chartDom: HTMLElement = document.getElementById(domId) as HTMLElement + let waterDom: HTMLElement = document.getElementById('moisture') as HTMLElement + let bellowsTempDom: HTMLElement = document.getElementById('bellowsTemp') as HTMLElement + // let fanFreqDom: HTMLElement = document.getElementById('fanFreq') as HTMLElement + let progressBarDom: HTMLElement = document.getElementById('progressBar') as HTMLElement + let efficiencyLineDom: HTMLElement = document.getElementById('efficiencyLine') as HTMLElement + // let weightDom: HTMLElement = document.getElementById('weight') as HTMLElement + let compaerDom: HTMLElement = document.getElementById('compare') as HTMLElement + moisChart = echarts.init(chartDom) + waterChart = echarts.init(waterDom) + bellowsTempChart = echarts.init(bellowsTempDom) + // fanFreqChart = echarts.init(fanFreqDom) + progressBarChart = echarts.init(progressBarDom) + efficiencyLineChart = echarts.init(efficiencyLineDom) + compareChart = echarts.init(compaerDom) + + const option = { + color: ['green', 'red'], + title: { + text: '鍚按鐜�/娓╁害瓒嬪娍', + textStyle: { + color: '#fff', + fontSize: 15, + }, + }, + tooltip: { + trigger: 'axis', + }, + grid: { + left: 50, + right: 70, + top: 50, + bottom: 60, + }, + legend: { + right: 60, + textStyle: { + color: '#fff', + }, + }, + // toolbox: { + // show: true, + // feature: { + // dataZoom: { + // yAxisIndex: 'none', + // }, + // dataView: { readOnly: false }, + // magicType: { type: ['line', 'bar'] }, + // restore: {}, + // saveAsImage: {}, + // }, + // }, + xAxis: { + type: 'value', + axisLabel: { + color: '#fff', + }, + //boundaryGap: false, + // data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'], + min: 0, + max: function (value) { + if (value.max < 100) { + return 100 + } else { + return value.max + } + }, + splitLine: { + lineStyle: { + type: 'dashed', + color: ['#2b2b2b'], + }, + }, + }, + yAxis: { + type: 'value', + boundaryGap: ['10%', '10%'], + axisLabel: { + color: '#fff', + }, + splitLine: { + lineStyle: { + type: 'dashed', + color: ['#2b2b2b'], + }, + }, + // min: 0, + // max: function (value) { + // if (value.max < 100) { + // return 100 + // } else { + // return value.max + // } + // }, + }, + // yAxis: { + // type: 'value', + // axisLabel: { + // formatter: '{value} 掳C', + // }, + // }, + series: [ + { + name: '鍚按鐜�', + type: 'line', + smooth: true, + symbol: 'none', + data: [ + + ], + lineStyle: { + width: 1, + }, + markLine: { + data: [{ type: 'average', name: 'Avg' }], + }, + areaStyle: { + opacity: 0.2, + color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ + { + offset: 0, + color: 'rgb(128, 255, 165)', + }, + { + offset: 1, + color: 'rgb(1, 191, 236)', + }, + ]), + }, + }, + { + name: '娓╁害', + type: 'line', + smooth: true, + symbol: 'none', + data: [ + + ], + lineStyle: { + width: 1, + }, + areaStyle: { + opacity: 0.2, + color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ + { + offset: 0, + color: 'rgb(255, 0, 135)', + }, + { + offset: 1, + color: 'rgb(135, 0, 157)', + }, + ]), + }, + // markLine: { + // data: [ + // { type: 'average', name: 'Avg' }, + // [ + // { + // symbol: 'none', + // x: '90%', + // yAxis: 'max', + // }, + // { + // symbol: 'circle', + // label: { + // position: 'start', + // formatter: 'Max', + // }, + // type: 'max', + // name: '鏈�楂樼偣', + // }, + // ], + // ], + // }, + }, + ], + } + const waterOption = { + series: [ + { + type: 'liquidFill', + radius: '100%', + //waveAnimation: false, + amplitude: 3, + animationDuration: 5, + //animationDurationUpdate: 0, + data: [0, 0, 0], + shape: + 'path://M828.817,706.209C828.817,881.725,686.98,1024,512,1024c-174.98,0-316.817-142.275-316.817-317.791C195.183,530.74,512,0,512,0s316.817,530.74,316.817,706.209z', + outline: { + show: false, + }, + label: { + // formatter: function () { + // //console.log(`output->params`,params,mois.value) + + // return ( + // '' + + // // +'鍒濆'+(mois.value[0]*100).toFixed(2) + '%\n\n\n' + // (mois.value[1] * 100).toFixed(2) + + // '%' + // // + '\n\n\n鐩爣'+(mois.value[2]*100).toFixed(2) + '%' + // ) + // }, + fontSize: 20, + //position: ['50%',(100-mois.value[1]*100).toFixed(2) + '%'], + }, + }, + ], + } + + const bellowsOption = { + series: [ + { + type: 'gauge', + center: ['50%', '60%'], + startAngle: 215, + endAngle: -35, + min: 0, + max: 80, + splitNumber: 8, + itemStyle: { + color: '#FFAB91', + }, + progress: { + show: true, + width: 10, + }, + pointer: { + show: false, + }, + axisLine: { + lineStyle: { + width: 10, + }, + }, + axisTick: { + distance: -15, + splitNumber: 5, + length: 3, + lineStyle: { + width: 1, + color: '#999', + }, + }, + splitLine: { + distance: -18, + length: 6, + lineStyle: { + width: 2, + color: '#999', + }, + }, + axisLabel: { + distance: -13, + color: '#fff', + fontSize: 12, + }, + anchor: { + show: false, + }, + title: { + show: false, + }, + detail: { + valueAnimation: true, + width: '60%', + lineHeight: 40, + borderRadius: 8, + offsetCenter: [0, '0%'], + fontSize: 20, + fontWeight: 'bolder', + formatter: '{value}掳C', + color: 'inherit', + }, + data: [ + { + value: 0, + }, + ], + }, + { + type: 'gauge', + center: ['50%', '60%'], + startAngle: 215, + endAngle: -35, + min: 0, + max: 80, + itemStyle: { + color: '#FD7347', + }, + progress: { + show: true, + width: 3, + }, + pointer: { + show: false, + }, + axisLine: { + show: false, + }, + axisTick: { + show: false, + }, + splitLine: { + show: false, + }, + axisLabel: { + show: false, + }, + detail: { + show: false, + }, + data: [ + { + value: 0, + }, + ], + }, + ], + } + + // const fanFreqOption = { + // series: [ + // { + // type: 'gauge', + // progress: { + // show: true, + // width: 9, + // }, + // axisLine: { + // lineStyle: { + // width: 9, + // }, + // }, + // axisTick: { + // show: false, + // }, + // splitLine: { + // distance: 3, + // length: 4, + // lineStyle: { + // width: 1, + // color: '#999', + // }, + // }, + // axisLabel: { + // distance: 15, + // color: '#999', + // fontSize: 10, + // }, + // anchor: { + // show: true, + // showAbove: true, + // size: 10, + // itemStyle: { + // borderWidth: 3, + // }, + // }, + // title: { + // show: false, + // }, + // detail: { + // valueAnimation: true, + // fontSize: 20, + // offsetCenter: [0, '70%'], + // formatter: '{value}Hz', + // }, + // data: [ + // { + // value: 56, + // }, + // ], + // }, + // ], + // } + // const weightOption = { + // // title: { + // // text: 'Referer of a Website', + // // subtext: 'Fake Data', + // // left: 'center' + // // }, + // color: ['#1595EA', '#2C4D90', '#FF7F7F'], + // tooltip: { + // trigger: 'item', + // }, + // radius: [0, '85%'], + // // grid: { + // // top: 20, + // // left: 20, + // // right: 20, + // // bottom: 20, + // // }, + // // legend: { + // // orient: 'vertical', + // // left: 'left', + // // }, + // series: [ + // { + // name: '閲嶉噺鏁版嵁', + // type: 'pie', + // radius: '50%', + // data: [ + // { value: 1048, name: '鍓╀綑閲嶉噺' }, + // { value: 735, name: '鐑樺幓閲嶉噺' }, + // ], + // label: { + // show: false, + // }, + // labelLine: { + // show: false, + // }, + // emphasis: { + // itemStyle: { + // shadowBlur: 10, + // shadowOffsetX: 0, + // shadowColor: 'rgba(0, 0, 0, 0.5)', + // }, + // }, + // }, + // ], + // } + + const progressBarOption = { + // tooltip: { + // trigger: 'axis', + // axisPointer: { + // // Use axis to trigger tooltip + // type: 'shadow', // 'shadow' as default; can also be 'line' or 'shadow' + // }, + // }, + // color: [ + // '#0653F6', + // // '#1B61E7', + // '#3673D5', + // // '#4A80C8', + // '#608FB8', + // // '#719BAD', + // '#82A6A1', + // // '#8DAD9A', + // '#9CB790', + // // '#A7BE88', + // '#B3C681', + // '#CAD671', + // '#DBE165', + // ], + animation: false, // 鍏抽棴鍔ㄧ敾 + color: ['#397FD7', '#2D8CDE', '#239CE5', '#1DA4E8', '#14B2EF', '#0BC4FA', '#02D2FF', '#19EEFF', '#33FAFF', '#5EFFF8', '#60FFFE', '#64FAFF', '#70FFFF', '#7BFFFF', '#88FFFD', '#97FFFF', '#A5FFFD', '#B1FFFF', '#BFFFFF', '#CAFFFF'], + grid: { + top: '12%', + left: '20', + right: '55', + bottom: '3%', + containLabel: true, + }, + xAxis: { + min: 0, + max: 150, + show: false, + type: 'value', + axisLine: { + show: false, + }, + axisTick: { + show: false, + }, + }, + yAxis: { + show: false, + axisLine: { + show: false, + }, + axisTick: { + show: false, + }, + type: 'category', + data: ['鏃堕棿'], + }, + series: [ + // { + // name: '绗竴闃舵', + // type: 'bar', + // stack: 'total', + // label: { + // show: true, + // }, + // barWidth: 26, + // emphasis: { + // focus: 'series', + // }, + // data: [30], + // }, + // { + // name: '绗簩闃舵', + // type: 'bar', + // stack: 'total', + // label: { + // show: true, + // }, + // emphasis: { + // focus: 'series', + // }, + // data: [30], + // }, + // { + // name: 'Affiliate Ad', + // type: 'bar', + // stack: 'total', + // label: { + // show: true, + // }, + // emphasis: { + // focus: 'series', + // }, + // data: [20], + // }, + // { + // name: 'Video Ad', + // type: 'bar', + // stack: 'total', + // label: { + // show: true, + // }, + // emphasis: { + // focus: 'series', + // }, + // data: [15], + // }, + // { + // name: 'Search Engine', + // type: 'bar', + // stack: 'total', + // label: { + // show: true, + // }, + // emphasis: { + // focus: 'series', + // }, + // data: [10], + // }, + // { + // name: 'df Engine', + // type: 'bar', + // stack: 'total', + // label: { + // show: true, + // }, + // emphasis: { + // focus: 'series', + // }, + // data: [5], + // }, + // { + // name: 'df Engine', + // type: 'bar', + // stack: 'total', + // label: { + // show: true, + // }, + // emphasis: { + // focus: 'series', + // }, + // data: [5], + // }, + // { + // name: 'df Engine', + // type: 'bar', + // stack: 'total', + // label: { + // show: true, + // }, + // emphasis: { + // focus: 'series', + // }, + // data: [ + // { + // value: 35, + // itemStyle: { + // color: '#c0c0c0', + // }, + // }, + // ], + // }, + ], + } + + const efficiencyLineOption = { + title: {}, + tooltip: { + trigger: 'axis', + }, + grid: { + top: '30%', + left: '17', + right: '57', + bottom: '0%', + containLabel: true, + }, + legend: { + right: 60, + textStyle: { + color: '#fff', + }, + }, + xAxis: { + show: false, + axisLine: { + show: false, + }, + axisTick: { + show: false, + }, + type: 'value', + min: 0, + max: 150, + // data: [15, 15, 10, 7.5, 5, 2.5, 2.5, 1], + }, + yAxis: { + show: false, + axisLine: { + show: false, + }, + axisTick: { + show: false, + }, + type: 'value', + axisLabel: { + formatter: '{value} 掳C', + }, + // max: eqp.value.dryEfficiency + 3, + }, + series: [ + { + name: '骞茬嚗鏁堢巼', + type: 'line', + lineStyle: { + width: 1, + }, + // [[15,10], [15,11], [10,6], [7.5,12], [5,12], [2.5,5], [2.5,9], [1,7]] + data: [], + markPoint: { + data: [ + { type: 'max', name: 'Max' }, + { type: 'min', name: 'Min' }, + ], + }, + markLine: { + symbol: 'none', + data: [ + { + name: '棰濆畾', + yAxis: 100, + }, + ], + label: { + formatter: '{b}\n{c}', + color: '#fff', + }, + }, + // markLine: { + // data: [{ type: 'average', name: 'Avg' }], + // }, + }, + ], + } + + const compareOption = { + tooltip: { + trigger: 'axis', + }, + grid: { + top: '6%', + left: '3%', + right: '10%', + bottom: '3%', + containLabel: true, + }, + xAxis: { + show: false, + type: 'value', + }, + yAxis: { + axisLine: { + show: false, + }, + axisTick: { + show: false, + }, + type: 'category', + data: ['1#', '2#', '3#', '4#', '5#', '6#'], + }, + series: [ + { + name: '2011', + type: 'bar', + barWidth: 10, + data: [0, 0, 0, 0, 0, 0], + label: { + show: true, + position: 'right', + valueAnimation: true, + + color: '#fff', + }, + }, + ], + } + + option && moisChart.setOption(option) + waterOption && waterChart.setOption(waterOption) + bellowsOption && bellowsTempChart.setOption(bellowsOption) + // fanFreqOption && fanFreqChart.setOption(fanFreqOption) + + progressBarOption && progressBarChart.setOption(progressBarOption) + efficiencyLineOption && efficiencyLineChart.setOption(efficiencyLineOption) + compareOption && compareChart.setOption(compareOption) + } + + // 鍔ㄦ�佽鍙栧浘鐗� + function getHerbImageUrl(name: string) { + //return new URL(`/src/assets/images/dry/yaocai/${name}`, import.meta.url).href + return ""; + } + + // 鍔ㄦ�佽鍙栧浘鐗� + 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() + setTimeout(initCharts, 500) + }) + } + + function listAllEqp() { + let tenantId = getTenantId() + defHttp.get({ url: '/dry/real/queryAllEqps', params: { tenantId: tenantId,enable: 'Y' } }) + .then((result) => { + //console.log(`output->result`, result) + eqps.value = result + // result.forEach((item) => { + // eqpCodes.push(item.code) + // }) + queryRealTime() + setTimeout(initCharts, 500) + }) + .catch((err) => { + //console.log(`output->err`, err) + }) + } + + var num = eqpNum.value + + function changeEqp() { + //console.log("changeEqp::",eqps.value.length); + num++ + if (eqps.value.length > 0) { + var i = num % eqps.value.length + //eqp.value = eqps.value[i] + // console.log("777",i); + eqpNum.value = i + //console.log("888",eqp.value); + queryRealTime() + //setTimeout(initCharts, 500) + } + } + + // function queryEqpsReal() { + + // if (eqps.value.length > 0) { + // var i = num%eqps.value.length + // eqp.value = eqps[i] + // console.log("777",i); + // console.log("888",eqp.value); + // queryRealTime() + // //setTimeout(initCharts, 500) + // } + // num ++; + // } + + var shangliaoFlag = false + var statusGif = 'tmrefeng2' + var statusTxt = '姝e湪骞茬嚗' + + function chaiwangban() { + statusGif = 'chaiwangban-1' + setTimeout(shangliao, 7000) + } + function showFault () { + console.log('showFault') + router.push({ path: '/bigFault', query: { num: num } }) + } + function shangliao() { + statusGif = 'shangliao-N' + setTimeout(() => { + statusGif = 'zhuangwangban' + setTimeout(() => { + statusGif = 'guanmen1' + setTimeout(() => { + shangliaoFlag = false + }, 4000) + }, 7000) + }, 15000) + } + + 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) + // res.tempValue = [res.windTemp, 100] + //res.percent = ((res.dryTime / res.et) * 100).toFixed(2) + /**姘存淮鍥惧惈姘撮噺 */ + res.mois = [ + (res.trendVo.moisture / 100).toFixed(2), + (res.trendVo.moisture / 100 / 1.5).toFixed(2), + (res.trendVo.moisture / 100 / 3).toFixed(2), + ] + if (waterChart) { + waterChart.setOption({ + series: [ + { + data: res.mois, + label: { + formatter: function () { + return res.trendVo.moisture + '%' + }, + fontSize: 20, + }, + }, + ], + }) + } + + /**娓╁害鐜舰鍥� */ + if (bellowsTempChart) { + bellowsTempChart.setOption({ + series: [{ data: [{ value: res.trendVo.bellowsTemp }] }, { data: [{ value: res.trendVo.bellowsTemp }] }], + }) + } + /**椋庢満棰戠巼鐜舰鍥� */ + // if (fanFreqChart) { + // fanFreqChart.setOption({ + // series: [ + // { + // data: [ + // { + // value: res.trendVo.fanFrequency, + // }, + // ], + // }, + // ], + // }) + // } + /**骞茬嚗杩涘害銆佽蛋鍔夸笌闃舵鏁堢巼鍜岄樁娈垫秷鑰� */ + if (res && res.detailList) { + var progressSeries = [] + + var zhengQiXiaoHao = [] + var dianNengXiaoHao = [] + var ganZaoXiaoLv = [] + var totalTime = 0 + var beforeWeight = 0 + res.moisList = [] + beforeWeight = res.originWeight + //console.log(`output->res`, res) + res.detailList.forEach((item) => { + //console.log(`output->bef`, beforeWeight) + //console.log(`output->cur`, item.weight) + res.moisList.push([item.totalTime, item.moisture]) + // console.log(`output->totalTime,item.totalTime`, totalTime, item.totalTime) + var curDryTime = item.totalTime - totalTime + + if (curDryTime > 0) { + progressSeries.push({ + name: item.moisture, + type: 'bar', + stack: 'total', + label: { + show: true, + }, + emphasis: { + focus: 'series', + }, + data: [item.totalTime - totalTime], + }) + ganZaoXiaoLv.push([curDryTime / 2 + totalTime, (((beforeWeight - item.weight) / curDryTime) * 60).toFixed(1)]) + + totalTime = item.totalTime + } + beforeWeight = item.weight + }) + + if (res.remain) { + if (res.dryTime - totalTime > 0) { + progressSeries.push({ + name: '褰撳墠', + type: 'bar', + stack: 'total', + label: { + show: true, + }, + emphasis: { + focus: 'series', + }, + data: [ + { + value: res.dryTime - totalTime, + }, + ], + }) + } + + // ganZaoXiaoLv.push([totalTime + res.remain,eqp.value.dryEfficiency]) + // console.log(`output->res.remain`, res.remain) + // console.log(`output->res.dryTime`, res.dryTime) + // console.log(`output->totalTime`, totalTime) + // 骞茬嚗鍓╀綑鏃堕棿=宸ュ崟棰勮鍓╀綑-锛堝綋鍓嶅共鐕ユ椂闂�-鏈�鍚庝竴娆¤褰曞共鐕ユ椂闂达級 + res.totalRemain = res.remain - (res.dryTime - totalTime) > 0 ? res.remain - (res.dryTime - totalTime) : 0 + progressSeries.push({ + name: '鍓╀綑', + type: 'bar', + stack: 'total', + label: { + show: true, + }, + emphasis: { + focus: 'series', + }, + data: [ + { + value: res.remain - (res.dryTime - totalTime), + itemStyle: { + color: '#c0c0c0', + }, + }, + ], + }) + } + + /**骞茬嚗杩涘害 */ + if (progressBarChart) { + //console.log(`output->progressSeries`, progressSeries) + progressBarChart.setOption( + { + xAxis: { + max: totalTime + res.remain, + }, + series: progressSeries, + }, + { replaceMerge: ['series'] } + ) + } + + res.totalTime = totalTime + res.remain + console.log("efficAvg::",res.efficAvg); + /**骞茬嚗鏁堢巼銆佹秷鑰� */ + if (efficiencyLineChart) { + //console.log(`output->ganZaoXiaoLv`, ganZaoXiaoLv) + efficiencyLineChart.setOption({ + xAxis: { + max: totalTime + res.remain, + }, + series: [ + { + name: '骞茬嚗鏁堢巼', + data: ganZaoXiaoLv, + markLine: { + symbol: 'none', + data: [ + { + name: '棰濆畾', + yAxis: res.efficAvg|0, + }, + ], + label: { + formatter: '{b}\n{c}', + color: '#fff', + }, + }, + }, + // { data: zhengQiXiaoHao }, + // { data: dianNengXiaoHao }, + ], + }) + } + + res.moisList.push([res.dryTime, res.trendVo.moisture]) + } + + /**娓╁害瓒嬪娍 */ + if (res && res.bellowsTemp) { + Array.from(Object.entries(res.bellowsTemp)) + var arr = Object.keys(res.bellowsTemp) + var temArr = [] + arr.forEach((item) => { + temArr.push([item * 1, res.bellowsTemp[item]]) + }) + + //console.log(`output->arr` + JSON.stringify(temArr)) + res.tempArr = temArr + } + + /**骞茬嚗杩囩▼瓒嬪娍 */ + if (moisChart) { + //console.log(`output->鏇存柊chart`) + moisChart.setOption({ + series: [ + { + data: res.moisList, + markLine: { + symbol: 'none', + data: [ + { + name: '鐩爣', + yAxis: res.target, + }, + ], + label: { + formatter: '{b}\n{c}%', + color: '#fff', + }, + }, + }, + { + data: res.tempArr, + }, + ], + }) + } + + let lastTrend = res.detailList[res.detailList.length-1] + /**鏁堢巼瀵规瘮鍥� */ + if (res.originWeight - lastTrend.weight <= 0) { + res.xiaolv = 0 + } else { + res.xiaolv = ((res.originWeight - lastTrend.weight) / lastTrend.totalTime) * 60 + } + res.xiaolv = Number(res.xiaolv) + //eqp.value.dryEfficiency = Number(eqp.value.dryEfficiency) + if (res.xiaolv > res.efficAvg) { + console.log("xiaolv:",res , eqp); + res.xlgood = true + res.xlsHeight = (res.efficAvg / res.xiaolv) * 100 + '%' + res.xlrHeight = '100%' + } else if (res.xiaolv < res.efficAvg * 0.9) { + res.xlbad = true + res.xlsHeight = '100%' + res.xlrHeight = (res.xiaolv / res.efficAvg) * 100 + '%' + } else { + res.xlsHeight = '100%' + res.xlrHeight = (res.xiaolv / res.efficAvg) * 100 + '%' + } + + /** 钂告苯娑堣�� */ + if (res.originWeight - lastTrend.weight <= 0) { + res.zhengqi = 0 + } else { + res.zhengqi = lastTrend.steam / (res.originWeight - lastTrend.weight) + } + res.zhengqi = Number(res.zhengqi) + //eqp.value.steamConsumption = Number(eqp.value.steamConsumption) + // res.zhengqi = eqp.value.steamConsumption - 3 + // console.log(res); + // console.log('zhengqi:', res.zhengqi); + if (res.zhengqi > res.steamAvg) { + res.zqbad = true + res.zqsHeight = (res.steamAvg / res.zhengqi) * 100 + '%' + res.zqrHeight = '100%' + } else if (res.zhengqi < res.steamAvg * 0.9) { + res.zqgood = true + res.zqsHeight = '100%' + res.zqrHeight = (res.zhengqi / res.steamAvg) * 100 + '%' + } else { + res.zqsHeight = '100%' + res.zqrHeight = (res.zhengqi / res.steamAvg) * 100 + '%' + } + + /** 鐢佃兘娑堣�� */ + if (res.originWeight - lastTrend.weight <= 0) { + res.dian = 0 + } else { + res.dian = lastTrend.watt / (res.originWeight - lastTrend.weight) + } + // res.dian = eqp.value.powerConsumption - 1.5 + res.dian = Number(res.dian) + //eqp.value.powerConsumption = Number(eqp.value.powerConsumption) + if (res.dian > res.wattAvg) { + console.log("dian::", res.dian,res.wattAvg ) + res.dnbad = true + res.dnsHeight = (res.wattAvg / res.dian) * 100 + '%' + res.dnrHeight = '100%' + } else if (res.dian < res.wattAvg * 0.9) { + res.dngood = true + res.dnsHeight = '100%' + res.dnrHeight = (res.dian / res.wattAvg) * 100 + '%' + } else { + res.dnsHeight = '100%' + res.dnrHeight = (res.dian / res.wattAvg) * 100 + '%' + } + + //console.log('state:::fan::', res.state_fan, 'roller::', res.state_roller, 'windbox::', res.state_windbox) + //console.log('===========================') + //console.log("state:::state_windbox::", res.state_windbox); + + /**鐘舵��/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 = '骞茬嚗瀹屾垚' + } + } + + if (compareChart) { + compareChart.setOption({ + yAxis: { + data: res.compEqpNum, + }, + series: { + data: res.compEqpEffic, + }, + }) + } + + 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; + } else { + shebeijiting.value = false; + } + if (faults.includes('宸﹀墠鎬ュ仠')) { + zuoqianjiting.value = true; + } else { + zuoqianjiting.value = false; + } + if (faults.includes('闈㈡澘鎬ュ仠')) { + mianbanjiting.value = true; + } else { + mianbanjiting.value = false; + } + if (faults.includes('鍑烘枡鎬ュ仠')) { + chuliaojiting.value = true; + } else { + chuliaojiting.value = false; + } + if (faults.includes('娓╁害澶辨帶')) { + wendubaojing.value = true; + } else { + wendubaojing.value = false; + } + if (faults.includes('婊氱瓛鍗�')) { + guntongsheng.value = true; + } else { + guntongjiang.value = false; + } + if (faults.includes('婊氱瓛闄�')) { + guntongjiang.value = true; + } else { + guntongjiang.value = false; + } + if (faults.includes('婊氱瓛鐢垫満杩囨祦')) { + guntongguoliu.value = true; + } else { + guntongguoliu.value = false; + } + if (faults.includes('椋庣鍗�')) { + fengxiangsheng.value = true; + } else { + fengxiangsheng.value = false; + } + if (faults.includes('椋庣闄�')) { + fengxiangjiang.value = true; + } else { + fengxiangjiang.value = false; + } + if (faults.includes('椋庣椋庢満杩囨祦')) { + fengjiguoliu.value = true; + } else { + fengjiguoliu.value = false; + } + } + else { + shebeijiting.value = false + chuliaojiting.value = false + zuoqianjiting.value = false + mianbanjiting.value = false + fengxiangsheng.value = false + fengxiangjiang.value = false + fengjiguoliu.value = false + guntongsheng.value = false + guntongjiang.value = false + guntongguoliu.value = false + wendubaojing.value = false + } + + 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; + } else { + zuoqianmen.value = false; + } + if (warnings.includes('鍙冲墠闂�')) { + youqianmen.value = true; + } else { + youqianmen.value = false; + } + if (warnings.includes('宸﹀悗闂�')) { + zuohoumen.value = true; + } else { + zuohoumen.value = false; + } + if (warnings.includes('鍙冲悗闂�')) { + youhoumen.value = true; + } else { + youhoumen.value = false; + } + if (warnings.includes('婊氱瓛涓嶅湪楂樹綅')) { + guntongbuzaigaowei.value = true; + } else { + guntongbuzaigaowei.value = false; + } + if (warnings.includes('椋庣涓嶅湪浣庝綅')) { + fengxiangbuzaidiwei.value = true; + } else { + fengxiangbuzaidiwei.value = false; + } + if (warnings.includes('椋庣涓嶅湪楂樹綅')) { + fengxiangbuzaigaowei.value = true; + } else { + fengxiangbuzaigaowei.value = false; + } + if (warnings.includes('鍔犵儹浣嶄紶鎰熷櫒')) { + jiareweichuanganqi.value = true; + } else { + jiareweichuanganqi.value = false; + } + if (warnings.includes('宸﹀墠椋庣楂樹綅浼犳劅鍣�')) { + zuoqianfengxianggaowei.value = true; + } else { + zuoqianfengxianggaowei.value = false; + } + if (warnings.includes('鍙冲墠椋庣楂樹綅浼犳劅鍣�')) { + youqianfengxianggaowei.value = true; + } else { + youqianfengxianggaowei.value = false; + } + if (warnings.includes('宸﹀悗椋庣楂樹綅浼犳劅鍣�')) { + zuohoufengxianggaowei.value = true; + } else { + zuohoufengxianggaowei.value = false; + } + if (warnings.includes('鍙冲悗椋庣楂樹綅浼犳劅鍣�')) { + youhoufengxianggaowei.value = true; + } else { + youhoufengxianggaowei.value = false; + } + if (warnings.includes('宸﹀墠椋庣浣庝綅浼犳劅鍣�')) { + zuoqianfengxiangdiwei.value = true; + } else { + zuoqianfengxiangdiwei.value = false; + } + if (warnings.includes('鍙冲墠椋庣浣庝綅浼犳劅鍣�')) { + youqianfengxiangdiwei.value = true; + } else { + youqianfengxiangdiwei.value = false; + } + if (warnings.includes('宸﹀悗椋庣浣庝綅浼犳劅鍣�')) { + zuohoufengxiangdiwei.value = true; + } else { + zuohoufengxiangdiwei.value = false; + } + if (warnings.includes('鍙冲悗椋庣浣庝綅浼犳劅鍣�')) { + youhoufengxiangdiwei.value = true; + } else { + youhoufengxiangdiwei.value = false; + } + if (warnings.includes('宸﹀墠婊氱瓛浣庝綅浼犳劅鍣�')) { + zuoqianguntongdiwei.value = true; + } else { + zuoqianguntongdiwei.value = false; + } + if (warnings.includes('鍙冲墠婊氱瓛浣庝綅浼犳劅鍣�')) { + youqianguntongdiwei.value = true; + } else { + youqianguntongdiwei.value = false; + } + if (warnings.includes('宸﹀悗婊氱瓛浣庝綅浼犳劅鍣�')) { + zuohouguntongdiwei.value = true; + } else { + zuohouguntongdiwei.value = false; + } + if (warnings.includes('鍙冲悗婊氱瓛浣庝綅浼犳劅鍣�')) { + youhouguntongdiwei.value = true; + } else { + youhouguntongdiwei.value = false; + } + } + else { + zuoqianmen.value = false; + zuohoumen.value = false; + youqianmen.value = false; + youhoumen.value = false; + guntongbuzaigaowei.value = false; + fengxiangbuzaigaowei.value = false; + fengxiangbuzaidiwei.value = false; + jiareweichuanganqi.value = false; + zuoqianfengxianggaowei.value = false; + zuohoufengxianggaowei.value = false; + youqianfengxianggaowei.value = false; + youhoufengxianggaowei.value = false; + zuoqianfengxiangdiwei.value = false; + zuohoufengxiangdiwei.value = false; + youqianfengxiangdiwei.value = false; + youhoufengxiangdiwei.value = false; + zuoqianguntongdiwei.value = false; + zuohouguntongdiwei.value = false; + youqianguntongdiwei.value = false; + youhouguntongdiwei.value = false; + } + } else { + res = { + mois: [], + gif: 'tmrefeng2', + herbImage: 'yaocai1.png', + } + } + + // console.log(`output->res`, res.detailList[res.detailList.length-1]) + realData.value = res + }) + } + } + + 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 + } + } function back() { router.back() } + + listAllEqp() //queryEqp() // DOM鎸傝浇瀹屾垚鍚庢覆鏌撳浘琛� onMounted(() => { - + Timer.value = setInterval(queryRealTime, 3000) Timer2.value = setInterval(moveImage, 50) }) onUnmounted(() => { - + clearInterval(Timer.value) clearInterval(Timer2.value) - + Timer.value = null Timer2.value = null }) </script> @@ -91,4 +2227,473 @@ 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: 704px; + width: 850px; + 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: 79%; + border-radius: 10px; + flex-wrap: wrap; + background-position: 85px 260px; + } + .leftMid { + width: 850px; + height: 281px; + /* 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: 234px; + width: 120px; + } + .rightChart { + height: 253px; + width: 170px; + margin-top: -30px; + } + .leftTop0 { + height: 243px; + width: 848px; + display: flex; + justify-content: center; + align-content: flex-start; + flex-wrap: wrap; + } + .leftTop1 { + width: 250px; + height: 187px; + text-align: center; + display: flex; + justify-content: center; + align-items: center; + font-size: 30px; + color: #727272; + } + .leftTop2 { + width: 250px; + height: 187px; + text-align: center; + display: flex; + justify-content: center; + align-items: center; + font-size: 30px; + color: #727272; + } + .leftTop3 { + width: 340px; + height: 187px; + /* 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: 412px; + padding-left: 10px; + } + .rightTwo { + display: flex; + flex-wrap: wrap; + } + + .infoChart { + width: 340px; + height: 281px; + /* 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: 412px; + color: #727272; + } + + .curEqp { + width: 340px; + height: 159px; + + /* background: white; + border-radius: 10px; */ + } + .curHerb { + margin-top: 10px; + width: 340px; + height: 243px; + /* background: white; + border-radius: 10px; */ + + background-repeat: no-repeat; + background-size: 200px; + background-position: 0px 10px; + } + .tempMoisChart { + width: 690px; + height: 412px; + /* 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 1.5s infinite ease-in-out; + animation: scaleout 1.5s 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; + } </style> diff --git a/src/views/dry/bigScreen/BigEqp-two.vue b/src/views/dry/bigScreen/BigEqp-two.vue new file mode 100644 index 0000000..bf99859 --- /dev/null +++ b/src/views/dry/bigScreen/BigEqp-two.vue @@ -0,0 +1,94 @@ +<template> + <dv-full-screen-container> + <div class="eqpBox"> + <div class="eqpRow"> + <div class="eqpImage" :style="{ 'background-position': position + 'px' }"> + <eqp-split :num="eqpNum"></eqp-split> + <div style="width: 10px"></div> + <eqp-split :num="eqpNum2"></eqp-split> + + </div> + </div> + </div> + </dv-full-screen-container> +</template> + +<script setup lang="ts"> + import { useFullscreen } from '@vueuse/core' + import { router } from '/@/router' + import { onMounted, ref, onUnmounted } from 'vue' + + import { dryEquipment } from '../dataDefine/DryEquipment.data' + import EqpSplit from "/@/views/dry/bigScreen/EqpSplit.vue"; + + + const domRef = ref<Nullable<HTMLElement>>(null) + const { enter, toggle, exit, isFullscreen } = useFullscreen() + + const { toggle: toggleDom } = useFullscreen(domRef) + const position = ref(1) + const Timer2 = ref() + + + 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 || 0) + const eqpNum2 = ref(parseInt(router.currentRoute.value.query.num) + 1 || 1) + + + + 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 + } + } + + function back() { + router.back() + } + //queryEqp() + // DOM鎸傝浇瀹屾垚鍚庢覆鏌撳浘琛� + onMounted(() => { + + Timer2.value = setInterval(moveImage, 50) + }) + + onUnmounted(() => { + + clearInterval(Timer2.value) + + Timer2.value = null + }) +</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; + } + +</style> diff --git a/src/views/dry/bigScreen/BigFault-tjt.vue b/src/views/dry/bigScreen/BigFault-tjt.vue new file mode 100644 index 0000000..397c8c2 --- /dev/null +++ b/src/views/dry/bigScreen/BigFault-tjt.vue @@ -0,0 +1,1237 @@ +<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) + // }) + + }) + .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) + queryRealTime() + } + + 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; + } else { + shebeijiting.value = false; + } + if (faults.includes('宸﹀墠鎬ュ仠')) { + zuoqianjiting.value = true; + } else { + zuoqianjiting.value = false; + } + if (faults.includes('闈㈡澘鎬ュ仠')) { + mianbanjiting.value = true; + } else { + mianbanjiting.value = false; + } + if (faults.includes('鍑烘枡鎬ュ仠')) { + chuliaojiting.value = true; + } else { + chuliaojiting.value = false; + } + if (faults.includes('娓╁害澶辨帶')) { + wendubaojing.value = true; + } else { + wendubaojing.value = false; + } + if (faults.includes('婊氱瓛鍗�')) { + guntongsheng.value = true; + } else { + guntongjiang.value = false; + } + if (faults.includes('婊氱瓛闄�')) { + guntongjiang.value = true; + } else { + guntongjiang.value = false; + } + if (faults.includes('婊氱瓛鐢垫満杩囨祦')) { + guntongguoliu.value = true; + } else { + guntongguoliu.value = false; + } + if (faults.includes('椋庣鍗�')) { + fengxiangsheng.value = true; + } else { + fengxiangsheng.value = false; + } + if (faults.includes('椋庣闄�')) { + fengxiangjiang.value = true; + } else { + fengxiangjiang.value = false; + } + if (faults.includes('椋庣椋庢満杩囨祦')) { + fengjiguoliu.value = true; + } else { + fengjiguoliu.value = false; + } + } + else { + shebeijiting.value = false + chuliaojiting.value = false + zuoqianjiting.value = false + mianbanjiting.value = false + fengxiangsheng.value = false + fengxiangjiang.value = false + fengjiguoliu.value = false + guntongsheng.value = false + guntongjiang.value = false + guntongguoliu.value = false + wendubaojing.value = false + } + + 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; + } else { + zuoqianmen.value = false; + } + if (warnings.includes('鍙冲墠闂�')) { + youqianmen.value = true; + } else { + youqianmen.value = false; + } + if (warnings.includes('宸﹀悗闂�')) { + zuohoumen.value = true; + } else { + zuohoumen.value = false; + } + if (warnings.includes('鍙冲悗闂�')) { + youhoumen.value = true; + } else { + youhoumen.value = false; + } + if (warnings.includes('婊氱瓛涓嶅湪楂樹綅')) { + guntongbuzaigaowei.value = true; + } else { + guntongbuzaigaowei.value = false; + } + if (warnings.includes('椋庣涓嶅湪浣庝綅')) { + fengxiangbuzaidiwei.value = true; + } else { + fengxiangbuzaidiwei.value = false; + } + if (warnings.includes('椋庣涓嶅湪楂樹綅')) { + fengxiangbuzaigaowei.value = true; + } else { + fengxiangbuzaigaowei.value = false; + } + if (warnings.includes('鍔犵儹浣嶄紶鎰熷櫒')) { + jiareweichuanganqi.value = true; + } else { + jiareweichuanganqi.value = false; + } + if (warnings.includes('宸﹀墠椋庣楂樹綅浼犳劅鍣�')) { + zuoqianfengxianggaowei.value = true; + } else { + zuoqianfengxianggaowei.value = false; + } + if (warnings.includes('鍙冲墠椋庣楂樹綅浼犳劅鍣�')) { + youqianfengxianggaowei.value = true; + } else { + youqianfengxianggaowei.value = false; + } + if (warnings.includes('宸﹀悗椋庣楂樹綅浼犳劅鍣�')) { + zuohoufengxianggaowei.value = true; + } else { + zuohoufengxianggaowei.value = false; + } + if (warnings.includes('鍙冲悗椋庣楂樹綅浼犳劅鍣�')) { + youhoufengxianggaowei.value = true; + } else { + youhoufengxianggaowei.value = false; + } + if (warnings.includes('宸﹀墠椋庣浣庝綅浼犳劅鍣�')) { + zuoqianfengxiangdiwei.value = true; + } else { + zuoqianfengxiangdiwei.value = false; + } + if (warnings.includes('鍙冲墠椋庣浣庝綅浼犳劅鍣�')) { + youqianfengxiangdiwei.value = true; + } else { + youqianfengxiangdiwei.value = false; + } + if (warnings.includes('宸﹀悗椋庣浣庝綅浼犳劅鍣�')) { + zuohoufengxiangdiwei.value = true; + } else { + zuohoufengxiangdiwei.value = false; + } + if (warnings.includes('鍙冲悗椋庣浣庝綅浼犳劅鍣�')) { + youhoufengxiangdiwei.value = true; + } else { + youhoufengxiangdiwei.value = false; + } + if (warnings.includes('宸﹀墠婊氱瓛浣庝綅浼犳劅鍣�')) { + zuoqianguntongdiwei.value = true; + } else { + zuoqianguntongdiwei.value = false; + } + if (warnings.includes('鍙冲墠婊氱瓛浣庝綅浼犳劅鍣�')) { + youqianguntongdiwei.value = true; + } else { + youqianguntongdiwei.value = false; + } + if (warnings.includes('宸﹀悗婊氱瓛浣庝綅浼犳劅鍣�')) { + zuohouguntongdiwei.value = true; + } else { + zuohouguntongdiwei.value = false; + } + if (warnings.includes('鍙冲悗婊氱瓛浣庝綅浼犳劅鍣�')) { + youhouguntongdiwei.value = true; + } else { + youhouguntongdiwei.value = false; + } + } + else { + zuoqianmen.value = false; + zuohoumen.value = false; + youqianmen.value = false; + youhoumen.value = false; + guntongbuzaigaowei.value = false; + fengxiangbuzaigaowei.value = false; + fengxiangbuzaidiwei.value = false; + jiareweichuanganqi.value = false; + zuoqianfengxianggaowei.value = false; + zuohoufengxianggaowei.value = false; + youqianfengxianggaowei.value = false; + youhoufengxianggaowei.value = false; + zuoqianfengxiangdiwei.value = false; + zuohoufengxiangdiwei.value = false; + youqianfengxiangdiwei.value = false; + youhoufengxiangdiwei.value = false; + zuoqianguntongdiwei.value = false; + zuohouguntongdiwei.value = false; + youqianguntongdiwei.value = false; + youhouguntongdiwei.value = false; + } + 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: 1012px; + 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: 993px; + 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: 281px; + /* 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; + } + + + .leftTop0 { + height: 243px; + width: 1200px; + display: flex; + justify-content: center; + align-content: flex-start; + flex-wrap: wrap; + } + .leftTop1 { + width: 360px; + height: 187px; + text-align: center; + display: flex; + justify-content: center; + align-items: center; + font-size: 30px; + color: #727272; + } + + .leftTop3 { + width: 340px; + height: 187px; + /* 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: 993px; + width: 700px; + } + + .rightTop { + display: flex; + height: 318px; + padding-left: 10px; + } + .rightTwo { + display: flex; + flex-wrap: wrap; + } + + .infoChart { + width: 340px; + height: 328px; + /* 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; + } + + .tempMoisChart { + width: 690px; + height: 318px; + /* background: white; */ + + padding: 20px; + border-radius: 10px; + } + + :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; + } + + + @-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/BigWorkShop-tjt.vue b/src/views/dry/bigScreen/BigWorkShop-tjt.vue index b80dbe9..dc34a58 100644 --- a/src/views/dry/bigScreen/BigWorkShop-tjt.vue +++ b/src/views/dry/bigScreen/BigWorkShop-tjt.vue @@ -134,11 +134,11 @@ </div> <div class="up"> <div v-for="num in eqpNum" :key="num" :class="{ one: num === 1, two: num === 2, three: num === 3, four: num === 4 }"> - <div class="eqpInfoup" @click="gotoeqp(num - 1)"> + <div class="eqpInfoup" @click="gotoeqp(num - 1 + (num == 3) * 1 + (num == 4) * 2 )"> <div class="eqp-title"> <div class="herb_weight"> - <div>{{ realTime.get(eqpCodes[num - 1])?.herbName || '鏆傛棤' }}</div> - <div>{{ realTime.get(eqpCodes[num - 1])?.originWeight || 0 }} Kg</div> + <div>{{ realTime.get(eqpCodes[num - 1 + (num == 3) * 1 + (num == 4) * 2 ])?.herbName || '鏆傛棤' }}</div> + <div>{{ realTime.get(eqpCodes[num - 1 + (num == 3) * 1 + (num == 4) * 2 ])?.originWeight || 0 }} Kg</div> </div> <!-- <div class="eqp-name">{{ eqpMap.get(eqpCodes[num - 1])?.name || '棰勭暀' }}</div> --> <!-- <div class="process"> </div> --> @@ -147,7 +147,7 @@ from: '#108ee9', to: '#87d068', }" - :percent="parseFloat(realTime.get(eqpCodes[num - 1])?.percent || '0')" + :percent="parseFloat(realTime.get(eqpCodes[num - 1 + (num == 3) * 1 + (num == 4) * 2 ])?.percent || '0')" status="active" trailColor="#2b2b2b2b" :show-info="false" @@ -155,15 +155,15 @@ <div class="eqp-timer"> <div ><Icon style="color: #1850b7" icon="ic:twotone-water-drop" :size="20" /> - {{ realTime.get(eqpCodes[num - 1])?.trendVo?.moisture?.toFixed(1) || '0' }} % + {{ realTime.get(eqpCodes[num - 1 + (num == 3) * 1 + (num == 4) * 2 ])?.trendVo?.moisture?.toFixed(1) || '0' }} % </div> <div ><Icon style="color: #873853" icon="fluent:temperature-20-regular" :size="20" /> - {{ realTime.get(eqpCodes[num - 1])?.trendVo?.bellowsTemp?.toFixed(0) || '0' }} 鈩� + {{ realTime.get(eqpCodes[num - 1 + (num == 3) * 1 + (num == 4) * 2 ])?.trendVo?.bellowsTemp?.toFixed(0) || '0' }} 鈩� </div> <div ><Icon style="color: rgb(134 207 106)" icon="gg:sand-clock" :size="20" /> - {{ realTime.get(eqpCodes[num - 1])?.totalRemain || 0 }} min + {{ realTime.get(eqpCodes[num - 1 + (num == 3) * 1 + (num == 4) * 2 ])?.totalRemain || 0 }} min </div> </div> </div> @@ -177,11 +177,11 @@ <div class="weight" ><div class="herb"> - {{ showInfo(realTime.get(eqpCodes[num - 1])) }} + {{ showInfo(realTime.get(eqpCodes[num - 1 + (num == 3) * 1 + (num == 4) * 2])) }} </div></div > <div class="water"> - <div class="eqp_num">{{ num }}</div> + <div :class="{ eqp_num: 1 == 1, eqp_num_two: num === 2, eqp_num_three: num === 3, eqp_num_four: num === 4 }">{{ num + (num == 3) * 1 + (num == 4) * 2 }}</div> <!-- <div class="temp"> <div style="line-height: 28px"><Icon style="color: #1850b7" icon="ic:twotone-water-drop" :size="28" /> </div> <div class="font"> @@ -200,16 +200,16 @@ </div> <div class="down"> <div v-for="num in eqpNum2" :key="num" :class="{ two: num === 1, three: num === 2, four_down: num === 3 }"> - <div class="eqpInfodown" @click="gotoeqp(num + 3)"> + <div class="eqpInfodown" @click="gotoeqp(num - 2 * num + 3 * num)"> <!-- <div class="eqp-info-down"> <div class="herb">{{ realTime.get(eqpCodes[num + 3])?.herbName || '鏆傛棤' }}</div> </div> <div class="weight"><div class="herb">{{ realTime.get(eqpCodes[num + 3])?.originWeight || 0 }} Kg </div></div> --> <div class="weight" - ><div class="herb">{{ showInfo(realTime.get(eqpCodes[num + 3])) }}</div></div + ><div class="herb">{{ showInfo(realTime.get(eqpCodes[num - 2 * num + 3 * num])) }}</div></div > <div class="water"> - <div class="eqp_num">{{ num - 2 * num + 3 * num + 1 }}</div> + <div :class="{eqp_num:1==1, eqp_num_down_one: num === 1, eqp_num_down_two: num === 2, eqp_num_down_three: num === 3}">{{ num - 2 * num + 3 * num + 1 }}</div> <!-- <div class="temp"> <div style="line-height: 28px"> <Icon style="color: #1850b7" icon="ic:twotone-water-drop" :size="28" /> @@ -229,8 +229,8 @@ <div style="height: 40px"></div> <div class="eqp-title"> <div class="herb_weight"> - <div>{{ realTime.get(eqpCodes[num + 3])?.herbName || '鏆傛棤' }}</div> - <div>{{ realTime.get(eqpCodes[num + 3])?.originWeight || 0 }} Kg</div> + <div>{{ realTime.get(eqpCodes[num - 2 * num + 3 * num])?.herbName || '鏆傛棤' }}</div> + <div>{{ realTime.get(eqpCodes[num - 2 * num + 3 * num])?.originWeight || 0 }} Kg</div> </div> <Progress @@ -238,7 +238,7 @@ from: '#108ee9', to: '#87d068', }" - :percent="parseFloat(realTime.get(eqpCodes[num + 3])?.percent || '0')" + :percent="parseFloat(realTime.get(eqpCodes[num - 2 * num + 3 * num])?.percent || '0')" status="active" trailColor="#2b2b2b2b" :show-info="false" @@ -247,18 +247,18 @@ <div class="eqp-timer"> <div ><Icon style="color: #1850b7" icon="ic:twotone-water-drop" :size="20" /> - {{ realTime.get(eqpCodes[num + 3])?.trendVo?.moisture?.toFixed(1) || '0' }} % + {{ realTime.get(eqpCodes[num - 2 * num + 3 * num])?.trendVo?.moisture?.toFixed(1) || '0' }} % </div> <div ><Icon style="color: #873853" icon="fluent:temperature-20-regular" :size="20" /> - {{ realTime.get(eqpCodes[num + 3])?.trendVo?.bellowsTemp?.toFixed(0) || '0' }} 鈩� + {{ realTime.get(eqpCodes[num - 2 * num + 3 * num])?.trendVo?.bellowsTemp?.toFixed(0) || '0' }} 鈩� </div> <!-- <div><Icon style="color: rgb(42 154 234)" icon="mdi:clock-outline" :size="20" /> {{realTime.get(eqpCodes[num + 3])?.dryTime || 0}} min </div> --> <div ><Icon style="color: rgb(134 207 106)" icon="gg:sand-clock" :size="20" /> - {{ realTime.get(eqpCodes[num + 3])?.totalRemain || 0 }} min + {{ realTime.get(eqpCodes[num - 2 * num + 3 * num])?.totalRemain || 0 }} min </div> </div> </div> @@ -444,10 +444,10 @@ .bgImage { height: 1080px; width: 1920px; - background-image: url(/src/assets/images/dry/bg/223.png); + background-image: url(/src/assets/images/dry/bg/tjtbg@0.5x.png); background-repeat: no-repeat; background-size: 104%; - background-position: 0px 257px; + background-position: 0px 233px; } .head { @@ -493,7 +493,7 @@ justify-content: flex-start; } .down { - padding-left: 554px; + padding-left: 640px; margin-top: -760px; display: flex; @@ -518,23 +518,23 @@ } .one { - margin: 278px 10px; + margin: 282px 37px; } .two { - margin: 208px 23px; + margin: 227px -49px; } .three { - margin: 110px 158px; + margin: 118px 197px; } .four { - margin: 16px 10px; + margin: 0px -5px; } .four_down { - margin: 4px 74px; + margin: -3px 17px; } .eqp-title { @@ -604,7 +604,7 @@ .water { height: 120px; width: 110px; - margin: 58px 158px; + margin: 69px 178px; display: flex; flex-wrap: wrap; } @@ -662,17 +662,38 @@ } .eqp_num { font-weight: bold; - width: 40px; - height: 40px; + width: 35px; + height: 35px; background: #a0782e; border-radius: 50px; /* text-align: center; */ - font-size: 23px; + font-size: 18px; color: white; display: flex; justify-content: center; align-items: center; } + .eqp_num_two { + margin-left: -6px; + } + + .eqp_num_three { + margin-left: -7px; + } + + .eqp_num_four { + margin-left: -8px; + } + + .eqp_num_down_one { + margin: -16px -82px; + } + .eqp_num_down_two { + margin: -23px -61px; + } + .eqp_num_down_three { + margin: -24px -69px; + } .putincolor { color: antiquewhite; diff --git a/src/views/dry/dataDefine/DryEquipment.data.ts b/src/views/dry/dataDefine/DryEquipment.data.ts index 1e6d6bd..f8aedf6 100644 --- a/src/views/dry/dataDefine/DryEquipment.data.ts +++ b/src/views/dry/dataDefine/DryEquipment.data.ts @@ -20,26 +20,27 @@ align: 'center', dataIndex: 'type_dictText', }, - { - title: '鍒堕�犲晢', - align: 'center', - dataIndex: 'manufacturer', - }, - { - title: '璐叆鏃ユ湡', - align: 'center', - dataIndex: 'purchaseDate', - }, - { - title: '鍚敤鏃ユ湡', - align: 'center', - dataIndex: 'startDate', - }, - { - title: '瀹夎浣嶇疆', - align: 'center', - dataIndex: 'location', - }, + { + title: '璁惧IP', + align: 'center', + dataIndex: 'ip', + }, + { + title: '杞﹂棿', + align: 'center', + dataIndex: 'shopId_dictText', + }, + { + title: '鍚敤鐘舵��', + align: 'center', + dataIndex: 'enable', + customRender: ({ text }) => { + return render.renderSwitch(text, [ + { text: '鏄�', value: 'Y' }, + { text: '鍚�', value: 'N' }, + ]) + }, + }, { title: '璁惧鐘舵��', align: 'center', @@ -56,6 +57,26 @@ return options[text] || text; } }, + { + title: '鍒堕�犲晢', + align: 'center', + dataIndex: 'manufacturer', + }, + { + title: '璐叆鏃ユ湡', + align: 'center', + dataIndex: 'purchaseDate', + }, + { + title: '鍚敤鏃ユ湡', + align: 'center', + dataIndex: 'startDate', + }, + { + title: '瀹夎浣嶇疆', + align: 'center', + dataIndex: 'location', + }, { title: '鎶ュ簾鏃ユ湡', align: 'center', @@ -66,27 +87,7 @@ align: 'center', dataIndex: 'remark', }, - { - title: '璁惧IP', - align: 'center', - dataIndex: 'ip', - }, - { - title: '杞﹂棿', - align: 'center', - dataIndex: 'shopId_dictText', - }, - { - title: '鍚敤鐘舵��', - align: 'center', - dataIndex: 'enable', - customRender: ({ text }) => { - return render.renderSwitch(text, [ - { text: '鏄�', value: 'Y' }, - { text: '鍚�', value: 'N' }, - ]) - }, - }, + ] //鏌ヨ鏁版嵁 export const searchFormSchema: FormSchema[] = [ @@ -139,6 +140,37 @@ return [{ required: true, message: '璇疯緭鍏ヨ澶囧悕绉�!' }, { ...rules.duplicateCheckRule('dry_equipment', 'name', model, schema)[0] }] }, }, + { + label: '杞﹂棿id', + field: 'shopId', + component: 'JDictSelectTag', + componentProps: { + dictCode: 'dry_shop,name,id,tenant_id=' + getTenantId(), + }, + dynamicRules: ({ }) => { + return [{ required: true, message: '璇疯緭鍏ヨ溅闂磇d!' }] + }, + }, + + { + label: '璁惧绫诲瀷', + field: 'type', + component: 'JDictSelectTag', + componentProps: { + dictCode: 'dry_eqp_type,name,id,tenant_id=' + getTenantId(), + }, + dynamicRules: ({ }) => { + return [{ required: true, message: '璇疯緭鍏ヨ澶囩被鍨�!' }] + }, + }, + { + label: '璁惧IP', + field: 'ip', + component: 'Input', + dynamicRules: ({ model, schema }) => { + return [{ required: true, message: '璇风粦瀹氳澶嘔P!' }, { ...rules.duplicateCheckRule('dry_equipment', 'ip', model, schema)[0] }] + }, + }, { label: '鍒堕�犲晢', field: 'manufacturer', @@ -190,41 +222,13 @@ format: 'YYYY-MM-DD' }, }, - { - label: '璁惧IP', - field: 'ip', - component: 'Input', - dynamicRules: ({ model, schema }) => { - return [{ required: true, message: '璇风粦瀹氳澶嘔P!' }, { ...rules.duplicateCheckRule('dry_equipment', 'ip', model, schema)[0] }] - }, - }, - { - label: '璁惧绫诲瀷', - field: 'type', - component: 'JDictSelectTag', - componentProps: { - dictCode: 'dry_eqp_type,name,id,tenant_id=' + getTenantId(), - }, - dynamicRules: ({ }) => { - return [{ required: true, message: '璇疯緭鍏ヨ澶囩被鍨�!' }] - }, - }, + { label: '璁惧鎻忚堪', field: 'remark', component: 'Input', }, - { - label: '杞﹂棿id', - field: 'shopId', - component: 'JDictSelectTag', - componentProps: { - dictCode: 'dry_shop,name,id,tenant_id=' + getTenantId(), - }, - dynamicRules: ({ }) => { - return [{ required: true, message: '璇疯緭鍏ヨ溅闂磇d!' }] - }, - }, + { label: '鍚敤鐘舵��', field: 'enable', -- Gitblit v1.9.3