'use strict'; app.controller('selfDefinedReportCtrl', ["$scope", "$http", "i18nService", "$rootScope", "$state", "$timeout", "moment", "$interval", "$modal", "$stateParams", "SweetAlert", "uiGridConstants", "uiGridGroupingConstants", "Restangular", "api_bpm_domain", "api_text", "api_bpm_data", "api_user_data", "api_configure_data", '$parse', "$injector", "$aside", 'toaster', "api_configure_form", "api_cmdb", 'api_bpm', 'api_report_data', function ($scope, $http, i18nService, $rootScope, $state, $timeout, moment, $interval, $modal, $stateParams, SweetAlert, uiGridConstants, uiGridGroupingConstants, Restangular, api_bpm_domain, api_text, api_bpm_data, api_user_data, api_configure_data, $parse, $injector, $aside, toaster, api_configure_form, api_cmdb, api_bpm, api_report_data) { console.log(echarts); var loginUser = $rootScope.user; $scope.pageData = {}; $scope.haveSave = false; // $scope.pageData.chartType = { // status: 0, // value: "饼状图" // } $scope.my_tree_handler = function (branch) { if (!branch.children.length) { api_report_data.fetchDataList('reportCustom', { idx: 0, sum: 1000, reportCustom: { reportType: { id: branch.id } } }).then(function (data) { if (data.list.length) { $scope.pageData.sqlContent = data.list[0].fetchSql; console.log(data.list[0].fetchSql) if (data.list[0].status == 0) { $scope.pageData.chartType = { status: 0, value: "饼状图" } } else if (data.list[0].status == 1) { $scope.pageData.chartType = { status: 1, value: "柱状图" } } }else { $scope.pageData.sqlContent = ''; } }) } else { $scope.pageData.sqlContent = ''; } $scope.changecate = true; $scope.addcate = false; filterData.treeIds = branch.id; $scope.selectedTreeNode = branch; $scope.output = branch; convertchildToTree(branch); // console.log($scope.subdata) // var eqflag = false; // angular.forEach($scope.outdata, function (item) { // if (item.id == $scope.output.id) eqflag = true; // }); // if (eqflag) { // } else { // $scope.outdata.push({ // 'name': $scope.output.label, // 'id': $scope.output.id // }); // var postData = { // typeList: [] // }; // if ($scope.outdata.length > 0) { // angular.forEach($scope.outdata, function (data) { // postData.typeList.push({ id: data.id }); // }) // } // // api_solution.findSolutionTypesUser(postData).then(function(response){ // // //Restangular. // // $scope.userdata = response.data; // // }); // } }; function convertchildToTree(datum) { $scope.subdata = {}; // console.log($scope.parentdata) if (datum.parent) { // angular.forEach($scope.parentdata, function(item, index) { // if (datum.id == item.id) return $scope.subdata = item; // }); $scope.subdata = { 'id': datum.id, 'name': datum.label, 'parent': datum.parent, 'hasArea': datum.hasArea, 'hasSimple': datum.hasSimple, 'group': datum.group } } else { $scope.subdata = { 'id': datum.id, 'name': datum.label, 'group': datum.group, 'hasSimple': datum.hasSimple, 'hasArea': datum.hasArea } } // if(datum.children.length==0){ // angular.forEach($scope.parentdata,function(item, index){ // if(datum.id==item.id) return $scope.subdata=item; // }); // }else{$scope.subdata={id:datum.id,category:datum.label}} } function convertListToTree(data, treeMap) { // console.log(data); var idToNodeMap = {}; //Keeps track of nodes using id as key, for fast lookup var root = null; //Initially set our loop to null var parentNode = null; //loop over data for (var i = 0; i < data.length; i++) { var datum = data[i]; //each node will have children, so let's give it a "children" poperty datum.children = []; //add an entry for this node to the map so that any future children can //lookup the parent idToNodeMap[datum.id] = datum; //Does this node have a parent? // console.log("datum="+JSON.stringify(datum)) if (typeof datum.parent === "undefined") { //Doesn't look like it, so this node is the root of the tree root = datum; treeMap[datum.id] = root; } else { //This node has a parent, so let's look it up using the id parentNode = idToNodeMap[datum.parent.id]; //We don't need this property, so let's delete it. // delete datum.parent; //Let's add the current node as a child of the parent node. parentNode.children.push(datum); } } return root; } function convertParentToChildList(data) { var treeMap = {}; var list = []; convertListToTree(data, treeMap); angular.forEach(treeMap, function (item) { list.push(item); }); // console.log(list) return list; } // $scope.onFilterCallback = function(item){ // $scope.addcategory.parent=item.label; // } $scope.parentdata = {}; // ddd定制数据结构 $scope.try_async_load = function () { $scope.my_data = []; $scope.doing_async = true; var data = { "idx": 0, "sum": 1000 }; api_report_data.fetchDataList('reportType', data).then(function (response) { console.log(response.list) var data = response.list; // data.unshift({ id: 0, name: "all" }) // console.log(data); var objects = []; $scope.parentdata = data; for (var i = 0; i < data.length; i++) { var object = {}; object.id = data[i].id; // if (angular.isDefined(data[i].parent) && data[i].id != 0) { // object.parent = data[i].parent; // } else if (data[i].id != 0) { // object.parent = data[i].parent = { id: 0, name: "all" } // } if (angular.isDefined(data[i].parent)) { object.parent = data[i].parent; } if (angular.isDefined(data[i].hasArea)) { object.hasArea = data[i].hasArea; } if (angular.isDefined(data[i].hasSimple)) { object.hasSimple = data[i].hasSimple; } if (angular.isDefined(data[i].group)) { object.group = data[i].group; } object.label = data[i].name; // object.actions = data[i][3]; //权限部分 // object.group = "1"; // object.user = "2"; object.state = { "opened": true }; object.typeName = "type"; // if() // if (object.actions.indexOf("2") >= 0) { //知识库类型 具有增加权限--系统管理员 $scope.showAddSolutionType = true; // } // if (object.actions.indexOf("5") >= 0) { //知识库类型 具有授权权限--系统管理员 $scope.showReviewKnowledgeType = true; // } objects.push(object); } console.log(objects) $scope.my_data = convertParentToChildList(objects); // console.log($scope.my_data); $scope.tree_data = angular.copy($scope.my_data); if ($scope.my_data.length > 0) { $scope.doing_async = false; } }); }; $scope.try_async_load(); // $scope.ldloading={}; var filterData = { key: 'null', status: 0, pageIndex: 0, pageSum: 10, //treeIds:'[]', userId: loginUser.id } // 增删改弹窗 console.log($scope.inpContent) $scope.redact = function (type, model) { console.log(model) var modalInstance = $modal.open({ templateUrl: 'assets/views/system/selfDefinedReport/tpl/dialog.tpl.html', controller: function ($scope, $modalInstance, api_bpm, modelData, currentUserId, Alert, api_report_data, selectedTreeNode, scope) { console.log(selectedTreeNode); $scope.inp = {}; // console.log($scope.inpContent.a) if (type == 0) { $scope.title = '新增报表类型'; $scope.placeholder = '请输入报表名称'; $scope.inp.content = ''; } else if (type == 1) { $scope.title = '修改报表类型'; $scope.placeholder = '知识增加数量'; $scope.delContent = $scope.inp.content = selectedTreeNode.label; } else if (type == 2) { $scope.title = '删除报表类型'; $scope.type = 2; $scope.delContent = $scope.inp.content = selectedTreeNode.label; } $scope.ok = function () { console.log($scope.inp.content) if ($scope.inp.content == '') { return } var parentId = selectedTreeNode.parent ? selectedTreeNode.parent.id : 1; if (type == 0) { var iid = parentId == 1 ? selectedTreeNode.id : parentId; // var postData={reportType: { name: $scope.inp.content, id: parentId }}; api_report_data.addModel('reportType', { reportType: { name: $scope.inp.content, parent: { id: iid } } }).then(function (data) { console.log(data); if (data && data.status == 200) { SweetAlert.swal("添加成功!", "添加成功", "success") $modalInstance.dismiss('cancel'); scope.try_async_load() } else { SweetAlert.swal("添加失败!", "请稍候重试", "error"); } }) } else if (type == 1) { api_report_data.updateModel('reportType', { reportType: { name: $scope.inp.content, parent: { id: parentId }, id: selectedTreeNode.id } }).then(function (data) { console.log(data); if (data && data.status == 200) { SweetAlert.swal("修改成功!", "修改成功", "success") $modalInstance.dismiss('cancel'); scope.try_async_load() } else { SweetAlert.swal("修改失败!", "请稍候重试", "error"); } }) } else if (type == 2) { if (selectedTreeNode.children.length) { alert('存在子集,无法删除!'); } else { api_report_data.rmModels('reportType', selectedTreeNode.id).then(function (data) { console.log(data); if (data && data.status == 200) { SweetAlert.swal("删除成功!", "删除成功", "success") $modalInstance.dismiss('cancel'); scope.try_async_load(); } else { SweetAlert.swal("删除失败!", "请稍候重试", "error"); } }) } } } $scope.cancel = function () { $modalInstance.dismiss('cancel'); } }, size: 'sm', resolve: { api_bpm: function () { return api_bpm; }, modelData: function () { return model; }, currentUserId: function () { return loginUser.id; }, Alert: function () { return SweetAlert; }, api_report_data: function () { return api_report_data; }, selectedTreeNode: function () { return $scope.selectedTreeNode; }, scope: function () { return $scope; } } }); modalInstance.result.then(function (selectedItem) { if (selectedItem == 'success') { $scope.refreshData('expand-right', defaultFilterData); } }); } // 预览图形 $scope.designType = [ { value: '饼状图', status: 0 }, { value: '柱状图', status: 1 }, ] $scope.onChange = function (item) { console.log(item); console.log($scope.pageData.sqlContent) // $scope.pageData.chartType = item.status; } $scope.langs = i18nService.getAllLangs(); $scope.lang = 'zh-cn'; i18nService.setCurrentLang($scope.lang); $scope.gridOptions = {}; $scope.gridOptions.data = 'myData'; $scope.gridOptions.enableColumnResizing = true; $scope.gridOptions.enableFiltering = false; $scope.gridOptions.enableGridMenu = false; $scope.gridOptions.showGridFooter = false; $scope.gridOptions.showColumnFooter = false; $scope.gridOptions.fastWatch = true; $scope.gridOptions.useExternalFiltering = false; $scope.gridOptions.useExternalPagination = false; $scope.gridOptions.paginationPageSizes = [100]; $scope.gridOptions.paginationPageSize = 100; $scope.gridOptions.multiSelect = false; $scope.gridOptions.rowIdentity = function (row) { return row.id; }; $scope.gridOptions.getRowIdentity = function (row) { return row.id; }; $scope.gridOptions.columnDefs = [ { name: 'category', displayName: '事件类型', width: '33.4%', enableFiltering: false }, { name: 'COUNT', displayName: '事件数量', width: '33.3%', enableFiltering: false }, { name: 'percent', displayName: '事件占比', width: '33.3%', enableFiltering: false }, ]; // 展示表格 $scope.showTable = function (data) { var myData = Restangular.stripRestangular(data); $scope.gridOptions.totalItems = myData.length; myData.data.forEach(function (v, i) { v.percent = v.percent + '%'; v.id = i; }) $scope.myData = myData.data; } // 展示echarts $scope.initEchart = function (data) { // console.log(data); if ($scope.pageData.chartType.status == 0) { initChartsConfig(data); } else if ($scope.pageData.chartType.status == 1) { initConfigChart(data) } else { initChartsConfig(data); } } //饼图 function initChartsConfig(data) { var nameArr = [], dataArr = []; data.forEach(function (v, i) { nameArr.push(v.category); dataArr.push({ value: v.COUNT, name: v.category }) }) // nameArr=nameArr.slice(0,10) console.log(nameArr); var parkaccountChart = echarts.init(document.getElementById('main'));//p 标签id var option = { tooltip: { trigger: 'item', formatter: "{a}
{b}: {c} ({d}%)" }, legend: { orient: 'vertical', x: 'left', data: nameArr }, series: [ { name: '', type: 'pie', radius: ['50%', '70%'], avoidLabelOverlap: false, label: { normal: { show: false, position: 'center' }, emphasis: { show: true, textStyle: { fontSize: '30', fontWeight: 'bold' } } }, labelLine: { normal: { show: false } }, data: dataArr } ] }; parkaccountChart.setOption(option, true); } //柱状图数据 function initConfigChart(data) { console.log(data); var nameArr = [], countArr = []; data.forEach(function (v, i) { nameArr.push(v.category); countArr.push(v.COUNT); }) console.log(nameArr, countArr); var parkaccountChart = echarts.init(document.getElementById('main'));//p 标签id var option = { color: ['#3398DB'], tooltip: { trigger: 'axis', axisPointer: { // 坐标轴指示器,坐标轴触发有效 type: 'shadow' // 默认为直线,可选为:'line' | 'shadow' } }, grid: { left: '3%', right: '4%', bottom: '3%', containLabel: true }, xAxis: [ { type: 'category', data: nameArr, axisTick: { alignWithLabel: true } } ], yAxis: [ { type: 'value' } ], series: [ { name: '直接访问', type: 'bar', barWidth: '60%', data: countArr } ] }; parkaccountChart.setOption(option, true); } // } // 保存 $scope.save = function () { // console.log($scope.pageData); // console.log($scope.selectedTreeNode); $scope.haveSave = true; var postData = { reportCustom: { reportType: { id: $scope.selectedTreeNode.id, name: $scope.selectedTreeNode.label }, fetchSql: $scope.pageData.sqlContent, status: $scope.pageData.chartType.status } } console.log(postData) // console.log($scope.selectedTreeNode.id, $scope.selectedTreeNode.label) api_report_data.addModel('reportCustom', postData).then(function (data) { // console.log(data); if (data && data.status == 200) { SweetAlert.swal("保存成功!", "保存成功", "success") $scope.haveSave = true; api_report_data.report('executeSQL', { sql: $scope.pageData.sqlContent }).then(function (data) { // api_report_data.report('executeSQL', { sql: 'SELECT iic.category,COUNT(*) AS COUNT FROM itsm_incident ii INNER JOIN itsm_incident_category iic ON ii.categoryid = iic.id GROUP BY iic.category' }).then(function (data) { // console.log(data.data); $scope.showTable(data); $scope.echartsLength=data.data.length; // if (data.data.length <= 15) { // $scope.initEchart(data.data); // } if (data.data.length <= 15) { $scope.initEchart(data.data); $scope.myStyle={ 'height':'1000px' } }else{ $scope.myStyle={ 'height':'620px' } } }) } else { SweetAlert.swal("保存失败!", "请稍候重试", "error"); } }) } $scope.preview = function (data) { var modalInstance = $modal.open({ templateUrl: 'assets/views/system/selfDefinedReport/tpl/preview.tpl.html', controller: function ($scope, $modalInstance, i18nService, $timeout, api_bpm_domain, api_user_data, pageData, scope) { $scope.langs = i18nService.getAllLangs(); $scope.lang = 'zh-cn'; i18nService.setCurrentLang($scope.lang); $scope.gridOptions = {}; $scope.gridOptions.data = 'myData'; $scope.gridOptions.enableColumnResizing = true; $scope.gridOptions.enableFiltering = false; $scope.gridOptions.enableGridMenu = false; $scope.gridOptions.showGridFooter = false; $scope.gridOptions.showColumnFooter = false; $scope.gridOptions.fastWatch = true; $scope.gridOptions.useExternalFiltering = false; $scope.gridOptions.useExternalPagination = false; $scope.gridOptions.paginationPageSizes = [1000]; $scope.gridOptions.paginationPageSize = 1000; $scope.gridOptions.multiSelect = false; $scope.gridOptions.rowIdentity = function (row) { return row.id; }; $scope.gridOptions.getRowIdentity = function (row) { return row.id; }; $scope.gridOptions.columnDefs = [ { name: 'category', displayName: '事件类型', width: '33.4%', enableFiltering: false }, { name: 'COUNT', displayName: '事件数量', width: '33.3%', enableFiltering: false }, { name: 'percent', displayName: '事件占比', width: '33.3%', enableFiltering: false }, ]; $scope.showTable = function (data) { var myData = Restangular.stripRestangular(data); $scope.gridOptions.totalItems = myData.length; myData.data.forEach(function (v, i) { v.percent = v.percent + '%'; v.id = i; }) $scope.myData = myData.data; } //饼图 function initChartsConfig(data) { var nameArr = [], dataArr = []; data.forEach(function (v, i) { nameArr.push(v.category); dataArr.push({ value: v.COUNT, name: v.category }) }) // nameArr=nameArr.slice(0,10) console.log(nameArr); var parkaccountChart = echarts.init(document.getElementById('previewmain'));//p 标签id var option = { tooltip: { trigger: 'item', formatter: "{a}
{b}: {c} ({d}%)" }, legend: { orient: 'vertical', x: 'left', data: nameArr }, series: [ { name: '', type: 'pie', radius: ['50%', '70%'], avoidLabelOverlap: false, label: { normal: { show: false, position: 'center' }, emphasis: { show: true, textStyle: { fontSize: '30', fontWeight: 'bold' } } }, labelLine: { normal: { show: false } }, data: dataArr } ] }; parkaccountChart.setOption(option, true); } //柱状图数据 function initConfigChart(data) { console.log(data); var nameArr = [], countArr = []; data.forEach(function (v, i) { nameArr.push(v.category); countArr.push(v.COUNT); }) console.log(nameArr, countArr); var parkaccountChart = echarts.init(document.getElementById('previewmain'));//p 标签id var option = { color: ['#3398DB'], tooltip: { trigger: 'axis', axisPointer: { // 坐标轴指示器,坐标轴触发有效 type: 'shadow' // 默认为直线,可选为:'line' | 'shadow' } }, grid: { left: '3%', right: '4%', bottom: '3%', containLabel: true }, xAxis: [ { type: 'category', data: nameArr, axisTick: { alignWithLabel: true } } ], yAxis: [ { type: 'value' } ], series: [ { name: '直接访问', type: 'bar', barWidth: '60%', data: countArr } ] }; parkaccountChart.setOption(option, true); } $scope.initEchart = function (data) { if (pageData.chartType.status == 0) { initChartsConfig(data); } else if (pageData.chartType.status == 1) { initConfigChart(data) } else { initChartsConfig(data); } } api_report_data.report('executeSQL', { sql: pageData.sqlContent }).then(function (data) { // api_report_data.report('executeSQL', { sql: 'SELECT iic.category,COUNT(*) AS COUNT FROM itsm_incident ii INNER JOIN itsm_incident_category iic ON ii.categoryid = iic.id GROUP BY iic.category' }).then(function (data) { $scope.showTable(data); // console.log(data.data.length); $scope.echartsLength=data.data.length; if (data.data.length <= 15) { $scope.initEchart(data.data); $scope.myStyle={ 'height':'1000px' } }else{ $scope.myStyle={ 'height':'620px' } } }) $scope.ok = function () { $modalInstance.close($scope.selected.items); }; $scope.cancel = function () { $modalInstance.dismiss('cancel'); }; }, size: 'lg', resolve: { pageData: function () { return $scope.pageData }, scope: function () { return $scope } } }); modalInstance.result.then(function (selectedItem) { // if (selectedItem) { // var filterData = { // "assginee": selectedItem[0].id // } // api_bpm_domain.delegateTask(data.taskId, filterData).then(function (data) { // if (data && data.status == 200) { // SweetAlert.swal("添加成功!", "添加协同人成功", "success") // $scope.refreshData('expand-right', $scope.memoryfilterData); // } else { // SweetAlert.swal("添加失败!", "请稍候重试", "error"); // } // // var myData = Restangular.stripRestangular(data); // // $scope.gridOptions.totalItems = myData.totalNum; // // $scope.myData = myData.list; // }); // } }); } // 日期组件 $scope.open = function ($event) { $event.preventDefault(); $event.stopPropagation(); $scope.opened = !$scope.opened; }; $scope.endOpen = function ($event) { console.log($scope.startOpened) $event.preventDefault(); $event.stopPropagation(); $scope.startOpened = false; $scope.endOpened = !$scope.endOpened; // console.log(document.getElementById('input1').nextSibling.setAttribute('height', '100px')) // document.getElementById('input2').nextSibling.setAttribute('style', 'displsy: block !important') // document.getElementById('input1').nextSibling.setAttribute('style', 'displsy: block !important') // console.log(document.getElementById('input1').nextSibling) // console.log(document.getElementById('input2').nextSibling) }; $scope.startOpen = function ($event) { console.log($scope.startOpened) $event.preventDefault(); $event.stopPropagation(); $scope.endOpened = false; // document.getElementById('input1').nextSibling.setAttribute('style', 'displsy: block !important') // document.getElementById('input2').nextSibling.setAttribute('style', 'displsy: block !important') // console.log(document.getElementById('input1').nextSibling) // console.log(document.getElementById('input2').nextSibling) $scope.startOpened = !$scope.startOpened; }; // 搜索 $scope.chiceIncident = function (item) { console.log(item); // var fildata = {}; // // $scope.memoryfilterData = fildata; // if (!fildata.incident) { // fildata['incident'] = {}; // } // // $scope.gridOptions.paginationCurrentPage = 1; // if (item.acceptDateFrom) { // item.acceptDateFrom = moment(item.acceptDateFrom).format('YYYY-MM-DD HH:mm:ss'); // } // if (item.acceptDateEnd) { // // item.acceptDateEnd = moment(item.acceptDateEnd).format('YYYY-MM-DD HH:mm:ss'); // item.acceptDateEnd = moment(new Date(item.acceptDateEnd).getTime() + 86399999).format('YYYY-MM-DD HH:mm:ss'); // } // var transitiondata = angular.copy(item); // angular.extend(fildata.incident, transitiondata) // $scope.memoryfilterData = fildata; // $scope.refreshData('expand-right', fildata); } //导出 $scope.export = function () { var filadata = angular.copy($scope.memoryfilterData); filadata.sum = 10000; $http({ url: api_bpm_data.downDataModel("incident", 3).getRequestedUrl(), method: 'POST', data: JSON.stringify(filadata), headers: { // 'Content-type': 'application/xls', 'Accept': '*/*' }, responseType: 'arraybuffer' }).success(function (data, status, headers, config) { // $scope.ldloading.zoom_in = false; var file = new Blob([data], { type: 'application/vnd.ms-excel' }); //trick to download store a file having its URL var fileURL = URL.createObjectURL(file); var a = document.createElement('a'); a.href = fileURL; a.target = '_blank'; a.download = '工单列表.xls'; document.body.appendChild(a); a.click(); }).error(function (data, status, headers, config) { // $scope.ldloading.zoom_in = false; console.log(data); }); } }]);