<script setup>
|
import { ref, reactive, onMounted } from "vue";
|
import {
|
getA200Param,
|
setA200Param,
|
startA200,
|
setA200ParamPl,
|
startA200ParamPl,
|
} from "./api";
|
import useElement from "@/hooks/useElement.js";
|
const { $alert, $loading, $message, $confirm } = useElement();
|
|
const $emit = defineEmits(["update:model-value"]);
|
|
const layout = {
|
gutter: 16,
|
span: 6,
|
};
|
|
const props = defineProps({
|
modelValue: {
|
type: Boolean,
|
required: true,
|
},
|
devs: {
|
type: [Object, Array],
|
required: true,
|
},
|
isBatch: {
|
type: Boolean,
|
default: false,
|
},
|
isUpdate: {
|
type: Boolean,
|
},
|
});
|
|
const list = reactive({
|
failList: [],
|
successList: [],
|
});
|
|
const params = reactive({
|
batteryTemperatureProtect: null,
|
batteryName: "",
|
nominalCapacity: 0,
|
testType: 1,
|
batteryType: 0,
|
batteryNumber: 0,
|
diffBatteryVoltage: 0,
|
// 放电参数
|
dischargeMode: 0,
|
dischargePower: 0,
|
dischargeCurrent: 0,
|
dischargeTime: 0,
|
dischargeVoltage: 0,
|
isDischargeCapacityEnable: false,
|
dischargeCapacity: 0,
|
isMinBatteryVoltageEnable: false,
|
minBatteryVoltage: 0,
|
// 充电参数
|
chargeVoltage: 0,
|
chargeProtectVoltage: 0,
|
chargeCurrent: 0,
|
chargeStopCurrent: 0,
|
chargeTime: 0,
|
chargePower: 0,
|
isChargeCapacityEnable: false,
|
chargeCapacity: 0,
|
isMaxBatteryVoltageEnable: false,
|
maxBatteryVoltage: 0,
|
});
|
|
const rules = {
|
batteryName: [
|
{
|
required: true,
|
message: "不能为空",
|
trigger: "blur",
|
},
|
],
|
nominalCapacity: [
|
{
|
required: true,
|
message: "不能为空",
|
trigger: "blur",
|
},
|
],
|
batteryNumber: [
|
{
|
required: true,
|
message: "不能为空",
|
trigger: "blur",
|
},
|
],
|
diffBatteryVoltage: [
|
{
|
required: true,
|
message: "不能为空",
|
trigger: "blur",
|
},
|
],
|
// 放电参数
|
dischargePower: [
|
{
|
required: true,
|
message: "不能为空",
|
trigger: "blur",
|
},
|
],
|
dischargeCurrent: [
|
{
|
required: true,
|
message: "不能为空",
|
trigger: "blur",
|
},
|
],
|
dischargeTime: [
|
{
|
required: true,
|
message: "不能为空",
|
trigger: "blur",
|
},
|
],
|
dischargeVoltage: [
|
{
|
required: true,
|
message: "不能为空",
|
trigger: "blur",
|
},
|
],
|
dischargeCapacity: [
|
{
|
required: true,
|
message: "不能为空",
|
trigger: "blur",
|
},
|
],
|
minBatteryVoltage: [
|
{
|
required: true,
|
message: "不能为空",
|
trigger: "blur",
|
},
|
],
|
// -------------------
|
chargeVoltage: [
|
{
|
required: true,
|
message: "不能为空",
|
trigger: "blur",
|
},
|
],
|
chargeProtectVoltage: [
|
{
|
required: true,
|
message: "不能为空",
|
trigger: "blur",
|
},
|
],
|
chargeCurrent: [
|
{
|
required: true,
|
message: "不能为空",
|
trigger: "blur",
|
},
|
],
|
chargeStopCurrent: [
|
{
|
required: true,
|
message: "不能为空",
|
trigger: "blur",
|
},
|
],
|
chargeTime: [
|
{
|
required: true,
|
message: "不能为空",
|
trigger: "blur",
|
},
|
],
|
chargeCapacity: [
|
{
|
required: true,
|
message: "不能为空",
|
trigger: "blur",
|
},
|
],
|
maxBatteryVoltage: [
|
{
|
required: true,
|
message: "不能为空",
|
trigger: "blur",
|
},
|
],
|
};
|
|
const setFlag = ref(false);
|
const testFlag = ref(false);
|
function close() {
|
$emit("update:model-value", false);
|
}
|
function startTest() {
|
if (props.isBatch) {
|
startBatch();
|
} else {
|
startOne();
|
}
|
}
|
|
function startOne() {
|
let loading = $loading();
|
startA200(props.devs.devId, params.testType)
|
.then((res) => {
|
loading.close();
|
let { code, data, msg } = res.data;
|
if (200 == code) {
|
$message.success("操作成功");
|
close();
|
console.log(data);
|
} else {
|
$message.error("操作失败:" + msg);
|
}
|
})
|
.catch((err) => {
|
loading.close();
|
$message.error("操作失败:" + err);
|
console.log(err);
|
});
|
}
|
function startBatch() {
|
let loading = $loading();
|
startA200ParamPl(params.testType, list.successList)
|
.then((res) => {
|
let { code, data, data2 } = res.data;
|
loading.close();
|
let failList = [];
|
let successList = [];
|
Object.keys(data2).forEach((v) => {
|
if (200 == data2[v].code) {
|
successList.push(v);
|
} else {
|
failList.push(v);
|
}
|
});
|
if (code && data && successList.length) {
|
$message.success("操作成功");
|
if (failList.length) {
|
let failNames = props.devs
|
.filter((v) => failList.some((vv) => vv == v.devId))
|
.map((v) => v.devIdcode);
|
|
$alert(`操作失败的设备列表:${failNames.join(", ")}。`);
|
}
|
close();
|
} else {
|
$message.error("操作失败");
|
}
|
})
|
.catch((err) => {
|
loading.close();
|
$message.error("操作失败");
|
console.log(err);
|
});
|
}
|
|
function getParams() {
|
let loading = $loading();
|
let param = props.isBatch ? props.devs[0].devId : props.devs.devId;
|
getA200Param(param)
|
.then((res) => {
|
let { code, data } = res.data;
|
loading.close();
|
if (200 == code) {
|
$message.success("读取成功");
|
// console.log(data);
|
for (const key in params) {
|
if (Object.prototype.hasOwnProperty.call(params, key)) {
|
if (key == "testType") {
|
continue;
|
}
|
params[key] = data[key];
|
}
|
}
|
setFlag.value = true;
|
} else {
|
$message.error("读取失败");
|
setFlag.value = false;
|
}
|
})
|
.catch((err) => {
|
setFlag.value = true;
|
$message.error(err);
|
loading.close();
|
console.log(err);
|
});
|
}
|
function setParams() {
|
if (props.isBatch) {
|
// _params["devIds"] = props.devs.map((v) => v.devId);
|
// setBatchParams(_params);
|
params["devIds"] = props.devs.map((v) => v.devId);
|
setBatchParams(params);
|
} else {
|
params["devId"] = props.devs.devId;
|
setOneParams(params);
|
}
|
}
|
function setOneParams(params) {
|
let loading = $loading();
|
|
setA200Param(params)
|
.then((res) => {
|
let { code, data, msg } = res.data;
|
loading.close();
|
if (200 == code) {
|
console.log(data);
|
$message.success("操作成功");
|
testFlag.value = true;
|
} else {
|
$message.error("操作失败:" + msg);
|
testFlag.value = false;
|
}
|
})
|
.catch((err) => {
|
loading.close();
|
console.log(err);
|
$message.error(err);
|
testFlag.value = false;
|
});
|
}
|
|
function setBatchParams(params) {
|
let loading = $loading();
|
setA200ParamPl(params)
|
.then((res) => {
|
let { code, data, data2 } = res.data;
|
loading.close();
|
let failList = [];
|
let successList = [];
|
Object.keys(data2).forEach((v) => {
|
if (200 == data2[v].code) {
|
successList.push(v);
|
} else {
|
failList.push(v);
|
}
|
});
|
if (code && data && successList.length) {
|
// console.log(
|
// "failList",
|
// failList,
|
// "successList",
|
// successList,
|
// "============="
|
// );
|
list.successList = successList;
|
$message.success("操作成功");
|
if (failList.length) {
|
let failNames = props.devs
|
.filter((v) => failList.some((vv) => vv == v.devId))
|
.map((v) => v.devIdcode);
|
|
$alert(`操作失败的设备列表:${failNames.join(", ")}。`);
|
}
|
testFlag.value = true;
|
} else {
|
$message.error("操作失败");
|
testFlag.value = false;
|
}
|
})
|
.catch((err) => {
|
loading.close();
|
console.log(err);
|
$message.error(err);
|
testFlag.value = false;
|
});
|
}
|
|
onMounted(() => {
|
// testType 有可能出现0值这种不合法数据 取值范围是1 / 2
|
if (props.isBatch) {
|
// console.log('dev0', props.devs[0], '=============');
|
params.testType = props.devs[0].state.testType || 1;
|
} else {
|
params.testType = props.devs.state.testType || 1;
|
// console.log("type", params.testType, "=============");
|
}
|
getParams();
|
});
|
</script>
|
|
<template>
|
<el-form
|
ref="ruleForm"
|
label-position="top"
|
:model="params"
|
:rules="rules"
|
class="params-dialog"
|
>
|
<el-row :gutter="layout.gutter">
|
<el-col :span="layout.span">
|
<el-form-item label="pack/模组号" prop="batteryName">
|
<el-input v-model="params.batteryName"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="layout.span">
|
<el-form-item label="标称容量(AH)" prop="nominalCapacity">
|
<el-input v-model="params.nominalCapacity"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="layout.span">
|
<el-form-item label="电池类型" prop="batteryType">
|
<el-select v-model="params.batteryType" class="" placeholder="">
|
<el-option label="磷酸铁锂" :value="0" />
|
<el-option label="三元锂" :value="1" />
|
<el-option label="钛酸锂" :value="2" />
|
<el-option label="锰酸锂" :value="3" />
|
</el-select>
|
</el-form-item>
|
</el-col>
|
<el-col :span="layout.span">
|
<el-form-item label="电芯串数" prop="batteryNumber">
|
<el-input v-model="params.batteryNumber"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="layout.span">
|
<el-form-item label="电芯压差(mV)" prop="diffBatteryVoltage">
|
<el-input v-model="params.diffBatteryVoltage"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="layout.span">
|
<el-form-item label="测试类型" prop="testType">
|
<el-select
|
v-model="params.testType"
|
class="yc-select"
|
placeholder="Select"
|
>
|
<el-option label="放电测试" :value="1" />
|
<el-option label="充电测试" :value="2" />
|
</el-select>
|
</el-form-item>
|
</el-col>
|
<!-- 放电参数 -->
|
<template v-if="1 == params.testType">
|
<el-col :span="layout.span">
|
<el-form-item label="放电模式" prop="dischargeMode">
|
<el-select
|
v-model="params.dischargeMode"
|
class=""
|
placeholder="Select"
|
>
|
<el-option label="恒流模式" :value="0" />
|
<el-option label="恒功率模式" :value="1" />
|
</el-select>
|
</el-form-item>
|
</el-col>
|
<el-col :span="layout.span">
|
<el-form-item label="放电功率(KW)" prop="dischargePower">
|
<el-input v-model="params.dischargePower"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="layout.span">
|
<el-form-item label="放电电流(A)" prop="dischargeCurrent">
|
<el-input v-model="params.dischargeCurrent"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="layout.span">
|
<el-form-item label="放电时间(s)" prop="dischargeTime">
|
<el-input v-model="params.dischargeTime"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="layout.span">
|
<el-form-item label="组端下限(V)" prop="dischargeVoltage">
|
<el-input v-model="params.dischargeVoltage"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="layout.span">
|
<el-form-item label="预放容量限制" prop="isDischargeCapacityEnable">
|
<el-select
|
v-model="params.isDischargeCapacityEnable"
|
class=""
|
placeholder="Select"
|
>
|
<el-option label="关闭" :value="!!0" />
|
<el-option label="开启" :value="!!1" />
|
</el-select>
|
</el-form-item>
|
</el-col>
|
<el-col :span="layout.span">
|
<el-form-item label="预放容量(AH)" prop="dischargeCapacity">
|
<el-input v-model="params.dischargeCapacity"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="layout.span">
|
<el-form-item label="单串下限限制" prop="isMinBatteryVoltageEnable">
|
<el-select
|
v-model="params.isMinBatteryVoltageEnable"
|
class=""
|
placeholder="Select"
|
>
|
<el-option label="关闭" :value="!!0" />
|
<el-option label="开启" :value="!!1" />
|
</el-select>
|
</el-form-item>
|
</el-col>
|
<el-col :span="layout.span">
|
<el-form-item label="单串下限(V)" prop="minBatteryVoltage">
|
<el-input v-model="params.minBatteryVoltage"></el-input>
|
</el-form-item>
|
</el-col>
|
</template>
|
<!-- 充电参数 -->
|
<template v-else>
|
<el-col :span="layout.span">
|
<el-form-item label="充电功率" prop="chargePower">
|
<el-select
|
v-model="params.chargePower"
|
class=""
|
placeholder="Select"
|
>
|
<el-option label="2.2KW插座" :value="2.2" />
|
<el-option label="4.4KW配电箱" :value="4.4" />
|
</el-select>
|
</el-form-item>
|
</el-col>
|
<el-col :span="layout.span">
|
<el-form-item label="充电限压(V)" prop="chargeVoltage">
|
<el-input v-model="params.chargeVoltage"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="layout.span">
|
<el-form-item label="充电保护(V)" prop="chargeProtectVoltage">
|
<el-input v-model="params.chargeProtectVoltage"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="layout.span">
|
<el-form-item label="充电限流(A)" prop="chargeCurrent">
|
<el-input v-model="params.chargeCurrent"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="layout.span">
|
<el-form-item label="电流阀值(A)" prop="chargeStopCurrent">
|
<el-input v-model="params.chargeStopCurrent"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="layout.span">
|
<el-form-item label="充电时间(s)" prop="chargeTime">
|
<el-input v-model="params.chargeTime"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="layout.span">
|
<el-form-item label="预充容量限制" prop="isChargeCapacityEnable">
|
<el-select
|
v-model="params.isChargeCapacityEnable"
|
class=""
|
placeholder="Select"
|
>
|
<el-option label="关闭" :value="!!0" />
|
<el-option label="开启" :value="!!1" />
|
</el-select>
|
</el-form-item>
|
</el-col>
|
<el-col :span="layout.span">
|
<el-form-item label="预充容量(AH)" prop="chargeCapacity">
|
<el-input v-model="params.chargeCapacity"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="layout.span">
|
<el-form-item label="单串上限限制" prop="isMaxBatteryVoltageEnable">
|
<el-select
|
v-model="params.isMaxBatteryVoltageEnable"
|
class=""
|
placeholder="Select"
|
>
|
<el-option label="关闭" :value="!!0" />
|
<el-option label="开启" :value="!!1" />
|
</el-select>
|
</el-form-item>
|
</el-col>
|
<el-col :span="layout.span">
|
<el-form-item label="单串上限(V)" prop="maxBatteryVoltage">
|
<el-input v-model="params.maxBatteryVoltage"></el-input>
|
</el-form-item>
|
</el-col>
|
</template>
|
</el-row>
|
<div class="form-footer">
|
<el-button @click="close">关闭</el-button>
|
<el-button
|
type="primary"
|
v-if="!isUpdate"
|
:disabled="!testFlag"
|
@click="startTest"
|
>启动</el-button
|
>
|
<el-button type="primary" :disabled="!setFlag" @click="setParams"
|
>设定</el-button
|
>
|
<el-button type="primary" @click="getParams">读取</el-button>
|
</div>
|
</el-form>
|
</template>
|
|
<style scoped lang="less">
|
.form-footer {
|
text-align: right;
|
}
|
</style>
|