<script setup>
|
import { ref, onMounted, computed } from "vue";
|
import ycCard from "@/components/ycCard.vue";
|
import ytjRtInfo from "./ytjRtInfo.vue";
|
import bar from "@/components/echarts/bar2.vue";
|
import iconPower from "@/components/icons/iconPower.vue";
|
import useDevsRt from "@/hooks/useDevsRt.js";
|
import useWebSocket from "@/hooks/useWebSocket";
|
import { getA200Param } from "./api";
|
import useElement from "@/hooks/useElement.js";
|
import formatMinutes from "@/assets/js/tools/formatMinutes.js";
|
import getPowerByUI from "@/assets/js/tools/getPowerByUI.js";
|
import formatSeconds from "@/assets/js/tools/formatSeconds";
|
import { useRouter, useRoute } from "vue-router";
|
|
const { $alert, $loading, $message, $confirm } = useElement();
|
const { sendData, message } = useWebSocket("rtstateSocket");
|
const router = useRouter();
|
|
const props = defineProps({
|
devId: {
|
type: [Number, String],
|
required: true,
|
},
|
});
|
|
const params = ref({});
|
|
const rtDatas = computed(() => {
|
if (message.value) {
|
const {
|
code,
|
data2: {
|
rtdataState: { data2: monStates },
|
resA200State,
|
event: { data2: eventList },
|
},
|
} = JSON.parse(message.value);
|
|
let devStates = resA200State?.data2 || {};
|
|
return { monStates, devStates, eventList };
|
} else {
|
return { monStates: [], devStates: {}, eventList: [] };
|
}
|
});
|
|
function getParam() {
|
// let loading = $loading();
|
let param = props.devId;
|
getA200Param(param)
|
.then((res) => {
|
let { code, data } = res.data;
|
// loading.close();
|
if (200 == code) {
|
// $message.success("读取成功");
|
params.value = data;
|
}
|
})
|
.catch((err) => {
|
// $message.error(err);
|
// loading.close();
|
console.log(err);
|
});
|
}
|
|
function goBack() {
|
router.push({
|
path: "/test-batch",
|
query: {
|
devType: 1,
|
},
|
});
|
}
|
|
onMounted(() => {
|
getParam();
|
sendData(JSON.stringify({ devId: props.devId, devType: 1 }));
|
});
|
</script>
|
|
<template>
|
<div class="page">
|
<yc-card class="batt-info" title="电池信息">
|
<div class="card-content">
|
<div class="label">pack/模组号</div>
|
<div class="value">{{ params.batteryName }}</div>
|
<div class="label">电池类型</div>
|
<div class="value">
|
{{ ["磷酸铁锂", "三元锂", "钛酸锂", "锰酸锂"][params.batteryType] }}
|
</div>
|
<div class="label">标称容量</div>
|
<div class="value">{{ params.nominalCapacity }}AH</div>
|
<div class="label">电芯串数</div>
|
<div class="value">{{ params.batteryNumber }}</div>
|
<div class="label">电芯压差</div>
|
<div class="value">{{ params.diffBatteryVoltage }}mV</div>
|
</div>
|
</yc-card>
|
<yc-card class="params" title="测试参数">
|
<div class="card-content">
|
<template v-if="1 == params.testType">
|
<div class="label">放电电流</div>
|
<div class="value">{{ params.dischargeCurrent }}A</div>
|
<div class="label">放电时间</div>
|
<div class="value">{{ formatMinutes(params.dischargeTime) }}</div>
|
<div class="label">组端下限</div>
|
<div class="value">{{ params.dischargeVoltage }}V</div>
|
<div class="label">预放容量限制</div>
|
<div class="value">
|
{{ ["关闭", "开启"][params.isDischargeCapacityEnable] }}
|
</div>
|
<div class="label">预放容量</div>
|
<div class="value">{{ params.dischargeCapacity }}AH</div>
|
<div class="label">单串下限限制</div>
|
<div class="value">
|
{{ ["关闭", "开启"][params.isMinBatteryVoltageEnable] }}
|
</div>
|
<div class="label">单串下限</div>
|
<div class="value">{{ params.minBatteryVoltage }}V</div>
|
</template>
|
<template v-else>
|
<div class="label">充电限压</div>
|
<div class="value">{{ params.chargeVoltage }}V</div>
|
<div class="label">充电保护</div>
|
<div class="value">{{ params.chargeProtectVoltage }}V</div>
|
<div class="label">充电限流</div>
|
<div class="value">{{ params.chargeCurrent }}A</div>
|
<div class="label">电流阀值</div>
|
<div class="value">{{ params.chargeStopCurrent }}A</div>
|
<div class="label">充电时间</div>
|
<div class="value">{{ formatMinutes(params.chargeTime) }}</div>
|
<div class="label">预充容量限制</div>
|
<div class="value">
|
{{ ["关闭", "开启"][params.isChargeCapacityEnable] }}
|
</div>
|
<div class="label">预充容量</div>
|
<div class="value">{{ params.chargeCapacity }}AH</div>
|
<div class="label">单串上限限制</div>
|
<div class="value">
|
{{ ["关闭", "开启"][params.isMaxBatteryVoltageEnable] }}
|
</div>
|
<div class="label">单串上限</div>
|
<div class="value">{{ params.maxBatteryVoltage }}V</div>
|
</template>
|
</div>
|
</yc-card>
|
<yc-card class="p-header" title="测试信息">
|
<template #tools>
|
<div class="btn-start" @click="goBack">返回</div>
|
</template>
|
<div class="card-content">
|
<div class="label">电池状态</div>
|
<div class="value">
|
{{ ["--", "放电测试", "充电测试"][rtDatas.devStates.testType] }}
|
</div>
|
<div class="label">在线电压</div>
|
<div class="value">{{ rtDatas.devStates.storageVoltage }}V</div>
|
<div class="label">在线电流</div>
|
<div class="value">{{ rtDatas.devStates.testCurrent }}A</div>
|
<div class="label">测试功率</div>
|
<div class="value">
|
{{
|
getPowerByUI(
|
rtDatas.devStates.storageVoltage,
|
rtDatas.devStates.testCurrent
|
)
|
}}KW
|
</div>
|
<div class="label">测试时长</div>
|
<div class="value">
|
{{ formatSeconds(rtDatas.devStates.testDuration) }}
|
</div>
|
<div class="label">测试容量</div>
|
<div class="value">{{ rtDatas.devStates.testCapacity }}AH</div>
|
</div>
|
</yc-card>
|
<ytj-rt-info class="p-content" :devId="devId"></ytj-rt-info>
|
</div>
|
</template>
|
|
<style scoped lang="less">
|
.page {
|
height: 100%;
|
padding: 8px;
|
display: grid;
|
grid-template-rows: 180px 160px 1fr;
|
grid-template-columns: 340px 1fr;
|
gap: 12px;
|
grid-auto-flow: column;
|
color: #0ff;
|
|
.label {
|
&::after {
|
content: ":";
|
}
|
}
|
.batt-info {
|
grid-row: 1 e("/") 3;
|
}
|
.params,
|
.batt-info {
|
.card-content {
|
height: 100%;
|
padding: 20px 6px 0;
|
display: grid;
|
grid-template-columns: 8em 1fr;
|
// grid-template-rows: 1fr 1fr;
|
place-content: start center;
|
place-items: center start;
|
gap: 8px;
|
.label {
|
place-self: end;
|
}
|
}
|
}
|
|
.p-header {
|
.btn-start {
|
cursor: pointer;
|
padding: 2px 12px;
|
border-radius: 6px;
|
background: #0ff;
|
color: #333;
|
font-size: 12px;
|
}
|
.card-content {
|
height: 100%;
|
padding: 20px;
|
display: grid;
|
grid-template-columns: repeat(3, 6em 1fr);
|
grid-template-rows: 1fr 1fr;
|
place-items: center start;
|
font-size: 18px;
|
color: #0ff;
|
gap: 8px;
|
.label {
|
justify-self: end;
|
&::after {
|
content: ":";
|
}
|
}
|
}
|
}
|
.p-content {
|
grid-row: 2 e("/") 4;
|
}
|
}
|
</style>
|