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

15786 lines
684 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

//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);
});
}
}
}
]);