<script setup>
|
import { ref, reactive, computed, onMounted } from "vue";
|
|
import {
|
getActmParam,
|
setActmParam,
|
setActmParamPl,
|
controllerActmParam,
|
controllActmParamPl,
|
} from "./api";
|
|
import useElement from "@/hooks/useElement.js";
|
const { $alert, $loading, $message, $confirm } = useElement();
|
|
const $emit = defineEmits(["update:model-value"]);
|
|
const maxBatteryNumber = ref(12);
|
|
const layout = {
|
gutter: 16,
|
span: 8,
|
};
|
|
const props = defineProps({
|
modelValue: {
|
type: Boolean,
|
required: true,
|
},
|
devs: {
|
type: [Object, Array],
|
required: true,
|
},
|
isBatch: {
|
type: Boolean,
|
default: false,
|
},
|
grpIdx: {
|
type: Number,
|
required: true,
|
},
|
isUpdate: {
|
type: Boolean,
|
default: false,
|
}
|
});
|
|
const list = reactive({
|
failList: [],
|
successList: [],
|
});
|
|
const params = reactive({
|
moduleCode: "",
|
workMode: 0,
|
batteryType: 0,
|
batteryNumber: 12,
|
testBatteryArray: "",
|
voltage: 0,
|
current: 0,
|
});
|
|
const rules = {
|
moduleCode: [
|
{
|
required: true,
|
message: "不能为空",
|
trigger: "blur",
|
},
|
],
|
// batteryNumber: [
|
// {
|
// required: true,
|
// message: "不能为空",
|
// trigger: "blur",
|
// },
|
// ],
|
// testBatteryArray: [
|
// {
|
// required: true,
|
// message: "不能为空",
|
// trigger: "blur",
|
// },
|
// ],
|
voltage: [
|
{
|
required: true,
|
message: "不能为空",
|
trigger: "blur",
|
},
|
],
|
current: [
|
{
|
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();
|
}
|
}
|
|
const testBatteryArray = ref([]);
|
|
function getTestBatteryArray() {
|
testBatteryArray.value = params.testBatteryArray
|
.split(",")
|
.filter((v) => "" != v);
|
}
|
|
function selectAll() {
|
testBatteryArray.value = Array.apply(null, Array(params.batteryNumber)).map(
|
(v, i) => i + 1 + ""
|
);
|
}
|
|
function countChange(num) {
|
console.log("num", num, "=============");
|
}
|
|
function startOne() {
|
let loading = $loading();
|
controllerActmParam(props.devs.devId, props.grpIdx, 1)
|
.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();
|
controllActmParamPl(list.successList, props.grpIdx, 1)
|
.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;
|
getActmParam(param, props.grpIdx)
|
.then((res) => {
|
let { code, data } = res.data;
|
loading.close();
|
if (200 == code) {
|
$message.success("读取成功");
|
maxBatteryNumber.value = data.maxBatteryNumber;
|
// console.log(data);
|
for (const key in params) {
|
if (Object.prototype.hasOwnProperty.call(params, key)) {
|
if (key == "testType") {
|
continue;
|
}
|
params[key] = data[key];
|
}
|
}
|
getTestBatteryArray();
|
setFlag.value = true;
|
} else {
|
$message.error("读取失败");
|
setFlag.value = false;
|
}
|
})
|
.catch((err) => {
|
setFlag.value = true;
|
$message.error(err);
|
loading.close();
|
console.log(err);
|
});
|
}
|
function setParams() {
|
// let _params = {
|
// moduleCode: "",
|
// workMode: 0,
|
// batteryType: 0,
|
// batteryNumber: 12,
|
// testBatteryArray: "",
|
// voltage: 0,
|
// current: 0,
|
// };
|
// Object.keys(_params).forEach((v) => {
|
// _params[v] = params[v];
|
// });
|
let _params = params;
|
_params["batteryStorageIndex"] = props.grpIdx;
|
_params["testBatteryArray"] = testBatteryArray.value.join(",");
|
if (props.isBatch) {
|
_params["devIds"] = props.devs.map((v) => v.devId);
|
setBatchParams(_params);
|
} else {
|
_params["devId"] = props.devs.devId;
|
setOneParams(_params);
|
}
|
}
|
function setOneParams(params) {
|
let loading = $loading();
|
|
setActmParam(params)
|
.then((res) => {
|
let { code, data } = res.data;
|
loading.close();
|
if (200 == code) {
|
console.log(data);
|
$message.success("操作成功");
|
testFlag.value = true;
|
} else {
|
$message.error("操作失败");
|
testFlag.value = false;
|
}
|
})
|
.catch((err) => {
|
loading.close();
|
console.log(err);
|
$message.error(err);
|
testFlag.value = false;
|
});
|
}
|
|
function setBatchParams(params) {
|
let loading = $loading();
|
setActmParamPl(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(() => {
|
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="模组编号" prop="moduleCode">
|
<el-input v-model="params.moduleCode"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="layout.span">
|
<el-form-item label="工作模式" prop="workMode">
|
<el-select v-model="params.workMode" class="" placeholder="">
|
<el-option label="充电" :value="0" />
|
<el-option label="放电" :value="1" />
|
<el-option label="均衡" :value="2" />
|
</el-select>
|
</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-select
|
v-model="params.batteryNumber"
|
@change="countChange"
|
class=""
|
placeholder=""
|
>
|
<el-option
|
v-for="idx in maxBatteryNumber + 1"
|
:key="idx - 1"
|
:label="idx - 1"
|
:value="idx - 1"
|
/>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
<el-col :span="layout.span">
|
<el-form-item label="电压阀值(V)" prop="voltage">
|
<el-input v-model="params.voltage"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="layout.span">
|
<el-form-item label="工作电流(A)" prop="current">
|
<el-input v-model="params.current"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="24">
|
<el-form-item label="测试电池" prop="testBatteryArray">
|
<el-select
|
v-model="testBatteryArray"
|
class=""
|
multiple
|
placeholder=""
|
>
|
<el-option class="pointer" disabled @click="selectAll" value="All"
|
>全选</el-option
|
>
|
<el-option
|
v-for="idx in params.batteryNumber"
|
:key="idx"
|
:label="idx"
|
:value="idx + ''"
|
/>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
</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>
|