<template>
|
<el-form
|
ref="ruleForm"
|
size="mini"
|
label-position="top"
|
:model="params"
|
:rules="rules"
|
class="params-dialog"
|
>
|
<el-form-item label="电池组名称">
|
<el-input v-model="otherParams.groupName" readonly></el-input>
|
</el-form-item>
|
<div class="table-layout">
|
<div class="table-row">
|
<div class="table-cell pr16">
|
<el-form-item label="设备ID">
|
<el-input v-model="otherParams.fbsdeviceId" readonly></el-input>
|
</el-form-item>
|
</div>
|
<div class="table-cell">
|
<el-form-item label="电池组信息">
|
<el-input v-model="otherParams.groupInfo" readonly></el-input>
|
</el-form-item>
|
</div>
|
</div>
|
<div class="table-row">
|
<div class="table-cell pr16">
|
<el-form-item label="电池组号">
|
<el-input
|
v-model="otherParams.groupIndexInFBSDevice"
|
readonly
|
></el-input>
|
</el-form-item>
|
</div>
|
<div class="table-cell">
|
<el-form-item label="测试类型">
|
<el-select
|
v-model="params.testCmd"
|
:disabled="pReadOnly"
|
placeholder="请选择"
|
>
|
<el-option
|
v-for="item in testType"
|
:key="item.value"
|
:label="item.label"
|
:value="item.value"
|
></el-option>
|
</el-select>
|
</el-form-item>
|
</div>
|
</div>
|
<div class="table-row">
|
<div class="table-cell pr16">
|
<el-form-item :label="disCurrText" :prop="isCqdz ? 'disCurr1' : 'disCurr'">
|
<el-input
|
v-model="params.disCurr"
|
:readonly="readOnly || pReadOnly || isCqdz"
|
></el-input>
|
</el-form-item>
|
</div>
|
<div class="table-cell">
|
<el-form-item label="核容时长(1~10000分钟)" prop="disTime">
|
<el-input
|
v-model="params.disTime"
|
:readonly="readOnly || pReadOnly"
|
></el-input>
|
</el-form-item>
|
</div>
|
</div>
|
<div class="table-row">
|
<div class="table-cell pr16">
|
<el-form-item label="核容容量(1~2000AH)" prop="disCap">
|
<el-input
|
v-model="params.disCap"
|
:readonly="readOnly || pReadOnly"
|
></el-input>
|
</el-form-item>
|
</div>
|
<div class="table-cell">
|
<el-form-item label="单体温度上限(20~60℃)" prop="monomertmpHigh">
|
<el-input
|
v-model="params.monomertmpHigh"
|
:readonly="readOnly || pReadOnly"
|
></el-input>
|
</el-form-item>
|
</div>
|
</div>
|
<div class="table-row">
|
<div class="table-cell pr16">
|
<el-form-item :label="rangeLabel.groupvolLow" prop="groupvolLow">
|
<el-input
|
v-model="params.groupvolLow"
|
:readonly="readOnly || pReadOnly"
|
></el-input>
|
</el-form-item>
|
</div>
|
<div class="table-cell">
|
<el-form-item :label="rangeLabel.monomervolLow" prop="monomervolLow">
|
<el-input
|
v-model="params.monomervolLow"
|
:readonly="readOnly || pReadOnly"
|
></el-input>
|
</el-form-item>
|
</div>
|
</div>
|
<div class="table-row">
|
<div class="table-cell pr16">
|
<el-form-item label="升压上限(V)">
|
<el-input
|
v-model="params.dcvolHighLimit"
|
:readonly="pReadOnly"
|
></el-input>
|
</el-form-item>
|
</div>
|
<div class="table-cell">
|
<el-form-item label="充电电流(A)">
|
<el-input
|
v-model="params.chargeCurrSet"
|
:readonly="pReadOnly"
|
></el-input>
|
</el-form-item>
|
</div>
|
</div>
|
</div>
|
<el-form-item v-if="1 == isRequest" label="申请原因" required>
|
<el-input type="textarea" :rows="2" v-model="reason"></el-input>
|
</el-form-item>
|
<div class="form-footer">
|
<!-- <three-btn>清除告警</three-btn> -->
|
<template v-if="!pReadOnly">
|
<!-- 申请放电 -->
|
<three-btn v-if="1 == isRequest" @click="sendRequest"
|
>放电申请</three-btn
|
>
|
<!-- -->
|
<template v-else>
|
<three-btn :disabled="!startTestFlag" @click="startTestCheck"
|
>启动测试</three-btn
|
>
|
<three-btn @click="getParams()">读取</three-btn>
|
<three-btn :disabled="!setTestFlag" @click="submitFrom"
|
>设定</three-btn
|
>
|
</template>
|
</template>
|
<three-btn v-else @click="$emit('close')">关闭</three-btn>
|
<!-- <three-btn @click="submitFrom">设定</three-btn>-->
|
</div>
|
<el-dialog
|
title="人脸校验"
|
width="480px"
|
:visible.sync="setFaceShow"
|
:close-on-click-modal="false"
|
top="0"
|
:modal="false"
|
class="dialog-center"
|
:modal-append-to-body="false"
|
:destroy-on-close="true"
|
>
|
<check-face
|
v-if="setFaceShow"
|
@checkSuccess="setFaceSuccess"
|
></check-face>
|
</el-dialog>
|
<el-dialog
|
title="人脸校验"
|
width="480px"
|
:visible.sync="startFaceShow"
|
:close-on-click-modal="false"
|
top="0"
|
:modal="false"
|
class="dialog-center"
|
:modal-append-to-body="false"
|
:destroy-on-close="true"
|
>
|
<check-face
|
v-if="startFaceShow"
|
@checkSuccess="startFaceSuccess"
|
></check-face>
|
</el-dialog>
|
</el-form>
|
</template>
|
|
<script>
|
import { const_61850 } from "@/assets/js/const";
|
|
import { testVal } from "@/assets/js/tools";
|
import CheckFace from "@/components/checkFace";
|
|
import config from "@/assets/js/config";
|
import {
|
btsControl as getParams,
|
btsControl as start,
|
set61850Params,
|
addWorkMain,
|
searchTemp,
|
} from "../js/realTime";
|
import { checkUserPwd } from "@/views/login/js/api";
|
|
export default {
|
components: { CheckFace },
|
props: {
|
batt: {
|
type: Object,
|
default() {
|
return {};
|
},
|
},
|
// 只读模式 显示参数用
|
pReadOnly: {
|
type: Boolean,
|
default: false,
|
},
|
isRequest: {
|
type: Number,
|
default: 0,
|
},
|
paramData: {
|
type: Object,
|
default() {
|
return {};
|
},
|
},
|
},
|
data() {
|
let cmd = const_61850.cmd;
|
let testType = const_61850.testType;
|
let rules = const_61850.dischargeRules;
|
|
let batt = this.batt;
|
// 修改组端下限的取值范围
|
rules.GroupVol_Low.min = (batt.monCount * batt.monVolStd * 0.875).toHold(1);
|
rules.GroupVol_Low.max = (batt.monCount * batt.monVolStd * 1.125).toHold(1);
|
rules.GroupVol_Low.msg =
|
"取值范围" +
|
rules.GroupVol_Low.min +
|
"~" +
|
rules.GroupVol_Low.max +
|
"(保留一位小数)";
|
|
// 修改电池单体下限的取值范围
|
rules.MonomerVol_Low.min = (batt.monVolStd * 0.9).toHold(1);
|
rules.MonomerVol_Low.max = (batt.monVolStd * 1.2).toHold(1);
|
rules.MonomerVol_Low.msg =
|
"取值范围" +
|
rules.MonomerVol_Low.min +
|
"~" +
|
rules.MonomerVol_Low.max +
|
"(保留三位小数)";
|
|
return {
|
reason: "",
|
setFaceShow: false,
|
startFaceShow: false,
|
cmd: cmd, // 操作命令
|
testType: testType, // 测试类型
|
startTestFlag: false, // 启动测试的状态
|
setTestFlag: false, // 设置参数的状态
|
readOnly: false,
|
ranges: {
|
groupvolLow: {
|
name: "组端电压下限",
|
unit: "V",
|
min: rules.GroupVol_Low.min,
|
max: rules.GroupVol_Low.max,
|
},
|
monomervolLow: {
|
name: "单体电压下限",
|
unit: "V",
|
min: rules.MonomerVol_Low.min,
|
max: rules.MonomerVol_Low.max,
|
},
|
},
|
params: {
|
num: 0,
|
battGroupId: 0,
|
devId: 0, // 设备id
|
testCmd: 37, // 测试类型
|
disCap: 0, // 核容容量
|
disCurr: 0, // 核容电流
|
disTime: 0, // 核容时长
|
groupvolLow: 0, // 组端电压下限
|
monomervolLow: 0, // 单体电压下限
|
monomertmpHigh: 0, // 单体温度上限
|
dcvolHighLimit: 0, // 升压上限
|
chargeCurrSet: 0, // 充电电流
|
},
|
rules: {
|
disCap: [
|
{
|
validator(rule, value, callback) {
|
testVal(rule, value, callback, rules.DisCap);
|
},
|
trigger: "change",
|
},
|
],
|
disCurr: [
|
{
|
validator(rule, value, callback) {
|
testVal(rule, value, callback, rules.DisCurr);
|
},
|
trigger: "change",
|
},
|
],
|
disTime: [
|
{
|
validator(rule, value, callback) {
|
testVal(rule, value, callback, rules.DisTime);
|
},
|
trigger: "change",
|
},
|
],
|
groupvolLow: [
|
{
|
validator(rule, value, callback) {
|
testVal(rule, value, callback, rules.GroupVol_Low);
|
},
|
trigger: "change",
|
},
|
],
|
monomervolLow: [
|
{
|
validator(rule, value, callback) {
|
testVal(rule, value, callback, rules.MonomerVol_Low);
|
},
|
trigger: "change",
|
},
|
],
|
monomertmpHigh: [
|
{
|
validator(rule, value, callback) {
|
testVal(rule, value, callback, rules.MonomerTmp_High);
|
},
|
trigger: "change",
|
},
|
],
|
},
|
};
|
},
|
watch: {
|
params: {
|
handler(params) {
|
if (params.testCmd == 72 || params.testCmd == 50) {
|
this.readOnly = true;
|
} else {
|
this.readOnly = false;
|
}
|
this.startTestFlag = false;
|
},
|
deep: true,
|
},
|
},
|
methods: {
|
// 放电申请
|
sendRequest() {
|
if ("" == this.reason.trim()) {
|
this.$message.error("请填写申请原因");
|
return false;
|
}
|
this.$refs.ruleForm.validate((valid) => {
|
// 校验通过
|
if (valid) {
|
this.addWorkMain();
|
} else {
|
this.$layer.msg("存在校验未通过的数据!");
|
return false;
|
}
|
});
|
},
|
addWorkMain() {
|
let param = { ...this.params, reason: this.reason };
|
// 等待框
|
let loading = this.$layer.loading(1);
|
addWorkMain(param)
|
.then((res) => {
|
let { code, data, msg } = res.data;
|
if (code && data) {
|
// 提示信息
|
this.$layer.msg("申请已提交");
|
this.$emit("close");
|
} else {
|
this.$layer.msg(msg);
|
}
|
// 关闭等待框
|
this.$layer.close(loading);
|
})
|
.catch((err) => {
|
this.$layer.close(loading);
|
console.log(err);
|
});
|
},
|
initParams() {
|
// 初始化参数
|
this.params = {
|
num: 0,
|
battGroupId: 0,
|
devId: 0, // 设备id
|
testCmd: 37, // 测试类型
|
disCap: 0, // 核容容量
|
disCurr: 0, // 核容电流
|
disTime: 0, // 核容时长
|
groupvolLow: 0, // 组端电压下限
|
monomervolLow: 0, // 单体电压下限
|
monomertmpHigh: 0, // 单体温度上限
|
dcvolHighLimit: 0, // 升压上限
|
chargeCurrSet: 0, // 充电电流
|
};
|
},
|
// 获取参数
|
getParams(useParam) {
|
// 定义等待框
|
let loading = this.$layer.loading(1);
|
// 启动按钮不可点击
|
this.startTestFlag = false;
|
|
// 查询后台
|
getParams({
|
num: this.cmd.get,
|
devId: this.batt.fbsdeviceId,
|
battGroupNum: this.batt.groupIndexInFBSDevice + 1,
|
})
|
.then((res) => {
|
res = res.data;
|
if (useParam || (res.code && res.data2)) {
|
let fsparam = res.data;
|
// 遍历参数属性并赋值
|
for (let key in this.params) {
|
if (key === "testCmd") {
|
this.params.testCmd = 37;
|
} else {
|
this.params[key] = fsparam[key];
|
}
|
}
|
// 设置的命令和devId
|
this.params.num = this.cmd.set;
|
this.params.devId = this.batt.fbsdeviceId;
|
if (res.data2) {
|
this.$layer.msg("读取成功!");
|
// 设置按钮可点击
|
this.setTestFlag = true;
|
}
|
} else {
|
// 初始化参数
|
this.initParams();
|
// 设置按钮不可点击
|
this.setTestFlag = false;
|
this.$layer.msg("读取失败!");
|
}
|
// 关闭等待框
|
this.$layer.close(loading);
|
})
|
.catch((error) => {
|
console.log(error);
|
// 初始化参数
|
this.initParams();
|
// 设置按钮不可点击
|
this.setTestFlag = false;
|
// 关闭等待框
|
this.$layer.close(loading);
|
this.$layer.msg("读取失败,读取请求异常!");
|
});
|
},
|
// 提交表单设置参数
|
submitFrom() {
|
this.$refs.ruleForm.validate((valid) => {
|
// 校验通过
|
if (valid) {
|
let batt = this.batt;
|
let params = this.params;
|
let disCurr = params.disCurr; // 核容电流
|
let disCap = params.disCap; // 核容容量
|
let disTime = params.disTime; // 核容时长
|
let realTestTime = 0;
|
if (disCurr > batt.loadCurr) {
|
realTestTime = batt.loadCurr
|
? Math.ceil(disCap / batt.loadCurr) * 60
|
: 0;
|
}
|
let msg = "确认修改参数";
|
if (realTestTime > disTime) {
|
msg =
|
"核容时长可能无法满足核容" +
|
disCap +
|
"AH,建议核容时长:" +
|
realTestTime +
|
"分钟";
|
}
|
// 设置参数
|
this.$layer.confirm(msg, { icon: 3, title: "系统提示" }, (index) => {
|
// 关闭确认框
|
this.$layer.close(index);
|
this.setParamsCheck();
|
});
|
} else {
|
this.$layer.msg("存在校验未通过的数据!");
|
return false;
|
}
|
});
|
},
|
setParamsCheck() {
|
if (config.setParamsByFace.value) {
|
this.setFaceShow = true;
|
} else {
|
this.setParams(true);
|
}
|
},
|
// 设置参数
|
setParams() {
|
// 等待框
|
let loading = this.$layer.loading(1);
|
// 请求后台
|
set61850Params(this.params)
|
.then((res) => {
|
res = res.data;
|
if (res.code && res.data) {
|
// 启动按钮可点击
|
this.startTestFlag = true;
|
// 提示信息
|
this.$layer.msg("设置成功");
|
} else {
|
// 启动按钮不可点击
|
this.startTestFlag = false;
|
// 提示信息
|
this.$layer.msg("设置失败!");
|
}
|
// 关闭等待框
|
this.$layer.close(loading);
|
})
|
.catch((error) => {
|
console.log(error);
|
// 关闭等待框
|
this.$layer.close(loading);
|
// 启动按钮不可点击
|
this.startTestFlag = false;
|
// 提示信息
|
this.$layer.msg("设置失败,设置请求异常!");
|
});
|
},
|
startTestCheck() {
|
if (config.dischargeByFace.value) {
|
this.startFaceShow = true;
|
} else {
|
this.confirmStartTest();
|
}
|
},
|
// 确认框
|
confirmStartTest() {
|
this.$layer.prompt(
|
{
|
title: "输入启动口令,并确认",
|
formType: 2,
|
area: ["300px", "180px"],
|
},
|
(pass, index) => {
|
// 请求后台校验密码
|
checkUserPwd(pass)
|
.then((res) => {
|
res = res.data;
|
if (res.code) {
|
// 关闭弹出框
|
this.$layer.close(index);
|
this.$layer.msg("密码检测通过,启动测试");
|
// 启动测试
|
this.startTest();
|
} else {
|
this.$layer.msg("启动口令错误!");
|
}
|
})
|
.catch((error) => {
|
console.log(error);
|
this.$layer.msg("网络请求异常");
|
});
|
}
|
);
|
},
|
// 启动
|
startTest() {
|
// 等待框
|
let loading = this.$layer.loading(1);
|
// 请求后台
|
start({
|
num: this.cmd.start,
|
devId: this.batt.fbsdeviceId,
|
battGroupNum: this.batt.groupIndexInFBSDevice + 1,
|
})
|
.then((res) => {
|
res = res.data;
|
if (res.code && res.data2) {
|
// 提示信息
|
this.$layer.msg("启动测试成功");
|
this.$emit("close");
|
} else {
|
// 提示信息
|
this.$layer.msg("启动测试失败!");
|
}
|
// 关闭等待框
|
this.$layer.close(loading);
|
})
|
.catch((error) => {
|
console.log(error);
|
// 关闭等待框
|
this.$layer.close(loading);
|
// 提示信息
|
this.$layer.msg("启动测试失败,启动测试请求异常!");
|
});
|
},
|
setFaceSuccess() {
|
this.setFaceShow = false;
|
this.$nextTick(() => {
|
this.setParams();
|
});
|
},
|
startFaceSuccess() {
|
this.startFaceShow = false;
|
this.$nextTick(() => {
|
this.startTest();
|
});
|
},
|
searchTemp() {
|
let loading = this.$layer.loading(1);
|
searchTemp(this.batt.battGroupId)
|
.then((res) => {
|
let { code, data, data2 } = res.data;
|
if (code && data) {
|
let fsparam = data2;
|
// 遍历参数属性并赋值
|
for (let key in this.params) {
|
if (key === "testCmd") {
|
this.params.testCmd = 37;
|
} else {
|
this.params[key] = fsparam[key];
|
}
|
}
|
// 设置的命令和devId
|
this.params.num = this.cmd.set;
|
this.params.devId = this.batt.fbsdeviceId;
|
// 设置按钮可点击
|
this.setTestFlag = true;
|
this.$layer.close(loading);
|
} else {
|
// 初始化参数
|
this.initParams();
|
// 设置按钮不可点击
|
this.setTestFlag = false;
|
// 关闭等待框
|
this.$layer.close(loading);
|
this.$layer.msg("读取失败,读取请求异常!");
|
}
|
})
|
.catch((err) => {
|
console.log(err);
|
// 初始化参数
|
this.initParams();
|
// 设置按钮不可点击
|
this.setTestFlag = false;
|
// 关闭等待框
|
this.$layer.close(loading);
|
this.$layer.msg("读取失败,读取请求异常!");
|
});
|
},
|
},
|
computed: {
|
otherParams() {
|
let batt = this.batt;
|
let groupInfo =
|
"单体数量:" +
|
this.batt.monCount +
|
";电压(V):" +
|
this.batt.monVolStd +
|
";容量(AH):" +
|
this.batt.monCapStd;
|
return {
|
groupName: batt.stationName + "-" + batt.battGroupName,
|
fbsdeviceId: batt.fbsdeviceId,
|
groupInfo: groupInfo,
|
groupIndexInFBSDevice: this.batt.groupIndexInFBSDevice + 1,
|
};
|
},
|
isCqdz() {
|
return this.$CFG.clientName.name === "cqdz";
|
},
|
rangeLabel() {
|
let ranges = this.ranges;
|
let result = {};
|
for (let key in ranges) {
|
let item = ranges[key];
|
result[key] =
|
item.name + "(" + item.min + "~" + item.max + item.unit + ")";
|
}
|
return result;
|
},
|
disCurrText() {
|
let batt = this.batt;
|
if (this.isCqdz) {
|
return "核容电流(A)";
|
}
|
|
return "核容电流(1~300A)" + " 实际负载电流:" + batt.loadCurr + "A";
|
},
|
},
|
mounted() {
|
// 获取数据
|
if (this.pReadOnly) {
|
this.initParams();
|
this.params = {
|
...this.params,
|
...this.paramData,
|
};
|
} else {
|
console.log(this.isRequest, "??");
|
switch (this.isRequest) {
|
case 1:
|
this.getParams(true);
|
break;
|
case 2:
|
this.searchTemp();
|
break;
|
default:
|
this.getParams();
|
break;
|
}
|
}
|
// console.log(this.batt);
|
},
|
};
|
</script>
|
|
<style scoped>
|
.form-footer {
|
margin-top: 16px;
|
margin-bottom: 16px;
|
text-align: right;
|
}
|
|
.form-footer .three-btn {
|
margin-left: 12px;
|
}
|
</style>
|