消毒机设备
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

180 lines
3.7 KiB

<script setup lang="ts">
import { ref, watchEffect } from 'vue'
import { syncSendCmd } from '@/apis/system'
import { useDeviceStore } from '@/stores/deviceStore'
const deviceStore = useDeviceStore()
const appEvents = ref<Record<string, any>[]>([])
watchEffect(() => {
appEvents.value = deviceStore.deviceStete.appEvents
})
const confirmClose = (item: Record<string, any>) => {
console.log('item === ', item)
const evenid = item.uuid
const params = {
className: 'AppCore',
fnName: 'appEventConfirm',
params: {
evenid,
},
}
syncSendCmd(params)
}
</script>
<template>
<div v-if="appEvents.length" class="reconnect-modal-overlay">
<div class="reconnect-modal-container">
<h2 class="reconnect-title">
错误信息:
</h2>
<ul class="recipe-list">
<li
v-for="(item, index) in appEvents"
:key="index"
>
<span v-if="item.errCheckPoints">
<span v-for="checkItem in item.errCheckPoints" :key="checkItem.ecode">
{{ checkItem.ecodeInfo }}
</span>
</span>
<span v-else>{{ item.description || item.message }}</span>
<div class="actions">
<button class="delete-button" @click.stop="confirmClose(item)">
关闭
</button>
<span class="selected-icon">
<i class="fa fa-check-circle" />
</span>
</div>
</li>
</ul>
</div>
</div>
</template>
<style lang="scss" scoped>
.reconnect-modal-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
backdrop-filter: blur(4px);
display: flex;
justify-content: center;
align-items: center;
z-index: 9999;
}
.reconnect-modal-container {
background-color: white;
border-radius: 12px;
padding: 40px;
width: 40vw;
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1);
text-align: center;
animation: fadeIn 0.3s ease-out;
.recipe-list {
list-style: none;
padding: 0;
margin: 0;
}
.recipe-list li {
display: flex;
align-items: center;
justify-content: space-between;
padding: 10px;
border-radius: 4px;
margin-bottom: 8px;
transition: all 0.2s;
cursor: pointer;
}
.recipe-list li:hover {
background-color: #f5f7fa;
}
.recipe-list li.selected {
background-color: #e6f7ff;
/* border: 1px solid #1890ff; */
/* padding: 9px; */
}
}
.reconnect-spinner {
width: 64px;
height: 64px;
border: 6px solid #f3f3f3;
border-radius: 50%;
border-top: 6px solid #3b82f6;
margin: 0 auto 24px;
animation: spin 1s linear infinite;
}
.reconnect-title {
font-size: 1.12rem;
font-weight: bold;
color: #1f2937;
margin-bottom: 12px;
}
.reconnect-message {
font-size: 16px;
color: #4b5563;
}
.actions {
display: flex;
align-items: center;
}
.view-button, .delete-button {
border: none;
padding: 4px 8px;
border-radius: 3px;
cursor: pointer;
margin-right: 5px;
transition: all 0.3s;
}
.view-button {
background-color: #e6f7ff;
color: #1890ff;
}
.view-button:hover {
background-color: #1890ff;
color: white;
}
.delete-button {
background-color: #ffe6e6;
color: #ff4d4f;
}
.delete-button:hover {
background-color: #ff4d4f;
color: white;
}
.selected-icon {
color: #1890ff;
/* margin-left: 8px; */
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
@keyframes fadeIn {
from { opacity: 0; transform: scale(0.95); }
to { opacity: 1; transform: scale(1); }
}
</style>