emsApplication/applications/WebConfigure/web/js/directives.js

15786 lines
684 KiB
JavaScript
Raw Normal View History

2024-05-24 12:19:45 +08:00
//debugger;
"use strict";
var nurseDirective = angular.module("nurseApp.directives", []);
nurseDirective.directive('chart', function() {
return {
restrict: 'E',
template: '<div></div>',
scope: {
chartData: "=value",
chartObj: "=obj"
},
transclude: true,
replace: true,
link: function($scope, $element, $attrs) {
//Update when charts data changes
$scope.$watch(function(){
if($scope.chartData != undefined && $scope.chartData.series.length > 0)
return 'chartData'+$scope.chartData.series[0].data;
}, function(value) {
if (!value)
return;
// Initiate the chartData.chart if it doesn't exist yet
$scope.chartData.chart = $scope.chartData.chart || {};
// use default values if nothing is specified in the given settings
$scope.chartData.chart.renderTo = $scope.chartData.chart.renderTo || $element[0];
if ($attrs.type)
$scope.chartData.chart.type = $scope.chartData.chart.type || $attrs.type;
if ($attrs.height)
$scope.chartData.chart.height = $scope.chartData.chart.height || $attrs.height;
if ($attrs.width)
$scope.chartData.chart.width = $scope.chartData.chart.type || $attrs.width;
$scope.chartData.chart. backgroundColor= 'rgba(0,0,0,0)';
var highchartsOptions = Highcharts.setOptions({
lang: {
loading: '加载中...',
months: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],
shortMonths: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],
weekdays: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'],
exportButtonTitle: '导出',
printButtonTitle: '打印',
rangeSelectorFrom: '从',
rangeSelectorTo: '到',
rangeSelectorZoom: "缩放",
downloadPNG: '下载PNG格式',
downloadJPEG: '下载JPEG格式',
downloadPDF: '下载PDF格式',
downloadSVG: '下载SVG格式',
resetZoom : "还原大小",
resetZoomTitle : "还原大小"
}
});
$scope.chartObj = new Highcharts.Chart($scope.chartData);
});
}
};
});
nurseDirective.directive('multiselect', function($q) {
return {
restrict: 'E',
require: 'ngModel',
scope: {
language: "=",
selectedLabel: "@",
availableLabel: "@",
displayAttr: "@",
available: "=",
model: "=ngModel"
},
templateUrl: 'partials/multiSelect.html',
link: function(scope, elm, attrs) {
scope.selected = {
available: [],
current: []
};
/* Handles cases where scope data hasn't been initialized yet */
var dataLoading = function(scopeAttr) {
var loading = $q.defer();
if (scope[scopeAttr]) {
loading.resolve(scope[scopeAttr]);
} else {
scope.$watch(scopeAttr, function(newValue, oldValue) {
if (newValue !== undefined)
loading.resolve(newValue);
});
}
return loading.promise;
};
/* Filters out items in original that are also in toFilter. Compares by reference. */
var filterOut = function(original, toFilter) {
var filtered = [];
angular.forEach(original, function(entity) {
var match = false;
for (var i = 0; i < toFilter.length; i++) {
if (toFilter[i][attrs.displayAttr] == entity[attrs.displayAttr]) {
match = true;
break;
}
}
if (!match) {
filtered.push(entity);
}
});
return filtered;
};
scope.refreshAvailable = function() {
scope.available = filterOut(scope.available, scope.model);
scope.selected.available = [];
scope.selected.current = [];
};
scope.add = function() {
if(!scope.available) scope.available = scope.selected.available;
else scope.available = scope.available.concat(scope.selected.available);
scope.model = filterOut(scope.model, scope.selected.available);
scope.refreshAvailable();
};
scope.remove = function() {
scope.model = scope.model.concat(scope.selected.current);
scope.available = filterOut(scope.available, scope.selected.current);
scope.refreshAvailable();
};
$q.all([dataLoading("model"), dataLoading("available")]).then(function(results) {
scope.refreshAvailable();
});
scope.$watch('signalValue', function(newValue, oldValue, scope) {
var value = newValue;
})
}
};
});
nurseDirective.directive('multiselects', function($q) {
return {
restrict: 'E',
require: 'ngModel',
scope: {
language: "=",
selectedLabel: "@",
availableLabel: "@",
displayAttr: "@",
available: "=",
model: "=ngModel"
},
templateUrl: 'partials/multiSelects.html',
link: function(scope, elm, attrs) {
scope.selected = {
available: [],
current: []
};
/* Handles cases where scope data hasn't been initialized yet */
var dataLoading = function(scopeAttr) {
var loading = $q.defer();
if (scope[scopeAttr]) {
loading.resolve(scope[scopeAttr]);
} else {
scope.$watch(scopeAttr, function(newValue, oldValue) {
if (newValue !== undefined)
loading.resolve(newValue);
});
}
return loading.promise;
};
/* Filters out items in original that are also in toFilter. Compares by reference. */
var filterOut = function(original, toFilter) {
var filtered = [];
angular.forEach(original, function(entity) {
var match = false;
for (var i = 0; i < toFilter.length; i++) {
if (toFilter[i][attrs.displayAttr] == entity[attrs.displayAttr]) {
match = true;
break;
}
}
if (!match) {
filtered.push(entity);
}
});
return filtered;
};
scope.refreshAvailable = function() {
scope.available = filterOut(scope.available, scope.model);
scope.selected.available = [];
scope.selected.current = [];
};
scope.add = function() {
if(!scope.available) scope.available = scope.selected.available;
else scope.available = scope.available.concat(scope.selected.available);
scope.model = filterOut(scope.model, scope.selected.available);
scope.refreshAvailable();
};
scope.remove = function() {
scope.model = scope.model.concat(scope.selected.current);
scope.available = filterOut(scope.available, scope.selected.current);
scope.refreshAvailable();
};
$q.all([dataLoading("model"), dataLoading("available")]).then(function(results) {
scope.refreshAvailable();
});
scope.$watch('signalValue', function(newValue, oldValue, scope) {
var value = newValue;
})
}
};
});
nurseDirective.directive('basesignalsetter', ['$modal', 'baseTypeService','global','ConfigureMoldService','balert',
function($modal, baseTypeService,global,ConfigureMoldService,balert) {
return {
restrict: 'A',
link: function(scope, element, attrs) {
var setDlg = null;
function getPartConfig(diagram, id) {
var found = _.find(diagram.parts, function(part) {
return part.id === id;
});
return found;
}
/******************* 过滤设备列表 & 加载信号列表 **************************/
function initDevice(){
if(scope.Topology == undefined){
scope.Topology = {};
}
var parentId = scope.diagram.parentId;
if(scope.diagram.deviceBaseTypeId == "1004" ||
(parseInt(scope.diagram.deviceBaseTypeId) >= 8888 && parseInt(scope.diagram.deviceBaseTypeId) < 9999))
parentId = "";
ConfigureMoldService.GetPartEquipments(parentId).then(function(data){
scope.deviceList = _.sortBy(data,function(item){return item.configName;});
var partid= element.parent().parent().attr("partid");
scope.partid=partid;
var obj = getPartConfig(scope.diagram, scope.partid);
if(global.getpara("DI",obj.binding))
scope.Topology.DeviceId = global.getpara("DI",obj.binding);
else
scope.Topology.DeviceId = scope.diagram.deviceId;
initList(scope.Topology.DeviceId);
});
//region 修改信号名称
var modifyDlg = $modal({
scope: scope,
templateUrl: 'partials/modifySignalName.html',
show: false
});
scope.modifySignalName = function(){
scope.modifySelects = scope.bind.selectedsigs;
modifyDlg.$promise.then(modifyDlg.show);
};
scope.modify = function(){
var arr = [];
scope.displayNames = "";//baseTypeId.baseTypeName-...
//获取input标签的id和value
var modifys = $(".modify-signal-table").find(".modify-value");
for(var i = 0; i < modifys.length; i++){
if(modifys[i]){
arr.push({
id : modifys[i].id,
value : modifys[i].value
});
}
}
//修改列表
if(scope.modifySelects){
scope.modifySelects.forEach(function(item){
arr.forEach(function(a){
if(item.baseTypeId == a.id && item.name != a.value){
item.baseTypeName = a.value;
scope.displayNames += a.id+"."+a.value+"-";
}
});
});
}
scope.bind.selectedsigs = scope.modifySelects;
modifyDlg.hide();
};
//endregion
}
/*********************************************************************/
//show list
function initList(id) {
baseTypeService.getSignalBaseTypesByDeviceType(id).then(function(data) {
var cfg = getPartConfig(scope.diagram, scope.partid);
var bs = cfg.binding.split("\\|");
scope.groupname = global.getpara("Name",cfg.options);
scope.background = global.getpara("Background",cfg.options);
scope.displayNames = global.getpara("DisplayName",cfg.options);
var displays = scope.displayNames.split("-");
var list = data;
var selected = [];
_.each(data, function(sig) {
var found = _.find(bs, function(b) {
var index = b.indexOf(sig.baseTypeId + "");
if (index > 0) return true;
return false;
});
if (found) {
//修改显示名称
if(displays){
displays.forEach(function(dis){
if(dis.indexOf(".") > -1){
var dev = dis.split(".");
if(sig.baseTypeId == dev[0])
sig.baseTypeName = dev[1];
}
});
}
selected.push(sig);
}
});
if(list == undefined || list.length == undefined) return;
for(var i=0;i<selected.length;i++){
for(var j=0;j<list.length;j++){
if(list[j]==selected[i])
list.splice(j,1);
}
}
scope.bind = {
siglist: list,
selectedsigs: selected
};
});
}
element.bind('click', function() {
initDevice();
setDlg = $modal({
scope: scope,
templateUrl: 'partials/basesignalsetter.html',
show: false
});
setDlg.$promise.then(setDlg.show);
//save selected
scope.namechange = function(value){
scope.groupname = value;
};
scope.changeBackgrund = function(value){
scope.background = value;
};
scope.changeDevice = function(id){
baseTypeService.getSignalBaseTypesByDeviceType(id).then(function(data) {
/*var list = data;
scope.bind = {
siglist: list,
selectedsigs: undefined
};*/
scope.bind = retSelects(data,scope.bind.selectedsigs);
});
};
function retSelects(data,sigs){
var bind = {siglist:data,selectedsigs: []};
if(data){
data.forEach(function(item){
if(sigs){
sigs.forEach(function(sig){
if(item.baseTypeId == sig.baseTypeId)
bind.selectedsigs.push(item);
});
}
});
for(var i = 0; i < bind.selectedsigs.length; i++){
for(var j = 0; j < bind.siglist.length; j++){
if(bind.selectedsigs[i].baseTypeId == bind.siglist[j].baseTypeId)
bind.siglist.splice(j,1);
}
}
}
return bind;
}
scope.save = function() {
if(scope.bind.selectedsigs == undefined || scope.bind.selectedsigs.length == 0){
//'请选择信号!'
balert.show('danger', scope.languageJson.Configuration.SignalControl.ErrorPrompt,3000);
return;
}
var cfg = getPartConfig(scope.diagram, scope.partid);
var bind = _.reduce(scope.bind.selectedsigs, function(memo, sig) {
return memo + "BS:" + sig.baseTypeId + "|";
}, '');
cfg.binding = bind+"DI:"+scope.Topology.DeviceId;
cfg.options = "Name:"+scope.groupname+"|Background:"+scope.background+"|DisplayName:"+scope.displayNames;
scope.resetParts();
setDlg.hide();
};
});
}
};
}
]);
nurseDirective.directive("signalgroup", ['diagramService','activeDeviceService','global',
function(diagramService,activeDeviceService,global) {
var linkFn = function(scope, elem, attrs, modelCtrl) {
var cfg = diagramService.initPart(scope, elem, attrs);
if (cfg === undefined) return;
var name = global.getpara("Name",cfg.options);
var background = global.getpara("Background",cfg.options);
var displayNames = global.getpara("DisplayName",cfg.options);
var displays = displayNames.split("-");
//标题
var titleHeight = 50;
if(name == "" || name == undefined) {
elem.find(".signal_title").hide();
titleHeight = 0;
}else
elem.find(".groupname").html(name);
//背景
if(background == undefined)
elem.find(".signal-body").addClass("configure_bg");
else
elem.find(".signal-body").addClass(background);
var height = elem.find(".signal-body")[0].scrollHeight;
elem.find(".signal-body-table").css("height",(height - titleHeight)+"px");
scope.partid = attrs.partid;
scope.$watch('diagram.edit', function(newValue, oldValue, scope) {
diagramService.updateEditStatus(elem, newValue);
});
activeDeviceService.getActiveDevices().then(function(data) {
scope.devices = data;
});
scope.$watch('binddata', function(newValue, oldValue, scope) {
var array = [];
_.find(newValue, function(data) {
if(data.partId == scope.partid && data.signalName != ""){
var is = false;
if(scope.devices)
scope.devices.forEach(function(item){
if(item.status == "Disconnect" && data.deviceId == item.id)
is = true;//通讯中断
});
if(data.alarmSeverity == 255){
if(is) data.className = "signal-value-disconnect";//data.backgroundColor = "background-color:#575A5E";//通讯中断 灰色
else data.className = "signal-value-normal";//data.backgroundColor = "background-color:#5B9338";
}else if(data.alarmSeverity == -255 || data.alarmSeverity === ''){
//data.backgroundColor = "background-color:#575A5E";//signal-value-disconnect
data.className = "signal-value-disconnect";
if(data.currentValue == "")
data.currentValue = scope.languageJson.Loading+"...";//加载中
}else data.className = "signal-value-alarm";//data.backgroundColor = "background-color:#A02B31";
if(displays){
displays.forEach(function(dis){
if(dis.indexOf(".") > -1){
var dev = dis.split(".");
if(data.baseTypeId == dev[0])
data.baseTypeName = dev[1];
}
});
}
array.push(data);
}
});
scope.signalList = array;
//组态背景高度自适应
/*var oldHeight = elem.height()-20;
var top = (name == "" || name == undefined) ? 20 : 70;
var newHeight = top + array.length*42;
if(newHeight > oldHeight)
elem.find(".signal-body").css("height",newHeight+"px");
else
elem.find(".signal-body").css("height","calc(100% - 19px)");*/
});
};
return {
scope: true,
restrict: "AE",
replace: true,
templateUrl: "partials/signalgroup.html",
compile: function(elem, attrs) {
elem.find("tbody tr:first").attr("ng-repeat",
"sig in signalList | filter:{ partId: '" + attrs.partid + "'}");
return linkFn;
}
};
}
]);
nurseDirective.directive('ngfile', ['$parse', function($parse) {
return {
restrict: 'A',
link: function(scope, element, attrs) {
element.bind('change', function() {
scope.$apply(function() {
scope.$emit("fileSelected", element[0].files[0]);
});
});
}
};
}]);
nurseDirective.directive('ngfile2', ['$parse', function($parse) {
return {
restrict: 'A',
link: function(scope, element, attrs) {
element.bind('change', function() {
scope.$apply(function() {
scope.$emit("fileSelected2", element[0].files[0]);
});
});
}
};
}]);
nurseDirective.directive('resizer', ['$document', '$window', 'diagramService',
function($document, $window, diagramService) {
return {
restrict: 'A',
link: function($scope, $element, $attrs) {
var m_type, m_ctrl;
var moving = 0;
var offsetX = 0;
var offsetY = 0;
var pageX = 0;
var pageY = 0;
// var menuWidth = 200;
// var barHeight = 54;
// var windowWidth = $(document.body).width();
// var containerWidth = $(document.body).width() - menuWidth;
// var windowHeight = $(document.body).height();
// var elTop, elLeft;
var r = document.createElement("div");
var b = document.createElement("div");
r.style.cursor = "e-resize";
r.style.backgroundColor = "#0F5989";
r.style.position = "absolute";
r.style.right = "0px";
r.style.top = "0px";
r.style.height = "100%";
r.style.width = "5px";
r.className = "resizer";
b.style.cursor = "s-resize";
b.style.backgroundColor = "#0F5989";
b.style.position = "absolute";
b.style.right = "0px";
b.style.bottom = "0px";
b.style.height = "5px";
b.style.width = "100%";
b.className = "resizer";
$element.append(r);
$element.append(b);
// 为调整控制元素设置拖拽处理
r.addEventListener('mousedown', function(e) {
if(sessionStorage.getItem("isLock") == "true") return;
on_mousedown(e, r, 'r');
});
b.addEventListener('mousedown', function(e) {
if(sessionStorage.getItem("isLock") == "true") return;
on_mousedown(e, b, 'b');
});
// 鼠标移开保存控件修改
r.addEventListener('mouseup', function(e) {
on_mouseup();
});
b.addEventListener('mouseup', function(e) {
on_mouseup();
});
$(document).on("mousemove", mousemove);
$(document).on("mouseup", mouseup);
// 页面鼠标移动侦听处理
function mousemove(e) {
//var e = window.event || e;
if (!e) return;
pageX = e.originalEvent.pageX;
pageY = e.originalEvent.pageY;
// if (!e) var e = window.event;
// if (e.pageX || e.pageY) {
// pageX = e.pageX;
// pageY = e.pageY;
// } else if (e.clientX || e.clientY) {
// pageX = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
// pageY = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
// }
}
// 鼠标弹起处理
//document.onkeyup = document.onmouseup = function(e) {
function mouseup(e) {
//如果鼠标右键不处理,避免和右键编辑状态导致无法结束问题
if (e.which && e.which == 1) {
// old netsapce implementation
clearInterval(moving);
moving = 0;
} else if (e.button && e.button == 0) {
// for microsoft or W3C model implementation
clearInterval(moving);
moving = 0;
}
}
// 在控制元素中按下
function on_mousedown(e, ctrl, type) {
var e = e || window.event;
//e.preventDefault();
//计算出鼠标页面位置 和 当前元素位置的差 = 鼠标相对元素的位置
// var mTop = parseFloat($element[0].style.marginTop) / 100;
// var mLeft = parseFloat($element[0].style.marginLeft) / 100;
// var elementContainerTop = mTop * windowWidth;
// var elementContainerLeft = mLeft * windowWidth;
// elTop = elementContainerTop + barHeight + barHeight; // why twice? i don't know
// elLeft = elementContainerLeft + menuWidth;
offsetX = $element.offset().left;
offsetY = $element.offset().top;
m_ctrl = ctrl;
m_type = type;
//angular.element(document.querySelectorAll(".resizer")).css("z-index", "0");
//ctrl.style.zIndex = "10000";
//console.log(e.pageY + ' ' + offsetY + ' ' + $element.offset());
// 开始处理移动事件
if (moving) {
clearInterval(moving);
moving = 0;
} else
moving = setInterval(on_move, 10);
}
function on_mouseup(){
diagramService.updateParts($scope.diagram, $element);
}
function on_move() {
if (moving) {
var y = pageY - offsetY + 5;
var x = pageX - offsetX + 5;
//console.log(x + ' ' + pageX + ' ' + y + ' ' + pageY);
switch (m_type) {
case 'r':
//var containerX = pageX - x + 5;
//var mX = parseFloat(containerX / windowWidth) * 100 + "%";
//$element[0].style.width = mX;
//m_ctrl.style.left = x + "px";
$element[0].style.width = x + "px";
break;
case 'b':
//var containerY = pageY - y + 5;
//var mY = parseFloat(containerY / getHeight()) * 100 + "%";
//console.log(containerY + ' ' + mY + ' ' + getHeight() + ' ' + elTop + ' ' + pageY);
//$element[0].style.height = mY;
$element[0].style.height = y + "px";
break;
}
}
}
$scope.$watch('diagram.edit', function(newValue, oldValue, scope) {
if (!newValue) {
clearInterval(moving);
moving = 0;
$(r).hide();
$(b).hide();
} else {
$(r).show();
$(b).show();
}
});
//清除document上的绑定
$scope.$on('$destroy', function() {
//console.log("destroy");
$(document).off("mousemove", mousemove);
$(document).off("mouseup", mouseup);
diagramService.updateParts($scope.diagram, $element);
});
}
};
}]);
nurseDirective.directive("dragger", ['$document','diagramService',
function($document, diagramService) {
return {
restrict: "A",
link: function($scope, $element, $attr) {
// var elementTop;
// var elementLeft;
var offsetX = 0,
offsetY = 0;
// var menuWidth = 200;
// var barHeight = 54;
// var windowWidth = $(document.body).width();
// var containerWidth = $(document.body).width() - menuWidth;
// var windowHeight = $(document.body).height();
var newElement = $element.find(".panel-heading");
newElement.css("cursor", "move");
newElement.on("mousedown", function($event) {
if(sessionStorage.getItem("isLock") == "true") return;
$event.preventDefault();
// To keep the last selected box in front
//angular.element(document.querySelectorAll(".contentEditorBox")).css("z-index", "0");
//$element.css("z-index", "10000");
// var mTop = parseFloat($element[0].style.marginTop) / 100;
// var mLeft = parseFloat($element[0].style.marginLeft) / 100;
// var elementContainerTop = mTop * windowWidth;
// var elementContainerLeft = mLeft * windowWidth;
// var elTop = elementContainerTop + barHeight + barHeight; // why twice? i don't know
// var elLeft = elementContainerLeft + menuWidth;
//console.log(mTop + ' ' + elementContainerTop + ' ' + elTop + ' ' + $event.pageY);
//console.log(mLeft + ' ' + elementContainerLeft + ' ' + elLeft + ' ' + $event.pageX);
offsetX = $event.pageX - $element.offset().left;
offsetY = $event.pageY - $element.offset().top;
//console.log($event.pageY + " " + offsetY);
//console.log($event.pageX + " " + offsetX);
$document.on("mousemove", mousemove);
$document.on("mouseup", mouseup);
});
function mousemove($event) {
var y = $event.pageY - offsetY;
var x = $event.pageX - offsetX;
// var containerY = y - barHeight * 2;
// var mY = parseFloat(containerY / windowWidth) * 100 + "%";
// var containerX = x - menuWidth;
// var mX = parseFloat(containerX / windowWidth) * 100 + "%";
// $element.css({
// "margin-top": mY,
// "margin-left": mX
// });
$element.css({
left: x + "px",
top: y + "px"
});
}
function mouseup() {
$document.off("mousemove", mousemove);
$document.off("mouseup", mouseup);
diagramService.updateParts($scope.diagram, $element);
}
}
};
}
]);
nurseDirective.directive("imagepart", ['diagramService',
function(diagramService) {
return {
restrict: "AE",
replace: true,
templateUrl: "partials/imagepart.html",
link: function(scope, elem, attrs, modelCtrl) {
var cfg = diagramService.initPart(scope, elem, attrs);
if (cfg === undefined) return;
scope.partid = attrs.partid;
var el = elem.find('.panel-body');
el.css({
"background-image": "url('" + cfg.options + "')"
});
scope.$watch('diagram.edit', function(newValue, oldValue, scope) {
diagramService.updateEditStatus(elem, newValue);
});
}
};
}
]);
nurseDirective.directive('imagepartsetter', ['$modal','uploadService','balert','ImageManageService',
function($modal,uploadService,balert,ImageManageService) {
return {
restrict: 'A',
link: function(scope, element) {
var setDlg = null;
var showImgFileDlg = undefined;
function getPartConfig(diagram, id) {
var found = _.find(diagram.parts, function(part) {
return part.id === id;
});
return found;
}
function initFunction(){
scope.imgFilePath = undefined;
scope.showImgFile = function(){
scope.imgFiles = {
catalog : "img/diagram",
imageFile : undefined
};
showImgFileDlg = $modal({
scope: scope,
templateUrl: 'partials/showImgFile.html',
show: false
});
showImgFileDlg.$promise.then(showImgFileDlg.show);
scope.changeCatalog(scope.imgFiles.catalog);
};
scope.changeCatalog = function(catalog){
ImageManageService.LoadImagesByPath(catalog).then(function(data){
scope.ImageFiles = data;
});
};
scope.clickImage = function(imageFile,$event){
scope.imgFiles.imageFile = imageFile;
$($event.currentTarget).parent().find('div').removeClass("select-image");
$($event.currentTarget).addClass("select-image");
};
scope.selectImageFile = function(){
if(scope.imgFiles == undefined || scope.imgFiles.imageFile == undefined){
//'请选择图片。'
balert.show('danger', scope.languageJson.Configuration.LocalImage.SelectError,3000);
return;
}
scope.imgFilePath = scope.imgFiles.imageFile;
showImgFileDlg.hide();
};
}
element.bind('click', function() {
initFunction();
var partid= element.parent().parent().attr("partid");
scope.partid=partid;
var cofg = getPartConfig(scope.diagram, scope.partid);
scope.imagepart=cofg.options;
scope.file = undefined;
scope.upload = function() {
var file = scope.file;
if (file === undefined) return;
if(file.size>512000) {
//'修改的图片不能大于500K,请压缩尺寸后再修改。'
balert.show('danger', scope.languageJson.Configuration.ImageControl.SizeError,3000);
return;
}
scope.loading = true;
uploadService.uploadFile(scope.
file).then(function(data) {
//uploadService.deleteUploadFile($scope.diagram.page.bgImage);
cofg.options = scope.imagepart = data;
//'修改成功。'
balert.show('success', scope.languageJson.Configuration.ImageControl.Succeed,2000);
scope.resetParts();
setDlg.hide();
scope.loading = false;
});
};
scope.uploadImgFile = function(){
if(scope.imgFilePath == undefined) return;
cofg.options = scope.imagepart = scope.imgFilePath;
//'修改成功。'
balert.show('success', scope.languageJson.Configuration.ImageControl.Succeed,2000);
scope.resetParts();
setDlg.hide();
};
setDlg = $modal({
scope: scope,
templateUrl: 'partials/imagepartsetter.html',
show: false
});
setDlg.$promise.then(setDlg.show);
});
}
}
}
]);
nurseDirective.directive("linkbuttonpart", ['diagramService','global','balert','$state','$stateParams','$rootScope','deviceService','SystemSetting',
function(diagramService,global,balert,$state,$stateParams,$rootScope,deviceService,SystemSetting) {
return {
restrict: "AE",
replace: true,
scope:true,
templateUrl: "partials/linkbuttonpart.html",
link: function(scope, elem, attrs, modelCtrl) {
var cfg = diagramService.initPart(scope, elem, attrs);
if (cfg === undefined) return;
scope.partid = attrs.partid;
scope.url=global.getpara('Url',cfg.options);
scope.target=global.getpara('Target',cfg.options);
var parentId = global.getpara('ParentId',cfg.options);
//scope.showReturnButton = undefined;
if(scope.target == "_configure") {
elem.find(".linkbutton").hide();//隐藏a标签
var configId = global.getpara('ConfigId',cfg.options);
var deviceId = global.getpara('Dev',cfg.options);
var devBaseTypeId = global.getpara('DevBaseType',cfg.options);
var configUrl = global.getpara('ConfigUrl',cfg.options);
scope.showModalBox = function () {
defaultSelect(configUrl);
window.location.href = configUrl;
sessionStorage.setItem("executedDiagramView", true);
var type = "home";
if(configUrl.indexOf("/device") > -1 || configUrl.indexOf("/structure") > -1 || configUrl.indexOf("/mdcdiagram") > -1){
type = "device";
sessionStorage.setItem("executedDiagramView", false);
}
// $rootScope.PathType = type;
// localStorage.setItem("pathType",type);
// $rootScope.$emit("WatchPathType", type);
setSelectMnue(configId);
//var dia = $stateParams.diagram;
//sessionStorage.setItem("LinkPath",deviceId+"|"+configId+"|"+devBaseTypeId);
setDiagramView(deviceId,configId,devBaseTypeId,configUrl);//'171323003','100000015'
//$("#return-button").show();//显示返回按钮
};
function setSelectMnue(configId){
deviceService.GetShowConfigureMold().then(function (data) {
_.find(data,function(item){
if(item.configId == configId){
$rootScope.$emit("selectMenu", item.configId,undefined);
return;
}else{
if(item.parts.length > 0){
_.find(item.parts,function(part){
if(part.configId == configId){
$rootScope.$emit("selectMenu", item.configId,part.configId);
return;
}
});
}
}
});
});
}
}
function setDiagramView(devId,parentId,devBaseType,configUrl) {
sessionStorage.setItem("currDeviceId", devId);
var param = devBaseType + '.' + devId;
if(devBaseType.indexOf(".table") != -1)
param = 'table.' + devId;
var cfg = {};
diagramService.getDiagramConfig(param).then(function(data) {
if (data){
cfg.diagram = data;
cfg.diagram.deviceBaseTypeId = devBaseType;
cfg.diagram.deviceId = devId;
cfg.diagram.parentId = parentId;
if(configUrl.indexOf("mdcdiagram") != -1){
$stateParams.diagramview = "mdcdiagram"
}else{
$stateParams.diagramview = 'device.diagram';
}
$state.go($stateParams.diagramview, cfg);
}
});
}
function defaultSelect(configUrl){
deviceService.GetShowConfigureMold().then(function(data){
var x = 0,y = 0;
_.find(data,function(item){
if(item.configUrl == configUrl){
$rootScope.watchLinkButton = x+"|-1";
return;
}else{
if(item.parts){
y = 0;
_.find(item.parts,function(part){
if(part.configUrl == configUrl){
$rootScope.watchLinkButton = x+"|"+y;
return;
}
y ++;
});
}
}
x ++;
});
});
}
if(scope.target == "_procedure") {
elem.find(".linkbutton").hide();//隐藏a标签
elem.find(".procedure").css("display","block");//隐藏a标签
//elem.find(".procedure")[0].setAttribute("href","myprotocol://");
scope.showModalBox = function ($event) {
var partId = $($event.currentTarget).parent().attr("partid");
var cfg = getPartConfig(scope.diagram, partId);
var filePath = global.getpara('FilePath',cfg.options);
var prompt = scope.languageJson.Configuration.LinkControl.Prompt;
SystemSetting.StartProtocol(filePath).then(function(res){
if(res == "OK"){
balert.show('success', prompt.Succeed, 3000);
}else{
balert.show('danger', prompt.Failure+res, 3000);
}
});
};
}
function getPartConfig(diagram, id) {
var found = _.find(diagram.parts, function(part) {
return part.id === id;
});
return found;
}
scope.$watch('diagram.edit', function(newValue, oldValue, scope) {
diagramService.updateEditStatus(elem, newValue);
});
}
};
}
]);
nurseDirective.directive('linkbuttonsetter', ['$modal','deviceService','global',
function($modal,deviceService,global) {
return {
restrict: 'A',
link: function(scope, element) {
var setDlg = null;
var urls,targets,partId,devBaseType;
function getPartConfig(diagram, id) {
var found = _.find(diagram.parts, function(part) {
return part.id === id;
});
return found;
}
function initFunction(){
var cfg = getPartConfig(scope.diagram, scope.partid);
scope.target = global.getpara('Target',cfg.options);
scope.url = global.getpara('Url',cfg.options);
scope.parentId = global.getpara('ParentId',cfg.options);
if(scope.target == "_configure") {
scope.configId = global.getpara('ConfigId', cfg.options);
scope.deviceId = global.getpara('Dev', cfg.options);
scope.devBaseTypeId = global.getpara('DevBaseType', cfg.options);
}else if(scope.target == "_procedure"){
scope.updPart = {};
scope.updPart.filePath = global.getpara('FilePath',cfg.options);
}
scope.ConfigureParts = [];
deviceService.GetShowConfigureMold().then(function(data){
scope.ConfigureMolds = data;
selectConfigure(scope.configId,data);
});
scope.changeParent = function(data){
scope.partId = undefined;
var obj = angular.fromJson(data);
scope.part = data;
if(obj.parts){
scope.ConfigureParts = obj.parts;
scope.parentId = obj.configId;
}else
scope.ConfigureParts = [];
};
scope.changePart = function(data){
scope.part = data;
};
function selectConfigure(configId,datas){
if(scope.configId){
var obj = [];
if(datas){
_.find(datas,function(item){
if(item.configId == configId){
scope.parentCfgId = configId;
scope.currentId = '-1';
scope.ConfigureParts = item.parts;
scope.part = angular.toJson(item);
return;
}else{
if(item.parts){
_.find(item.parts,function(pi){
if(pi.configId == configId){
scope.parentCfgId = item.configId;
scope.currentId = configId;
scope.ConfigureParts = item.parts;
scope.part = angular.toJson(item);
return;
}
});
}
}
});
}
}
}
}
element.bind('click', function() {
initFunction();
setDlg = $modal({
scope: scope,
templateUrl: 'partials/linkbuttonsetter.html',
show: false
});
setDlg.$promise.then(setDlg.show);
scope.urlchange = function(data){
urls = data;
};
scope.targetchange = function(data){
targets = data;
};
scope.changePart = function(data){
scope.part = data;
/*var cfg = angular.fromJson(data);
partId = cfg.deviceId;
devBaseType = cfg.baseTypeId;*/
};
scope.save = function() {
if(targets == '_configure' &&
(scope.parentId == undefined || scope.part == undefined)){
return;
}
var cofg = getPartConfig(scope.diagram, scope.partid);
urls = (urls == undefined)?scope.url:urls;
targets = (targets == undefined)?scope.target:targets;
var options = ""
if(scope.target == "_procedure"){
options="Url:"+urls+"|Target:"+targets+
"|ParentId:"+scope.parentId+createPartStr(targets,scope.part)+
"|FilePath:"+((scope.updPart == undefined)?"":scope.updPart.filePath);
}else{
options="Url:"+urls+"|Target:"+targets+
"|ParentId:"+scope.parentId+createPartStr(targets,scope.part);
}
cofg.options=options;
scope.resetParts();
setDlg.hide();
};
function createPartStr(target,part){
if(target != "_configure") return "";
var cfg = angular.fromJson(part);
if(cfg.deviceId == "" && cfg.baseTypeId == ""){
cfg.deviceId = cfg.configUrl.replace(/[^0-9]/ig,'');
cfg.baseTypeId = cfg.deviceId;
}
return "|ConfigId:"+cfg.configId+"|Dev:"+cfg.deviceId+"|DevBaseType:"+cfg.baseTypeId+"|ConfigUrl:"+cfg.configUrl;
}
});
}
}
}
]);
nurseDirective.directive("camerapart", ['diagramService','global','$modal','CameraService',
function(diagramService,global,$modal,CameraService) {
return {
restrict: "AE",
replace: true,
scope:true,
templateUrl: "partials/camerapart.html",
link: function(scope, elem, attrs, modelCtrl) {
scope.isHide = true;
var cfg = diagramService.initPart(scope, elem, attrs);
if (cfg === undefined) return;
scope.partid = attrs.partid;
var setDlg = null;
var el = elem.find('.panel-body');
var img=global.getpara("Img",cfg.options);
el.css({
"background-image": "url('" + img + "')"
});
var cameraid=global.getpara("cameraid",cfg.options);
var camera={};
CameraService.getCamera(cameraid).then(function(data) {
if(data=="") return;
camera=eval( "(" + data + ")" );
});
var ele=elem.find(".panel-body");
ele.bind("click",function(){
setDlg = $modal({
scope: scope,
templateUrl: 'partials/cameradialog.html',
show: false
});
setDlg.$promise.then(setDlg.show);
preview(camera);
});
scope.fullscreen=function(){
iframecamera.window.fullscreen();
};
function preview(camera){
var ip=camera.ip,
port=camera.port,
username=camera.username,
pwd=camera.userpwd,
channelno=camera.channum;
scope.src="partials/camerapreview.html?ip="+ip+"&port="+port+"&user="+username+"&pwd="+pwd+"&channo="+channelno;
}
scope.$watch('diagram.edit', function(newValue, oldValue, scope) {
diagramService.updateEditStatus(elem, newValue);
});
}
};
}
]);
nurseDirective.directive("controlpart", ['$rootScope','diagramService','devcontrolService','global','$modal','baseTypeService','balert','userService','base64',
function($rootScope,diagramService,devcontrolService,global,$modal,baseTypeService,balert,userService,base64) {
return {
restrict: "AE",
replace: true,
templateUrl: "partials/controlpart.html",
link: function(scope, elem, attrs) {
var cfg = diagramService.initPart(scope, elem, attrs);
if (cfg === undefined) return;
scope.partid = attrs.partid;
var setDlg = null;
var controlinfo = {};
controlinfo.controlid = global.getpara('BS',cfg.binding);
var dId = global.getpara('DeviceId',cfg.options);
controlinfo.deviceid = (dId == "" ? scope.diagram.deviceId : dId);
controlinfo.min = global.getpara("Min",cfg.options);
controlinfo.max = global.getpara("Max",cfg.options);
controlinfo.styleType = global.getpara("StyleType",cfg.options);
controlinfo.types = {};
controlinfo.types.control = {};
controlinfo.commdanType = global.getpara('CommdanType',cfg.options);//1遥调 、2遥控
controlinfo.values = global.getpara('Values',cfg.options);
//控制样式
if(controlinfo.styleType == 'DataControl') {//数值控制
elem.find(".remote-control").hide();
elem.find(".remote-regulating").show();
diagramService.GetControlValueByBaseType(controlinfo.deviceid,controlinfo.controlid).then(function(data){
if(controlinfo.commdanType == 1){
elem.find(".control-name").text(data.name);
elem.find(".control-value").val(data.value);
elem.find(".control-meaning").hide();
}else{
elem.find(".control-name").text(data.name);
var obj = getMeaningByValue(controlinfo.values,data.value);
elem.find(".control-value").hide();
elem.find(".control-value").val(obj.value);
elem.find(".control-meaning").val(obj.name);
}
});
}else{//遥控/遥调 | 控制联动
if(controlinfo.commdanType === "2"){
elem.find(".switch-control").show();
var switchControl = {
value1: global.getpara('Ctlvalue1',cfg.options),
value2: global.getpara('Ctlvalue2',cfg.options),
img1: global.getpara('Img1',cfg.options),
img2: global.getpara('Img2',cfg.options)
};
diagramService.GetControlValueByBaseType(controlinfo.deviceid,controlinfo.controlid).then(function(data){
var obj = getValueImage(data.value,switchControl);
if(obj != undefined){
elem.find(".switch-control img").attr({src:obj.img,value:obj.value});
}
});
}else{
elem.find(".remote-control").show();
elem.find(".remote-regulating").hide();
var img=global.getpara('Img',cfg.options);
var el = elem.find('.panel-body');
if(img == ""){
el.css({"background":"#fff","opacity":"0.1"});
}else{
el.css({"background-image": "url('" +img + "')"});
}
}
}
//region 遥控 开关版
// 返回当前图片和实时值
function getValueImage(curVal,switchControl){
if(switchControl.value2 === "undefined" || switchControl.value2 === ""){
return {img:switchControl.img1,value:curVal};
}
if(parseInt(curVal) === parseInt(switchControl.value1)){
return {img:switchControl.img1,value:curVal};
}else{
return {img:switchControl.img2,value:curVal};
}
}
// 返回另一个图片和值
function getAnotherValue(switchControl,curVal){
if(switchControl.value2 === "undefined" || switchControl.value2 === ""){
return {img:switchControl.img1,value:switchControl.value1};
}
if(parseInt(curVal) == parseInt(switchControl.value1)){
return {img:switchControl.img2,value:switchControl.value2};
}else{
return {img:switchControl.img1,value:switchControl.value1};
}
}
function posttingControlInfo(partid){
var cfg = getPartConfig(scope.diagram,partid);
if(cfg == undefined) return;
var dId = global.getpara('DeviceId',cfg.options);
var info = {
deviceid: (dId == "") ? scope.diagram.deviceId : dId,
controlid : global.getpara('BS',cfg.binding),
pwdType : global.getpara('PwdType',cfg.options),
Pwd : global.getpara('Pwd',cfg.options),
commdanType : global.getpara('CommdanType',cfg.options)
};
return info;
}
// 下发另一个含义的控制
scope.switchControlClk = function($event){
if($rootScope.isFunRights('设备.设备控制') == false) {
balert.show('danger', scope.languageJson.Authority.Rights.Prompt.NoAccess, 3000);//'无控制权限!'
return;
}
var partid = $event.target.parentNode.parentNode.getAttribute("partid");
var curVal = $($event.target).attr("value");
scope.controlinfo = posttingControlInfo(partid);
loadSwitchFunction($event,curVal);
if(scope.controlinfo.pwdType != "NoPassword"){
scope.controlinfo.isShow = true;
scope.controlinfo.isPwd = true;
setDlg = $modal({
scope: scope,
templateUrl: 'partials/controlauthorizesetter.html',
show: false
});
setDlg.$promise.then(setDlg.show);
}else{
scope.sendDeviceControl2($event,curVal);
}
};
function loadSwitchFunction($event,curVal){
scope.sendcontrol = function(){
var alert = scope.languageJson.Configuration.RemoteControl.Alert;
if(scope.controlinfo.pwdType == "SharePassword"){
if(scope.controlinfo.userpwd != undefined && base64.encode(scope.controlinfo.userpwd) == scope.controlinfo.Pwd){
scope.sendDeviceControl2($event,curVal);
setDlg.hide();
}else
balert.show('danger', alert.PasswordError,3000);//'密码不正确,请重新输入!'
}
if(scope.controlinfo.pwdType == "LoginPassword"){
userService.changePassword(localStorage.getItem("username"),scope.controlinfo.userpwd).then(function(data){
if(data == "OK"){
scope.sendDeviceControl2($event,curVal);
setDlg.hide();
}else
balert.show('danger', alert.PasswordError,3000);//'密码不正确,请重新输入!'
});
}
if(scope.controlinfo.pwdType == "NoPassword"){
sendDeviceControl2($event,curVal);
}
};
scope.sendDeviceControl2 = function($event,curVal){
var alert = scope.languageJson.Configuration.RemoteControl.Alert;
var userName = localStorage.getItem("username");
// 获取配置
var partid = $event.target.parentNode.parentNode.getAttribute("partid");
var cfg = getPartConfig(scope.diagram,partid);
if(cfg == undefined) return;
var switchControl = {
value1: global.getpara('Ctlvalue1',cfg.options),
value2: global.getpara('Ctlvalue2',cfg.options),
img1: global.getpara('Img1',cfg.options),
img2: global.getpara('Img2',cfg.options)
};
var value = getAnotherValue(switchControl,curVal).value;
devcontrolService.senddevcontrol(scope.controlinfo.deviceid, scope.controlinfo.controlid, value, userName).then(function (data) {
if (data == "success"){
var obj = getValueImage(value,switchControl);
if(obj != undefined){
$($event.target).attr({src:obj.img,value:obj.value});
}
balert.show('success', alert.Succeed, 3000);//"下发命令成功!"
}else
balert.show('danger', alert.Failed, 3000);//"下发命令失败!"
});
}
}
//endregion
function getMeaningByValue(vals,val){
var res = {value:0,name:"NotData"};
var split1 = vals.split(";");
var index = 0;
if(split1){
split1.forEach(function(item){
var split2 = item.split(".");
if(index == 0) res = {value:split2[0],name:split2[1]};
if(parseInt(split2[0]) == parseInt(val))
res = {value:split2[0],name:split2[1]};
index ++;
});
}
return res;
}
function getPartConfig(diagram, id) {
var found = _.find(diagram.parts, function(part) {
return part.id === id;
});
return found;
}
scope.keyDownControl = function(event){
if(event.which === 13){
scope.sendcontrol();
}
};
scope.validateauthority=function(dom){
if($rootScope.isFunRights('设备.设备控制') == false) {
//'无控制权限!'
balert.show('danger', scope.languageJson.Authority.Rights.Prompt.NoAccess, 3000);
return;
}
var partid = dom.target.parentNode.getAttribute("partid");
var config = getPartConfig(scope.diagram,partid);
scope.controlinfo = {};
scope.controlinfo.commdanType = global.getpara('CommdanType',config.options);
scope.controlinfo.pwdType = global.getpara('PwdType',config.options);
if(scope.controlinfo.pwdType != "NoPassword")
scope.controlinfo.isPwd = true;
scope.controlinfo.Pwd = global.getpara('Pwd',config.options);
scope.controlinfo.controlid = global.getpara('BS',config.binding);
scope.controlinfo.ctlValue = global.getpara("Ctlvalue",config.options);
if(scope.controlinfo.commdanType == 3)
scope.controlinfo.linkage = angular.fromJson(global.getpara("Linkage",config.options));
if(global.getpara("DeviceId",config.options) != undefined && global.getpara("DeviceId",config.options) != "")
scope.controlinfo.deviceid = global.getpara("DeviceId",config.options);
setDlg = $modal({
scope: scope,
templateUrl: 'partials/controlauthorizesetter.html',
show: false
});
if(scope.controlinfo.commdanType == 1){//遥调
scope.controlinfo.isShow = false;
setDlg.$promise.then(setDlg.show);
scope.controlinfo.optionType = undefined;
scope.controlinfo.min = global.getpara("Min",config.options);
scope.controlinfo.max = global.getpara("Max",config.options);
scope.controlinfo.optionValue = scope.controlinfo.min;
scope.controlinfo.optionType = scope.controlinfo.min;
}else{
if(scope.controlinfo.pwdType != "NoPassword"){
scope.controlinfo.isShow = true;
setDlg.$promise.then(setDlg.show);
}else{
var alert = scope.languageJson.Configuration.RemoteControl.Alert;
var userName = localStorage.getItem("username");
var paras = scope.controlinfo;
paras.optionType = scope.controlinfo.ctlValue;
if(scope.controlinfo.commdanType == 2) {
devcontrolService.senddevcontrol(paras.deviceid, paras.controlid, paras.optionType, userName).then(function (data) {
if (data == "success")
balert.show('success', alert.Succeed, 3000);//"下发命令成功!"
else
balert.show('danger', alert.Failed, 3000);//"下发命令失败!"
});
}else {
devcontrolService.sendControlLinkage(scope.controlinfo.linkage, userName).then(function (data) {
if(data == "success")
balert.show('success', alert.Succeed, 3000);//"下发命令成功!"
else
balert.show('danger', alert.Failed, 3000);//"下发命令失败!"
});
}
}
}
};
scope.changeTest = function(value){
scope.controlinfo.optionValue = value;
};
scope.changeValue = function(value){
scope.controlinfo.optionType = value;
};
scope.sendcontrol = function(){
var alert = scope.languageJson.Configuration.RemoteControl.Alert;
if(scope.controlinfo.pwdType == "SharePassword"){
if(scope.controlinfo.userpwd != undefined && base64.encode(scope.controlinfo.userpwd) == scope.controlinfo.Pwd)
sendDeviceControl(alert);
else
balert.show('danger', alert.PasswordError,3000);//'密码不正确,请重新输入!'
}
if(scope.controlinfo.pwdType == "LoginPassword"){
userService.changePassword(localStorage.getItem("username"),scope.controlinfo.userpwd).then(function(data){
if(data == "OK")
sendDeviceControl(alert);
else
balert.show('danger', alert.PasswordError,3000);//'密码不正确,请重新输入!'
});
}
if(scope.controlinfo.pwdType == "NoPassword"){
sendDeviceControl(alert);
}
};
function sendDeviceControl(alert){
var paras = scope.controlinfo;
var userName = localStorage.getItem("username");
if(scope.controlinfo.commdanType == 1){
devcontrolService.senddevcontrol(paras.deviceid,paras.controlid,paras.optionType,userName).then(function(data){
if(data == "success")
balert.show('success', alert.Succeed, 3000);//"下发命令成功!"
else
balert.show('danger', alert.Failed, 3000);//"下发命令失败!"
});
}else if(scope.controlinfo.commdanType == 2){
paras.optionType = scope.controlinfo.ctlValue;
devcontrolService.senddevcontrol(paras.deviceid,paras.controlid,paras.optionType,userName).then(function(data){
if(data == "success")
balert.show('success', alert.Succeed, 3000);//"下发命令成功!"
else
balert.show('danger', alert.Failed, 3000);//"下发命令失败!"
});
}else{
devcontrolService.sendControlLinkage(scope.controlinfo.linkage,userName).then(function(data){
if(data == "success")
balert.show('success', alert.Succeed, 3000);//"下发命令成功!"
else
balert.show('danger', alert.Failed, 3000);//"下发命令失败!"
});
}
scope.controlinfo.userpwd = "";
setDlg.hide();
}
scope.PlusValue = function(dom){
var elem = $(dom.target).parent().parent().parent().parent().parent().parent().parent("[class=panel-primary]").prevObject;
var partid = elem.attr("partid");
if(partid == undefined){
elem = elem.parent();
partid = elem.attr("partid");
}
var config = getPartConfig(scope.diagram,partid);
if(config == undefined) return;
var commdanType = global.getpara('CommdanType',config.options);//1遥调 、2遥控
if(commdanType == 1){
var val = elem.find(".control-value").val();
controlinfo.max = global.getpara("Max",config.options);
if(parseFloat(val) >= parseFloat(controlinfo.max)) return;
if((val+"").indexOf(".5") == -1){
val = Math.round(parseFloat(val)) + 0.5;
}else {
val = parseFloat(val) +0.5;
}
elem.find(".control-value").val(val);
elem.find(".control-value").css("color","#5eb75e");
}else{
var values = global.getpara('Values',config.options);
var obj = getControlValueArr(values);
var val = elem.find(".control-index").val();
//下标不能大于集合
val = parseInt(val)+1;
if(val >= obj.length) val = 0;
elem.find(".control-value").val(obj[val].value);
elem.find(".control-meaning").val(obj[val].name);
elem.find(".control-meaning").css("color","#5eb75e");
//赋值
elem.find(".control-index").val(val);
}
};
scope.MinusValue = function(dom){
var elem = $(dom.target).parent().parent().parent().parent().parent().parent().parent("[class=panel-primary]").prevObject;
var partid = elem.attr("partid");
if(partid == undefined){
elem = elem.parent();
partid = elem.attr("partid");
}
var config = getPartConfig(scope.diagram,partid);
if(config == undefined) return;
var commdanType = global.getpara('CommdanType',config.options);//1遥调 、2遥控
if(commdanType == 1){
var val = elem.find(".control-value").val();
controlinfo.min = global.getpara("Min",config.options);
if(parseFloat(val) <= parseFloat(controlinfo.min)) return;
val = parseFloat(val) - 0.5;
elem.find(".control-value").val(val);
elem.find(".control-value").css("color","#5eb75e");
}else{
var values = global.getpara('Values',config.options);
var obj = getControlValueArr(values);
var val = elem.find(".control-index").val();
//下标不能小于0
val = parseInt(val)-1;
if(val < 0) val = obj.length - 1;
elem.find(".control-value").val(obj[val].value);
elem.find(".control-meaning").val(obj[val].name);
elem.find(".control-meaning").css("color","#5eb75e");
//赋值
elem.find(".control-index").val(val);
}
};
function getControlValueArr(values){
var split = values.split(";");
var arr = [];
if(split && split.length > 0){
split.forEach(function(sp){
var split2 = sp.split(".");
if(split2.length == 2){
var val = split2[0];
var mes = split2[1];
arr.push({
value: val,
name : mes
})
}
});
}
return arr;
}
scope.TransparentControl = function(dom){
if($rootScope.isFunRights('设备.设备控制') == false) {
//'无控制权限!'
balert.show('danger', scope.languageJson.Authority.Rights.Prompt.NoAccess, 3000);
return;
}
setDlg = $modal({
scope: scope,
templateUrl: 'partials/controlauthorizesetter.html',
show: false
});
var elem = $(dom.target).parent().parent().parent().parent().parent().parent().parent("[class=panel-primary]").prevObject;
var partid = elem.attr("partid");
if(partid == undefined){
elem = elem.parent();
partid = elem.attr("partid");
}
var config = getPartConfig(scope.diagram,partid);
var deviceId = global.getpara('DeviceId',config.options);
if(deviceId == "")
deviceId = scope.diagram.deviceId;
var controlid = global.getpara('BS',config.binding);
var userName = localStorage.getItem("username");
var val = elem.find(".control-value").val();
var pwdType = global.getpara('PwdType',config.options);
if(pwdType != "NoPassword"){
scope.controlinfo = {
isPwd : true,
isShow : true,
pwdType : pwdType,
Pwd : global.getpara('Pwd',config.options),
deviceid : deviceId,
controlid : controlid,
optionType : val,
commdanType : 1
};
setDlg.$promise.then(setDlg.show);
}else{
var alert = scope.languageJson.Configuration.RemoteControl.Alert;
devcontrolService.senddevcontrol(deviceId, controlid, val, userName).then(function (data) {
if (data == "success")
balert.show('success', alert.Succeed, 3000);//"下发命令成功!"
else
balert.show('danger', alert.Failed, 3000);//"下发命令失败!"
});
}
//下发控制后字体颜色
var sysStyle = localStorage.getItem("systemStyle");
if(sysStyle == "White"){
elem.find(".control-value").css("color","#464952");
elem.find(".control-meaning").css("color","#464952");
}else{
elem.find(".control-value").css("color","#EBF3FF");
elem.find(".control-meaning").css("color","#EBF3FF");
}
};
scope.$watch('diagram.edit', function(newValue, oldValue, scope) {
diagramService.updateEditStatus(elem, newValue);
});
}
};
}
]);
nurseDirective.directive("newcontrolsetter",['$modal','baseTypeService','uploadService','balert','ConfigureMoldService','ImageManageService','base64','userService',
function($modal,baseTypeService,uploadService,balert,ConfigureMoldService,ImageManageService,base64,userService){
return {
restrict:'A',
link:function(scope,element){
var setDlg = null;
scope.controls = {};
function getControlById(Controls, id) {
var found = _.find(Controls, function(part) {
return part.BaseTypeId === id;
});
return found;
}
function getPartNum(typename){
var num=1;
var cparts=scope.diagram.parts;
if(cparts == undefined){
scope.diagram.parts = [];
return 1;
}
for(var i=0;i<cparts.length;i++) {
if(cparts[i].id.indexOf(typename)==-1)continue;
var partnum=parseInt(cparts[i].id.replace(typename,''));
if(partnum >= num) num=partnum+1;
}
return num;
}
function intFunction(){
scope.initList = function(){
scope.controls.lists = [];
scope.controls.optionsControl = undefined;
if(scope.diagram == undefined || scope.controls.deviceId == undefined) return;
if(scope.controls.optionType != 3){
if(scope.controls.optionType == undefined) return;
baseTypeService.getAllControlBaseDevice(scope.controls.deviceId,scope.controls.optionType).then(function(data){
if(data.length==0)
scope.controls.lists = [{BaseTypeId:undefined,ControlName:scope.languageJson.Configuration.RemoteControl.NotData}];//'没有数据'
else
scope.controls.lists = data;
});
}else{
scope.controls.styleType = 'ImageButton';
scope.controls.control = undefined;
scope.controls.controlValue = undefined;
baseTypeService.getAllControlBaseDevice(scope.controls.deviceId,-1).then(function(data){
scope.controls.Controls = data;
});
}
};
/******************* 过滤设备列表 & 加载信号列表 **************************/
scope.initDevice = function(){
var parentId = scope.diagram.parentId;
if(scope.diagram.deviceBaseTypeId == "1004" ||
(parseInt(scope.diagram.deviceBaseTypeId) >= 8888 && parseInt(scope.diagram.deviceBaseTypeId) < 9999))
parentId = "";
ConfigureMoldService.GetPartEquipments(parentId).then(function(data){
scope.decices = _.sortBy(data,function(item){return item.configName;});
scope.controls.deviceId = scope.diagram.deviceId;
if(scope.controls.deviceId == undefined)
scope.controls.deviceId = scope.decices[0].equipmentId;
scope.initList();
});
scope.checkedControl = function($event,data){
eval("scope."+data+" = "+$event.target.checked);
};
scope.getCheckbox = function(visible){
if(visible == true || visible == 'true')
return "√";
else
return "X";
};
};
/*********************************************************************/
}
element.bind("click",function(){
setDlg = $modal({
scope: scope,
templateUrl: 'partials/newcontrolsetter.html',
show: false
});
setDlg.$promise.then(setDlg.show);
intFunction();
scope.initDevice();
scope.initList();
initLocalImageFunction();
initControlLinkage();
scope.controls = {
optionType : 1,
isControlCheck : true,
pwdType : 'NoPassword',
controlPwd : '',
controlType : 0,
delay : 0,
styleType : 'ImageButton'
};
scope.file = undefined;
scope.controlClk = function(deviceId,baseTypeId){
if(deviceId == "")
deviceId = scope.diagram.deviceId;
scope.controls.values = [];
if(scope.controls.optionType == 2){
baseTypeService.getControlTypeBaseTypeId(deviceId+"|"+baseTypeId).then(function(data){
scope.controls.values = data;
});
}
};
scope.save = function(){
var alert = scope.languageJson.Configuration.RemoteControl.Alert;
if(scope.controls.optionType != 3 && (scope.controls.optionsControl == undefined || scope.controls.optionsControl == 0)){
balert.show('danger', alert.SelectControl,3000);//'请选择控制!'
return;
}
if(scope.controls.styleType == 'ImageButton'){
if(scope.controls.optionType == 2 && (scope.controls.controlValue1 == undefined || scope.controls.controlValue1 == "")){
balert.show('danger', alert.NotMeaning,3000);//'控制含义不能为空!'
return;
}
}
if(scope.controls.optionType == 3 && (scope.controls.controlActions == undefined || scope.controls.controlActions.length == 0)){
balert.show('danger', alert.SelectControl,3000);//'请选择控制!'
return;
}
//加密
scope.controls.controlPwd = base64.encode(scope.controls.controlPwd);
var cofg = {};
var count = getPartNum("control");
cofg.id = "control"+count;
cofg.type = "controlpart";
cofg.left="5";
cofg.top="80";
cofg.width = "163";
cofg.height = "187";
cofg.zindex = 2;
cofg.binding = "BS:"+scope.controls.optionsControl;
var str = "";
var obj = getControlById(scope.controls.lists,scope.controls.optionsControl);
if(scope.controls.optionType == 1){//遥调
str = "|CommdanType:1|Min:"+obj.MinValue+"|Max:"+obj.MaxValue+"|DeviceId:"+scope.controls.deviceId+
"|PwdType:"+scope.controls.pwdType+"|Pwd:"+scope.controls.controlPwd+"|StyleType:"+scope.controls.styleType;
}else if(scope.controls.optionType == 2){//遥控
str = "|CommdanType:2|Ctlvalue1:"+scope.controls.controlValue1+"|Ctlvalue2:"+scope.controls.controlValue2+"|DeviceId:"+scope.controls.deviceId+
"|PwdType:"+scope.controls.pwdType+"|Pwd:"+scope.controls.controlPwd+"|StyleType:"+scope.controls.styleType+valueMeaning(scope.controls.styleType,scope.controls.values)+
"|Img1:"+scope.imgFilePath1+"|Img2:"+scope.imgFilePath2;
}else{//控制联动
str = "|CommdanType:3|"+scope.parseLinkageText()+"|PwdType:"+scope.controls.pwdType+"|Pwd:"+scope.controls.controlPwd;
}
var file = scope.file;
if (file === undefined){
if(scope.imgFilePath == undefined)
cofg.options = "Img:"+str;
else
cofg.options = "Img:"+scope.imgFilePath+str;
scope.diagram.parts.push(cofg);
setDlg.hide();
scope.resetParts();
}else if(file.size>512000) {
balert.show('danger', alert.ImageSize,3000);//'修改的图片不能大于500K,请压缩尺寸。'
}else{
uploadService.uploadFile(scope.file).then(function(data) {
cofg.options = "Img:"+data+str;
scope.diagram.parts.push(cofg);
setDlg.hide();
scope.resetParts();
});
}
};
function valueMeaning(styleType,values){
var res = "";
if(styleType == 'DataControl' && values){
res = "|Values:";
values.forEach(function(val){
res += val.ParameterValue+"."+val.Meanings+";"
});
}
return res;
}
baseTypeService.getControlList().then(function(data) {
scope.ItemControls = data;
scope.controls.optionType =data[0].ItemId;
});
});
//本地图片
function initLocalImageFunction(){
var showImgFileDlg = null;
scope.imgFilePath = undefined;
scope.showImgFile = function(varName){
scope.varName = varName;
scope.imgFiles = {
catalog : "img/diagram",
imageFile : undefined
};
showImgFileDlg = $modal({
scope: scope,
templateUrl: 'partials/showImgFile.html',
show: false
});
showImgFileDlg.$promise.then(showImgFileDlg.show);
scope.changeCatalog(scope.imgFiles.catalog);
};
scope.changeCatalog = function(catalog){
ImageManageService.LoadImagesByPath(catalog).then(function(data){
scope.ImageFiles = data;
});
};
scope.clickImage = function(imageFile,$event){
scope.imgFiles.imageFile = imageFile;
$($event.currentTarget).parent().find('div').removeClass("select-image");
$($event.currentTarget).addClass("select-image");
};
scope.selectImageFile = function(){
if(scope.imgFiles == undefined || scope.imgFiles.imageFile == undefined){
//'请选择图片。'
balert.show('danger', scope.languageJson.Configuration.RemoteControl.Alert.SelectImage,3000);
return;
}
//eval("scope."+scope.varName+" = scope.imgFiles.imageFile");
if(scope.varName == "imgFilePath1")
scope.imgFilePath1 = scope.imgFiles.imageFile;
else if(scope.varName == "imgFilePath2")
scope.imgFilePath2 = scope.imgFiles.imageFile;
else
scope.imgFilePath = scope.imgFiles.imageFile;
showImgFileDlg.hide();
};
}
//控制联动
function initControlLinkage(){
scope.changeControl = function(control){
scope.controls.controlValue = undefined;
var con = angular.fromJson(control);
scope.controls.CommandType = con.CommandType;
if(con.CommandType == 2){//开关控制
baseTypeService.getControlTypeBaseTypeId(scope.controls.deviceId+"|"+con.BaseTypeId).then(function(data){
scope.controls.Meanings = data;
});
}else{//数值控制
scope.MaxValue = con.MaxValue;
scope.MinValue = con.MinValue;
}
};
scope.changeControlValue = function(type, value){
var obj = {};
var alert = scope.languageJson.Configuration.RemoteControl.Alert;
if(scope.controls.controlActions == undefined)
scope.controls.controlActions = [];
if(type == 1){
if(scope.controls.Meanings){
scope.controls.Meanings.forEach(function(item){
if(item.ParameterValue == value){
obj.actionMeanings = item.Meanings;
}
});
}
}else{
if(value == undefined || value == ""){
balert.show('danger',alert.NotValue,3000);//"控制值不能为空!"
return;
}
if((scope.MinValue == scope.MaxValue) ||
(parseFloat(scope.MinValue) <= parseFloat(value) && parseFloat(scope.MaxValue) >= parseFloat(value))){
obj.actionMeanings = value;
}else{
balert.show('danger', alert.InvalidValue,3000);//'控制值不合法,请重新输入!'
return;
}
}
obj.controlValue = value;
obj.delay = scope.controls.delay;
if(scope.decices && scope.controls.deviceId){
scope.decices.forEach(function(item){
if(item.equipmentId == scope.controls.deviceId) {
obj.equipmentId = item.equipmentId;
obj.equipmentName = item.configName;
}
});
}
if(scope.controls.control){
var control = angular.fromJson(scope.controls.control);
obj.baseTypeId = control.BaseTypeId;
obj.controlName = control.ControlName;
}
obj.index = scope.controls.controlActions.length+1;
scope.controls.controlActions.push(obj);
};
scope.deleteMeaningsClick = function($index){
scope.controls.controlActions.splice($index,1);
};
scope.parseLinkageText = function(){
if(scope.controls.controlActions){
var result = "Linkage:";
result += angular.toJson(scope.controls.controlActions);
return result;
}else return "Linkage:[]";
}
}
}
}
}
]);
nurseDirective.directive('basecontrolsetter',['$modal','baseTypeService','global','uploadService','balert','ConfigureMoldService','ImageManageService','base64',
function($modal,baseTypeService,global,uploadService,balert,ConfigureMoldService,ImageManageService,base64){
return {
restrict:'A',
link:function(scope,element){
var setDlg = null;
scope.basecontrol = {};
function getControlById(Controls, id) {
var found = _.find(Controls, function(part) {
return part.BaseTypeId === id;
});
return found;
}
function getPartConfig(diagram, id) {
var found = _.find(diagram.parts, function(part) {
return part.id === id;
});
return found;
}
element.bind("click",function(){
setDlg = $modal({
scope: scope,
templateUrl: 'partials/basecontrolsetter.html',
show: false
});
setDlg.$promise.then(setDlg.show);
initDevice();
initControlLinkage();
initLocalImageFunction();
baseTypeService.getControlList().then(function(data) {
scope.ItemControls = data;
});
scope.controlClk = function(deviceId,baseTypeId){
if(deviceId == undefined || deviceId == "")
deviceId = scope.diagram.deviceId;
scope.basecontrol.values = [];
if(scope.basecontrol.optionType == 2){
baseTypeService.getControlTypeBaseTypeId(deviceId+"|"+baseTypeId).then(function(data){
scope.basecontrol.values = data;
});
}
};
var partid= element.parent().parent().attr("partid");
scope.partid = partid;
var cfg = getPartConfig(scope.diagram, scope.partid);
scope.basecontrol.optionsControl = global.getpara("BS",cfg.binding);
scope.basecontrol.file = global.getpara("Img",cfg.options);
scope.basecontrol.file1 = global.getpara("Img1",cfg.options);
scope.basecontrol.file2 = global.getpara("Img2",cfg.options);
scope.basecontrol.optionType = global.getpara("CommdanType",cfg.options);
scope.basecontrol.controlValue = global.getpara("Ctlvalue",cfg.options);
scope.basecontrol.controlValue1 = global.getpara("Ctlvalue1",cfg.options);
scope.basecontrol.controlValue2 = global.getpara("Ctlvalue2",cfg.options);
scope.basecontrol.controlValue1 = global.getpara("Ctlvalue1",cfg.options);
scope.basecontrol.controlValue2 = global.getpara("Ctlvalue2",cfg.options);
scope.basecontrol.deviceId = global.getpara("DeviceId",cfg.options);
//scope.basecontrol.isControlCheck = global.getpara('isShow',cfg.options) == "true" ? true : false;
scope.basecontrol.pwdType = global.getpara("PwdType",cfg.options);
scope.basecontrol.controlPwd = global.getpara('Pwd',cfg.options);
scope.basecontrol.oldControlPwd = scope.basecontrol.controlPwd;
var st = global.getpara('StyleType',cfg.options);
scope.basecontrol.styleType = (st == "") ? 'ImageButton' : st;
if(scope.basecontrol.deviceId == undefined || scope.basecontrol.deviceId == "")
scope.basecontrol.deviceId = scope.diagram.deviceId;
if(scope.basecontrol.optionType == 3)
parseActions(global.getpara("Linkage", cfg.options));
scope.file = undefined;
scope.controlClk(scope.basecontrol.deviceId,scope.basecontrol.optionsControl);
/******************* 过滤设备列表 & 加载信号列表 **************************/
function initDevice(){
var parentId = scope.diagram.parentId;
if(scope.diagram.deviceBaseTypeId == "1004" ||
(parseInt(scope.diagram.deviceBaseTypeId) >= 8888 && parseInt(scope.diagram.deviceBaseTypeId) < 9999))
parentId = "";
ConfigureMoldService.GetPartEquipments(parentId).then(function(data){
scope.decices = _.sortBy(data,function(item){return item.configName;});
scope.initList();
});
scope.checkedControl = function($event,data){
eval("scope."+data+" = "+$event.target.checked);
};
scope.getCheckbox = function(visible){
if(visible == true || visible == 'true')
return "√";
else
return "X";
};
}
/*********************************************************************/
scope.initList = function(){
scope.basecontrol.lists = undefined;
if(scope.diagram == undefined || scope.basecontrol.deviceId == undefined) return;
if(scope.basecontrol.optionType == undefined) return;
if(scope.basecontrol.optionType != 3){
baseTypeService.getAllControlBaseDevice(scope.basecontrol.deviceId,scope.basecontrol.optionType).then(function(data){
if(data.length==0)
scope.basecontrol.lists = [{BaseTypeId:undefined,ControlName:scope.languageJson.Configuration.RemoteControl.NotData}];//'没有数据'
else
scope.basecontrol.lists = data;
});
}else{
scope.basecontrol.styleType = 'ImageButton';
scope.basecontrol.control = undefined;
scope.basecontrol.controlValue = undefined;
baseTypeService.getAllControlBaseDevice(scope.basecontrol.deviceId,-1).then(function(data){
scope.basecontrol.Controls = data;
});
}
};
scope.save = function(){
if(scope.basecontrol.oldControlPwd != scope.basecontrol.controlPwd){
scope.basecontrol.controlPwd = base64.encode(scope.basecontrol.controlPwd);
}
var alert = scope.languageJson.Configuration.RemoteControl.Alert;
if(scope.basecontrol.styleType == 'ImageButton'){
if(scope.basecontrol.optionType == 2 && (scope.basecontrol.controlValue1 == undefined || scope.basecontrol.controlValue1 == "")){
balert.show('danger', alert.NotMeaning,3000);//'控制含义不能为空!'
return;
}
}
cfg.binding = "BS:"+scope.basecontrol.optionsControl;
var str = "";
var obj = getControlById(scope.basecontrol.lists,scope.basecontrol.optionsControl);
if(scope.basecontrol.optionType == 1){//遥控
str = "|CommdanType:1|Min:"+obj.MinValue+"|Max:"+obj.MaxValue+"|DeviceId:"+scope.basecontrol.deviceId+
"|PwdType:"+scope.basecontrol.pwdType+"|Pwd:"+scope.basecontrol.controlPwd+"|StyleType:"+scope.basecontrol.styleType;
}else if(scope.basecontrol.optionType == 2){//开闭
str = "|CommdanType:2|Ctlvalue1:"+scope.basecontrol.controlValue1+"|Ctlvalue2:"+scope.basecontrol.controlValue2+"|DeviceId:"+scope.basecontrol.deviceId+
"|PwdType:"+scope.basecontrol.pwdType+"|Pwd:"+scope.basecontrol.controlPwd+"|StyleType:"+scope.basecontrol.styleType+valueMeaning(scope.basecontrol.styleType,scope.basecontrol.values)+
"|Img1:"+scope.basecontrol.file1+"|Img2:"+scope.basecontrol.file2;
}else{//控制联动
str = "|CommdanType:3|"+scope.parseLinkageText()+"|PwdType:"+scope.basecontrol.pwdType+"|Pwd:"+scope.basecontrol.controlPwd;
}
var file = scope.file;
if (file === undefined){
if(scope.basecontrol.file != "")
cfg.options = "Img:"+scope.basecontrol.file+str;
else
cfg.options = "Img:"+str;
setDlg.hide();
scope.resetParts();
}else if(file.size>512000) {
balert.show('danger', alert.ImageSize,3000);//'修改的图片不能大于500K,请压缩尺寸。'
}else{
uploadService.uploadFile(scope.file).then(function(data) {
cfg.options = "Img:"+data+str;
setDlg.hide();
scope.resetParts();
});
}
};
function valueMeaning(styleType,values){
var res = "";
if(styleType == 'DataControl' && values){
res = "|Values:";
values.forEach(function(val){
res += val.ParameterValue+"."+val.Meanings+";"
});
}
return res;
}
/******************* 控制联动 Start **************************/
function parseActions (linkage){
linkage = angular.fromJson(linkage);
scope.basecontrol.controlActions = [];
linkage.forEach(function(item){
getControlObject(item);
});
}
function sortObj(array, key) {
return array.sort(function(a, b) {
var x = a[key];
var y = b[key];
return x - y;
});
}
function getControlObject(data,deviceName) {
var obj = {
index : data.index,
delay : data.delay,
equipmentId : data.equipmentId,
baseTypeId : data.baseTypeId,
controlValue : data.controlValue
};
var parentId = scope.diagram.parentId;
if(scope.diagram.deviceBaseTypeId == "1004" ||
(parseInt(scope.diagram.deviceBaseTypeId) >= 8888 && parseInt(scope.diagram.deviceBaseTypeId) < 9999))
parentId = "";
ConfigureMoldService.GetPartEquipments(parentId).then(function(decices){
if(decices){
decices.forEach(function(dec){
if(dec.equipmentId == data.equipmentId) {
obj.equipmentName = dec.configName;
baseTypeService.getAllControlBaseDevice(data.equipmentId,-1).then(function(control){
if(control){
control.forEach(function(con){
if(con.BaseTypeId == data.baseTypeId){
obj.controlName = con.ControlName;
baseTypeService.getControlTypeBaseTypeId(data.equipmentId+"|"+con.BaseTypeId).then(function(Meanings){
var meanigs = "";
if(Meanings){
Meanings.forEach(function(mean){
if(mean.ParameterValue == data.controlValue){
meanigs = mean.Meanings;
}
});
}
if(meanigs == "")
obj.actionMeanings = data.controlValue;
else
obj.actionMeanings = meanigs;
if(!isExist(scope.basecontrol.controlActions,obj))
scope.basecontrol.controlActions.push(obj);
scope.basecontrol.controlActions = sortObj(scope.basecontrol.controlActions,'index');
});
}
});
}
});
}
});
}
});
}
function isExist(arr,obj){
if(arr){
var is = false;
arr.forEach(function(data){
if(data.index == obj.index) is = true;
});
return is;
}return false;
}
//本地图片
function initLocalImageFunction(){
var showImgFileDlg = null;
scope.showImgFile = function(varName){
scope.varName = varName;
scope.imgFiles = {
catalog : "img/diagram",
imageFile : undefined
};
showImgFileDlg = $modal({
scope: scope,
templateUrl: 'partials/showImgFile.html',
show: false
});
showImgFileDlg.$promise.then(showImgFileDlg.show);
scope.changeCatalog(scope.imgFiles.catalog);
};
scope.changeCatalog = function(catalog){
ImageManageService.LoadImagesByPath(catalog).then(function(data){
scope.ImageFiles = data;
});
};
scope.clickImage = function(imageFile,$event){
scope.imgFiles.imageFile = imageFile;
$($event.currentTarget).parent().find('div').removeClass("select-image");
$($event.currentTarget).addClass("select-image");
};
scope.selectImageFile = function(){
if(scope.imgFiles == undefined || scope.imgFiles.imageFile == undefined){
//'请选择图片。'
balert.show('danger', scope.languageJson.Configuration.RemoteControl.Alert.SelectImage,3000);
return;
}
//eval("scope."+scope.varName+" = scope.imgFiles.imageFile");
if(scope.varName == "basecontrol.file1")
scope.basecontrol.file1 = scope.imgFiles.imageFile;
else if(scope.varName == "basecontrol.file2")
scope.basecontrol.file2 = scope.imgFiles.imageFile;
else
scope.basecontrol.file = scope.imgFiles.imageFile;
showImgFileDlg.hide();
};
}
//控制联动
function initControlLinkage(){
scope.basecontrol.delay = 0;
scope.changeControl = function(control){
scope.basecontrol.controlValue = undefined;
var con = angular.fromJson(control);
scope.basecontrol.CommandType = con.CommandType;
if(con.CommandType == 2){//开关控制
baseTypeService.getControlTypeBaseTypeId(scope.basecontrol.deviceId+"|"+con.BaseTypeId).then(function(data){
scope.basecontrol.Meanings = data;
});
}else{//数值控制
scope.MaxValue = con.MaxValue;
scope.MinValue = con.MinValue;
}
};
scope.changeControlValue = function(type, value){
var obj = {};
var alert = scope.languageJson.Configuration.RemoteControl.Alert;
if(scope.basecontrol.controlActions == undefined)
scope.basecontrol.controlActions = [];
if(type == 1){
if(scope.basecontrol.Meanings){
scope.basecontrol.Meanings.forEach(function(item){
if(item.ParameterValue == value){
obj.actionMeanings = item.Meanings;
}
});
}
}else{
if(value == undefined || value == ""){
balert.show('danger',alert.NotValue,3000);//"控制值不能为空!"
return;
}
if((scope.MinValue == scope.MaxValue) ||
(parseFloat(scope.MinValue) <= parseFloat(value) && parseFloat(scope.MaxValue) >= parseFloat(value))){
obj.actionMeanings = value;
}else{
balert.show('danger', alert.InvalidValue,3000);//'控制值不合法,请重新输入!'
return;
}
}
obj.controlValue = value;
obj.delay = scope.basecontrol.delay;
if(scope.decices && scope.basecontrol.deviceId){
scope.decices.forEach(function(item){
if(item.equipmentId == scope.basecontrol.deviceId) {
obj.equipmentId = item.equipmentId;
obj.equipmentName = item.configName;
}
});
}
if(scope.basecontrol.control){
var control = angular.fromJson(scope.basecontrol.control);
obj.baseTypeId = control.BaseTypeId;
obj.controlName = control.ControlName;
}
obj.index = scope.basecontrol.controlActions.length+1;
scope.basecontrol.controlActions.push(obj);
};
scope.deleteMeaningsClick = function($index){
scope.basecontrol.controlActions.splice($index,1);
};
scope.parseLinkageText = function(){
if(scope.basecontrol.controlActions){
var result = "Linkage:";
result += angular.toJson(scope.basecontrol.controlActions);
return result;
}else return "Linkage:[]";
};
}
/******************* 控制联动 End **************************/
});
}
}
}
]);
nurseDirective.directive('newimagesignalsetter', ['$modal','baseTypeService','balert',
function($modal,baseTypeService,balert) {
var setDlg;
return {
restrict: 'A',
link: function(scope, element) {
scope.setDlg = null;
scope.environmentradio ={};
function getPartNum(typename){
var num=1;
var cparts=scope.diagram.parts;
if(cparts == undefined){
scope.diagram.parts = [];
return 1;
}
for(var i=0;i<cparts.length;i++) {
if(cparts[i].id.indexOf(typename)==-1)continue;
var partnum=parseInt(cparts[i].id.replace(typename,''));
if(partnum >= num) num=partnum+1;
}
return num;
}
function getNewPart(type) {
var num=getPartNum(type);
var part={};
part.id=type+num;
switch (type) {
case 'infrared':
part.type="infrared";
part.img="img/diagram/InfraredDetector_Alarm.png";
part.name= scope.languageJson.Configuration.ImageSignalControl.ControlType.Infrared+num+"#";//"红外"
break;
case 'smoke':
part.type="smoke";
part.img="img/diagram/Fog_inductor.png";
part.name= scope.languageJson.Configuration.ImageSignalControl.ControlType.Smoke+num+"#";//"烟感"
break;
case 'watermonitor':
part.type="watermonitor";
part.img="img/diagram/WaterMonitor.png";
part.name= scope.languageJson.Configuration.ImageSignalControl.ControlType.LiquidLeak+num+"#";//"水浸"
break;
case 'temperature':
part.type="temperature";
part.img="img/diagram/temperature.png";
part.name= scope.languageJson.Configuration.ImageSignalControl.ControlType.Temperature+num+"#";//"温度"
break;
case 'humidity':
part.type="humidity";
part.img="img/diagram/Thermometer_Blue.png";
part.name= scope.languageJson.Configuration.ImageSignalControl.ControlType.Humidity+num+"#";//"湿度"
break;
case 'door':
part.type="door";
part.img="img/diagram/DoorAlarm.png";
part.name= scope.languageJson.Configuration.ImageSignalControl.ControlType.Door+num+"#";//"门碰"
break;
case 'lamp':
part.type = "lamp";
part.img = "img/diagram/lamp.png";
part.name = scope.languageJson.Configuration.ImageSignalControl.ControlType.Lamp+num+"#";//"灯"
break;
case 'audible':
part.type = "audible";
part.img = "img/diagram/audible.png";
part.name = scope.languageJson.Configuration.ImageSignalControl.ControlType.Audible+num+"#";//"声光"
break;
case 'switch':
part.type = "switch";
part.img = "img/diagram/switch.png";
part.name = scope.languageJson.Configuration.ImageSignalControl.ControlType.Switch+num+"#";//"其它开关量"
break;
case 'estimate':
part.type = "estimate";
part.img = "img/diagram/estimate.png";
part.name = scope.languageJson.Configuration.ImageSignalControl.ControlType.Numerical+num+"#";//"其它模拟量"
break;
}
//默认背景图
var style = localStorage.getItem("systemStyle");
if(style == "Blue")
part.background = "configure_bg";
else if(style == "White")
part.background = "white_bg";
scope.newpart=part;
}
function initFunction(){
scope.checkedDoor = function($event,data){
eval("scope."+data+" = "+$event.target.checked);
};
scope.getCheckbox = function(visible){
if(visible == true || visible == 'true')
return "√";
else
return "X";
};
}
//show list
function initList() {
scope.isImageCheck = true;
scope.isSignalCheck = true;
baseTypeService.getSignalBaseTypes().then(function(data) {
scope.siglist = data;
});
}
element.bind('click', function() {
initList();
getNewPart("infrared");
setDlg = $modal({
scope: scope,
templateUrl: 'partials/newimagesignalsetter.html',
show: false
});
setDlg.$promise.then(setDlg.show);
initFunction();
});
scope.parttypechange = function(type) {
getNewPart(type);
};
scope.savenewenvironment = function() {
if(scope.environmentradio.radiosig == undefined){
//'请选择绑定信号。'
balert.show('danger', scope.languageJson.Configuration.ImageSignalControl.ErrorPrompt,3000);
return;
}
var bsAndDi = scope.environmentradio.radiosig.split("-");
var cofg ={};
cofg.id=scope.newpart.id;
cofg.type="imagesignalpart";
cofg.left="5";
cofg.top="80";
cofg.width="150";
cofg.height="140";
cofg.zindex="1";
cofg.binding="BS:"+bsAndDi[0]+"|DI:"+bsAndDi[1];
cofg.options="Name:"+scope.newpart.name+"|Img:"+scope.newpart.img+"|isImage:"+scope.isImageCheck+"|isSignal:"+scope.isSignalCheck+"|Background:"+scope.newpart.background;
scope.diagram.parts.push(cofg);
setDlg.hide();
scope.resetParts();
};
}
}
}
]);
nurseDirective.directive('newdevicestatussetter',['$modal','baseTypeService','balert','$compile',
function($modal,baseTypeService,balert,$compile){
var setDlg;
return {
restrict:'A',
link:function(scope,element){
var initList = function(){
baseTypeService.getDeviceList().then(function(data){
scope.deviceList = data;
});
};
function getPartNum(typename){
var num=1;
var cparts=scope.diagram.parts;
if(cparts == undefined){
scope.diagram.parts = [];
return 1;
}
for(var i=0;i<cparts.length;i++) {
if(cparts[i].id.indexOf(typename)==-1)continue;
var partnum=parseInt(cparts[i].id.replace(typename,''));
if(partnum >= num) num=partnum+1;
}
return num;
}
function getNewPart(type) {
var num = getPartNum(type);
scope.Device.id = type + num;
}
function initFunction(){
scope.showDeviceStatus = function(){
if($("#myDeviceStatus").css("display") == "block")
$("#myDeviceStatus").hide();
else
$("#myDeviceStatus").show();
};
scope.clickFontChart = function(fontChart){
scope.Device.fontChart = fontChart;
$("#myDeviceStatus").hide();
};
scope.checkedDeviceBox = function(item){
if(scope.Device.List == undefined || scope.Device.List == "")
scope.Device.List = [];
scope.Device.List = angular.fromJson(scope.Device.List);
if(item.isChecked == undefined || item.isChecked == false){
scope.Device.List.push(item.EquipmentId);
item.isChecked = true;
}else{
for(var i = 0;i < scope.Device.List.length;i ++){
if(scope.Device.List[i] == item.EquipmentId)
scope.Device.List.splice(i,1);
}
item.isChecked = false;
}
scope.Device.List = angular.toJson(scope.Device.List);
};
function pasetDeivce(list){
var arr = angular.fromJson(list);
var result = "";
for(var i = 0;i < arr.length;i++){
result += arr[i]+"|";
}
return result;
}
scope.saveNewStatus = function(){
if(scope.Device.List == undefined || scope.Device.List == "[]" || scope.Device.List == ""){
//'请选择绑定设备。'
balert.show('danger', scope.languageJson.Configuration.EquipmentControl.ErrorPrompt,3000);
return;
}
var cofg ={};
cofg.id=scope.Device.id;
cofg.type="devicestatuspart";
cofg.left="5";
cofg.top="80";
cofg.width="150";
cofg.height="140";
cofg.zindex = "1";
cofg.binding = pasetDeivce(scope.Device.List);
cofg.options = "Name:"+scope.Device.Name+"|FontChart:"+scope.Device.fontChart;
scope.diagram.parts.push(cofg);
setDlg.hide();
scope.resetParts();
};
scope.empty = function(){
scope.deviceList.forEach(function(item){
item.isChecked = false;
});
scope.Device.List = "[]";
};
}
element.bind('click',function(){
initFunction();
scope.Device = {
Name : "",
fontChart : "",
List : ""
};
initList();
getNewPart("status");
setDlg = $modal({
scope: scope,
templateUrl: 'partials/newdevicestatussetter.html',
show: false
});
setDlg.$promise.then(setDlg.show);
});
}
}
}
]);
nurseDirective.directive('newsignalsetter',['$modal','baseTypeService','balert','ConfigureMoldService',
function($modal,baseTypeService,balert,ConfigureMoldService){
return {
restrict: 'A',
link:function(scope,element){
var setDlg = null;
function getPartNum(typename){
var num = 1;
var cparts = scope.diagram.parts;
if(cparts == undefined){
scope.diagram.parts = [];
return 1;
}
for(var i=0;i<cparts.length;i++){
if(cparts[i].id.indexOf(typename)==-1) continue;
var partnum=parseInt(cparts[i].id.replace(typename,''));
if(partnum>=num){
num=partnum+1;
}
}
return num;
}
/******************* 过滤设备列表 & 加载信号列表 **************************/
function initDevice(){
if(scope.Topology == undefined) {
scope.Topology = {};
}
var parentId = scope.diagram.parentId;
if(scope.diagram.deviceBaseTypeId == "1004" ||
(parseInt(scope.diagram.deviceBaseTypeId) >= 8888 && parseInt(scope.diagram.deviceBaseTypeId) < 9999) ||
parentId == undefined) {
parentId = "";
}
ConfigureMoldService.GetPartEquipments(parentId).then(function(data){
scope.deviceList = _.sortBy(data,function(item){return item.configName;});
scope.Topology.DeviceId = scope.diagram.deviceId;
if(scope.Topology.DeviceId == undefined)
scope.Topology.DeviceId = scope.deviceList[0].equipmentId;
baseTypeService.getSignalBaseTypesByDeviceType(scope.Topology.DeviceId).then(function(data) {
var list = data;
scope.bind = {
siglist: list,
selectedsigs: undefined
};
});
});
}
/*********************************************************************/
element.bind('click',function(){
scope.groupname = "";
scope.displayNames = "";//修改后的显示的信号名称
//默认背景图
var style = localStorage.getItem("systemStyle");
if(style == "Blue"){
scope.background = "configure_bg";
scope.backgroundMap = "Bule";
} else if(style == "White") {
scope.background = "white_bg";
scope.backgroundMap = "White";
}
initDevice();
setDlg = $modal({
scope: scope,
templateUrl: 'partials/newsignalsetter.html',
show: false
});
setDlg.$promise.then(setDlg.show);
scope.namechange = function(value){
scope.groupname = value;
};
scope.changeBackgrund = function(value){
scope.background = value;
};
scope.changeDevice = function(id){
baseTypeService.getSignalBaseTypesByDeviceType(id).then(function(data) {
var list = data;
scope.bind = {
siglist: list,
selectedsigs: undefined
};
});
};
scope.save = function(){
if(scope.bind.selectedsigs == undefined || scope.bind.selectedsigs.length == 0){
//'请选择信号!'
balert.show('danger', scope.languageJson.Configuration.SignalControl.ErrorPrompt,3000);
return;
}
var cfg = {};
var bind = _.reduce(scope.bind.selectedsigs, function(memo, sig) {
return memo + "BS:" + sig.baseTypeId + "|";
}, '');
var count = getPartNum("signalgroup");
var heightSize = scope.bind.selectedsigs.length;
cfg.id = "signalgroup"+count;
cfg.type = "signalgroup";
cfg.left="5";
cfg.top="80";
cfg.width="235";
cfg.height= 50*(heightSize+1)+20;
cfg.zindex="1";
cfg.binding = bind+"DI:"+scope.Topology.DeviceId;
cfg.options="Name:"+scope.groupname+"|Background:"+scope.background+"|DisplayName:"+scope.displayNames;
scope.diagram.parts.push(cfg);
scope.resetParts();
setDlg.hide();
};
//region 修改信号名称
var modifyDlg = $modal({
scope: scope,
templateUrl: 'partials/modifySignalName.html',
show: false
});
scope.modifySignalName = function(){
scope.modifySelects = scope.bind.selectedsigs;
modifyDlg.$promise.then(modifyDlg.show);
};
scope.modify = function(){
var arr = [];
scope.displayNames = "";//baseTypeId.baseTypeName-...
//获取input标签的id和value
var modifys = $(".modify-signal-table").find(".modify-value");
for(var i = 0; i < modifys.length; i++){
if(modifys[i]){
arr.push({
id : modifys[i].id,
value : modifys[i].value
});
}
}
//修改列表
if(scope.modifySelects){
scope.modifySelects.forEach(function(item){
arr.forEach(function(a){
if(item.baseTypeId == a.id && item.name != a.value){
item.baseTypeName = a.value;
scope.displayNames += a.id+"."+a.value+"-";
}
});
});
}
scope.bind.selectedsigs = scope.modifySelects;
modifyDlg.hide();
};
//endregion
});
}
}
}
]);
nurseDirective.directive('newwaterimmersion',['$modal','baseTypeService','balert','ConfigureMoldService',
function($modal,baseTypeService,balert,ConfigureMoldService){
return {
restrict: 'A',
link:function(scope,element){
var setDlg = null;
function getPartNum(typename){
var num = 1;
var cparts = scope.diagram.parts;
if(cparts == undefined){
scope.diagram.parts = [];
return 1;
}
for(var i=0;i<cparts.length;i++){
if(cparts[i].id.indexOf(typename)==-1) continue;
var partnum=parseInt(cparts[i].id.replace(typename,''));
if(partnum>=num){
num=partnum+1;
}
}
return num;
}
/******************* 过滤设备列表 & 加载信号列表 **************************/
function initDevice(){
if(scope.Topology == undefined) {
scope.Topology = {};
}
var parentId = scope.diagram.parentId;
if(scope.diagram.deviceBaseTypeId == "1004" ||
(parseInt(scope.diagram.deviceBaseTypeId) >= 8888 && parseInt(scope.diagram.deviceBaseTypeId) < 9999))
parentId = "";
ConfigureMoldService.GetPartEquipments(parentId).then(function(data){
scope.deviceList = _.sortBy(data,function(item){return item.configName;});
scope.Topology.DeviceId = scope.diagram.deviceId;
if(scope.Topology.DeviceId == undefined)
scope.Topology.DeviceId = scope.deviceList[0].equipmentId;
baseTypeService.getSignalBaseTypesByDeviceType(scope.Topology.DeviceId).then(function(data) {
var list = data;
scope.bind = {
siglist: list,
selectedsigs: undefined
};
});
});
}
/*********************************************************************/
element.bind('click',function(){
scope.groupname = "";
scope.displayNames = "";//修改后的显示的信号名称
//默认背景图
var style = localStorage.getItem("systemStyle");
if(style == "Blue"){
scope.background = "configure_bg";
scope.backgroundMap = "Bule";
} else if(style == "White") {
scope.background = "white_bg";
scope.backgroundMap = "White";
}
initDevice();
setDlg = $modal({
scope: scope,
templateUrl: 'partials/newIntelligentflooding.html',
show: false
});
setDlg.$promise.then(setDlg.show);;
scope.changeBackgrund = function(value){
scope.background = value;
};
scope.changeDevice = function(id){
baseTypeService.getSignalBaseTypesByDeviceType(id).then(function(data) {
var list = data;
scope.bind = {
siglist: list,
selectedsigs: undefined
};
});
};
scope.save = function(){
if(scope.bind.selectedsigs == undefined || scope.bind.selectedsigs.length < 3){
//'请选择信号!'
balert.show('danger', "请全选!",3000);
return;
}
var cfg = {};
var bind = _.reduce(scope.bind.selectedsigs, function(memo, sig) {
return memo + "BS:" + sig.baseTypeId + "|";
}, '');
var count = getPartNum("signalgroups");
var heightSize = scope.bind.selectedsigs.length;
cfg.id = "signalgroups"+count;
cfg.type = "signalgroups";
cfg.left="200";
cfg.top="280";
cfg.width="800";
cfg.height= "100";
cfg.zindex="1";
cfg.binding = bind+"DI:"+scope.Topology.DeviceId;
cfg.options="Name:"+scope.groupname+"|Background:"+scope.background+"|DisplayName:"+scope.displayNames;
scope.diagram.parts.push(cfg);
scope.resetParts();
setDlg.hide();
};
//endregion
});
}
}
}
]);
nurseDirective.directive("signalgroups", ['diagramService','activeDeviceService','global',
function(diagramService,activeDeviceService,global) {
var linkFn = function(scope, elem, attrs, modelCtrl) {
var cfg = diagramService.initPart(scope, elem, attrs);
if (cfg === undefined) return;
var name = global.getpara("Name",cfg.options);
var background = global.getpara("Background",cfg.options);
var displayNames = global.getpara("DisplayName",cfg.options);
var displays = displayNames.split("-");
//标题
var titleHeight = 50;
if(name == "" || name == undefined) {
elem.find(".signal_title").hide();
titleHeight = 0;
}else
elem.find(".groupname").html(name);
//背景
if(background == undefined)
elem.find(".signal-body").addClass("configure_bg");
else
elem.find(".signal-body").addClass(background);
var height = elem.find(".signal-body")[0].scrollHeight;
elem.find(".signal-body-table").css("height",(height - titleHeight)+"px");
scope.partid = attrs.partid;
scope.$watch('diagram.edit', function(newValue, oldValue, scope) {
diagramService.updateEditStatus(elem, newValue);
});
activeDeviceService.getActiveDevices().then(function(data) {
// console.log(data);
scope.devices = data;
});
scope.$watch('binddata', function(newValue, oldValue, scope) {
var array = [];
_.find(newValue, function(data) {
if(data.partId == scope.partid && data.signalName != ""){
var is = false;
if(scope.devices)
scope.devices.forEach(function(item){
if(item.status == "Disconnect" && data.deviceId == item.id)
is = true;//通讯中断
});
if(data.alarmSeverity == 255){
if(is) data.className = "signal-value-disconnect";//data.backgroundColor = "background-color:#575A5E";//通讯中断 灰色
else data.className = "signal-value-normal";//data.backgroundColor = "background-color:#5B9338";
}else if(data.alarmSeverity == -255 || data.alarmSeverity === ''){
//data.backgroundColor = "background-color:#575A5E";//signal-value-disconnect
data.className = "signal-value-disconnect";
if(data.currentValue == "")
data.currentValue = scope.languageJson.Loading+"...";//加载中
}else data.className = "signal-value-alarm";//data.backgroundColor = "background-color:#A02B31";
if(displays){
displays.forEach(function(dis){
if(dis.indexOf(".") > -1){
var dev = dis.split(".");
if(data.baseTypeId == dev[0])
data.baseTypeName = dev[1];
}
});
}
array.push(data);
}
});
scope.signalList = array;
// console.log(scope.signalList);
// var dd = [{signalName: "设备通讯状态",currentValue: "加载中..."},{signalName: "电缆长度",currentValue: "15.0"},{signalName: "线缆1漏水距离",currentValue: "8.0"}]
// scope.signalList = dd;
//定义初始化设备通讯状态
scope.one = "";
//定义初始化电缆长度
scope.two = "";
//定义初始化漏水距离
scope.three = "";
//定义当漏水距离为0时显示无漏水
scope.onlyShow = false;
//根据后台返回的数据,获取设备通讯状态,电缆长度,漏水距离
for(var i=0;i<scope.signalList.length;i++){
if(scope.signalList[i].signalName==="设备通讯状态"){
scope.one= scope.signalList[i].currentValue;
}
if(scope.signalList[i].signalName==="电缆长度"){
scope.two= scope.signalList[i].currentValue.split('M')[0];
// console.log(scope.two);
}
if(scope.signalList[i].signalName.indexOf('漏水距离')!=-1){
scope.three= scope.signalList[i].currentValue.split('M')[0];
// console.log(scope.three);
}
}
//当无漏水时,显示“无漏水”
if(scope.three == 0){
scope.onlyShow = true;
}
//根据电缆长度分成n等份
scope.lens = 1/scope.two*100;
//根据电缆长度获得1-n的数组
scope.arrs = [];
for(var i=0;i<scope.two;i++){
scope.arrs.push(i+1);
};
//根据获得的数组arrs和漏水距离判断漏水绳那个位置漏水
var onlyDom = document.getElementsByClassName('progress-bar');
for(var i=0;i<=scope.two;i++){
//加上这个判断 onlyDom.length!=0和scope.three!=0 可防止浏览器报Cannot read property 'className' of undefined的错误
if(scope.three==i && onlyDom.length!=0 && scope.three!=0){
removeClass("progress-bar-success",onlyDom[i-1]);
addClass("progress-bar-danger",onlyDom[i-1]);
}
};
// 添加class
function addClass(kls, dom) {
var klsReg = new RegExp(kls, 'ig');
var node = dom;
var klses = node.className;
if (!klsReg.test(klses)) {
node.className =klses + ' ' +kls;
}
};
// 删除class
function removeClass(kls, dom) {
var klsReg = new RegExp(kls, 'ig');
var node = dom;
var klses = node.className;
if (klsReg.test(klses)) {
node.className = node.className.replace(kls, '');
}
};
});
};
return {
scope: true,
restrict: "AE",
replace: true,
templateUrl: "partials/signalgroups.html",
compile: function(elem, attrs) {
elem.find("#only").attr("ng-repeat",
"sig in arrs");
return linkFn;
}
};
}
]);
nurseDirective.directive('newpiechartsetter',['$modal','baseTypeService','balert','diagramService','base64','ConfigureMoldService','mdcAssetsManagerService',
function($modal,baseTypeService,balert,diagramService,base64,ConfigureMoldService,mdcAssetsManagerService){
return {
restrict: 'A',
link:function(scope,element){
var setDlg = null;
scope.pies = {};
function getPartNum(typename){
var num = 1;
var cparts = scope.diagram.parts;
if(cparts == undefined){
scope.diagram.parts = [];
return 1;
}
for(var i=0;i<cparts.length;i++){
if(cparts[i].id.indexOf(typename)==-1) continue;
var partnum=parseInt(cparts[i].id.replace(typename,''));
if(partnum>=num){
num=partnum+1;
}
}
return num;
}
/******************* 过滤设备列表 & 加载信号列表 **************************/
function initDevice(){
if(scope.PieChart == undefined){
scope.PieChart = {};
}
var parentId = scope.diagram.parentId;
if(scope.diagram.deviceBaseTypeId == "1004" ||
(parseInt(scope.diagram.deviceBaseTypeId) >= 8888 && parseInt(scope.diagram.deviceBaseTypeId) < 9999))
parentId = "";
ConfigureMoldService.GetPartEquipments(parentId).then(function(data){
scope.PieChart.Equipments = _.sortBy(data,function(item){return item.configName;});
scope.deviceList = _.sortBy(data,function(item){return item.configName;});
scope.PieChart.EquipmentId = scope.diagram.deviceId;
if(scope.PieChart.EquipmentId == undefined)
scope.PieChart.EquipmentId = scope.PieChart.Equipments[0].equipmentId;
scope.changeEquipment(scope.PieChart.EquipmentId);
});
mdcAssetsManagerService.GetMdcAssetsConfig().then(function (data) {
if(data && data.assetsDevices){
scope.mdcAssetsCabinets = data.assetsDevices;
}
});
}
/*********************************************************************/
function init(){
scope.PieChart = {
Title : '',
DataType : '1',
ChartType : 'line',
Background : 'configure_bg',
Size : '7',
SingleBiaxial : '1',
LineColor : '[[0.2,"#59cd82"],[0.8,"#f7e140"],[1,"#f44b36"]]',
LineImages : 'newGaugeBG1',
BarColor:'["#ff7f50","#87cefa","#c1232b","#fcce10","#9bca63"]',
Y1Name : '',
Y1Min : '0',
Y1Max : 'auto',
Y1Signals : '',
PieColor : '#1066C3',
PieValueType : "per",
StoreInterval:12,
Unit:""
};
var style = localStorage.getItem("systemStyle");
if(style == "Blue"){
scope.background = "configure_bg";
scope.backgroundMap = "Bule";
} else if(style == "White") {
scope.background = "white_bg";
scope.backgroundMap = "White";
}
else{
scope.PieChart.Background = "";
}
}
var showMultiDeviceSelectDlg = $modal({
scope:scope,
templateUrl:'partials/showMultiDeviceSelect.html',
show:false
});
//多设备多选
function initMultiDeviceSelect(){
var filterOut = function(original, toFilter) {
if(toFilter == undefined) return original;
var filtered = [];
angular.forEach(original, function(entity) {
var match = false;
for (var i = 0; i < toFilter.length; i++) {
if (toFilter[i].deviceBaseTypeId == entity.deviceBaseTypeId &&
toFilter[i].baseTypeId == entity.baseTypeId) {
match = true;
break;
}
}
if (!match) {
filtered.push(entity);
}
});
return filtered;
};
function fromJson(data){
var arr = [];
data.forEach(function(item){
arr.push(angular.fromJson(item));
});
return arr;
}
scope.refreshAvailable = function() {
scope.bind.selectedsigs = filterOut(scope.bind.selectedsigs, scope.bind.siglist);
scope.selected.available = [];
scope.selected.current = [];
};
scope.addMulti = function() {
scope.selected.available = fromJson(scope.selected.available);
if(!scope.bind.selectedsigs) scope.bind.selectedsigs = scope.selected.available;
else scope.bind.selectedsigs = scope.bind.selectedsigs.concat(scope.selected.available);
scope.bind.siglist = filterOut(scope.bind.siglist, scope.selected.available);
scope.refreshAvailable();
};
scope.removeMulti = function() {
scope.selected.current = fromJson(scope.selected.current);
scope.bind.siglist = scope.bind.siglist.concat(scope.selected.current);
scope.bind.selectedsigs = filterOut(scope.bind.selectedsigs, scope.selected.current);
scope.refreshAvailable();
};
scope.showMultiSelect = function(obj,data){
scope.selected = {};
if(scope.bind == undefined) scope.bind = {};
scope.bind.selectedsigs = undefined;
scope.obj = obj;//对象字符串
if(data != undefined && data != ""){
var data = angular.fromJson(data);
scope.bind.selectedsigs = data;
}
scope.Topology.DeviceId = scope.diagram.deviceId;
scope.changeDevice(scope.Topology.DeviceId);
showMultiDeviceSelectDlg.$promise.then(showMultiDeviceSelectDlg.show);
};
scope.saveMultiSelect = function(deviceId,obj){
var error = scope.languageJson.Configuration.ActiveChartControl;
if(scope.bind.selectedsigs == undefined || scope.bind.selectedsigs.length == 0){
//'信号不能为空!'
balert.show('danger', error.ErrorSignal,3000);
return;
}
if(scope.PieChart.DataType == 1 && ((scope.PieChart.ChartType == 'gauge' || scope.PieChart.ChartType == 'newGauge')
&& scope.bind.selectedsigs.length > 1)){
//'仪表盘的信号只能为一个!'
balert.show('danger', error.ErrorGauge,3000);
return;
}
if(scope.PieChart.ChartType == 'pie' && scope.bind.selectedsigs.length < 2){
//'饼图的信号不能少于2个'
balert.show('danger', error.ErrorPie,3000);
return;
}
if(scope.bind.selectedsigs.length > 0){
var str = angular.toJson(scope.bind.selectedsigs);
eval(obj+"=str");
}
showMultiDeviceSelectDlg.hide();
};
scope.changeDevice = function(id){
baseTypeService.getGaugeSignalBaseType(id).then(function(data) {
scope.bind.siglist = filterOut(data, scope.bind.selectedsigs);
});
};
}
function initFunction(){
initMultiDeviceSelect();
scope.changeEquipment = function(equipmentId){
baseTypeService.GetSinalByEquipmentId(equipmentId).then(function(data){
scope.PieChart.Signals = data;
});
scope.PieChart.SignalId = undefined;
};
scope.dataTypeChange = function(type){
if(type == 2 || type == 3 || type == 7)
scope.PieChart.ChartType = 'gauge';
else if(type == 4 || type == 5 || type == 6 || type >= 8)
scope.PieChart.ChartType = 'pie';
if(type == 2){
scope.PieChart.Y1Min = 1;
scope.PieChart.Y1Max = 1.5;
}
};
/** 其他容量占比 **/
scope.ClickSignalsLi = function(id,symbol){
if(eval("scope.PieChart."+id+" == undefined"))
eval("scope.PieChart."+id+" = ''");
var textDom = document.getElementById(id);
var addStr = symbol;
if(symbol == 'del'){
if(id == 'Expression1'){
scope.PieChart.Expression1 = "";
}else{
scope.PieChart.Expression2 = "";
}
}else if (textDom.selectionStart || textDom.selectionStart == '0') {
if(id == 'Expression1')
scope.PieChart.Expression1 = scope.PieChart.Expression1.substring(0,scope.startPos)+addStr+
scope.PieChart.Expression1.substring(scope.endPos);
else
scope.PieChart.Expression2 = scope.PieChart.Expression2.substring(0,scope.startPos)+addStr+
scope.PieChart.Expression2.substring(scope.endPos);
textDom.focus();
textDom.selectionStart = scope.startPos + addStr.length;
textDom.selectionEnd = scope.startPos + addStr.length;
textDom.scrollTop = scope.scrollTop;
}else {
eval("scope.PieChart."+id+" += "+addStr+"");
textDom.focus();
}
};
scope.getCursortPosition = function(id){
scope.nowExprId = id;
var textDom = document.getElementById(id);
if (textDom.selectionStart || textDom.selectionStart == '0') {
scope.startPos = textDom.selectionStart;
scope.endPos = textDom.selectionEnd;
scope.scrollTop = textDom.scrollTop;
}
};
scope.changeSignal = function(){
var textDom = undefined;
if(scope.nowExprId == undefined){
textDom = document.getElementById("Expression1");
if(scope.PieChart.Expression1 == undefined)
scope.PieChart.Expression1 = "";
scope.nowExprId = "Expression1";
}else{
textDom = document.getElementById(scope.nowExprId);
if(eval("scope.PieChart."+scope.nowExprId+" == undefined"))
eval("scope.PieChart."+scope.nowExprId+" = ''");
}
var addStr = "["+scope.PieChart.EquipmentId+"-"+scope.PieChart.SignalId+"]";
if (textDom.selectionStart || textDom.selectionStart == '0') {
if(scope.nowExprId == 'Expression1')
scope.PieChart.Expression1 = scope.PieChart.Expression1.substring(0,scope.startPos)+addStr+
scope.PieChart.Expression1.substring(scope.endPos);
else
scope.PieChart.Expression2 = scope.PieChart.Expression2.substring(0,scope.startPos)+addStr+
scope.PieChart.Expression2.substring(scope.endPos);
textDom.focus();
textDom.selectionStart = scope.startPos + addStr.length;
textDom.selectionEnd = scope.startPos + addStr.length;
textDom.scrollTop = scope.scrollTop;
}else {
eval("scope.PieChart."+scope.nowExprId+" += "+addStr+"");
textDom.focus();
}
};
var showColorSelectDlg = $modal({
scope:scope,
templateUrl:'partials/showColorSelect.html',
show:false
});
//仪表盘 盘颜色
scope.showColorSelect = function(data){
scope.ColorSelect = angular.fromJson(data);
showColorSelectDlg.$promise.then(showColorSelectDlg.show);
scope.saveColorSelect = function(){
var is = false;
for(var i = 0 ;i < scope.ColorSelect.length;i++){
if(scope.ColorSelect[i][0] == undefined || scope.ColorSelect[i][0] == "" ||
scope.ColorSelect[i][1] == undefined || scope.ColorSelect[i][1] == "")
is = true;
}
if(is){
//'不能为空!'
balert.show('danger', scope.languageJson.Configuration.ActiveChartControl.ErrorEmpty,3000);
return;
}
scope.PieChart.LineColor = angular.toJson(scope.ColorSelect);
showColorSelectDlg.hide();
};
};
//#region 刻度配色
var showColorSelectDlg2 = $modal({
scope:scope,
templateUrl:'partials/showColorSelect2.html',
show:false
});
scope.showColorSelect2 = function(data){
scope.ColorSelect = angular.fromJson(data);
showColorSelectDlg2.$promise.then(showColorSelectDlg2.show);
scope.saveColorSelect2 = function(){
var is = false;
for(var i = 0 ;i < scope.ColorSelect.length;i++){
if(scope.ColorSelect[i][0] == undefined || scope.ColorSelect[i][0] == "" ||
scope.ColorSelect[i][1] == undefined || scope.ColorSelect[i][1] == "")
is = true;
}
if(is){
//'不能为空!'
balert.show('danger', scope.languageJson.Configuration.ActiveChartControl.ErrorEmpty,3000);
return;
}
scope.PieChart.LineColor = angular.toJson(scope.ColorSelect);
showColorSelectDlg2.hide();
};
};
scope.addColorClick2 = function(){
scope.ColorSelect.push([1,"#fff"]);
};
scope.delColorClick2 = function(index){
scope.ColorSelect.splice($index,1);
};
//#endregion
var showBarColorSelectDlg = $modal({
scope:scope,
templateUrl:'partials/showMoreColorBox.html',
show:false
});
//条形柱 柱子颜色
scope.showBarColorSelect = function(data){
scope.hideRange = true;//隐藏
//颜色集合
var colors = angular.fromJson(data);
scope.ColorSelect = [];
if(colors){
colors.forEach(function(col){
var c = [col,col];
scope.ColorSelect.push(c);
});
}
showBarColorSelectDlg.$promise.then(showBarColorSelectDlg.show);
//重写保存
scope.saveColorSelect = function(){
if(scope.ColorSelect){
var colors = [];
scope.ColorSelect.forEach(function(item){
colors.push(item[1]);
});
scope.PieChart.BarColor = angular.toJson(colors);
}else
scope.PieChart.BarColor = "";
showBarColorSelectDlg.hide();
};
};
//新增
scope.addColorClick = function(){
scope.ColorSelect.push(["#ffffff","#ffffff"]);
};
//删除
scope.delColorClick = function($index){
scope.ColorSelect.splice($index,1);
};
scope.showColpickColor = function(color,index){
scope.mod = "scope.ColorSelect["+index+"][1]";
scope.color = color.replace(/#/g,'');
$('#picker').colpick({
flat:true,
color:scope.color,
onSubmit:function(hsb,hex,rgb,el){
eval(scope.mod+" = \"#"+hex+"\"");
}
});
};
scope.addMeaningClick = function(value,meaning,result){
if(value == undefined || value == "") return result;
if(meaning == undefined || meaning == "") return result;
if(result == undefined || result == "")
result = value+"."+meaning;
else
result += "/"+value+"."+meaning;
return result;
};
//region 修改信号名称
var modifyDlg = $modal({
scope: scope,
templateUrl: 'partials/modifyHisSignalName.html',
show: false
});
// 弹出修改信号名称
scope.moidfySignalNameClk = function(selects){
// {"deviceBaseTypeId":"[设备编号]","deviceBaseName":"[设备名称]","baseTypeId":"[信号基类]","baseTypeName":"[信号名称]","remark":"[单位]"}
scope.modifySelects = selects;
modifyDlg.$promise.then(modifyDlg.show);
};
// 修改信号名称
scope.modify = function(selects){
scope.bind.selectedsigs = selects;
modifyDlg.hide();
};
// 将对象转为编译字符串
scope.jsonToString = function(selects){
try{
selects = angular.fromJson(selects);
if(selects != undefined && selects.length > 0){
return "|SN:"+base64.encode(angular.toJson(selects));
}
}catch(e){}
return "|SN:";
}
//endregion
}
function parseBinding(data){
var result = '';
if(data.DataType == 1 || data.DataType == 7){
if(data.ChartType == 'line' || data.ChartType == 'bar')//折线图 || 柱形图
result = data.ChartType+'|'+data.Size+'&';
else if(data.DataType == 7)
result = data.ChartType+'|AvgMaxMin&';
var y1Signals = angular.fromJson(data.Y1Signals);
y1Signals.forEach(function(item){
result += 'BS:'+item.baseTypeId+'|DI:'+item.deviceBaseTypeId+"&";
});
}else{//2:PUE 3:MDC功率 4:MDC空间总占比 5:IT负载 6:制冷容量
result = "piechart|"+data.DataType;
if(data.DataType == 2 || data.DataType == 6){
if(scope.PieChart.Expression2)
result += "|expr1:"+base64.encode(scope.PieChart.Expression1)+"&expr2:"+
base64.encode(scope.PieChart.Expression2);
else
result += "|expr1:"+base64.encode(scope.PieChart.Expression1)+"&expr2:";
}
}
return result;
}
function showTitle(){
setTimeout(function(){
$(".powerFun").attr("data-original-title","<h5>"+scope.languageJson.Configuration.ActiveChartControl.Function.PowerFun+"</h5>");
$(".absVal").attr("data-original-title","<h5>"+scope.languageJson.Configuration.ActiveChartControl.Function.AbsVal+"</h5>");
$(".maxVal").attr("data-original-title","<h5>"+scope.languageJson.Configuration.ActiveChartControl.Function.MaxVal+"</h5>");
$(".minVal").attr("data-original-title","<h5>"+scope.languageJson.Configuration.ActiveChartControl.Function.MinVal+"</h5>");
},500);
}
function parseLineColor(ChartType){
if(ChartType == "gauge" || ChartType == "scale")//仪表盘/刻度
return scope.PieChart.LineColor;
else //矩形图
return scope.PieChart.BarColor;
}
// 存储PUE的表达式
function savePUECofnig(id,expression,expression2,time){
id = scope.diagram.deviceId+id;// 拼接设备编号+序列号
var expr = expression+" / 1";
if(expression2 != undefined && expression2 != ""){
expr = "("+expression+") / ("+expression2+")";
}
diagramService.SavePueConfig(id+"|"+expr+"|"+time).then(function(data){});
}
element.bind('click',function(){
initFunction();
initDevice();
init();
setDlg = $modal({
scope: scope,
templateUrl: 'partials/newpiechartsetter.html',
show: false
});
setDlg.$promise.then(setDlg.show);
showTitle();
scope.save = function(){
var error = scope.languageJson.Configuration.ActiveChartControl;
if(scope.PieChart.SingleBiaxial == 1 && scope.PieChart.DataType == 1 &&
(scope.PieChart.Y1Signals == undefined || scope.PieChart.Y1Signals == '')){
//'Y1轴信号不能为空'
balert.show('danger', error.ErrorY1,3000);
return;
}
if(scope.PieChart.SingleBiaxial == 2 && scope.PieChart.DataType == 1 &&
(scope.PieChart.Y2Signals == undefined || scope.PieChart.Y2Signals == '')){
//'Y2轴信号不能为空'
balert.show('danger', error.ErrorY2,3000);
return;
}
if(scope.PieChart.DataType == 6 && (scope.PieChart.ChartType == "pie" || scope.PieChart.ChartType == "gauge")
&& (scope.PieChart.Expression1 == undefined || scope.PieChart.Expression1 == "")){
//'当前值表达式不能为空!'
balert.show('danger', error.ErrorCurrentVal,3000);
return;
}
if(scope.PieChart.DataType == 2 && (scope.PieChart.Expression1 == undefined || scope.PieChart.Expression1 == "")){
balert.show('danger', error.ErrorCurrentVal,3000);//'当前值表达式不能为空!'
return;
}
if(scope.PieChart.DataType == 6 && scope.PieChart.ChartType == "pie" &&
(scope.PieChart.Expression2 == undefined || scope.PieChart.Expression2 == "")){
//'总值表达式不能为空!'
balert.show('danger', error.ErrorTotalVal,3000);
return;
}
var cofg ={};
cofg.id = "piechart"+getPartNum("piechart");
cofg.type = "piechartpart";
cofg.left = "5";
cofg.top = "80";
cofg.width = "400";
cofg.height = "300";
cofg.binding = parseBinding(scope.PieChart);
cofg.options = "Title:"+scope.PieChart.Title+"|ChartType:"+scope.PieChart.ChartType
+"|DataType:"+scope.PieChart.DataType+"|LineColor:"+parseLineColor(scope.PieChart.ChartType)
+"|LineImages:"+scope.PieChart.LineImages
+"|Y1Name:"+scope.PieChart.Y1Name+"|Y1Min:"+scope.PieChart.Y1Min+"|Y1Max:"+scope.PieChart.Y1Max
+"|Size:"+scope.PieChart.Size+"|Background:"+scope.PieChart.Background
+"|PieColor:"+scope.PieChart.PieColor+"|PieValueType:"+scope.PieChart.PieValueType
+"|Unit:"+scope.PieChart.Unit+"|Meaning:"+scope.PieChart.Meaning+"|StoreInterval:"+scope.PieChart.StoreInterval
+"|CabinetId:"+scope.PieChart.CabinetId+scope.jsonToString(scope.PieChart.Y1Signals)+showBtn();
scope.diagram.parts.push(cofg);
scope.resetParts();
setDlg.hide();
// DataType == 2 || 6 实时PUE|表达式,将表达式存库
if(scope.PieChart.DataType == 2 || scope.PieChart.DataType == 6){
savePUECofnig(cofg.id,scope.PieChart.Expression1,scope.PieChart.Expression2,scope.PieChart.StoreInterval);
}
};
function showBtn(){
try {
return "|SHisBtn:"+scope.PieChart.showHisBtn+"|STotalBtn:"+scope.PieChart.showTotalBtn;
} catch (error) {
return "|SHisBtn:|STotalBtn:";
}
};
});
}
}
}
]);
nurseDirective.directive('newcamerasetter', ['$modal','CameraService','balert',
function($modal,CameraService,balert) {
return {
restrict: 'A',
link: function(scope, element) {
var setDlg = null;
scope.camerachecked={};
scope.cameralist =new Array();
function getPartConfig(diagram, id) {
var found = _.find(diagram.parts, function(part) {
return part.id === id;
});
return found;
}
function getPartNum(typename)
{
var num=1;
var cparts=scope.diagram.parts;
if(cparts == undefined){
scope.diagram.parts = [];
return 1;
}
for(var i=0;i<cparts.length;i++)
{
if(cparts[i].id.indexOf(typename)==-1)continue;
var partnum=parseInt(cparts[i].id.replace(typename,''));
if(partnum>=num){
num=partnum+1;
}
}
return num;
}
function init(){
CameraService.getAllVideoEquipment().then(function(data) {
scope.cameralist=new Array();
var cameradata = eval(data);
for(var x in cameradata){
for(var y in cameradata[x].cameraJson){
var camera ={};
camera.cameraname = cameradata[x].equipmentName+ "-"+cameradata[x].cameraJson[y].cameraName;
camera.id=cameradata[x].equipmentId +'_'+cameradata[x].cameraJson[y].cameraId;
scope.cameralist.push(camera);
}
}
});
}
element.bind('click', function() {
init();
setDlg = $modal({
scope: scope,
templateUrl: 'partials/newcamerasetter.html',
show: false
});
setDlg.$promise.then(setDlg.show);
scope.save = function() {
if(scope.camerachecked.item==undefined){
//'请选择需绑定的视频。'
balert.show('warning', scope.languageJson.Configuration.VideoControl.ErrorPrompt,2000);
return;
}
var confg ={};
confg.id="camerapart"+getPartNum("camerapart");
confg.type="camerapart";
confg.left="5";
confg.top="80";
confg.width="60";
confg.height="165";
confg.zindex="1";
confg.binding="BS:0";
confg.options="Img:img/diagram/camera.png|cameraid:"+scope.camerachecked.item;
scope.diagram.parts.push(confg);
setDlg.hide();
scope.resetParts();
};
});
}
}
}
]);
nurseDirective.directive('newlabelsetter', ['$modal','baseTypeService','balert','ConfigureMoldService',
function($modal,baseTypeService,balert,ConfigureMoldService) {
return {
restrict: 'A',
link: function(scope, element) {
var setDlg = null;
var setDlgs = null;
scope.data = {};
function getPartConfig(diagram, id) {
var found = _.find(diagram.parts, function(part) {
return part.id === id;
});
return found;
}
/******************* 过滤设备列表 & 加载信号列表 **************************/
function initDevice(){
if(scope.Topology == undefined) {
scope.Topology = {};
}
var parentId = scope.diagram.parentId;
if(scope.diagram.deviceBaseTypeId == "1004" ||
(parseInt(scope.diagram.deviceBaseTypeId) >= 8888 && parseInt(scope.diagram.deviceBaseTypeId) < 9999))
parentId = "";
ConfigureMoldService.GetPartEquipments(parentId).then(function(data){
scope.deviceList = _.sortBy(data,function(item){return item.configName;});
scope.Topology.DeviceId = scope.deviceList[0].equipmentId;
selectOption();
baseTypeService.getSignalBaseTypesByDeviceType(scope.Topology.DeviceId).then(function(datas) {
scope.data.devices = datas;
});
});
}
/*********************************************************************/
function getPartNum(typename)
{
var num=1;
var cparts=scope.diagram.parts;
if(cparts == undefined){
scope.diagram.parts = [];
return 1;
}
for(var i=0;i<cparts.length;i++)
{
if(cparts[i].id.indexOf(typename)==-1)continue;
var partnum=parseInt(cparts[i].id.replace(typename,''));
if(partnum>=num){
num=partnum+1;
}
}
return num;
}
function getNewPart(type) {
var style = localStorage.getItem("systemStyle");
var num=getPartNum(type);
var part={};
part.id=type+num;
part.Name=scope.languageJson.Configuration.TextControl.TextContent.Content;//"新建文本"
part.FontSize="15";
part.FontWeight="bold";
part.TextAlign="center";
if(style == "White")
part.Color="#000000";
else
part.Color="#FFFFFF";
part.BackColor="";
part.BackStyle="";
scope.newpart=part;
}
//根据文本内容选择信号
function selectOption(){
var patt = /\{\d*\-\d*\}/;
scope.selectId = undefined;
if(scope.newpart.Name != undefined && patt.test(scope.newpart.Name)){
var content = scope.newpart.Name;
var sIndex = content.indexOf("-") + 1;
var eIndex = content.lastIndexOf("}");
scope.Topology.DeviceId = content.substring(1,sIndex-1);
scope.selectId = content.substring(sIndex,eIndex);
}
}
element.bind('click', function() {
getNewPart("label");
setDlg = $modal({
scope: scope,
templateUrl: 'partials/newlabelsetter.html',
show: false
});
setDlg.$promise.then(setDlg.show);
scope.changeDevice = function(id){
baseTypeService.getSignalBaseTypesByDeviceType(id).then(function(data) {
scope.data.devices = data;
});
};
scope.save = function() {
if(scope.newpart.Name == undefined){
scope.newpart.Name = "";
}
var cofg ={};
var signal = scope.newpart.Name.replace('{', '').replace('}', '').split('-');
cofg.id=scope.newpart.id;
cofg.type="labelpart";
cofg.left="5";
cofg.top="80";
cofg.width="85";
cofg.height="90";
cofg.zindex="1";
cofg.binding= signal.length == 1 ? "BS:0" : "BS:"+signal[1]+"|DI:"+signal[0];
cofg.options="Name:"+scope.newpart.Name+"|FontSize:"+scope.newpart.FontSize+"|FontWeight:"+scope.newpart.FontWeight+
"|TextAlign:"+scope.newpart.TextAlign+"|Color:"+scope.newpart.Color+
"|BackColor:"+(scope.newpart.BackColor===undefined?"":scope.newpart.BackColor)+
"|BackStyle:"+(scope.newpart.BackStyle===undefined?"":scope.newpart.BackStyle);
scope.diagram.parts.push(cofg);
setDlg.hide();
scope.resetParts();
};
scope.bindingDlg = function(){
initDevice();
selectOption();
setDlgs = $modal({
scope: scope,
templateUrl: 'partials/bindingDlg.html',
show: false
});
setDlgs.$promise.then(setDlgs.show);
};
scope.deleteBind = function(){
scope.newpart.Name = "";
setDlgs.hide();
};
scope.ok = function(){
if(scope.data.selecteds == undefined) return;
var data = angular.fromJson(scope.data.selecteds[0]);
//deviceBaseTypeId => EquipmentId
scope.newpart.Name = "{"+data.deviceBaseTypeId+"-"+data.baseTypeId+"}";
setDlgs.hide();
};
});
}
}
}
]);
nurseDirective.directive('newimagesetter', ['$modal','uploadService','balert','ImageManageService',
function($modal,uploadService,balert,ImageManageService) {
return {
restrict: 'A',
link: function(scope, element) {
var setDlg = null;
var showImgFileDlg = undefined;
function getPartConfig(diagram, id) {
var found = _.find(diagram.parts, function(part) {
return part.id === id;
});
return found;
}
function getPartNum(typename) {
var num = 1;
var cparts = scope.diagram.parts;
if(cparts == undefined){
scope.diagram.parts = [];
return 1;
}
for(var i=0;i<cparts.length;i++) {
if(cparts[i].id.indexOf(typename)==-1)continue;
var partnum = parseInt(cparts[i].id.replace(typename,''));
if(partnum >= num) num = partnum + 1;
}
return num;
}
function getNewPart(type){
var num=getPartNum(type);
var part={};
part.id=type+num;
part.options="img/diagram/default.jpg";
scope.newpart=part;
}
function initFunction(){
scope.imgFilePath = undefined;
scope.showImgFile = function(){
scope.imgFiles = {
catalog : "img/diagram",
imageFile : undefined
};
showImgFileDlg = $modal({
scope: scope,
templateUrl: 'partials/showImgFile.html',
show: false
});
showImgFileDlg.$promise.then(showImgFileDlg.show);
scope.changeCatalog(scope.imgFiles.catalog);
};
scope.changeCatalog = function(catalog){
ImageManageService.LoadImagesByPath(catalog).then(function(data){
scope.ImageFiles = data;
});
};
scope.clickImage = function(imageFile,$event){
scope.imgFiles.imageFile = imageFile;
$($event.currentTarget).parent().find('div').removeClass("select-image");
$($event.currentTarget).addClass("select-image");
};
scope.selectImageFile = function(){
if(scope.imgFiles == undefined || scope.imgFiles.imageFile == undefined){
//'请选择图片。'
balert.show('danger', scope.languageJson.Configuration.LocalImage.SelectError,3000);
return;
}
scope.imgFilePath = scope.imgFiles.imageFile;
showImgFileDlg.hide();
};
}
element.bind('click', function() {
getNewPart("image");
initFunction();
setDlg = $modal({
scope: scope,
templateUrl: 'partials/newimagesetter.html',
show: false
});
setDlg.$promise.then(setDlg.show);
scope.file = undefined;
scope.save = function() {
var cofg ={};
cofg.id=scope.newpart.id;
cofg.type="imagepart";
cofg.left="5";
cofg.top="80";
cofg.width="100";
cofg.height="120";
cofg.binding="BS:0";
var file = scope.file;
if (file === undefined){
if(scope.imgFilePath == undefined){
//'请选择上传图片或者本地图片'
balert.show('danger', scope.languageJson.Configuration.ImageControl.UploadError,3000);
return;
}
cofg.options=scope.imgFilePath;
scope.diagram.parts.push(cofg);
setDlg.hide();
scope.resetParts();
}else if(file.size>512000) {
//'新增图片不能大于500K,请压缩尺寸后再修改。'
balert.show('danger', scope.languageJson.Configuration.ImageControl.SizeError,3000);
}else {
scope.loading = true;
uploadService.uploadFile(scope.
file).then(function(data) {
cofg.options=data;
scope.diagram.parts.push(cofg);
setDlg.hide();
scope.resetParts();
scope.loading = false;
});
}
};
});
}
}
}
]);
nurseDirective.directive('newlinkbuttonsetter', ['$modal','ConfigureMoldService','balert',
function($modal,ConfigureMoldService,balert) {
return {
restrict: 'A',
link: function(scope, element) {
var setDlg = null;
function getPartNum(typename) {
var num = 1;
var cparts = scope.diagram.parts;
if(cparts == undefined){
scope.diagram.parts = [];
return 1;
}
for(var i=0;i<cparts.length;i++) {
if(cparts[i].id.indexOf(typename)==-1)continue;
var partnum = parseInt(cparts[i].id.replace(typename,''));
if(partnum >= num) num = partnum + 1;
}
return num;
}
function getNewPart(type){
var num=getPartNum(type);
var part={};
part.id=type+num;
part.url="/#";
part.target="";
part.filePath="/home/app/myprotocol.sh";
scope.newpart=part;
}
function initFunction(){
scope.ConfigureParts = [];
ConfigureMoldService.GetAllConfigureMold().then(function(data){
scope.ConfigureMolds = data;
});
scope.changeParent = function(data){
scope.newpart.partId = undefined;
var obj = angular.fromJson(data);
scope.part = data;
if(obj.parts){
scope.ConfigureParts = obj.parts;
scope.newpart.parentId = obj.configId;
}else
scope.ConfigureParts = [];
};
scope.changePart = function(data){
scope.part = data;
};
}
element.bind('click', function() {
getNewPart("linkbutton");
initFunction();
setDlg = $modal({
scope: scope,
templateUrl: 'partials/newlinkbuttonsetter.html',
show: false
});
setDlg.$promise.then(setDlg.show);
scope.save = function() {
if(scope.newpart.target == '_configure' &&
(scope.newpart.parentId == undefined && scope.newpart.part == undefined)){
return;
}
var cofg ={};
cofg.id=scope.newpart.id;
cofg.type="linkbuttonpart";
cofg.left="5";
cofg.top="80";
cofg.width="60";
cofg.height="60";
cofg.binding="BS:0";
cofg.options="Url:"+scope.newpart.url+"|Target:"+scope.newpart.target+
"|ParentId:"+scope.newpart.id+createPartStr(scope.newpart.target,scope.newpart.part)+
"|FilePath:"+((scope.newpart == undefined)?"":scope.newpart.filePath);
scope.diagram.parts.push(cofg);
setDlg.hide();
scope.resetParts();
};
});
function createPartStr(target,part){
if(target != "_configure") return "";
var cfg = angular.fromJson(part);
if(cfg.deviceId == "" && cfg.baseTypeId == ""){
cfg.deviceId = cfg.configUrl.replace(/[^0-9]/ig,'');
cfg.baseTypeId = cfg.deviceId;
}
return "|ConfigId:"+cfg.configId+"|Dev:"+cfg.deviceId+"|DevBaseType:"+cfg.baseTypeId+"|ConfigUrl:"+cfg.configUrl;
}
}
}
}
]);
nurseDirective.directive('newtablesetter',['$modal','baseTypeService','balert','$compile','ConfigureMoldService',
function($modal,baseTypeService,balert,$compile,ConfigureMoldService){
return {
restrict : 'A',
link: function(scope,element){
var setDlg = null;
var setDlgs = null;
var rowCount = 2;
var colCount = 4;
var NtsId = "";
function getPartNum(typename) {
var num = 1;
var cparts = scope.diagram.parts;
if(cparts == undefined){
scope.diagram.parts = [];
return 1;
}
for(var i=0;i<cparts.length;i++) {
if(cparts[i].id.indexOf(typename)==-1)continue;
var partnum = parseInt(cparts[i].id.replace(typename,''));
if(partnum >= num) num = partnum + 1;
}
return num;
}
function getNewPart(type){
var num=getPartNum(type);
var part={};
part.id=type+num;
part.url="/#";
part.target="";
scope.newpart=part;
}
/******************* 过滤设备列表 & 加载信号列表 **************************/
function initDevice(){
if(scope.Topology == undefined) {
scope.Topology = {};
}
var parentId = scope.diagram.parentId;
if(scope.diagram.deviceBaseTypeId == "1004" ||
(parseInt(scope.diagram.deviceBaseTypeId) >= 8888 && parseInt(scope.diagram.deviceBaseTypeId) < 9999))
parentId = "";
ConfigureMoldService.GetPartEquipments(parentId).then(function(data){
scope.deviceList = _.sortBy(data,function(item){return item.configName;});
scope.Topology.DeviceId = scope.diagram.deviceId;
if(scope.Topology.DeviceId == undefined)
scope.Topology.DeviceId = scope.deviceList[0].equipmentId;
baseTypeService.getSignalBaseTypesByDeviceType(scope.Topology.DeviceId).then(function(datas) {
scope.data.devices = datas;
});
var style = localStorage.getItem("systemStyle");
if(style == "White") {
scope.Topology.Style = "white_bg";
scope.backgroundMap = "White";
}
else{
scope.Topology.Style = "";
}
});
}
/*********************************************************************/
element.bind('click',function(){
initDevice();
getNewPart("tablepart");
setDlg = $modal({
scope:scope,
templateUrl:'partials/newtablesetter.html',
show:false
});
rowCount = 2;
colCount = 4;
setDlg.$promise.then(setDlg.show);
scope.NtsOcerflow = "";
scope.addCol = function(){
colCount++;
var i = 0;
$("#NtsTable tr").each(function(){
var trHtml = "";
if(i === 0){
trHtml = '<td><input type="text" id="rowTitle'+colCount+'" class="form-control" placeholder= "'+scope.languageJson.Configuration.TableControl.ColTitle+colCount+'" Virtual-Key-Board/></td>';//列标题
}else{
trHtml = '<td><input type="text" id="value'+(i+1)+'00'+(colCount-1)+'" ng-click="bindingDlg('+(i+1)+'00'+(colCount-1)+')" class="form-control" placeholder="'+scope.languageJson.Configuration.TableControl.Value+(i+1)+'00'+(colCount-1)+'"/></td>';//值
}
var $html = $compile(trHtml)(scope);
$(this).append($html);
i++;
});
// if(colCount >= 5 && colCount <= 9){
// var width = parseInt($("#ModalDialog").css("width")) + 120;
// $("#ModalDialog").css("width",width+"px");
// }else if(colCount > 9){
// var width = parseInt($("#NtsTable").css("width")) + 120;
// $("#NtsTable").css("width",width+"px");
// }
};
scope.addRow = function(){
rowCount++;
var rowTemplate = '<tr>';
for(var i=0;i<colCount;i++){
if(i === 0){
rowTemplate += '<td><input type="text" id="colTitle'+rowCount+'" class="form-control" placeholder="'+scope.languageJson.Configuration.TableControl.RowTitle+rowCount+'" Virtual-Key-Board/></td>';//行标题
}else{
rowTemplate += '<td><input type="text" id="value'+rowCount+'00'+i+'" ng-click="bindingDlg('+rowCount+'00'+i+')" class="form-control" placeholder="'+scope.languageJson.Configuration.TableControl.Value+rowCount+'00'+i+'"/></td>';//值
}
}
rowTemplate += '</tr>';
var $html = $compile(rowTemplate)(scope);
$("#NtsTable tbody").append($html);
};
scope.delCol = function(){
colCount--;
$("#NtsTable tr").each(function(){
$("td:eq("+colCount+")",this).remove();
});
// var width = parseInt($("#ModalDialog").css("width")) - 120;
// if(width >= 600)
// $("#ModalDialog").css("width",width+"px");
};
scope.delRow = function(){
rowCount--;
$("#NtsTable tr:eq("+rowCount+")").remove();
};
scope.changeDevice = function(id){
baseTypeService.getSignalBaseTypesByDeviceType(id).then(function(data) {
scope.data.devices = data;
});
};
scope.save = function(){
var cofg ={};
cofg.id=scope.newpart.id;
cofg.type="tablepart";
cofg.left="5";
cofg.top="80";
cofg.width=colCount*48;//570
cofg.height=rowCount*46;//160
cofg.zindex="1";
cofg.binding=getBinDing()+"|DI:"+scope.Topology.DeviceId;
cofg.options="Head:"+getHead()+"|Rows:"+RowsData()+"|Style:"+scope.Topology.Style+"|DeviceId:"+scope.Topology.DeviceId;
scope.diagram.parts.push(cofg);
setDlg.hide();
scope.resetParts();
};
var getHead = function(){
var head = "";
var i = 0;
$("#NtsTable tr:eq(0) td").each(function(){
if(i === 0)
head += $(this).children('input').val();
else
head += ","+$(this).children('input').val();
i++;
});
return head;
};
var RowsData = function(){
var rowsData = "";
$("#NtsTable tr:gt(0)").each(function(){
var i = 0;
$(this).children('td').each(function(){
if(i === 0)
rowsData += $(this).children('input').val();
else
rowsData += ","+ $(this).children('input').val();
i++;
});
rowsData += "&";
});
rowsData = rowsData.substring(0,rowsData.length-1);
return rowsData;
};
var getBinDing = function(){
var binding = "";
var i = 0;
$("#NtsTable tr:gt(0)").each(function(){
$(this).children('td:gt(0)').each(function(){
var index = $(this).children('input').val().indexOf(":");
var length = $(this).children('input').val().length;
var value = $(this).children('input').val().substring(index+1,length-1);
if(value != ""){
if(i === 0)
binding += "BS:" + value;
else
binding += "|BS:" + value;
i++;
}
});
});
return binding;
};
scope.bindingDlg = function(id){
setDlgs = $modal({
scope: scope,
templateUrl: 'partials/bindingTable.html',
show: false
});
NtsId = "value"+id;
setDlgs.$promise.then(setDlgs.show);
};
scope.ok = function(){
$("#"+NtsId).val("{"+scope.data.selecteds[0].baseTypeName+":"+scope.data.selecteds[0].baseTypeId+"}");
setDlgs.hide();
};
scope.deleteBind = function(){
$("#"+NtsId).val("");
setDlgs.hide();
};
});
}
}
}
]);
nurseDirective.directive('newvirtualsignalsetter',['$modal','equipmentTemplateService','baseTypeService','balert','base64','ConfigureMoldService',
function($modal,equipmentTemplateService,baseTypeService,balert,base64,ConfigureMoldService){
return {
restrict : 'A',
link : function(scope,element){
var setDlg = null,bindMeaningsDlg = null;
scope.virtualSignal = {};
function init(){
scope.virtualSignal = {
name : '',
signalId : undefined,
Expression : '',
unit : '',
Background : '',
fontSize : 14,
dataBackground : '2',
dataColor : '[[999,"#ffffff"]]'
};
var style = localStorage.getItem("systemStyle");
if(style == "White") scope.virtualSignal.dataColor = '[[0,"#000000"]]';
var parentId = scope.diagram.parentId;
if(scope.diagram.deviceBaseTypeId == "1004" ||
(parseInt(scope.diagram.deviceBaseTypeId) >= 8888 && parseInt(scope.diagram.deviceBaseTypeId) < 9999))
parentId = "";
ConfigureMoldService.GetPartEquipments(parentId).then(function(data){
scope.virtualSignal.equipments = _.sortBy(data,function(item){return item.configName;});
scope.virtualSignal.equipmentId = scope.diagram.deviceId;
if(scope.virtualSignal.equipmentId == undefined)
scope.virtualSignal.equipmentId = scope.virtualSignal.equipments[0].id;
scope.changeEquipment(scope.virtualSignal.equipmentId);
});
/*----- 绑定开关量含义 Start ----*/
scope.bindMeaningsBox = function(){
scope.title = scope.languageJson.Configuration.VirtualControl.Kind.Analog;//"虚拟量";
bindMeaningsDlg = $modal({
scope:scope,
templateUrl:'partials/bindingMeanings.html',
show:false
});
bindMeaningsDlg.$promise.then(bindMeaningsDlg.show);
};
scope.addMeaningsCol = function(){
var value = -1;
if(scope.DataMeanings){
scope.DataMeanings.forEach(function(item){
if(item.Value > value){
value = item.Value;
}
});
}
value ++;
var cfg = {
Value : value,
Meanings : scope.languageJson.Configuration.VirtualControl.Meaning2
};//'含义'
if(scope.DataMeanings == undefined) scope.DataMeanings = [];
scope.DataMeanings.push(cfg);
};
scope.deleteMeaningsClick = function($index){
scope.DataMeanings.splice($index,1);
};
scope.saveMeanings = function(){
scope.virtualSignal.meanings = "";
if(scope.DataMeanings){
scope.DataMeanings.forEach(function(item){
if(scope.virtualSignal.meanings == "")
scope.virtualSignal.meanings += item.Meanings;
else
scope.virtualSignal.meanings += "/" + item.Meanings;
});
}
bindMeaningsDlg.hide();
};
/*----- 绑定开关量含义 End ----*/
/*----- 颜色设置 Start ---------------*/
var showColorSelectDlg = $modal({
scope:scope,
templateUrl:'partials/showMoreColorBox.html',
show:false
});
scope.showColorSelect = function(data){
scope.ColorSelect = angular.fromJson(data);
showColorSelectDlg.$promise.then(showColorSelectDlg.show);
};
scope.addColorClick = function(){
scope.ColorSelect.push([1,"#ffffff"]);
};
scope.delColorClick = function($index){
scope.ColorSelect.splice($index,1);
};
scope.saveColorSelect = function(){
scope.virtualSignal.dataColor = angular.toJson(scope.ColorSelect);
showColorSelectDlg.hide();
};
/*----- 颜色设置 End ---------------*/
}
function getPartNum(typename){
var num=1;
var cparts=scope.diagram.parts;
if(cparts == undefined){
scope.diagram.parts = [];
return 1;
}
for(var i=0;i<cparts.length;i++) {
if(cparts[i].id.indexOf(typename)==-1)continue;
var partnum=parseInt(cparts[i].id.replace(typename,''));
if(partnum >= num) num=partnum+1;
}
return num;
}
function getNewPart(type) {
var num = getPartNum(type);
scope.virtualSignal.id = type + num;
}
element.bind('click',function(){
init();
setDlg = $modal({
scope:scope,
templateUrl:'partials/newvirtualsignalsetter.html',
show:false
});
setDlg.$promise.then(setDlg.show);
setTimeout(function(){
$("#powerFun").attr("data-original-title","<h5>"+scope.languageJson.Configuration.VirtualControl.Expression.PowerFun+"</h5>");
$("#absVal").attr("data-original-title","<h5>"+scope.languageJson.Configuration.VirtualControl.Expression.AbsVal+"</h5>");
$("#maxVal").attr("data-original-title","<h5>"+scope.languageJson.Configuration.VirtualControl.Expression.MaxVal+"</h5>");
$("#minVal").attr("data-original-title","<h5>"+scope.languageJson.Configuration.VirtualControl.Expression.MinVal+"</h5>");
$("#int").attr("data-original-title","<h5>"+scope.languageJson.Configuration.VirtualControl.Expression.Int+"</h5>");
$("#double").attr("data-original-title","<h5>"+scope.languageJson.Configuration.VirtualControl.Expression.Double+"</h5>");
},500);
getNewPart("virtualSignal");
scope.changeEquipment = function(equipmentId){
baseTypeService.GetSinalByEquipmentId(equipmentId).then(function(data){
scope.virtualSignal.signals = data;
});
scope.virtualSignal.signalId = undefined;
};
scope.changeSignal = function(){
if(scope.virtualSignal.Expression == undefined)
scope.virtualSignal.Expression = "";
var textDom = document.getElementById("Expression");
var addStr = "["+scope.virtualSignal.equipmentId+"-"+scope.virtualSignal.signalId+"]";
if (textDom.selectionStart || textDom.selectionStart == '0') {
scope.virtualSignal.Expression = scope.virtualSignal.Expression.substring(0,scope.startPos)+addStr+
scope.virtualSignal.Expression.substring(scope.endPos);
textDom.focus();
textDom.selectionStart = scope.startPos + addStr.length;
textDom.selectionEnd = scope.startPos + addStr.length;
textDom.scrollTop = scope.scrollTop;
}else {
scope.virtualSignal.Expression += addStr;
textDom.focus();
}
};
scope.getCursortPosition = function() {
var textDom = document.getElementById("Expression");
if (textDom.selectionStart || textDom.selectionStart == '0') {
scope.startPos = textDom.selectionStart;
scope.endPos = textDom.selectionEnd;
scope.scrollTop = textDom.scrollTop;
}
};
scope.ClickSignalsLi = function(symbol){
if(scope.virtualSignal.Expression == undefined)
scope.virtualSignal.Expression = "";
var textDom = document.getElementById("Expression");
var addStr = symbol;
if (textDom.selectionStart || textDom.selectionStart == '0') {
scope.virtualSignal.Expression = scope.virtualSignal.Expression.substring(0,scope.startPos)+addStr+
scope.virtualSignal.Expression.substring(scope.endPos);
textDom.focus();
textDom.selectionStart = scope.startPos + addStr.length;
textDom.selectionEnd = scope.startPos + addStr.length;
textDom.scrollTop = scope.scrollTop;
}else {
scope.virtualSignal.Expression += addStr;
textDom.focus();
}
};
scope.addNewVirtualSignal = function(){
if(scope.virtualSignal.Expression == undefined || scope.virtualSignal.Expression == ""){
//'表达式不能为空。'
balert.show('danger', scope.languageJson.Configuration.VirtualControl.ErrorPrompt,3000);
return;
}
var cofg ={};
cofg.id=scope.virtualSignal.id;
cofg.type="virtualsignalpart";
cofg.left="5";
cofg.top="80";
cofg.width="150";
cofg.height="140";
cofg.zindex="1";
cofg.binding="expr:"+base64.encode(scope.virtualSignal.Expression);
cofg.options="Name:"+scope.virtualSignal.name+"|Category:"+scope.virtualSignal.category+getCategoryValue(scope.virtualSignal.category)
+"|Background:"+scope.virtualSignal.background+"|FontSize:"+scope.virtualSignal.fontSize
+"|DataBackground:"+scope.virtualSignal.dataBackground+"|DataColor:"+scope.virtualSignal.dataColor;
scope.diagram.parts.push(cofg);
setDlg.hide();
scope.resetParts();
};
function getCategoryValue(category){
if(category == 1){
return "|Unit:"+scope.virtualSignal.unit;
}else{
var result = "";
if(scope.DataMeanings){
scope.DataMeanings.forEach(function(item){
if(result == "")
result += item.Value+"-"+item.Meanings;
else
result += ","+item.Value+"-"+item.Meanings;
});
}
return "|Meanings:"+result;
}
}
});
}
}
}
]);
nurseDirective.directive("imagesignalsetter",['$modal','baseTypeService','global','balert',function($modal,baseTypeService,global,balert){
return {
restrict: 'A',
link: function(scope,element){
var setDlg = null;
scope.updpart = {};
function getPartConfig(diagram, id) {
var found = _.find(diagram.parts, function(part) {
return part.id === id;
});
return found;
}
//show list
function initList() {
baseTypeService.getSignalBaseTypes().then(function(data) {
scope.siglist = data;
});
}
function showSignal(){
var obj = getPartConfig(scope.diagram, scope.partid);
scope.updpart.id = obj.id;
scope.updpart.type = (obj.id).replace(/\d+/,"");
getNewPart(scope.updpart.type);
scope.updpart.name = global.getpara("Name",obj.options);
scope.updpart.radiosig = global.getpara("BS",obj.binding)+"-"+global.getpara("DI",obj.binding);
var isImage = global.getpara("isImage",obj.options);
if(isImage != "false") scope.isImageCheck = true;
else scope.isImageCheck = false;
var isSignal = global.getpara("isSignal",obj.options);
if(isSignal != "false") scope.isSignalCheck = true;
else scope.isSignalCheck = false;
scope.updpart.background = global.getpara("Background",obj.options);
}
function getPartNum(){
var obj = getPartConfig(scope.diagram, scope.partid);
return (obj.id).replace(/\D+/g,"");
}
function getNewPart(type) {
var part={};
var num = getPartNum();
part.id = type + num;
switch (type) {
case 'infrared':
part.type="infrared";
part.img="img/diagram/InfraredDetector_Alarm.png";
part.name= scope.languageJson.Configuration.ImageSignalControl.ControlType.Infrared+num+"#";//"红外"
break;
case 'smoke':
part.type="smoke";
part.img="img/diagram/Fog_inductor.png";
part.name= scope.languageJson.Configuration.ImageSignalControl.ControlType.Smoke+num+"#";//"烟感"
break;
case 'watermonitor':
part.type="watermonitor";
part.img="img/diagram/WaterMonitor.png";
part.name= scope.languageJson.Configuration.ImageSignalControl.ControlType.LiquidLeak+num+"#";//"水浸"
break;
case 'temperature':
part.type="temperature";
part.img="img/diagram/temperature.png";
part.name= scope.languageJson.Configuration.ImageSignalControl.ControlType.Temperature+num+"#";//"温度"
break;
case 'humidity':
part.type="humidity";
part.img="img/diagram/Thermometer_Blue.png";
part.name= scope.languageJson.Configuration.ImageSignalControl.ControlType.Humidity+num+"#";//"湿度"
break;
case 'door':
part.type="door";
part.img="img/diagram/DoorAlarm.png";
part.name= scope.languageJson.Configuration.ImageSignalControl.ControlType.Door+num+"#";//"门碰"
break;
case 'lamp':
part.type = "lamp";
part.img = "img/diagram/lamp.png";
part.name = scope.languageJson.Configuration.ImageSignalControl.ControlType.Lamp+num+"#";//"灯"
break;
case 'audible':
part.type = "audible";
part.img = "img/diagram/audible.png";
part.name = scope.languageJson.Configuration.ImageSignalControl.ControlType.Audible+num+"#";//"声光"
break;
case 'switch':
part.type = "switch";
part.img = "img/diagram/switch.png";
part.name = scope.languageJson.Configuration.ImageSignalControl.ControlType.Switch+num+"#";//"其它开关量"
break;
case 'estimate':
part.type = "estimate";
part.img = "img/diagram/estimate.png";
part.name = scope.languageJson.Configuration.ImageSignalControl.ControlType.Numerical+num+"#";//"其它模拟量"
break;
}
scope.updpart=part;
}
function getNewName(type,num){
var name = "";
switch (type) {
case 'infrared':
name= scope.languageJson.Configuration.ImageSignalControl.ControlType.Infrared+num+"#";
break;
case 'smoke':
name= scope.languageJson.Configuration.ImageSignalControl.ControlType.Smoke+num+"#";
break;
case 'watermonitor':
name= scope.languageJson.Configuration.ImageSignalControl.ControlType.LiquidLeak+num+"#";
break;
case 'temperature':
name= scope.languageJson.Configuration.ImageSignalControl.ControlType.Temperature+num+"#";
break;
case 'humidity':
name= scope.languageJson.Configuration.ImageSignalControl.ControlType.Humidity+num+"#";
break;
case 'door':
name= scope.languageJson.Configuration.ImageSignalControl.ControlType.Door+num+"#";
break;
case 'lamp':
name = scope.languageJson.Configuration.ImageSignalControl.ControlType.Lamp+num+"#";
break;
case 'audible':
name = scope.languageJson.Configuration.ImageSignalControl.ControlType.Audible+num+"#";
break;
case 'switch':
name = scope.languageJson.Configuration.ImageSignalControl.ControlType.Switch+num+"#";
break;
case 'estimate':
name = scope.languageJson.Configuration.ImageSignalControl.ControlType.Numerical+num+"#";
break;
}
return name;
}
scope.parttypechange = function(type){
getNewPart(type);
};
function initFunction(){
scope.checkedDoor = function($event,data){
eval("scope."+data+" = "+$event.target.checked);
};
scope.getCheckbox = function(visible){
if(visible == true || visible == 'true')
return "√";
else
return "X";
};
}
element.bind('click',function(){
initList();
var partid = element.parent().parent().attr("partid");
scope.partid = partid;
setDlg = $modal({
scope:scope,
templateUrl:'partials/imagesignalsetter.html',
show:false
});
setDlg.$promise.then(setDlg.show);
showSignal();
initFunction();
});
scope.saveimagesignal = function(){
if(scope.updpart.radiosig == undefined){
//'请选择绑定信号。'
balert.show('danger', scope.languageJson.Configuration.ImageSignalControl.ErrorPrompt,3000);
return;
}
var cfg = getPartConfig(scope.diagram, scope.partid);
var id = scope.updpart.type+getPartNum();
if(id == scope.partid){
cfg.id = id;
}else{//当id重复时修改id值
var obj = getPartConfig(scope.diagram, id);
var num = parseInt(getPartNum());
while(obj!=undefined){
num ++;
id = scope.updpart.type+num;
obj = getPartConfig(scope.diagram, id);
}
cfg.id = id;
scope.updpart.name = getNewName(scope.updpart.type,num);
}
var bsAndDi = scope.updpart.radiosig.split("-");
cfg.binding = "BS:"+bsAndDi[0]+"|DI:"+bsAndDi[1];
cfg.options = "Name:"+scope.updpart.name+"|Img:"+scope.updpart.img+"|isImage:"+scope.isImageCheck+"|isSignal:"+scope.isSignalCheck+"|Background:"+scope.updpart.background;
scope.resetParts();
setDlg.hide();
};
}
}
}]);
nurseDirective.directive("tablesetter",['$modal','baseTypeService','balert','$compile','global','ConfigureMoldService',
function($modal,baseTypeService,balert,$compile,global,ConfigureMoldService){
return{
restrict:'A',
link: function(scope,element){
var setDlg = null;
var setDlgs = null;
var rowCount = 1;
var colCount = 4;
var NtsId = "";
scope.updpart = {};
scope.updpart.tables = {};
scope.updpart.tables.thead = [];
scope.updpart.tables.tbody = [];
/******************* 过滤设备列表 & 加载信号列表 **************************/
function initDevice(){
if(scope.Topology == undefined) {
scope.Topology = {};
}
var parentId = scope.diagram.parentId;
if(scope.diagram.deviceBaseTypeId == "1004" ||
(parseInt(scope.diagram.deviceBaseTypeId) >= 8888 && parseInt(scope.diagram.deviceBaseTypeId) < 9999))
parentId = "";
ConfigureMoldService.GetPartEquipments(parentId).then(function(data){
scope.deviceList = _.sortBy(data,function(item){return item.configName;});
var partid= element.parent().parent().attr("partid");
scope.partid=partid;
var obj = getPartConfig(scope.diagram, scope.partid);
if(global.getpara("DI",obj.binding))
scope.Topology.DeviceId = global.getpara("DI",obj.binding);
else
scope.Topology.DeviceId = scope.diagram.deviceId;
baseTypeService.getSignalBaseTypesByDeviceType(scope.Topology.DeviceId).then(function(datas) {
scope.data.devices = datas;
});
});
}
/*********************************************************************/
function getPartConfig(diagram, id) {
var found = _.find(diagram.parts, function(part) {
return part.id === id;
});
return found;
}
function showSignal(){
var obj = getPartConfig(scope.diagram, scope.partid);
scope.updpart.id = obj.id;
scope.updpart.type = (obj.id).replace(/\d+/,"");
scope.updpart.options = obj.options;
scope.updateTable = function(){
if(scope.updpart.options === undefined) return;
var head=global.getpara("Head",scope.updpart.options);
var rowsdata=global.getpara("Rows",scope.updpart.options);
var headarry=head.split(',');
var rows=rowsdata.split('&');
var s= 568+120*(headarry.length-4);
var style = global.getpara("Style",scope.updpart.options);
scope.Topology.Style = style;
if(headarry.length <= 3)
scope.updpart.tables.style = { 'width':'450px'};
else if(headarry.length <= 9)
scope.updpart.tables.style = { 'width':s+'px'};
else
scope.updpart.tables.style = { 'width':'1200px'};
for(var i = 0;i<headarry.length;i++){
scope.updpart.tables.thead[i] = {};
scope.updpart.tables.thead[i].id = "colTitle"+(i+1);
scope.updpart.tables.thead[i].value = headarry[i];
}
for(var i = 0;i<rows.length;i++){
if(rows.length == 1 && rows[0] == "") break;
scope.updpart.tables.tbody[i] = {};
scope.updpart.tables.tbody[i].tr = [];
var tds = rows[i].split(',');
for(var j = 0;j<tds.length;j++){
scope.updpart.tables.tbody[i].tr[j] = {};
if(j === 0){
scope.updpart.tables.tbody[i].tr[j].id = 'rowTitle'+(i+2);
}else{
scope.updpart.tables.tbody[i].tr[j].id = 'value'+(i+2)+'00'+(j+1);
}
scope.updpart.tables.tbody[i].tr[j].value = tds[j];
}
}
rowCount = rows.length;
colCount = headarry.length;
};
scope.updateTable();
}
function initFunction(){
scope.addCol = function(){
colCount++;
var i = 0;
$("#NtsTable tr").each(function(){
var trHtml = "";
if(i === 0){
trHtml = '<td><input type="text" id="rowTitle'+colCount+'" class="form-control" placeholder="'+scope.languageJson.Configuration.TableControl.ColTitle+colCount+'" Virtual-Key-Board/></td>';//列标题
}else{
trHtml = '<td><input type="text" id="value'+(i+1)+'00'+(colCount)+'" ng-click="bindingDlg('+(i+1)+'00'+(colCount)+')" class="form-control" placeholder="'+scope.languageJson.Configuration.TableControl.Value+(i+1)+'00'+(colCount)+'"/></td>';
}
var $html = $compile(trHtml)(scope);
$(this).append($html);
i++;
});
// if(colCount >= 5 && colCount <= 9){
// var width = parseInt($("#ModalDialog").css("width")) + 120;
// $("#ModalDialog").css("width",width+"px");
// }else if(colCount > 9){
// var width = parseInt($("#NtsTable").css("width")) + 120;
// $("#NtsTable").css("width",width+"px");
// }
};
scope.addRow = function(){
rowCount++;
var rowTemplate = '<tr>';
for(var i=0;i<colCount;i++){
if(i === 0){
rowTemplate += '<td><input type="text" id="colTitle'+(rowCount+1)+'" class="form-control" placeholder="'+scope.languageJson.Configuration.TableControl.RowTitle+(rowCount+1)+'" Virtual-Key-Board/></td>';//行标题
}else{
rowTemplate += '<td><input type="text" id="value'+(rowCount+1)+'00'+i+'" ng-click="bindingDlg('+(rowCount+1)+'00'+i+')" class="form-control" placeholder="'+scope.languageJson.Configuration.TableControl.Value+(rowCount+1)+'00'+i+'"/></td>';//值
}
}
rowTemplate += '</tr>';
var $html = $compile(rowTemplate)(scope);
$("#NtsTable tbody").append($html);
};
scope.delCol = function(){
colCount--;
$("#NtsTable tr").each(function(){
$("td:eq("+colCount+")",this).remove();
});
// var width = parseInt($("#ModalDialog").css("width")) - 120;
// if(width >= 600)
// $("#ModalDialog").css("width",width+"px");
};
scope.delRow = function(){
$("#NtsTable tr:eq("+rowCount+")").remove();
rowCount--;
};
}
element.bind('click',function(){
initDevice();
scope.partid = element.parent().parent().attr("partid");
setDlg = $modal({
scope:scope,
templateUrl:'partials/tablesetter.html',
show:false
});
scope.updpart.tables.thead = [];
scope.updpart.tables.tbody = [];
setDlg.$promise.then(setDlg.show);
showSignal();
initFunction();
scope.changeDevice = function(id){
baseTypeService.getSignalBaseTypesByDeviceType(id).then(function(data) {
scope.data.devices = data;
});
};
scope.save = function(){
var cfg = getPartConfig(scope.diagram, scope.partid);
cfg.binding=getBinDing()+"|DI:"+scope.Topology.DeviceId;
cfg.options="Head:"+getHead()+"|Rows:"+RowsData()+"|Style:"+scope.Topology.Style+"|DeviceId:"+scope.Topology.DeviceId
scope.resetParts();
setDlg.hide();
};
var getHead = function(){
var head = "";
var i = 0;
$("#NtsTable tr:eq(0) td").each(function(){
if(i === 0)
head += $(this).children('input').val();
else
head += ","+$(this).children('input').val();
i++;
});
return head;
};
var RowsData = function(){
var rowsData = "";
$("#NtsTable tr:gt(0)").each(function(){
var i = 0;
$(this).children('td').each(function(){
if(i === 0)
rowsData += $(this).children('input').val();
else
rowsData += ","+ $(this).children('input').val();
i++;
});
rowsData += "&";
});
rowsData = rowsData.substring(0,rowsData.length-1);
return rowsData;
};
var getBinDing = function(){
var binding = "";
var i = 0;
$("#NtsTable tr:gt(0)").each(function(){
$(this).children('td:gt(0)').each(function(){
var index = $(this).children('input').val().indexOf(":");
var length = $(this).children('input').val().length;
var value = $(this).children('input').val().substring(index+1,length-1);
if(value != ""){
if(i === 0)
binding += "BS:" + value;
else
binding += "|BS:" + value;
i++;
}
});
});
return binding;
};
scope.bindingDlg = function(dom){
if(dom.td && dom.td.id.indexOf("value") === -1) return;
setDlgs = $modal({
scope: scope,
templateUrl: 'partials/bindingTable.html',
show: false
});
if(dom.td)
NtsId = dom.td.id;
else
NtsId = 'value'+dom;
setDlgs.$promise.then(setDlgs.show);
};
scope.ok = function(){
$("#"+NtsId).val("{"+scope.data.selecteds[0].baseTypeName+":"+scope.data.selecteds[0].baseTypeId+"}");
setDlgs.hide();
};
scope.deleteBind = function(){
$("#"+NtsId).val("");
setDlgs.hide();
};
});
}
}
}
]);
nurseDirective.directive('deletepartsetter', ['$modal','global','AlarmLinkageService','equipmentService',
function($modal,global,AlarmLinkageService,equipmentService) {
return {
restrict: 'A',
link: function(scope, element) {
var setDlg = null;
element.bind('click', function() {
if(sessionStorage.getItem("isLock") == "true") return;
var partid= element.parent().parent().attr("partid");
scope.partid=partid;
setDlg = $modal({
scope: scope,
templateUrl: 'partials/deletepartsetter.html',
show: false
});
setDlg.$promise.then(setDlg.show);
scope.setDlg = setDlg;
function getPartConfig(diagram, id) {
var found = _.find(diagram.parts, function(part) {
return part.id === id;
});
return found;
}
scope.save = function() {
for(var i=0;i<scope.diagram.parts.length;i++)
{
if(scope.diagram.parts[i].id!=scope.partid) continue;
if(scope.partid.indexOf("percent") != -1){
var cfg = getPartConfig(scope.diagram, scope.partid);
var percents = global.getpara("Percents",cfg.options);
var objs = percents.split(";");
if(objs){
objs.forEach(function(item){
var obj = item.split("&");
if(obj.length > 4 && obj[4] != "")
AlarmLinkageService.DeleteAlarmLinkage(obj[4]);
});
}
equipmentService.ReLoadFSU();
}
scope.diagram.parts.splice(i, 1);
break;
}
if(setDlg == null) scope.setDlg.hide();
else setDlg.hide();
scope.resetParts();
};
});
}
}
}
]);
nurseDirective.directive('devicestatussetter',['$modal','baseTypeService','global','balert',
function($modal,baseTypeService,global,balert){
return {
restrict : 'A',
link : function(scope,element){
var setDlg;
var initList = function(){
var obj = getPartConfig(scope.diagram, scope.partid);
scope.Device = {};
scope.Device.Name = global.getpara("Name",obj.options);
scope.Device.fontChart = global.getpara("FontChart",obj.options);
var arr = obj.binding.split("|");
var list = [];
arr.forEach(function(item){
if(item != "") list.push(item);
});
scope.Device.List = angular.toJson(list);
baseTypeService.getDeviceList().then(function(data){
scope.deviceList = data;
scope.deviceList.forEach(function(item){
arr.forEach(function(a){
if(item.EquipmentId == a)
item.isChecked = true;
});
});
});
};
function pasetDeivce(list){
var arr = angular.fromJson(list);
var result = "";
for(var i = 0;i < arr.length;i++){
result += arr[i]+"|";
}
return result;
}
function getPartConfig(diagram, id) {
var found = _.find(diagram.parts, function(part) {
return part.id === id;
});
return found;
}
function initFunction(){
scope.showDeviceStatus = function(){
if($("#myDeviceStatus").css("display") == "block")
$("#myDeviceStatus").hide();
else
$("#myDeviceStatus").show();
};
scope.clickFontChart = function(fontChart){
scope.Device.fontChart = fontChart;
$("#myDeviceStatus").hide();
};
scope.checkedDeviceBox = function(item){
if(scope.Device.List == undefined || scope.Device.List == "")
scope.Device.List = [];
scope.Device.List = angular.fromJson(scope.Device.List);
if(item.isChecked == undefined || item.isChecked == false){
scope.Device.List.push(item.EquipmentId);
item.isChecked = true;
}else{
for(var i = 0;i < scope.Device.List.length;i ++){
if(scope.Device.List[i] == item.EquipmentId)
scope.Device.List.splice(i,1);
}
item.isChecked = false;
}
scope.Device.List = angular.toJson(scope.Device.List);
};
scope.saveNewStatus = function(){
if(scope.Device.List == undefined || scope.Device.List == "[]" || scope.Device.List == ""){
//'请选择绑定设备。'
balert.show('danger', scope.languageJson.Configuration.EquipmentControl.ErrorPrompt,3000);
return;
}
var cofg = getPartConfig(scope.diagram, scope.partid);
cofg.binding = pasetDeivce(scope.Device.List);
cofg.options = "Name:"+scope.Device.Name+"|FontChart:"+scope.Device.fontChart;
setDlg.hide();
scope.resetParts();
};
scope.empty = function(){
scope.deviceList.forEach(function(item){
item.isChecked = false;
});
scope.Device.List = "[]";
};
}
element.bind('click',function(){
initFunction();
initList();
var partid = element.parent().parent().attr("partid");
scope.partid = partid;
setDlg = $modal({
scope:scope,
templateUrl:'partials/devicestatussetter.html',
show:false
});
setDlg.$promise.then(setDlg.show);
});
}
}
}
]);
nurseDirective.directive('virtualsignalsetter',['$modal','baseTypeService','global','equipmentTemplateService','base64','ConfigureMoldService',
function($modal,baseTypeService,global,equipmentTemplateService,base64,ConfigureMoldService){
return {
restrict : 'A',
link : function(scope,element){
var setDlg = null,bindMeaningsDlg = null;
function init(){
if(scope.virtualSignal == undefined){
scope.virtualSignal = {};
}
var parentId = scope.diagram.parentId;
if(scope.diagram.deviceBaseTypeId == "1004" ||
(parseInt(scope.diagram.deviceBaseTypeId) >= 8888 && parseInt(scope.diagram.deviceBaseTypeId) < 9999))
parentId = "";
ConfigureMoldService.GetPartEquipments(parentId).then(function(data){
scope.virtualSignal.equipments = _.sortBy(data,function(item){return item.configName;});
scope.virtualSignal.equipmentId = scope.diagram.deviceId;
scope.changeEquipment(scope.diagram.deviceId);
});
/*----- 绑定开关量含义 Start ----*/
scope.bindMeaningsBox = function(){
scope.title = scope.languageJson.Configuration.VirtualControl.Kind.Analog;//"虚拟量"
bindMeaningsDlg = $modal({
scope:scope,
templateUrl:'partials/bindingMeanings.html',
show:false
});
bindMeaningsDlg.$promise.then(bindMeaningsDlg.show);
};
scope.addMeaningsCol = function(){
var value = -1;
if(scope.DataMeanings){
scope.DataMeanings.forEach(function(item){
if(item.Value > value){
value = item.Value;
}
});
}
value ++;
var cfg = {
Value : value,
Meanings : scope.languageJson.Configuration.VirtualControl.Meaning2
};//'含义'
if(scope.DataMeanings == undefined) scope.DataMeanings = [];
scope.DataMeanings.push(cfg);
};
scope.deleteMeaningsClick = function($index){
scope.DataMeanings.splice($index,1);
};
scope.saveMeanings = function(){
scope.virtualSignal.meanings = "";
if(scope.DataMeanings){
scope.DataMeanings.forEach(function(item){
if(scope.virtualSignal.meanings == "")
scope.virtualSignal.meanings += item.Meanings;
else
scope.virtualSignal.meanings += "/" + item.Meanings;
});
}
bindMeaningsDlg.hide();
};
/*----- 绑定开关量含义 End ----*/
/*----- 颜色设置 Start ---------------*/
var showColorSelectDlg = $modal({
scope:scope,
templateUrl:'partials/showMoreColorBox.html',
show:false
});
scope.showColorSelect = function(data){
if(data == undefined || data == "") scope.ColorSelect = [];
else scope.ColorSelect = angular.fromJson(data);
showColorSelectDlg.$promise.then(showColorSelectDlg.show);
};
scope.addColorClick = function(){
scope.ColorSelect.push([1,"#ffffff"]);
};
scope.delColorClick = function($index){
scope.ColorSelect.splice($index,1);
};
scope.saveColorSelect = function(){
scope.virtualSignal.dataColor = angular.toJson(scope.ColorSelect);
showColorSelectDlg.hide();
};
/*----- 颜色设置 End ---------------*/
}
function getPartConfig(diagram, id) {
var found = _.find(diagram.parts, function(part) {
return part.id === id;
});
return found;
}
element.bind('click',function(){
init();
var partid = element.parent().parent().attr("partid");
scope.partid = partid;
setDlg = $modal({
scope:scope,
templateUrl:'partials/virtualsignalsetter.html',
show:false
});
setDlg.$promise.then(setDlg.show);
setTimeout(function(){
$("#powerFun").attr("data-original-title","<h5>"+scope.languageJson.Configuration.VirtualControl.Expression.PowerFun+"</h5>");
$("#absVal").attr("data-original-title","<h5>"+scope.languageJson.Configuration.VirtualControl.Expression.AbsVal+"</h5>");
$("#maxVal").attr("data-original-title","<h5>"+scope.languageJson.Configuration.VirtualControl.Expression.MaxVal+"</h5>");
$("#minVal").attr("data-original-title","<h5>"+scope.languageJson.Configuration.VirtualControl.Expression.MinVal+"</h5>");
$("#int").attr("data-original-title","<h5>"+scope.languageJson.Configuration.VirtualControl.Expression.Int+"</h5>");
$("#double").attr("data-original-title","<h5>"+scope.languageJson.Configuration.VirtualControl.Expression.Double+"</h5>");
},500);
var obj = getPartConfig(scope.diagram, scope.partid);
scope.virtualSignal.name = global.getpara("Name",obj.options);
scope.virtualSignal.Expression = base64.decode(global.getpara("expr",obj.binding));
scope.virtualSignal.category = global.getpara("Category",obj.options);
if(scope.virtualSignal.category == 1)
scope.virtualSignal.unit = global.getpara("Unit",obj.options);
else{
var result = global.getpara("Meanings",obj.options);
scope.DataMeanings = [];
scope.virtualSignal.meanings = "";
var split = result.split(",");
split.forEach(function(item){
var meas = {};
meas.Value = item.split("-")[0];
meas.Meanings = item.split("-")[1];
scope.DataMeanings.push(meas);
if(scope.virtualSignal.meanings == "")
scope.virtualSignal.meanings += meas.Meanings;
else
scope.virtualSignal.meanings += "/"+meas.Meanings;
});
}
scope.virtualSignal.background = global.getpara("Background",obj.options);
scope.virtualSignal.fontSize = global.getpara("FontSize",obj.options) == "" ? "12" : global.getpara("FontSize",obj.options);
scope.virtualSignal.dataBackground = global.getpara("DataBackground",obj.options) == "" ? "2" : global.getpara("DataBackground",obj.options);
scope.virtualSignal.dataColor = global.getpara("DataColor",obj.options);
scope.changeEquipment = function(equipmentId){
baseTypeService.GetSinalByEquipmentId(equipmentId).then(function(data){
scope.virtualSignal.signals = data;
});
scope.virtualSignal.signalId = undefined;
};
scope.changeSignal = function(){
if(scope.virtualSignal.Expression == undefined)
scope.virtualSignal.Expression = "";
var textDom = document.getElementById("Expression");
var addStr = "["+scope.virtualSignal.equipmentId+"-"+scope.virtualSignal.signalId+"]";
if (textDom.selectionStart || textDom.selectionStart == '0') {
scope.virtualSignal.Expression = scope.virtualSignal.Expression.substring(0,scope.startPos)+addStr+
scope.virtualSignal.Expression.substring(scope.endPos);
textDom.focus();
textDom.selectionStart = scope.startPos + addStr.length;
textDom.selectionEnd = scope.startPos + addStr.length;
textDom.scrollTop = scope.scrollTop;
}else {
scope.virtualSignal.Expression += addStr;
textDom.focus();
}
};
scope.getCursortPosition = function() {
var textDom = document.getElementById("Expression");
if (textDom.selectionStart || textDom.selectionStart == '0') {
scope.startPos = textDom.selectionStart;
scope.endPos = textDom.selectionEnd;
scope.scrollTop = textDom.scrollTop;
}
};
scope.ClickSignalsLi = function(symbol){
if(scope.virtualSignal.Expression == undefined)
scope.virtualSignal.Expression = "";
var textDom = document.getElementById("Expression");
var addStr = symbol;
if (textDom.selectionStart || textDom.selectionStart == '0') {
scope.virtualSignal.Expression = scope.virtualSignal.Expression.substring(0,scope.startPos)+addStr+
scope.virtualSignal.Expression.substring(scope.endPos);
textDom.focus();
textDom.selectionStart = scope.startPos + addStr.length;
textDom.selectionEnd = scope.startPos + addStr.length;
textDom.scrollTop = scope.scrollTop;
}else {
scope.virtualSignal.Expression += addStr;
textDom.focus();
}
};
scope.updNewVirtualSignal = function(){
if(scope.virtualSignal.Expression == undefined || scope.virtualSignal.Expression == ""){
//'表达式不能为空。'
balert.show('danger', scope.languageJson.Configuration.VirtualControl.ErrorPrompt,3000);
return;
}
var cofg = getPartConfig(scope.diagram, scope.partid);
cofg.binding="expr:"+base64.encode(scope.virtualSignal.Expression);
cofg.options="Name:"+scope.virtualSignal.name+"|Category:"+scope.virtualSignal.category+getCategoryValue(scope.virtualSignal.category)
+"|Background:"+scope.virtualSignal.background+"|FontSize:"+scope.virtualSignal.fontSize
+"|DataBackground:"+scope.virtualSignal.dataBackground+"|DataColor:"+scope.virtualSignal.dataColor;
setDlg.hide();
scope.resetParts();
};
function getCategoryValue(category){
if(category == 1){
return "|Unit:"+scope.virtualSignal.unit;
}else{
var result = "";
if(scope.DataMeanings){
scope.DataMeanings.forEach(function(item){
if(result == "")
result += item.Value+"-"+item.Meanings;
else
result += ","+item.Value+"-"+item.Meanings;
});
}
return "|Meanings:"+result;
}
}
});
}
}
}
]);
nurseDirective.directive('setparttop', [function($modal) {
return {
restrict: 'A',
link: function(scope, element) {
function getPartConfig(diagram, id) {
var found = _.find(diagram.parts, function(part) {
return part.id === id;
});
return found;
}
element.bind('click', function() {
var partid= element.parent().parent().attr("partid");
scope.partid=partid;
var maxcfg = _.max(scope.diagram.parts, function (part) {
return part.zindex;
});
var newmax = maxcfg.zindex+1;
if(newmax >= 998) newmax = 998;
element.parent().parent().css("z-index",newmax);
var cofg = getPartConfig(scope.diagram, scope.partid);
cofg.zindex = newmax;
});
}
}
}
]);
nurseDirective.directive("imagesignalpart", ['diagramService','global',function(diagramService,global) {
return {
restrict: "AE",
replace: true,
scope:true,
templateUrl: "partials/imagesignalpart.html",
link: function(scope, elem, attrs) {
var cfg = diagramService.initPart(scope, elem, attrs);
if (cfg === undefined) return;
var currpartid=scope.partid = attrs.partid;
scope.sigs={};
var img=global.getpara("Img",cfg.options);
var basetypeid=global.getpara("BS",cfg.binding);
var deviceid = global.getpara("DI",cfg.binding);
var bg = global.getpara("Background",cfg.options);
var name=global.getpara("Name",cfg.options);
if(name == "" || name == undefined)
elem.find(".diagram-sigimg-title-td").css("display","none");
else
elem.find('strong').text(name);
var isSignal = global.getpara("isSignal",cfg.options);
if(isSignal == "false"){
elem.find('.diagram-sigimg-value-td').css("display","none");
}
var isImage = global.getpara("isImage",cfg.options);
if(isImage != "false"){
elem.find('.diagram-sigimg-img').css({"background-image": "url('" +img + "')"});
var height = parseInt(elem.find('.diagram-sigimg-td').css("height")) - 55;
elem.find('.diagram-sigimg-img').css({'height':height+'px'});
}else
elem.find(".diagram-sigimg-img-td").css("display","none");
if((name == "" || name == undefined) && isSignal == "false")
elem.find('.diagram-sigimg-img').css({'margin':'10px 15px 10px 15px'});
//背景
if(bg == undefined)
elem.find('.panel-body').addClass("configure_bg");
else
elem.find('.panel-body').addClass(bg);
scope.$watch('binddata', function(newValue, oldValue, scope) {
var value = _.findWhere(scope.binddata, {partId: currpartid, baseTypeId:basetypeid,deviceId:deviceid});
if(value === undefined) return;
if(value.alarmSeverity == 255 || value.alarmSeverity == "255")
{
//elem.find('.diagram-sigimg-value').css("background-color","#5B9338");
elem.find('.diagram-sigimg-value').removeClass("signal-value-disconnect");
elem.find('.diagram-sigimg-value').removeClass("signal-value-alarm");
elem.find('.diagram-sigimg-value').addClass("signal-value-normal");
elem.find('.diagram-sigimg-img').css({
"background-image": "url('" +img + "')"
});
}else if(value.alarmSeverity == -255 || value.alarmSeverity == "-255" || value.alarmSeverity === ''){
//elem.find('.diagram-sigimg-value').css("background-color","#575A5E");
elem.find('.diagram-sigimg-value').removeClass("signal-value-normal");
elem.find('.diagram-sigimg-value').removeClass("signal-value-alarm");
elem.find('.diagram-sigimg-value').addClass("signal-value-disconnect");
if(value.currentValue == "")
value.currentValue = scope.languageJson.Loading+"...";//加载中
}else{// 0 提示 、 1 一般 、 2 重要 、 3 紧急 告警
//elem.find('.diagram-sigimg-value').css("background-color","#A02B31");
elem.find('.diagram-sigimg-value').removeClass("signal-value-normal");
elem.find('.diagram-sigimg-value').removeClass("signal-value-disconnect");
elem.find('.diagram-sigimg-value').addClass("signal-value-alarm");
var tempimg=img.split('.');
var alarmimg=tempimg[0]+".gif";
elem.find('.diagram-sigimg-img').css({
"background-image": "url('" +alarmimg + "')"
});
}
elem.find('.diagram-sigimg-value').text(value.currentValue);
});
scope.$watch('diagram.edit', function(newValue, oldValue, scope) {
diagramService.updateEditStatus(elem, newValue);
});
}
};
}
]);
nurseDirective.directive("devicestatuspart",['diagramService','global','$stateParams','$state','$compile',
function(diagramService,global,$stateParams,$state,$compile){
return {
restrict:"AE",
replace:true,
scope:true,
templateUrl:"partials/devicestatuspart.html",
link:function(scope,elem,attrs){
var cfg = diagramService.initPart(scope, elem, attrs);
if (cfg === undefined) return;
var currpartid = scope.partid = attrs.partid;
var name = global.getpara("Name",cfg.options);
var fontChart = global.getpara("FontChart",cfg.options);
elem.find(".status-title strong").text(name);
elem.find(".status-font-chart i")[0].className = "fa "+fontChart+" fa-fw alarmLevel1";
scope.$watch('binddata', function(newValue, oldValue, scope) {
var value = _.findWhere(scope.binddata, {partId: currpartid});
if(value == undefined) return;
var text = "---";
if(value.currentValue == "Disconnect"){
/*elem.find('.diagram-sigimg-value').css("background-color","#575A5E");
text = "已中断";*/
elem.find('.status-value i')[0].className = "fa fa-minus-circle alarmLevel9";
}else if(value.currentValue == "Alarm"){
/*elem.find('.diagram-sigimg-value').css("background-color","#A02B31");
text = "有告警";*/
elem.find('.status-value i')[0].className = "fa fa-exclamation-circle alarmLevel3";
}else if(value.currentValue == "Normal"){
/*elem.find('.diagram-sigimg-value').css("background-color","#5B9338");
text = "正常";*/
elem.find('.status-value i')[0].className = "fa fa-check-circle alarmLevel0";
}
//elem.find('.diagram-sigimg-value').text(text);
});
scope.$watch('diagram.edit', function(newValue, oldValue, scope) {
diagramService.updateEditStatus(elem, newValue);
});
scope.skipDevice = function(){
var value = _.findWhere(scope.binddata, {partId: currpartid});
if(value == undefined || value.deviceId == undefined || value.baseTypeId == undefined) return;
var cfg = {};
cfg.diagram = {};
cfg.diagram.page = {};
cfg.diagram.deviceBaseTypeId = value.baseTypeId;
cfg.diagram.deviceId = value.deviceId;
cfg.diagram.page.bgImage = "img/bg.jpg";
sessionStorage.setItem("currDeviceId",value.deviceId);
$stateParams.deviceBaseTypeId = value.baseTypeId;
$stateParams.diagramview = 'device.diagram';
$state.go($stateParams.diagramview, cfg);
}
}
};
}
]);
nurseDirective.directive("virtualsignalpart",['diagramService','global',
function(diagramService,global){
return {
restrict:"AE",
replace:true,
scope:true,
templateUrl:"partials/virtualsignalpart.html",
link:function(scope,elem,attrs){
var cfg = diagramService.initPart(scope, elem, attrs);
if (cfg === undefined) return;
var currpartid = scope.partid = attrs.partid;
var name = global.getpara("Name",cfg.options);
var category = global.getpara("Category",cfg.options);
var result = "";
if(category == 1)
result = global.getpara("Unit",cfg.options);
else
result = global.getpara("Meanings",cfg.options);
//背景样式
var background = global.getpara("Background",cfg.options);
elem.find(".panel-body").addClass(background);
//字体大小
var fontSize = global.getpara("FontSize",cfg.options);
parseFontSize(fontSize);
var dataBackground = global.getpara("DataBackground",cfg.options);
var dataColor = global.getpara("DataColor",cfg.options);
elem.find(".diagram-sigimg-title strong").text(name);
scope.$watch('binddata', function(newValue, oldValue, scope) {
var value = _.findWhere(scope.binddata, {partId: currpartid});
if(value == undefined) return;
if(dataBackground == "2"){
if(value.alarmSeverity == "-255" || value.alarmSeverity == ""){
elem.find('.diagram-sigimg-value').removeClass("signal-value-normal");
elem.find('.diagram-sigimg-value').removeClass("signal-value-alarm");
elem.find('.diagram-sigimg-value').addClass("signal-value-disconnect");
}else if(value.alarmSeverity == "255"){
elem.find('.diagram-sigimg-value').removeClass("signal-value-disconnect");
elem.find('.diagram-sigimg-value').removeClass("signal-value-alarm");
elem.find('.diagram-sigimg-value').addClass("signal-value-normal");
}else{
elem.find('.diagram-sigimg-value').removeClass("signal-value-disconnect");
elem.find('.diagram-sigimg-value').removeClass("signal-value-normal");
elem.find('.diagram-sigimg-value').addClass("signal-value-alarm");
}
}else
elem.find('.diagram-sigimg-value').addClass("diagram-sigimg-value-Transparency");
var color = parseDataColor(dataColor,value.currentValue);
elem.find('.diagram-sigimg-value').css("color",color);
if(category == 1)
elem.find('.diagram-sigimg-value').text(value.currentValue+" "+result);
else{
var split = result.split(",");
split.forEach(function(item){
var val = item.split("-")[0];
var mes = item.split("-")[1];
if(parseInt(value.currentValue) == parseInt(val) || value.currentValue == val)
elem.find('.diagram-sigimg-value').text(mes);
});
}
});
function parseDataColor(colors,value){
if(colors == undefined || colors == "") return "#ffffff";
var style = localStorage.getItem("systemStyle");
var cols = angular.fromJson(colors);
var min = [999999999,"#ffffff"];
if(style == "White")
min = [999999999,"#000000"];
if(cols){
cols.forEach(function(item){
if(value < parseFloat(item[0])){
if(parseFloat(item[0]) <= parseFloat(min[0])) min = item;
}
});
}
return min[1];
}
function parseFontSize(size){
elem.find(".panel-body").css("font-size",size+"px");
if(parseInt(size) > 20){
elem.find(".diagram-sigimg-value").css("height",(parseInt(size)+10)+"px");
elem.find(".diagram-sigimg-value").css("line-height",(parseInt(size)+10)+"px");
}
}
scope.$watch('diagram.edit', function(newValue, oldValue, scope) {
diagramService.updateEditStatus(elem, newValue);
});
}
};
}
]);
nurseDirective.directive("labelpart", ['diagramService','global',
function(diagramService,global) {
return {
restrict: "AE",
replace: true,
templateUrl: "partials/labelpart.html",
link: function(scope, elem, attrs, modelCtrl) {
var cfg = diagramService.initPart(scope, elem, attrs);
if (cfg === undefined) return;
scope.partid = attrs.partid;
var body = elem.find('div.panel-body');
var el = elem.find('td');
var currpartid=attrs.partid;
if(cfg.options!=undefined)
{
scope.changeOptions=cfg.options;
setLabel(scope.changeOptions);
}
function activesignal(data) {
var signal = data.replace('{', '').replace('}', '').split('-');
setInterval(function(){
var result = "loading...";
var value = _.findWhere(scope.binddata, {partId: currpartid, baseTypeId: signal[1],deviceId:signal[0]});
if(value===undefined){
var name = scope.changeOptions.split('|')[0].split(':')[1];
//el.text(name);
return;
}
try{
eval("result=value.currentValue");
}catch(e){}
el.text(result);
},3000);
}
function setLabel(options) {
if(scope.partid !=currpartid) return;
if(options!=null){
var attrs=options.split('|');
for(var i=0;i<attrs.length;i++) {
var attr=attrs[i].split(':');
var type=attr[0];
var value=attr[1];
switch (type) {
case "Name":
if (value.indexOf('{') != -1)
{
activesignal(global.getpara("Name",options));
break;
}
el.text(value);
break;
case "FontSize":
el.css({ "font-size":value+"px"});
break;
case "FontWeight":
el.css({ "font-weight":value});
break;
case "Color":
el.css({ "color":value});
break;
case "BackColor":
el.css({ "background-color":value});
break;
case "BackStyle":
body.addClass(value);
break;
case "TextAlign":
el.css({ "text-align":value});
break;
}
}
}
}
scope.$watch('changeOptions',function(newValue,oldValue){
setLabel(newValue);
});
scope.$watch('diagram.edit', function(newValue, oldValue, scope) {
diagramService.updateEditStatus(elem, newValue);
});
}
};
}
]);
nurseDirective.directive('labelpartsetter', ['$modal','baseTypeService','balert','ConfigureMoldService',
function($modal,baseTypeService,balert,ConfigureMoldService) {
return {
restrict: 'A',
link: function(scope, element) {
var setDlg = null;
var setDlgs = null;
scope.data = {};
function getPartConfig(diagram, id) {
var found = _.find(diagram.parts, function(part) {
return part.id === id;
});
return found;
}
/******************* 过滤设备列表 & 加载信号列表 **************************/
function initDevice(){
if(scope.Topology == undefined) {
scope.Topology = {};
}
var parentId = scope.diagram.parentId;
if(scope.diagram.deviceBaseTypeId == "1004" ||
(parseInt(scope.diagram.deviceBaseTypeId) >= 8888 && parseInt(scope.diagram.deviceBaseTypeId) < 9999))
parentId = "";
ConfigureMoldService.GetPartEquipments(parentId).then(function(data){
scope.deviceList = _.sortBy(data,function(item){return item.configName;});
scope.Topology.DeviceId = scope.deviceList[0].equipmentId;
selectOption();
baseTypeService.getSignalBaseTypesByDeviceType(scope.Topology.DeviceId).then(function(datas) {
scope.data.devices = datas;
});
});
}
/*********************************************************************/
//show list
function initList() {
var labelcfg = getPartConfig(scope.diagram, scope.partid);
scope.labelcfg=labelcfg;
if(labelcfg.options!=null)
{
var attrs=labelcfg.options.split('|');
for(var i=0;i<attrs.length;i++)
{
var attr=attrs[i].split(':');
var type=attr[0];
var value=attr[1];
eval("labelcfg."+type+"='"+value+"'");
}
}
}
//根据文本内容选择信号
function selectOption(){
var patt = /\{\d*\-\d*\}/;
scope.selectId = undefined;
if(scope.labelcfg.Name != undefined && patt.test(scope.labelcfg.Name)){
var content = scope.labelcfg.Name;
var sIndex = content.indexOf("-") + 1;
var eIndex = content.lastIndexOf("}");
scope.Topology.DeviceId = content.substring(1,sIndex-1);
scope.selectId = content.substring(sIndex,eIndex);
}
}
element.bind('click', function() {
var partid= element.parent().parent().attr("partid");
scope.partid=partid;
initList();
setDlg = $modal({
scope: scope,
templateUrl: 'partials/labelpartsetter.html',
show: false
});
setDlg.$promise.then(setDlg.show);
scope.changeDevice = function(id){
baseTypeService.getSignalBaseTypesByDeviceType(id).then(function(data) {
scope.data.devices = data;
});
};
scope.save = function() {
if(scope.labelcfg.Name == undefined){
scope.labelcfg.Name = "";
}
var cofg = getPartConfig(scope.diagram, scope.partid);
var options="Name:"+scope.labelcfg.Name+"|FontSize:"+scope.labelcfg.FontSize+
"|FontWeight:"+scope.labelcfg.FontWeight+"|TextAlign:"+scope.labelcfg.TextAlign+"|Color:"+scope.labelcfg.Color+
"|BackColor:"+(scope.labelcfg.BackColor===undefined?"":scope.labelcfg.BackColor)+
"|BackStyle:"+(scope.labelcfg.BackStyle===undefined?"":scope.labelcfg.BackStyle);
cofg.options=scope.changeOptions=options;
var signal = scope.labelcfg.Name.replace('{', '').replace('}', '').split('-');
cofg.binding = signal.length == 1 ? "BS:0" : "BS:"+signal[1]+"|DI:"+signal[0];
setDlg.hide();
};
});
scope.bindingDlg = function(){
initDevice();
selectOption();
setDlgs = $modal({
scope: scope,
templateUrl: 'partials/bindingDlg.html',
show: false
});
setDlgs.$promise.then(setDlgs.show);
scope.deleteBind = function(){
scope.labelcfg.Name = "";
setDlgs.hide();
};
scope.ok = function(){
if(scope.data.selecteds == undefined) return;
var data = angular.fromJson(scope.data.selecteds[0]);
//deviceBaseTypeId => EquipmentId
scope.labelcfg.Name = "{"+data.deviceBaseTypeId+"-"+data.baseTypeId+"}";
setDlgs.hide();
};
};
}
}
}
]);
nurseDirective.directive('camerapartsetter', ['$modal','CameraService','global',
function($modal,CameraService,global) {
return {
restrict: 'A',
link: function(scope, element) {
var setDlg = null;
scope.camerachecked={};
scope.cameralist =new Array();
function getPartConfig(diagram, id) {
var found = _.find(diagram.parts, function(part) {
return part.id === id;
});
return found;
}
function init(){
CameraService.getAllVideoEquipment().then(function(data) {
scope.cameralist=new Array();
var cameradata = eval(data);
for(var x in cameradata){
for(var y in cameradata[x].cameraJson){
var camera ={};
camera.cameraname = cameradata[x].equipmentName+ "-"+cameradata[x].cameraJson[y].cameraName;
camera.id=cameradata[x].equipmentId +'_'+cameradata[x].cameraJson[y].cameraId;
scope.cameralist.push(camera);
}
}
var cofg = getPartConfig(scope.diagram, scope.partid);
scope.camerachecked.item=global.getpara("cameraid",cofg.options);
});
}
element.bind('click', function() {
var partid= element.parent().parent().attr("partid");
scope.partid=partid;
init();
setDlg = $modal({
scope: scope,
templateUrl: 'partials/camerapartsetter.html',
show: false
});
setDlg.$promise.then(setDlg.show);
scope.update = function() {
if(scope.camerachecked.item==undefined){
//'请选择需绑定的视频。'
balert.show('warning', scope.languageJson.Configuration.VideoControl.ErrorPrompt,2000);
return;
}
var cofg = getPartConfig(scope.diagram, scope.partid);
var option="Img:img/diagram/camera.png|cameraid:"+scope.camerachecked.item;
cofg.options=option;
setDlg.hide();
};
});
}
}
}
]);
nurseDirective.directive("tablepart",['diagramService','global','$compile',
function(diagramService,global,$compile) {
return {
restrict: "AE",
replace: true,
templateUrl: "partials/tablepart.html",
link: function (scope, elem, attrs) {
function handledrows(head,rowsdata,style,deviceId){
if(style != undefined && style != ""){
elem.find(".panel-body").removeClass("configure_bg");
elem.find(".panel-body").addClass(style);
}
var headarry=head.split(',');
var rows=rowsdata.split('&');
var tempvar = "";
var result = "";
var tr="<tr class='ng-table-sort-header'>@</tr>";
var str = "";
for(var i=0;i<headarry.length;i++){
tempvar+="<td>"+headarry[i]+"</td>";
str += headarry[i];
}
if(str != "")
result=tr.replace("@",tempvar);
tr="<tr>@</tr>";
for(var i=0;i<rows.length;i++){
if(rows.length == 1 && rows[0] == "") break;
tempvar="";
var tds=rows[i].split(',');
for(var j=0;j<tds.length;j++) {
if (tds[j].indexOf('{') == -1)
tempvar += "<td>" + tds[j] + "</td>";
else
tempvar += "<td class='pointer "+resultColorClass(tds[j])+"' "+resultClickInfo(deviceId,tds[j])+">" + getBindValue(tds[j]) + "</td>";
}
result+=tr.replace('@',tempvar);
}
var containerDiv = elem.find('.table');
$compile(result)(scope).appendTo(containerDiv);
}
function resultClickInfo(deviceId,signalbind){
var signal=signalbind.replace('{','').replace('}','').split(':');
var signalName = signal[0];
var baseTypeId = signal[1];
var value = _.findWhere(scope.binddata, {partId:currpartid,baseTypeId:baseTypeId});
deviceId = deviceId != undefined ? deviceId : scope.diagram.deviceId;
return "ng-click=\"showHistoryChart(\'"+deviceId+"\',\'"+baseTypeId+"\',\'"+signalName+"\')\"";
}
function getBindValue(signalbind){
var signal=signalbind.replace('{','').replace('}','').split(':');
var baseTypeId = signal[1];
return "{{tableValue('"+currpartid+"','"+baseTypeId+"')}}";
}
function getBindClass(signalbind){
var signal=signalbind.replace('{','').replace('}','').split(':');
var baseTypeId = signal[1];
return "{{tableClass('"+currpartid+"','"+baseTypeId+"')}}";
}
scope.tableValue = function(partId,baseTypeId){
var value=_.findWhere(scope.binddata, {partId:partId,baseTypeId:baseTypeId});
if(value==undefined) return "loading..." ;
return value.currentValue == undefined ? "" : value.currentValue;
};
function resultColorClass(signalbind){
var signal=signalbind.replace('{','').replace('}','').split(':');
var baseTypeId = signal[1];
return "{{colorClass(\""+currpartid+"\",\""+baseTypeId+"\")}}";
}
scope.colorClass = function(partId,baseTypeId){
var value=_.findWhere(scope.binddata, {partId:partId,baseTypeId:baseTypeId});
if(value==undefined) return "" ;
if(parseInt(value.alarmSeverity) >= 0 && parseInt(value.alarmSeverity) <= 3 )
return "alarmLevel3";
else
return "";
};
var cfg = diagramService.initPart(scope, elem, attrs);
if (cfg === undefined) return;
scope.partid = attrs.partid;
var currpartid=attrs.partid;
var head=global.getpara("Head",cfg.options);
var rows=global.getpara("Rows",cfg.options);
var style = global.getpara("Style",cfg.options);
var deviceId = global.getpara("DeviceId",cfg.options);
handledrows(head,rows,style,deviceId);
/*setInterval(function(){
if (scope.binddata === undefined) return;
handledrows(head,rows,style);
},3000);*/
scope.$watch('diagram.edit', function (newValue, oldValue, scope) {
diagramService.updateEditStatus(elem, newValue);
});
}
};
}]);
nurseDirective.directive("gaugepart", ['diagramService','global',
function(diagramService,global) {
return {
restrict: "AE",
replace: true,
templateUrl: "partials/gaugepart.html",
link: function(scope, elem, attrs, modelCtrl) {
function gaugeechart(controlattr)
{
var chartobj = elem.find('.gauge')[0];
var gaugechart=echarts.init(chartobj);
var timeTicket;
var cmax=global.getpara("Max",controlattr);
var mins = global.getpara("Min",controlattr);
var cmin = mins=="" || isNaN(mins) ? 0 : mins;
var cname=global.getpara("Name",controlattr);
//var option = {tooltip : {formatter: "{b} : {c}"},series : [{type:'gauge',splitNumber: 5,axisLine: {lineStyle: {color: [[0.2, '#228b22'],[0.8, '#48b'],[1, '#ff4500']], width: 2}},axisTick: {splitNumber: 20,length :5,lineStyle: {color: 'auto'}},axisLabel: {textStyle: {color: 'auto'}},splitLine: {show: true,length :13,lineStyle: {color: 'auto'}},pointer : {width : 5},title : {show : true,offsetCenter: [0, '30%'],textStyle: {fontWeight: 'bolder'}},detail : {formatter:'{value}',textStyle: {color: 'auto',fontWeight: 'bolder'}}, center:['50%', '60%'], max:cmax,data:[{value: 50, name:cname}]}]};
//var option={tooltip : {formatter: "{a} <br/>{b} : {c}%"},series : [{name:cname,type:'gauge',splitNumber: 5,detail : {formatter:'{value}'}, splitLine: {show: true,length :13,lineStyle: {color: '#11B8BB'}},axisLine: {lineStyle: {color: [[0.09, '#11B8BB'],[0.82, '#11B8BB'],[1, '#11B8BB']],width: 2,shadowColor : '#3AC3C6',shadowBlur: 20}},axisLabel: {textStyle: {fontWeight: 'bolder',color: '#fff',shadowColor : '#fff',shadowBlur: 12}},title : {show : true,offsetCenter: [0, '98%'],textStyle: {color:'#fff'}}, pointer : {width : 4},max:cmax,data:[{value: 0, name:cname}]}]};
var option={backgroundColor: '#293646', boundaryGap:false,tooltip: {formatter: "{c} {b}"},series: [{type: 'gauge',center: ['50%','50%'],min: cmin,max: cmax,splitNumber: 5,axisLine: {lineStyle: {color: [[0.09,'#0084D7'],[0.82,'#0084D7'],[1,'#0084D7']],width: 0,shadowColor: '#fff',shadowBlur: 10}},axisLabel: {textStyle: {color: '#fff',shadowColor: '#fff',shadowBlur: 7,fontSize:7}},axisTick: {length: 5,lineStyle: {color: 'auto',shadowColor: '#fff',shadowBlur: 10,width: 2}},splitLine: {length: 8,lineStyle: {width: 3,color: '#fff',shadowColor: '#fff',shadowBlur: 10}},pointer: {shadowColor: '#fff', shadowBlur: 3,width: 3},title: {show: true,offsetCenter: ['0%','65'],textStyle: {fontWeight: 'bolder',fontSize: 13,color: '#fff'}},detail: {show: true,offsetCenter: ['0%','40%'], textStyle: {fontSize:14,fontWeight: 'bolder',color: '#fff'}},data: [{value: 0,name: cname}]}]};
gaugechart.setOption(option, true);
setInterval(function (){
if( scope.binddata==undefined)return;
var signal=_.findWhere(scope.binddata, {partId:currentpartid});
if(!signal)return;
var value= signal.currentValue;
if(isNaN(parseFloat(value)))
value = cmin;
option.series[0].data[0].value = parseFloat(value);
try{
window.onresize = gaugechart.resize(); //使第一个图表适应
gaugechart.setOption(option, true);
}catch(e){
console.log("EChart Error:"+e.message);
}
},3000);
}
var cfg = diagramService.initPart(scope, elem, attrs);
if (cfg === undefined) return;
var currentpartid=scope.partid = attrs.partid;
gaugeechart(cfg.options);
scope.$watch('diagram.edit', function(newValue, oldValue, scope) {
diagramService.updateEditStatus(elem, newValue);
});
}
};
}
]);
nurseDirective.directive("piechartpart", ['diagramService','global','$http','Exporter','$modal','MdcAlarmService','mdcAssetsManagerService','base64',
function(diagramService,global,$http,Exporter,$modal,MdcAlarmService,mdcAssetsManagerService,base64) {
return {
restrict: "AE",
replace: true,
templateUrl: "partials/piechartpart.html",
link: function(scope, elem, attrs, modelCtrl) {
//#region 初始化
var cfg = diagramService.initPart(scope, elem, attrs);
if (cfg === undefined) return;
var chartobj = elem.find('.pie')[0];
var piechart = echarts.init(chartobj);
var currpartid=scope.partid = attrs.partid;
//圆环进度条
var cirRoot = elem.find('.circle')[0];
var cirVal = elem.find('.circle .circle-value')[0];
var cirName = elem.find('.circle .circle-name')[0];
var circle = undefined;
var ChartCfg = {};
ChartCfg.Title = global.getpara("Title",cfg.options);
ChartCfg.DataType = global.getpara("DataType",cfg.options);
ChartCfg.ChartType = global.getpara("ChartType",cfg.options);
ChartCfg.LineColor = global.getpara("LineColor",cfg.options);
ChartCfg.LineImages = global.getpara("LineImages",cfg.options);
ChartCfg.Y1Name = global.getpara("Y1Name",cfg.options);
ChartCfg.Y1Min = global.getpara("Y1Min",cfg.options);
ChartCfg.Y1Max = global.getpara("Y1Max",cfg.options);
ChartCfg.Background = global.getpara("Background",cfg.options);
ChartCfg.Unit = global.getpara("Unit",cfg.options);
ChartCfg.SignalNames = global.getpara("SN",cfg.options);
if(ChartCfg.ChartType == 'pie'){
ChartCfg.PieColor = global.getpara("PieColor",cfg.options);
ChartCfg.PieValueType = global.getpara("PieValueType",cfg.options);
ChartCfg.Meaning = global.getpara("Meaning",cfg.options);
}
ChartCfg.CabinetId = global.getpara("CabinetId",cfg.options);
var SHisBtn = global.getpara("SHisBtn",cfg.options);
var STotalBtn = global.getpara("STotalBtn",cfg.options);
if(ChartCfg.ChartType != 'newGauge')
cirRoot.style.display = "none";
if(ChartCfg.DataType != 7)
elem.find(".avg-max-min").hide();
//标题
if(ChartCfg.Title == undefined || ChartCfg.Title == "")
elem.find(".isShow").css("visibility","hidden");
else
elem.find(".title").html(ChartCfg.Title);
// 隐藏图表 显示机柜 @Author:Eddy @Date:2021/06/07
if(ChartCfg.DataType == 9){
elem.find(".pie").hide();
elem.find(".u-space-info").show();
}
// 隐藏刻度
if(ChartCfg.ChartType == 'scale'){
elem.find(".pie").hide();
elem.find(".scale").show();
}
//linux系统隐藏导出按钮
if(window.navigator.userAgent.indexOf("Windows") == -1
|| (ChartCfg.DataType == "8" || ChartCfg.DataType == "9")){
elem.find(".isShow i").hide();
}
//背景
if(ChartCfg.Background == undefined)
elem.find(".panel-body").addClass("configure_bg");
else
elem.find(".panel-body").addClass(ChartCfg.Background);
if(SHisBtn != "true")
elem.find(".current_charts i#pue").css("display","none");
if(STotalBtn != "true")
elem.find(".current_charts i#total").css("display","none");
var chartOption = {};
getOption(ChartCfg,cfg.binding,elem,piechart);
//nWidth:DIV宽度 nHeight:DIV高度 raw:默认大小
function getChartPercent(nWidth,nHeight,raw){
if(nWidth > nHeight){
return nHeight/raw;
}else{
return nWidth/raw;
}
}
function getOption(ChartCfg,binding,elem,piechart){
chartOption = {};
var per = getChartPercent(chartobj.clientWidth,chartobj.clientHeight,300);
var fontSize = per*26 > 20 ? 20 : per*26;
if(fontSize <= 0) fontSize = 16;
elem.find(".title").css("fontSize",fontSize+"px");
var sysStyle = localStorage.getItem("systemStyle");
if(ChartCfg.ChartType == 'line'){//曲线图
loadLineCharts(sysStyle,ChartCfg,binding,piechart);
}else if(ChartCfg.ChartType == 'bar'){
loadBarCharts(sysStyle,ChartCfg,piechart);
}else if(ChartCfg.ChartType == 'pie'){//饼图
if(ChartCfg.DataType == 1){
loadPieCharts(sysStyle,ChartCfg,piechart);
}else{
loadPercentPieCharts(sysStyle,ChartCfg,per,piechart);
}
}else if(ChartCfg.ChartType == 'gauge'){//仪表盘
loadGaugeCharts(sysStyle,ChartCfg,per,piechart);
}else if(ChartCfg.ChartType == 'newGauge'){//新仪表盘
loadNewGauge(elem,chartobj,cirRoot,cirName,cirVal,per);
}else if(ChartCfg.ChartType == 'thermometer'){//温度计
loadThermometer(sysStyle,ChartCfg,piechart);
}else if(ChartCfg.ChartType == 'gauge2'){//仪表盘2
loadGaugeCharts2(sysStyle,ChartCfg,piechart);
}else if(ChartCfg.ChartType == 'scale'){//刻度
loadScale(sysStyle,ChartCfg,elem);
}
}
//#region 曲线图 LineOrBarCharts.json
function loadLineCharts(sysStyle,ChartCfg,binding,piechart){
$http.get("data/LineOrBarCharts.json").success(function(data) {
var opt = data;
if(sysStyle == "White" && ChartCfg.Background != "gray_bg"){
opt.title.textStyle.color = "#464952";
opt.legend.textStyle.color = "#464952";
opt.xAxis[0].axisLabel.textStyle.color = "#464952";
opt.yAxis[0].axisLabel.textStyle.color = "#464952";
}
//隐藏Y轴
if(ChartCfg.Y1Name == "false")
opt.yAxis[0].show = false;
else
opt.yAxis[0].name = ChartCfg.Y1Name;
opt.yAxis[0].min = ChartCfg.Y1Min;
opt.yAxis[0].max = ChartCfg.Y1Max == "" ? "auto" : ChartCfg.Y1Max;
var colorArr = ["rgba(255, 127, 80, 0.6)","rgba(135, 206, 250, 0.6)","rgba(193, 35, 43, 0.6)","rgba(252, 206, 16, 0.6)","rgba(155, 202, 99, 0.6)"];
var arr = binding.split("&");
var index = 0;
for(var i = 1;i < arr.length;i++){
if(arr[i].indexOf("BS") == -1) continue;
var series = {
name : '',
type : ChartCfg.ChartType,
data : [],
/*itemStyle : {normal: {areaStyle: {
color : (function (){
var zrColor = zrender.tool.color;
return zrColor.getLinearGradient(
0, 200, 0, 400,
[[0, colorArr[index]],[0.1, 'rgba(255, 127, 80, 0)']]
)
})()
}}},*/
markPoint : {
data : [
{type : "max", name: scope.languageJson.Configuration.ActiveChartControl.Function.MaxVal},
{type : "min", name: scope.languageJson.Configuration.ActiveChartControl.Function.MinVal}
]
}
};//"最大值" / "最小值"
index ++;
if(index >= colorArr.length) index = 0;
opt.series.push(series);
}
//默认值
opt.xAxis[0].data[0]= ["加载中......"];
chartOption = opt;
try {
window.onresize = piechart.resize(); //使第一个图表适应
piechart.setOption(chartOption, true);
}catch(e){
console.log("EChart Error:"+e.message);
}
});
}
function updateLineCharts(opt,chartOption,chartType,piechart){
if(opt.length > 0){
chartOption.yAxis[0].axisLabel.formatter = '{value}';
}
var legendData = [];
var maxSize = 0;
for(var i = 0;i < chartOption.series.length;i++){
if(opt.length == 0) break;
var cfg = angular.fromJson(opt[i].currentValue);
chartOption.series[i].data = cfg.data;
if(chartType == 'line') {
chartOption.series[i].name = opt[i].baseTypeName;
legendData.push(opt[i].baseTypeName);
}else{
chartOption.series[i].name = opt[i].deviceName;
//legendData.push(opt[i].deviceName);
}
if(cfg.date && cfg.date.length > maxSize){
maxSize = cfg.date.length;
chartOption.xAxis[0].data = cfg.date;
}
}
chartOption.legend.data = legendData;
chartOption.tooltip = {
trigger: 'axis',
formatter: function(params) {
var result = "";
if(chartType == 'line'){
result = scope.languageJson.Configuration.ActiveChartControl.Chart.Time+' : '+params[0].name + '<br/>';
for(var i = 0;i < params.length;i++){
result += opt[i].baseTypeName + ' : ' + params[i].value + ' ' + opt[i].unit + '<br/>';
}
}else{
result = params[0].name + '<br/>';
for(var i = 0;i < params.length;i++){
result += opt[i].deviceName + ' : ' + params[i].value + ' ' + opt[i].unit + '<br/>';
}
}
return result;
}
};//采集时间
try {
window.onresize = piechart.resize(); //使第一个图表适应
piechart.setOption(chartOption, true);
}catch(e){
console.log("EChart Error:"+e.message);
}
}
//#endregion
//#region 柱状图 BarCharts.json
function loadBarCharts(sysStyle,ChartCfg,piechart){
$http.get("data/BarCharts.json").success(function(data){
var opt = data;
if(sysStyle == "White" && ChartCfg.Background != "gray_bg"){
opt.title.textStyle.color = "#464952";
opt.xAxis[0].axisLabel.textStyle.color = "#464952";
opt.yAxis[0].axisLabel.textStyle.color = "#464952";
}
//隐藏Y轴
if(ChartCfg.Y1Name == "false")
opt.yAxis[0].show = false;
else
opt.yAxis[0].name = ChartCfg.Y1Name;
opt.yAxis[0].min = ChartCfg.Y1Min;
opt.yAxis[0].max = ChartCfg.Y1Max == "" ? "auto" : ChartCfg.Y1Max;
opt.series[0].itemStyle.normal.color = function(params) {
// build a color map as your need.
var index = params.dataIndex;
var colorList = angular.fromJson(ChartCfg.LineColor);
if(index >= colorList.length)
index = index % colorList.length;
return colorList[index];
};
opt.xAxis[0].data = ['Loaging...'];
opt.series[0].data = [1];
chartOption = opt;
try {
window.onresize = piechart.resize(); //使第一个图表适应
piechart.setOption(chartOption, true);
}catch(e){
console.log("EChart Error:"+e.message);
}
});
}
function updateBarCharts(opt,chartOption,piechart){
if(opt.length == 0) return;
var names = [];
var datas = [];
opt.forEach(function(item){
var cfg = angular.fromJson(item.currentValue);
names.push(item.baseTypeName);
if(cfg.data && cfg.data.length > 0) datas.push(cfg.data[0]);
else datas.push(0);
});
chartOption.xAxis[0].data = names;
chartOption.series[0].data = datas;
var s = angular.toJson(chartOption);
try {
window.onresize = piechart.resize(); //使第一个图表适应
piechart.setOption(chartOption, true);
}catch(e){
console.log("EChart Error:"+e.message);
}
}
//#endregion
//#region 饼图1 PieCharts.json
function loadPieCharts(sysStyle,ChartCfg,piechart){
$http.get("data/PiecCharts.json").success(function(data){
var opt = data;
if(sysStyle == "White" && ChartCfg.Background != "gray_bg") {
opt.title.textStyle.color = "#464952";
opt.series[0].itemStyle.normal.label.textStyle.color = "#464952";
}
opt.series[0].radius = [per*20,"55%"];
opt.series[0].name = ChartCfg.Y1Name;
//默认值
opt.series[0].data[0].value = 1;
opt.series[0].data[0].name = '';
opt.series[0].data[1].value = 0;
opt.series[0].data[1].name = '';
chartOption = opt;
try {
window.onresize = piechart.resize(); //使第一个图表适应
piechart.setOption(chartOption, true);
}catch(e){
console.log("EChart Error:"+e.message);
}
});
}
function updatePieCharts(opt,chartOption,piechart){
var data = [];
opt.forEach(function(item){
var cfg = {};
cfg.value = item.floatValue;
cfg.name = item.deviceName;
data.push(cfg);
});
chartOption.series[0].data = data;
try {
window.onresize = piechart.resize(); //使第一个图表适应
piechart.setOption(chartOption, true);
}catch(e){
console.log("EChart Error:"+e.message);
}
}
function updateOtherPieCharts(value,chartOption,PieValueType,y1Name,piechart){
var cfg = angular.fromJson(value.currentValue);
chartOption.series[0].data[0].value = cfg.other;
chartOption.series[0].data[1].value = cfg.usage;
if(PieValueType == "val"){
//var fv = cfg.floatValue != undefined ? cfg.floatValue : cfg.value;
//chartOption.series[0].itemStyle.normal.label.formatter = fv;
if(y1Name != "")
chartOption.title.text = y1Name;
}else if(PieValueType == "sw"){
var meaning = getMeaningByValue(cfg.value,meanings);
chartOption.series[0].data[0].name = meaning;
chartOption.title.text = y1Name;
}else{
//chartOption.series[0].itemStyle.normal.label.formatter = cfg.usage+' %';
if(y1Name != "")
chartOption.title.text = y1Name;//+" = "+cfg.value;
}
try {
window.onresize = piechart.resize(); //使第一个图表适应
piechart.setOption(chartOption, true);
}catch(e){
console.log("EChart Error:"+e.message);
}
}
//#endregion
//#region 饼图2 PercentPieCharts.json
function loadPercentPieCharts(sysStyle,ChartCfg,per,piechart){
$http.get("data/PercentPieCharts.json").success(function(data){
var opt = data;
if(sysStyle == "White" && ChartCfg.Background != "gray_bg") {
opt.title.textStyle.color = "#464952";
opt.series[0].data[0].itemStyle.normal.label.textStyle.color = "#464952";
opt.series[0].data[1].itemStyle.normal.label.textStyle.color = "#464952";
}
//opt.series[0].data[0].name = "未使用";
if(ChartCfg.PieValueType == "val") {
if(ChartCfg.Unit == undefined || ChartCfg.Unit == "")
opt.series[0].data[1].name = "";
else
opt.series[0].data[1].name = scope.languageJson.Configuration.ActiveChartControl.Chart.Unit + ChartCfg.Unit;/*"Unit:"*/
}else if(ChartCfg.PieValueType == "sw"){
opt.series[0].data[1].name = "";
}else
opt.series[0].data[1].name = scope.languageJson.Configuration.ActiveChartControl.Chart.Used;//"已使用" / ChartCfg.Y1Name;
opt.series[0].radius = [per*110,"55%"];
opt.series[0].itemStyle.normal.label.textStyle.fontSize = per*40;
opt.series[0].data[1].itemStyle.normal.label.textStyle.fontSize = per*20;
if(ChartCfg.PieColor && ChartCfg.PieColor != "")
opt.color[1] = ChartCfg.PieColor;
opt.title.textStyle.fontSize = per*30;
//默认值
opt.series[0].data[0].value = 1;
opt.series[0].data[0].name = '';
opt.series[0].data[1].value = 0;
//opt.series[0].data[1].name = '';
chartOption = opt;
try {
window.onresize = piechart.resize(); //使第一个图表适应
piechart.setOption(chartOption, true);
}catch(e){
console.log("EChart Error:"+e.message);
}
});
}
function updatePercentPieCharts(value,chartOption,PieValueType,y1Name,piechart,unit,meanings){
var cfg = angular.fromJson(value.currentValue);
chartOption.series[0].data[0].value = cfg.other;
chartOption.series[0].data[1].value = cfg.usage;
if(PieValueType == "val"){// 模拟量
_.find(chartOption.series,function(serie){
serie.label.normal.formatter = cfg.floatValue+" "+unit;
});
}else if(PieValueType == "sw"){
var meaning = getMeaningByValue(cfg.value,meanings);
_.find(chartOption.series,function(serie){
serie.label.normal.formatter = meaning;
});
}else{ // per 百分比
_.find(chartOption.series,function(serie){
serie.label.normal.formatter = (parseFloat(cfg.value*100)).toFixed(2)+" %";
});
}
if(y1Name != "") chartOption.title.text = y1Name;//+" = "+cfg.value;
try {
window.onresize = piechart.resize(); //使第一个图表适应
piechart.setOption(chartOption, true);
}catch(e){
console.log("EChart Error:"+e.message);
}
}
//#endregion
//#region 仪表盘 GaugeCharts.json
function loadGaugeCharts(sysStyle,ChartCfg,per,piechart){
$http.get("data/GaugeCharts.json").success(function(data){
var opt = data;
if(sysStyle == "White" && ChartCfg.Background != "gray_bg") {
opt.title.textStyle.color = "#464952";
}
opt.series[0].name = ChartCfg.Y1Name;
opt.series[0].min = parseFloat(ChartCfg.Y1Min);
opt.series[0].max = parseFloat(ChartCfg.Y1Max);
opt.series[0].axisLine.lineStyle.color = eval(ChartCfg.LineColor);
if(ChartCfg.DataType == 2)
opt.series[0].axisLabel.formatter = function (value, index) {
return value.toFixed(2);
};
opt.series[0].radius = per*210;
opt.series[0].axisLine.lineStyle.width = per*30;
opt.series[0].axisLabel.textStyle.fontSize = per*20;
opt.series[0].pointer.width = per*12;
opt.series[0].title.textStyle.fontSize = per*30;
//默认值
opt.series[0].data[0].value = parseFloat(ChartCfg.Y1Min);
opt.series[0].data[0].name = '';
chartOption = opt;
//AVG位置
if(ChartCfg.DataType == 7){
opt.series[0].center = ["65%", "70%"];
opt.series[0].radius = per*170;
elem.find(".avg-max-min .value").css("font-size",per*30+"px");
elem.find(".avg-max-min .name").css("font-size",per*15+"px");
elem.find('.max .value').html("0.0");
elem.find('.min .value').html("0.0");
}
try {
window.onresize = piechart.resize(); //使第一个图表适应
piechart.setOption(chartOption, true);
}catch(e){
console.log("EChart Error:"+e.message);
}
});
}
function updateGaugeCharts(opt,chartOption,piechart){
if(opt.length == 0) return;
chartOption.series[0].data[0].value = opt[0].floatValue;
chartOption.series[0].detail.formatter = opt[0].baseTypeName +" = "+opt[0].currentValue;
try {
window.onresize = piechart.resize(); //使第一个图表适应
piechart.setOption(chartOption, true);
}catch(e){
console.log("EChart Error:"+e.message);
}
}
function updateOtherGaugeCharts(dataType,value,chartOption,elem,y1Name,unit,piechart){
if(dataType == 7){//平均值 最大值 最小值
var cfg = angular.fromJson(value.currentValue);
chartOption.series[0].data[0].value = cfg.avg;
chartOption.series[0].detail.formatter = "AVG = "+cfg.avg+" "+cfg.unit;
elem.find('.max .value').html(cfg.max+" "+cfg.unit);
elem.find('.min .value').html(cfg.min+" "+cfg.unit);
}else if(dataType != 6 && dataType != 2){
chartOption.series[0].data[0].value = value.currentValue;
if(dataType == 3)//实时MDC功率
chartOption.series[0].detail.formatter = scope.languageJson.Configuration.ActiveChartControl.Chart.Power+" = "+value.currentValue+" kW";//功率
}else{//其他
var cfg = angular.fromJson(value.currentValue);
if(dataType == 2){//实时PUE
if(isNaN(cfg.value)) cfg.value = 0.0;
chartOption.series[0].detail.formatter = "PUE = "+cfg.value;
}else{
if(y1Name == ""){
chartOption.series[0].detail.formatter = cfg.value+" "+unit;
}else{
chartOption.series[0].detail.formatter = y1Name+" = "+cfg.value+" "+unit;
}
}
chartOption.series[0].data[0].value = cfg.value;
}
try {
window.onresize = piechart.resize(); //使第一个图表适应
piechart.setOption(chartOption, true);
}catch(e){
console.log("EChart Error:"+e.message);
}
}
//#endregion
//#region 新仪表盘
function loadNewGauge(elem,chartobj,cirRoot,cirName,cirVal,per){
var body = elem.find('.panel-body')[0];
per = getChartPercent(body.clientWidth,body.clientHeight,300);
var size = per * 300;
var radius = per * 100;
var small = per * 20;
var fontSize = per*42;
var fine1 = 10 * per;
var fine2 = 5 * per;
//仪表盘下显示单位
/*var cirName = elem.find('.circle .circle-name')[0];
cirName.innerHTML = ChartCfg.Y1Name;
cirName.style.width = size + "px";*/
var circleGauge = elem.find('.new_gauge')[0];
//隐藏ECharts的DIV
chartobj.style.display = "none";
//设置样式
cirRoot.style.fontSize = fontSize + "px";
cirName.style.fontSize = (fontSize - fine1) + "px";
cirRoot.style.width = size + "px";
cirVal.style.width = size + "px";
cirName.style.width = size + "px";
cirVal.style.lineHeight = fontSize + "px";
cirName.style.lineHeight = fontSize + "px";
circleGauge.width = size;
circleGauge.height = size;
cirVal.style.top = ((circleGauge.height / 2) + 34) + "px";
//设置背景图
circleGauge.style.backgroundImage = "url('/img/diagram/"+ChartCfg.LineImages+".png')";
circleGauge.style.backgroundSize = size+'px';
//设置圆环进度条的参数
circle = CircleProcess(circleGauge,{
"size":"incomplete",
"radius": radius,
"percent": 0,
"backgroundCircle":{
"show":false
},
"percentCircle":{
"show":false
},
"endSmallCircle":{
"show": true,
"borderColor": "#21b7fc",
"borderRadius": small,
"color": "#FFFFFF",
"radius": small-fine2
},
"processText":{
"show":false
}
});
}
function runCircle(value,y1Name){
value = parseFloat(value);
var min = parseFloat(ChartCfg.Y1Min);
var max = ChartCfg.Y1Max == "auto" ? 100 : parseFloat(ChartCfg.Y1Max);
var current = value - min;
var section = max - min;
var per = (current / section) * 100;
// 取值范围
if(per <= 1){
per = 1;
}
if(per >= 100){
per = 100;
}
cirVal.innerHTML = value;
cirName.innerHTML = y1Name;
circle.option.percent = per > 100 ? 100 : per;
circle.run();
}
function updateNewGauge(dataType,value,y1Name){
var val = 0;
try{
var cfg = angular.fromJson(value.currentValue);
if(cfg.floatValue) val = cfg.floatValue;
else if(cfg.value) val = cfg.value;
if(dataType == 2){//实时PUE
y1Name = "PUE";
}
}catch (e) {
val = value.floatValue;
}
runCircle(val,y1Name);
}
//#endregion
//#region 温度计 Thermometer.json
function loadThermometer(sysStyle,ChartCfg,piechart){
$http.get("data/Thermometer.json").success(function(data) {
try {
chartOption = data;
// 字体颜色
if(sysStyle == "White" && ChartCfg.Background != "gray_bg"){
//chartOption.title.textStyle.color = "#464952";
chartOption.series[chartOption.series.length-1].label.normal.color = "#464952";
chartOption.series[chartOption.series.length-1].itemStyle.normal.color = "#464952";
}
// 标题
chartOption.title.text = "";
// 刻度
chartOption.series[chartOption.series.length-1].label.normal.formatter = function (params) {
if (params.dataIndex > 80 || params.dataIndex < 0) {
return '';
} else {
if ((params.dataIndex - 10) % 10 === 0) {
return params.dataIndex - 10;
} else {
return '';
}
}
};
window.onresize = piechart.resize(); //使第一个图表适应
piechart.setOption(chartOption, true);
}catch(e){
console.log("EChart Error:"+e.message);
}
});
}
function updateThermometer(opt,piechart){
if(!opt && opt.length <= 0) return;
try {
//console.log(opt);
var value = parseFloat(opt[0].floatValue)+10;
if(value > 80 ) value = 80;
else if(value < -10) value = 0;
chartOption.series[0].data[0].value = value;
chartOption.title.text = opt[0].currentValue;
window.onresize = piechart.resize(); //使第一个图表适应
piechart.setOption(chartOption, true);
}catch(e){
console.log("EChart Error:"+e.message);
}
}
//#endregion
//#region 仪表盘2 GaugeCharts2.json
function loadGaugeCharts2(sysStyle,ChartCfg,piechart){
$http.get("data/GaugeCharts2.json").success(function(data) {
try {
chartOption = data;
//范围
chartOption.series[0].min = ChartCfg.Y1Min;
chartOption.series[0].max = ChartCfg.Y1Max
// 字体颜色
if(sysStyle == "White" && ChartCfg.Background != "gray_bg"){
chartOption.series[0].axisLabel.color = "#464952";
chartOption.series[0].detail.color = "#464952";
}
window.onresize = piechart.resize(); //使第一个图表适应
piechart.setOption(chartOption, true);
}catch(e){
console.log("EChart Error:"+e.message);
}
});
}
function updateGaugeCharts2(opt,chartOption,piechart){
if(!opt && opt.length <= 0) return;
chartOption.series[0].data[0].value = opt[0].floatValue;
try {
window.onresize = piechart.resize(); //使第一个图表适应
piechart.setOption(chartOption, true);
}catch(e){
console.log("EChart Error:"+e.message);
}
}
//#endregion
//#region 刻度
function loadScale(sysStyle,ChartCfg,elem){
// 值转换类型
if(ChartCfg.Y1Max == "auto") ChartCfg.Y1Max = 100;
else ChartCfg.Y1Max = parseInt(ChartCfg.Y1Max);
ChartCfg.Y1Min = parseInt(ChartCfg.Y1Min);
var lineColor = angular.fromJson(ChartCfg.LineColor);
// 清空原数据
elem.find(".scale").children().remove();
// 添加HTMl
addScaleCurrentValueHtml(elem.find(".scale"));
var lastSize = 0, type = "", valScope = ChartCfg.Y1Max - ChartCfg.Y1Min;
for(var i = lineColor.length-1; i >= 0;i--){
if(i == 0) type = "tail";
else if(i == lineColor.length - 1) type = "head";
else type = "";
var flag = (lineColor[i][0]*valScope) + ChartCfg.Y1Min;
lastSize = (i > 0) ? lineColor[i-1][0] : 0;
var height = (lineColor[i][0] - lastSize)*100;
var title = (lineColor[i].length < 3 || lineColor[i][2] == undefined) ? "" : lineColor[i][2];
addScaleCellHtml(elem.find(".scale"),type, height, lineColor[i][1], title, flag, ChartCfg.Y1Min);
}
//console.log(lineColor);
}
function addScaleCurrentValueHtml(root){
var html = "<div class=\"current-value\">"+
"<span></span>"+
"<div class=\"value\">10.0 ℃</div>"+
"</div>";
root.append(html);
}
function addScaleCellHtml(root, type, height, color, title, flag, min){
var html = "";
if(type == "head"){
html = "<div class=\"scale-cell cell-head\" style=\"height: "+height+"%;\">"+
"<div class=\"cell-title\"> "+title+" </div>"+
"<div class=\"cell-color\" style=\"background-color: "+color+";\"></div>"+
"<div class=\"cell-value max-value\"> "+flag+"</div>"+
"</div>";
}else if(type == "tail"){
html = "<div class=\"scale-cell cell-tail\" style=\"height: "+height+"%;\">"+
"<div class=\"cell-title\"> "+title+" </div>"+
"<div class=\"cell-color\" style=\"background-color: "+color+";\"></div>"+
"<div class=\"cell-value \"> "+flag+"</div>"+
"<div class=\"cell-value min-value\"> "+min+"</div>"+
"</div>";
}else{
html = "<div class=\"scale-cell\" style=\"height: "+height+"%;\">"+
"<div class=\"cell-title\"> "+title+" </div>"+
"<div class=\"cell-color\" style=\"background-color: "+color+";\"></div>"+
"<div class=\"cell-value\"> "+flag+"</div>"+
"</div>";
}
root.append(html);
}
function updateScale(opt,ChartCfg,elem){
if(!opt && opt.length <= 0) return;
//console.log(elem.find(".scale > .current-value > .value"),opt,ChartCfg);
// 值转换类型
if(ChartCfg.Y1Max == "auto") ChartCfg.Y1Max = 100;
else ChartCfg.Y1Max = parseInt(ChartCfg.Y1Max);
ChartCfg.Y1Min = parseInt(ChartCfg.Y1Min);
ChartCfg.LineColor = angular.fromJson(ChartCfg.LineColor);
// 值位置
var valScope = ChartCfg.Y1Max - ChartCfg.Y1Min;
var valueLocation = ((parseFloat(opt[0].floatValue-ChartCfg.Y1Min))/valScope)*100;
if(valueLocation > 100) valueLocation = 100;
else if(valueLocation < 0) valueLocation = 0;
elem.find(".scale > .current-value")[0].setAttribute("style","bottom: calc("+valueLocation+"% - 12.5px);");
elem.find(".scale > .current-value > .value")[0].innerHTML = opt[0].currentValue;
// 箭头颜色
var color = ChartCfg.LineColor[0][1];
for(var i = 0;i < ChartCfg.LineColor.length-1; i++){
if(parseFloat(ChartCfg.LineColor[i][0])*100 < valueLocation && valueLocation <= parseFloat(ChartCfg.LineColor[i+1][0])*100)
color = ChartCfg.LineColor[i+1][1];
}
elem.find(".scale > .current-value > span")[0].setAttribute("style","border-left-color: "+color+";");
}
//endregion
function getBaseTypes(data){
var list = [];
var datas = data.split("&");
for(var i = 0;i < datas.length;i++){
if(global.getpara("BS",datas[i]) == -1) continue;
var obj = {};
obj.deviceId = global.getpara("DI",datas[i]);
obj.baseTypeId = global.getpara("BS",datas[i]);
list.push(obj);
}
return list;
}
function initPieChats(list,currpartid,binddata,dataType,chartType,y1Name,PieValueType,meanings,unit,signalNames){
if((chartOption.series == undefined && chartType != 'newGauge') && chartType != 'scale') return;
if(dataType == 1){
var opt = [];
list.forEach(function(item){
var value = _.findWhere(binddata, {partId: currpartid,deviceId:item.deviceId,baseTypeId:item.baseTypeId});
if(value == undefined || value.currentValue == undefined || value.currentValue == "") return;
opt.push(value);
});
if(opt.length == 0) return;
opt = setSignalName(signalNames,opt);
if(chartType == 'line'){
updateLineCharts(opt,chartOption,chartType,piechart);
}else if(chartType == 'bar'){//柱形图
updateBarCharts(opt,chartOption,piechart);
}else if(chartType == 'pie'){//饼图
updatePieCharts(opt,chartOption,piechart);
}else if(chartType == 'gauge'){//仪表盘
updateGaugeCharts(opt,chartOption,piechart);
}else if(chartType == 'newGauge'){//新仪表盘
if(opt.length == 0) return;
runCircle(opt[0].floatValue,y1Name);
}else if(chartType == 'thermometer'){//温度计
updateThermometer(opt,piechart);
}else if(chartType == 'gauge2'){ //仪表盘2
updateGaugeCharts2(opt,chartOption,piechart);
}else if(chartType == 'scale'){
updateScale(opt,ChartCfg,elem)
}
}else{
var value = _.findWhere(binddata, {partId: currpartid});
if(value == undefined || value.currentValue == undefined || value.currentValue == "") return;
if(chartType == 'gauge'){//仪表盘
updateOtherGaugeCharts(dataType,value,chartOption,elem,y1Name,unit,piechart);
}else if(chartType == 'newGauge'){//新仪表盘
updateNewGauge(dataType,value,y1Name);
}else{//饼图
//updateOtherPieCharts(value,chartOption,PieValueType,y1Name,piechart);
updatePercentPieCharts(value,chartOption,PieValueType,y1Name,piechart,unit,meanings);
}
}
}
//#endregion
//#region 获取修改的信号名称
function setSignalName(signalNames,option){
// option = [{deviceId:"[设备编号]",baseTypeId:"[信号基类]",baseTypeName:"[修改的信号名称]"}]
// list = [{"deviceBaseTypeId":"[设备编号]","deviceBaseName":"[设备名称]","baseTypeId":"[信号基类]","baseTypeName":"[信号名称]","remark":"[单位]"}]
if(option && signalNames != ""){
var list = angular.fromJson(base64.decode(signalNames));
_.find(option,function(opt){
var signal = _.findWhere(list,{deviceBaseTypeId:opt.deviceId+"",baseTypeId:opt.baseTypeId+""});
if(signal){
opt.baseTypeName = signal.baseTypeName;
}
});
}
return option;
}
//#endregion
//#region U位资产 @Author:Eddy @Date:2021/06/04
function loadUAssetsPie(cabinetId,dataType,y1Name){
var prompt = scope.languageJson.MdcAssets;
mdcAssetsManagerService.GetMdcAssetsConfig().then(function (data) {
if(data && data.assetsDevices){
if(dataType == "8"){// 微模块 总U位、占用U位、占用率
loadUAssetsPieTotal(data.cabinetNumber,data.assetsDevices,y1Name,prompt);
try {
window.onresize = piechart.resize(); //使第一个图表适应
piechart.setOption(chartOption, true);
}catch(e){
console.log("EChart Error:"+e.message);
}
}else{// 机柜 总U位、占用U位、占用率
scope.CabinetUHeight = createUHeightArr(data.cabinetUHeight);
loadUAssetsPieCabinet(cabinetId,data);
}
}
});
}
// 饼图 微模块U位状态
function loadUAssetsPieTotal(number,cabinets,y1Name,prompt){
if(chartOption.series == undefined) return;
var total = 0,use = 0,surplus = 0;
_.find(cabinets,function(item){
if(item.id <= number){
total += parseInt(item.totalSpace);
surplus += parseInt(item.surplusSpace);
use += parseInt(item.totalSpace) - parseInt(item.surplusSpace);
}
});
chartOption.series[0].data[0].value = surplus;
chartOption.series[0].data[1].value = use;
if(y1Name != ""){
chartOption.title.text = prompt.TotalU+": "+total+" "+prompt.UseU+":"+use;
}
var usage = ((use / total) * 100).toFixed(2);
chartOption.series[0].itemStyle.normal.label.formatter = usage+" %";
}
// 机柜图 机柜U位状态
function loadUAssetsPieCabinet(cabinetId,data){
var TotalU = data.cabinetUHeight,UseU = 0,UsageU = 0;
mdcAssetsManagerService.SelectCabinetAssets(cabinetId+"").then(function (assets) {
scope.CabinetAssets = assets;
_.find(assets,function(item){
UseU += parseInt(item.uHeight);
});
UsageU = ((UseU / TotalU)*100).toFixed(2);
scope.UInfo = {
MaxU:countMaxUSize(TotalU,assets),
UseU:UseU,
UsageU:UsageU
};
});
}
//生成U高集合
function createUHeightArr(totalSpace) {
var arr = [];
for (var i = 0; i < totalSpace; i++) {
var obj = {
no: i
};
arr.push(obj);
}
return arr;
}
// 计算最大连续的U位 @Author:Eddy @Date:2021/06/09
function countMaxUSize(totalU,assets){
// 生成机柜U位集
var cabinetU = [];
for(var i = 0;i<totalU;i++){
cabinetU.push({
index:i,
status:0 // 占用:1;空:0;
});
}
// 设置占用状态
var nilArr = [];// 空U位置大小集
var count = 0;// U位大小
var startIndex = -1;// 测试所用开始结束Index
_.find(cabinetU,function(item){
var filter = _.filter(assets,function(a){
return ((item.index >= parseInt(a.uIndex)) && (item.index < (parseInt(a.uIndex) + parseInt(a.uHeight))))
});
if(filter != undefined && filter.length > 0){
item.status = 1;
if(startIndex > -1){
if(startIndex == 0){
nilArr.push(count);
}else{
nilArr.push(count);
}
startIndex = -1;
count = 0;
}
}else{
item.status = 0;
if(startIndex == -1){
startIndex = item.index;
}
count ++;
}
});
if(startIndex > -1){// 判断是否为最后
if(startIndex == 0){
nilArr.push(count);
}else{
nilArr.push(count);
}
}
//console.log(nilArr);
if(nilArr.length == 0){
return 0;
}
return _.max(nilArr);
}
//#endregion
//#region 实时数据
scope.$watch('binddata', function(newValue, oldValue, scope) {
if(cfg.binding == undefined) return;
var list = getBaseTypes(cfg.binding);
var meanings = parsePieMeaning(ChartCfg.Meaning);
if(ChartCfg.DataType == "8" || ChartCfg.DataType == "9"){
loadUAssetsPie(ChartCfg.CabinetId,ChartCfg.DataType,ChartCfg.Y1Name);
return;
}
initPieChats(list,currpartid,scope.binddata,ChartCfg.DataType,ChartCfg.ChartType,ChartCfg.Y1Name,ChartCfg.PieValueType,meanings,ChartCfg.Unit,ChartCfg.SignalNames);
});
function parsePieMeaning(meaning){
if(meaning == undefined) return;
var meanings = [];
//meaning => 0.正常/1.异常
var split1 = meaning.split("/");
if(split1){
split1.forEach(function(item){
var split2 = item.split(".");
var cfg = {
value : parseInt(split2[0]),
meaning : split2[1]
};
meanings.push(cfg);
});
}
return meanings;
}
function getMeaningByValue(value,meanings){
var meaning = "";
if(meanings){
meanings.forEach(function(item){
if(item.value == value) meaning = item.meaning;
});
}
return meaning;
}
scope.clickExport = function(event){
var partid = event.target.parentNode.parentNode.parentNode.attributes["partid"].nodeValue;
var chart = [];
scope.binddata.forEach(function(item){
if(item.partId == partid && item.currentValue != scope.languageJson.Loading+"...")//加载中
chart.push(item);
});
if(chart.length == 0) return;
var exportData = getPieChatsExport(chart);
try{
if(piechart.getDataURL("png") == "data:,"){
Exporter.toXls(exportData);
}else{
chartOption.backgroundColor = '#020e45';
piechart.setOption(chartOption, true);
Exporter.toImgXls(exportData, piechart.getDataURL("png"));
chartOption.backgroundColor = 'transparent';
piechart.setOption(chartOption, true);
}
}catch(e){
Exporter.toXls(exportData);
}
};
function getPieChatsExport(data) {
var arr = [];
if(data[0].description == ""){
arr.push({
name : scope.languageJson.Configuration.ActiveChartControl.Chart.Name,
data : scope.languageJson.Configuration.ActiveChartControl.Chart.Value,
date : scope.languageJson.Configuration.ActiveChartControl.Chart.Time
});//"名称" / "值" / "时间"
for(var i = 0;i < data.length;i++){
cfg = {};
cfg.name = data[i].deviceName+' '+data[i].signalName;
cfg.data = data[i].currentValue;
cfg.date = data[i].updateTime;
arr.push(cfg);
}
return arr;
}else if(data[0].description.indexOf("line") > -1){
arr.push({
name : scope.languageJson.Configuration.ActiveChartControl.Chart.Name,
data : scope.languageJson.Configuration.ActiveChartControl.Chart.Value,
date : scope.languageJson.Configuration.ActiveChartControl.Chart.Time
});//"名称" / "值" / "时间"
for(var i = 0;i < data.length;i++){
var currValue = angular.fromJson(data[i].currentValue);
for(var j = 0;j < currValue.data.length;j ++){
cfg = {};
cfg.name = data[i].deviceName+' '+data[i].baseTypeName;
cfg.data = currValue.data[j];
cfg.date = currValue.date[j];
arr.push(cfg);
}
}
return arr;
}else if(data[0].description.indexOf("bar") > -1){
var chartArr = scope.languageJson.Configuration.ActiveChartControl.Chart;
arr.push({
name : chartArr.DataName,
data : chartArr.Data
});// "数据名称" / "数据"
data.forEach(function(item){
var cfg = angular.fromJson(item.currentValue);
arr.push({
name:item.baseTypeName,
data:cfg.data[0]
});
});
return arr;
}else{
var chartArr = scope.languageJson.Configuration.ActiveChartControl.Chart;
arr.push({
name : chartArr.DataName,
data : chartArr.Data
});// "数据名称" / "数据"
for(var i = 0;i < data.length;i++){
var split = data[i].description.split("|");
cfg = {};
if(split[1] == 2){
cfg.name = "PUE";
var currValue = angular.fromJson(data[i].currentValue);
cfg.data = currValue.value;
}else if(split[1] == 3){
cfg.name = chartArr.Power;//"功率"
cfg.data = data[i].currentValue+" kW";
}else{
if(split[1] == 4)
cfg.name = chartArr.Space;//"空间容量";
if(split[1] == 5)
cfg.name = chartArr.Load;//"负载容量";
if(split[1] == 6)
cfg.name = chartArr.Cooling;//"制冷容量";
var value = data[i].currentValue;
cfg.data = angular.fromJson(value).usage+" %"
}
arr.push(cfg);
}
return arr;
}
}
scope.clickPue = function($event){
scope.selectDate = 7;
scope.isDetail = true;
scope.historyTitle = scope.languageJson.Configuration.ActiveChartControl.PueTitle;//"历史PUE曲线"
var setHistoryPueDlg = $modal({
scope: scope,
templateUrl: 'partials/historyPueCharts.html',
show: false
});
setHistoryPueDlg.$promise.then(setHistoryPueDlg.show);
scope.clickPartId = $($event.currentTarget).parent().parent().parent().attr("partid");
//console.log("PartId:"+scope.clickPartId);
// 取值区间
var range = getMinAndMax(scope.clickPartId);
var id = scope.diagram.deviceId+scope.clickPartId;
MdcAlarmService.GetHistoryPueCharts(id,"7").then(function(data){
createCharts(data,scope.isDetail,range.min,range.max);
});
};
function getMinAndMax(partId){
var cfg = getPartConfig(scope.diagram, partId);
var chartType = global.getpara("ChartType",cfg.options);
var dataType = global.getpara("DataType",cfg.options);
if(chartType == "pie"){// 饼图 [0,1]
return {min:0,max:1};
}
if(dataType == 2){// PUE [1,1.5]
return {min:1,max:1.5};
}
// 其他通过 获取Y1Min和Y1Max值
var min = global.getpara("Y1Min",cfg.options);
var max = global.getpara("Y1Max",cfg.options);
if(min != "undefined" && max != "undefined"){
return {mai:parseFloat(min),max:parseFloat(max)};
}
return {min:0,max:"auto"};
}
//#endregion
//#region 修改总值表达式 @Author: Eddy @Date: 2021/06/05
var modifyDlg = $modal({
scope: scope,
templateUrl: 'partials/modifyChartTotal.html',
show: false
});
scope.clickModifyTotal = function($event){
scope.Modify = {};
scope.partId = $($event.currentTarget).parent().parent().parent().attr("partid");
var cfg = getPartConfig(scope.diagram, scope.partId);
if(cfg != undefined){
if(cfg.binding && cfg.binding.split("&").length > 1){
var split = cfg.binding.split("&");
var exp1 = global.getpara("expr1",split[0]);
scope.Modify.Current = base64.decode(exp1);
var exp2 = global.getpara("expr2",split[1]);
if(exp2){
scope.Modify.Total = base64.decode(exp2);
modifyDlg.$promise.then(modifyDlg.show);
}
}
}
};
function getPartConfig(diagram, id) {
var found = _.find(diagram.parts, function(part) {
return part.id === id;
});
return found;
}
scope.saveModifyTotal = function(){
var cfg = getPartConfig(scope.diagram, scope.partId);
if(cfg != undefined){
if(cfg.binding && cfg.binding.split("&").length > 1){
var split = cfg.binding.split("&");
cfg.binding = split[0]+"&expr2:"+base64.encode(scope.Modify.Total);
scope.resetParts();
modifyDlg.hide();
}
var storeInterval = global.getpara("StoreInterval",cfg.options);
savePUECofnig(scope.partId,scope.Modify.Current,scope.Modify.Total,storeInterval);
}
};
function savePUECofnig(id,expression,expression2,time){
id = scope.diagram.deviceId+id;// 拼接设备编号+序列号
var expr = expression+" / 1";
if(expression2 != undefined && expression2 != ""){
expr = "("+expression+") / ("+expression2+")";
}
diagramService.SavePueConfig(id+"|"+expr+"|"+time).then(function(data){});
}
//#endregion
//#region 导出
// 生成图表 Author: Eddy Date: 2021/05/25
function createCharts(data,is,min,max){
data = filterData(data,is);
var chartOption = {};
var ChartCfg = {
ChartType : 'line',
SingleBiaxial : 1,
Y1Name : ''
};
var sysStyle = localStorage.getItem("systemStyle");
$http.get("data/LineOrBarCharts.json").success(function(json) {
var opt = json;
if(sysStyle == "White" && ChartCfg.Background != "gray_bg"){
opt.title.textStyle.color = "#464952";
opt.legend.textStyle.color = "#464952";
opt.xAxis[0].axisLabel.textStyle.color = "#464952";
opt.yAxis[0].axisLabel.textStyle.color = "#464952";
}
// 位置
opt.grid = {
x: 40,
y: 40,
x2: 20,
y2: 30,
borderWidth : 0
}
//隐藏Y轴
if(ChartCfg.Y1Name == "false")
opt.yAxis[0].show = false;
else
opt.yAxis[0].name = ChartCfg.Y1Name;
opt.yAxis[0].min = min;
opt.yAxis[0].max = max;
var series = {
name : ChartCfg.Y1Name,
type : ChartCfg.ChartType,
data : [],
itemStyle : {normal: {areaStyle: {type: "default"}}},
markPoint : {
data : [
{type : "max", name: scope.languageJson.Configuration.ActiveChartControl.Function.MaxVal},
{type : "min", name: scope.languageJson.Configuration.ActiveChartControl.Function.MinVal}
]
}
};//"最大值" / "最小值"
opt.series.push(series);
chartOption = opt;
chartOption.series[0].name = "";
chartOption.series[0].data = data.datas;
chartOption.xAxis[0].data = data.dates;
echarts.init($("#HistoryPue")[0]).setOption(chartOption, true);
});
}
// 是否过滤每天一条 Author: Eddy Date: 2021/05/25
function filterData(data,is){
if(is){
var result = {
datas:[],
dates:[]
};
_.find(data.dates,function(de,index){
var date = de.split(" ")[0];
var oldDate = _.indexOf(result.dates,date);
if(oldDate == -1){
result.datas.push(data.datas[index]);
result.dates.push(date);
}
});
return result;
}
return data;
}
// 时间过滤 Author: Eddy Date: 2021/05/25
scope.dateFilter = function(day){
scope.selectDate = day;
// 取值区间
var range = getMinAndMax(scope.clickPartId);
var id = scope.diagram.deviceId+scope.clickPartId;
MdcAlarmService.GetHistoryPueCharts(id,day).then(function(data){
createCharts(data,scope.isDetail,range.min,range.max);
});
};
// 时间过滤 Author: Eddy Date: 2021/05/25
scope.detailFilter = function(is){
scope.isDetail = !is;
// 取值区间
var range = getMinAndMax(scope.clickPartId);
var id = scope.diagram.deviceId+scope.clickPartId;
MdcAlarmService.GetHistoryPueCharts(id,scope.selectDate).then(function(data){
createCharts(data,scope.isDetail,range.min,range.max);
});
return scope.isDetail;
}
// 导出历史PUE Author:Eddy Date:2021/05/26
scope.exportHistoryPue = function(){
MdcAlarmService.GetHistoryPueCharts(scope.clickPartId,365).then(function(data){
// console.log(data);
var exportData = getPueExport(data);
Exporter.toXls(exportData);
});
};
// 生成历史图表 导出格式 Author:Eddy Date:2021/05/26
function getPueExport(data){
var arr = [];
var chartArr = scope.languageJson.Configuration.ActiveChartControl.Chart;
arr.push({
name : chartArr.Time,
data : chartArr.Value
});// 时间 值
// 遍历数据
_.find(data.dates,function(date,index){
arr.push({
name:date,
data:data.datas[index]
});
});
return arr;
}
//#endregion
scope.$watch('diagram.edit', function(newValue, oldValue, scope) {
diagramService.updateEditStatus(elem, newValue);
});
}
};
}
]);
nurseDirective.directive('newgaugesetter',['$modal','baseTypeService','ConfigureMoldService',
function($modal,baseTypeService,ConfigureMoldService){
return{
restrict: 'A',
link: function(scope, element) {
var setDlg = null;
scope.optgauges = {};
scope.optgauges.min = 0;
scope.optgauges.max = 500;
function getPartConfig(diagram, id) {
var found = _.find(diagram, function(part) {
return part.baseTypeId === id;
});
return found;
}
/******************* 过滤设备列表 & 加载信号列表 **************************/
function initDevice(){
if(scope.Topology == undefined) {
scope.Topology = {};
}
var parentId = scope.diagram.parentId;
if(scope.diagram.deviceBaseTypeId == "1004" ||
(parseInt(scope.diagram.deviceBaseTypeId) >= 8888 && parseInt(scope.diagram.deviceBaseTypeId) < 9999))
parentId = "";
ConfigureMoldService.GetPartEquipments(parentId).then(function(data){
scope.deviceList = _.sortBy(data,function(item){return item.configName;});
scope.Topology.DeviceId = scope.deviceList[0].equipmentId;
baseTypeService.getGaugeSignalBaseType(scope.Topology.DeviceId).then(function(data) {
if(data.length==0)
scope.gauges = [{baseTypeId:undefined,baseTypeName:'没有数据'}];
else
scope.gauges = data;
});
});
}
/*********************************************************************/
function getPartNum(typename){
var num = 1;
var cparts = scope.diagram.parts;
if(cparts == undefined){
scope.diagram.parts = [];
return 1;
}
for(var i=0;i<cparts.length;i++){
if(cparts[i].id.indexOf(typename)==-1) continue;
var partnum=parseInt(cparts[i].id.replace(typename,''));
if(partnum>=num){
num=partnum+1;
}
}
return num;
}
element.bind('click', function() {
initDevice();
setDlg = $modal({
scope: scope,
templateUrl: 'partials/newgaugesetter.html',
show: false
});
setDlg.$promise.then(setDlg.show);
scope.save = function(){
var gauge = getPartConfig(scope.gauges, scope.optgauges.optionsGauges);
var cofg = {};
var count = getPartNum("gauge");
cofg.id = "gauge"+count;
cofg.type = "gaugepart";
cofg.left="5";
cofg.top="80";
cofg.width = "146";
cofg.height = "192";
cofg.zindex = "1";
cofg.binding = "BS:"+scope.optgauges.optionsGauges+"|DI:"+scope.Topology.DeviceId;
cofg.options = "Name:"+gauge.baseTypeName+"|Min:"+scope.optgauges.min+"|Max:"+scope.optgauges.max+"|Unit:"+gauge.remark;
scope.diagram.parts.push(cofg);
setDlg.hide();
scope.resetParts();
};
scope.changeDevice = function(id){
baseTypeService.getGaugeSignalBaseType(id).then(function(data) {
if(data.length==0)
scope.gauges = [{baseTypeId:undefined,baseTypeName:'没有数据'}];
else
scope.gauges = data;
});
};
});
}
}
}
]);
nurseDirective.directive('basegaugesetter',['$modal','baseTypeService','global','ConfigureMoldService',
function($modal,baseTypeService,global,ConfigureMoldService){
return {
restrict: 'A',
link: function(scope, element) {
var setDlg = null;
scope.basegauges = {};
function getPartConfig(diagram, id) {
var found = _.find(diagram.parts, function(part) {
return part.id === id;
});
return found;
}
function getGaugeConfig(gauges, id) {
var found = _.find(gauges, function(part) {
return part.baseTypeId === id;
});
return found;
}
/******************* 过滤设备列表 & 加载信号列表 **************************/
function initDevice(){
var parentId = scope.diagram.parentId;
if(scope.diagram.deviceBaseTypeId == "1004" ||
(parseInt(scope.diagram.deviceBaseTypeId) >= 8888 && parseInt(scope.diagram.deviceBaseTypeId) < 9999))
parentId = "";
ConfigureMoldService.GetPartEquipments(parentId).then(function(data){
scope.deviceList = _.sortBy(data,function(item){return item.configName;});
});
}
/*********************************************************************/
element.bind('click',function(){
initDevice();
setDlg = $modal({
scope:scope,
templateUrl:'partials/basegaugesetter.html',
show:false
});
setDlg.$promise.then(setDlg.show);
var partid= element.parent().parent().attr("partid");
scope.partid = partid;
var cfg = getPartConfig(scope.diagram, scope.partid);
scope.basegauges.optionsGauges = global.getpara("BS",cfg.binding);
scope.Topology.DeviceId = global.getpara("DI",cfg.binding);
scope.basegauges.min = global.getpara("Min",cfg.options);
scope.basegauges.max = global.getpara("Max",cfg.options);
scope.save = function(){
var cofg = getPartConfig(scope.diagram, scope.partid);
var gauge = getGaugeConfig(scope.gauges, scope.basegauges.optionsGauges);
cofg.binding = "BS:"+scope.basegauges.optionsGauges+"|DI:"+scope.Topology.DeviceId;
cofg.options = "Name:"+gauge.baseTypeName+"|Min:"+scope.basegauges.min+"|Max:"+scope.basegauges.max+"|Unit:"+gauge.remark;
setDlg.hide();
scope.resetParts();
};
scope.changeDevice = function(id){
baseTypeService.getGaugeSignalBaseType(id).then(function(data) {
if(data.length==0)
scope.gauges = [{baseTypeId:undefined,baseTypeName:'没有数据'}];
else
scope.gauges = data;
});
};
scope.changeDevice(scope.Topology.DeviceId);
});
}
}
}
]);
nurseDirective.directive('basepiechartsetter',['$modal','baseTypeService','global','diagramService','mdcAssetsManagerService','base64','balert','ConfigureMoldService',
function($modal,baseTypeService,global,diagramService,mdcAssetsManagerService,base64,balert,ConfigureMoldService){
return {
restrict: 'A',
link: function(scope, element, attrs) {
var setDlg = null;
scope.PieChart = {};
function getPartConfig(diagram, id) {
var found = _.find(diagram.parts, function(part) {
return part.id === id;
});
return found;
}
/******************* 过滤设备列表 & 加载信号列表 **************************/
function initDevice(){
if(scope.PieChart == undefined) {
scope.PieChart = {};
}
var parentId = scope.diagram.parentId;
if(scope.diagram.deviceBaseTypeId == "1004" ||
(parseInt(scope.diagram.deviceBaseTypeId) >= 8888 && parseInt(scope.diagram.deviceBaseTypeId) < 9999))
parentId = "";
ConfigureMoldService.GetPartEquipments(parentId).then(function(data){
scope.PieChart.Equipments = _.sortBy(data,function(item){return item.configName;});
scope.deviceList = _.sortBy(data,function(item){return item.configName;});
scope.PieChart.EquipmentId = scope.diagram.deviceId;
if(scope.PieChart.EquipmentId == undefined)
scope.PieChart.EquipmentId = scope.PieChart.Equipments[0].equipmentId;
scope.changeEquipment(scope.PieChart.EquipmentId);
});
mdcAssetsManagerService.GetMdcAssetsConfig().then(function (data) {
if(data && data.assetsDevices){
scope.mdcAssetsCabinets = data.assetsDevices;
}
});
}
/*********************************************************************/
function init(){
var partid = element.parent().parent().attr("partid");
scope.partid = partid;
var cfg = getPartConfig(scope.diagram, scope.partid);
scope.PieChart = {};
scope.PieChart.Title = global.getpara("Title",cfg.options);
scope.PieChart.DataType = global.getpara("DataType",cfg.options);
scope.PieChart.ChartType = global.getpara("ChartType",cfg.options);
scope.PieChart.LineColor = global.getpara("LineColor",cfg.options);
scope.PieChart.LineImages = global.getpara("LineImages",cfg.options);
scope.PieChart.BarColor = global.getpara("LineColor",cfg.options);
scope.PieChart.Y1Name = global.getpara("Y1Name",cfg.options);
scope.PieChart.Y1Min = global.getpara("Y1Min",cfg.options);
scope.PieChart.Y1Max = global.getpara("Y1Max",cfg.options);
scope.PieChart.Size = global.getpara("Size",cfg.options);
scope.PieChart.Background = global.getpara("Background",cfg.options);
scope.PieChart.PieColor = global.getpara("PieColor",cfg.options);
scope.PieChart.PieValueType = global.getpara("PieValueType",cfg.options);
scope.PieChart.Unit = global.getpara("Unit",cfg.options);
scope.PieChart.Meaning = global.getpara("Meaning",cfg.options);
scope.PieChart.StoreInterval = global.getpara("StoreInterval",cfg.options);
scope.PieChart.CabinetId = global.getpara("CabinetId",cfg.options);
scope.PieChart.Y1Signals = base64.decode(global.getpara("SN",cfg.options));
scope.PieChart.showHisBtn = (global.getpara("SHisBtn",cfg.options)) == "true" ? true : false;
scope.PieChart.showTotalBtn = (global.getpara("STotalBtn",cfg.options)) == "true" ? true : false;
if(cfg.binding.split("|").length > 2){
var expression = cfg.binding.split("|")[2].split("&");
scope.PieChart.Expression1 = base64.decode(expression[0].substring(expression[0].indexOf(":")+1));
scope.PieChart.Expression2 = base64.decode(expression[1].substring(expression[1].indexOf(":")+1));
}
var bindings = cfg.binding.split("&");
bindings.forEach(function(item){
var devId = global.getpara("DI",item);
baseTypeService.getGaugeSignalBaseType(devId).then(function(data) {
var arr = [];
var cfgs = undefined;
var sigs = item.split("|");
data.forEach(function(item){
for(var j = 0;j < sigs.length;j++){
if(sigs[j].indexOf("BS") == -1) continue;
var id = global.getpara("BS",sigs[j]);
if(item.baseTypeId == id)
cfgs = item;
}
});
if(cfgs != undefined || cfgs != null){
if(scope.PieChart.Y1Signals == undefined || scope.PieChart.Y1Signals == ""){
arr.push(cfgs);
scope.PieChart.Y1Signals = angular.toJson(arr);
}
// else{
// arr = angular.fromJson(scope.PieChart.Y1Signals);
// arr.push(cfgs);
// }
}
});
});
function filterDevice(data){
if(scope.diagram.deviceBaseTypeId == "1004" ||
(parseInt(scope.diagram.deviceBaseTypeId) >= 8888 && parseInt(scope.diagram.deviceBaseTypeId) < 9999)){
var list = [];
data.forEach(function(item){
if(item.parts != "" && item.parts != undefined){
item.parts.forEach(function(i){
if(i.deviceId != "" && i.deviceId != undefined)
list.push(i);
})
}
});
return list;
};
var list = [];
if(scope.diagram && scope.diagram.deviceList){
var deviceList = scope.diagram.deviceList.split("|");
deviceList.forEach(function(deviceId){
data.forEach(function(item){
if(item.id == deviceId)
list.push(item);
});
});
}
return list;
}
}
var showMultiDeviceSelectDlg = $modal({
scope:scope,
templateUrl:'partials/showMultiDeviceSelect.html',
show:false
});
//多设备多选
function initMultiDeviceSelect(){
var filterOut = function(original, toFilter) {
if(toFilter == undefined) return original;
var filtered = [];
angular.forEach(original, function(entity) {
var match = false;
for (var i = 0; i < toFilter.length; i++) {
if (toFilter[i].deviceBaseTypeId == entity.deviceBaseTypeId &&
toFilter[i].baseTypeId == entity.baseTypeId) {
match = true;
break;
}
}
if (!match) {
filtered.push(entity);
}
});
return filtered;
};
function fromJson(data){
var arr = [];
data.forEach(function(item){
arr.push(angular.fromJson(item));
});
return arr;
}
scope.refreshAvailable = function() {
scope.bind.selectedsigs = filterOut(scope.bind.selectedsigs, scope.bind.siglist);
scope.selected.available = [];
scope.selected.current = [];
};
scope.addMulti = function() {
scope.selected.available = fromJson(scope.selected.available);
if(!scope.bind.selectedsigs) scope.bind.selectedsigs = scope.selected.available;
else scope.bind.selectedsigs = scope.bind.selectedsigs.concat(scope.selected.available);
scope.bind.siglist = filterOut(scope.bind.siglist, scope.selected.available);
scope.refreshAvailable();
};
scope.removeMulti = function() {
scope.selected.current = fromJson(scope.selected.current);
scope.bind.siglist = scope.bind.siglist.concat(scope.selected.current);
scope.bind.selectedsigs = filterOut(scope.bind.selectedsigs, scope.selected.current);
scope.refreshAvailable();
};
scope.showMultiSelect = function(obj,data){
scope.selected = {};
scope.bind = {};
scope.bind.selectedsigs = undefined;
scope.obj = obj;//对象字符串
if(data != undefined && data != ""){
var data = angular.fromJson(data);
scope.bind.selectedsigs = data;
}
showMultiDeviceSelectDlg.$promise.then(showMultiDeviceSelectDlg.show);
scope.changeDevice(scope.Topology.DeviceId);
};
scope.saveMultiSelect = function(deviceId,obj){
var error = scope.languageJson.Configuration.ActiveChartControl;
if(scope.bind.selectedsigs == undefined || scope.bind.selectedsigs.length == 0){
//'信号不能为空!'
balert.show('danger', error.ErrorSignal,3000);
return;
}
if(scope.PieChart.DataType == 1 && ((scope.PieChart.ChartType == 'gauge' || scope.PieChart.ChartType == 'newGauge')
&& scope.bind.selectedsigs.length > 1)){
//'仪表盘的信号只能为一个!'
balert.show('danger', error.ErrorGauge,3000);
return;
}
if(scope.PieChart.ChartType == 'pie' && scope.bind.selectedsigs.length < 2){
//'饼图的信号不能少于2个'
balert.show('danger', error.ErrorPie,3000);
return;
}
if(scope.bind.selectedsigs.length > 0){
var str = angular.toJson(scope.bind.selectedsigs);
eval(obj+"=str");
}
showMultiDeviceSelectDlg.hide();
};
//show list
scope.changeDevice = function(id){
baseTypeService.getGaugeSignalBaseType(id).then(function(data) {
var selected = angular.fromJson(scope.bind.selectedsigs);
scope.bind = {
siglist: filterOut(data, selected),
selectedsigs: selected
};
});
};
}
function initFunction(){
initMultiDeviceSelect();
scope.dataTypeChange = function(type){
if(type == 2 || type == 3)
scope.PieChart.ChartType = 'gauge';
else if(type == 4 || type == 5 || type == 6 || type >= 8)
scope.PieChart.ChartType = 'pie';
if(type == 2){
scope.PieChart.Y1Min = 1;
scope.PieChart.Y1Max = 1.5;
}
};
scope.changeEquipment = function(equipmentId){
baseTypeService.GetSinalByEquipmentId(equipmentId).then(function(data){
scope.PieChart.Signals = data;
});
scope.PieChart.SignalId = undefined;
};
/** 其他容量占比 **/
scope.ClickSignalsLi = function(id,symbol){
if(eval("scope.PieChart."+id+" == undefined"))
eval("scope.PieChart."+id+" = ''");
var textDom = document.getElementById(id);
var addStr = symbol;
if(symbol == 'del'){
if(id == 'Expression1'){
scope.PieChart.Expression1 = "";
}else{
scope.PieChart.Expression2 = "";
}
}else if (textDom.selectionStart || textDom.selectionStart == '0') {
if(id == 'Expression1')
scope.PieChart.Expression1 = scope.PieChart.Expression1.substring(0,scope.startPos)+addStr+
scope.PieChart.Expression1.substring(scope.endPos);
else
scope.PieChart.Expression2 = scope.PieChart.Expression2.substring(0,scope.startPos)+addStr+
scope.PieChart.Expression2.substring(scope.endPos);
textDom.focus();
textDom.selectionStart = scope.startPos + addStr.length;
textDom.selectionEnd = scope.startPos + addStr.length;
textDom.scrollTop = scope.scrollTop;
}else {
eval("scope.PieChart."+id+" += "+addStr+"");
textDom.focus();
}
};
scope.getCursortPosition = function(id){
scope.nowExprId = id;
var textDom = document.getElementById(id);
if (textDom.selectionStart || textDom.selectionStart == '0') {
scope.startPos = textDom.selectionStart;
scope.endPos = textDom.selectionEnd;
scope.scrollTop = textDom.scrollTop;
}
};
scope.changeSignal = function(){
var textDom = undefined;
if(scope.nowExprId == undefined){
textDom = document.getElementById("Expression1");
if(scope.PieChart.Expression1 == undefined)
scope.PieChart.Expression1 = "";
scope.nowExprId = "Expression1";
}else{
textDom = document.getElementById(scope.nowExprId);
if(eval("scope.PieChart."+scope.nowExprId+" == undefined"))
eval("scope.PieChart."+scope.nowExprId+" = ''");
}
var addStr = "["+scope.PieChart.EquipmentId+"-"+scope.PieChart.SignalId+"]";
if (textDom.selectionStart || textDom.selectionStart == '0') {
if(scope.nowExprId == 'Expression1')
scope.PieChart.Expression1 = scope.PieChart.Expression1.substring(0,scope.startPos)+addStr+
scope.PieChart.Expression1.substring(scope.endPos);
else
scope.PieChart.Expression2 = scope.PieChart.Expression2.substring(0,scope.startPos)+addStr+
scope.PieChart.Expression2.substring(scope.endPos);
textDom.focus();
textDom.selectionStart = scope.startPos + addStr.length;
textDom.selectionEnd = scope.startPos + addStr.length;
textDom.scrollTop = scope.scrollTop;
}else {
eval("scope.PieChart."+scope.nowExprId+" += "+addStr+"");
textDom.focus();
}
};
var showColorSelectDlg = $modal({
scope:scope,
templateUrl:'partials/showColorSelect.html',
show:false
});
scope.showColorSelect = function(data){
scope.ColorSelect = angular.fromJson(data);
showColorSelectDlg.$promise.then(showColorSelectDlg.show);
scope.saveColorSelect = function(){
var is = false;
for(var i = 0 ;i < scope.ColorSelect.length;i++){
if(scope.ColorSelect[i][0] == undefined || scope.ColorSelect[i][0] == "" ||
scope.ColorSelect[i][1] == undefined || scope.ColorSelect[i][1] == "")
is = true;
}
if(is){
//'不能为空!'
balert.show('danger', scope.languageJson.Configuration.ActiveChartControl.ErrorEmpty,3000);
return;
}
scope.PieChart.LineColor = angular.toJson(scope.ColorSelect);
showColorSelectDlg.hide();
};
};
//#region 刻度配色
var showColorSelectDlg2 = $modal({
scope:scope,
templateUrl:'partials/showColorSelect2.html',
show:false
});
scope.showColorSelect2 = function(data){
scope.ColorSelect = angular.fromJson(data);
showColorSelectDlg2.$promise.then(showColorSelectDlg2.show);
scope.saveColorSelect2 = function(){
var is = false;
for(var i = 0 ;i < scope.ColorSelect.length;i++){
if(scope.ColorSelect[i][0] == undefined || scope.ColorSelect[i][0] == "" ||
scope.ColorSelect[i][1] == undefined || scope.ColorSelect[i][1] == "")
is = true;
}
if(is){
//'不能为空!'
balert.show('danger', scope.languageJson.Configuration.ActiveChartControl.ErrorEmpty,3000);
return;
}
scope.PieChart.LineColor = angular.toJson(scope.ColorSelect);
showColorSelectDlg2.hide();
};
scope.addColorClick2 = function(){
scope.ColorSelect.push([1,"#fff"]);
};
scope.delColorClick2 = function(index){
scope.ColorSelect.splice($index,1);
};
};
//#endregion
scope.showColpickColor = function(color,index){
scope.mod = "scope.ColorSelect["+index+"][1]";
scope.color = color.replace(/#/g,'');
$('#picker').colpick({
flat:true,
color:scope.color,
onSubmit:function(hsb,hex,rgb,el){
eval(scope.mod+" = \"#"+hex+"\"");
}
});
};
var showBarColorSelectDlg = $modal({
scope:scope,
templateUrl:'partials/showMoreColorBox.html',
show:false
});
//条形柱 柱子颜色
scope.showBarColorSelect = function(data){
scope.hideRange = true;//隐藏
//颜色集合
var colors = angular.fromJson(data);
scope.ColorSelect = [];
if(colors){
colors.forEach(function(col){
var c = [col,col];
scope.ColorSelect.push(c);
});
}
showBarColorSelectDlg.$promise.then(showBarColorSelectDlg.show);
//重写保存
scope.saveColorSelect = function(){
if(scope.ColorSelect){
var colors = [];
scope.ColorSelect.forEach(function(item){
colors.push(item[1]);
});
scope.PieChart.BarColor = angular.toJson(colors);
}else
scope.PieChart.BarColor = "";
showBarColorSelectDlg.hide();
};
};
//新增
scope.addColorClick = function(){
scope.ColorSelect.push(["#ffffff","#ffffff"]);
};
//删除
scope.delColorClick = function($index){
scope.ColorSelect.splice($index,1);
};
scope.addMeaningClick = function(value,meaning,result){
if(value == undefined || value == "") return result;
if(meaning == undefined || meaning == "") return result;
if(result == undefined || result == "")
result = value+"."+meaning;
else
result += "/"+value+"."+meaning;
return result;
};
//region 修改信号名称
var modifyDlg = $modal({
scope: scope,
templateUrl: 'partials/modifyHisSignalName.html',
show: false
});
// 弹出修改信号名称
scope.moidfySignalNameClk = function(selects){
// {"deviceBaseTypeId":"[设备编号]","deviceBaseName":"[设备名称]","baseTypeId":"[信号基类]","baseTypeName":"[信号名称]","remark":"[单位]"}
scope.modifySelects = selects;
modifyDlg.$promise.then(modifyDlg.show);
};
// 修改信号名称
scope.modify = function(selects){
scope.bind.selectedsigs = selects;
modifyDlg.hide();
};
// 将对象转为编译字符串
scope.jsonToString = function(selects){
try{
selects = angular.fromJson(selects);
if(selects){
return "|SN:"+base64.encode(angular.toJson(selects));
}
}catch(e){}
return "|SN:";
}
//endregion
}
function parseBinding(data){
var result = '';
if(data.DataType == 1 || data.DataType == 7){
if(data.ChartType == 'line' || data.ChartType == 'bar')//折线图 || 柱形图
result = data.ChartType+'|'+data.Size+'&';
else if(data.DataType == 7)
result = data.ChartType+'|AvgMaxMin&';
var y1Signals = angular.fromJson(data.Y1Signals);
y1Signals.forEach(function(item){
result += 'BS:'+item.baseTypeId+'|DI:'+item.deviceBaseTypeId+"&";
});
}else{//2:PUE 3:MDC功率 4:MDC空间总占比 5:IT负载 6:制冷容量
result = "piechart|"+data.DataType;
if(data.DataType == 6 || data.DataType == 2){
if(scope.PieChart.Expression2)
result += "|expr1:"+base64.encode(scope.PieChart.Expression1)+"&expr2:"+
base64.encode(scope.PieChart.Expression2);
else
result += "|expr1:"+base64.encode(scope.PieChart.Expression1)+"&expr2:";
}
}
return result;
}
function showTitle(){
setTimeout(function(){
$(".powerFun").attr("data-original-title","<h5>"+scope.languageJson.Configuration.ActiveChartControl.Function.PowerFun+"</h5>");
$(".absVal").attr("data-original-title","<h5>"+scope.languageJson.Configuration.ActiveChartControl.Function.AbsVal+"</h5>");
$(".maxVal").attr("data-original-title","<h5>"+scope.languageJson.Configuration.ActiveChartControl.Function.MaxVal+"</h5>");
$(".minVal").attr("data-original-title","<h5>"+scope.languageJson.Configuration.ActiveChartControl.Function.MinVal+"</h5>");
},500);
};
function parseLineColor(ChartType){
if(ChartType == "gauge" || ChartType == "scale")//仪表盘 / 刻度
return scope.PieChart.LineColor;
else //矩形图
return scope.PieChart.BarColor;
}
element.bind('click', function() {
initFunction();
initDevice();
init();
setDlg = $modal({
scope: scope,
templateUrl: 'partials/basepiechartsetter.html',
show: false
});
setDlg.$promise.then(setDlg.show);
showTitle();
// 存储PUE的表达式
function savePUECofnig(id,expression,expression2,time){
id = scope.diagram.deviceId+id;// 拼接设备编号+序列号
var expr = expression+" / 1";
if(expression2 != undefined && expression2 != ""){
expr = "("+expression+") / ("+expression2+")";
}
diagramService.SavePueConfig(id+"|"+expr+"|"+time).then(function(data){});
}
scope.save = function() {
var error = scope.languageJson.Configuration.ActiveChartControl;
if(scope.PieChart.SingleBiaxial == 1 && scope.PieChart.DataType == 1 &&
(scope.PieChart.Y1Signals == undefined || scope.PieChart.Y1Signals == '')){
//'Y1轴信号不能为空'
balert.show('danger', error.ErrorY1,3000);
return;
}
if(scope.PieChart.SingleBiaxial == 2 && scope.PieChart.DataType == 1 &&
(scope.PieChart.Y2Signals == undefined || scope.PieChart.Y2Signals == '')){
//'Y2轴信号不能为空'
balert.show('danger', error.ErrorY2,3000);
return;
}
if(scope.PieChart.DataType == 6 && (scope.PieChart.ChartType == "pie" || scope.PieChart.ChartType == "gauge")
&& (scope.PieChart.Expression1 == undefined || scope.PieChart.Expression1 == "")){
//'当前值表达式不能为空!'
balert.show('danger', error.ErrorCurrentVal,3000);
return;
}
if(scope.PieChart.DataType == 2 && (scope.PieChart.Expression1 == undefined || scope.PieChart.Expression1 == "")){
//'当前值表达式不能为空!'
balert.show('danger', error.ErrorCurrentVal,3000);
return;
}
if(scope.PieChart.DataType == 6 && scope.PieChart.ChartType == "pie" &&
(scope.PieChart.Expression2 == undefined || scope.PieChart.Expression2 == "")){
//'总值表达式不能为空!'
balert.show('danger', error.ErrorTotalVal,3000);
return;
}
var cfg = getPartConfig(scope.diagram, scope.partid);
cfg.binding = parseBinding(scope.PieChart);
cfg.options = "Title:"+scope.PieChart.Title+"|ChartType:"+scope.PieChart.ChartType
+"|DataType:"+scope.PieChart.DataType+"|LineColor:"+parseLineColor(scope.PieChart.ChartType)
+"|LineImages:"+scope.PieChart.LineImages
+"|Y1Name:"+scope.PieChart.Y1Name+"|Y1Min:"+scope.PieChart.Y1Min+"|Y1Max:"+scope.PieChart.Y1Max
+"|Size:"+scope.PieChart.Size+"|Background:"+scope.PieChart.Background
+"|PieColor:"+scope.PieChart.PieColor+"|PieValueType:"+scope.PieChart.PieValueType
+"|Unit:"+scope.PieChart.Unit+"|Meaning:"+scope.PieChart.Meaning+"|StoreInterval:"+scope.PieChart.StoreInterval
+"|CabinetId:"+scope.PieChart.CabinetId+scope.jsonToString(scope.PieChart.Y1Signals)+showBtn();
scope.resetParts();
setDlg.hide();
// DataType == 2 || 6 实时PUE|表达式,将表达式存库
if(scope.PieChart.DataType == 2 || scope.PieChart.DataType == 6){
savePUECofnig(cfg.id,scope.PieChart.Expression1,scope.PieChart.Expression2,scope.PieChart.StoreInterval);
}
};
function showBtn(){
try {
return "|SHisBtn:"+scope.PieChart.showHisBtn+"|STotalBtn:"+scope.PieChart.showTotalBtn;
} catch (error) {
return "|SHisBtn:|STotalBtn:";
}
};
});
}
};
}
]);
nurseDirective.directive("newtopologysetter",['$modal','balert','baseTypeService','uploadService','ImageManageService','ConfigureMoldService',
function($modal,balert,baseTypeService,uploadService,ImageManageService,ConfigureMoldService){
return {
restrict : 'A',
link : function(scope, element){
var setDlg,showImgFileDlg;
scope.Topology = {};
function init(){
scope.Topology = {
title : "",
fontSize : "15",
upImgName : "img/diagram/up.png",
openImgName : "img/diagram/open.png",
rotate : "0"
};
var parentId = scope.diagram.parentId;
if(scope.diagram.deviceBaseTypeId == "1004" ||
(parseInt(scope.diagram.deviceBaseTypeId) >= 8888 && parseInt(scope.diagram.deviceBaseTypeId) < 9999))
parentId = "";
ConfigureMoldService.GetPartEquipments(parentId).then(function(data){
scope.deviceList = _.sortBy(data,function(item){return item.configName;});
scope.Topology.DeviceId = scope.diagram.deviceId;
if(scope.Topology.DeviceId == undefined)
scope.Topology.DeviceId = scope.deviceList[0].equipmentId;
baseTypeService.getSignalSwitchByDeviceId(scope.Topology.DeviceId).then(function(datas){
scope.Topology.events = datas;
});
});
scope.clickSignal = function(deviceId,signalId){
baseTypeService.GetSignalMeaningsByDIdSId(deviceId,signalId).then(function(data){
scope.Topology.SignalMeanings = data;
scope.Topology.upValue = data.length >= 1 ? data[0].StateValue : "";
scope.Topology.openValue = data.length >= 2 ? data[1].StateValue : "";
});
};
scope.changeUpOpenValue = function(old,now){
if(scope.Topology.upValue == scope.Topology.openValue){
for(var i = 0;i < scope.Topology.SignalMeanings.length;i++){
if(eval("scope.Topology.SignalMeanings["+i+"].StateValue != scope.Topology."+old)){
eval("scope.Topology."+now+" = scope.Topology.SignalMeanings["+i+"].StateValue");
break;
}
}
if(scope.Topology.upValue == scope.Topology.openValue){
eval("scope.Topology."+now+" = ''");
}
}
};
scope.imgFilePath = undefined;
scope.showImgFile = function(varName){
scope.varName = varName;
scope.imgFiles = {
catalog : "img/diagram",
imageFile : undefined
};
showImgFileDlg = $modal({
scope: scope,
templateUrl: 'partials/showImgFile.html',
show: false
});
showImgFileDlg.$promise.then(showImgFileDlg.show);
scope.changeCatalog(scope.imgFiles.catalog);
};
scope.changeCatalog = function(catalog){
ImageManageService.LoadImagesByPath(catalog).then(function(data){
scope.ImageFiles = data;
});
};
scope.clickImage = function(imageFile,$event){
scope.imgFiles.imageFile = imageFile;
$($event.currentTarget).parent().find('div').removeClass("select-image");
$($event.currentTarget).addClass("select-image");
};
scope.selectImageFile = function(){
if(scope.imgFiles == undefined || scope.imgFiles.imageFile == undefined){
//'请选择图片。'
balert.show('danger', scope.languageJson.Configuration.TopologyControl.ErrorImage,3000);
return;
}
eval("scope."+scope.varName+" = scope.imgFiles.imageFile");
showImgFileDlg.hide();
};
}
function getPartNum(typename){
var num=1;
var cparts=scope.diagram.parts;
if(cparts == undefined){
scope.diagram.parts = [];
return 1;
}
for(var i=0;i<cparts.length;i++)
{
if(cparts[i].id.indexOf(typename)==-1)continue;
var partnum=parseInt(cparts[i].id.replace(typename,''));
if(partnum>=num){
num=partnum+1;
}
}
return num;
}
element.bind('click',function(){
init();
setDlg = $modal({
scope: scope,
templateUrl: 'partials/newtopologysetter.html',
show: false
});
setDlg.$promise.then(setDlg.show);
scope.file = undefined;
scope.file2 = undefined;
scope.save = function(){
if(scope.Topology.fontSize == undefined || scope.Topology.fontSize == "")
scope.Topology.fontSize = "15";
if(scope.Topology.rotate == undefined || scope.Topology.rotate == "")
scope.Topology.rotate = "0";
if(scope.Topology.SignalId == undefined || scope.Topology.SignalId == ""){
//'事件不能为空!'
balert.show('danger', scope.languageJson.Configuration.TopologyControl.ErrorSignal,3000);
return;
}
if(scope.Topology.upValue == "" && scope.Topology.openValue == ""){
//'断开值为非闭合时,闭合值不能为非断开!'
balert.show('danger', scope.languageJson.Configuration.TopologyControl.ErrorControl,3000);
return;
}
var upFile = scope.file;
var openFile = scope.file2;
if((upFile != undefined && upFile.size>512000) || (openFile != undefined && openFile.size>512000)){
//'新增图片不能大于500K'
balert.show('danger', scope.languageJson.Configuration.TopologyControl.ImageSizePrompt,3000);
return;
}
var cofg ={};
cofg.id = "topology"+getPartNum("topology");
cofg.type = "topologyspart";
cofg.left = "5";
cofg.top = "80";
cofg.width = "80";
cofg.height = "120";
cofg.binding = "SI:"+scope.Topology.SignalId+"|DI:"+scope.Topology.DeviceId;
if(upFile == undefined && openFile == undefined){
pushCofg(cofg);
}else if(upFile != undefined && openFile != undefined){
uploadService.uploadFile(upFile).then(function(data) {
scope.Topology.upImgName = data;
uploadService.uploadFile(openFile).then(function(data) {
scope.Topology.openImgName = data;
pushCofg(cofg);
});
});
}else if(upFile != undefined && openFile == undefined){
uploadService.uploadFile(upFile).then(function(data) {
scope.Topology.upImgName = data;
pushCofg(cofg);
});
}else{
uploadService.uploadFile(openFile).then(function(data) {
scope.Topology.openImgName = data;
pushCofg(cofg);
});
}
};
function pushCofg(cofg){
cofg.options = "Name:"+scope.Topology.title+"|fontSize:"+scope.Topology.fontSize+"|imgUpFile:"+
scope.Topology.upImgName+"|upValue:"+scope.Topology.upValue+"|imgOpenFile:"+scope.Topology.openImgName+
"|openValue:"+scope.Topology.openValue+"|rotate:"+scope.Topology.rotate;
scope.diagram.parts.push(cofg);
scope.resetParts();
setDlg.hide();
}
scope.changeDevice = function(deviceId){
baseTypeService.getSignalSwitchByDeviceId(deviceId).then(function(data){
scope.Topology.events = data;
});
};
});
}
}
}
]);
nurseDirective.directive("topologyspart",['diagramService','global',
function(diagramService,global){
return {
restrict: "AE",
replace: true,
templateUrl: "partials/topologyspart.html",
link : function(scope, elem, attrs){
var cfg = diagramService.initPart(scope, elem, attrs);
if (cfg === undefined) return;
var currpartid=scope.partid = attrs.partid;
var name = global.getpara("Name",cfg.options);
var fontSize = global.getpara("fontSize",cfg.options);
var imgUpFile = global.getpara("imgUpFile",cfg.options);
var upValue = global.getpara("upValue",cfg.options);
var imgOpenFile = global.getpara("imgOpenFile",cfg.options);
var openValue = global.getpara("openValue",cfg.options);
var rotate = global.getpara("rotate",cfg.options);
scope.$watch('binddata', function(newValue, oldValue, scope) {
var value = _.findWhere(scope.binddata, {partId: currpartid});
if(value == undefined || value.floatValue == undefined) return;
//断开
var img = imgOpenFile;
//闭合
if(upValue == ""){
if(parseFloat(value.floatValue) != parseFloat(openValue))
img = imgUpFile;
}else{
if(parseFloat(value.floatValue) == parseFloat(upValue))
img = imgUpFile;
}
//图片大小
var height = "calc(100% - 36px)";
var witch = "100%";
if(parseInt(rotate) == 90 || parseInt(rotate) == 270){
height = "100%";
witch = "calc(100% - 25px)";
}
//样式
elem.find('.topology-title').css({
"fontSize": fontSize+"px"
}).text(name);
elem.find('.topology-img').css({
"background-image": "url('" +img + "')",
"transform": "rotate("+rotate+"deg)",
"height":height,
"width":witch,
"-ms-transform": "rotate("+rotate+"deg)", /* IE 9 */
"-moz-transform": "rotate("+rotate+"deg)", /* Firefox */
"-webkit-transform": "rotate("+rotate+"deg)", /* Safari and Chrome */
"-o-transform": "rotate("+rotate+"deg)" /* Opera */
});
});
scope.$watch('diagram.edit', function(newValue, oldValue, scope) {
diagramService.updateEditStatus(elem, newValue);
});
}
}
}
]);
nurseDirective.directive("topologysetter",['$modal','baseTypeService','global','uploadService','balert','ImageManageService','ConfigureMoldService',
function($modal,baseTypeService,global,uploadService,balert,ImageManageService,ConfigureMoldService){
return {
restrict : "A",
link : function(scope, element){
var setDlg = null,showImgFileDlg = null;
function getPartConfig(diagram, id) {
var found = _.find(diagram.parts, function(part) {
return part.id === id;
});
return found;
}
function init(){
if(scope.Topology == undefined){
scope.Topology = {};
}
var partid = element.parent().parent().attr("partid");
scope.partid = partid;
var cfg = getPartConfig(scope.diagram, scope.partid);
var evs = cfg.binding.split("|");
scope.Topology.SignalId = evs[0].split(":")[1];
scope.Topology.DeviceId = evs[1].split(":")[1];
baseTypeService.GetSignalMeaningsByDIdSId(scope.Topology.DeviceId,scope.Topology.SignalId).then(function(data){
scope.Topology.SignalMeanings = data;
});
scope.Topology.title = global.getpara("Name",cfg.options);
scope.Topology.fontSize = global.getpara("fontSize",cfg.options);
scope.Topology.upImgName = global.getpara("imgUpFile",cfg.options);
scope.Topology.upValue = global.getpara("upValue",cfg.options);
scope.Topology.openImgName = global.getpara("imgOpenFile",cfg.options);
scope.Topology.openValue = global.getpara("openValue",cfg.options);
scope.Topology.rotate = global.getpara("rotate",cfg.options);
var parentId = scope.diagram.parentId;
if(scope.diagram.deviceBaseTypeId == "1004" ||
(parseInt(scope.diagram.deviceBaseTypeId) >= 8888 && parseInt(scope.diagram.deviceBaseTypeId) < 9999))
parentId = "";
ConfigureMoldService.GetPartEquipments(parentId).then(function(data){
scope.deviceList = _.sortBy(data,function(item){return item.configName;});
baseTypeService.getSignalSwitchByDeviceId(scope.Topology.DeviceId).then(function(data){
scope.Topology.events = data;
});
});
scope.clickSignal = function(deviceId,signalId){
baseTypeService.GetSignalMeaningsByDIdSId(deviceId,signalId).then(function(data){
scope.Topology.SignalMeanings = data;
scope.Topology.upValue = data.length >= 1 ? data[0].StateValue : "";
scope.Topology.openValue = data.length >= 2 ? data[1].StateValue : "";
});
};
scope.changeUpOpenValue = function(old,now){
if(scope.Topology.upValue == scope.Topology.openValue){
for(var i = 0;i < scope.Topology.SignalMeanings.length;i++){
if(eval("scope.Topology.SignalMeanings["+i+"].StateValue != scope.Topology."+old)){
eval("scope.Topology."+now+" = scope.Topology.SignalMeanings["+i+"].StateValue");
break;
}
}
if(scope.Topology.upValue == scope.Topology.openValue){
eval("scope.Topology."+now+" = ''");
}
}
};
scope.imgFilePath = undefined;
scope.showImgFile = function(varName){
scope.varName = varName;
scope.imgFiles = {
catalog : "img/diagram",
imageFile : undefined
};
showImgFileDlg = $modal({
scope: scope,
templateUrl: 'partials/showImgFile.html',
show: false
});
showImgFileDlg.$promise.then(showImgFileDlg.show);
scope.changeCatalog(scope.imgFiles.catalog);
};
scope.changeCatalog = function(catalog){
ImageManageService.LoadImagesByPath(catalog).then(function(data){
scope.ImageFiles = data;
});
};
scope.clickImage = function(imageFile,$event){
scope.imgFiles.imageFile = imageFile;
$($event.currentTarget).parent().find('div').removeClass("select-image");
$($event.currentTarget).addClass("select-image");
};
scope.selectImageFile = function(){
if(scope.imgFiles == undefined || scope.imgFiles.imageFile == undefined){
//'请选择图片。'
balert.show('danger', scope.languageJson.Configuration.TopologyControl.ErrorImage,3000);
return;
}
eval("scope."+scope.varName+" = scope.imgFiles.imageFile");
showImgFileDlg.hide();
};
}
element.bind('click',function(){
init();
setDlg = $modal({
scope:scope,
templateUrl:'partials/topologysetter.html',
show:false
});
setDlg.$promise.then(setDlg.show);
scope.file = undefined;
scope.file2 = undefined;
scope.save = function(){
if(scope.Topology.fontSize == undefined || scope.Topology.fontSize == "")
scope.Topology.fontSize = "15";
if(scope.Topology.rotate == undefined || scope.Topology.rotate == "")
scope.Topology.rotate = "0";
if(scope.Topology.SignalId == undefined || scope.Topology.SignalId == ""){
//'事件不能为空!'
balert.show('danger', scope.languageJson.Configuration.TopologyControl.ErrorSignal,3000);
return;
}
if(scope.Topology.upValue == "" && scope.Topology.openValue == ""){
//'断开值为非闭合时,闭合值不能为非断开!'
balert.show('danger', scope.languageJson.Configuration.TopologyControl.ErrorControl,3000);
return;
}
var upFile = scope.file;
var openFile = scope.file2;
if((upFile != undefined && upFile.size>512000) || (openFile != undefined && openFile.size>512000)){
//'新增图片不能大于500K'
balert.show('danger', scope.languageJson.Configuration.TopologyControl.ImageSizePrompt,3000);
return;
}
var cofg = getPartConfig(scope.diagram, scope.partid);
cofg.binding = "SI:"+scope.Topology.SignalId+"|DI:"+scope.Topology.DeviceId;
if(upFile == undefined && openFile == undefined){
pushCofg(cofg);
}else if(upFile != undefined && openFile != undefined){
uploadService.uploadFile(upFile).then(function(data) {
scope.Topology.upImgName = data;
uploadService.uploadFile(openFile).then(function(data) {
scope.Topology.openImgName = data;
pushCofg(cofg);
});
});
}else if(upFile != undefined && openFile == undefined){
uploadService.uploadFile(upFile).then(function(data) {
scope.Topology.upImgName = data;
pushCofg(cofg);
});
}else{
uploadService.uploadFile(openFile).then(function(data) {
scope.Topology.openImgName = data;
pushCofg(cofg);
});
}
};
function pushCofg(cofg){
cofg.options = "Name:"+scope.Topology.title+"|fontSize:"+scope.Topology.fontSize+"|imgUpFile:"+
scope.Topology.upImgName+"|upValue:"+scope.Topology.upValue+"|imgOpenFile:"+scope.Topology.openImgName+
"|openValue:"+scope.Topology.openValue+"|rotate:"+scope.Topology.rotate;
scope.resetParts();
setDlg.hide();
}
scope.changeDevice = function(deviceId){
baseTypeService.getSignalSwitchByDeviceId(deviceId).then(function(data){
scope.Topology.events = data;
});
};
});
}
}
}
]);
nurseDirective.directive("newhspiechartsetter",['$modal','baseTypeService','balert','ConfigureMoldService','base64',
function($modal,baseTypeService,balert,ConfigureMoldService,base64){
return {
restrict : "A",
link : function(scope, element){
var setDlg = null;
function init(){
scope.hrPieChart = {
GroupTitle : '',
ChartType : 'line',
DataType : '1',
Background : "configure_bg",
SingleBiaxial : '1',
HistoryDataType : "avg",
Y1Name : '',
Y1Min : '0',
Y1Max : 'auto',
Y2Name : '',
Y2Min : '0',
Y2Max : 'auto',
Days : '7'
};
var style = localStorage.getItem("systemStyle");
if(style == "White")
scope.hrPieChart.Background = "white_bg";
scope.backgroundMap = "Bule";
}
/******************* 过滤设备列表 & 加载信号列表 **************************/
function initDevice(){
if(scope.Topology == undefined){
scope.Topology = {};
}
var parentId = scope.diagram.parentId;
if(scope.diagram.deviceBaseTypeId == "1004" ||
(parseInt(scope.diagram.deviceBaseTypeId) >= 8888 && parseInt(scope.diagram.deviceBaseTypeId) < 9999))
parentId = "";
ConfigureMoldService.GetPartEquipments(parentId).then(function(data){
scope.deviceList = _.sortBy(data,function(item){return item.configName;});
scope.Topology.DeviceId = scope.diagram.deviceId;
if(scope.Topology.DeviceId == undefined)
scope.Topology.DeviceId = scope.deviceList[0].equipmentId;
baseTypeService.getGaugeSignalBaseType(scope.Topology.DeviceId).then(function(data) {
var list = data;
scope.bind = {
siglist: list,
selectedsigs: undefined
};
});
});
}
/*********************************************************************/
function initFunction(){
scope.bind = {};
scope.selected = {};
var showMultiSelectDlg = $modal({
scope:scope,
templateUrl:'partials/showMultiDeviceSelect.html',
show:false
});
var filterOut = function(original, toFilter) {
if(toFilter == undefined) return original;
var filtered = [];
angular.forEach(original, function(entity) {
var match = false;
for (var i = 0; i < toFilter.length; i++) {
if (toFilter[i].deviceBaseTypeId == entity.deviceBaseTypeId &&
toFilter[i].baseTypeId == entity.baseTypeId) {
match = true;
break;
}
}
if (!match) {
filtered.push(entity);
}
});
return filtered;
};
function fromJson(data){
var arr = [];
data.forEach(function(item){
arr.push(angular.fromJson(item));
});
return arr;
}
scope.refreshAvailable = function() {
scope.bind.selectedsigs = filterOut(scope.bind.selectedsigs, scope.bind.siglist);
scope.selected.available = [];
scope.selected.current = [];
};
scope.addMulti = function() {
scope.selected.available = fromJson(scope.selected.available);
if(!scope.bind.selectedsigs) scope.bind.selectedsigs = scope.selected.available;
else scope.bind.selectedsigs = scope.bind.selectedsigs.concat(scope.selected.available);
scope.bind.siglist = filterOut(scope.bind.siglist, scope.selected.available);
scope.refreshAvailable();
};
scope.removeMulti = function() {
scope.selected.current = fromJson(scope.selected.current);
scope.bind.siglist = scope.bind.siglist.concat(scope.selected.current);
scope.bind.selectedsigs = filterOut(scope.bind.selectedsigs, scope.selected.current);
scope.refreshAvailable();
};
scope.showMultiSelect = function(obj,data){
scope.bind.selectedsigs = undefined;
scope.obj = obj;//对象字符串
if(data != undefined && data != ""){
var data = angular.fromJson(data);
scope.Topology.DeviceId = data[0].deviceBaseTypeId;
scope.bind.selectedsigs = data;
}
scope.changeDevice(scope.Topology.DeviceId);
showMultiSelectDlg.$promise.then(showMultiSelectDlg.show);
};
scope.saveMultiSelect = function(deviceId,obj){
if(scope.bind.selectedsigs == undefined || scope.bind.selectedsigs.length == 0){
balert.show('danger', '信号不能为空!',3000);
return;
}
if(scope.hrPieChart.SingleBiaxial == 2 && scope.bind.selectedsigs.length > 1){
balert.show('danger', '双曲线不能选择多个信号!',3000);
return;
}
if(scope.bind.selectedsigs.length > 0){
var str = angular.toJson(scope.bind.selectedsigs);
eval(obj+"=str");
}
showMultiSelectDlg.hide();
};
scope.changeDevice = function(id){
baseTypeService.getGaugeSignalBaseType(id).then(function(data) {
scope.bind.siglist = filterOut(data, scope.bind.selectedsigs);
});
};
//region 修改信号名称
var modifyDlg = $modal({
scope: scope,
templateUrl: 'partials/modifyHisSignalName.html',
show: false
});
// 弹出修改信号名称
scope.moidfySignalNameClk = function(selects){
// {"deviceBaseTypeId":"[设备编号]","deviceBaseName":"[设备名称]","baseTypeId":"[信号基类]","baseTypeName":"[信号名称]","remark":"[单位]"}
scope.modifySelects = selects;
modifyDlg.$promise.then(modifyDlg.show);
};
// 修改信号名称
scope.modify = function(selects){
scope.bind.selectedsigs = selects;
modifyDlg.hide();
};
// 将对象转为编译字符串
scope.jsonToString = function(selects,selects2){
try{
selects = angular.fromJson(selects);
selects2 = angular.fromJson(selects2);
if(selects){
selects2 = selects2 == undefined ? [] : selects2;
return "|SN:"+base64.encode(angular.toJson(selects))+"|SN2:"+base64.encode(angular.toJson(selects2));
}
}catch(e){}
return "|SN:|SN2:";
}
//endregion
}
function getPartNum(typename){
var num=1;
var cparts=scope.diagram.parts;
if(cparts == undefined){
scope.diagram.parts = [];
return 1;
}
for(var i=0;i<cparts.length;i++)
{
if(cparts[i].id.indexOf(typename)==-1)continue;
var partnum=parseInt(cparts[i].id.replace(typename,''));
if(partnum>=num){
num=partnum+1;
}
}
return num;
}
function parseBinding(data){
var result = data.DataType+'|'+data.Days+'|'+data.HistoryDataType;
if(data.DataType == 1){
result += '&';
var y1Signals = angular.fromJson(data.Y1Signals);
y1Signals.forEach(function(item){
result += 'BS:'+item.baseTypeId+'|DI:'+item.deviceBaseTypeId+"&";
});
}
if(data.DataType == 1 && data.SingleBiaxial == 2){
var y2Signals = angular.fromJson(data.Y2Signals);
y2Signals.forEach(function(item){
result += 'BS:'+item.baseTypeId+'|DI:'+item.deviceBaseTypeId;
});
}
return result;
}
element.bind('click',function(){
initFunction();
init();
initDevice();
setDlg = $modal({
scope:scope,
templateUrl:'partials/newhspiechartsetter.html',
show:false
});
setDlg.$promise.then(setDlg.show);
scope.save = function(){
if(scope.hrPieChart.Days == undefined || scope.hrPieChart.Days == '' || isNaN(scope.hrPieChart.Days)){
balert.show('danger', '周期为数值并不能为空!',3000);
return;
}
if(scope.hrPieChart.SingleBiaxial == 1 && scope.hrPieChart.DataType == 1 &&
(scope.hrPieChart.Y1Signals == undefined || scope.hrPieChart.Y1Signals == '')){
balert.show('danger', 'Y1轴信号不能为空',3000);
return;
}
if(scope.hrPieChart.SingleBiaxial == 2 && scope.hrPieChart.DataType == 1 &&
(scope.hrPieChart.Y2Signals == undefined || scope.hrPieChart.Y2Signals == '')){
balert.show('danger', 'Y2轴信号不能为空',3000);
return;
}
var cofg ={};
cofg.id = "hspiechart"+getPartNum("hspiechart");
cofg.type = "hspiechartspart";
cofg.left = "5";
cofg.top = "80";
cofg.width = "400";
cofg.height = "300";
cofg.binding = parseBinding(scope.hrPieChart);
cofg.options = "Title:"+scope.hrPieChart.GroupTitle+"|ChartType:"+scope.hrPieChart.ChartType+"|DataType:"
+scope.hrPieChart.DataType+"|SingleBiaxial:"+scope.hrPieChart.SingleBiaxial+"|Y1Name:"
+scope.hrPieChart.Y1Name+"|Y1Min:"+scope.hrPieChart.Y1Min+"|Y1Max:"+scope.hrPieChart.Y1Max
+"|Y2Name:"+scope.hrPieChart.Y2Name+"|Y2Min:"+scope.hrPieChart.Y2Min+"|Y2Max:"+scope.hrPieChart.Y2Max
+"|Background:"+scope.hrPieChart.Background+scope.jsonToString(scope.hrPieChart.Y1Signals,scope.hrPieChart.Y2Signals);
scope.diagram.parts.push(cofg);
scope.resetParts();
setDlg.hide();
};
});
}
}
}
]);
nurseDirective.directive("hspiechartspart",['diagramService','global','$http','Exporter','base64',
function(diagramService,global,$http,Exporter,base64){
return{
restrict: "AE",
replace: true,
templateUrl: "partials/hspiechartspart.html",
link : function(scope, elem, attrs){
var cfg = diagramService.initPart(scope, elem, attrs);
if (cfg === undefined) return;
var chartobj = elem.find('.pieChart')[0];
var piechart = echarts.init(chartobj);
var currpartid=scope.partid = attrs.partid;
var ChartCfg = {};
ChartCfg.Title = global.getpara("Title",cfg.options);
ChartCfg.ChartType = global.getpara("ChartType",cfg.options);
ChartCfg.DataType = global.getpara("DataType",cfg.options);
ChartCfg.Background = global.getpara("Background",cfg.options);
ChartCfg.SingleBiaxial = global.getpara("SingleBiaxial",cfg.options);
ChartCfg.Y1Name = global.getpara("Y1Name",cfg.options);
ChartCfg.Y1Min = global.getpara("Y1Min",cfg.options);
ChartCfg.Y1Max = global.getpara("Y1Max",cfg.options);
ChartCfg.Y2Name = global.getpara("Y2Name",cfg.options);
ChartCfg.Y2Min = global.getpara("Y2Min",cfg.options);
ChartCfg.Y2Max = global.getpara("Y2Max",cfg.options);
ChartCfg.SignalNames = global.getpara("SN",cfg.options);
ChartCfg.SignalNames2 = global.getpara("SN2",cfg.options);
//标题
if(ChartCfg.Title == undefined || ChartCfg.Title == "")
elem.find(".isShow").hide();
else
elem.find(".title").html(ChartCfg.Title);
//linux系统隐藏导出按钮
if(window.navigator.userAgent.indexOf("Windows") == -1)
elem.find(".isShow i").hide();
//背景
if(ChartCfg.Background == undefined)
elem.find(".chart-body").addClass("configure_bg");
else
elem.find(".chart-body").addClass(ChartCfg.Background);
var chartOption = {};
getOption(ChartCfg,cfg.binding);
//nWidth:DIV宽度 nHeight:DIV高度 raw:默认大小
function getChartPercent(nWidth,nHeight,raw){
if(nWidth > nHeight){
return nHeight/raw;
}else{
return nWidth/raw;
}
}
function getOption(ChartCfg,binding){
chartOption = {};
var arr = binding.split("&");
var per = getChartPercent(chartobj.clientWidth,chartobj.clientHeight,300);
var fontSize = per*26 > 20 ? 20 : per*26;
elem.find(".title").css("fontSize",fontSize+"px");
var sysStyle = localStorage.getItem("systemStyle");
if(ChartCfg.SingleBiaxial == 1){
$http.get("data/LineOrBarCharts.json").success(function(data) {
var opt = data;
if(sysStyle == "White" && ChartCfg.Background != "gray_bg"){
opt.title.textStyle.color = "#464952";
opt.legend.textStyle.color = "#464952";
opt.xAxis[0].axisLabel.textStyle.color = "#464952";
opt.yAxis[0].axisLabel.textStyle.color = "#464952";
}
//opt.title.text = ChartCfg.Title;
//隐藏Y轴
if(ChartCfg.Y1Name == "false")
opt.yAxis[0].show = false;
else
opt.yAxis[0].name = ChartCfg.Y1Name;
opt.yAxis[0].min = ChartCfg.Y1Min;
opt.yAxis[0].max = ChartCfg.Y1Max == "" ? "auto" : ChartCfg.Y1Max;
var colorArr = ["rgba(255, 127, 80, 0.6)","rgba(135, 206, 250, 0.6)","rgba(193, 35, 43, 0.6)","rgba(252, 206, 16, 0.6)","rgba(155, 202, 99, 0.6)"];
var index = 0;
for(var i = 0;i < arr.length;i ++){
var ser = ChartCfg.DataType == 1 ? arr[i].split("|") : "BS:PUE".split("|");
for(var j = 0;j < ser.length;j++){
if(ser[j].indexOf("BS") == -1) continue;
var series = {
name : '',
type : ChartCfg.ChartType,
data : [],
/*itemStyle : {normal: {areaStyle: {
color : (function (){
var zrColor = zrender.tool.color;
return zrColor.getLinearGradient(
0, 200, 0, 400,
[[0, colorArr[index]],[0.1, 'rgba(255, 127, 80, 0)']]
)
})()
}}},*/
markPoint : {
data : [
{type : "max", name: "最大值"},
{type : "min", name: "最小值"}
]
}
};
index ++;
if(index >= colorArr.length) index = 0;
opt.series.push(series);
}
//默认值
opt.xAxis[0].data[0]= ["加载中......"];
chartOption = opt;
try {
window.onresize = piechart.resize(); //使第一个图表适应
piechart.setOption(chartOption, true);
}catch(e){
console.log("EChart Error:"+e.message);
}
}
});
}else if(ChartCfg.SingleBiaxial == 2){
$http.get("data/HyperbolaCharts.json").success(function(data) {
var opt = data;
if(sysStyle == "White" && ChartCfg.Background != "gray_bg"){
opt.title.textStyle.color = "#464952";
opt.legend.textStyle.color = "#464952";
opt.xAxis[0].axisLabel.textStyle.color = "#464952";
opt.yAxis[0].axisLabel.textStyle.color = "#464952";
opt.yAxis[1].axisLabel.textStyle.color = "#464952";
}
//opt.title.text = ChartCfg.Title;
opt.tooltip.formatter = function(params) {
return params[0].name + '<br/>'
+ params[0].seriesName + ' : ' + params[0].value+'<br/>'
+ params[1].seriesName + ' : ' + params[1].value;
};
//隐藏Y轴
if(ChartCfg.Y1Name == "false")
opt.yAxis[0].show = false;
else
opt.yAxis[0].name = ChartCfg.Y1Name;
opt.yAxis[0].min = ChartCfg.Y1Min;
opt.yAxis[0].max = ChartCfg.Y1Max == "" ? "auto" : ChartCfg.Y1Max;
if(ChartCfg.Y2Name == "false")
opt.yAxis[1].show = false;
else
opt.yAxis[1].name = ChartCfg.Y2Name;
opt.yAxis[1].min = ChartCfg.Y2Min;
opt.yAxis[1].max = ChartCfg.Y2Max == "" ? "auto" : ChartCfg.Y2Max;
opt.legend.data = [ChartCfg.Y1Name,ChartCfg.Y2Name];
var ser1 = arr[1].split("|");
for(var i = 0;i < ser1.length;i++){
if(ser1[i].indexOf("BS") == -1) continue;
var series = {
name : '',
type : ChartCfg.ChartType,
data : [],
/*itemStyle : {normal: {areaStyle: {
color : (function (){
var zrColor1 = zrender.tool.color;
return zrColor1.getLinearGradient(
0, 200, 0, 400,
[[0, 'rgba(255, 127, 80, 0.6)'],[0.1, 'rgba(255, 127, 80, 0.5)'],[1, 'rgba(255, 127, 80, 0)']]
)
})()
}}},*/
markPoint : {
data : [
{type : "max", name: "最大值"},
{type : "min", name: "最小值"}
]
}
};
opt.series.push(series);
}
var ser2 = arr[2].split("|");
for(var i = 0;i < ser2.length;i++){
if(ser2[i].indexOf("BS") == -1) continue;
var series = {
name : '',
type : ChartCfg.ChartType,
yAxisIndex:1,
data : [],
/*itemStyle : {normal: {areaStyle: {
color : (function (){
var zrColor2 = zrender.tool.color;
return zrColor2.getLinearGradient(
0, 200, 0, 400,
[[0, 'rgba(135, 206, 250, 0.6)'],[0.1, 'rgba(135, 206, 250, 0.5)'],[1, 'rgba(135, 206, 250, 0)']]
)
})()
}}},*/
markPoint : {
data : [
{type : "max", name: "最大值"},
{type : "min", name: "最小值"}
]
}
};
opt.series.push(series);
}
//默认值
opt.xAxis[0].data[0]= ["加载中......"];
chartOption = opt;
try {
window.onresize = piechart.resize(); //使第一个图表适应
piechart.setOption(chartOption, true);
}catch(e){
console.log("EChart Error:"+e.message);
}
});
}
};
function initPieChats(list,currpartid,binddata,dataType,signalNames,signalNames2){
if(chartOption.series == undefined) return;
var opt = [];
var dates = [];
if(dataType == 1){
var legendData = [];
list.forEach(function(item){
var value = _.findWhere(binddata, {partId: currpartid,deviceId:item.deviceId,baseTypeId:item.baseTypeId});
if(value == undefined || value.currentValue == undefined) return;
value = setSignalName(signalNames,signalNames2,value);
var cfg = {};
var data = angular.fromJson(value.currentValue);
cfg.datas = data.datas;
cfg.signalName = value.baseTypeName;
legendData.push(cfg.signalName);
dates = data.dates;
opt.push(cfg);
});
opt.legend = {
data : legendData
};
}else{
var value = _.findWhere(binddata, {partId: currpartid});
if(value == undefined || value.currentValue == undefined) return;
var cfg = {};
var data = angular.fromJson(value.currentValue);
cfg.signalName = "PUE";
cfg.datas = data.datas;
dates = data.dates;
opt.push(cfg);
}
var j = 0;
for(var i = 0; i < chartOption.series.length;i++){
if(chartOption.series[i].name == undefined || opt.length <= j) continue;
chartOption.series[i].name = opt[j].signalName;
chartOption.series[i].data = opt[j].datas;
if(opt.legend != undefined && opt.legend.data.length > 0)
chartOption.legend.data = opt.legend.data;
j ++;
}
chartOption.xAxis[0].data = dates;
try{
window.onresize = piechart.resize(); //使第一个图表适应
piechart.setOption(chartOption, true);
}catch(e){
console.log("EChart Error:"+e.message);
}
};
//region 获取修改的信号名称
function setSignalName(signalNames,signalNames2,option){
// option = {deviceId:"[设备编号]",baseTypeId:"[信号基类]",baseTypeName:"[修改的信号名称]"}
// list = [{"deviceBaseTypeId":"[设备编号]","deviceBaseName":"[设备名称]","baseTypeId":"[信号基类]","baseTypeName":"[信号名称]","remark":"[单位]"}]
if(option && signalNames != ""){
var list = angular.fromJson(base64.decode(signalNames));
var signal = _.findWhere(list,{deviceBaseTypeId:option.deviceId+"",baseTypeId:option.baseTypeId+""});
if(signal){
option.baseTypeName = signal.baseTypeName;
}else{
if(signalNames2 != ""){
var list = angular.fromJson(base64.decode(signalNames2));
var signal = _.findWhere(list,{deviceBaseTypeId:option.deviceId+"",baseTypeId:option.baseTypeId+""});
if(signal){
option.baseTypeName = signal.baseTypeName;
}
}
}
}
return option;
};
//endregion
scope.$watch('binddata', function(newValue, oldValue, scope) {
if(cfg.binding == undefined) return;
var arr = cfg.binding.split("&");
var list = [];
for(var i = 0 ; i < arr.length;i++){
if(arr[i].indexOf("BS") == -1) continue;
var sig = {};
sig.deviceId = global.getpara("DI",arr[i]);
sig.baseTypeId = global.getpara("BS",arr[i]);
list.push(sig);
}
initPieChats(list,currpartid,scope.binddata,ChartCfg.DataType,ChartCfg.SignalNames,ChartCfg.SignalNames2);
});
scope.clickHsExport = function(event){
var partid = event.target.parentNode.parentNode.parentNode.attributes["partid"].nodeValue;
var chart = [];
scope.binddata.forEach(function(item){
if(item.partId == partid && item.currentValue != "加载中...")
chart.push(item);
});
if(chart.length == 0) return;
var exportData = getHsPieChatsExport(chart);
if(piechart.getDataURL("png") == "data:,"){
Exporter.toXls(exportData);
}else{
chartOption.backgroundColor = '#020e45';
piechart.setOption(chartOption, true);
Exporter.toImgXls(exportData, piechart.getDataURL("png"));
chartOption.backgroundColor = 'transparent';
piechart.setOption(chartOption, true);
}
};
function getHsPieChatsExport(data) {
var arr = [];
arr.push({
name:scope.languageJson.Configuration.ActiveChartControl.Chart.Name,
data:scope.languageJson.Configuration.ActiveChartControl.Chart.Value,
date:scope.languageJson.Configuration.ActiveChartControl.Chart.Time
});//"名称" / "值" / "时间"
for(var i = 0;i < data.length;i++){
var value = angular.fromJson(data[i].currentValue);
for(var j = 0; j < value.datas.length;j++){
cfg = {};
if(data[i].signalName == "")
cfg.name = "PUE";
else
cfg.name = data[i].deviceName +' '+ data[i].signalName;
cfg.data = value.datas[j];
cfg.date = value.dates[j];
arr.push(cfg);
}
}
return arr;
}
scope.$watch('diagram.edit', function(newValue, oldValue, scope) {
diagramService.updateEditStatus(elem, newValue);
});
}
}
}
]);
nurseDirective.directive("basehspiechartsetter",['$modal','baseTypeService','global','balert','ConfigureMoldService','base64',
function($modal,baseTypeService,global,balert,ConfigureMoldService,base64){
return {
restrict : "A",
link : function(scope, element){
function getPartConfig(diagram, id) {
var found = _.find(diagram.parts, function(part) {
return part.id === id;
});
return found;
}
/******************* 过滤设备列表 & 加载信号列表 **************************/
function initDevice(){
if(scope.Topology == undefined){
scope.Topology = {};
}
var parentId = scope.diagram.parentId;
if(scope.diagram.deviceBaseTypeId == "1004" ||
(parseInt(scope.diagram.deviceBaseTypeId) >= 8888 && parseInt(scope.diagram.deviceBaseTypeId) < 9999))
parentId = "";
ConfigureMoldService.GetPartEquipments(parentId).then(function(data){
scope.deviceList = _.sortBy(data,function(item){return item.configName;});
scope.Topology.DeviceId = scope.deviceList[0].equipmentId;
baseTypeService.getGaugeSignalBaseType(scope.Topology.DeviceId).then(function(data) {
scope.bind.siglist = data;
});
});
}
/*********************************************************************/
function initFunction(){
scope.selected = {};
var showMultiSelectDlg = $modal({
scope:scope,
templateUrl:'partials/showMultiDeviceSelect.html',
show:false
});
var filterOut = function(original, toFilter) {
if(toFilter == undefined) return original;
var filtered = [];
angular.forEach(original, function(entity) {
var match = false;
for (var i = 0; i < toFilter.length; i++) {
if (toFilter[i].deviceBaseTypeId == entity.deviceBaseTypeId &&
toFilter[i].baseTypeId == entity.baseTypeId) {
match = true;
break;
}
}
if (!match) {
filtered.push(entity);
}
});
return filtered;
};
function fromJson(data){
var arr = [];
data.forEach(function(item){
arr.push(angular.fromJson(item));
});
return arr;
}
scope.refreshAvailable = function() {
scope.bind.selectedsigs = filterOut(scope.bind.selectedsigs, scope.bind.siglist);
scope.selected.available = [];
scope.selected.current = [];
};
scope.addMulti = function() {
scope.selected.available = fromJson(scope.selected.available);
if(!scope.bind.selectedsigs) scope.bind.selectedsigs = scope.selected.available;
else scope.bind.selectedsigs = scope.bind.selectedsigs.concat(scope.selected.available);
scope.bind.siglist = filterOut(scope.bind.siglist, scope.selected.available);
scope.refreshAvailable();
};
scope.removeMulti = function() {
scope.selected.current = fromJson(scope.selected.current);
scope.bind.siglist = scope.bind.siglist.concat(scope.selected.current);
scope.bind.selectedsigs = filterOut(scope.bind.selectedsigs, scope.selected.current);
scope.refreshAvailable();
};
scope.showMultiSelect = function(obj,data){
scope.bind = {};
scope.obj = obj;//对象字符串
var sig = [];
if(data != undefined && data != ""){
sig = angular.fromJson(data);
scope.Topology.DeviceId = sig[0].deviceBaseTypeId;
}
baseTypeService.getGaugeSignalBaseType(scope.Topology.DeviceId).then(function(datas) {
scope.bind = {
siglist: filterOut(datas,sig),
selectedsigs: sig
};
});
showMultiSelectDlg.$promise.then(showMultiSelectDlg.show);
};
scope.saveMultiSelect = function(deviceId,obj){
if(scope.bind.selectedsigs == undefined || scope.bind.selectedsigs.length == 0){
balert.show('danger', '信号不能为空!',3000);
return;
}
if(scope.hrPieChart.SingleBiaxial == 2 && scope.bind.selectedsigs.length > 1){
balert.show('danger', '双曲线不能选择多个信号!',3000);
return;
}
if(scope.bind.selectedsigs.length > 0){
var str = angular.toJson(scope.bind.selectedsigs);
eval(obj+"=str");
}
showMultiSelectDlg.hide();
};
scope.changeDevice = function(id){
baseTypeService.getGaugeSignalBaseType(id).then(function(data) {
scope.bind.siglist = filterOut(data, scope.bind.selectedsigs);
});
};
//region 修改信号名称
var modifyDlg = $modal({
scope: scope,
templateUrl: 'partials/modifyHisSignalName.html',
show: false
});
// 弹出修改信号名称
scope.moidfySignalNameClk = function(selects){
// {"deviceBaseTypeId":"[设备编号]","deviceBaseName":"[设备名称]","baseTypeId":"[信号基类]","baseTypeName":"[信号名称]","remark":"[单位]"}
scope.modifySelects = selects;
modifyDlg.$promise.then(modifyDlg.show);
};
// 修改信号名称
scope.modify = function(selects){
scope.bind.selectedsigs = selects;
modifyDlg.hide();
};
// 将对象转为编译字符串
scope.jsonToString = function(selects,selects2){
try{
selects = angular.fromJson(selects);
selects2 = angular.fromJson(selects2);
if(selects){
selects2 = selects2 == undefined ? [] : selects2;
return "|SN:"+base64.encode(angular.toJson(selects))+"|SN2:"+base64.encode(angular.toJson(selects2));
}
}catch(e){}
return "|SN:|SN2:";
}
//endregion
}
function init(){
scope.bind = {};
var partid = element.parent().parent().attr("partid");
scope.partid = partid;
var cfg = getPartConfig(scope.diagram, scope.partid);
scope.hrPieChart = {};
scope.hrPieChart.GroupTitle = global.getpara("Title",cfg.options);
scope.hrPieChart.ChartType = global.getpara("ChartType",cfg.options);
scope.hrPieChart.DataType = global.getpara("DataType",cfg.options);
scope.hrPieChart.Background = global.getpara("Background",cfg.options);
scope.hrPieChart.SingleBiaxial = global.getpara("SingleBiaxial",cfg.options);
scope.hrPieChart.Y1Name = global.getpara("Y1Name",cfg.options);
scope.hrPieChart.Y1Min = global.getpara("Y1Min",cfg.options);
scope.hrPieChart.Y1Max = global.getpara("Y1Max",cfg.options);
scope.hrPieChart.Y2Name = global.getpara("Y2Name",cfg.options);
scope.hrPieChart.Y2Min = global.getpara("Y2Min",cfg.options);
scope.hrPieChart.Y2Max = global.getpara("Y2Max",cfg.options);
if(global.getpara("SN",cfg.options) != "") scope.hrPieChart.Y1Signals = angular.fromJson(base64.decode(global.getpara("SN",cfg.options)));
if(global.getpara("SN2",cfg.options) != "") scope.hrPieChart.Y2Signals = angular.fromJson(base64.decode(global.getpara("SN2",cfg.options)));
var bins = cfg.binding.split("&");
var types = bins[0].split("|");
scope.hrPieChart.Days = types[1];
scope.hrPieChart.HistoryDataType = types.length > 2 ? types[2] : "avg";
if(scope.hrPieChart.SingleBiaxial == 1){
bins.forEach(function(item){
if(item.indexOf("BS") > -1){
var id = global.getpara("DI",item);
baseTypeService.getGaugeSignalBaseType(id).then(function(data) {
var sigs = item.split("|");
var arr = [];
var cfgs = {};
data.forEach(function(items){
for(var i = 0;i < sigs.length;i++){
if(sigs[i].indexOf("BS") == -1) break;
var bid = global.getpara("BS",sigs[i]);
if(items.baseTypeId == bid) cfgs = items;
}
});
if(scope.hrPieChart.Y1Signals == undefined || scope.hrPieChart.Y1Signals.length == 0){
arr.push(cfgs);
scope.hrPieChart.Y1Signals = angular.toJson(arr);
}
// else{
// arr = angular.fromJson(scope.hrPieChart.Y1Signals);
// arr.push(cfgs);
// }
});
}
});
}else if(scope.hrPieChart.SingleBiaxial == 2){
bins.forEach(function(item){
if(item.indexOf("BS") > -1){
var id = global.getpara("DI",item);
baseTypeService.getGaugeSignalBaseType(id).then(function(data) {
var sigs = item.split("|");
var cfgs = [];
data.forEach(function(items){
for(var i = 0;i < sigs.length;i++){
if(sigs[i].indexOf("BS") == -1) break;
var bid = global.getpara("BS",sigs[i]);
if(items.baseTypeId == bid) cfgs.push(items);
}
});
if(cfgs.length > 0){
if(scope.hrPieChart.Y1Signals == undefined || scope.hrPieChart.Y1Signals == "")
scope.hrPieChart.Y1Signals = angular.toJson(cfgs);
else if(scope.hrPieChart.Y2Signals == undefined || scope.hrPieChart.Y2Signals == "")
scope.hrPieChart.Y2Signals = angular.toJson(cfgs);
}
});
}
});
}
}
function parseBinding(data){
var result = data.DataType+'|'+data.Days+'|'+data.HistoryDataType;
if(data.DataType == 1){
result += '&';
var y1Signals = angular.fromJson(data.Y1Signals);
y1Signals.forEach(function(item){
result += 'BS:'+item.baseTypeId+'|DI:'+item.deviceBaseTypeId+'&';
});
}
if(data.DataType == 1 && data.SingleBiaxial == 2){
var y2Signals = angular.fromJson(data.Y2Signals);
y2Signals.forEach(function(item){
result += 'BS:'+item.baseTypeId+'|DI:'+item.deviceBaseTypeId;
});
}
return result;
}
element.bind('click',function(){
init();
initDevice();
initFunction();
var setDlg = $modal({
scope:scope,
templateUrl:'partials/basehspiechartsetter.html',
show:false
});
setDlg.$promise.then(setDlg.show);
scope.save = function(){
var cofg = getPartConfig(scope.diagram, scope.partid);;
cofg.binding = parseBinding(scope.hrPieChart);
cofg.options = "Title:"+scope.hrPieChart.GroupTitle+"|ChartType:"+scope.hrPieChart.ChartType+"|DataType:"
+scope.hrPieChart.DataType+"|SingleBiaxial:"+scope.hrPieChart.SingleBiaxial+"|Y1Name:"
+scope.hrPieChart.Y1Name+"|Y1Min:"+scope.hrPieChart.Y1Min+"|Y1Max:"+scope.hrPieChart.Y1Max
+"|Y2Name:"+scope.hrPieChart.Y2Name+"|Y2Min:"+scope.hrPieChart.Y2Min+"|Y2Max:"+scope.hrPieChart.Y2Max
+"|Background:"+scope.hrPieChart.Background+scope.jsonToString(scope.hrPieChart.Y1Signals,scope.hrPieChart.Y2Signals);
scope.resetParts();
setDlg.hide();
};
});
}
}
}
]);
nurseDirective.directive("newpercentsetter",['$modal','equipmentTemplateService','baseTypeService','TemplateService','AlarmLinkageService','balert','equipmentService','base64',
function($modal,equipmentTemplateService,baseTypeService,TemplateService,AlarmLinkageService,balert,equipmentService,base64){
return {
restrict : "A",
link : function(scope, element){
var setNewDlg = undefined, setPerDlg = undefined;
function initFunction(){
scope.addPercent = {
equal : 10,
unit:"",
percents : []
};
scope.percentRatio = {};
equipmentTemplateService.GetEquipmentTemplatesByBaseType("").then(function(data) {
scope.addPercent.Devices = data;
});
scope.changeDevice = function(id) {
baseTypeService.GetSinalByEquipmentId(id).then(function(data) {
scope.addPercent.Signals = data;
scope.addPercent.signalId = undefined;
});
};
scope.changeSignal = function(i,id){
if(scope.addPercent.Signals == undefined) return;
scope.addPercent.Signals.forEach(function(item){
if(item.signalId == id){
var symbol = "["+scope.addPercent.devicesId+","+id+"]";
scope.ClickLi(i,symbol);
}
});
};
scope.ClickLi = function(id,symbol){
if(scope.addPercent.startExpression == undefined)
scope.addPercent.startExpression = "";
var textDom = document.getElementById(id);
var addStr = symbol;
if (textDom.selectionStart || textDom.selectionStart == '0') {
scope.addPercent.startExpression = scope.addPercent.startExpression.substring(0,scope.startPos)+addStr+
scope.addPercent.startExpression.substring(scope.endPos);
textDom.focus();
textDom.selectionStart = scope.startPos + addStr.length;
textDom.selectionEnd = scope.startPos + addStr.length;
textDom.scrollTop = scope.scrollTop;
}else {
scope.addPercent.startExpression += addStr;
textDom.focus();
}
};
scope.CheckExpression = function(id){
var textDom = document.getElementById(id);
if (textDom.selectionStart || textDom.selectionStart == '0') {
scope.startPos = textDom.selectionStart;
scope.endPos = textDom.selectionEnd;
scope.scrollTop = textDom.scrollTop;
}
};
scope.addPercentRatioClick = function(){
var size = 0;
var minSymbol = ">=";
if(scope.addPercent.percents && scope.addPercent.percents.length > 0) {
size = scope.addPercent.percents.length;
minSymbol = ">=";
}else{
minSymbol = "";
}
if(scope.percentRatio.color == undefined)
scope.percentRatio.color = "#114baf";
scope.percentRatio.minSymbol = minSymbol;
scope.percentRatio.maxSymbol = "<";
scope.percentRatio.maxValue = "";
scope.percentRatio.percent = parseInt((100 / scope.addPercent.equal)*(size + 1));
scope.percentRatio.controlLogActions = [];
setPerDlg = $modal({
scope:scope,
templateUrl:'partials/addPercent.html',
show:false
});
setPerDlg.$promise.then(setPerDlg.show);
};
scope.changeDeviceTemplate = function(id){
scope.percentRatio.AllControlMeanings = [];
scope.percentRatio.Controls = [];
scope.percentRatio.ControlMeanings = [];
scope.percentRatio.ControlValue = "";
var TemplateId = 0;
scope.addPercent.Devices.forEach(function(item){
if(item.id == id) TemplateId = item.equipmentTemplateId;
});
TemplateService.GetRemoteControlByEquipmentTemplateId(TemplateId).then(function(data){
scope.percentRatio.Controls = data;
if(scope.percentRatio.Controls.length >0 ){
scope.percentRatio.control = scope.percentRatio.Controls[0];
TemplateService.GetControlMeaningsByEquipmentTemplateId(TemplateId).then(function(data){
scope.percentRatio.AllControlMeanings = data;
scope.changeControl(scope.percentRatio.Controls[0]);
});
}
});
scope.percentRatio.controlValue = undefined;
};
scope.changeControl = function(data){
var con = angular.fromJson(data);
if(con.CommandType == 2){
var obj = [];
scope.percentRatio.AllControlMeanings.forEach(function(item){
if(item.ControlId == con.ControlId)
obj.push(item);
});
scope.percentRatio.ControlMeanings = obj;
}else{
scope.MaxValue = con.MaxValue;
scope.MinValue = con.MinValue;
}
scope.CommandType = con.CommandType;
scope.percentRatio.controlValue = undefined;
};
//添加遥控到控制列表
scope.changeControlValue = function(id){
if(id == undefined) return;
if(scope.percentRatio.controlLogActions == undefined || scope.percentRatio.controlLogActions == "")
scope.percentRatio.controlLogActions = [];
var fig = {};
scope.addPercent.Devices.forEach(function(item){
if(item.id == scope.percentRatio.claDevicesId){
fig.equipmentId = item.id;
fig.equipmentName = item.name;
}
});
scope.percentRatio.Controls.forEach(function(item){
var con = angular.fromJson(scope.percentRatio.control);
if(item.ControlId == con.ControlId){
fig.controlId = item.ControlId;
fig.controlName = item.ControlName;
}
});
scope.percentRatio.ControlMeanings.forEach(function(item){
if(item.ParameterValue == id){
fig.actionValue = item.ParameterValue;
fig.actionMeanings = item.Meanings;
}
});
var is = false;
scope.percentRatio.controlLogActions.forEach(function(item){
if(item.equipmentId == fig.equipmentId && item.controlId == fig.controlId &&
item.actionValue == fig.actionValue) is = true;
});
if(!is)
scope.percentRatio.controlLogActions.push(fig);
};
//添加遥调到控制列表
scope.addControlValue = function(controlValue){
var prompt = scope.languageJson.Linkage.Prompt;
if(controlValue == undefined || controlValue == ""){
balert.show('danger',prompt.NotControlValue,3000);/*"控制值不能为空!"*/
return;
}
if(!(parseFloat(controlValue) >= parseFloat(scope.MinValue) && parseFloat(controlValue) <= parseFloat(scope.MaxValue))){
/*控制值的取值范围是*/
balert.show('danger',prompt.ControlValueRange+":["+scope.MinValue+"-"+scope.MaxValue+"]",3000);
return;
}
if(scope.percentRatio.controlLogActions == undefined || scope.percentRatio.controlLogActions == "")
scope.percentRatio.controlLogActions = [];
var fig = {};
scope.addPercent.Devices.forEach(function(item){
if(item.id == scope.percentRatio.claDevicesId){
fig.equipmentId = item.id;
fig.equipmentName = item.name;
}
});
scope.percentRatio.Controls.forEach(function(item){
var con = angular.fromJson(scope.percentRatio.control);
if(item.ControlId == con.ControlId){
fig.controlId = item.ControlId;
fig.controlName = item.ControlName;
}
});
fig.actionValue = controlValue;
fig.actionMeanings = controlValue;
var is = false;
scope.percentRatio.controlLogActions.forEach(function(item){
if(item.equipmentId == fig.equipmentId && item.controlId == fig.controlId &&
item.actionValue == fig.actionValue) is = true;
});
if(!is)
scope.percentRatio.controlLogActions.push(fig);
};
scope.deleteMeaningsClick = function($index){
scope.percentRatio.controlLogActions.splice($index,1);
};
function parseExpression(exper,ratio){
/*if(exper.indexOf("(") != 0 || exper.lastIndexOf(")") != (exper.length - 1))
exper = "("+exper+")";*/
var str = "";
if(ratio.minSymbol && ratio.minSymbol != "" && ratio.minValue != ""){
str = exper+" "+ratio.minSymbol+" "+ratio.minValue;
}
if(ratio.maxSymbol && ratio.maxSymbol != "" && ratio.maxValue != ""){
if(str == "")
str = exper+" "+ratio.maxSymbol+" "+ratio.maxValue;
else
str = str+" AND "+exper+" "+ratio.maxSymbol+" "+ratio.maxValue;
}
return str;
}
function fromLinkageString(percents,exper){
if(percents){
var param = "";
percents.forEach(function(items){
if(items.linkage.controlLogActions && items.linkage.controlLogActions.length > 0){
var linkage = {
actionName : "能量柱#"+scope.addPercent.title+"-"+items.percent,
startExpression : parseExpression(exper,items.linkage),
};
var res = items.percent+"|"+linkage.actionName+"|1|"+linkage.startExpression+"||";
items.linkage.controlLogActions.forEach(function(item){
res += item.equipmentId+"&"+item.controlId+"&"+item.actionValue+";";
});
param += res + "^";
}
});
return param;
}else
return undefined;
}
scope.addPercentRatio = function(){
var prompt = scope.languageJson.Configuration.PercentControl.Prompt;
if(scope.percentRatio.percent == undefined || scope.percentRatio.percent == ""){
balert.show('danger', prompt.NotRatio,10000);/*'占比不能为空!'*/
return;
}
if(scope.percentRatio.minSymbol != "" && (scope.percentRatio.minValue == "" || scope.percentRatio.minValue == undefined)){
balert.show('danger', prompt.NotMin,10000);/*'最小值不能为空!'*/
return;
}
if(scope.percentRatio.maxSymbol != "" && (scope.percentRatio.maxValue == "" || scope.percentRatio.maxValue == undefined)){
balert.show('danger', prompt.NotMax,10000);/*'最大值不能为空!'*/
return;
}
if(scope.addPercent.percents == undefined) scope.addPercent.percents = [];
//拼接区间字符串
var section = "";
if(scope.percentRatio.minSymbol == "") section += "( -∞ , ";
else if(scope.percentRatio.minSymbol == ">") section += "( "+scope.percentRatio.minValue+" , ";
else section += "[ "+scope.percentRatio.minValue+" , ";
if(scope.percentRatio.maxSymbol == "") section += "+∞)";
else if(scope.percentRatio.maxSymbol == "<") section += scope.percentRatio.maxValue+" )";
else section += scope.percentRatio.maxValue+" ]";
//以对象存储
var per = {
percent : scope.percentRatio.percent,
color : scope.percentRatio.color,
section : section,
size : scope.percentRatio.controlLogActions == undefined ? 0 : scope.percentRatio.controlLogActions.length,
linkage : {
minSymbol : scope.percentRatio.minSymbol,
minValue : scope.percentRatio.minValue,
maxSymbol : scope.percentRatio.maxSymbol,
maxValue : scope.percentRatio.maxValue,
controlLogActions : scope.percentRatio.controlLogActions
}
};
scope.addPercent.percents.push(per);
setPerDlg.hide();
scope.percentRatio.minValue = scope.percentRatio.maxValue;
};
scope.deleteClick = function($index){
scope.addPercent.percents.splice($index,1);
//修改组态的删除 并根据LogActionId删除数据
};
function getPartNum(typename){
var num=1;
var cparts=scope.diagram.parts;
if(cparts == undefined){
scope.diagram.parts = [];
return 1;
}
for(var i=0;i<cparts.length;i++)
{
if(cparts[i].id.indexOf(typename)==-1)continue;
var partnum=parseInt(cparts[i].id.replace(typename,''));
if(partnum>=num){
num=partnum+1;
}
}
return num;
}
function getActiveId(percent,data){
var res = "";
if(data){
var split1 = data.split("|");
split1.forEach(function(item){
var split2 = item.split("-");
if(split2[0] == percent) res = split2[1];
});
}
return res;
}
function parsePercent(percents,data){
if(percents){
var res = "";
percents.forEach(function(item){
if(res != "") res += ";";
res += item.percent+"&"+item.color+"&"+item.section+"&"+item.size+"&"+getActiveId(item.percent,data);
});
return res;
}else return "";
}
scope.addAlarmLinkage = function(){
var prompt = scope.languageJson.Configuration.PercentControl.Prompt;
if(scope.addPercent.startExpression == undefined || scope.addPercent.startExpression == ""){
balert.show('danger', prompt.NotExpression,10000);/*'表达式不能为空!'*/
return;
}
if(scope.addPercent.percents == undefined || scope.addPercent.percents.length == 0){
balert.show('danger', prompt.NotRatioQueue,10000);/*'占比队列不能为空!'*/
return;
}
var linkage = fromLinkageString(scope.addPercent.percents,scope.addPercent.startExpression);
if(linkage && linkage != ""){
AlarmLinkageService.InsertSignalLinkage(linkage).then(function(data){
if(data != "ERROR"){
equipmentService.ReLoadFSU();
var cofg ={};
cofg.id = "percent"+getPartNum("percent");
cofg.type = "percentpart";
cofg.left = "5";
cofg.top = "80";
cofg.width = "100";
cofg.height = "400";
cofg.binding = "expr:"+base64.encode(scope.addPercent.startExpression);
cofg.options = "Title:"+scope.addPercent.title+"|Equal:"+scope.addPercent.equal+"|Percents:"+parsePercent(scope.addPercent.percents,data)+"|Unit:"+scope.addPercent.unit;
scope.diagram.parts.push(cofg);
scope.resetParts();
setNewDlg.hide();
}else{
balert.show('danger', prompt.AddError,10000);/*'添加失败!'*/
}
});
}else{
var cofg ={};
cofg.id = "percent"+getPartNum("percent");
cofg.type = "percentpart";
cofg.left = "5";
cofg.top = "80";
cofg.width = "400";
cofg.height = "240";
cofg.binding = "expr:"+base64.encode(scope.addPercent.startExpression);
cofg.options = "Title:"+scope.addPercent.title+"|Equal:"+scope.addPercent.equal+"|Percents:"+parsePercent(scope.addPercent.percents,undefined)+"|Unit:"+scope.addPercent.unit;
scope.diagram.parts.push(cofg);
scope.resetParts();
setNewDlg.hide();
}
};
}
element.bind('click',function(){
initFunction();
setNewDlg = $modal({
scope:scope,
templateUrl:'partials/newpercentsetter.html',
show:false
});
setNewDlg.$promise.then(setNewDlg.show);
});
}
}
}
]);
nurseDirective.directive("percentpart",['diagramService','global','$http','Exporter',
function(diagramService,global,$http,Exporter){
return{
restrict: "AE",
replace: true,
templateUrl: "partials/percentpart.html",
link : function(scope, elem, attrs){
var cfg = diagramService.initPart(scope, elem, attrs);
if (cfg === undefined) return;
var currpartid = scope.partid = attrs.partid;
var title = global.getpara("Title",cfg.options);
//percent-color-section-size-activeId;
var percents = global.getpara("Percents",cfg.options);
var pers = parsePercentArr(percents);
var unit = global.getpara("Unit",cfg.options);
function parsePercentArr(percents){
var objs = percents.split(";");
var arr = [];
if(objs){
var index = 1;
objs.forEach(function(item){
var obj = item.split("&");
var cfg = {
percent : parseFloat(obj[0]),
color : obj[1],
index : index
};
cfg = parseSection(cfg,obj[2]);
arr.push(cfg);
index ++;
});
}
return arr;
}
function parseSection(cfg,section){
var minSymbol = "";
var minValue = "";
var maxSymbol = "";
var maxValue = "";
if(section.indexOf("-∞") != -1){
minSymbol = undefined;
}else{
if(section.indexOf("(") != -1){
minSymbol = ">";
minValue = parseFloat(section.substring(section.indexOf("(")+1,section.indexOf(",")));
}else if(section.indexOf("[") != -1){
minSymbol = ">=";
minValue = parseFloat(section.substring(section.indexOf("[")+1,section.indexOf(",")));
}
}
if(section.indexOf("+∞") != -1){
maxSymbol = undefined;
}else{
if(section.indexOf(")") != -1){
maxSymbol = "<";
maxValue = parseFloat(section.substring(section.indexOf(",")+1,section.indexOf(")")));
}else if(section.indexOf("]") != -1){
maxSymbol = "<=";
maxValue = parseFloat(section.substring(section.indexOf(",")+1,section.indexOf("]")));
}
}
cfg.minSymbol = minSymbol;
cfg.minValue = minValue;
cfg.maxSymbol = maxSymbol;
cfg.maxValue = maxValue;
return cfg;
}
// [废]生成柱状图
function createEqual(pers){
if(pers){
pers.forEach(function(item){
elem.find('.percent-equal').append("<div style='height: "+item.percent+"%'></div>");
});
}
}
//createEqual(pers);
//仪表盘
var chartOption = {};
var chartObj = elem.find('.pie')[0];
var echart = echarts.init(chartObj);
function createGaugeChart(chartObj,percents){
var per = getChartPercent(chartObj.clientWidth,chartObj.clientHeight,300);
elem.find('.percent-title').text(title == "undefined" ? "" : title);
var fontSize = per*26 > 20 ? 20 : per*26;
elem.find('.percent-title').css("fontSize",fontSize+"px");
var sysStyle = localStorage.getItem("systemStyle");
$http.get("data/GaugeCharts.json").success(function(data){
var option = data;
if(sysStyle == "White")
option.title.textStyle.color = "#464952";
option.series[0].min = 0.5;
option.series[0].max = (percents == undefined ? 10 : percents.length) + 0.5;
option.series[0].splitNumber = (percents == undefined ? 10 : percents.length)*2;
option.series[0].axisLine.lineStyle.color = createColor(percents);
option.series[0].radius = per*210;
option.series[0].axisLine.lineStyle.width = per*30;
//option.series[0].axisLabel.textStyle.fontSize = per*20;
option.series[0].axisLabel = {
formatter: function(v){
if((v+'').indexOf(".") > -1) return '';
else return v;
},
textStyle: {
fontSize: per*20
}
};
option.series[0].pointer.width = per*12;
option.series[0].title.textStyle.fontSize = per*30;
chartOption = option;
});
}
createGaugeChart(chartObj,pers);
//nWidth:DIV宽度 nHeight:DIV高度 raw:默认大小
function getChartPercent(nWidth,nHeight,raw){
if(nWidth > nHeight){
return nHeight/raw;
}else{
return nWidth/raw;
}
}
function createColor(percents){
var color = [[0.2,"#59cd82"],[0.8,"#f7e140"],[1,"#f44b36"]];
if(percents){
color = [];
percents.forEach(function(item){
var obj = [parseFloat(item.percent)/100,item.color];
color.push(obj);
});
}
return color;
}
function parseGaugeChart(elem,percents,value){
if(chartOption == undefined || chartOption.series == undefined) return;
var cfg = meetConditions(value.currentValue,percents);
chartOption.series[0].data[0].value = cfg.index;
chartOption.series[0].data[0].name = value.currentValue+" "+unit;
window.onresize = echart.resize(); //使第一个图表适应
echart.setOption(chartOption, true);
}
scope.$watch('binddata', function(newValue, oldValue, scope) {
var value = _.findWhere(scope.binddata, {partId: currpartid});
if(value == undefined) return;
//仪表盘
parseGaugeChart(elem,pers,value);
//柱状图
/*var cfg = meetConditions(value.currentValue,pers);
elem.find('.percent-progress').css("height",(cfg.percent == undefined ? "0" : cfg.percent)+"%");
elem.find('.percent-progress').css("background",cfg.color);
elem.find('.percent-progress').css("z-index",0);
elem.find('.percent-progress').html(value.currentValue);*//*+"<br/>"+cfg.percent+"%"*/
});
function meetConditions(value,percents){
var cfg = {};
if(percents){
percents.forEach(function(per){
if(per.minSymbol != undefined){ // minSymbol 不为空 maxSymbol 可能为空
if(per.maxSymbol != undefined){
if(eval(value+per.minSymbol+per.minValue+" && "+value+per.maxSymbol+per.maxValue))
cfg = per;
}else{
if(eval(value+per.minSymbol+per.minValue))
cfg = per;
}
}else{// minSymbol 为空 maxSymbol 必然不为空
if(eval(value+per.maxSymbol+per.maxValue))
cfg = per;
}
});
}
return cfg;
}
scope.$watch('diagram.edit', function(newValue, oldValue, scope) {
diagramService.updateEditStatus(elem, newValue);
});
}
}
}
]);
nurseDirective.directive("percentsetter",['$modal','equipmentTemplateService','baseTypeService','TemplateService','AlarmLinkageService','balert','equipmentService','base64','global',
function($modal,equipmentTemplateService,baseTypeService,TemplateService,AlarmLinkageService,balert,equipmentService,base64,global){
return {
restrict : 'A',
link : function(scope,element){
var setDlg = undefined, setPerDlg = undefined;
function initPercent(){
scope.addPercent = {};
var partid = element.parent().parent().attr("partid");
scope.partid = partid;
var cfg = getPartConfig(scope.diagram, scope.partid);
scope.addPercent.startExpression = base64.decode(global.getpara("expr",cfg.binding));
scope.addPercent.title = global.getpara("Title",cfg.options);
scope.addPercent.equal = global.getpara("Equal",cfg.options);
scope.addPercent.unit = global.getpara("Unit",cfg.options);
//percent-color-section-size-activeId;
var percents = global.getpara("Percents",cfg.options);
scope.addPercent.percents = parsePercentArr(percents);
function parsePercentArr(percents){
var objs = percents.split(";");
var arr = [];
if(objs){
objs.forEach(function(item){
var obj = item.split("&");
var cfg = {
percent : parseFloat(obj[0]),
color : obj[1],
section : obj[2],
size : obj[3],
activeId : obj[4]
};
arr.push(cfg);
});
}
arr = sortObj(arr,"percent");
return arr;
}
function parseSection(cfg,section){
var minSymbol = "";
var minValue = "";
var maxSymbol = "";
var maxValue = "";
if(section.indexOf("-∞") != -1){
minSymbol = undefined;
}else{
if(section.indexOf("(") != -1){
minSymbol = ">";
minValue = parseFloat(section.substring(section.indexOf("(")+1,section.indexOf(",")));
}else if(section.indexOf("[") != -1){
minSymbol = ">=";
minValue = parseFloat(section.substring(section.indexOf("[")+1,section.indexOf(",")));
}
}
if(section.indexOf("+∞") != -1){
maxSymbol = undefined;
}else{
if(section.indexOf(")") != -1){
maxSymbol = ">";
maxValue = parseFloat(section.substring(section.indexOf(",")+1,section.indexOf(")")));
}else if(section.indexOf("]") != -1){
maxSymbol = ">=";
maxValue = parseFloat(section.substring(section.indexOf(",")+1,section.indexOf("]")));
}
}
cfg.minSymbol = minSymbol;
cfg.minValue = minValue;
cfg.maxSymbol = maxSymbol;
cfg.maxValue = maxValue;
return cfg;
}
//排序
function sortObj(array, key) {
return array.sort(function(a, b) {
var x = parseInt(a[key]);
var y = parseInt(b[key]);
return x - y;
});
}
}
function getPartConfig(diagram, id) {
var found = _.find(diagram.parts, function(part) {
return part.id === id;
});
return found;
}
function initFunction(){
scope.percentRatio = {};
equipmentTemplateService.GetEquipmentTemplatesByBaseType("").then(function(data) {
scope.addPercent.Devices = data;
});
scope.changeDevice = function(id) {
baseTypeService.GetSinalByEquipmentId(id).then(function(data) {
scope.addPercent.Signals = data;
scope.addPercent.signalId = undefined;
});
};
scope.changeSignal = function(i,id){
if(scope.addPercent.Signals == undefined) return;
scope.addPercent.Signals.forEach(function(item){
if(item.signalId == id){
var symbol = "["+scope.addPercent.devicesId+","+id+"]";
scope.ClickLi(i,symbol);
}
});
};
scope.ClickLi = function(id,symbol){
if(scope.addPercent.startExpression == undefined)
scope.addPercent.startExpression = "";
var textDom = document.getElementById(id);
var addStr = symbol;
if (textDom.selectionStart || textDom.selectionStart == '0') {
scope.addPercent.startExpression = scope.addPercent.startExpression.substring(0,scope.startPos)+addStr+
scope.addPercent.startExpression.substring(scope.endPos);
textDom.focus();
textDom.selectionStart = scope.startPos + addStr.length;
textDom.selectionEnd = scope.startPos + addStr.length;
textDom.scrollTop = scope.scrollTop;
}else {
scope.addPercent.startExpression += addStr;
textDom.focus();
}
};
scope.CheckExpression = function(id){
var textDom = document.getElementById(id);
if (textDom.selectionStart || textDom.selectionStart == '0') {
scope.startPos = textDom.selectionStart;
scope.endPos = textDom.selectionEnd;
scope.scrollTop = textDom.scrollTop;
}
};
scope.addPercentRatioClick = function(){
var size = 0;
var minSymbol = ">";
if(scope.addPercent.percents && scope.addPercent.percents.length > 0) {
size = scope.addPercent.percents.length;
minSymbol = ">";
}else{
minSymbol = "";
}
if(scope.percentRatio.color == undefined)
scope.percentRatio.color = "#114baf";
scope.percentRatio.minSymbol = minSymbol;
scope.percentRatio.maxSymbol = "<=";
scope.percentRatio.maxValue = "";
scope.percentRatio.percent = parseInt((100 / scope.addPercent.equal)*(size + 1));
scope.percentRatio.controlLogActions = [];
setPerDlg = $modal({
scope:scope,
templateUrl:'partials/addPercent.html',
show:false
});
setPerDlg.$promise.then(setPerDlg.show);
};
scope.changeDeviceTemplate = function(id){
scope.percentRatio.AllControlMeanings = [];
scope.percentRatio.Controls = [];
scope.percentRatio.ControlMeanings = [];
scope.percentRatio.ControlValue = "";
var TemplateId = 0;
scope.addPercent.Devices.forEach(function(item){
if(item.id == id) TemplateId = item.equipmentTemplateId;
});
TemplateService.GetRemoteControlByEquipmentTemplateId(TemplateId).then(function(data){
scope.percentRatio.Controls = data;
if(scope.percentRatio.Controls.length >0 ){
scope.percentRatio.control = scope.percentRatio.Controls[0];
TemplateService.GetControlMeaningsByEquipmentTemplateId(TemplateId).then(function(data){
scope.percentRatio.AllControlMeanings = data;
scope.changeControl(scope.percentRatio.Controls[0]);
});
}
});
scope.percentRatio.controlValue = undefined;
};
scope.changeControl = function(data){
var con = angular.fromJson(data);
if(con.CommandType == 2){
var obj = [];
scope.percentRatio.AllControlMeanings.forEach(function(item){
if(item.ControlId == con.ControlId)
obj.push(item);
});
scope.percentRatio.ControlMeanings = obj;
}else{
scope.MaxValue = con.MaxValue;
scope.MinValue = con.MinValue;
}
scope.CommandType = con.CommandType;
scope.percentRatio.controlValue = undefined;
};
//添加遥控到控制列表
scope.changeControlValue = function(id){
if(id == undefined) return;
if(scope.percentRatio.controlLogActions == undefined || scope.percentRatio.controlLogActions == "")
scope.percentRatio.controlLogActions = [];
var fig = {};
scope.addPercent.Devices.forEach(function(item){
if(item.id == scope.percentRatio.claDevicesId){
fig.equipmentId = item.id;
fig.equipmentName = item.name;
}
});
scope.percentRatio.Controls.forEach(function(item){
var con = angular.fromJson(scope.percentRatio.control);
if(item.ControlId == con.ControlId){
fig.controlId = item.ControlId;
fig.controlName = item.ControlName;
}
});
scope.percentRatio.ControlMeanings.forEach(function(item){
if(item.ParameterValue == id){
fig.actionValue = item.ParameterValue;
fig.actionMeanings = item.Meanings;
}
});
var is = false;
scope.percentRatio.controlLogActions.forEach(function(item){
if(item.equipmentId == fig.equipmentId && item.controlId == fig.controlId &&
item.actionValue == fig.actionValue) is = true;
});
if(!is)
scope.percentRatio.controlLogActions.push(fig);
};
//添加遥调到控制列表
scope.addControlValue = function(controlValue){
var prompt = scope.languageJson.Linkage.Prompt;
if(controlValue == undefined || controlValue == ""){
balert.show('danger',prompt.NotControlValue,3000);/*"控制值不能为空!"*/
return;
}
if(!(parseFloat(controlValue) >= parseFloat(scope.MinValue) && parseFloat(controlValue) <= parseFloat(scope.MaxValue))){
/*控制值的取值范围是*/
balert.show('danger',prompt.ControlValueRange+":["+scope.MinValue+"-"+scope.MaxValue+"]",3000);
return;
}
if(scope.percentRatio.controlLogActions == undefined || scope.percentRatio.controlLogActions == "")
scope.percentRatio.controlLogActions = [];
var fig = {};
scope.addPercent.Devices.forEach(function(item){
if(item.id == scope.percentRatio.claDevicesId){
fig.equipmentId = item.id;
fig.equipmentName = item.name;
}
});
scope.percentRatio.Controls.forEach(function(item){
var con = angular.fromJson(scope.percentRatio.control);
if(item.ControlId == con.ControlId){
fig.controlId = item.ControlId;
fig.controlName = item.ControlName;
}
});
fig.actionValue = controlValue;
fig.actionMeanings = controlValue;
var is = false;
scope.percentRatio.controlLogActions.forEach(function(item){
if(item.equipmentId == fig.equipmentId && item.controlId == fig.controlId &&
item.actionValue == fig.actionValue) is = true;
});
if(!is)
scope.percentRatio.controlLogActions.push(fig);
};
scope.deleteMeaningsClick = function($index){
scope.percentRatio.controlLogActions.splice($index,1);
};
function parseExpression(exper,ratio){
/*if(exper.indexOf("(") != 0 || exper.lastIndexOf(")") != (exper.length - 1))
exper = "("+exper+")";*/
var str = "";
if(ratio.minSymbol && ratio.minSymbol != "" && ratio.minValue != ""){
str = exper+" "+ratio.minSymbol+" "+ratio.minValue;
}
if(ratio.maxSymbol && ratio.maxSymbol != "" && ratio.maxValue != ""){
if(str == "")
str = exper+" "+ratio.maxSymbol+" "+ratio.maxValue;
else
str = str+" AND "+exper+" "+ratio.maxSymbol+" "+ratio.maxValue;
}
return str;
}
function fromLinkageString(percents,exper){
if(percents){
var param = "";
percents.forEach(function(items){
if(items.activeId == undefined || items.activeId == ""){
if(items.linkage && items.linkage.controlLogActions && items.linkage.controlLogActions.length > 0){
var linkage = {
actionName : "能量柱#"+scope.addPercent.title+"-"+items.percent,
startExpression : parseExpression(exper,items.linkage),
};
var res = items.percent+"|"+linkage.actionName+"|1|"+linkage.startExpression+"||";
items.linkage.controlLogActions.forEach(function(item){
res += item.equipmentId+"&"+item.controlId+"&"+item.actionValue+";";
});
param += res + "^";
}
}
});
return param;
}else
return undefined;
}
scope.addPercentRatio = function(){
var prompt = scope.languageJson.Configuration.PercentControl.Prompt;
if(scope.percentRatio.percent == undefined || scope.percentRatio.percent == ""){
balert.show('danger', prompt.NotRatio,10000);/*'占比不能为空!'*/
return;
}
if(scope.percentRatio.minSymbol != "" && (scope.percentRatio.minValue == "" || scope.percentRatio.minValue == undefined)){
balert.show('danger', prompt.NotMin,10000);/*'最小值不能为空!'*/
return;
}
if(scope.percentRatio.maxSymbol != "" && (scope.percentRatio.maxValue == "" || scope.percentRatio.maxValue == undefined)){
balert.show('danger', prompt.NotMax,10000);/*'最大值不能为空!'*/
return;
}
if(scope.addPercent.percents == undefined) scope.addPercent.percents = [];
//拼接区间字符串
var section = "";
if(scope.percentRatio.minSymbol == "") section += "( -∞ , ";
else if(scope.percentRatio.minSymbol == ">") section += "( "+scope.percentRatio.minValue+" , ";
else section += "[ "+scope.percentRatio.minValue+" , ";
if(scope.percentRatio.maxSymbol == "") section += "+∞)";
else if(scope.percentRatio.maxSymbol == "<") section += scope.percentRatio.maxValue+" )";
else section += scope.percentRatio.maxValue+" ]";
//以对象存储
var per = {
percent : scope.percentRatio.percent,
color : scope.percentRatio.color,
section : section,
size : scope.percentRatio.controlLogActions == undefined ? 0 : scope.percentRatio.controlLogActions.length,
linkage : {
minSymbol : scope.percentRatio.minSymbol,
minValue : scope.percentRatio.minValue,
maxSymbol : scope.percentRatio.maxSymbol,
maxValue : scope.percentRatio.maxValue,
controlLogActions : scope.percentRatio.controlLogActions
}
};
scope.addPercent.percents.push(per);
setPerDlg.hide();
scope.percentRatio.minValue = scope.percentRatio.maxValue;
};
scope.deleteClick = function($index,activeId){
scope.addPercent.percents.splice($index,1);
//修改组态的删除 并根据LogActionId删除数据
AlarmLinkageService.DeleteAlarmLinkage(activeId);
};
function getActiveId(percent,data){
var res = "";
if(data){
var split1 = data.split("|");
split1.forEach(function(item){
var split2 = item.split("-");
if(split2[0] == percent) res = split2[1];
});
}
return res;
}
function parsePercent(percents,data){
if(percents){
var res = "";
percents.forEach(function(item){
if(res != "") res += ";";
if(item.activeId && item.activeId != "")
res += item.percent+"&"+item.color+"&"+item.section+"&"+item.size+"&"+item.activeId;
else
res += item.percent+"&"+item.color+"&"+item.section+"&"+item.size+"&"+getActiveId(item.percent,data);
});
return res;
}else return "";
}
scope.addAlarmLinkage = function(){
var prompt = scope.languageJson.Configuration.PercentControl.Prompt;
if(scope.addPercent.startExpression == undefined || scope.addPercent.startExpression == ""){
balert.show('danger', prompt.NotExpression,10000);/*'表达式不能为空!'*/
return;
}
if(scope.addPercent.percents == undefined || scope.addPercent.percents.length == 0){
balert.show('danger', prompt.NotRatioQueue,10000);/*'占比队列不能为空!'*/
return;
}
var linkage = fromLinkageString(scope.addPercent.percents,scope.addPercent.startExpression);
if(linkage && linkage != ""){
AlarmLinkageService.InsertSignalLinkage(linkage).then(function(data){
if(data != "ERROR"){
equipmentService.ReLoadFSU();
var cofg = getPartConfig(scope.diagram, scope.partid);
cofg.binding = "expr:"+base64.encode(scope.addPercent.startExpression);
cofg.options = "Title:"+scope.addPercent.title+"|Equal:"+scope.addPercent.equal+"|Percents:"+parsePercent(scope.addPercent.percents,data)+"|Unit:"+scope.addPercent.unit;
scope.resetParts();
setDlg.hide();
}else{
balert.show('danger', prompt.AddError,10000);/*'添加失败!'*/
}
});
}else{
var cofg = getPartConfig(scope.diagram, scope.partid);
cofg.binding = "expr:"+base64.encode(scope.addPercent.startExpression);
cofg.options = "Title:"+scope.addPercent.title+"|Equal:"+scope.addPercent.equal+"|Percents:"+parsePercent(scope.addPercent.percents,undefined)+"|Unit:"+scope.addPercent.unit;
scope.resetParts();
setDlg.hide();
}
};
}
element.bind('click',function(){
initPercent();
initFunction();
setDlg = $modal({
scope:scope,
templateUrl:'partials/percentsetter.html',
show:false
});
setDlg.$promise.then(setDlg.show);
});
}
}
}
]);
/*********************** 组态 -- 3D MDC Start *************************/
nurseDirective.directive("newlarymdcsetter",['$modal',
function($modal){
return {
restrict : "A",
link : function(scope, element){
function getPartNum(typename){
var num = 1;
var cparts=scope.diagram.parts;
if(cparts == undefined){
scope.diagram.parts = [];
return 1;
}
for(var i=0;i<cparts.length;i++)
{
if(cparts[i].id.indexOf(typename)==-1)continue;
var partnum=parseInt(cparts[i].id.replace(typename,''));
if(partnum>=num){
num=partnum+1;
}
}
return num;
}
element.bind('click',function(){
var cofg = {};
cofg.id = "laryMdc"+getPartNum("laryMdc");
cofg.type = "larymdcpart";
cofg.left = "5";
cofg.top = "80";
cofg.width = "600";
cofg.height = "360";
scope.diagram.parts.push(cofg);
scope.resetParts();
});
}
}
}
]);
nurseDirective.directive("larymdcpart",['diagramService','MdcAlarmService',
function(diagramService,MdcAlarmService){
return{
restrict: "AE",
replace: true,
templateUrl: "partials/laryMdcPart.html",
link : function(scope, elem, attrs){
var cfg = diagramService.initPart(scope, elem, attrs);
if (cfg === undefined) return;
var mdcConfig = undefined;
//window.lary = Lary.create("renderCanvas", mdcConfig);
MdcAlarmService.GetCabinetListInfo("").then(function(data){
window.lary = Lary.create("renderCanvas", data);
mdcConfig = data;
//lary.refresh(mdcConfig);
});
scope.showSide = function(){
lary.showSide();
};
//alarm的告警测试打开即可观看效果
function randomAlarm() {
var rand = mdcConfig.racks[Math.floor(Math.random() * mdcConfig.racks.length)];
var randLevel = Math.floor(Math.random() * 5);
if (randLevel === 0) {
rand.state = "default";
} else {
rand.state = "alarm";
}
rand.level = randLevel;
lary.refresh(mdcConfig);
}
//setInterval(randomAlarm, 2000);
//capacity的测试打开即可观看效果
function randomCapacity() {
var rand = mdcConfig.racks[Math.floor(Math.random() * mdcConfig.racks.length)];
rand.percent = Math.floor(Math.random() * 100);
rand.state = "capacity";
lary.refresh(mdcConfig);
}
//setInterval(randomCapacity, 3000);
scope.$watch('diagram.edit', function(newValue, oldValue, scope) {
diagramService.updateEditStatus(elem, newValue);
});
}
}
}
]);
/*********************** 组态 -- 3D MDC End *************************/
/*********************** 组态 -- 新增告警列表 Start *************************/
nurseDirective.directive("newalarmlistsetter",['$modal',
function($modal){
return {
restrict : "A",
link : function(scope, element){
function getPartNum(typename){
var num = 1;
var cparts=scope.diagram.parts;
if(cparts == undefined){
scope.diagram.parts = [];
return 1;
}
for(var i=0;i<cparts.length;i++)
{
if(cparts[i].id.indexOf(typename)==-1)continue;
var partnum=parseInt(cparts[i].id.replace(typename,''));
if(partnum>=num){
num=partnum+1;
}
}
return num;
}
element.bind('click',function(){
var cofg = {};
cofg.id = "alarmlist"+getPartNum("alarmlist");
cofg.type = "alarmlistpart";
cofg.left = "5";
cofg.top = "80";
cofg.width = "490";
cofg.height = "296";
scope.diagram.parts.push(cofg);
scope.resetParts();
});
}
}
}
]);
nurseDirective.directive("alarmlistpart",['$interval','diagramService','alarmService',
function($interval,diagramService,alarmService){
return{
restrict: "AE",
replace: true,
templateUrl: "partials/alarmListPart.html",
link : function(scope, elem, attrs){
var cfg = diagramService.initPart(scope, elem, attrs);
if (cfg === undefined) return;
scope.levelFilter = {
levelUrgent : true,
levelImportant : true,
levelCommon : true,
levelTip : true
};
function filterLevelAlarms (data) {
var farr = [];
if (scope.levelFilter.levelTip) farr.push(0);
if (scope.levelFilter.levelCommon) farr.push(1);
if (scope.levelFilter.levelImportant) farr.push(2);
if (scope.levelFilter.levelUrgent) farr.push(3);
var ret = _.filter(data, function(alarm) {
return _.contains(farr, parseInt(alarm.alarmLevel));
});
return ret;
}
function loadActiveAlarm(){
alarmService.updateActiveAlarmList().then(function(data) {
scope.ActiveAlarm = filterLevelAlarms(data);
});
}
scope.checkTest = function(type){
if(type == 'levelUrgent')
scope.levelFilter.levelUrgent = !scope.levelFilter.levelUrgent;
else if(type == 'levelImportant')
scope.levelFilter.levelImportant = !scope.levelFilter.levelImportant;
else if(type == 'levelCommon')
scope.levelFilter.levelCommon = !scope.levelFilter.levelCommon;
else if(type == 'levelTip')
scope.levelFilter.levelTip = !scope.levelFilter.levelTip;
loadActiveAlarm();
};
var stop = undefined;
scope.start = function() {
if (angular.isDefined(stop)) return;
loadActiveAlarm();
stop = $interval(function() {
loadActiveAlarm();
}, 3000);
};
scope.stop = function() {
if (angular.isDefined(stop)) {
$interval.cancel(stop);
stop = undefined;
}
};
scope.$on('$destroy', function() {
scope.stop();
});
scope.start();
scope.$watch('diagram.edit', function(newValue, oldValue, scope) {
diagramService.updateEditStatus(elem, newValue);
});
}
}
}
]);
/*********************** 组态 -- 新增告警列表 End *************************/
nurseDirective.directive('servertime',['TimerService','$interval','$modal','balert',
function(TimerService, $interval,$modal,balert){
return {
restrict: 'AE',
replace: "true",
template: "<div ng-click='timeSettingClick()'>" +
" <div id='time-server' class='clock'>{{timelabel}}</div>"+
"</div>",
link: function(scope, element) {
function updateTimer(){
scope.time.setSeconds(scope.time.getSeconds() + 1);
scope.timelabel = scope.time.getFromFormat('yyyy-mm-dd hh:ii:ss');
}
Date.prototype.getFromFormat = function(format) {
var yyyy = this.getFullYear().toString();
format = format.replace(/yyyy/g, yyyy);
var mm = (this.getMonth() + 1).toString();
format = format.replace(/mm/g, (mm[1] ? mm : "0" + mm[0]));
var dd = this.getDate().toString();
format = format.replace(/dd/g, (dd[1] ? dd : "0" + dd[0]));
var hh = this.getHours().toString();
format = format.replace(/hh/g, (hh[1] ? hh : "0" + hh[0]));
var ii = this.getMinutes().toString();
format = format.replace(/ii/g, (ii[1] ? ii : "0" + ii[0]));
var ss = this.getSeconds().toString();
format = format.replace(/ss/g, (ss[1] ? ss : "0" + ss[0]));
return format;
};
var updStop = undefined;
function init(){
var ver = localStorage.getItem("versions");
TimerService.getSystemTime().then(function(data) {
var offset = 0;//时区
var hawaii = data + (3600000*offset);
scope.time = new Date(hawaii);
updStop = $interval(updateTimer, 1000);
});
}
init();
var timeSettingDialog = null;
//校时弹出框
scope.timeSettingClick = function(){
timeSettingDialog = $modal({
scope: scope,
templateUrl: 'partials/timeSetting.html',
show: false
});
timeSettingDialog.$promise.then(timeSettingDialog.show);
var date = new Date();
scope.dateTime = date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate() +
" "+date.getHours()+":"+date.getMinutes()+":"+date.getSeconds();
};
//修改时间
scope.timeSave = function(){
scope.dateTime = $("#dateTime").val();
var regTime = /^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-)) (20|21|22|23|[0-1]?\d):[0-5]?\d:[0-5]?\d$/;
if(!regTime.test(scope.dateTime)){
//时间格式不正确,请重新输入!
balert.show('danger',scope.languageJson.Header.Advanced.Timing.FormatError,3000);
return;
}
TimerService.DateTimeTiming(scope.dateTime).then(function(data){
if(data == "OK"){
//校时成功!
balert.show('success',scope.languageJson.Header.Advanced.Timing.TimingSucceed,3000);
timeSettingDialog.hide();
if(angular.isDefined(updStop)){
$interval.cancel(updStop);
updStop = undefined;
init();
}else{
init();
}
}else if(data === "NotLinuxSystem"){
//不支持当前系统!
balert.show('danger',scope.languageJson.Header.Advanced.Timing.NotSystem,3000);
}else{
//校时失败!
balert.show('danger',scope.languageJson.Header.Advanced.Timing.TimingError,3000);
}
});
};
//没分钟定时校时
$interval(function() {
if(angular.isDefined(updStop)){
$interval.cancel(updStop);
updStop = undefined;
init();
}else{
init();
}
}, 1000*60);
}
}
}
]);
nurseDirective.directive('servertimeView',['TimerService','$interval','$modal','balert',
function(TimerService, $interval,$modal,balert){
return {
restrict: 'AE',
replace: "true",
template: "<div ng-click='timeSettingClick()'>" +
" <div id='time-server' class='clock'>"+
" <div>{{timelabelTime}}</div>"+
" <div>{{timelabelData}}</div>"+
" </div>"+
"</div>",
link: function(scope, element) {
function updateTimer(){
scope.time.setSeconds(scope.time.getSeconds() + 1);
scope.timelabelData = scope.time.getFromFormat('yyyy-mm-dd');
scope.timelabelTime = scope.time.getFromFormat('hh:ii:ss');
}
Date.prototype.getFromFormat = function(format) {
var yyyy = this.getFullYear().toString();
format = format.replace(/yyyy/g, yyyy);
var mm = (this.getMonth() + 1).toString();
format = format.replace(/mm/g, (mm[1] ? mm : "0" + mm[0]));
var dd = this.getDate().toString();
format = format.replace(/dd/g, (dd[1] ? dd : "0" + dd[0]));
var hh = this.getHours().toString();
format = format.replace(/hh/g, (hh[1] ? hh : "0" + hh[0]));
var ii = this.getMinutes().toString();
format = format.replace(/ii/g, (ii[1] ? ii : "0" + ii[0]));
var ss = this.getSeconds().toString();
format = format.replace(/ss/g, (ss[1] ? ss : "0" + ss[0]));
return format;
};
var updStop = undefined;
function init(){
TimerService.getSystemTime().then(function(data) {
var offset = 0;//时区
var hawaii = data + (3600000*offset);
scope.time = new Date(hawaii);
updStop = $interval(updateTimer, 1000);
});
}
init();
var timeSettingDialog = null;
//校时弹出框
scope.timeSettingClick = function(){
timeSettingDialog = $modal({
scope: scope,
templateUrl: 'partials/timeSetting.html',
show: false
});
timeSettingDialog.$promise.then(timeSettingDialog.show);
var date = new Date();
scope.dateTime = date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate() +
" "+date.getHours()+":"+date.getMinutes()+":"+date.getSeconds();
};
//修改时间
scope.timeSave = function(){
scope.dateTime = $("#dateTime").val();
var regTime = /^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-)) (20|21|22|23|[0-1]?\d):[0-5]?\d:[0-5]?\d$/;
if(!regTime.test(scope.dateTime)){
//时间格式不正确,请重新输入!
balert.show('danger',scope.languageJson.Header.Advanced.Timing.FormatError,3000);
return;
}
TimerService.DateTimeTiming(scope.dateTime).then(function(data){
if(data == "OK"){
//校时成功!
balert.show('success',scope.languageJson.Header.Advanced.Timing.TimingSucceed,3000);
timeSettingDialog.hide();
if(angular.isDefined(updStop)){
$interval.cancel(updStop);
updStop = undefined;
init();
}else{
init();
}
}else if(data === "NotLinuxSystem"){
//不支持当前系统!
balert.show('danger',scope.languageJson.Header.Advanced.Timing.NotSystem,3000);
}else{
//校时失败!
balert.show('danger',scope.languageJson.Header.Advanced.Timing.TimingError,3000);
}
});
};
//每分钟定时校时
$interval(function() {
if(angular.isDefined(updStop)){
$interval.cancel(updStop);
updStop = undefined;
init();
}else{
init();
}
}, 1000*60);
}
}
}
]);
nurseDirective.directive('ngRightClick', function($parse) {
return function(scope, element, attrs) {
var fn = $parse(attrs.ngRightClick);
element.bind('contextmenu', function(event) {
scope.$apply(function() {
event.preventDefault();
fn(scope, {
$event: event
});
});
});
};
});
nurseDirective.directive("checkbox", function() {
return {
scope: {},
require: "ngModel",
restrict: "E",
replace: "true",
template: "<button type=\"button\" ng-style=\"stylebtn\" class=\"btn btn-default\" ng-class=\"{'btn-xs': size==='default', 'btn-sm': size==='large', 'btn-lg': size==='largest', 'checked': checked===true}\">" +
"<span ng-style=\"styleicon\" class=\"glyphicon\" ng-class=\"{'glyphicon-ok': checked===true}\"></span>" +
"</button>",
link: function(scope, elem, attrs, modelCtrl) {
scope.size = "default";
// Default Button Styling
scope.stylebtn = {
"display":"inline-block",
"width":"32px",
"height":"32px"
};
// Default Checkmark Styling
scope.styleicon = {
"width": "10px",
"left": "-2px"
};
// If size is undefined, Checkbox has normal size (Bootstrap 'xs')
if (attrs.large !== undefined) {
scope.size = "large";
scope.stylebtn = {
"padding-top": "2px",
"padding-bottom": "2px",
"height": "30px"
};
scope.styleicon = {
"width": "8px",
"left": "-5px",
"font-size": "17px"
};
}
if (attrs.larger !== undefined) {
scope.size = "larger";
scope.stylebtn = {
"padding-top": "2px",
"padding-bottom": "2px",
"height": "34px"
};
scope.styleicon = {
"width": "8px",
"left": "-8px",
"font-size": "22px"
};
}
if (attrs.largest !== undefined) {
scope.size = "largest";
scope.stylebtn = {
"padding-top": "2px",
"padding-bottom": "2px",
"height": "45px"
};
scope.styleicon = {
"width": "11px",
"left": "-11px",
"font-size": "30px"
};
}
var trueValue = true;
var falseValue = false;
// If defined set true value
if (attrs.ngTrueValue !== undefined) {
trueValue = attrs.ngTrueValue;
}
// If defined set false value
if (attrs.ngFalseValue !== undefined) {
falseValue = attrs.ngFalseValue;
}
// Check if name attribute is set and if so add it to the DOM element
if (scope.name !== undefined) {
elem.name = scope.name;
}
// Update element when model changes
scope.$watch(function() {
if (modelCtrl.$modelValue === trueValue || modelCtrl.$modelValue === true) {
modelCtrl.$setViewValue(trueValue);
} else {
modelCtrl.$setViewValue(falseValue);
}
return modelCtrl.$modelValue;
}, function(newVal, oldVal) {
scope.checked = modelCtrl.$modelValue === trueValue;
}, true);
// On click swap value and trigger onChange function
elem.bind("click", function() {
scope.$apply(function() {
if (modelCtrl.$modelValue === falseValue) {
modelCtrl.$setViewValue(trueValue);
} else {
modelCtrl.$setViewValue(falseValue);
}
});
});
}
};
});
nurseDirective.directive("spinner", function() {
return {
scope: {
show:'=',
tip:'@'
},
restrict: "EA",
replace: "true",
templateUrl: "partials/spinner.html",
link: function(scope, elem, attrs) {
scope.$watch("show", function(newValue, oldValue) {
if (newValue == true) {
elem.show();
} else {
elem.hide();
}
}, true);
}
};
});
nurseDirective.directive("tmPagination", function(equipmentService) {
return {
restrict: 'EA',
template: '<div class="page-list">' +
'<ul class="pagination" ng-show="conf.totalItems > 0">' +
'<li ng-class="{disabled: conf.currentPage == 1}" ng-click="prevPage()"><span>&laquo;</span></li>' +
'<li ng-repeat="item in pageList track by $index" ng-class="{active: item == conf.currentPage, separate: item == \'...\'}" ' +
'ng-click="changeCurrentPage(item)">' +
'<span>{{ item }}</span>' +
'</li>' +
'<li ng-class="{disabled: conf.currentPage == conf.numberOfPages}" ng-click="nextPage()"><span>&raquo;</span></li>' +
'</ul>' +
'<div class="page-total pull-right input-group" ng-show="conf.totalItems > 0">' +
'{{conf.hint.the}}<input class="btn btn-default" style="width:50px; margin:5px;" type="text" ng-model="jumpPageNum" ng-keyup="jumpToPage($event)"/>{{conf.hint.page}} ' +
'{{conf.hint.articel}}<select class="btn btn-default" style="margin:5px;" ng-model="conf.itemsPerPage" ng-options="option for option in conf.perPageOptions "></select>' +
'/{{conf.hint.total}}<strong>{{ conf.totalItems }}</strong>{{conf.hint.eachPage}}' +
'</div>' +
'<div class="no-items" ng-show="conf.totalItems <= 0">{{conf.hint.noData}}</div>' +
'</div>',
replace: true,
scope: {
conf: '='
},
link: function(scope, element, attrs){
// 变更当前页
scope.changeCurrentPage = function(item) {
if(item == '...'){
return;
}else{
scope.conf.currentPage = item;
}
};
// 定义分页的长度必须为奇数 (default:9)
scope.conf.pagesLength = parseInt(scope.conf.pagesLength) ? parseInt(scope.conf.pagesLength) : 9 ;
if(scope.conf.pagesLength % 2 === 0){
// 如果不是奇数的时候处理一下
scope.conf.pagesLength = scope.conf.pagesLength -1;
}
// conf.erPageOptions
if(!scope.conf.perPageOptions){
scope.conf.perPageOptions = [10, 15, 20, 30, 50];
}
// prevPage
scope.prevPage = function(){
if(scope.conf.currentPage > 1){
scope.conf.currentPage -= 1;
}
};
// nextPage
scope.nextPage = function(){
if(scope.conf.currentPage < scope.conf.numberOfPages){
scope.conf.currentPage += 1;
}
};
// 跳转页
scope.jumpToPage = function(){
scope.jumpPageNum = scope.jumpPageNum.replace(/[^0-9]/g,'');
if(scope.jumpPageNum !== ''){
scope.conf.currentPage = scope.jumpPageNum;
}
};
//调用
// pageList数组
function getPagination(newValue, oldValue) {
scope.count = 1;
// conf.currentPage
scope.conf.currentPage = parseInt(scope.conf.currentPage) ? parseInt(scope.conf.currentPage) : 1;
// conf.totalItems
scope.conf.totalItems = parseInt(scope.conf.totalItems) ? parseInt(scope.conf.totalItems) : 0;
var index = _.indexOf(scope.conf.perPageOptions,scope.conf.totalItems);
if(scope.conf.totalItems > 50 && index == -1) {
scope.conf.perPageOptions.push(scope.conf.totalItems);
}
// conf.itemsPerPage (default:10)
scope.conf.itemsPerPage = parseInt(scope.conf.itemsPerPage) ? parseInt(scope.conf.itemsPerPage) : 10;
// numberOfPages
scope.conf.numberOfPages = Math.ceil(scope.conf.totalItems/scope.conf.itemsPerPage);
// judge currentPage > scope.numberOfPages
if(scope.conf.currentPage < 1){
scope.conf.currentPage = 1;
}
// 如果分页总数>0并且当前页大于分页总数
if(scope.conf.numberOfPages > 0 && scope.conf.currentPage > scope.conf.numberOfPages){
scope.conf.currentPage = scope.conf.numberOfPages;
}
// jumpPageNum
scope.jumpPageNum = scope.conf.currentPage;
// 如果itemsPerPage在不在perPageOptions数组中就把itemsPerPage加入这个数组中
var perPageOptionsLength = scope.conf.perPageOptions.length;
// 定义状态
var perPageOptionsStatus;
for(var i = 0; i < perPageOptionsLength; i++){
if(scope.conf.perPageOptions[i] == scope.conf.itemsPerPage){
perPageOptionsStatus = true;
}
}
// 如果itemsPerPage在不在perPageOptions数组中就把itemsPerPage加入这个数组中
if(!perPageOptionsStatus){
scope.conf.perPageOptions.push(scope.conf.itemsPerPage);
}
// 对选项进行sort
scope.conf.perPageOptions.sort(function(a, b){return a-b});
scope.pageList = [];
if(scope.conf.numberOfPages <= scope.conf.pagesLength){
// 判断总页数如果小于等于分页的长度,若小于则直接显示
for(i =1; i <= scope.conf.numberOfPages; i++){
scope.pageList.push(i);
}
}else{
// 总页数大于分页长度此时分为三种情况1.左边没有...2.右边没有...3.左右都有...
// 计算中心偏移量
var offset = (scope.conf.pagesLength - 1)/2;
if(scope.conf.currentPage <= offset){
// 左边没有...
for(i =1; i <= offset +1; i++){
scope.pageList.push(i);
}
scope.pageList.push('...');
scope.pageList.push(scope.conf.numberOfPages);
}else if(scope.conf.currentPage > scope.conf.numberOfPages - offset){
scope.pageList.push(1);
scope.pageList.push('...');
for(i = offset + 1; i >= 1; i--){
scope.pageList.push(scope.conf.numberOfPages - i);
}
scope.pageList.push(scope.conf.numberOfPages);
}else{
// 最后一种情况,两边都有...
scope.pageList.push(1);
scope.pageList.push('...');
for(i = Math.ceil(offset/2) ; i >= 1; i--){
scope.pageList.push(scope.conf.currentPage - i);
}
scope.pageList.push(scope.conf.currentPage);
for(i = 1; i <= offset/2; i++){
scope.pageList.push(scope.conf.currentPage + i);
}
scope.pageList.push('...');
scope.pageList.push(scope.conf.numberOfPages);
}
}
if(scope.conf.onChange){
// 防止初始化两次请求问题
if(!(oldValue != newValue && oldValue[0] == 0)) {
scope.conf.onChange();
}
}
scope.$parent.conf = scope.conf;
var getData = {
pageIndex: scope.conf.currentPage,
pageSize: scope.conf.itemsPerPage
};
equipmentService.getLimitEquipment((scope.conf.currentPage - 1) * scope.conf.itemsPerPage, scope.conf.itemsPerPage).then(function(data) {
scope.conf.equipments = data;
equipmentService.getEquipmentNums().then(function(data) {
scope.conf.totalItems = data;
});
});
}
scope.$watch(function() {
if(!scope.conf.totalItems) {
scope.conf.totalItems = 0;
}
var newValue = scope.conf.totalItems + ' ' + scope.conf.currentPage + ' ' + scope.conf.itemsPerPage;
return newValue;
}, getPagination);
}
};
}
);
nurseDirective.directive("tmProtocolPagination", function(equipmentTemplateService) {
return {
restrict: 'EA',
template: '<div class="page-list">' +
'<ul class="pagination" ng-show="pro.totalItems > 0">' +
'<li ng-class="{disabled: pro.currentPage == 1}" ng-click="prevPage()"><span>&laquo;</span></li>' +
'<li ng-repeat="item in pageList track by $index" ng-class="{active: item == pro.currentPage, separate: item == \'...\'}" ' +
'ng-click="changeCurrentPage(item)">' +
'<span>{{ item }}</span>' +
'</li>' +
'<li ng-class="{disabled: pro.currentPage == pro.numberOfPages}" ng-click="nextPage()"><span>&raquo;</span></li>' +
'</ul>' +
'<div class="page-total pull-right input-group" ng-show="pro.totalItems > 0">' +
'{{pro.hint.the}}<input class="btn btn-default" style="width:50px; margin:5px;" type="text" ng-model="jumpPageNum" ng-keyup="jumpToPage($event)"/>{{pro.hint.page}} ' +
'{{pro.hint.articel}}<select class="btn btn-default" style="margin:5px;" ng-model="pro.itemsPerPage" ng-options="option for option in pro.perPageOptions "></select>' +
'/{{pro.hint.total}}<strong>{{ pro.totalItems }}</strong>{{pro.hint.eachPage}}' +
'</div>' +
'<div class="no-items" ng-show="pro.totalItems <= 0">{{pro.hint.noData}}</div>' +
'</div>',
replace: true,
scope: {
pro: '='
},
link: function (scope, element, attrs) {
// 变更当前页
scope.changeCurrentPage = function (item) {
if (item == '...') {
return;
} else {
scope.pro.currentPage = item;
}
};
// 定义分页的长度必须为奇数 (default:9)
scope.pro.pagesLength = parseInt(scope.pro.pagesLength) ? parseInt(scope.pro.pagesLength) : 9;
if (scope.pro.pagesLength % 2 === 0) {
// 如果不是奇数的时候处理一下
scope.pro.pagesLength = scope.pro.pagesLength - 1;
}
// pro.erPageOptions
if (!scope.pro.perPageOptions) {
scope.pro.perPageOptions = [10, 15, 20, 30, 50];
}
// prevPage
scope.prevPage = function () {
if (scope.pro.currentPage > 1) {
scope.pro.currentPage -= 1;
}
};
// nextPage
scope.nextPage = function () {
if (scope.pro.currentPage < scope.pro.numberOfPages) {
scope.pro.currentPage += 1;
}
};
// 跳转页
scope.jumpToPage = function () {
scope.jumpPageNum = scope.jumpPageNum.replace(/[^0-9]/g, '');
if (scope.jumpPageNum !== '') {
scope.pro.currentPage = scope.jumpPageNum;
}
};
function getEquipmentTemplateList(data) {
var resArray = [];
data.forEach(function (element, index) {
var template = {};
template.EquipmentTemplateId = element.EquipmentTemplateId;
template.EquipmentTemplateName = element.EquipmentTemplateName;
resArray.push(alarm);
});
return resArray;
}
//调用
// pageList数组
function getPagination(newValue, oldValue) {
scope.count = 1;
// pro.currentPage
scope.pro.currentPage = parseInt(scope.pro.currentPage) ? parseInt(scope.pro.currentPage) : 1;
// pro.totalItems
scope.pro.totalItems = parseInt(scope.pro.totalItems) ? parseInt(scope.pro.totalItems) : 0;
// pro.itemsPerPage (default:10)
scope.pro.itemsPerPage = parseInt(scope.pro.itemsPerPage) ? parseInt(scope.pro.itemsPerPage) : 10;
// numberOfPages
scope.pro.numberOfPages = Math.ceil(scope.pro.totalItems / scope.pro.itemsPerPage);
// judge currentPage > scope.numberOfPages
if (scope.pro.currentPage < 1) {
scope.pro.currentPage = 1;
}
// 如果分页总数>0并且当前页大于分页总数
if (scope.pro.numberOfPages > 0 && scope.pro.currentPage > scope.pro.numberOfPages) {
scope.pro.currentPage = scope.pro.numberOfPages;
}
// jumpPageNum
scope.jumpPageNum = scope.pro.currentPage;
// 如果itemsPerPage在不在perPageOptions数组中就把itemsPerPage加入这个数组中
var perPageOptionsLength = scope.pro.perPageOptions.length;
// 定义状态
var perPageOptionsStatus;
for (var i = 0; i < perPageOptionsLength; i++) {
if (scope.pro.perPageOptions[i] == scope.pro.itemsPerPage) {
perPageOptionsStatus = true;
}
}
// 如果itemsPerPage在不在perPageOptions数组中就把itemsPerPage加入这个数组中
if (!perPageOptionsStatus) {
scope.pro.perPageOptions.push(scope.pro.itemsPerPage);
}
// 对选项进行sort
scope.pro.perPageOptions.sort(function (a, b) {
return a - b
});
scope.pageList = [];
if (scope.pro.numberOfPages <= scope.pro.pagesLength) {
// 判断总页数如果小于等于分页的长度,若小于则直接显示
for (i = 1; i <= scope.pro.numberOfPages; i++) {
scope.pageList.push(i);
}
} else {
// 总页数大于分页长度此时分为三种情况1.左边没有...2.右边没有...3.左右都有...
// 计算中心偏移量
var offset = (scope.pro.pagesLength - 1) / 2;
if (scope.pro.currentPage <= offset) {
// 左边没有...
for (i = 1; i <= offset + 1; i++) {
scope.pageList.push(i);
}
scope.pageList.push('...');
scope.pageList.push(scope.pro.numberOfPages);
} else if (scope.pro.currentPage > scope.pro.numberOfPages - offset) {
scope.pageList.push(1);
scope.pageList.push('...');
for (i = offset + 1; i >= 1; i--) {
scope.pageList.push(scope.pro.numberOfPages - i);
}
scope.pageList.push(scope.pro.numberOfPages);
} else {
// 最后一种情况,两边都有...
scope.pageList.push(1);
scope.pageList.push('...');
for (i = Math.ceil(offset / 2); i >= 1; i--) {
scope.pageList.push(scope.pro.currentPage - i);
}
scope.pageList.push(scope.pro.currentPage);
for (i = 1; i <= offset / 2; i++) {
scope.pageList.push(scope.pro.currentPage + i);
}
scope.pageList.push('...');
scope.pageList.push(scope.pro.numberOfPages);
}
}
if (scope.pro.onChange) {
// 防止初始化两次请求问题
if (!(oldValue != newValue && oldValue[0] == 0)) {
scope.pro.onChange();
}
}
scope.$parent.pro = scope.pro;
var getData = {
pageIndex: scope.pro.currentPage,
pageSize: scope.pro.itemsPerPage
};
/*ProtocolService.list(getData).success(function (response) {
scope.pro.equipmentTemplates = response.equipmentTemplates;
scope.pro.totalItems = response.count;
});*/
equipmentTemplateService.getLimitEquipmentTemplate((scope.pro.currentPage - 1) * scope.pro.itemsPerPage, scope.pro.itemsPerPage).then(function (data) {
scope.pro.equipmentTemplates = data;
equipmentTemplateService.getEquipmentTemplateNums().then(function(data) {
scope.pro.totalItems = data;
});
});
}
scope.$watch(function () {
if (!scope.pro.totalItems) {
scope.pro.totalItems = 0;
}
var newValue = scope.pro.totalItems + ' ' + scope.pro.currentPage + ' ' + scope.pro.itemsPerPage;
return newValue;
}, getPagination);
}
}
});
nurseDirective.directive("tmPaginationCard", function(CardService) {
return {
restrict: 'EA',
template: '<div class="page-list">' +
'<ul class="pagination" ng-show="card.totalItems > 0">' +
'<li ng-class="{disabled: card.currentPage == 1}" ng-click="prevPage()"><span>&laquo;</span></li>' +
'<li ng-repeat="item in pageList track by $index" ng-class="{active: item == card.currentPage, separate: item == \'...\'}" ' +
'ng-click="changeCurrentPage(item)">' +
'<span>{{ item }}</span>' +
'</li>' +
'<li ng-class="{disabled: card.currentPage == card.numberOfPages}" ng-click="nextPage()"><span>&raquo;</span></li>' +
'</ul>' +
'<div class="page-total pull-right input-group" ng-show="card.totalItems > 0">' +
'{{card.hint.the}}<input class="btn btn-default" style="width:50px; margin:5px;" type="text" ng-model="jumpPageNum" ng-keyup="jumpToPage($event)"/>{{card.hint.page}} ' +
'{{card.hint.articel}}<select class="btn btn-default" style="margin:5px;" ng-model="card.itemsPerPage" ng-options="option for option in card.perPageOptions "></select>' +
'/{{card.hint.total}}<strong>{{ card.totalItems }}</strong>{{card.hint.eachPage}}' +
'</div>' +
'<div class="no-items" ng-show="card.totalItems <= 0">{{card.hint.noData}}</div>' +
'</div>',
replace: true,
scope: {
card: '=',
carddataitem : '='
},
link: function(scope, element, attrs){
// 变更当前页
scope.changeCurrentPage = function(item) {
if(item == '...'){
return;
}else{
scope.card.currentPage = item;
}
};
// 定义分页的长度必须为奇数 (default:9)
scope.card.pagesLength = parseInt(scope.card.pagesLength) ? parseInt(scope.card.pagesLength) : 9 ;
if(scope.card.pagesLength % 2 === 0){
// 如果不是奇数的时候处理一下
scope.card.pagesLength = scope.card.pagesLength -1;
}
// card.erPageOptions
if(!scope.card.perPageOptions){
scope.card.perPageOptions = [10, 15, 20, 30, 50];
}
// prevPage
scope.prevPage = function(){
if(scope.card.currentPage > 1){
scope.card.currentPage -= 1;
}
};
// nextPage
scope.nextPage = function(){
if(scope.card.currentPage < scope.card.numberOfPages){
scope.card.currentPage += 1;
}
};
// 跳转页
scope.jumpToPage = function(){
scope.jumpPageNum = scope.jumpPageNum.replace(/[^0-9]/g,'');
if(scope.jumpPageNum !== ''){
scope.card.currentPage = scope.jumpPageNum;
}
};
//调用
// pageList数组
function getPagination(newValue, oldValue) {
scope.count = 1;
// card.currentPage
scope.card.currentPage = parseInt(scope.card.currentPage) ? parseInt(scope.card.currentPage) : 1;
// card.totalItems
scope.card.totalItems = parseInt(scope.card.totalItems) ? parseInt(scope.card.totalItems) : 0;
// card.itemsPerPage (default:10)
scope.card.itemsPerPage = parseInt(scope.card.itemsPerPage) ? parseInt(scope.card.itemsPerPage) : 10;
// numberOfPages
scope.card.numberOfPages = Math.ceil(scope.card.totalItems/scope.card.itemsPerPage);
// judge currentPage > scope.numberOfPages
if(scope.card.currentPage < 1){
scope.card.currentPage = 1;
}
// 如果分页总数>0并且当前页大于分页总数
if(scope.card.numberOfPages > 0 && scope.card.currentPage > scope.card.numberOfPages){
scope.card.currentPage = scope.card.numberOfPages;
}
// jumpPageNum
scope.jumpPageNum = scope.card.currentPage;
// 如果itemsPerPage在不在perPageOptions数组中就把itemsPerPage加入这个数组中
var perPageOptionsLength = scope.card.perPageOptions.length;
// 定义状态
var perPageOptionsStatus;
for(var i = 0; i < perPageOptionsLength; i++){
if(scope.card.perPageOptions[i] == scope.card.itemsPerPage){
perPageOptionsStatus = true;
}
}
// 如果itemsPerPage在不在perPageOptions数组中就把itemsPerPage加入这个数组中
if(!perPageOptionsStatus){
scope.card.perPageOptions.push(scope.card.itemsPerPage);
}
// 对选项进行sort
scope.card.perPageOptions.sort(function(a, b){return a-b});
scope.pageList = [];
if(scope.card.numberOfPages <= scope.card.pagesLength){
// 判断总页数如果小于等于分页的长度,若小于则直接显示
for(i =1; i <= scope.card.numberOfPages; i++){
scope.pageList.push(i);
}
}else{
// 总页数大于分页长度此时分为三种情况1.左边没有...2.右边没有...3.左右都有...
// 计算中心偏移量
var offset = (scope.card.pagesLength - 1)/2;
if(scope.card.currentPage <= offset){
// 左边没有...
for(i =1; i <= offset +1; i++){
scope.pageList.push(i);
}
scope.pageList.push('...');
scope.pageList.push(scope.card.numberOfPages);
}else if(scope.card.currentPage > scope.card.numberOfPages - offset){
scope.pageList.push(1);
scope.pageList.push('...');
for(i = offset + 1; i >= 1; i--){
scope.pageList.push(scope.card.numberOfPages - i);
}
scope.pageList.push(scope.card.numberOfPages);
}else{
// 最后一种情况,两边都有...
scope.pageList.push(1);
scope.pageList.push('...');
for(i = Math.ceil(offset/2) ; i >= 1; i--){
scope.pageList.push(scope.card.currentPage - i);
}
scope.pageList.push(scope.card.currentPage);
for(i = 1; i <= offset/2; i++){
scope.pageList.push(scope.card.currentPage + i);
}
scope.pageList.push('...');
scope.pageList.push(scope.card.numberOfPages);
}
}
if(scope.card.onChange){
// 防止初始化两次请求问题
if(!(oldValue != newValue && oldValue[0] == 0)) {
scope.card.onChange();
}
}
scope.$parent.card = scope.card;
var getData = {
pageIndex: scope.card.currentPage,
pageSize: scope.card.itemsPerPage
};
//by函数接受一个成员名字符串做为参数
var by = function(name){
return function(o, p){
var a, b;
if (typeof o === "object" && typeof p === "object" && o && p) {
a = o[name];
b = p[name];
if (a === b) {
return 0;
}
if (typeof a === typeof b) {
return a < b ? -1 : 1;
}
return typeof a < typeof b ? -1 : 1;
}
}
};
function fromCardList(data){
if(scope.carddataitem){
data.forEach(function(cs){
scope.carddataitem.Users.forEach(function(cdu){
if(cs.userId == cdu.EmployeeId)
cs.userName = cdu.EmployeeName;
});
scope.carddataitem.CardType.forEach(function(cdt){
if(cs.cardType == cdt.ItemId)
cs.cardTypeName = cdt.ItemValue;
});
scope.carddataitem.CardCategory.forEach(function(cdc){
if(cs.cardCategory == cdc.ItemId)
cs.cardCategoryName = cdc.ItemValue;
});
scope.carddataitem.DoorCard.sort(by("doorId"));
scope.carddataitem.DoorCard.forEach(function(cdd){
if(cs.cardId == cdd.cardId){
if(cs.doorList == undefined)
cs.doorList = cdd.doorId;
else
cs.doorList += "/"+cdd.doorId;
}
});
});
}
return data;
}
CardService.getLimitCard((scope.card.currentPage - 1) * scope.card.itemsPerPage, scope.card.itemsPerPage,scope.card.parameter).then(function(data) {
scope.card.cardList = fromCardList(data);
CardService.getCardNums(scope.card.parameter).then(function(datas) {
scope.card.totalItems = datas;
});
});
}
scope.$watch(function() {
if(!scope.card.totalItems) {
scope.card.totalItems = 0;
}
var newValue = scope.card.totalItems + ' ' + scope.card.currentPage + ' ' + scope.card.itemsPerPage+''+scope.card.parameter;
return newValue;
}, getPagination);
}
};
}
);
nurseDirective.directive('draggable', ['$document',
function($document) {//模态框拖动指令
return {
restrict: 'A',
link: function(scope, element) {
var startX = 0;
var startY = 0;
var x = 0;
var y = 0;
element.on('mousedown', function(event) {
//最后一个div
element = angular.element($(".am-modal-dialog:last"));
// Prevent default dragging of selected content
event.preventDefault();
startX = event.clientX - x;
startY = event.clientY - y;
$document.on('mousemove', mousemove);
$document.on('mouseup', mouseup);
});
function mousemove(event) {
y = event.clientY - startY;
x = event.clientX - startX;
element.css({
top: y + 'px',
left: x + 'px'
});
}
function mouseup() {
$document.off('mousemove', mousemove);
$document.off('mouseup', mouseup);
}
}
};
}]);
/*
* ng-finish-render="ngRepeatFinished"标签属性
* DOM加载完后调用$scope.$on('ngRepeatFinished',function(event){});函数
* */
nurseDirective.directive('ngFinishRender',function ($timeout) {
return {
restrict: 'A',
link: function (scope, element, attr) {
//if (scope.$last === true) {
$timeout(function () {
scope.$emit('ngRepeatFinished');
});
//}
}
}
});
/**
* 公共分页标签函数
* 标签<table-Paging table-Param="PagingParam" filer-Param="FilterParam"></table-Paging>
* PagingParam为分页对象包含属性有
* PagingParam = {
* currentPage:1 -- 当前页码
* itemsPerPage:10 -- 每页显示条数
* pagesLength:10 -- 页长
* totalItems:0 -- 数据总条数
* list:[] -- 数据集合
* perPageOptions:[10, 20, 30, 40, 50] -- 页面显示条数选项
* onChange:function(){} -- 值变化触发函数放查询语法
* }
* FilterParam为过滤对象值变化时也需要调用查询语法
* */
nurseDirective.directive('tablePaging',['$rootScope',
function($rootScope){
return {
restrict: 'EA',
replace: true,
template:
'<div class="page-list">' +
'<ul class="pagination" ng-show="tableParam.totalItems > 0" style="cursor: pointer;margin: 0px 20px 20px 10px;">' +
'<li ng-class="{disabled: tableParam.currentPage == 1}" ng-click="prevPage()"><span>&laquo;</span></li>' +
'<li ng-repeat="item in pageList track by $index" ng-class="{active: item == tableParam.currentPage, separate: item == \'...\'}" ' +
'ng-click="changeCurrentPage(item)">' +
'<span>{{ item }}</span>' +
'</li>' +
'<li ng-class="{disabled: tableParam.currentPage == tableParam.numberOfPages}" ng-click="nextPage()"><span>&raquo;</span></li>' +
'</ul>' +
'<div class="page-total pull-right input-group" ng-show="tableParam.totalItems > 0">' +
'{{tableParam.hint.the}}<input class="btn btn-default" style="width:50px; margin:5px;" type="text" ng-model="jumpPageNum" ng-keyup="jumpToPage($event)"/>{{tableParam.hint.page}} ' +
'{{tableParam.hint.articel}}<select class="btn btn-default" style="margin:5px;" ng-model="tableParam.itemsPerPage" ng-options="option for option in tableParam.perPageOptions "></select>{{tableParam.hint.eachPage}}' +
'/{{tableParam.hint.total}}<strong>{{ tableParam.totalItems }}</strong>{{tableParam.hint.eachPage}}' +
'</div>' +
'<div class="no-items" ng-show="tableParam.totalItems <= 0">{{tableParam.hint.noData}}</div>' +
'</div>',
scope: {
tableParam: '=',
filterParam: '='
},
link: function(scope, element){
// 变更当前页
scope.changeCurrentPage = function(item) {
if(item == '...'){
return;
}else{
scope.tableParam.currentPage = item;
}
};
if(scope.tableParam === undefined) return;
// 定义分页的长度必须为奇数 (default:9)
scope.tableParam.pagesLength = parseInt(scope.tableParam.pagesLength) ? parseInt(scope.tableParam.pagesLength) : 9 ;
if(scope.tableParam.pagesLength % 2 === 0){
// 如果不是奇数的时候处理一下
scope.tableParam.pagesLength = scope.tableParam.pagesLength -1;
}
// tableParam.erPageOptions
if(!scope.tableParam.perPageOptions){
scope.tableParam.perPageOptions = [10, 15, 20, 30, 50];
}
// prevPage
scope.prevPage = function(){
if(scope.tableParam.currentPage > 1){
scope.tableParam.currentPage -= 1;
}
};
// nextPage
scope.nextPage = function(){
if(scope.tableParam.currentPage < scope.tableParam.numberOfPages){
scope.tableParam.currentPage += 1;
}
};
// 跳转页
scope.jumpToPage = function(){
scope.jumpPageNum = scope.jumpPageNum.replace(/[^0-9]/g,'');
if(scope.jumpPageNum !== ''){
scope.tableParam.currentPage = scope.jumpPageNum;
}
};
//调用
// pageList数组
function getPagination(newValue, oldValue) {
scope.tableParam.onChange(newValue, oldValue);
//返回总套数后在调用;等待$rootScope.$emit('resultTotal',{});的调用
$rootScope.$on('resultTotal', function () {
scope.count = 1;
// tableParam.currentPage
scope.tableParam.currentPage = parseInt(scope.tableParam.currentPage) ? parseInt(scope.tableParam.currentPage) : 1;
// tableParam.totalItems
scope.tableParam.totalItems = parseInt(scope.tableParam.totalItems) ? parseInt(scope.tableParam.totalItems) : 0;
// tableParam.itemsPerPage (default:10)
scope.tableParam.itemsPerPage = parseInt(scope.tableParam.itemsPerPage) ? parseInt(scope.tableParam.itemsPerPage) : 10;
// numberOfPages
scope.tableParam.numberOfPages = Math.ceil(scope.tableParam.totalItems/scope.tableParam.itemsPerPage);
// judge currentPage > scope.numberOfPages
if(scope.tableParam.currentPage < 1){
scope.tableParam.currentPage = 1;
}
// 如果分页总数>0并且当前页大于分页总数
if(scope.tableParam.numberOfPages > 0 && scope.tableParam.currentPage > scope.tableParam.numberOfPages){
scope.tableParam.currentPage = scope.tableParam.numberOfPages;
}
// jumpPageNum
scope.jumpPageNum = scope.tableParam.currentPage;
// 如果itemsPerPage在不在perPageOptions数组中就把itemsPerPage加入这个数组中
var perPageOptionsLength = scope.tableParam.perPageOptions.length;
// 定义状态
var perPageOptionsStatus;
for(var i = 0; i < perPageOptionsLength; i++){
if(scope.tableParam.perPageOptions[i] == scope.tableParam.itemsPerPage){
perPageOptionsStatus = true;
}
}
// 如果itemsPerPage在不在perPageOptions数组中就把itemsPerPage加入这个数组中
if(!perPageOptionsStatus){
scope.tableParam.perPageOptions.push(scope.tableParam.itemsPerPage);
}
// 对选项进行sort
scope.tableParam.perPageOptions.sort(function(a, b){return a-b});
scope.pageList = [];
if(scope.tableParam.numberOfPages <= scope.tableParam.pagesLength){
// 判断总页数如果小于等于分页的长度,若小于则直接显示
for(i =1; i <= scope.tableParam.numberOfPages; i++){
scope.pageList.push(i);
}
}else{
// 总页数大于分页长度此时分为三种情况1.左边没有...2.右边没有...3.左右都有...
// 计算中心偏移量
var offset = (scope.tableParam.pagesLength - 1)/2;
if(scope.tableParam.currentPage <= offset){
// 左边没有...
for(i =1; i <= offset +1; i++){
scope.pageList.push(i);
}
scope.pageList.push('...');
scope.pageList.push(scope.tableParam.numberOfPages);
}else if(scope.tableParam.currentPage > scope.tableParam.numberOfPages - offset){
scope.pageList.push(1);
scope.pageList.push('...');
for(i = offset + 1; i >= 1; i--){
scope.pageList.push(scope.tableParam.numberOfPages - i);
}
scope.pageList.push(scope.tableParam.numberOfPages);
}else{
// 最后一种情况,两边都有...
scope.pageList.push(1);
scope.pageList.push('...');
for(i = Math.ceil(offset/2) ; i >= 1; i--){
scope.pageList.push(scope.tableParam.currentPage - i);
}
scope.pageList.push(scope.tableParam.currentPage);
for(i = 1; i <= offset/2; i++){
scope.pageList.push(scope.tableParam.currentPage + i);
}
scope.pageList.push('...');
scope.pageList.push(scope.tableParam.numberOfPages);
}
}
if(scope.tableParam.onChange){
// 防止初始化两次请求问题
if(!(oldValue != newValue && oldValue[0] == 0)) {
scope.tableParam.onChange();
}
}
scope.$parent.tableParam = scope.tableParam;
});
}
scope.$watch(function() {
if(!scope.tableParam.totalItems)
scope.tableParam.totalItems = 0;
if(!scope.filterParam)
scope.filterParam = {};
var newValue = scope.tableParam.currentPage + ' ' + scope.tableParam.itemsPerPage+' '+angular.toJson(scope.filterParam);
return newValue;
}, getPagination);
}
}
}
]);
/**
* 虚拟键盘
* 输入框input添加Virtual-Key-Board属性
* 需要给ng-model的对象赋值需要Virtual-Key-Board="变量名"
* */
nurseDirective.directive('virtualKeyBoard',['$document','$compile','$http','languageService',
function($document,$compile,$http,languageService){
return{
restrict:'A',
scope:{
virtualKeyBoard : "="
},
link:function(scope,element){
function loadKeyBoardHtml(input){
initLanguageJson();
//region html
var keyBoardBox =
"<div id='key-board' class=\"input_box js_math\">\n" +
" <div class=\"mask\"></div>\n" +
" <div class=\"input_con\">\n" +
" <div class=\"txt_area clear\" style=\"display: none;\">\n" +
" <div id=\"txt_latex\" class=\"input_cur input_latex l\"></div>\n" +
" <div id=\"txt_latex_pwd\" class=\"input_cur input_latex l\"> </div>\n" +
" <i class=\"fa fa-eye-slash password-eye\"ng-click=\"showPassword()\"></i>\n"+
/*" <div class=\"btn_box\">\n" +
" <input type=\"button\" value=\"清空\" ng-click=\"clearValue();\">\n" +
" <input type=\"button\" value=\"确定\" class=\"addlatex btn_ok\" ng-click=\"saveValue()\">\n" +
" </div>\n" +*/
" </div>\n" +
" <div class=\"change_box clear\">\n" +
" <div class=\"l change_btns active\" data-type=\"zimu\">"+scope.languageJson.VirtualKeyBoard.English+"</div>\n" +
" <div class=\"l change_btns\" "+(scope.languageJson.VirtualKeyBoard.ShowChinese?'data-type=\"zhongwen\"':'')+">"+scope.languageJson.VirtualKeyBoard.Chinese+"</div>\n" +
" <div class=\"l change_btns\" data-type=\"shuzi\">123</div>\n" +
" <div class=\"l change_btns\" data-type=\"fuhao\">"+scope.languageJson.VirtualKeyBoard.Symbol+"</div>\n" +
" <div class=\"l close_keyborad\"></div>\n" +
" </div>\n" +
" <div class=\"keyboard_box\">\n" +
" <div class=\"prettyprint\"></div>\n" +
" <div class=\"softkeyboard\" name=\"softkeyboard\">\n" +
" <div class=\"c_panel shuzi\" id=\"shuzi\">\n" +
" <table align=\"center\" width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n" +
" <tbody>\n" +
" <tr>\n" +
" <td><input class=\"i_button i_button_num\" type=\"button\" ng-click=\"addValue('0');\" value=\" 0 \"></td>\n" +
" <td><input class=\"i_button i_button_num\" type=\"button\" ng-click=\"addValue('1');\" value=\" 1 \"></td>\n" +
" <td><input class=\"i_button i_button_num\" type=\"button\" ng-click=\"addValue('2');\" value=\" 2 \"></td>\n" +
" <td><input class=\"i_button i_button_num\" type=\"button\" ng-click=\"addValue('3');\" value=\" 3 \"></td>\n" +
" <td><input class=\"i_button i_button_num\" type=\"button\" ng-click=\"addValue('4');\" value=\" 4 \"></td>\n" +
" <td><input class=\"i_button i_button_num\" type=\"button\" ng-click=\"addValue('5');\" value=\" 5 \"></td>\n" +
" <td><input class=\"i_button i_button_num\" type=\"button\" ng-click=\"addValue('6');\" value=\" 6 \"></td>\n" +
" <td><input class=\"i_button i_button_num\" type=\"button\" ng-click=\"addValue('7');\" value=\" 7 \"></td>\n" +
" <td><input class=\"i_button i_button_num\" type=\"button\" ng-click=\"addValue('8');\" value=\" 8 \"></td>\n" +
" <td><input class=\"i_button i_button_num\" type=\"button\" ng-click=\"addValue('9');\" value=\" 9 \"></td>\n" +
" </tr>\n" +
" <tr>\n" +
" <td><input class=\"i_button i_button_num\" type=\"button\" value=\".\" ng-click=\"addValue('.');\"></td>\n" +
" <td><input class=\"i_button i_button_num\" type=\"button\" ng-click=\"addValue('①');\" value=\" ① \"></td>\n" +
" <td><input class=\"i_button i_button_num\" type=\"button\" ng-click=\"addValue('②');\" value=\" ② \"></td>\n" +
" <td><input class=\"i_button i_button_num\" type=\"button\" ng-click=\"addValue('③');\" value=\" ③ \"></td>\n" +
" <td><input class=\"i_button i_button_num\" type=\"button\" ng-click=\"addValue('④');\" value=\" ④ \"></td>\n" +
" <td><input class=\"i_button i_button_num\" type=\"button\" ng-click=\"addValue('⑤');\" value=\" ⑤ \"></td>\n" +
" <td><input class=\"i_button i_button_num\" type=\"button\" ng-click=\"addValue('⑥');\" value=\" ⑥ \"></td>\n" +
" <td><input class=\"i_button i_button_num\" type=\"button\" ng-click=\"addValue('⑦');\" value=\" ⑦ \"></td>\n" +
" <td><input class=\"i_button i_button_num\" type=\"button\" ng-click=\"addValue('⑧');\" value=\" ⑧ \"></td>\n" +
" <td><input class=\"i_button i_button_num\" type=\"button\" ng-click=\"addValue('⑨');\" value=\" ⑨ \"></td>\n" +
" </tr>\n" +
" <tr>\n" +
" <td><input class=\"i_button i_button_num\" type=\"button\" ng-click=\"addValue('+');\" value=\" + \"></td>\n" +
" <td><input class=\"i_button i_button_num\" type=\"button\" ng-click=\"addValue('-');\" value=\" - \"></td>\n" +
" <td><input class=\"i_button i_button_num\" type=\"button\" ng-click=\"addValue('*');\" value=\" * \"></td>\n" +
" <td><input class=\"i_button i_button_num\" type=\"button\" ng-click=\"addValue('/');\" value=\" / \"></td>\n" +
" <td><input class=\"i_button i_button_num\" type=\"button\" ng-click=\"addValue('=');\" value=\" = \"></td>\n" +
" <td><input class=\"i_button i_button_num\" type=\"button\" ng-click=\"addValue('<');\" value=\" < \"></td>\n" +
" <td><input class=\"i_button i_button_num\" type=\"button\" ng-click=\"addValue('>');\" value=\" > \"></td>\n" +
" <td colspan=\"2\"><input class=\"i_button i_button_bs\" type=\"button\" value=\""+scope.languageJson.VirtualKeyBoard.Delete+"\" ng-click=\"backspace();\"></td>\n" +
" <td><input class=\"i_button i_button_num\" type=\"button\" ng-click=\"clearValue();\" value=\""+scope.languageJson.VirtualKeyBoard.Clear+"\"></td>\n" +
" </tr>\n" +
" </tbody>\n" +
" </table>\n" +
" </div>\n" +
" <div class=\"c_panel zimu\" id=\"zimu\" >\n" +
" <table align=\"center\" width=\"98%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n" +
" <tbody>\n" +
" <tr>\n" +
" <td><input class=\"i_button i_button_zm\" type=\"button\" ng-click=\"addValue('q');\" value=\" q \"></td>\n" +
" <td><input class=\"i_button i_button_zm\" type=\"button\" ng-click=\"addValue('w');\" value=\" w \"></td>\n" +
" <td><input class=\"i_button i_button_zm\" type=\"button\" ng-click=\"addValue('e');\" value=\" e \"></td>\n" +
" <td><input class=\"i_button i_button_zm\" type=\"button\" ng-click=\"addValue('r');\" value=\" r \"></td>\n" +
" <td><input class=\"i_button i_button_zm\" type=\"button\" ng-click=\"addValue('t');\" value=\" t \"></td>\n" +
" <td><input class=\"i_button i_button_zm\" type=\"button\" ng-click=\"addValue('y');\" value=\" y \"></td>\n" +
" <td><input class=\"i_button i_button_zm\" type=\"button\" ng-click=\"addValue('u');\" value=\" u \"></td>\n" +
" <td><input class=\"i_button i_button_zm\" type=\"button\" ng-click=\"addValue('i');\" value=\" i \"></td>\n" +
" <td><input class=\"i_button i_button_zm\" type=\"button\" ng-click=\"addValue('o');\" value=\" o \"></td>\n" +
" <td><input class=\"i_button i_button_zm\" type=\"button\" ng-click=\"addValue('p');\" value=\" p \"></td>\n" +
" <td><input class=\"i_button i_button_zm\" type=\"button\" ng-click=\"addValue('\\\\ ');\" value=\" "+scope.languageJson.VirtualKeyBoard.Space+" \"></td>\n" +
" </tr>\n" +
" <tr>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" id=\"caps-lock\" ng-click=\"setCapsLock();\" value=\""+scope.languageJson.VirtualKeyBoard.Upper+"\"></td>\n" +
" <td style=\"display: none\"><input class=\"i_button i_button_zm js_ym\" type=\"button\" value=\"韵母\" ng-click=\"changePanl('yunmu');\"></td>\n" +
" <td><input class=\"i_button i_button_zm\" type=\"button\" ng-click=\"addValue('a');\" value=\" a \"></td>\n" +
" <td><input class=\"i_button i_button_zm\" type=\"button\" ng-click=\"addValue('s');\" value=\" s \"></td>\n" +
" <td><input class=\"i_button i_button_zm\" type=\"button\" ng-click=\"addValue('d');\" value=\" d \"></td>\n" +
" <td><input class=\"i_button i_button_zm\" type=\"button\" ng-click=\"addValue('f');\" value=\" f \"></td>\n" +
" <td><input class=\"i_button i_button_zm\" type=\"button\" ng-click=\"addValue('g');\" value=\" g \"></td>\n" +
" <td><input class=\"i_button i_button_zm\" type=\"button\" ng-click=\"addValue('h');\" value=\" h \"></td>\n" +
" <td><input class=\"i_button i_button_zm\" type=\"button\" ng-click=\"addValue('j');\" value=\" j \"></td>\n" +
" <td><input class=\"i_button i_button_zm\" type=\"button\" ng-click=\"addValue('k');\" value=\" k \"></td>\n" +
" <td><input class=\"i_button i_button_zm\" type=\"button\" ng-click=\"addValue('l');\" value=\" l \"></td>\n" +
" <td rowspan=\"2\"><input class=\"i_button i_button_hc huiche\" type=\"button\" value=\" "+scope.languageJson.VirtualKeyBoard.Enter+"\" style=\"height: 140px;\"></td>\n" +
" </tr>\n" +
" <tr>\n" +
" <td><input class=\"i_button i_button_zm\" type=\"button\" value=\" "+scope.languageJson.VirtualKeyBoard.Clear+"\" ng-click=\"clearValue();\"></td>\n" +
" <td><input class=\"i_button i_button_zm\" type=\"button\" ng-click=\"addValue('z');\" value=\" z \"></td>\n" +
" <td><input class=\"i_button i_button_zm\" type=\"button\" ng-click=\"addValue('x');\" value=\" x \"></td>\n" +
" <td><input class=\"i_button i_button_zm\" type=\"button\" ng-click=\"addValue('c');\" value=\" c \"></td>\n" +
" <td><input class=\"i_button i_button_zm\" type=\"button\" ng-click=\"addValue('v');\" value=\" v \"></td>\n" +
" <td><input class=\"i_button i_button_zm\" type=\"button\" ng-click=\"addValue('b');\" value=\" b \"></td>\n" +
" <td><input class=\"i_button i_button_zm\" type=\"button\" ng-click=\"addValue('n');\" value=\" n \"></td>\n" +
" <td><input class=\"i_button i_button_zm\" type=\"button\" ng-click=\"addValue('m');\" value=\" m \"></td>\n" +
" <td colspan=\"2\"><input class=\"i_button i_button_bs\" type=\"button\" value=\" "+scope.languageJson.VirtualKeyBoard.Delete+"\" ng-click=\"backspace();\"></td>\n" +
" </tr>\n" +
" </tbody>\n" +
" </table>\n" +
" </div>\n" +
" <div class=\"c_panel fuhao\" id=\"fuhao\">\n" +
" <table align=\"center\" width=\"98%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n" +
" <tbody>\n" +
" <tr>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('~');\" value=\" ~ \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('@');\" value=\" @ \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('#');\" value=\" # \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('$');\" value=\" $ \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('¥');\" value=\" ¥ \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('%');\" value=\" % \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('\\'');\" value=\" ' \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('#95');\" value=\" _ \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('|');\" value=\" | \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('-');\" value=\" - \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('+');\" value=\" + \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('=');\" value=\" = \"></td>\n" +
" </tr>\n" +
" <tr>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('<');\" value=\" < \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('>');\" value=\" > \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('《');\" value=\" 《 \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('》');\" value=\" 》 \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('!');\" value=\" ! \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('?');\" value=\" ? \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue(';');\" value=\" ; \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue(':');\" value=\" : \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('(');\" value=\" ( \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue(')');\" value=\" ) \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('*');\" value=\" * \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('/');\" value=\" / \"></td>\n" +
" </tr>\n" +
" <tr>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('#123');\" value=\" { \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('#125');\" value=\" } \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('[');\" value=\" [ \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue(']');\" value=\" ] \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('、');\" value=\" 、 \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue(',');\" value=\" , \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('。');\" value=\" 。 \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('#34');\" value=' \" '></td>\n" +
" <td colspan=\"2\"><input class=\"i_button i_button_bs\" type=\"button\" ng-click=\"clearValue();\" value=\""+scope.languageJson.VirtualKeyBoard.Clear+"\"></td>\n" +
" <td colspan=\"2\"><input class=\"i_button i_button_bs\" type=\"button\" value=\" "+scope.languageJson.VirtualKeyBoard.Delete+"\" ng-click=\"backspace();\"></td>\n" +
" </tr>\n" +
" </tbody>\n" +
" </table>\n" +
" </div>\n" +
" <div class=\"c_panel yunmu\" id=\"yunmu\" style=\"display:none;\">\n" +
" <table align=\"center\" width=\"98%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n" +
" <tbody>\n" +
" <tr>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('ā');\" value=\" ā \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('á');\" value=\" á \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('ǎ');\" value=\" ǎ \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('à');\" value=\" à \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('ō');\" value=\" ō \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('ó');\" value=\" ó \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('ǒ');\" value=\" ǒ \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('ò');\" value=\" ò \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('ê');\" value=\" ê \"></td>\n" +
" <td><input class=\"i_button i_button_zm\" type=\"button\" value=\" "+scope.languageJson.VirtualKeyBoard.Delete+"\" ng-click=\"backspace();\"></td>\n" +
" </tr>\n" +
" <tr>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('ē');\" value=\" ē \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('é');\" value=\" é \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('ě');\" value=\" ě \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('è');\" value=\" è \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('ī');\" value=\" ī \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('í');\" value=\" í \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('ǐ');\" value=\" ǐ \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('ì');\" value=\" ì \"></td>\n" +
" <td ><input class=\"i_button i_button_zm\" type=\"button\" value=\" "+scope.languageJson.VirtualKeyBoard.Clear+"\" ng-click=\"clearValue();\"></td>\n" +
" <td><input class=\"i_button i_button_zm\" type=\"button\" ng-click=\"clearValue();\" value=\""+scope.languageJson.VirtualKeyBoard.Clear+"\"></td>\n" +
" </tr>\n" +
" <tr>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('ū');\" value=\" ū \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('ú');\" value=\" ú \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('ǔ');\" value=\" ǔ \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('ù');\" value=\" ù \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('ǖ');\" value=\" ǖ \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('ǘ');\" value=\" ǘ \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('ǚ');\" value=\" ǚ \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('ǜ');\" value=\" ǜ \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('ü');\" value=\" ü \"></td>\n" +
" <td><input class=\"i_button i_button_zm\" type=\"button\" value=\" "+scope.languageJson.VirtualKeyBoard.Back+"\" ng-click=\"changePanl('zimu');\"></td>\n" +
" </tr>\n" +
" </tbody>\n" +
" </table>\n" +
" </div>\n" +
" <div class=\"c_panel gongshi\" id=\"gongshi\">\n" +
" <table align=\"center\" width=\"98%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n" +
" <tbody>\n" +
" <tr>\n" +
" <td><input class=\"i_button i_button_fh i_icon i_icon_1\" type=\"button\" ng-click=\"addValue('\\\\times',true);\"></td>\n" +
" <td><input class=\"i_button i_button_fh i_icon i_icon_2\" type=\"button\" ng-click=\"addValue('\\\\div',true);\"></td>\n" +
" <td><input class=\"i_button i_button_fh i_icon i_icon_3\" type=\"button\" ng-click=\"addValue('\\\\cdot',true);\"></td>\n" +
" <td><input class=\"i_button i_button_fh i_icon i_icon_4\" type=\"button\" ng-click=\"addValue('\\\\leq',true);\"></td>\n" +
" <td><input class=\"i_button i_button_fh i_icon i_icon_5\" type=\"button\" ng-click=\"addValue('\\\\geq',true);\"></td>\n" +
" <td><input class=\"i_button i_button_fh i_icon i_icon_6\" type=\"button\" ng-click=\"addValue('\\\\neq',true);\"></td>\n" +
" <td><input class=\"i_button i_button_fh i_icon i_icon_7\" type=\"button\" ng-click=\"addValue('\\\\frac{}{}',true);\"></td>\n" +
" <td><input class=\"i_button i_button_fh i_icon i_icon_8\" type=\"button\" ng-click=\"addValue('^{}',true);\"></td>\n" +
" <td><input class=\"i_button i_button_fh i_icon i_icon_9\" type=\"button\" ng-click=\"addValue('_{}',true);\"></td>\n" +
" <td><input class=\"i_button i_button_fh i_icon i_icon_10\" type=\"button\" ng-click=\"addValue('\\\\sqrt{}',true);\"></td>\n" +
" <td><input class=\"i_button i_button_fh i_icon i_icon_11\" type=\"button\" ng-click=\"addValue('\\\\sqrt[]{}',true);\"></td>\n" +
" <td><input class=\"i_button i_button_fh i_icon i_icon_12\" type=\"button\" ng-click=\"addValue('\\\\left | \\\\right |',true);\"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('<',true);\" value=\" < \"></td>\n" +
" </tr>\n" +
" <tr>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('>',true);\" value=\" > \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('-',true);\" value=\" - \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('+',true);\" value=\" + \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('=',true);\" value=\" = \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('\\\\sum',true);\" value=\" ∑ \"></td>\n" +
" <td><input class=\"i_button i_button_fh\" type=\"button\" ng-click=\"addValue('\\\\approx',true);\" value=\" ≈ \" ></td>\n" +
" <td><input class=\"i_button i_button_fh i_icon i_icon_15\" type=\"button\" ng-click=\"addValue('\\\\vec{}',true);\"></td>\n" +
" <td><input class=\"i_button i_button_fh i_icon i_icon_16\" type=\"button\" ng-click=\"addValue('\\\\dot{}',true);\"></td>\n" +
" <td><input class=\"i_button i_button_fh i_icon i_icon_17\" type=\"button\" ng-click=\"addValue('\\\\pi',true);\"></td>\n" +
" <td><input class=\"i_button i_button_fh i_icon i_icon_18\" type=\"button\" ng-click=\"addValue('\\\\alpha',true);\"></td>\n" +
" <td><input class=\"i_button i_button_fh i_icon i_icon_19\" type=\"button\" ng-click=\"addValue('\\\\beta',true);\"></td>\n" +
" <td><input class=\"i_button i_button_fh i_icon i_icon_20\" type=\"button\" ng-click=\"addValue('\\\\angle',true);\"></td>\n" +
" <td><input class=\"i_button i_button_fh i_icon i_icon_21\" type=\"button\" ng-click=\"addValue('^{\\\\circ}',true);\"></td>\n" +
" </tr>\n" +
" <tr>\n" +
" <td><input class=\"i_button i_button_fh i_icon i_icon_22\" type=\"button\" ng-click=\"addValue('\\\\Delta',true);\"></td>\n" +
" <td><input class=\"i_button i_button_fh i_icon i_icon_23\" type=\"button\" ng-click=\"addValue('\\\\odot',true);\"></td>\n" +
" <td><input class=\"i_button i_button_fh i_icon i_icon_24\" type=\"button\" ng-click=\"addValue('\\\\perp',true);\"></td>\n" +
" <td><input class=\"i_button i_button_fh i_icon i_icon_25\" type=\"button\" ng-click=\"addValue('\\\\pm',true);\"></td>\n" +
" <td><input class=\"i_button i_button_fh i_icon i_icon_26\" type=\"button\" ng-click=\"addValue('\\\\mp',true);\"></td>\n" +
" <td><input class=\"i_button i_button_fh i_icon i_icon_27\" type=\"button\" ng-click=\"addValue('\\\\theta',true);\"></td>\n" +
" <td><input class=\"i_button i_button_fh i_icon i_icon_28\" type=\"button\" ng-click=\"addValue('\\\\lambda',true);\"></td>\n" +
" <td><input class=\"i_button i_button_fh i_icon i_icon_29\" type=\"button\" ng-click=\"addValue('\\\\mu',true);\"></td>\n" +
" <td><input class=\"i_button i_button_zm\" type=\"button\" value=\" \"></td>\n" +
" <td><input class=\"i_button i_button_zm\" type=\"button\" ng-click=\"clearValue();\" value=\""+scope.languageJson.VirtualKeyBoard.Clear+"\"></td>\n" +
" <td><input class=\"i_button i_button_zm\" type=\"button\" value=\" "+scope.languageJson.VirtualKeyBoard.Delete+"\" ng-click=\"backspace();\"></td>\n" +
" <td colspan=\"2\"><input class=\"i_button i_button_bs\" type=\"button\" value=\" "+scope.languageJson.VirtualKeyBoard.Back+"\" ng-click=\"changePanl('zimu');\"></td>\n" +
" </tr>\n" +
" </tbody>\n" +
" </table>\n" +
" </div>\n" +
" </div>\n" +
" </div>\n" +
" </div>\n" +
"</div>\n";
//endregion
keyBoardBox = $compile(keyBoardBox)(scope);
//input.parentNode.appendChild(keyBoardBox[0]);
var dialog = $(".modal .modal-dialog");
if(dialog.length > 0 && dialog[dialog.length - 1].parentNode){
dialog[dialog.length - 1].parentNode.appendChild(keyBoardBox[0]);
var type = input.type;
if(input.value==undefined)
setKeyValue();
if(input.value==""&&type=="password"){
$(".password-eye").show();
}else {
$(".password-eye").hide();
}
}else{
document.body.appendChild(keyBoardBox[0]);
var type = input.type;
if(input.value==undefined)
setKeyValue();
if(input.value==""&&type=="password"){
$(".password-eye").show();
$("#txt_latex").css("display","none");
$("#txt_latex_pwd").css("display","block")
}else {
$(".password-eye").hide();
$("#txt_latex").css("display","block");
$("#txt_latex_pwd").css("display","none")
}
}
//document.body.appendChild(keyBoardBox[0]);
/*document.getElementById("key_board_box").innerText = "";
document.getElementById("key_board_box").appendChild(keyBoardBox[0]);*/
}
function initLanguageJson(){
if(sessionStorage.getItem('languageJson') != null){
scope.languageJson = angular.fromJson(sessionStorage.getItem('languageJson'));
//defaultKeyValue(scope.languageJson);
}else{
languageService.GetLanguage().then(function(data){
var file = "data/language/ch.json";
if(data == "English")
file = "data/language/en.json";
$http.get(file).success(function(data) {
scope.languageJson = data;
//defaultKeyValue(scope.languageJson);
});
});
}
}
function defaultKeyValue(languageJson){
$("#caps-lock").val(languageJson.VirtualKeyBoard.Chinese.Upper);
}
var CapsLockValue=0,
check;
//存储当前内容
var tempSt = '',
tempEt = '';
//给输入的密码框添加新值
var zn_en = 'en';
var config={
spaceBehavesLikeTab: true,
leftRightIntoCmdGoes: 'up',
restrictMismatchedBrackets: true,
sumStartsWithNEquals: true,
supSubsRequireOperand: true,
autoSubscriptNumerals: true,
handlers: {
edit: function(){
}
}
};
function initFunction(mathField){
//输入效果
scope.addValue = function(newValue) {
mathField.focus();
if($(".change_btns.active").attr("data-type") == "zhongwen" && /[a-zA-Z]/.test(newValue)){
znValue(newValue);
return false;
}
CapsLockValue==0?'':newValue= newValue.toUpperCase();
if($.trim($("#txt_latex").text()) == ''){
mathField.latex(newValue);
}else {
mathField.write(newValue);
}
$(".mq-root-block var").removeClass(function(index,oldClass){
var reg = /\[a-zA-Z]\b/;
return oldClass.replace(reg,'');//除了reg其他都删除
});
//console.log(mathField.latex());
setPasswordValue(undefined,"add");
setKeyValue();
};
//测试
var showVar = false;
//获取密码输入框的值
scope.showPassword =function() {
showVar = !showVar;
if(showVar){
$(".password-eye").removeClass("fa-eye-slash");
$(".password-eye").addClass("fa-eye");
$("#txt_latex").css("display","block");
$("#txt_latex_pwd").css("display","none")
}else if(!showVar){
$(".password-eye").removeClass("fa-eye");
$(".password-eye").addClass("fa-eye-slash");
$("#txt_latex").css("display","none");
$("#txt_latex_pwd").css("display","block")
}
};
//查找中文字符
var _text = '';
function znValue(obj) {
_text ? _text += obj : _text=obj;
//console.log(_text);
var lists =zn_lists[_text];
if(!lists){
_text=obj;
lists =zn_lists[_text];
//console.log(_text)
}
var str = '<div class="zn_box clearfix"><span>'+_text+'</span><div class="zn_scroll"><ul class="clearfix">';
for (var i=0;i<lists.length;i++){
str+='<li Virtual-Key-Board>'+zn_lists[_text][i]+'</li>'
}
str+='</ul></div>';
if(lists.length>=13){
str+='<a href="javascript:;" class="zn_btn"></a>';
}
str+='</div>';
$(".zn_box").remove();
$(".input_con").append(str);
setPasswordValue(undefined,"add");
setKeyValue();
}
//清空
scope.clearValue = function() {
mathField.latex('');
_text = '';
$(".zn_box").remove();
setPasswordValue("","clear");
setKeyValue();
var display = $('#txt_latex_pwd').css('display');
if(display == "block"){
$(".password-eye").css("display","unset");
}
};
//实现BackSpace键的功能
scope.backspace = function() {
var input = $(this)[0];
var inputVal = input.virtualKeyBoard;
if (inputVal.length<=1)
scope.clearValue();
if(zn_en == 'zn' && _text.length>=1){
if(_text.length == 1){
_text = '';
$(".zn_box").remove();
}else {
_text=_text.substring(0,_text.length-1);
znValue(_text);
}
return false;
}
mathField.keystroke('Backspace');
setPasswordValue(undefined,"del");
setKeyValue();
};
//切换功能
scope.changePanl = function(oj){
mathField.focus();
if(oj =='zhongwen'){
zn_en = 'zn';
if(CapsLockValue ==1){
scope.setCapsLock();
}
$("input[value=韵母]").closest("td").show();
$("input[value="+scope.languageJson.VirtualKeyBoard.Lower+"]").closest("td").hide();//小写
$("input[value="+scope.languageJson.VirtualKeyBoard.Upper+"]").closest("td").hide();//大写
$(".zimu").siblings(".c_panel").hide();
$(".zimu").show();
}else {
zn_en = 'en';
$("input[value=韵母]").closest("td").hide();
$("input[value="+scope.languageJson.VirtualKeyBoard.Lower+"]").closest("td").show();
$("input[value="+scope.languageJson.VirtualKeyBoard.Upper+"]").closest("td").show();
_text='';
}
$("."+oj).siblings(".c_panel").hide();
$("."+oj).show();
};
//设置是否大写的值
scope.setCapsLock = function() {
if (CapsLockValue==0){
CapsLockValue=1;
$("#caps-lock").val(scope.languageJson.VirtualKeyBoard.Lower);//"小写"
$.each($(".i_button_zm"),function(b, c) {
$(c).val($(c).val().toUpperCase());
});
}else{
CapsLockValue=0;
$("#caps-lock").val(scope.languageJson.VirtualKeyBoard.Upper);//"大写"
$.each($(".i_button_zm"),function(b, c) {
$(c).val($(c).val().toLowerCase());
});
}
_text='';
$(".zn_box").remove();
$("input[data-type=zimu]").val(scope.languageJson.VirtualKeyBoard.Chinese);//中文
};
scope.changePanl("zimu");
$(document).on("click",".zn_btn",function () {
$(this).toggleClass('on');
if($(this).hasClass('on')){
$('.zn_box').addClass('on');
$(".zn_scroll ul").slimScroll({
height:'200px'
})
}else {
$('.zn_box').removeClass('on');
}
});
$(document).on("click",".zn_box li",function () {
mathField.typedText($(this).text());
$(".zn_box").remove();
_text = '';
setKeyValue();
});
//关闭
$(".close_keyborad").on("click",function () {
$(".input_con").slideUp(function () {
/*$(".input_box").hide();
$("#txt_Search").val("");*/
$("#key-board").remove();
});
});
$(".mask").on("click",function () {
$(".input_con").slideUp(function () {
$("#key-board").remove();
});
});
$(".huiche").on("click",function () {
$(".input_con").slideUp(function () {
$("#key-board").remove();
});
});
//切换功能
$(".change_btns").on("click",function () {
$(this).addClass("active").siblings().removeClass("active")
scope.changePanl($(this).attr("data-type"));
});
}
/** type:add-添加字符、del-删除字符、clear-清空字符 */
function setPasswordValue(value,type){
//value = transitionChar(value);
var text = "";
if(value == undefined || value == "")
text = $("#txt_latex_pwd").text();
else{
for(var i = 0;i < value.length;i ++){
text += "*";
}
}
if(type == "add")
$("#txt_latex_pwd").text(text+"*");
else if(type == "del"){
if(text == "") return;
text = text.substring(0,text.length-1);
$("#txt_latex_pwd").text(text);
}else if(type == "clear"){
$("#txt_latex_pwd").text("");
}else{
$("#txt_latex_pwd").text(text);
}
}
function setKeyValue(){
if(!(typeof MathQuill === "function")) return;
var input = element[0];
var MQ = MathQuill.getInterface(2);
var mathField = MQ.MathField($("#txt_latex")[0], config);
var latex = mathField.latex();
latex = transitionChar(latex);
input.value = replaceSymbol(latex);
scope.virtualKeyBoard = input.value;
}
//去掉特殊字符与空格;如:"\sup "=>sup
function replaceSymbol(value){
//去除非\s的空格
var reg = /\s/g;
if(reg.test(value)){
var reg2 = /\\[\s]/g;
if(reg2.test(value)){
value = value.replace(reg2,'[KongG]');//占位符
}
value = value.replace(reg,'');//去除空格
value = value.replace(/\[KongG\]/g,' ');//占位符替换为空格
}
//去掉所有\
value = value.replace(/[\\]/g,'');
return value;
}
//符号转#{}含义
var symbolMeaning = [
{key:"\"",value:"#34"},
{key:"_",value:"#95"},
{key:"{",value:"#123"},
{key:"}",value:"#125"}
];
function transitionMeaning(res){
if(symbolMeaning){
for(var i = 0; i < symbolMeaning.length;i++){
var reg = eval("/"+symbolMeaning[i].key+"/g");
if(reg.test(res)){
res = res.replace(reg,symbolMeaning[i].value);
}
}
}
return res;
}
//#{}含义转符号
function transitionChar(res){
if(symbolMeaning){
symbolMeaning.forEach(function(item){
var reg = eval("/"+item.value+"/g");
if(reg.test(res)){
res = res.replace(reg,item.key);
}
});
}
return res;
}
//点击控件外,隐藏控件
function clickOther(){
$(document).bind("click", function (e) {
var target = $(e.target);
var attr = target.attr("Virtual-Key-Board");
if(attr == undefined){
if (target.closest("#key-board").length == 0) {
$(".input_con").slideUp(function () {
$("#key-board").remove();
});
}
}else{
if($(".gearDate").length > 0) {//关闭时间选择控件
$(".gearDate").remove();
}
}
});
}
element.bind('click', function() {
if(!(typeof MathQuill === "function")) return;
if(window.navigator.userAgent.indexOf("Windows") != -1) return;
clickOther();
//删除已打开的虚拟键盘
if($("#key-board")[0] != undefined)
$("#key-board").remove();
var input = $(this)[0];
loadKeyBoardHtml(input);
var MQ = MathQuill.getInterface(2);
var mathField = MQ.MathField($("#txt_latex")[0], config);
//将光标移到最后
var txtDom = $(this)[0];
setCaretPosition(txtDom,txtDom.value.length);
setTimeout(function(){
mathField.focus();
},300);
initFunction(mathField);
//输入框是password类型隐藏输入字符
var type = input.type;
if(type == "password"){
$("#txt_latex").hide();
$("#txt_latex_pwd").show();
}else{
$("#txt_latex").show();
$("#txt_latex_pwd").hide();
}
mathField.latex('');
$(".input_box").show();
$(".input_con").slideDown();
//var val = input.value;
var val = transitionMeaning(input.value);
setPasswordValue(val,"default");
//setKeyValue();
if($.trim(val) !=''){
var el = $(this).find('.mq-selectable').text();
if(el){
var txt = el.substr(0,el.length-1).substr(1,el.length-1);
}else {
var txt = val;
}
mathField.latex(transitionMeaning(txt));
scope.virtualKeyBoard = transitionChar(txt);
}
scope.saveValue = function(){
var latex = mathField.latex();
latex = transitionChar(latex);
input.value = latex.replace(/[\\]/g,"");
scope.virtualKeyBoard = input.value;
//$(".input_box").hide();
$("#key-board").remove();
};
});
//获取光标位置
function getCursorPosition (textDom) {
var cursorPos = 0;
if (document.selection) {
// IE Support
textDom.focus ();
var selectRange = document.selection.createRange();
selectRange.moveStart ('character', -textDom.value.length);
cursorPos = selectRange.text.length;
}else if (textDom.selectionStart || textDom.selectionStart == '0') {
// Firefox support
cursorPos = textDom.selectionStart;
}
return cursorPos;
}
// 设置光标位置
function setCaretPosition(textDom, pos){
if(textDom.setSelectionRange) {
// IE Support
textDom.focus();
textDom.setSelectionRange(pos, pos);
}else if (textDom.createTextRange) {
// Firefox support
var range = textDom.createTextRange();
range.collapse(true);
range.moveEnd('character', pos);
range.moveStart('character', pos);
range.select();
}
}
}
};
}
]);
/**
* 滑块
* 使用方法<rangeslider min="1" max="30" value="7" rang-value="rangeValues"></rangeslider>
* min为滑块最小值
* max为滑块最大值
* step为滑块
* value为滑块默认值
* rang-value为ng-modl绑定对象
* */
nurseDirective.directive('rangeslider',['$document',
function($document){
return{
restrict: 'EA',
replace:true,
template:'<div style="margin: 20px 0px;">' +
'<input class="data-rangeslider" type="range" min="0" max="100" step="1">'+
'<ul class="range-slider-ul"><!--<li ng-repeat="item in ruler">{{item}}</li>--></ul>'+
'</div>',
scope:{
min : "=",
max : "=",
step : "=",
value : "=",
rangValue : "="
},
link:function(scope,element){
var selector = ".data-rangeslider";
var $inputRange = $(selector);
var languageJson = angular.fromJson(sessionStorage.getItem("languageJson"));
//默认属性
$inputRange.attr({
min: scope.min == undefined ? 0 : scope.min,
max: scope.max == undefined ? 100 : scope.max,
step: scope.step == undefined ? 1 : scope.step,
value: scope.value == undefined ? 0 : scope.value
});
//标尺数组
var length = parseInt(scope.max);
var myDate = new Date();
//获取当前月
var month = myDate.getMonth()+1;
for(var i = 1; i <= length; i++){
month ++;
element.find(".range-slider-ul").append("<li>"+month+languageJson.AlarmRecord.Month+"</li>");
if(month >= 12) month = 0;
}
var width = parseFloat(100 / length);
element.find(".range-slider-ul li").css("width",width+"%");
// Example functionality to demonstrate a value feedback
// and change the output's value.
function valueOutput(element) {
var value = element.value;
scope.rangValue = value;
}
// Initial value output
for (var i = $inputRange.length - 1; i >= 0; i--) {
valueOutput($inputRange[i]);
}
// Update value output
$document.on('input', selector, function(e) {
valueOutput(e.target);
});
// Initialize the elements
$inputRange.rangeslider({
polyfill: false
});
}
}
}
]);
/*
* Stick-Click = "'#ID'"
* 1为跳转位置ID名称
* 2滚动条DIV添加ClassName = Stick-Click
*/
nurseDirective.directive('stickClick',['$document',
function($document){
return{
restrict:'A',
scope:{
stickClick : "="
},
link:function(scope,element){
element.bind('click', function(){
if($("#page-wrapper").length > 0 && $("#page-wrapper").css('overflow') != 'hidden'){
var offsetTop = $(scope.stickClick)[0].offsetTop;
$("#page-wrapper").animate({scrollTop: offsetTop+'px'}, 500);
}else{
if(scope.stickClick.indexOf("_top") > 0)
$(scope.stickClick).animate({scrollTop: '0px'}, 500);
else{
var offsetTop = $(scope.stickClick)[0].offsetTop;
$('#rollBtn_top').animate({scrollTop: offsetTop+'px'}, 500);
}
}
});
}
}
}
]);
/*
* Full-Screen
* */
nurseDirective.directive('fullScreen',['$document',
function($document){
return{
restrict:'A',
link:function(scope,element){
//进入全屏
function intoFullScreen(){
var de = document.documentElement;
if (de.requestFullscreen) {
de.requestFullscreen();
} else if (de.mozRequestFullScreen) {
de.mozRequestFullScreen();
} else if (de.webkitRequestFullScreen) {
de.webkitRequestFullScreen();
} else if(de.msRequestFullscreen){
de.msRequestFullscreen();
}
sessionStorage.setItem("FullScreen","false");
}
//退出全屏
function exitFullScreen(){
var de = document;
if (de.exitFullscreen) {
de.exitFullscreen();
} else if (de.mozCancelFullScreen) {
de.mozCancelFullScreen();
} else if (de.webkitCancelFullScreen) {
de.webkitCancelFullScreen();
} else if(de.msExitFullscreen){
de.msExitFullscreen();
}
sessionStorage.setItem("FullScreen","true");
}
function getSystemName(){
var name = "unknown";
var userAgent = window.navigator.userAgent;
if (userAgent.indexOf("Windows NT 10.0")!= -1){
name = "Windows 10";
}else if (userAgent.indexOf("Windows NT 6.2") != -1){
name = "Windows 8";
}else if (userAgent.indexOf("Windows NT 6.1") != -1){
name = "Windows 7";
}else if (userAgent.indexOf("Windows NT 6.0") != -1){
name = "Windows Vista";
}else if (userAgent.indexOf("Windows NT 5.1") != -1){
name = "Windows XP";
}else if (userAgent.indexOf("Windows NT 5.0") != -1){
name = "Windows 2000";
}else if (userAgent.indexOf("Mac") != -1){
name = "Mac/iOS";
}else if (userAgent.indexOf("X11") != -1){
name = "UNIX";
}else if (userAgent.indexOf("Linux") != -1){
name = "Linux";
}
return name;
}
/* 是否显示全屏按钮 */
scope.isShowFullScreen = function(){
var name = getSystemName();
if(name.indexOf("Windows") == -1)
return false;
return true;
};
element.bind('click', function(){
if(sessionStorage.getItem("FullScreen") == "true" ||
sessionStorage.getItem("FullScreen") == undefined){
intoFullScreen();
}else{
exitFullScreen();
}
});
}
}
}
]);
/*
* <table Table-Fixed-Header="tableFixedHeader" ></table>
* tableFixedHeader : {
* className : 'container-fluid',//包含滚动条的类名如
* scrollTop : 200,//滚动条滚动TOP距离大小后显示表头
* top:98//表格定位top大小该值为iView版本
* }
* */
nurseDirective.directive('tableFixedHeader',['$compile',
function($compile){
return{
restrict:'A',
scope:{
tableFixedHeader : "="
},
link:function(scope,element){
function loadTableHeader(){
if(element[0] == undefined) return;
if(element.length > 0 && element[0].parentNode)
scope.tableFixedHeader.clientHeight = element[0].parentNode.clientHeight;
var ths = getTableTh(element);
var width = element[0].parentNode.clientWidth;
var className = element[0].className;
var headerTable =
"<table ng-show=\"isShowThead\" class=\""+className+"\" style=\"position: fixed;z-index: 1;top: "+scope.tableFixedHeader.top+"px;width: "+width+"px;\">" +
" <thead>" +
" <tr>";
if(ths){
ths.forEach(function(th){
//th.width th.name
headerTable += " <th width=\""+th.width+"px\">"+th.name+"</th>";
});
}
headerTable +=
" </tr>" +
" </thead>" +
"</table>";
headerTable = $compile(headerTable)(scope);
element[0].parentNode.appendChild(headerTable[0]);
}
function getTableTh(element){
var ths = [];
if(element[0].childNodes){
element[0].childNodes.forEach(function(thead){
if(thead.localName == 'thead'){
if(thead.childNodes){
thead.childNodes.forEach(function(tr){
if(tr.localName == 'tr'){
if(tr.childNodes){
tr.childNodes.forEach(function(th){
if(th.localName == 'th'){
//th.scrollWidth th.innerText
var t = {
width : th.scrollWidth,
name : th.innerText
};
ths.push(t);
}
});
}
}
});
}
}
})
}
return ths;
}
var is = true;
scope.isShowThead = false;
$("."+scope.tableFixedHeader.className).scroll(function(){
var scrollTop = $(this).scrollTop();
if(scrollTop > parseInt(scope.tableFixedHeader.scrollTop) &&
scrollTop < parseInt(scope.tableFixedHeader.clientHeight))
scope.isShowThead = true;
else
scope.isShowThead = false;
if(is && scope.isShowThead){
loadTableHeader();
is = false;
}
});
}
}
}
]);
/* 页面加载 */
nurseDirective.directive('pageLoad',['$rootScope',
function ($rootScope) {
return {
restrict: 'A',
link: function(scope, element) {
$rootScope.$on('$stateChangeSuccess', function() {
$('.page-load').hide();
$('#wrapper').show();
});
}
};
}
]);
/**
* 滑动时间控件
* <date-Picker id="date" date-value="DateObj" date-type="date" min-date="1970-1-1" max-date="2029-12-31" />
* */
nurseDirective.directive('datePicker',[
function(){
return{
restrict: 'EA',
replace:true,
template:'<input class="form-control time_setting" type="text">',
scope:{
id : "@",
dateValue : "=",
dateType : "@",
minDate : "@",
maxDate : "@",
isClear : "@"
},
link:function(scope,element){
scope.dateType = scope.dateType == undefined ? 'date' : scope.dateType;
scope.minDate = scope.minDate == undefined ? '1970-1-1' : scope.minDate;
scope.maxDate = scope.maxDate == undefined ? new Date().getFromFormat('yyyy-mm-dd') : scope.maxDate;
scope.isClear = scope.isClear == undefined ? 'false' : scope.isClear;
setTimeout(function(){
//默认属性
var $inputRange = element;
$inputRange.attr({
id : scope.id == undefined ? 'dateTime' : scope.id,
value : scope.dateValue == undefined ? '' : getDateString(scope.dateValue,scope.dateType)
});
var calendar = new datePicker();
calendar.init({
'trigger': '#'+scope.id, /*按钮选择器,用于触发弹出插件*/
'type': scope.dateType,/*模式date日期datetime日期时间time时间ym年月*/
'minDate':scope.minDate,/*最小日期*/
'maxDate':scope.maxDate,/*最大日期*/
'isClear':scope.isClear,
'onSubmit':function(){/*确认时触发事件*/
scope.dateValue = calendar.value;
},
'onClose':function(){/*取消时触发事件*/
},
'onClear':function(){/*清空时触发事件*/
scope.dateValue = "";
element[0].value = "";
}
});
},300);
function getDateString(date,type){
if(date == undefined || date == "") return "";
if(type == "ym"){
return new Date(date).getFromFormat('yyyy-mm');
}else if(type == "date"){
return new Date(date).getFromFormat('yyyy-mm-dd');
}else if(type == "datetime"){
return new Date(date).getFromFormat('yyyy-mm-dd hh:ii:ss');
}else{
return new Date(date).getFromFormat('hh:ii:ss');
}
}
}
}
}
]);
/* 新增文字 */
nurseDirective.directive('newtestsetter',['$modal','balert',
function($modal,balert){
return {
restrict : 'A',
link: function(scope,element){
var setDlg = undefined;
function initFunction(){
scope.newtext = {};
function getPartNum(typename){
var num=1;
var cparts=scope.diagram.parts;
if(cparts == undefined){
scope.diagram.parts = [];
return 1;
}
for(var i=0;i<cparts.length;i++)
{
if(cparts[i].id.indexOf(typename)==-1)continue;
var partnum=parseInt(cparts[i].id.replace(typename,''));
if(partnum>=num){
num=partnum+1;
}
}
return num;
}
scope.save = function(){
var cofg ={};
cofg.id="textpart"+getPartNum("textpart");
cofg.type="textpart";
cofg.left="5";
cofg.top="80";
cofg.width="85";
cofg.height="90";
cofg.zindex="1";
cofg.options="control:"+scope.newtext.control;
scope.diagram.parts.push(cofg);
setDlg.hide();
scope.resetParts();
};
}
element.bind('click',function(){
initFunction();
setDlg = $modal({
scope: scope,
templateUrl: 'partials/newtestsetter.html',
show: false
});
setDlg.$promise.then(setDlg.show);
});
}
}
}
]);
nurseDirective.directive("textpart", ['diagramService','global',
function(diagramService,global) {
return {
restrict: "AE",
replace: true,
templateUrl: "partials/textpart.html",
link: function(scope, elem, attrs, modelCtrl) {
var cfg = diagramService.initPart(scope, elem, attrs);
console.log(cfg);
if (cfg === undefined) return;
var control = global.getpara('control',cfg.options);
console.log(control);
elem.find(".control-value").html(control);
scope.$watch('diagram.edit', function(newValue, oldValue, scope) {
diagramService.updateEditStatus(elem, newValue);
});
}
};
}
]);
nurseDirective.directive('textpartsetter', ['$modal','baseTypeService','balert','ConfigureMoldService','global',
function($modal,baseTypeService,balert,ConfigureMoldService,global) {
return {
restrict: 'A',
link: function(scope, element) {
var setDlg = null;
var setDlgs = null;
scope.data = {};
function getPartConfig(diagram, id) {
var found = _.find(diagram.parts, function(part) {
return part.id === id;
});
return found;
}
function initFunction(){
var partid= element.parent().parent().attr("partid");
scope.partid=partid;
var cofg = getPartConfig(scope.diagram, scope.partid);
console.log(cofg);
var control = global.getpara('control',cofg.options);
scope.updtext = {
control : control
};
scope.save = function(){
var cofg = getPartConfig(scope.diagram, scope.partid);
cofg.options="control:"+scope.updtext.control;
setDlg.hide();
scope.resetParts();
};
}
element.bind('click', function() {
initFunction();
setDlg = $modal({
scope: scope,
templateUrl: 'partials/textpartsetter.html',
show: false
});
setDlg.$promise.then(setDlg.show);
});
}
}
}
]);
/* 新增3D机柜 */
nurseDirective.directive('newthreedsetter', ['$modal', 'balert',
function ($modal, balert) {
return {
restrict: 'A',
link: function (scope, element) {
var setDlg = undefined;
function initFunction() {
scope.newtext = {};
function getPartNum(typename) {
var num = 1;
var cparts = scope.diagram.parts;
if (cparts == undefined) {
scope.diagram.parts = [];
return 1;
}
for (var i = 0; i < cparts.length; i++) {
if (cparts[i].id.indexOf(typename) == -1) continue;
var partnum = parseInt(cparts[i].id.replace(typename, ''));
if (partnum >= num) {
num = partnum + 1;
}
}
return num;
}
scope.save = function () {
var cofg = {};
cofg.id = "threeddiagram" + getPartNum("threeddiagram");
cofg.type = "threeddiagram";
cofg.left = "5";
cofg.top = "80";
cofg.width = "400";
cofg.height = "600";
cofg.zindex = "1";
cofg.options = {
model: './img/3d/molds/mdc_2.fbx',
background: null,
cabinets:[]
};
// "model:" + scope.newtext.control + ',background:null';
scope.diagram.parts.push(cofg);
setDlg.hide();
scope.resetParts();
};
}
element.bind('click', function () {
initFunction();
setDlg = $modal({
scope: scope,
templateUrl: 'partials/newthreedsetter.html',
show: false
});
setDlg.$promise.then(setDlg.show);
});
}
}
}
]);
/**
* 3D MDC组态实现可点击机柜的3D MDC
* @Author: Eddy
* @Date: 2021-06-03 09:33:16
*/
nurseDirective.directive("threeddiagram", ['$state','$stateParams','$rootScope','diagramService', 'global','balert','deviceService',
function ($state,$stateParams,$rootScope,diagramService, global,balert,deviceService) {
return {
restrict: "AE",
replace: true,
templateUrl: "partials/threedDiagram.html",
link: function (scope, elem, attrs, modelCtrl) {
var cfg = diagramService.initPart(scope, elem, attrs);
if (cfg === undefined) return;
const div = elem.find(".three-d-diagram")[0];
const buttons = elem.find('.mdc-3d-button');
scope.cabinets = cfg.options.cabinets;
//const diagram = new Threed(div, cfg.options.model, cfg.options.background, buttons);
// 加载3D模型
const backgroundImage = null;
const threed = new MDCThreeD({
container: div,
background: backgroundImage,
buttons: buttons,
modelFile: cfg.options.model,
environmentLight: true,
touchDiscolor: '#007ACC',
scope: scope,
labelOptions:{
// 贴图大小理论上越大文本越清楚同时越大GPU内存使用越大
// 当加载过慢时可以是适当下调此值
// 宽高比例与标签面模型比例成正比,当差距过大时文本发生扭曲
width: 1024,
height: 280,
// 文本颜色
color: '#FFFFFF',
// 文本字体
font: '微软雅黑',
// 字体大小, 当为null 时 字体高度为height的百分之80
fontSize: null,
// 字体粗体
bold: true
}
});
deviceService.GetShowConfigureMold().then(function(mold){
scope.NewMdcConfigures = mold;
threed.loadObjectLabels();
});
// 机柜点击事件
scope.cabinetClk = function(id){
var cabinet = _.findWhere(scope.cabinets,{no:id});
if(cabinet == undefined){
balert.show('danger',scope.languageJson.ThreedDiagram.PleaseConfigure,3000);//'请配置!'
}else{
getConfigureMold(cabinet.configId,cabinet.partConfigId);
}
};
function getConfigureMold(configId,partConfigId){
if(scope.NewMdcConfigures == undefined || scope.NewMdcConfigures.length == 0){
balert.show('danger',scope.languageJson.ThreedDiagram.PleaseConfigure,3000);//'请配置!'
return;
}
var parent = _.findWhere(scope.NewMdcConfigures,{configId:configId});
if(parent == undefined){
balert.show('danger',scope.languageJson.ThreedDiagram.PleaseConfigure,3000);//'请配置!'
return;
}
var deviceId = "",deviceBaseTypeId = "",parentId = "",configUrl = "";
if((partConfigId == undefined || partConfigId == "undefined") && parent.configUrl != ""){
configUrl = parent.configUrl;
deviceId = configUrl.replace(/[^0-9]/ig,'');
deviceBaseTypeId = deviceId;
}else{
var part = _.findWhere(parent.parts,{configId:partConfigId});
if(part == undefined){
balert.show('danger',scope.languageJson.ThreedDiagram.PleaseConfigure,3000);//'请配置!'
return;
}
configUrl = part.configUrl;
deviceId = part.deviceId;
deviceBaseTypeId = part.baseTypeId;
parentId = part.parentId;
}
window.location.href = configUrl;
sessionStorage.setItem("executedDiagramView", true);
if(part != undefined){
$rootScope.$emit("selectMenu", parent.configId,part.configId);
}else{
$rootScope.$emit("selectMenu", parent.configId,undefined);
}
if(part != undefined){
setSelectMnue(part.configId);
}else{
setSelectMnue(parent.configId);
}
setDiagramView(deviceId,configId,deviceBaseTypeId,part.configUrl);
}
function setSelectMnue(configId){
deviceService.GetShowConfigureMold().then(function (data) {
_.find(data,function(item){
if(item.configId == configId){
$rootScope.$emit("selectMenu", item.configId,undefined);
return;
}else{
if(item.parts.length > 0){
_.find(item.parts,function(part){
if(part.configId == configId){
$rootScope.$emit("selectMenu", item.configId,part.configId);
return;
}
});
}
}
});
});
}
function setDiagramView(devId,parentId,devBaseType,configUrl) {
var param = devBaseType + '.' + devId;
if(devBaseType.indexOf(".table") != -1)
param = 'table.' + devId;
var cfg = {};
diagramService.getDiagramConfig(param).then(function(data) {
if (data){
cfg.diagram = data;
cfg.diagram.deviceBaseTypeId = devBaseType;
cfg.diagram.deviceId = devId;
cfg.diagram.parentId = parentId;
$stateParams.diagramview = 'device.diagram';
$state.go($stateParams.diagramview, cfg);
}
});
}
scope.$on("$destroy", function () {
//diagram.dispose();
threed.dispose();
});
scope.$watch('diagram.edit', function (newValue, oldValue, scope) {
diagramService.updateEditStatus(elem, newValue);
});
}
};
}
]);
/**
* 3D MDC组态配置
* @Author: Eddy
* @Date: 2021-06-03 09:33:16
*/
nurseDirective.directive('threeddiagramsetter', ['$modal', 'uploadService', 'balert', 'ImageManageService','deviceService',
function ($modal, uploadService, balert, ImageManageService, deviceService) {
return {
restrict: 'A',
link: function (scope, element) {
var setDlg = null;
var showImgFileDlg = undefined;
function getPartConfig(diagram, id) {
var found = _.find(diagram.parts, function (part) {
return part.id === id;
});
return found;
}
// 复制机柜份数的组态 @Author:Eddy @Date:2021/06/13
function copyCabinetConfig(){
deviceService.GetShowConfigureMold().then(function(mold){
scope.ConfigureMolds = [];
scope.ConfigureParts = [];
for(var i = 1;i <= scope.threed.cabinetNumber;i++){
scope.ConfigureMolds.push(mold);
var configId = _.findWhere(scope.cabinets,{no:i}).configId;
if(configId == undefined){
scope.ConfigureParts.push(mold.parts);
}else{
var m = _.findWhere(mold,{configId:configId});
if(m != undefined){
scope.ConfigureParts.push(m.parts);
}
}
}
});
}
function parse3DMDCCabinet(cfg){
if(cfg.options.cabinets == undefined || cfg.options.cabinets.length == 0){
scope.threed.cabinetNumber = 20;
}else{
scope.threed.cabinetNumber = cfg.options.cabinets.length;
}
if(cfg.options.cabinets == undefined || cfg.options.cabinets.length == 0){
var result = [];
for(var i = 1;i <= scope.threed.cabinetNumber;i++){
var cabinet = _.findWhere(cfg.options.cabinets,{no:i});
if(cabinet == undefined){
result.push({
no:i,
cabinetName:"机柜"+i,
configId:undefined,
partConfigId:undefined
});
}else{
result.push({
no:i,
cabinetName:"机柜"+i,
configId:cabinet.configId,
partConfigId:cabinet.partConfigId
});
}
}
return result;
}else{
return cfg.options.cabinets;
}
}
function initFunction(cfg) {
// 获取机柜cabinet[n]的机柜编号的n值集合
scope.cabinets = parse3DMDCCabinet(cfg);
// 复制机柜份数的组态
copyCabinetConfig();
scope.imgFilePath = undefined;
scope.showImgFile = function () {
scope.imgFiles = {
catalog: "img/diagram",
imageFile: 'fffffffffff'
};
showImgFileDlg = $modal({
scope: scope,
templateUrl: 'partials/showImgFile.html',
show: false
});
showImgFileDlg.$promise.then(showImgFileDlg.show);
scope.changeCatalog(scope.imgFiles.catalog);
};
scope.changeCatalog = function (catalog) {
ImageManageService.LoadImagesByPath(catalog).then(function (data) {
scope.ImageFiles = data;
});
};
scope.clickImage = function (imageFile, $event) {
scope.imgFiles.imageFile = imageFile;
$($event.currentTarget).parent().find('div').removeClass("select-image");
$($event.currentTarget).addClass("select-image");
};
scope.selectImageFile = function () {
if (scope.imgFiles == undefined || scope.imgFiles.imageFile == undefined) {
//'请选择图片。'
balert.show('danger', scope.languageJson.Configuration.LocalImage.SelectError, 3000);
return;
}
scope.imgFilePath = scope.imgFiles.imageFile;
showImgFileDlg.hide();
};
// 选择组态事件
scope.changeParent = function(configId,i){
if(scope.ConfigureMolds.length > 0){
var mold = _.findWhere(scope.ConfigureMolds[i],{configId:configId});
if(mold != undefined && mold.parts != undefined){
scope.ConfigureParts[i] = mold.parts;
}else{
scope.ConfigureParts[i] = undefined;
}
}
};
// 是否显示NULL
scope.isShowNull = function(configId){
if(scope.ConfigureMolds && scope.ConfigureMolds.length > 0){
var mold = _.findWhere(scope.ConfigureMolds[0],{configId:configId});
if(mold != undefined && mold.parts != undefined){
return mold.configUrl != "";
}
return false;
}
};
// 机柜数变化 @Author:Eddy @Date:2021/06/07
scope.changeCabinetNumber = function(number){
var result = [];
for(var i = 1;i <= number;i++){
var cabinet = _.findWhere(scope.cabinets,{no:i});
if(cabinet == undefined){
result.push({
no:i,
configId:undefined,
partConfigId:undefined
});
}else{
result.push({
no:i,
configId:cabinet.configId,
partConfigId:cabinet.partConfigId
});
}
}
scope.cabinets = result;
// 复制机柜份数的组态
copyCabinetConfig();
};
scope.changeCabinetName = function(cabinet,i){
var cabinet = _.findWhere(scope.ConfigureParts[i],{configId:cabinet.partConfigId});
if(cabinet != undefined){
return cabinet.configName;
};
};
}
element.bind('click', function () {
scope.threed = {};
var partid = element.parent().parent().attr("partid");
scope.partid = partid;
var cofg = getPartConfig(scope.diagram, scope.partid);
scope.imagepart = cofg.options.background;
scope.file = undefined;
initFunction(cofg);
scope.threed.model = cofg.options.model;
scope.upload = function () {
var file = scope.file;
if (file === undefined) return;
if (file.size > 512000) {
//'修改的图片不能大于500K,请压缩尺寸后再修改。'
balert.show('danger', scope.languageJson.Configuration.ImageControl.SizeError, 3000);
return;
}
scope.loading = true;
uploadService.uploadFile(scope.file).then(function (data) {
//uploadService.deleteUploadFile($scope.diagram.page.bgImage);
cofg.options.background = scope.imagepart = data;
//'修改成功。'
balert.show('success', scope.languageJson.Configuration.ImageControl.Succeed, 2000);
scope.resetParts();
setDlg.hide();
scope.loading = false;
});
};
scope.clear = function () {
cofg.options.background = scope.imagepart = null;
balert.show('success', scope.languageJson.Configuration.ImageControl.Succeed, 2000);
scope.resetParts();
setDlg.hide();
scope.loading = false;
}
scope.updateModel = function(){
cofg.options.model = scope.threed.model;
balert.show('success', scope.languageJson.Configuration.ImageControl.Succeed, 2000);
scope.resetParts();
scope.loading = false;
}
scope.uploadImgFile = function () {
if (scope.imgFilePath == undefined) return;
cofg.options.background = scope.imagepart = scope.imgFilePath;
//'修改成功。'
balert.show('success', scope.languageJson.Configuration.ImageControl.Succeed, 2000);
scope.resetParts();
setDlg.hide();
};
scope.save = function(){
cofg.options.model = scope.threed.model;
cofg.options.cabinets = scope.cabinets;
balert.show('success', scope.languageJson.Configuration.ImageControl.Succeed, 2000);
scope.resetParts();
setDlg.hide();
};
setDlg = $modal({
scope: scope,
templateUrl: 'partials/threeddiagramsetter.html',
show: false
});
setDlg.$promise.then(setDlg.show);
});
}
}
}
]);
/** 新增温场组态 */
nurseDirective.directive('newtempmapsetter',['$modal', 'balert', 'base64', 'equipmentTemplateService', 'baseTypeService',
function ($modal, balert, base64, equipmentTemplateService, baseTypeService) {
return {
restrict: 'A',
link: function (scope, element) {
var setDlg = undefined, showColorSelectDlg = undefined, bindDeviceDialog = undefined;
// 避免函数名相同冲突,打开弹出框声明一次
function initFunction(){
scope.TempMap = {
fontSize: 16,
colorRange: "[[20,\"#31b0d5\"],[30,\"#5cb85c\"],[100,\"#ec971f\"]]",
showValue: true,
table:[[{'DI':'','SI':''}]]
};
//region 函数
// 添加/删除列
scope.colClk = function(opt){
if(opt == "+"){
_.find(scope.TempMap.table,function(item){
item.push({'DI':'','SI':''});
})
}else{
_.find(scope.TempMap.table,function(item){
if(item.length > 1){
item.splice(item.length-1,1);
}
})
}
};
// 添加/删除行
scope.rowClk = function(opt){
if(opt == "+"){
var tmp = angular.copy(scope.TempMap.table[scope.TempMap.table.length - 1]);
scope.TempMap.table.push(tmp);
}else{
if(scope.TempMap.table.length > 1){
scope.TempMap.table.splice(scope.TempMap.table.length - 1,1);
}
}
};
//仪表盘 盘颜色
showColorSelectDlg = $modal({
scope:scope,
templateUrl:'partials/showMoreColorBox.html',
show:false
});
scope.showColorSelect = function(data){
scope.ColorSelect = angular.fromJson(data);
showColorSelectDlg.$promise.then(showColorSelectDlg.show);
scope.addColorClick = function(){
var maxVal = 1;
if(scope.ColorSelect.length > 0){
maxVal = scope.ColorSelect[scope.ColorSelect.length-1][0] + 1;
}
scope.ColorSelect.push([maxVal,"#ffffff"]);
};
scope.delColorClick = function($index){
scope.ColorSelect.splice($index,1);
};
scope.saveColorSelect = function(){
scope.TempMap.colorRange = angular.toJson(scope.ColorSelect);
showColorSelectDlg.hide();
};
};
//region 选择信号
scope.configMdc = {};
equipmentTemplateService.GetEquipmentTemplatesByBaseType("").then(function(devices){
scope.configMdc.devices = devices;
});
scope.selectSignalClk = function(device,x,y){
scope.bindTitle = scope.languageJson.TempMap.AddTempMap;
scope.configMdc = {
devices: scope.configMdc.devices,
deviceId: device.DI,
signalId: device.SI,
x: x,
y: y
};
scope.changeDevice(device.DI);
bindDeviceDialog = $modal({
scope: scope,
templateUrl: 'partials/bindDevice.html',
show: false
});
bindDeviceDialog.$promise.then(bindDeviceDialog.show);
};
scope.changeDevice = function (id) {
baseTypeService.GetSinalByEquipmentId(id).then(function (data) {
scope.configMdc.signals = data;
});
};
scope.saveBindDevice = function () {
if (scope.configMdc.signalId == undefined || scope.configMdc.signalId == "") {
balert.show('danger', scope.languageJson.MDC.Prompt.SelectSignal, 3000);/*"未绑定信号!"*/
return;
}
scope.TempMap.table[scope.configMdc.x][scope.configMdc.y].DI = scope.configMdc.deviceId;
scope.TempMap.table[scope.configMdc.x][scope.configMdc.y].SI = scope.configMdc.signalId;
bindDeviceDialog.hide();
};
scope.deleteBindDevice = function(){
scope.TempMap.table[scope.configMdc.x][scope.configMdc.y].DI = "";
scope.TempMap.table[scope.configMdc.x][scope.configMdc.y].SI = "";
bindDeviceDialog.hide();
}
//endregion
//endregion
};
element.bind('click', function () {
initFunction();
setDlg = $modal({
scope: scope,
templateUrl: 'partials/newtempmapsetter.html',
show: false
});
setDlg.$promise.then(setDlg.show);
scope.save = function(){
var cofg = {};
cofg.id = "tempmap" + getPartNum("tempmap");
cofg.type = "tempmappart";
cofg.left = "5";
cofg.top = "80";
cofg.width = scope.TempMap.table[0].length*50;
cofg.height = scope.TempMap.table.length*50;
cofg.zindex = "1";
cofg.binding = parseTempMapSignal(scope.TempMap.table);
cofg.options = base64.encode(angular.toJson(scope.TempMap));
scope.diagram.parts.push(cofg);
setDlg.hide();
scope.resetParts();
};
function getPartNum(typename) {
var num = 1;
var cparts = scope.diagram.parts;
if (cparts == undefined) {
scope.diagram.parts = [];
return 1;
}
for (var i = 0; i < cparts.length; i++) {
if (cparts[i].id.indexOf(typename) == -1) continue;
var partnum = parseInt(cparts[i].id.replace(typename, ''));
if (partnum >= num) {
num = partnum + 1;
}
}
return num;
}
function parseTempMapSignal(table){
var result = "";
_.find(table,function(item){
_.find(item,function(i){
result += "SI:"+i.SI+"|DI:"+i.DI+"&";
});
});
return result;
};
});
}
}
}
]);
/** 温场组态实例 */
nurseDirective.directive("tempmappart",['diagramService', '$compile', 'base64',
function(diagramService, $compile, base64){
return {
restrict: "AE",
replace: true,
templateUrl: "partials/tempmappart.html",
link: function (scope, elem, attrs, modelCtrl) {
var cfg = diagramService.initPart(scope, elem, attrs);
if (cfg === undefined) return;
var tempMap = angular.fromJson(base64.decode(cfg.options));
//console.log(tempMap);
// 创建表格
var tableHtml = createTable(tempMap,attrs.partid);
function createTable(tempMap,currpartid){
var result = "";
if(tempMap && tempMap.table){
var fontSize = tempMap.fontSize;
var showValue = tempMap.showValue;
var colorRange = tempMap.colorRange;
_.find(tempMap.table,function(temp){
var tr = "<tr style='font-size:"+fontSize+"px;'>";
if(temp){
_.find(temp,function(map){
tr += "<td style='font-size:"+fontSize+"px;background-image: radial-gradient({{tempMapColor(\""+currpartid+"\",\""+map.DI+"\",\""+map.SI+"\",\""+base64.encode(colorRange)+"\")}}, transparent);'>{{tempMapValue('"+currpartid+"','"+map.DI+"','"+map.SI+"','"+showValue+"')}}</td>";
});
}
tr += "</tr>";
result += tr;
});
}
return result;
};
//console.log(tableHtml);
$compile(tableHtml)(scope).appendTo(elem.find(".temp-map .table"));
// 返回实时值
scope.tempMapValue = function(currpartid,deviceId,signalId,showValue){
if(showValue && showValue != "true") return "";
var value = _.findWhere(scope.binddata, {partId:currpartid,deviceId:deviceId,signalId:signalId});
if(value){
if(value.floatValue){
return value.floatValue;
}
}
return "";
};
// 返回实时值对应颜色
scope.tempMapColor = function(currpartid,deviceId,signalId,colorRange){
var result = "transparent";
var colorRange = angular.fromJson(base64.decode(colorRange));
colorRange = _.sortBy(colorRange,function(item){return parseFloat(item[0]);});
var value = _.findWhere(scope.binddata, {partId:currpartid,deviceId:deviceId,signalId:signalId});
if(value){
_.find(colorRange,function(item){
if(result == "transparent" && parseFloat(value.floatValue) <= parseFloat(item[0])){
result = item[1];
}
});
// 超出最大值
if(result == "transparent" && colorRange.length > 0){
result = colorRange[colorRange.length-1][1];
}
}
return result;
};
scope.$watch('diagram.edit', function (newValue, oldValue, scope) {
diagramService.updateEditStatus(elem, newValue);
});
}
}
}
]);
/** 修改温场组态 */
nurseDirective.directive("tempmappartsetter",['$modal', 'base64', 'equipmentTemplateService', 'baseTypeService',
function($modal, base64, equipmentTemplateService, baseTypeService){
return {
restrict: 'A',
link: function (scope, element) {
var setDlg = undefined, showColorSelectDlg = undefined, bindDeviceDialog = undefined;
function initFunction(){
function getPartConfig(diagram, id) {
var found = _.find(diagram.parts, function (part) {
return part.id === id;
});
return found;
}
var partid = element.parent().parent().attr("partid");
scope.partid = partid;
var cfg = getPartConfig(scope.diagram, scope.partid);
scope.TempMap = angular.fromJson(base64.decode(cfg.options));
//region 函数
// 添加/删除列
scope.colClk = function(opt){
if(opt == "+"){
_.find(scope.TempMap.table,function(item){
item.push({'DI':'','SI':''});
})
}else{
_.find(scope.TempMap.table,function(item){
if(item.length > 1){
item.splice(item.length-1,1);
}
})
}
};
// 添加/删除行
scope.rowClk = function(opt){
if(opt == "+"){
var tmp = angular.copy(scope.TempMap.table[scope.TempMap.table.length - 1]);
scope.TempMap.table.push(tmp);
}else{
if(scope.TempMap.table.length > 1){
scope.TempMap.table.splice(scope.TempMap.table.length - 1,1);
}
}
};
//仪表盘 盘颜色
showColorSelectDlg = $modal({
scope:scope,
templateUrl:'partials/showMoreColorBox.html',
show:false
});
scope.showColorSelect = function(data){
scope.ColorSelect = angular.fromJson(data);
showColorSelectDlg.$promise.then(showColorSelectDlg.show);
scope.addColorClick = function(){
var maxVal = 1;
if(scope.ColorSelect.length > 0){
maxVal = scope.ColorSelect[scope.ColorSelect.length-1][0] + 1;
}
scope.ColorSelect.push([maxVal,"#ffffff"]);
};
scope.delColorClick = function($index){
scope.ColorSelect.splice($index,1);
};
scope.saveColorSelect = function(){
scope.TempMap.colorRange = angular.toJson(scope.ColorSelect);
showColorSelectDlg.hide();
};
};
//region 选择信号
scope.configMdc = {};
equipmentTemplateService.GetEquipmentTemplatesByBaseType("").then(function(devices){
scope.configMdc.devices = devices;
});
scope.selectSignalClk = function(device,x,y){
scope.bindTitle = scope.languageJson.TempMap.AddTempMap;
scope.configMdc = {
devices: scope.configMdc.devices,
deviceId: device.DI,
signalId: device.SI,
x: x,
y: y
};
scope.changeDevice(device.DI);
bindDeviceDialog = $modal({
scope: scope,
templateUrl: 'partials/bindDevice.html',
show: false
});
bindDeviceDialog.$promise.then(bindDeviceDialog.show);
};
scope.changeDevice = function (id) {
baseTypeService.GetSinalByEquipmentId(id).then(function (data) {
scope.configMdc.signals = data;
});
};
scope.saveBindDevice = function () {
if (scope.configMdc.signalId == undefined || scope.configMdc.signalId == "") {
balert.show('danger', scope.languageJson.MDC.Prompt.SelectSignal, 3000);/*"未绑定信号!"*/
return;
}
scope.TempMap.table[scope.configMdc.x][scope.configMdc.y].DI = scope.configMdc.deviceId;
scope.TempMap.table[scope.configMdc.x][scope.configMdc.y].SI = scope.configMdc.signalId;
bindDeviceDialog.hide();
};
scope.deleteBindDevice = function(){
scope.TempMap.table[scope.configMdc.x][scope.configMdc.y].DI = "";
scope.TempMap.table[scope.configMdc.x][scope.configMdc.y].SI = "";
bindDeviceDialog.hide();
}
//endregion
//endregion
scope.save = function(){
var cofg = getPartConfig(scope.diagram, scope.partid);
cofg.binding = parseTempMapSignal(scope.TempMap.table);
cofg.options = base64.encode(angular.toJson(scope.TempMap));
scope.resetParts();
setDlg.hide();
};
function parseTempMapSignal(table){
var result = "";
_.find(table,function(item){
_.find(item,function(i){
result += "SI:"+i.SI+"|DI:"+i.DI+"&";
});
});
return result;
};
};
element.bind('click', function () {
initFunction();
setDlg = $modal({
scope: scope,
templateUrl: 'partials/tempmappartsetter.html',
show: false
});
setDlg.$promise.then(setDlg.show);
});
}
}
}
]);
nurseDirective.directive("selectCasement",['baseTypeService',
function(baseTypeService){
return{
restrict: 'AE',
replace:true,
template:'<div class="select-casement-tree">'+
'<div class="select-casement-wrap" ng-click="showOptions()">'+
'<div class="select-casement">'+
'<span class="input-tips">{{languageJson.selectCasement.select}}</span><span class="input-item" ng-repeat="item in selectItem">{{item}}</span>'+
'</div>'+
'</div>'+
'<i class="fa remove fa-remove" ng-click="empty()"></i>'+
'<i class="fa chevron {{isChevron ? \'fa-chevron-up\' : \'fa-chevron-down\'}}" ng-click="showOptions()"></i>'+
'<div ng-show="isChevron" class="select-casement-options">'+
'<div class="select-options">'+
'<div class="options-left">'+
'<div class="select-search"><input type="type" class="form-control" placeholder="{{languageJson.selectCasement.inputKeyWord}}" ng-model="filterName" Virtual-Key-Board="filterName"/></div>'+
'<div class="scroll-easy">'+
'<ul class="options-device">'+
'<li ng-repeat="item in inputModel | filter:{\'name\':filterName}" ng-class="activeCurrent(item.value)">'+
'<span ng-click="showParts(item)">{{item.name}}</span><i class="fa fa-chevron-right"></i>'+
'</li>'+
'</ul>'+
'</div>'+
'</div>'+
'<div class="options-right">'+
'<div class="select-search"><input type="type" class="form-control" placeholder="{{languageJson.selectCasement.inputKeyWord}}" ng-model="filterName2" Virtual-Key-Board="filterName2"/></div>'+
'<div class="scroll-easy">'+
'<ul class="options-signal">'+
'<li ng-repeat="item in inputPartModel | filter:{\'name\':filterName2}">'+
'<input type="checkbox" ng-model="item.isCheck" ng-click="selectPart(item,item.isCheck)"/><span ng-click="selectPart(item)">{{item.name}}</span>'+
'</li>'+
'</ul>'+
'</div>'+
'</div>'+
'</div>'+
'</div>'+
'</div>',
scope:{
inputModel : "=",
selectModel : "=",
inputPartModel : "=",
loadPartEvent : "&",
inputQueryEvent : "&",
outputModel : "="
},
link:function(scope,element){
scope.languageJson = angular.fromJson(sessionStorage.getItem('languageJson'));
scope.selectModel = {};
scope.outputModel = [];
scope.selectItems = [];// 下拉框选中项
scope.isChevron = false;// 下拉框箭头状态
// 改变下拉框箭头状态
scope.showOptions = function(){
scope.isChevron = !scope.isChevron;
if(!scope.isChevron) scope.inputQueryEvent();
};
// 显示子级事件
scope.showParts = function(item){
scope.selectModel = item;
setTimeout(function () {
scope.loadPartEvent();
},100);
};
scope.activeCurrent = function(value){
if(scope.selectModel != undefined && scope.selectModel.value == value)
return "active";
};
// 子级选中事件
scope.selectPart = function(item,is){
if(is == undefined)
item.isCheck = item.isCheck == undefined ? true : !item.isCheck;
else
item.isCheck = is;
// 获取父级是否存在
var device = _.findWhere(scope.outputModel,{value:scope.selectModel.value});
if(device == undefined){
scope.outputModel.push({
name:scope.selectModel.name,
value:scope.selectModel.value,
parts:[item]
})
}else{
// 获取子级是否存在
var signal = _.findWhere(device.parts,{value:item.value});
if(signal == undefined){
device.parts.push(item);
}else{
var i = device.parts.indexOf(signal);
device.parts.splice(i, 1);
// 没有子集时,删除父级
if(device.parts.length == 0){
var j = scope.outputModel.indexOf(device);
scope.outputModel.splice(j, 1);
}
}
}
//console.log(scope.outputModel);
loadSelectItems(scope.outputModel);
}
// 下拉框选中项
function loadSelectItems(data){
scope.selectItem = [];
if(data && data.length > 0){
$(".select-casement-tree .input-tips").hide();
$(".select-casement-tree .remove").show();
_.find(data,function(item){
var name = item.name+"-";
_.find(item.parts,function(part){
scope.selectItem.push(name+part.name);
});
});
}else{
$(".select-casement-tree .input-tips").show();
$(".select-casement-tree .remove").hide();
}
}
loadSelectItems(scope.outputModel);
// 清空所有选项
scope.empty = function(){
scope.outputModel = [];
loadSelectItems([]);
scope.showParts(scope.selectModel);
scope.inputQueryEvent();
}
// 点击控件外,隐藏下拉框
$(document).bind("click",function(e){
if($(e.target).closest(".select-casement-tree").length == 0){
if(scope.isChevron){
scope.isChevron = false;
scope.inputQueryEvent();
}
}
});
}
}
}
]);
nurseDirective.directive("addReceiverModle",['$modal','employeeService','$timeout','bconfirm',function($modal,employeeService,$timeout,bconfirm){
return{
restrict: 'AE',
replace:true,
templateUrl:'partials/addReceiverModle.html',
scope:{
selectedModel:"=",
},
link:function(scope,element){
function initDirective(){
// if(!scope.selectedModel) scope.selectedModel = null
scope.languageJson = angular.fromJson(sessionStorage.getItem("languageJson"));
scope.showReceiverModle = false
scope.receiversList = []
scope.selectedName = ''
parseReceivers()
}
initDirective()
//接收者名称显示格式
function parseReceivers(){
scope.receiversList = scope.selectedModel
if(scope.receiversList.length>0){
scope.receiversList.forEach(function(item){
scope.selectedName += '['+item.EmployeeName+']'
})
}
}
var addRecipientDialog = $modal({
scope: scope,
templateUrl: 'partials/addRecipient.html',
show: false
});
//获取所有接收者列表
scope.addRecipient = function () {
//每次增加前重新获取接收者
employeeService.getAllEmployees().then(function (data) {
var result = data;
if (result == "fail to get all employees") {
balert.show('danger', scope.languageJson.AlarmNotice.EditorCtrl.Serial.Failed, 3000); /*'获取接收者失败,请检查连接是否正常!'*/
} else {
scope.CandidateEmployees = [];
var allEmployees = parseMobileEmployees(data);
_.find(allEmployees, function (aitem) {
var found = false;
_.find(scope.receiversList, function (sitem) {
if (sitem.EmployeeId == aitem.EmployeeId) {
found = true;
return;
}
});
if (!found) {
scope.CandidateEmployees.push(aitem);
}
});
addRecipientDialog.$promise.then(addRecipientDialog.show);
}
});
};
function parseMobileEmployees(data) {
var dataArray = [];
data.forEach(function (element, index) {
if (element.Mobile != undefined && element.Mobile != "") {
var employee = {};
employee.Selected = false;
employee.EmployeeId = element.EmployeeId;
employee.EmployeeName = element.EmployeeName;
employee.Mobile = element.Mobile;
employee.Email = element.Email;
dataArray.push(employee);
}
});
return dataArray;
}
//添加接收者
scope.addRecipientToList = function () {
_.find(scope.CandidateEmployees, function (item) {
if (item.Selected) {
scope.receiversList.push(item);
scope.selectedName += '['+item.EmployeeName+']'
// scope.selectedModel += item.EmployeeName + '|' + item.Mobile + '|' + item.EmployeeId + ';'
addRecipientDialog.hide();
return;
}
});
scope.receiversList.forEach(function(item){
scope.selectedModel
})
}
//每次添加一个接收者 控制添加顺序
scope.selectRecipient = function (id) {
scope.CandidateEmployees.forEach(function (item) {
if (item.EmployeeId == id) {
item.Selected = true;
} else {
item.Selected = false;
}
});
};
//移除接收者
scope.deleteReceiver = function(receiver){
bconfirm.show(scope, scope.languageJson.AlarmNotice.EditorCtrl.NetNotifyFilter.Confirm + receiver.EmployeeName + "] ?").then(function (data) {
if (data) {
scope.receiversList.forEach(function(item,index){
if(receiver.EmployeeId == item.EmployeeId){
var subStr = '['+item.EmployeeName+']'
scope.receiversList.splice(index,1)
scope.selectedName = scope.selectedName.replace(subStr,'')
}
})
}
});
}
//点击显示/隐藏
$timeout(function () {
var oModel = document.getElementById('model')
var oMenu = document.getElementById('menu')
document.addEventListener("click",function(){
oModel.style.display = "none";
oMenu.classList.remove('active')
})
oModel.onclick = function(e){
e.stopPropagation()
}
oMenu.onclick = function(e){
if(oModel.style.display == 'none'){
oModel.style.display = "block";
oMenu.classList.add('active')
}
else{
oModel.style.display = 'none'
oMenu.classList.remove('active')
}
e.stopPropagation()
};
});
}
}
}]);
nurseDirective.directive("exField",['$modal','balert',
function($modal,balert){
return{
restrict: 'AE',
replace:true,
template:'<div><button>xxx</button></div>',
scope:{
inputModel : "=",
selectModel : "=",
inputPartModel : "=",
loadPartEvent : "&",
inputQueryEvent : "&",
outputModel : "="
},
link:function(scope,element){
var all = 9
var item = 2
var a = all%item==0?(all/item):(Math.floor(all/item)+1);
console.log(a)
}
}
}
]);
nurseDirective.directive("playlistItem",['$modal','ImageManageService','equipmentTemplateService','baseTypeService','uploadService','balert',
function($modal,ImageManageService,equipmentTemplateService,baseTypeService,uploadService,balert){
return{
restrict: 'AE',
template: '<div>'+
'<div ng-if="bgImgSetting" class="col-md-12">'+
'<div class="panel panel-default">'+
'<div class="panel-heading">{{languageJson.NovaSetting.backgroundImgSetting}}</div>'+
'<form class="form-horizontal panel-body">'+
'<div class="form-group col-md-12">'+
'<label class="control-label col-md-2">{{languageJson.NovaSetting.selectBackground}}: </label>'+
'<div class="col-md-3">'+
'<input class="form-control" ngfile type="file" accept="image/*" />'+
'</div>'+
'<div class="col-md-1">'+
'<button type="button" class="btn btn-primary" ng-click = "upload()">{{languageJson.NovaSetting.upload}}</button>'+
'</div>'+
'<div class="col-md-3 topology-img-div" ng-click="showImgFile()" style="left: 15px;border-radius: 20px;">'+
'<img ng-src="/{{playListitem}}" class="topology-img">'+
'<div class="topology-expand-div">'+
'<img ng-src="/{{playListitem}}">'+
'</div>'+
'</div>'+
'</div>'+
'</form>'+
'</div>'+
'</div>'+
'<ng-include src="vForm">'+
'</div>',
scope: {
itemType: '=',
playListitem: '='
},
link: function(scope, element, attrs){
//选择数据类型
scope.txtTypeChange = function(){
if(scope.playListitem.part.type == "0" && scope.playListitem.part.data){
scope.signalInfo =
{
'deviceId':scope.playListitem.part.data.signal.split('-')[0],
'signalId':scope.playListitem.part.data.signal.split('-')[1]
}
scope.changeEquipment(scope.signalInfo.deviceId)
}
}
scope.vForm = ''
function init(){
scope.activeStyleBar = true
if(scope.itemType == 'img'){
scope.vForm = 'partials/addPlayListIMG.html'
}
if(scope.itemType == 'time'){
getColor()
scope.vForm = 'partials/addPlayListTIME.html'
}
if(scope.itemType == 'txt'){
if(scope.playListitem.part.fontBGColor == '0')//背景透明 背景色为0
{
scope.playListitem.part.BgHyaline = '0'
scope.isHyaline = true
}
else{
scope.isHyaline = false
scope.playListitem.part.BgHyaline = '-1'
}
equipmentTemplateService.GetEquipmentTemplatesByBaseType("").then(function (data) {
scope.devicesList = data
scope.txtTypeChange()
getColor()
scope.vForm = 'partials/addPlayListTXT.html'
});
}
}
init()
scope.$on("fileSelected", function (event, msg) {
scope.imgFile = msg;
});
if (scope.languageJson == undefined)
scope.languageJson = angular.fromJson(sessionStorage.getItem('languageJson'));
scope.bgImgSetting = false
if(scope.itemType == 'bgImg'){
scope.bgImgSetting = true
}
//选择图片 start
var showImgFileDlg = $modal({
scope: scope,
templateUrl: 'partials/showImgFile.html',
show: false
});
scope.showImgFile = function () {
scope.imgFiles = {
catalog: "img/diagram",
imageFile: undefined
};
showImgFileDlg.$promise.then(showImgFileDlg.show);
scope.changeCatalog(scope.imgFiles.catalog);
};
scope.changeCatalog = function (catalog) {
ImageManageService.LoadImagesByPath(catalog).then(function (data) {
scope.ImageFiles = data;
});
};
scope.clickImage = function(imageFile,$event){
scope.imgFiles.imageFile = imageFile;
$($event.currentTarget).parent().find('div').removeClass("select-image");
$($event.currentTarget).addClass("select-image");
};
scope.selectImageFile = function(){
if(scope.imgFiles == undefined || scope.imgFiles.imageFile == undefined){
//'请选择图片。'
balert.show('danger', scope.languageJson.Configuration.LocalImage.SelectError,3000);
return;
}
scope.imgFilePath = scope.imgFiles.imageFile;
if(scope.itemType == "bgImg"){
scope.playListitem = scope.imgFilePath
}else{
scope.playListitem.part.images = scope.imgFilePath
}
showImgFileDlg.hide();
};
//选择图片 end
//上传图片
scope.upload = function() {
var file = scope.imgFile;
if (file === undefined) return;
var patrn=/[\u4E00-\u9FA5]|[\uFE30-\uFFA0]/gi;
if(patrn.exec(file.name)){
balert.show('danger', '图片名不能包含中文!',3000);
return
}
if(file.size>512000) {
//'修改的图片不能大于500K,请压缩尺寸后再修改。'
balert.show('danger', scope.languageJson.Configuration.ImageControl.SizeError,3000);
return;
}
uploadService.uploadFile(scope.imgFile).then(function(data) {
// cofg.options = scope.imagepart = data;
balert.show('success', scope.languageJson.NovaSetting.uploadSuess,2000);
// scope.loading = false;
});
};
//切换设备
scope.changeEquipment = function(deviceId){
baseTypeService.GetSinalByEquipmentId(deviceId).then(function(data){
scope.signalList = data;
});
};
//选择信号
scope.selectedSignals = function(signal){
if(!signal) return
var signalInfo =
{
"name":signal.signalName+'',
"signal":signal.deviceId+'-'+signal.signalId,
"unit":signal.unit
}
scope.playListitem.part.data = signalInfo
}
///选择字体风格
scope.selectFontStyle = function(isSelectd,index,value){
if(isSelectd){
scope.playListitem.part.fontWeight.fontWeight.splice(index,0,value)
}else{
if(index == 0){
scope.playListitem.part.fontWeight.fontWeight.shift()
}else{
scope.playListitem.part.fontWeight.fontWeight.pop()
}
}
}
//选择颜色
function getColor(){
scope.fontColor = '#' + scope.playListitem.part.fontColor
scope.fontBgColor = '#' + scope.playListitem.part.fontBGColor
}
scope.selectFontColor = function(value){
scope.playListitem.part.fontColor = value.replace(/#/,'')
}
scope.selectFontBgColor = function(value){
scope.playListitem.part.fontBGColor = value.replace(/#/,'')
}
scope.checkBoxCli = function(value){
if(value.target.checked){
scope.playListitem.part.BgHyaline = '0'
scope.isHyaline = true
}else{
scope.isHyaline = false
scope.playListitem.part.BgHyaline = '-1'
}
}
}
}
}]);
nurseDirective.directive("newtopologysetter2",['$modal','balert','baseTypeService','uploadService','ImageManageService','ConfigureMoldService',
function($modal,balert,baseTypeService,uploadService,ImageManageService,ConfigureMoldService){
return {
restrict : 'A',
link : function(scope, element){
var setDlg,showImgFileDlg;
scope.Topology = {};
function init(){
scope.Topology = {
title: "",
fontSize: "15",
config:[]
};
scope.deviceList = []
scope.device = {
diviceId:'',
event:''
}
var parentId = scope.diagram.parentId;
if(scope.diagram.deviceBaseTypeId == "1004" ||
(parseInt(scope.diagram.deviceBaseTypeId) >= 8888 && parseInt(scope.diagram.deviceBaseTypeId) < 9999))
parentId = "";
ConfigureMoldService.GetPartEquipments(parentId).then(function(data){
scope.deviceList = _.sortBy(data,function(item){return item.configName;});
scope.Topology.DeviceId = scope.diagram.deviceId;
if(scope.Topology.DeviceId == undefined)
scope.Topology.DeviceId = scope.deviceList[0].equipmentId;
});
scope.imgFilePath = undefined;
scope.showImgFile = function(varName){
scope.varName = varName;
scope.imgFiles = {
catalog : "img/diagram",
imageFile : undefined
};
showImgFileDlg = $modal({
scope: scope,
templateUrl: 'partials/showImgFile.html',
show: false
});
showImgFileDlg.$promise.then(showImgFileDlg.show);
scope.changeCatalog(scope.imgFiles.catalog);
};
scope.changeCatalog = function(catalog){
ImageManageService.LoadImagesByPath(catalog).then(function(data){
scope.ImageFiles = data;
});
};
scope.clickImage = function(imageFile,$event){
scope.imgFiles.imageFile = imageFile;
$($event.currentTarget).parent().find('div').removeClass("select-image");
$($event.currentTarget).addClass("select-image");
};
scope.selectImageFile = function(){
if(scope.imgFiles == undefined || scope.imgFiles.imageFile == undefined){
//'请选择图片。'
balert.show('danger', scope.languageJson.Configuration.TopologyControl.ErrorImage,3000);
return;
}
scope.Topology.config[scope.varName].imgUrl = scope.imgFiles.imageFile
// eval("scope."+scope.varName+" = scope.imgFiles.imageFile");
showImgFileDlg.hide();
};
}
function getPartNum(typename){
var num=1;
var cparts=scope.diagram.parts;
if(cparts == undefined){
scope.diagram.parts = [];
return 1;
}
for(var i=0;i<cparts.length;i++)
{
if(cparts[i].id.indexOf(typename)==-1)continue;
var partnum=parseInt(cparts[i].id.replace(typename,''));
if(partnum>=num){
num=partnum+1;
}
}
return num;
}
element.bind('click',function(){
init();
setDlg = $modal({
scope: scope,
templateUrl: 'partials/newtopologysetter2.html',
show: false
});
setDlg.$promise.then(setDlg.show);
scope.file = undefined
scope.save = function(){
if(scope.Topology.fontSize == undefined || scope.Topology.fontSize == "")
scope.Topology.fontSize = "15";
if(scope.Topology.rotate == undefined || scope.Topology.rotate == "")
scope.Topology.rotate = "0";
if(scope.Topology.config.length <= 0){
//'事件不能为空!'
balert.show('danger', scope.languageJson.Configuration.TopologyControl.ErrorSignal,3000);
return;
}
var cofg ={};
cofg.id = "topology"+getPartNum("topology");
cofg.type = "topologypartnew";
cofg.left = "5";
cofg.top = "80";
cofg.width = "80";
cofg.height = "120";
cofg.binding = getBinding()
cofg.options = getOptions()
scope.diagram.parts.push(cofg);
scope.resetParts();
setDlg.hide();
};
scope.uploadImgFile = function(){
if (scope.file == undefined) {
balert.show('danger', scope.languageJson.Configuration.ImageControl.UploadError, 3000);
return;
}
if (scope.file.size > 512000) {
//'新增图片不能大于500K,请压缩尺寸后再修改。'
balert.show('danger', scope.languageJson.Configuration.ImageControl.SizeError, 3000);
} else {
uploadService.uploadFile(scope.file).then(function (data) {
if(data){
balert.show('success', scope.languageJson.ImportConfigure.Prompt.Success, 3000);
}
});
}
}
//信号绑定
function getBinding(){
var binding = ""
for (var i = 0; i < scope.Topology.config.length; i++) {
if(!isAdded(binding,i)){
binding += "SI:" + scope.Topology.config[i].signalId + "|DI:" + scope.Topology.config[i].deviceId + "&"
}
}
binding = binding.substring(0,binding.lastIndexOf('&'))
return binding
}
function isAdded(binding,i){
if(i == 0) return false
var id = ""
id = "SI:" + scope.Topology.config[i].signalId + "|DI:" + scope.Topology.config[i].deviceId
if(binding.indexOf(id) > -1){
return true
}
return false
}
function getOptions(){
var option = {
title:scope.Topology.title,
fontSize:scope.Topology.fontSize,
config:getConfig(scope.Topology.config)
}
return angular.toJson(option)
}
function getConfig(configs){
var result = []
configs.forEach(function(item){
result.push({
deviceId:item.deviceId,
signalId:item.signalId,
upValue:item.upValue,
imgUrl:item.imgUrl
})
})
return result
}
scope.addConfig = function() {
var config = {
deviceId:scope.deviceList[0].equipmentId,//设备ID
signalId:"",//信号ID
upValue:"0",//值、含义,
imgUrl:"img/diagram/up.png"
}
scope.Topology.config.push(config)
scope.changeDevice(scope.Topology.config[scope.Topology.config.length-1])
}
scope.removeConfig = function(index){
scope.Topology.config.splice(index,1)
}
scope.changeDevice = function(device){
baseTypeService.getSignalSwitchByDeviceId(device.deviceId).then(function(data){
device.events = data;
device.signalId = data[0].SignalId
scope.changeSignal(device)
});
};
scope.changeSignal = function(device){
baseTypeService.GetSignalMeaningsByDIdSId(device.deviceId,device.signalId).then(function(data){
device.meanigs = data
device.upValue = data[0].StateValue
});
};
});
}
}
}
]);
nurseDirective.directive("edittopology",['$modal','balert','baseTypeService','uploadService','ImageManageService','ConfigureMoldService',
function($modal,balert,baseTypeService,uploadService,ImageManageService,ConfigureMoldService){
return {
restrict : 'A',
link : function(scope, element){
var setDlg,showImgFileDlg;
scope.Topology = {};
function getPartConfig(diagram, id) {
var found = _.find(diagram.parts, function(part) {
return part.id === id;
});
return found;
}
function init(){
setDlg = $modal({
scope: scope,
templateUrl: 'partials/edittopology.html',
show: false
});
scope.Topology = {
title: "",
fontSize: "15",
config:[]
};
scope.deviceList = []
scope.device = {
diviceId:'',
event:''
}
var parentId = scope.diagram.parentId;
var partid = element.parent().parent().attr("partid");
scope.partid = partid;
var cfg = getPartConfig(scope.diagram, scope.partid);
var option = angular.fromJson(cfg.options)
scope.Topology = option
if(scope.diagram.deviceBaseTypeId == "1004" ||
(parseInt(scope.diagram.deviceBaseTypeId) >= 8888 && parseInt(scope.diagram.deviceBaseTypeId) < 9999))
parentId = "";
ConfigureMoldService.GetPartEquipments(parentId).then(function(data){
scope.deviceList = _.sortBy(data,function(item){return item.configName;});
scope.Topology.DeviceId = scope.diagram.deviceId;
if(scope.Topology.DeviceId == undefined)
scope.Topology.DeviceId = scope.deviceList[0].equipmentId;
});
//获取所有配置信息
getConfigEvents(0)
function getConfigEvents(i) {
baseTypeService.getSignalSwitchByDeviceId(scope.Topology.config[i].deviceId).then(function(events){
scope.Topology.config[i].events = events
baseTypeService.GetSignalMeaningsByDIdSId(scope.Topology.config[i].deviceId,scope.Topology.config[i].signalId).then(function(meanigs){
scope.Topology.config[i].meanigs = meanigs
i++
if(i < scope.Topology.config.length){
getConfigEvents(i)
}else{
setDlg.show()
}
});
});
}
scope.imgFilePath = undefined;
scope.showImgFile = function(varName){
scope.varName = varName;
scope.imgFiles = {
catalog : "img/diagram",
imageFile : undefined
};
showImgFileDlg = $modal({
scope: scope,
templateUrl: 'partials/showImgFile.html',
show: false
});
showImgFileDlg.$promise.then(showImgFileDlg.show);
scope.changeCatalog(scope.imgFiles.catalog);
};
scope.changeCatalog = function(catalog){
ImageManageService.LoadImagesByPath(catalog).then(function(data){
scope.ImageFiles = data;
});
};
scope.clickImage = function(imageFile,$event){
scope.imgFiles.imageFile = imageFile;
$($event.currentTarget).parent().find('div').removeClass("select-image");
$($event.currentTarget).addClass("select-image");
};
scope.selectImageFile = function(){
if(scope.imgFiles == undefined || scope.imgFiles.imageFile == undefined){
//'请选择图片。'
balert.show('danger', scope.languageJson.Configuration.TopologyControl.ErrorImage,3000);
return;
}
scope.Topology.config[scope.varName].imgUrl = scope.imgFiles.imageFile
// eval("scope."+scope.varName+" = scope.imgFiles.imageFile");
showImgFileDlg.hide();
};
}
function getPartNum(typename){
var num=1;
var cparts=scope.diagram.parts;
if(cparts == undefined){
scope.diagram.parts = [];
return 1;
}
for(var i=0;i<cparts.length;i++)
{
if(cparts[i].id.indexOf(typename)==-1)continue;
var partnum=parseInt(cparts[i].id.replace(typename,''));
if(partnum>=num){
num=partnum+1;
}
}
return num;
}
element.bind('click',function(){
init();
scope.file = undefined
scope.save = function(){
if(scope.Topology.fontSize == undefined || scope.Topology.fontSize == "")
scope.Topology.fontSize = "15";
if(scope.Topology.rotate == undefined || scope.Topology.rotate == "")
scope.Topology.rotate = "0";
if(scope.Topology.config.length <= 0){
//'事件不能为空!'
balert.show('danger', scope.languageJson.Configuration.TopologyControl.ErrorSignal,3000);
return;
}
var cofg = getPartConfig(scope.diagram, scope.partid);
// cofg.id = "topology"+getPartNum("topology");
// cofg.type = "topologypartnew";
// cofg.left = "5";
// cofg.top = "80";
// cofg.width = "80";
// cofg.height = "120";
cofg.binding = getBinding()
cofg.options = getOptions()
// scope.diagram.parts.push(cofg);
scope.resetParts();
setDlg.hide();
};
scope.uploadImgFile = function(){
if (scope.file == undefined) {
balert.show('danger', scope.languageJson.Configuration.ImageControl.UploadError, 3000);
return;
}
if (scope.file.size > 512000) {
//'新增图片不能大于500K,请压缩尺寸后再修改。'
balert.show('danger', scope.languageJson.Configuration.ImageControl.SizeError, 3000);
} else {
uploadService.uploadFile(scope.file).then(function (data) {
if(data){
balert.show('success', scope.languageJson.ImportConfigure.Prompt.Success, 3000);
}
});
}
}
//信号绑定
function getBinding(){
var binding = ""
for (var i = 0; i < scope.Topology.config.length; i++) {
if(!isAdded(binding,i)){
binding += "SI:" + scope.Topology.config[i].signalId + "|DI:" + scope.Topology.config[i].deviceId + "&"
}
}
binding = binding.substring(0,binding.lastIndexOf('&'))
return binding
}
function isAdded(binding,i){
if(i == 0) return false
var id = ""
id = "SI:" + scope.Topology.config[i].signalId + "|DI:" + scope.Topology.config[i].deviceId
if(binding.indexOf(id) > -1){
return true
}
return false
}
function getOptions(){
var option = {
title:scope.Topology.title,
fontSize:scope.Topology.fontSize,
config:getConfig(scope.Topology.config)
}
return angular.toJson(option)
}
function getConfig(configs){
var result = []
configs.forEach(function(item){
result.push({
deviceId:item.deviceId,
signalId:item.signalId,
upValue:item.upValue,
imgUrl:item.imgUrl
})
})
return result
}
scope.addConfig = function() {
var config = {
deviceId:scope.deviceList[0].equipmentId,//设备ID
signalId:"",//信号ID
upValue:"0",//值、含义,
imgUrl:"img/diagram/up.png"
}
scope.Topology.config.push(config)
scope.changeDevice(scope.Topology.config[scope.Topology.config.length-1])
}
scope.removeConfig = function(index){
scope.Topology.config.splice(index,1)
}
scope.changeDevice = function(device){
baseTypeService.getSignalSwitchByDeviceId(device.deviceId).then(function(data){
device.events = data;
device.signalId = data[0].SignalId
scope.changeSignal(device)
});
};
scope.changeSignal = function(device){
baseTypeService.GetSignalMeaningsByDIdSId(device.deviceId,device.signalId).then(function(data){
device.meanigs = data
device.upValue = data[0].StateValue
});
};
});
}
}
}
]);
nurseDirective.directive("topologypartnew",['diagramService',
function(diagramService){
return {
restrict: "AE",
replace: true,
templateUrl: "partials/topologypartnew.html",
link : function(scope, elem, attrs){
var cfg,currpartid,part,partOptions,name,fontSize,config,rotate
initPart()
function initPart(){
cfg = diagramService.initPart(scope, elem, attrs);
if (cfg === undefined) return;
currpartid=scope.partid = attrs.partid;
part = angular.fromJson(cfg)
partOptions = angular.fromJson(part.options)
name = partOptions.title
fontSize = partOptions.fontSize
config = partOptions.config
rotate = 0
}
scope.$watch('binddata', function(newValue, oldValue, scope) {
var value = _.filter(scope.binddata, {partId: currpartid});
if(value.length <= 0) return
var img = ''
///同时满足多个条件默认显示第一个
for (var i = 0; i < config.length; i++) {
var deviceValue = _.find(value, function(device){
return (device.deviceId == config[i].deviceId && device.signalId == config[i].signalId)
});
if(!deviceValue){
initPart()
return
}
// console.log(deviceValue,config[i])
if(parseFloat(deviceValue.floatValue) == parseFloat(config[i].upValue)){
img = config[i].imgUrl
scope.updateDeviceInfo = deviceValue
break
}
}
//图片大小
var height = "calc(100% - 36px)";
var witch = "100%";
if(parseInt(rotate) == 90 || parseInt(rotate) == 270){
height = "100%";
witch = "calc(100% - 25px)";
}
//样式
elem.find('.topology-title').css({
"fontSize": fontSize+"px"
}).text(name);
elem.find('.topology-img').css({
"background-image": "url('" +img + "')",
"transform": "rotate("+rotate+"deg)",
"height":height,
"width":witch,
"-ms-transform": "rotate("+rotate+"deg)", /* IE 9 */
"-moz-transform": "rotate("+rotate+"deg)", /* Firefox */
"-webkit-transform": "rotate("+rotate+"deg)", /* Safari and Chrome */
"-o-transform": "rotate("+rotate+"deg)" /* Opera */
});
});
scope.$watch('diagram.edit', function(newValue, oldValue, scope) {
diagramService.updateEditStatus(elem, newValue);
});
}
}
}
]);