refactor(security-box-circuit-card): probe after turnStatus
This commit is contained in:
@@ -1,10 +1,11 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import type { NdmSecurityBoxCircuit } from '@/apis/domains';
|
import type { NdmSecurityBoxCircuit } from '@/apis/domains';
|
||||||
import type { NdmSecurityBoxResultVO } from '@/apis/models';
|
import type { NdmSecurityBoxResultVO } from '@/apis/models';
|
||||||
import { rebootSecurityBox, turnStatus } from '@/apis/requests';
|
import { probeDeviceApi, rebootSecurityBox as rebootSecurityBoxApi, turnStatus as turnStatusApi } from '@/apis/requests';
|
||||||
|
import { useMutation } from '@tanstack/vue-query';
|
||||||
import { PowerOutline, FlashOutline } from '@vicons/ionicons5';
|
import { PowerOutline, FlashOutline } from '@vicons/ionicons5';
|
||||||
import { NCard, NGrid, NGridItem, NPopover, NSwitch, NIcon, NFlex, NPopconfirm, NButton } from 'naive-ui';
|
import { NCard, NGrid, NGridItem, NPopover, NSwitch, NIcon, NFlex, NPopconfirm, NButton } from 'naive-ui';
|
||||||
import { computed, toRefs } from 'vue';
|
import { ref, toRefs, watch } from 'vue';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 安防箱电路状态卡片组件
|
* 安防箱电路状态卡片组件
|
||||||
@@ -24,18 +25,18 @@ const props = defineProps<{
|
|||||||
|
|
||||||
const { stationCode, ndmSecurityBox, circuits } = toRefs(props);
|
const { stationCode, ndmSecurityBox, circuits } = toRefs(props);
|
||||||
|
|
||||||
const validCircuits = computed(() => {
|
const localCircuits = ref<NdmSecurityBoxCircuit[]>([]);
|
||||||
if (!circuits.value || circuits.value.length === 0) {
|
|
||||||
return [];
|
watch(
|
||||||
}
|
circuits,
|
||||||
return circuits.value;
|
(newValue) => {
|
||||||
});
|
localCircuits.value = newValue?.map((circuit) => ({ ...circuit })) ?? [];
|
||||||
|
},
|
||||||
|
{
|
||||||
|
immediate: true,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取电路状态样式类
|
|
||||||
* @param circuit 电路信息
|
|
||||||
* @returns CSS类名
|
|
||||||
*/
|
|
||||||
const getCircuitStatusClass = (circuit: NdmSecurityBoxCircuit) => {
|
const getCircuitStatusClass = (circuit: NdmSecurityBoxCircuit) => {
|
||||||
if (circuit.status === 1) {
|
if (circuit.status === 1) {
|
||||||
return 'circuit-on';
|
return 'circuit-on';
|
||||||
@@ -44,12 +45,6 @@ const getCircuitStatusClass = (circuit: NdmSecurityBoxCircuit) => {
|
|||||||
}
|
}
|
||||||
return 'circuit-unknown';
|
return 'circuit-unknown';
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取电路状态文本
|
|
||||||
* @param circuit 电路信息
|
|
||||||
* @returns 状态文本
|
|
||||||
*/
|
|
||||||
const getCircuitStatusText = (circuit: NdmSecurityBoxCircuit) => {
|
const getCircuitStatusText = (circuit: NdmSecurityBoxCircuit) => {
|
||||||
if (circuit.status === 1) {
|
if (circuit.status === 1) {
|
||||||
return '开启';
|
return '开启';
|
||||||
@@ -59,58 +54,65 @@ const getCircuitStatusText = (circuit: NdmSecurityBoxCircuit) => {
|
|||||||
return '未知';
|
return '未知';
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
const { mutate: turnStatus, isPending: turning } = useMutation({
|
||||||
* 处理电路开关切换
|
mutationFn: async (params: { circuitIndex: number; newStatus: boolean }) => {
|
||||||
* @param circuitIndex 电路索引
|
const { circuitIndex, newStatus } = params;
|
||||||
* @param newStatus 新状态
|
if (!ndmSecurityBox.value.ipAddress) {
|
||||||
*/
|
throw new Error('设备IP地址不存在');
|
||||||
const handleCircuitToggle = async (circuitIndex: number, newStatus: boolean) => {
|
}
|
||||||
if (!ndmSecurityBox.value.ipAddress) {
|
|
||||||
window.$message.error('设备IP地址不存在');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
const status = newStatus ? 1 : 0;
|
const status = newStatus ? 1 : 0;
|
||||||
await turnStatus(stationCode.value, ndmSecurityBox.value.ipAddress, circuitIndex, status);
|
await turnStatusApi(stationCode.value, ndmSecurityBox.value.ipAddress, circuitIndex, status);
|
||||||
window.$message.success(`电路${circuitIndex + 1}${newStatus ? '开启' : '关闭'}成功 下次更新诊断数据时将刷新状态`);
|
await probeDeviceApi(stationCode.value, ndmSecurityBox.value);
|
||||||
} catch (error) {
|
return status;
|
||||||
window.$message.error(`电路${circuitIndex + 1}操作失败`);
|
},
|
||||||
console.error('电路开关操作失败:', error);
|
onSuccess: (status, params) => {
|
||||||
}
|
if (localCircuits.value) {
|
||||||
};
|
const circuit = localCircuits.value.at(params.circuitIndex);
|
||||||
|
if (circuit) {
|
||||||
|
circuit.status = status;
|
||||||
|
localCircuits.value.splice(params.circuitIndex, 1, circuit);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onError: (error) => {
|
||||||
|
console.error(error);
|
||||||
|
window.$message.error(error.message);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
const onClickReboot = async () => {
|
const { mutate: rebootSecurityBox, isPending: rebooting } = useMutation({
|
||||||
if (!ndmSecurityBox.value.ipAddress) {
|
mutationFn: async () => {
|
||||||
window.$message.error('设备IP地址不存在');
|
if (!ndmSecurityBox.value.ipAddress) {
|
||||||
return;
|
throw new Error('设备IP地址不存在');
|
||||||
}
|
}
|
||||||
try {
|
await rebootSecurityBoxApi(stationCode.value, ndmSecurityBox.value.ipAddress);
|
||||||
await rebootSecurityBox(stationCode.value, ndmSecurityBox.value.ipAddress);
|
},
|
||||||
|
onSuccess: () => {
|
||||||
window.$message.success('设备重启成功');
|
window.$message.success('设备重启成功');
|
||||||
} catch (error) {
|
},
|
||||||
window.$message.error('设备重启失败');
|
onError: (error) => {
|
||||||
console.error('设备重启失败:', error);
|
console.error(error);
|
||||||
}
|
window.$message.error(error.message);
|
||||||
};
|
},
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<NCard v-if="validCircuits.length > 0" size="small" hoverable>
|
<NCard v-if="localCircuits.length > 0" size="small" hoverable>
|
||||||
<template #header>
|
<template #header>
|
||||||
<NFlex :align="'center'">
|
<NFlex :align="'center'">
|
||||||
<div>电路状态</div>
|
<div>电路状态</div>
|
||||||
<NPopconfirm :positive-text="'确认'" :negative-text="'取消'" @positive-click="onClickReboot">
|
<NPopconfirm :positive-text="'确认'" :negative-text="'取消'" @positive-click="() => rebootSecurityBox()">
|
||||||
<template #trigger>
|
<template #trigger>
|
||||||
<NButton secondary size="small">重合闸</NButton>
|
<NButton secondary size="small" :loading="rebooting">重合闸</NButton>
|
||||||
</template>
|
</template>
|
||||||
确定要执行重合闸操作吗?此操作将重启安防箱设备。
|
确定要执行重合闸操作吗?此操作将重启安防箱设备。
|
||||||
</NPopconfirm>
|
</NPopconfirm>
|
||||||
</NFlex>
|
</NFlex>
|
||||||
</template>
|
</template>
|
||||||
<div class="circuit-layout">
|
<div class="circuit-layout">
|
||||||
<NGrid :cols="Math.min(validCircuits.length, 4)" :x-gap="12" :y-gap="12" class="circuit-grid">
|
<NGrid :cols="Math.min(localCircuits.length, 4)" :x-gap="12" :y-gap="12" class="circuit-grid">
|
||||||
<NGridItem v-for="(circuit, index) in validCircuits" :key="index">
|
<NGridItem v-for="(circuit, index) in localCircuits" :key="index">
|
||||||
<!-- 电路信息弹窗 -->
|
<!-- 电路信息弹窗 -->
|
||||||
<NPopover trigger="hover" placement="top">
|
<NPopover trigger="hover" placement="top">
|
||||||
<template #trigger>
|
<template #trigger>
|
||||||
@@ -126,9 +128,9 @@ const onClickReboot = async () => {
|
|||||||
<span class="status-text">{{ getCircuitStatusText(circuit) }}</span>
|
<span class="status-text">{{ getCircuitStatusText(circuit) }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="circuit-control">
|
<div class="circuit-control">
|
||||||
<NPopconfirm :positive-text="'确认'" :negative-text="'取消'" @positive-click="() => handleCircuitToggle(index, circuit.status !== 1)">
|
<NPopconfirm :positive-text="'确认'" :negative-text="'取消'" @positive-click="() => turnStatus({ circuitIndex: index, newStatus: circuit.status !== 1 })">
|
||||||
<template #trigger>
|
<template #trigger>
|
||||||
<NSwitch :value="circuit.status === 1" size="small" />
|
<NSwitch :value="circuit.status === 1" size="small" :loading="turning" />
|
||||||
</template>
|
</template>
|
||||||
确定要{{ circuit.status === 1 ? '关闭' : '开启' }}电路{{ index + 1 }}吗?
|
确定要{{ circuit.status === 1 ? '关闭' : '开启' }}电路{{ index + 1 }}吗?
|
||||||
</NPopconfirm>
|
</NPopconfirm>
|
||||||
|
|||||||
Reference in New Issue
Block a user