|
|
@ -1,6 +1,6 @@ |
|
|
|
<template> |
|
|
|
<div class="app-container row-container"> |
|
|
|
<div class="container-wrap"> |
|
|
|
<div class="container-wrap" style="height: calc(100vh - 200px);"> |
|
|
|
<span class="right-top-line" /> |
|
|
|
<span class="left-bottom-line" /> |
|
|
|
<el-form ref="form" :rules="rules" :model="form" size="small" label-width="120px"> |
|
|
@ -55,7 +55,21 @@ |
|
|
|
<el-dialog class="tip-dialog tip-middle-dialog" title="AI处理终端连接测试" :close-on-click-modal="false" :modal-append-to-body="false" append-to-body :visible.sync="serviceContentDialogVisible" :before-close="handleClose"> |
|
|
|
<div class="setting-dialog service-all"> |
|
|
|
<div class="service-top-text"><i class="iconfont icon-zhongduanjiankong" />终端连接正常</div> |
|
|
|
<!-- <ul> |
|
|
|
<li v-for="(item, index) in serviceItems" :key="index" :style="{animationDelay: index * 300 + 'ms'}"> |
|
|
|
<p :class="item.status === 'running'? 'true-active' : 'false-active' ">{{ item.serviceName }}</p> |
|
|
|
<i v-if="item.status === 'running'" class="iconfont icon-shi" /> |
|
|
|
<i v-else class="iconfont icon-cuowu1" /> |
|
|
|
</li> |
|
|
|
</ul> --> |
|
|
|
<ul> |
|
|
|
<li v-for="(item, index) in serviceItems" :key="index"> |
|
|
|
<p :class="index <= currentIndex && item.status === 'running'? 'true-active' : 'false-active' ">{{ item.serviceName }}</p> |
|
|
|
<i v-if="index <= currentIndex && item.status === 'running'" class="iconfont icon-shi" /> |
|
|
|
<i v-else-if="index <= currentIndex" class="iconfont icon-cuowu1" /> |
|
|
|
</li> |
|
|
|
</ul> |
|
|
|
<!-- <ul> |
|
|
|
<li> |
|
|
|
<p :class="service.service_imgCamera.status === 'running' ? 'true-active' : 'false-active' ">图像采集</p> |
|
|
|
<i v-if="service.service_imgCamera.status === 'running'" class="iconfont icon-shi" /> |
|
|
@ -81,9 +95,9 @@ |
|
|
|
<i v-if="service.service_imgResult.status === 'running'" class="iconfont icon-shi" /> |
|
|
|
<i v-else class="iconfont icon-cuowu1" /> |
|
|
|
</li> |
|
|
|
</ul> |
|
|
|
<div v-if="isAllServicesRunning" class="service-bottom-text" style="color: rgb(18, 196, 122);">所有服务均正常运行,请放心使用</div> |
|
|
|
<div v-else class="service-bottom-text" style="color: #ED4A41;">请尽快联系系统维护人员进行恢复</div> |
|
|
|
</ul> --> |
|
|
|
<div v-if="servicesDisplayed && isAllServicesRunning" class="service-bottom-text" :class="{ 'fade-in': servicesDisplayed && isAllServicesRunning }" style="color: rgb(18, 196, 122);">所有服务均正常运行,请放心使用</div> |
|
|
|
<div v-else-if="servicesDisplayed && !isAllServicesRunning" class="service-bottom-text" :class="{ 'fade-in': servicesDisplayed &&!isAllServicesRunning }" style="color: #ED4A41;">请尽快联系系统维护人员进行恢复</div> |
|
|
|
</div> |
|
|
|
</el-dialog> |
|
|
|
</div> |
|
|
@ -151,7 +165,11 @@ export default { |
|
|
|
'service_imgYolo': { 'last_heartbeat': 1736496961.953832, 'status': '' }, |
|
|
|
'service_imgOcr': { 'last_heartbeat': 1736496961.6238313, 'status': '' }, |
|
|
|
'service_imgResult': { 'last_heartbeat': 1736496963.4378026, 'status': '' } |
|
|
|
} |
|
|
|
}, |
|
|
|
serviceItems: [], |
|
|
|
currentIndex: -1, |
|
|
|
timer: null, |
|
|
|
servicesDisplayed: false |
|
|
|
} |
|
|
|
}, |
|
|
|
computed: { |
|
|
@ -170,8 +188,14 @@ export default { |
|
|
|
}).catch(() => { |
|
|
|
}) |
|
|
|
}, |
|
|
|
beforeDestroy() { |
|
|
|
if (this.timer) { |
|
|
|
clearInterval(this.timer) |
|
|
|
} |
|
|
|
}, |
|
|
|
methods: { |
|
|
|
handleService() { |
|
|
|
this.servicesDisplayed = false |
|
|
|
FetchAITerminalStatusQuery({ 'ip': this.crud.form.ip }).then(res => { |
|
|
|
// { |
|
|
|
// "service_imgCamera":{"last_heartbeat":1736496962.2368362,"status":"running"}, |
|
|
@ -181,14 +205,65 @@ export default { |
|
|
|
// "service_imgResult":{"last_heartbeat":1736496963.4378026,"status":"running"}, |
|
|
|
// } |
|
|
|
if (res) { |
|
|
|
this.service = JSON.parse(res) |
|
|
|
this.serviceContentDialogVisible = true |
|
|
|
this.service = JSON.parse(res) |
|
|
|
this.serviceItems = [] |
|
|
|
const keysOrder = ['service_imgCamera', 'service_imgProcess', 'service_imgYolo', 'service_imgOcr', 'service_imgResult'] |
|
|
|
keysOrder.forEach(key => { |
|
|
|
let serviceName = '' |
|
|
|
switch (key) { |
|
|
|
case 'service_imgCamera': |
|
|
|
serviceName = '图像采集' |
|
|
|
break |
|
|
|
case 'service_imgProcess': |
|
|
|
serviceName = '图像处理' |
|
|
|
break |
|
|
|
case 'service_imgYolo': |
|
|
|
serviceName = '图像识别' |
|
|
|
break |
|
|
|
case 'service_imgOcr': |
|
|
|
serviceName = '文字识别' |
|
|
|
break |
|
|
|
case 'service_imgResult': |
|
|
|
serviceName = '同步服务' |
|
|
|
break |
|
|
|
} |
|
|
|
this.serviceItems.push({ |
|
|
|
serviceName: serviceName, |
|
|
|
status: this.service[key].status |
|
|
|
}) |
|
|
|
}) |
|
|
|
this.showServicesSequentially() |
|
|
|
} else { |
|
|
|
this.serviceDialogVisible = true |
|
|
|
} |
|
|
|
}).catch(() => { |
|
|
|
}) |
|
|
|
}, |
|
|
|
showServicesSequentially() { |
|
|
|
// let delay = 0 |
|
|
|
// this.serviceItems.forEach((item, index) => { |
|
|
|
// setTimeout(() => { |
|
|
|
// this.$set(this.serviceItems, index, { |
|
|
|
// ...item, |
|
|
|
// opacity: 1 |
|
|
|
// }) |
|
|
|
// }, delay) |
|
|
|
// delay += 300 |
|
|
|
// }) |
|
|
|
let index = 0 |
|
|
|
const interval = 300 |
|
|
|
this.timer = setInterval(() => { |
|
|
|
this.currentIndex = index |
|
|
|
index++ |
|
|
|
if (index >= this.serviceItems.length) { |
|
|
|
clearInterval(this.timer) |
|
|
|
setTimeout(() => { |
|
|
|
this.servicesDisplayed = true |
|
|
|
}, 500) |
|
|
|
} |
|
|
|
}, interval) |
|
|
|
}, |
|
|
|
[CRUD.HOOK.beforeToCU](crud, form, btn) { |
|
|
|
if (this.showVerifyDialog) { |
|
|
|
// 打开输入验证码对话框 |
|
|
@ -351,4 +426,27 @@ export default { |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
.fade-enter-active, |
|
|
|
.fade-leave-active { |
|
|
|
transition: all 0.5s ease; |
|
|
|
} |
|
|
|
.fade-enter, |
|
|
|
.fade-leave-to { |
|
|
|
opacity: 0; |
|
|
|
transform: translateY(20px); |
|
|
|
} |
|
|
|
.fade-in { |
|
|
|
animation: fadeIn 0.5s ease; |
|
|
|
} |
|
|
|
@keyframes fadeIn { |
|
|
|
from { |
|
|
|
opacity: 0; |
|
|
|
transform: translateY(20px); |
|
|
|
} |
|
|
|
to { |
|
|
|
opacity: 1; |
|
|
|
transform: translateY(0); |
|
|
|
} |
|
|
|
} |
|
|
|
</style> |