app-xiangsonghua/app-saas-src/script/feature/rtDataRightPanel.js
2024-12-26 17:00:06 +08:00

319 lines
8.2 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

var prId = -1;
var initDdNumberCallbackCount = 0;
var hasLoaded = false;//标记是否已经加载过调度号
var varTypes = {
"AI" : 1,
"DI" : 2
};
var varTypesName = {
1 : "AI",
2 : "DI"
};
var filterResult = {
locName: "高压侧",
ctValue: "1",
ddNumber: "201",
varType: varTypes.AI,
varTypeName: "遥测"
};
var ctValueAndDdNumbersMap = { AI: {}, DI: {} };
/**
* 根据id清空所有子元素
*/
function clearAllChildren(id) {
var tobeRemoved = $("#" + id);
tobeRemoved.empty();
}
/**
* 为单选按钮绑定事件
*/
function bindSwitchButtonEvent(buttons) {
for (var i = 0; i < buttons.length; i++) {
var btn = $(buttons[i]);
btn.on('touchend', switchButtonClicked);
}
}
/**
* 单选按钮被点击
*/
function switchButtonClicked() {
var sender = $(this);
var brothers = sender.parent().children();
for (var i = 0; i < brothers.length; i++) {
var inputElement = $(brothers[i]);
inputElement.attr('class', 'btn');
}
sender.attr('class', 'btn btn-highlight');
var groupName = sender.attr('group');
switch (groupName) {
case "loc":
locationButton_clicked(sender);
break;
case "ddNumber":
ddNumberButton_clicked(sender);
break;
case "type":
typeButton_clicked(sender);
break;
default:
break;
}
}
/**
* 用户点击了位置按钮中的一个
*/
function locationButton_clicked(locButton) {
filterResult.locName = locButton.attr("value");
filterResult.ctValue = locButton.attr("ctvalue");
updateDdNumberView();
}
/**
* 用户点击了调度号中的一个
*/
function ddNumberButton_clicked(ddButton) {
filterResult.ddNumber = ddButton.attr("value");
}
/**
* 用户点击了类型按钮中的一个
*/
function typeButton_clicked(typeButton) {
filterResult.varType = typeButton.attr("tpvalue");
filterResult.varTypeName = typeButton.attr("value");
updateDdNumberView();
}
/**
* 清空界面上的所有调度号
*/
function clearDdnumberGroup() {
clearAllChildren("ddnumber-group");
}
/**
* 弹出提示框
*/
function toast(msg) {
api.toast({
msg: msg,
duration: 3000,
locaiton: 'top'
});
}
/**
* 调接口获取各个分类下的调度号
*/
function initDdNumber(callback) {
ctValueAndDdNumbersMap.AI["1"] = [];//AI高压侧调度号数据
ctValueAndDdNumbersMap.AI["2"] = [];//AI低压侧数据
ctValueAndDdNumbersMap.AI["3"] = [];//AI变压器数据
ctValueAndDdNumbersMap.AI["4"] = [];//AI直流屏数据
ctValueAndDdNumbersMap.AI["5"] = [];//AI信号屏数据
ctValueAndDdNumbersMap.AI["6"] = [];//AI其他数据
ctValueAndDdNumbersMap.DI["1"] = [];//DI高压侧调度号数据
ctValueAndDdNumbersMap.DI["2"] = [];//DI低压侧数据
ctValueAndDdNumbersMap.DI["3"] = [];//DI变压器数据
ctValueAndDdNumbersMap.DI["4"] = [];//DI直流屏数据
ctValueAndDdNumbersMap.DI["5"] = [];//DI信号屏数据
ctValueAndDdNumbersMap.DI["6"] = [];//DI其他数据
initDdNumberCallbackCount = 0;//回调计数清零
var tempVarTypeEnmu = [varTypes.AI, varTypes.DI];
var url = '/ems/rest/ddnum/list';
for (var i = 1; i <= 6; i++) {
for (var j = 0; j < tempVarTypeEnmu.length; j++) {
(function (position, varType) {
var args = { prId: prId, location: position, varType: varType };
//本次循环的类型AI、DI
var tmpType = varTypesName[tempVarTypeEnmu[j]];
$api.get(url, args, function (data, err) {
initDdNumberCallbackCount++;
if (err) {
toast("网络请求失败");
} else {
if (!data.code || data.code != 200) {
toast("服务器响应错误" + (data.code ? (",错误码:" + data.code) : ""));
} else {
if (data.body) {
for (var i = 0; i < data.body.length; i++) {
var element = data.body[i];
ctValueAndDdNumbersMap[tmpType][element.location + ""].push(element.ddNum);
}
}
}
}
if (initDdNumberCallbackCount == 8) {
callback();
}
});
})(i, tempVarTypeEnmu[j]);
}
}
}
/**
* 显示调度号不存在和类型不存在的占位符
*/
function showEmptyDataPlaceHolder() {
//隐藏调度号
$("#ddnumber-group").css("display", "none");
$("#ddnumber-group-none").css("display", "flex");
}
/**
* 隐藏调度号不存在和类型不存在的占位符
*/
function hideEmptyDataPlaceHolder() {
//隐藏调度号
$("#ddnumber-group").css("display", "flex");
$("#ddnumber-group-none").css("display", "none");
}
/**
* 更新界面显示的调度号
*/
function updateDdNumberView() {
//先清空界面上显示的调度号
clearDdnumberGroup();
var ddNumbers = ctValueAndDdNumbersMap[varTypesName[filterResult.varType]][filterResult.ctValue];
if (ddNumbers.length > 0) {
//隐藏占位符
hideEmptyDataPlaceHolder();
for (var i = 0; i < ddNumbers.length; i++) {
var dd = ddNumbers[i];
addDdnumber(dd);
}
//默认选中第一个调度号
var childrens = $("#ddnumber-group").children();
if (childrens.length > 0) {
var first = $(childrens[0]);
first.attr("class", "btn btn-highlight");
ddNumberButton_clicked(first);
}
//为所有的调度号绑定事件
bindSwitchButtonEvent($("#ddnumber-group").children());
} else {
//显示占位符
showEmptyDataPlaceHolder();
//设置调度号为空
filterResult.ddNumber = null;
}
}
/**
* 向调度号列表中添加一个调度号
*/
function addDdnumber(ddnumber) {
var template = '<input class="btn" type="button" value="{dd}" group="ddNumber"/>';
template = template.replace("{dd}", ddnumber);
$("#ddnumber-group").append(template);
}
/**
* 用户点击了取消按钮
*/
function btCancel_clicked() {
api.closeDrawerPane();
}
/**
* 向主窗体发送筛选条件
*/
function sendResult() {
api.sendEvent({
name: 'filterSelectionChanged',
extra: filterResult
});
}
/**
* 用户点击了确定按钮
*/
function btOk_clicked() {
if (filterResult.ddNumber) {
sendResult();
api.closeDrawerPane();
} else {
toast("当前分类下暂无数据");
}
}
/**
* 主窗体通知侧栏加载数据
*/
function rtDataLoadData() {
//标记为已经加载数据
hasLoaded = true;
//获取prId
prId = $api.getStorage('powerRoom').prId;
if (prId > 0) {
//获取各个位置下的调度号
initDdNumber(function () {
updateDdNumberView();
//默认查询高压侧第一个调度号的遥测数据
sendResult();
});
}
}
/**
* 界面显示完成后的回调
*/
function viewAppear(ret, err) {
if (!hasLoaded) {
//如果用户滑动打开了侧栏,但是还没加载过数据,则开始加载
toast("加载中...");
rtDataLoadData();
}
}
apiready = function () {
// 解决iphonex底部标签栏被虚拟home键遮挡
$api.fixTabBar($api.byId('footer'));
var ctrl = {
init: {},
bind: {}
}
ctrl.bind = function () {
//主窗体通知侧栏加载数据
api.addEventListener({ name: 'rtDataLoadData' }, rtDataLoadData);
//界面显示完成后的回调
api.addEventListener({ name: 'viewappear' }, viewAppear);
//为位置和类型绑定事件
bindSwitchButtonEvent($("#location-group").children());
bindSwitchButtonEvent($("#type-group").children());
//为确定和取消绑定事件
$("#btn-cancel").on("touchend", btCancel_clicked);
$("#btn-ok").on("touchend", btOk_clicked);
}
ctrl.init = function () {
ctrl.bind();
}
ctrl.init();
}