'use strict';
|
|
/**
|
* 电池信息监控模块
|
* 默认模块名: battery
|
* @return {[object]} [ 返回一个对象 ]
|
*/
|
loader.define({
|
data: {
|
vm: '',
|
loading: ''
|
},
|
loaded: function loaded(require, exports, module) {
|
this.loading = bui.loading();
|
this.loading.show();
|
},
|
show: function show() {
|
var loading = this.loading;
|
var bs = bui.store({
|
scope: 'page',
|
data: {}
|
});
|
|
/**
|
* 规定params={battGroupId:'',battGroupName: '', devId: ''}
|
*/
|
var params = router.getPageParams();
|
var vm = this.vm = new Vue({
|
el: bs.$el[0],
|
data: {
|
block: {
|
tabMain: 0
|
},
|
params: params,
|
title: '未知',
|
timer: {
|
rtState: new Timeout(),
|
rtData: new Timeout()
|
},
|
rtState: {
|
batt_test_type: '', // 电池状态
|
group_vol: '', // 组端电压
|
group_curr: '', // 组端电流
|
batt_test_cap: '', // 测试容量
|
batt_test_recordtime: '', // 更新日期
|
batt_test_tlong: 0 // 测试时长
|
},
|
monResLine: {
|
title: '单体内阻折线图',
|
show: false
|
},
|
activeTab: 0,
|
tabsState: {
|
monList: { // 单体列表
|
key: 0,
|
show: true,
|
state: true
|
},
|
totalInfo: { // 统计信息
|
key: 1,
|
init: false,
|
state: false
|
},
|
monVol: { // 单体电压
|
key: 2,
|
init: false,
|
state: false
|
},
|
monRes: { // 单体电流
|
key: 3,
|
init: false,
|
state: false
|
},
|
monTmp: { // 单体温度
|
key: 4,
|
init: false,
|
state: false
|
}
|
},
|
tbls: {
|
monList: {
|
columns: [{
|
title: '单体',
|
key: 'num1',
|
width: 70,
|
align: 'center'
|
}, {
|
title: '电压(V)',
|
key: 'vol1',
|
align: 'center'
|
}, {
|
title: '内阻(mΩ)',
|
key: 'res1',
|
align: 'center'
|
}, {
|
title: '温度(℃)',
|
key: 'tmp1',
|
align: 'center'
|
}, {
|
title: ' ',
|
key: 'split1',
|
width: 2,
|
className: 'split-td'
|
}, {
|
title: '单体',
|
key: 'num2',
|
width: 70,
|
align: 'center'
|
}, {
|
title: '电压(V)',
|
key: 'vol2',
|
align: 'center'
|
}, {
|
title: '内阻(mΩ)',
|
key: 'res2',
|
align: 'center'
|
}, {
|
title: '温度(℃)',
|
key: 'tmp2',
|
align: 'center'
|
}, {
|
title: ' ',
|
key: 'split2',
|
width: 2,
|
className: 'split-td'
|
}, {
|
title: '单体',
|
key: 'num3',
|
width: 70,
|
align: 'center'
|
}, {
|
title: '电压(V)',
|
key: 'vol3',
|
align: 'center'
|
}, {
|
title: '内阻(mΩ)',
|
key: 'res3',
|
align: 'center'
|
}, {
|
title: '温度(℃)',
|
key: 'tmp3',
|
align: 'center'
|
}],
|
data: []
|
},
|
totalInfo: {
|
columns: [{
|
title: '类型',
|
key: 'type',
|
width: 90,
|
align: 'center'
|
}, {
|
title: '较高单体',
|
key: 'high',
|
align: 'center'
|
}, {
|
title: '较低单体',
|
key: 'low',
|
align: 'center'
|
}, {
|
title: '平均值',
|
key: 'avg',
|
width: 100,
|
align: 'center'
|
}],
|
data: []
|
}
|
},
|
options: {
|
monVol: { // 单体电压
|
title: new Title(),
|
option: {
|
categories: [],
|
data: []
|
}
|
},
|
monRes: { // 单体内阻
|
title: new Title(),
|
option: {
|
categories: [],
|
data: []
|
}
|
},
|
monResLine: {
|
option: {
|
categories: [],
|
data: []
|
}
|
},
|
monTmp: { // 单体内阻
|
title: new Title(),
|
option: {
|
categories: [],
|
data: []
|
}
|
},
|
monSer: { // 单体内阻
|
title: new Title(),
|
option: {
|
categories: [],
|
data: []
|
}
|
}
|
}
|
},
|
methods: {
|
monHandlerClick: function monHandlerClick(event) {
|
var self = this;
|
var params = this.params;
|
var monNum = event.point.index + 1;
|
this.monResLine.title = '单体#' + monNum + '内阻折线图';
|
|
// 构造查询条件
|
var searchParams = {
|
BattGroupId: params.battGroupId,
|
MonNum: monNum * 10 + 1
|
};
|
// 设置等待框
|
var ajaxLoading = bui.loading();
|
ajaxLoading.show();
|
// 请求后台查询
|
ajax({
|
url: 'BattresdataAction!serchByMonHistory',
|
data: 'json=' + JSON.stringify(searchParams),
|
success: function success(res) {
|
self.monResLine.show = true;
|
var rs = JSON.parse(res.result);
|
if (rs.code == 1) {
|
var data = rs.data;
|
console.log(data);
|
self.setResLineOpt(data);
|
} else {
|
self.setResLineOpt([]);
|
}
|
},
|
complete: function complete() {
|
ajaxLoading.hide();
|
}
|
});
|
},
|
setResLineOpt: function setResLineOpt(data) {
|
var self = this;
|
var testTimes = [];
|
var resVals = [];
|
// 遍历data的值
|
for (var i = 0; i < data.length; i++) {
|
var _data = data[i];
|
testTimes.push(_data.test_starttime);
|
resVals.push(_data.mon_res);
|
}
|
|
// 单体内阻曲线
|
this.options.monResLine.option.categories = testTimes;
|
this.options.monResLine.option.data = resVals;
|
|
// 设置单体内阻折线
|
this.$refs['monResLine'].setOption(this.options.monResLine.option);
|
},
|
changeTabsState: function changeTabsState(num) {
|
var result = '';
|
if (this.activeTab == num) {
|
return;
|
}
|
var tabsState = this.tabsState;
|
this.activeTab = num;
|
Object.keys(tabsState).forEach(function (key) {
|
var _tabsState = tabsState[key];
|
if (_tabsState.key == num) {
|
result = _tabsState;
|
_tabsState.state = true;
|
} else {
|
_tabsState.state = false;
|
}
|
});
|
return result;
|
},
|
searchRtState: function searchRtState() {
|
var self = this;
|
var json = JSON.stringify({
|
BattGroupId: self.params.battGroupId
|
});
|
// 查询后台
|
ajax({
|
type: 'post',
|
async: true,
|
url: 'Batt_rtstateAction!serchByCondition',
|
data: 'json=' + json,
|
dataType: 'json',
|
success: function success(res) {
|
var rs = JSON.parse(res.result);
|
if (rs.code == 1) {
|
var data = rs.data[0];
|
// console.log(data);
|
self.rtState = data;
|
}
|
},
|
complete: function complete() {
|
// 开启计时器
|
self.timer.rtState.open();
|
}
|
});
|
},
|
searchRtData: function searchRtData(isLoading) {
|
var self = this;
|
var json = JSON.stringify({
|
BattGroupId: self.params.battGroupId
|
});
|
var ajaxLoading = "";
|
if (isLoading) {
|
ajaxLoading = bui.loading();
|
ajaxLoading.show();
|
}
|
|
// 查询后台
|
ajax({
|
type: 'post',
|
async: true,
|
url: 'Batt_rtdataAction!serchByCondition',
|
data: 'json=' + json,
|
dataType: 'json',
|
success: function success(res) {
|
var rs = JSON.parse(res.result);
|
// console.log(rs);
|
if (rs.code == 1) {
|
var data = rs.data;
|
//console.log(data);
|
self.setTbls(data);
|
self.setOptions(data);
|
} else {
|
self.updateGraph();
|
}
|
},
|
complete: function complete() {
|
if (isLoading) {
|
ajaxLoading.hide();
|
}
|
// 开启计时器
|
self.timer.rtData.open();
|
}
|
});
|
},
|
setTbls: function setTbls(data) {
|
this.setMonData(data);
|
this.setTotalInfoData(data);
|
},
|
setMonData: function setMonData(data) {
|
var tabsState = this.tabsState;
|
// 判断是否显示单体列表
|
if (tabsState.monList.state) {
|
var result = [];
|
// 遍历data的值进行格式化
|
for (var i = 0; i < data.length; i += 3) {
|
var tmp = {};
|
var data1 = data[i];
|
tmp.num1 = '#' + data1.mon_num;
|
tmp.vol1 = data1.mon_vol;
|
tmp.res1 = data1.mon_res;
|
tmp.tmp1 = data1.mon_tmp;
|
var num2 = i + 1;
|
if (num2 == data.length) {
|
result.push(tmp);
|
break;
|
}
|
var data2 = data[i + 1];
|
tmp.num2 = '#' + data2.mon_num;
|
tmp.vol2 = data2.mon_vol;
|
tmp.res2 = data2.mon_res;
|
tmp.tmp2 = data2.mon_tmp;
|
|
var num3 = i + 2;
|
if (num3 == data.length) {
|
result.push(tmp);
|
break;
|
}
|
var data3 = data[i + 2];
|
tmp.num3 = '#' + data3.mon_num;
|
tmp.vol3 = data3.mon_vol;
|
tmp.res3 = data3.mon_res;
|
tmp.tmp3 = data3.mon_tmp;
|
result.push(tmp);
|
}
|
this.tbls.monList.data = result;
|
}
|
},
|
setTotalInfoData: function setTotalInfoData(data) {
|
var tabsState = this.tabsState;
|
var result = [{
|
type: '电压',
|
avg: '0V'
|
}, {
|
type: '内阻',
|
avg: '0mΩ'
|
}, {
|
type: '温度',
|
avg: '0℃'
|
}];
|
if (tabsState.totalInfo.state && data.length != 0) {
|
var data0 = data[0];
|
// 电压
|
var vol = {
|
max: {
|
mon_num: [data0.mon_num],
|
value: data0.mon_vol
|
},
|
min: {
|
mon_num: [data0.mon_num],
|
value: data0.mon_vol
|
}
|
// 内阻
|
};var res = {
|
max: {
|
mon_num: [data0.mon_num],
|
value: data0.mon_res
|
},
|
min: {
|
mon_num: [data0.mon_num],
|
value: data0.mon_res
|
}
|
|
// 温度
|
};var tmp = {
|
max: {
|
mon_num: [data0.mon_num],
|
value: data0.mon_tmp
|
},
|
min: {
|
mon_num: [data0.mon_num],
|
value: data0.mon_tmp
|
}
|
|
// 总值
|
};var sum = {
|
vol: data0.mon_vol,
|
res: data0.mon_res,
|
tmp: data0.mon_tmp
|
};
|
// 长度
|
var len = data.length;
|
for (var i = 1; i < len; i++) {
|
var _data = data[i];
|
this.setTotalMaxMin(vol, _data, 'mon_vol');
|
this.setTotalMaxMin(res, _data, 'mon_res');
|
this.setTotalMaxMin(tmp, _data, 'mon_tmp');
|
sum.vol += _data.mon_vol;
|
sum.res += _data.mon_res;
|
sum.tmp += _data.mon_tmp;
|
}
|
|
// 设置电压
|
var volMaxMin = this.formatMaxMin(vol, 'V');
|
result[0].high = volMaxMin.max;
|
result[0].low = volMaxMin.min;
|
result[0].avg = this.getAvg(sum.vol, len, 'V');
|
|
// 设置内阻
|
var resMaxMin = this.formatMaxMin(res, 'mΩ');
|
result[1].high = resMaxMin.max;
|
result[1].low = resMaxMin.min;
|
result[1].avg = this.getAvg(sum.res, len, 'mΩ');
|
|
// 设置温度
|
var tmpMaxMin = this.formatMaxMin(tmp, '℃');
|
result[2].high = tmpMaxMin.max;
|
result[2].low = tmpMaxMin.min;
|
result[2].avg = this.getAvg(sum.tmp, len, '℃');
|
|
this.tbls.totalInfo.data = result;
|
}
|
},
|
setTotalMaxMin: function setTotalMaxMin(target, item, key) {
|
if (item[key] > target.max.value) {
|
target.max.mon_num = [item.mon_num];
|
target.max.value = item[key];
|
} else if (item[key] == target.max.value) {
|
target.max.mon_num.push(item.mon_num);
|
}
|
|
if (item[key] < target.min.value) {
|
target.min.mon_num = [item.mon_num];
|
target.min.value = item[key];
|
} else if (item[key] == target.min.value) {
|
target.min.mon_num.push(item.mon_num);
|
}
|
},
|
formatMaxMin: function formatMaxMin(data, unit) {
|
var result = {
|
max: '',
|
min: ''
|
};
|
// 设置max
|
var max = data.max;
|
var num_str = '#' + max.mon_num[0];
|
for (var i = 1; i < max.mon_num.length; i++) {
|
num_str += ',#' + max.mon_num[i];
|
}
|
result.max = num_str + ":" + max.value + unit;
|
|
// 设置min
|
var min = data.min;
|
var num_str = '#' + min.mon_num[0];
|
for (var i = 1; i < min.mon_num.length; i++) {
|
num_str += ',#' + min.mon_num[i];
|
}
|
result.min = num_str + ":" + min.value + unit;
|
|
return result;
|
},
|
getAvg: function getAvg(sum, len, unit) {
|
return Number((sum / len).toFixed(2)) + unit;
|
},
|
|
setOptions: function setOptions(data) {
|
// 遍历data的值
|
var monNum = []; // 单体编号
|
var monVol = []; // 单体电压
|
var monRes = []; // 单体内阻
|
var monTmp = []; // 单体温度
|
for (var i = 0; i < data.length; i++) {
|
var _data = data[i];
|
monNum.push('#' + _data.mon_num);
|
monVol.push(_data.mon_vol);
|
monRes.push(_data.mon_res);
|
monTmp.push(_data.mon_tmp);
|
}
|
// 单体电压
|
this.options.monVol.option.categories = monNum;
|
this.options.monVol.option.data = monVol;
|
|
// 单体内阻
|
this.options.monRes.option.categories = monNum;
|
this.options.monRes.option.data = monRes;
|
|
// 单体温度
|
this.options.monTmp.option.categories = monNum;
|
this.options.monTmp.option.data = monTmp;
|
|
this.updateGraph();
|
},
|
// 更新图谱
|
updateGraph: function updateGraph() {
|
var tabsState = this.tabsState;
|
// console.log(tabsState);
|
// 更新单体电压
|
if (tabsState.monVol.state) {
|
// bui.alert(7788);
|
this.$refs['monVolBar'].setOption(this.options.monVol.option);
|
}
|
|
// 更新单体内阻
|
if (tabsState.monRes.state) {
|
this.$refs['monResBar'].setOption(this.options.monRes.option);
|
}
|
|
// 更新单体温度
|
if (tabsState.monTmp.state) {
|
this.$refs['monTmpBar'].setOption(this.options.monTmp.option);
|
}
|
|
// 更新单体电导
|
// this.$refs['monSerBar'].setOption(this.options.monSer.option);
|
},
|
startSearch: function startSearch() {
|
var self = this;
|
// 查询电池组状态
|
this.timer.rtState.start(function () {
|
self.searchRtState();
|
}, 4000);
|
// 查询电池组信息
|
this.timer.rtData.start(function () {
|
self.searchRtData();
|
}, 4000);
|
},
|
stopTimers: function stopTimers() {
|
// 关闭页面的计时器
|
this.timer.rtState.stop();
|
this.timer.rtData.stop();
|
},
|
setBlock: function setBlock() {
|
this.block.tabMain = this.$refs.tabMain.offsetHeight;
|
},
|
getTabHt: function getTabHt(unit) {
|
var result = 0;
|
if (unit) {
|
result = this.block.tabMain - 5 + unit;
|
} else {
|
result = this.block.tabMain - 10;
|
}
|
return result;
|
}
|
},
|
computed: {
|
getTitle: function getTitle() {
|
var title = this.params.battGroupName ? this.params.battGroupName : '未知';
|
return title;
|
},
|
getTestTimeLong: function getTestTimeLong() {
|
var testTimeLong = this.rtState.batt_test_tlong;
|
return formatSeconds(testTimeLong);
|
},
|
getBattState: function getBattState() {
|
// 获取电池信息
|
var test_type = this.rtState.batt_test_type;
|
var state = getBattstate(test_type);
|
return state;
|
}
|
},
|
mounted: function mounted() {
|
loading.hide();
|
var self = this;
|
// 脚本都需要在这里执行
|
var uiTab = bui.tab({
|
id: "#uiTab"
|
});
|
uiTab.on('to', function (index) {
|
if (self.activeTab != index) {
|
var state = self.changeTabsState(index);
|
if (state && !state.init) {
|
state.init = true;
|
self.searchRtData(true);
|
}
|
}
|
});
|
|
this.startSearch();
|
setTimeout(function () {
|
// 设置模块的高度
|
self.setBlock();
|
}, 10);
|
},
|
beforeDestroy: function beforeDestroy() {
|
this.stopTimers();
|
}
|
});
|
},
|
destroyed: function destroyed() {
|
// 销毁vue实例
|
this.vm.$destroy();
|
}
|
});
|