'use strict'; app.controller('watchMapCtrl', ['$rootScope', '$scope', '$http', '$state', '$modal', '$templateCache', '$compile', 'Restangular', 'api_bpm_domain', function($rootScope, $scope, $http, $state, $modal, $templateCache, $compile, Restangular, api_bpm_domain) { // var ip = document.location.protocol + "//" + document.location.hostname + ":8080"; //更改响应时间 function changeTime(txt) { //填充字符串 txt = (txt * 1000).toFixed(0); var time = $("#responseTime"); time.empty(); time.html(txt + "ms"); } //更改响应率 function changePercent(txt) { //填充字符串 txt = (txt * 100).toFixed(2); var percent = $("#packetPercent"); percent.empty(); percent.html(txt + "%"); } //鼠标放上支行点,显示tip // $scope.htmlTooltip = '
2314132432
'; $scope.showBankTip = function(thisObj, id) { // var bankId = $(thisObj).attr("bankId"); // var url = ip + "/service/api/bpm/bpm/getWatchAreaData/" + id; // $.getJSON(url, function(data) { api_bpm_domain.getWatchAreaData(id).then(function(data) { // var data = { "handler": 1, "resolved": 2, "close": 3 }; if (data) { // var name = $(thisObj).attr("name"); // var left = $(thisObj).position().left; // var top = $(thisObj).position().top - 92; // $("#toaster").remove(); //移除之前的toast // var settings = { // timeout: 100000, // toaster: { // 'id': 'toaster', // 'container': 'body', // 'template': '
', // 'class': 'toaster', // 'css': { // 'position': 'absolute', // 'left': thisObj.x, // 'top': thisObj.y - 92, // 'right': '10px', // 'width': '200px', // 'zIndex': 50000 // } // }, // toast: { // 'template': '', // 'css': {}, // 'cssm': {}, // 'csst': { 'fontWeight': 'bold' }, // 'fade': 'slow', // 'display': function($toast) { // return $toast.fadeIn(this.fade); // }, // 'remove': function($toast, callback) { // return $toast.animate({ // opacity: '0', // padding: '0px', // margin: '0px', // height: '0px' // }, { // duration: this.fade, // complete: callback // }); // } // } // }; var handler = $scope.handler = data.handler; //处理中 var resolved = $scope.resolved = data.resolved; //已解决 var close = $scope.close = data.close; //已关闭 var priority = 'info'; settings.toaster.css.left = thisObj.x; settings.toaster.css.top = thisObj.y - 92; // $.toaster({ // priority: priority, // title: name, // message: '处理中:' + handler + '
已解决:' + resolved + // '
已关闭:' + close, // settings: settings // }); } }); } //初始化地图上的点 function initPointer() { // var data = [{ "id": 1, "area": "主院区", "x": 625, "y": 420 }, { "id": 2, "area": "东院区", "x": 650, "y": 250 }, { "id": 3, "area": "同济院区", "x": 250, "y": 350 }, { "id": 4, "area": "商学院", "x": 426, "y": 500 }] // var url = "192.168.3.19:8080/service/api/bpm/bpm/getWatchAreaPosition"; // $.getJSON(url, function(data) { api_bpm_domain.getWatchAreaPosition().then(function(data) { if (data) { $scope.arr = data; $scope.imgName = "green.png"; //移除支行点 // $(".area").remove(); // for (var i = 0; i < $scope.arr.length; i++) { // var bean = $scope.arr[i]; // $scope.width = 150; // $scope.height = 22; // var imgName = "green.png"; // //TODO 一个方法搞定 // $(".showtip").append(""); // } } }); } //计算鼠标相对于body的坐标 function mousePosition(ev) { if (ev.pageX || ev.pageY) { return { x: ev.pageX, y: ev.pageY }; } return { x: ev.clientX + document.body.scrollLeft - document.body.clientLeft, y: ev.clientY + document.body.scrollTop - document.body.clientTop }; } //初始化 function init() { //初始化网络拓扑图数据 initPointer(); //点击其他地方,隐藏设备列表 $("body").click(function(event) { var pos = mousePosition(event), x = pos.x, y = pos.y; var ele = $("#deviceList"), elePos = ele.position(), left = elePos.left, top = elePos.top; // alert("x = " + x + "\ny = " + y); if (x >= left && x <= (left + 500) && y >= top && y <= (top + ele.height())) { //点击了设备列表范围内 return false; } else { ele.hide(); } }); //定时5分钟刷新一次 setTimeout(init, 1000 * 60 * 5); } $(function() { var canvas = document.getElementById('supportHtml5'); if (!canvas.getContext) { $("link").remove(); var body = $("body"); body.empty(); body.append("

您的浏览器不支持HTML5,图表无法展示,请升级到支持HTML5的浏览器,如IE9及以上版本、最新的Chrome、Firefox等浏览器。

"); return false; } if (!(canvas.style.backgroundSize === '')) { alert("您的浏览器不支持CSS3特性,部分功能受到影响。"); return false; } var width = window.screen.width, height = window.screen.height; if (width >= 1920) { $("body").css("overflow-x", "hidden"); } init(); //初始化 }); }]); app.controller('watchListCtrl', ['$rootScope', '$scope', '$http', '$state', '$modal', '$templateCache', '$compile', 'Restangular', 'api_bpm_domain', 'api_bpm_data', function($rootScope, $scope, $http, $state, $modal, $templateCache, $compile, Restangular, api_bpm_domain, api_bpm_data) { // var keydata = "pending"; // $scope.showdivs = function(name, id, num) { // for (var i = 1; i < num + 1; i++) { // document.getElementById(name + i).style.display = "none"; //隐藏其他层 // } // document.getElementById(name + id).style.display = "block"; //显示当前层 // if (id == 1) { // keydata = "pending"; //待接单 // } else if (id == 2) { // keydata = "reassign"; //待处理 // } else if (id == 3) { // keydata = "handler"; //重新指派 // } // $scope.refreshData(keydata); // } //待接单 $scope.refreshData = function() { $scope.myData = []; var defaultFilterData = { "incident": { "statusId": "pending" }, "idx": 0, "sum": 20 }; var fildata = { "incident": { "statusId": "reassign" }, "idx": 0, "sum": 20 }; var fileData = { "incident": { "statusId": "handler" }, "idx": 0, "sum": 20 }; api_bpm_data.fetchDataList("incident", defaultFilterData).then(function(data) { if (data.list) { var myData = Restangular.stripRestangular(data); $scope.myPending = myData.list; } else {} }, function() {}); api_bpm_data.fetchDataList("incident", fildata).then(function(data) { if (data.list) { var myData = Restangular.stripRestangular(data); $scope.myReassign = myData.list; } else {} }, function() {}); api_bpm_data.fetchDataList("incident", fileData).then(function(data) { if (data.list) { var myData = Restangular.stripRestangular(data); $scope.myHandler = myData.list; } else {} }, function() {}); }; $scope.refreshData(); // //待处理 // $scope.refresh = function() { // $scope.myData = []; // api_bpm_data.fetchDataList("incident", defaultFilterData).then(function(data) { // if (data.list) { // var myData = Restangular.stripRestangular(data); // var list = []; // $scope.myData = myData.list; // } else { // // Alert.swal({ // // title: "系统错误", // // text: "请稍后再试!", // // type: "error" // // }); // } // }, function() {}); // }; }]); app.controller('watchweekCtrl', ["$scope", "$rootScope", "$state", "$timeout", "$interval", "$http", "$cookieStore", "Restangular", "api_report", "api_statistic", function($scope, $rootScope, $state, $timeout, $interval, $http, $cookieStore, Restangular, api_report, api_statistic) { api_report.getLicenseKey().then(function(response) { $cookieStore.put('Auth-Token', response.token); $scope.try_async_load(); }); $scope.try_async_load = function() { $scope.my_data = []; api_report.list().then(function(response) { var dataList = Restangular.stripRestangular(response); getRepoRoot(dataList, '/homes/home:admin/ITSM报表'); $scope.repoRoot.name = "事件报表" convertRepoObject($scope.repoRoot); $scope.my_data.push($scope.repoRoot); }); }; $scope.repoRoot = null; function getRepoRoot(repo, path) { angular.forEach(repo, function(value, key) { if (value.path == path) { $scope.repoRoot = value; } else { if ($scope.repoRoot == null && angular.isDefined(value.repoObjects)) { getRepoRoot(value.repoObjects, path); } else { } } }); } function convertRepoObject(repo) { if (angular.isArray(repo)) { angular.forEach(repo, function(value, key) { convertRepoObject(value); }) } else { if (angular.isDefined(repo.name)) { if (repo.name.indexOf(".") >= 0) { repo.label = repo.name.substr(0, repo.name.lastIndexOf(".")); } else { repo.label = repo.name; } //delete repo.name; } if (angular.isDefined(repo.repoObjects)) { repo.children = []; repo.children = repo.repoObjects; delete repo.repoObjects; convertRepoObject(repo.children); } } } function parseDateParameter(parameters) { var result = undefined; if (angular.isArray(parameters)) { // angular.forEach(parmeters,function(param){ // param. // }) } else { result = {}; for (var k in parameters) { if (k.indexOf("Date") > 0) { if (angular.isString(parameters[k])) { result[k] = moment(parameters[k], "YYYYMMDD").format("YYYY-MM-DD"); //result[k] = ''+parameters[k]+'';//= moment(parameters[k], "YYYYMMDD").toDate(); } } } } return result; } function ConvertDateParameter(parameters) { var result = undefined; if (angular.isArray(parameters)) { // } else { result = {}; for (var k in parameters) { if (k.indexOf("Date") > 0) { if (angular.isDate(parameters[k])) { result[k] = moment(parameters[k]).format("YYYYMMDD"); } else if (angular.isString(parameters[k])) { result[k] = parameters[k]; } } } } return result; } var pathuser = "/homes/home:admin/ITSM报表/事件报表/处理人员统计分析.saiku"; var pathstate = "/homes/home:admin/ITSM报表/事件报表/事件状态占比.saiku"; var pathreason = "/homes/home:admin/ITSM报表/事件报表/事件原因.saiku"; var queryUUID; function genUUID() { var uuid = 'xxxxxxxx-xxxx-xxxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8); return v.toString(16); }).toUpperCase(); return uuid; } queryUUID = genUUID(); var workspace = {}; var pathuserkey = []; var pathreasonkey = []; var pathreasonkey = []; var getreportdata = function(key, path) { $scope.isMaskuser = true; $scope.isMaskreason = true; $scope.isMaskreason = true; api_report.getMdx(path, queryUUID).then(function(response) { var mdxquery = Restangular.stripRestangular(response); workspace.query = mdxquery; $scope.shows = false; workspace.query.parameters.paramDateFrom = $scope.starttimes; workspace.query.parameters.paramDateTo = $scope.endtimes; $scope.parameters = parseDateParameter(workspace.query.parameters); weekuser(key, mdxquery); }); } var weekuser = function(keys, mdxquery) { var key = []; api_report.execute(mdxquery).then(function(data) { $scope.rheaders = []; $scope.rRows = []; var reportData = Restangular.stripRestangular(data); if (reportData.cellset == null || reportData.cellset.length == 0) { $scope.shows = true; $scope.empty = "数据为空!" } else { angular.forEach(reportData.cellset, function(item, index) { if (item.length > 1 && index > 0 && item[1].value != '') { key.push([item[0].value, Number(item[1].value)]); } }) } if (keys == 'pathuserkey') { $scope.isMaskuser = false; containerfun(key); } else if (keys == 'pathstatekey') { $scope.isMaskreason = false; statesfun(key); } else if (keys == 'pathreasonkey') { $scope.isMaskreason = false; reasonfun(key); } }) } $scope.parameters = {}; var weeks = new Date().getDay(); $scope.starttimes = moment(new Date().getTime() - 86400000 * (weeks)).format('YYYYMMDD'); $scope.endtimes = moment(new Date()).format('YYYYMMDD'); $scope.parameters.paramDateFrom = $scope.starttimes; $scope.parameters.paramDateTo = $scope.endtimes; $scope.parameters = parseDateParameter($scope.parameters); getreportdata('pathuserkey', pathuser); getreportdata('pathstatekey', pathstate); getreportdata('pathreasonkey', pathreason); //待处理事件饼形图 var containerfun = function(pathuserkey) { $(function() { $('#container').highcharts({ chart: { type: 'pie', options3d: { enabled: true, alpha: 45, beta: 0 } }, title: { text: '待处理事件人员统计图' }, tooltip: { pointFormat: '{series.name}: {point.percentage:.1f}%' }, plotOptions: { pie: { allowPointSelect: true, cursor: 'pointer', depth: 35, dataLabels: { enabled: true, format: '{point.name}' } } }, series: [{ type: 'pie', name: '人员占比', data: pathuserkey }] }); }); } // Create the chart var statesfun = function(pathstatekey) { Highcharts.chart('incidentstates', { chart: { type: 'bar' }, title: { text: '事件状态统计图' }, subtitle: { // text: 'Source: Wikipedia' }, xAxis: { type: 'category', labels: { rotation: -45, style: { fontSize: '13px', fontFamily: 'Verdana, sans-serif' } } }, yAxis: { min: 0, title: { text: '' } }, legend: { enabled: false }, tooltip: { pointFormat: '{point.y}' }, series: [{ name: 'Population', colorByPoint: true, data: pathstatekey, borderWidth: 0, dataLabels: { enabled: false, rotation: -90, color: '#FFFFFF', align: 'right', format: '{point.y}', // one decimal y: 10, // 10 pixels down from the top style: { fontSize: '13px', fontFamily: 'Verdana, sans-serif' } } }] }); } var reasonfun = function(pathreasonkey) { $(function() { $('#incidentreason').highcharts({ chart: { type: 'pie', options3d: { enabled: true, alpha: 45, beta: 0 } }, title: { text: '事件原因统计图' }, tooltip: { pointFormat: '{series.name}: {point.percentage:.1f}%' }, plotOptions: { pie: { allowPointSelect: true, cursor: 'pointer', depth: 35, dataLabels: { enabled: true, format: '{point.name}' } } }, series: [{ type: 'pie', name: '事件原因占比', data: pathreasonkey }], lang: { noData: "Nichts zu anzeigen" //真正显示的文本 }, noData: { // Custom positioning/aligning options position: { //相对于绘图区定位无数据标签的位置。 默认值:[object Object]. align: 'right', verticalAlign: 'bottom' }, // Custom svg attributes attr: { //无数据标签中额外的SVG属性 'stroke-width': 1, stroke: '#cccccc' }, // Custom css style: { //对无数据标签的CSS样式。 默认值:[object Object]. //fontWeight: 'bold', //fontSize: '15px', //color: '#202030' } } }); }); } }]); //月统计图 app.controller('watchmonthCtrl', ["$scope", "$rootScope", "$state", "$timeout", "$interval", "$http", "$cookieStore", "Restangular", "api_report", "api_statistic", function($scope, $rootScope, $state, $timeout, $interval, $http, $cookieStore, Restangular, api_report, api_statistic) { api_report.getLicenseKey().then(function(response) { $cookieStore.put('Auth-Token', response.token); $scope.try_async_load(); }); $scope.try_async_load = function() { $scope.my_data = []; api_report.list().then(function(response) { var dataList = Restangular.stripRestangular(response); getRepoRoot(dataList, '/homes/home:admin/ITSM报表'); $scope.repoRoot.name = "事件报表" convertRepoObject($scope.repoRoot); $scope.my_data.push($scope.repoRoot); }); }; var workspace = {}; $scope.repoRoot = null; function getRepoRoot(repo, path) { angular.forEach(repo, function(value, key) { if (value.path == path) { $scope.repoRoot = value; } else { if ($scope.repoRoot == null && angular.isDefined(value.repoObjects)) { getRepoRoot(value.repoObjects, path); } else { } } }); } function convertRepoObject(repo) { if (angular.isArray(repo)) { angular.forEach(repo, function(value, key) { convertRepoObject(value); }) } else { if (angular.isDefined(repo.name)) { if (repo.name.indexOf(".") >= 0) { repo.label = repo.name.substr(0, repo.name.lastIndexOf(".")); } else { repo.label = repo.name; } //delete repo.name; } if (angular.isDefined(repo.repoObjects)) { repo.children = []; repo.children = repo.repoObjects; delete repo.repoObjects; convertRepoObject(repo.children); } } } function parseDateParameter(parameters) { var result = undefined; if (angular.isArray(parameters)) { // angular.forEach(parmeters,function(param){ // param. // }) } else { result = {}; for (var k in parameters) { if (k.indexOf("Date") > 0) { if (angular.isString(parameters[k])) { result[k] = moment(parameters[k], "YYYYMMDD").format("YYYY-MM-DD"); //result[k] = ''+parameters[k]+'';//= moment(parameters[k], "YYYYMMDD").toDate(); } } } } return result; } function ConvertDateParameter(parameters) { var result = undefined; if (angular.isArray(parameters)) { // } else { result = {}; for (var k in parameters) { if (k.indexOf("Date") > 0) { if (angular.isDate(parameters[k])) { result[k] = moment(parameters[k]).format("YYYYMMDD"); } else if (angular.isString(parameters[k])) { result[k] = parameters[k]; } } } } return result; } var lastmonth = "/homes/home:admin/ITSM报表/事件报表/地点统计.saiku"; var thismonth = "/homes/home:admin/ITSM报表/事件报表/地点统计.saiku"; var incidentchart = "/homes/home:admin/ITSM报表/事件报表/日统计报表.saiku"; var queryUUID; function genUUID() { var uuid = 'xxxxxxxx-xxxx-xxxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8); return v.toString(16); }).toUpperCase(); return uuid; } queryUUID = genUUID(); var pathlastmonthkey = []; var paththismonthkey = []; var pathincidenttimekey = []; var lastmonthtime = { 'starttimes': moment((new Date(moment().startOf('month'))).setMonth((new Date()).getMonth() - 1)).format('YYYYMMDD'), 'endtimes': moment((new Date(moment().startOf('month'))).setMonth((new Date()).getMonth()) - 86400000).format('YYYYMMDD') }; var thismonthtime = { 'starttimes': moment((new Date(moment().startOf('month'))).setMonth((new Date()).getMonth())).format('YYYYMMDD'), 'endtimes': moment(new Date()).format('YYYYMMDD') }; var incidenttime = { 'starttimes': moment(new Date().getTime() - 86400000 * 14).format('YYYYMMDD'), 'endtimes': moment(new Date()).format('YYYYMMDD') }; var thisday = moment(new Date().getTime() + 86400000).format('YYYYMMDD'); var thisdaymine = Date.parse(thisday.substr(4, 2) + "/" + thisday.substr(6, 2) + "/" + thisday.substr(0, 4)) var averages = [ [thisdaymine - 86400000 * 14, 0], [thisdaymine - 86400000 * 13, 0], [thisdaymine - 86400000 * 12, 0], [thisdaymine - 86400000 * 11, 0], [thisdaymine - 86400000 * 10, 0], [thisdaymine - 86400000 * 9, 0], [thisdaymine - 86400000 * 8, 0], [thisdaymine - 86400000 * 7, 0], [thisdaymine - 86400000 * 6, 0], [thisdaymine - 86400000 * 5, 0], [thisdaymine - 86400000 * 4, 0], [thisdaymine - 86400000 * 3, 0], [thisdaymine - 86400000 * 2, 0], [thisdaymine - 86400000 * 1, 0], [thisdaymine, 0] ]; var getreportdata = function(key, thistime, path) { // $scope.isMasklastmon = true; // $scope.isMaskthismon = true; // $scope.isMaskincident = true; api_report.getMdx(path, queryUUID).then(function(response) { var mdxquery = Restangular.stripRestangular(response); workspace.query = mdxquery; workspace.query.parameters.paramDateFrom = thistime.starttimes; workspace.query.parameters.paramDateTo = thistime.endtimes; $scope.parameters = parseDateParameter(workspace.query.parameters); weekuser(key, mdxquery); }); } var weekuser = function(keys, mdxquery) { var key = []; api_report.execute(mdxquery).then(function(data) { $scope.rheaders = []; $scope.rRows = []; var reportData = Restangular.stripRestangular(data); if (reportData.cellset == null || reportData.cellset.length == 0) { $scope.shows = true; $scope.empty = "数据为空!" } else { // angular.forEach(reportData.cellset, function(item, index) { // if (item.length > 1 && index > 0 && item[1].value != '') { // key.push([item[0].value, Number(item[1].value)]); // } // }) if (keys == 'lastmonthkey') { angular.forEach(reportData.cellset, function(item, index) { if (item.length > 1 && index > 0 && item[1].value != '') { key.push([item[0].value, Number(item[1].value)]); } }) lastmonthfun(key); } else if (keys == 'thismonthkey') { angular.forEach(reportData.cellset, function(item, index) { if (item.length > 1 && index > 0 && item[1].value != '') { key.push([item[0].value, Number(item[1].value)]); } }) thismonthfun(key); } else if (keys == 'incidentchartkey') { angular.forEach(reportData.cellset, function(item, i) { angular.forEach(averages, function(index, j) { // angular.forEach(averages, function(item, index) { if (item.length > 1 && i > 0 && item[1].value != '') { if (index[0] == Date.parse(item[0].value.substr(4, 2) + "/" + item[0].value.substr(6, 2) + "/" + item[0].value.substr(0, 4)) + 86400000) { index[1] = Number(item[1].value); } // key.push([Date.parse(item[0].value.substr(4, 2) + "/" + item[0].value.substr(6, 2) + "/" + item[0].value.substr(0, 4)), Number(item[1].value)]); } // }) }) }) incidentchartfun(averages); } } }) } // $scope.parameters = {}; var weeks = new Date().getDay(); // $scope.starttimes = moment(new Date().getTime() - 86400000 * (weeks)).format('YYYYMMDD'); // $scope.endtimes = moment(new Date()).format('YYYYMMDD'); // $scope.parameters.paramDateFrom = $scope.starttimes; // $scope.parameters.paramDateTo = $scope.endtimes; // $scope.parameters = parseDateParameter($scope.parameters); getreportdata('lastmonthkey', lastmonthtime, lastmonth); getreportdata('thismonthkey', thismonthtime, thismonth); getreportdata('incidentchartkey', incidenttime, incidentchart); // 上月区域多发top10 var lastmonthfun = function(lastmonthkey) { // $scope.isMasklastmon = flase; Highcharts.chart('lastmonth', { chart: { type: 'bar' }, title: { text: '上月区域多发top10统计图' }, subtitle: { // text: 'Source: Wikipedia' }, xAxis: { type: 'category', labels: { rotation: -45, style: { fontSize: '13px', fontFamily: 'Verdana, sans-serif' } } }, yAxis: { min: 0, title: { text: '' } }, legend: { enabled: false }, tooltip: { pointFormat: '{point.y}' }, series: [{ name: 'Population', colorByPoint: true, data: lastmonthkey, borderWidth: 0, dataLabels: { enabled: false, rotation: -90, color: '#FFFFFF', align: 'right', format: '{point.y}', // one decimal y: 10, // 10 pixels down from the top style: { fontSize: '13px', fontFamily: 'Verdana, sans-serif' } } }] }); } // 本月区域多发top10 var thismonthfun = function(lastmonthkey) { // $scope.isMaskthismon = false; Highcharts.chart('thismonth', { chart: { type: 'bar' }, title: { text: '本月区域多发top10统计图' }, subtitle: { // text: 'Source: Wikipedia' }, xAxis: { type: 'category', labels: { rotation: -45, style: { fontSize: '13px', fontFamily: 'Verdana, sans-serif' } } }, yAxis: { min: 0, title: { text: '' } }, legend: { enabled: false }, tooltip: { pointFormat: '{point.y}' }, series: [{ name: 'Population', colorByPoint: true, data: lastmonthkey, borderWidth: 0, dataLabels: { enabled: false, rotation: -90, color: '#FFFFFF', align: 'right', format: '{point.y}', // one decimal y: 10, // 10 pixels down from the top style: { fontSize: '13px', fontFamily: 'Verdana, sans-serif' } } }] }); } // 最近15天事件 var incidentchartfun = function(incidentchartkey) { // $scope.isMaskincident = false; Highcharts.chart('incidentchart', { title: { text: '事件近15天趋势图' }, xAxis: { type: 'datetime', labels: { align: 'left', step: 1 } }, yAxis: { title: { text: null } }, tooltip: { crosshairs: true, shared: true, valueSuffix: '条' }, legend: {}, series: [{ name: '生成事件', data: incidentchartkey, zIndex: 1, marker: { fillColor: 'white', lineWidth: 2, lineColor: Highcharts.getOptions().colors[0] } }] }); } }]);