// indexAnalysis frameworkModule.directive('appIndexAnalysis', ['$log', '$translate', '$timeout', 'vatSessionService', 'dashboardConfigSummaryService', 'vatDashboardService', function ($log, $translate, $timeout, vatSessionService, dashboardConfigSummaryService, vatDashboardService) { 'use strict'; $log.debug('appIndexAnalysis.ctor()...'); return { restrict: 'A', templateUrl: '/app/dashboard/app-index-analysis/app-index-analysis.html' + '?_=' + Math.random(), replace: true, scope: true, link: function (scope, element) { var thisConstant = { filterMonth: 'filterMonth', dateFormate: 'yyyy-MM', dashSignSeparator: '-', rowCountPerPage: 9, defaultHeight: 400, orgColumn: 'v1', prefixField: 'v' }; var thisDateService = { // 获取当前月份的上一个月时间 getLastMonth: function () { var date = new Date(); date.setMonth(date.getMonth() - 1); return date; }, // 获取查询条件 getQueryModel: function () { var arr = scope.filterMonth.split(thisConstant.dashSignSeparator); var year = parseInt(arr[0]); var month = parseInt(arr[1]); var model = { year: year, period: month, organizationIDList: scope.selectedOrganizationList }; return model; }, // 验证有效月份 validDateMonth: function () { var date = scope.filterMonth + '-01'; return window.PWC.checkDate(date); }, // 转换为页面展示数据 parseShowData: function (data) { if (!_.isEmpty(data)) { var values = _.values(data.header); var keys = _.keys(data.header); var length = keys ? keys.length : 0; data.keys = keys; data.headerObj = JSON.parse(data.headerObj); } return data; }, // 查询汇总数据 querySummaryProcess: function () { if (!thisDateService.validDateMonth) { return; } var model = thisDateService.getQueryModel(); vatSessionService.querySummayDashboardModel = model; dashboardConfigSummaryService.querySingleSummaryData(model, scope.widget.dataModel.chartConfig).success(function (data) { // 进行数据转换 scope.querySummaryResult = thisDateService.parseShowData(data); if (!_.isEmpty(scope.querySummaryResult)) { scope.hasData = true; } else { scope.hasData = false; } $timeout(function () { thisDateService.drawTableList(scope.querySummaryResult); }, 100); }); }, drawTableList: function (data) { if (!_.isEmpty(data)) { thisDateService.drawTable(data); } }, drawTable: function (node) { if (_.isEmpty(node.data)) { node.isEmpty = true; } else { node.isEmpty = false; var vatGallery = thisDateService.createGalleryData(node); var itemTemplate = function (item, index) { var columns = thisDateService.createColumns(node); if (index === 0) { var blankAreaHeight = (thisConstant.rowCountPerPage - item.dataValue.length) * 40; var newHeight = thisConstant.defaultHeight - blankAreaHeight; $timeout(function () { element.find('.table-content').height(newHeight); }, 100); } return $('<div class="gallery-table"/>').dxDataGrid({ dataSource: item.dataValue, width: '100%', showRowLines: true, showColumnLines: false, noDataText: '', cellHintEnabled: true, showBorders: false, format: { type: 'fixedPoint', precision: 2 }, columns: columns }); }; var galleryWidget = element.find('.table-content').dxGallery({ dataSource: vatGallery, loop: false, width: '100%', showIndicator: true, noDataText: '', showNavButtons: true, itemTemplate: itemTemplate, }).dxGallery("instance"); } }, // 构造GalleryData createGalleryData: function (node) { var index = Math.ceil(node.data.length / thisConstant.rowCountPerPage); // var x = node.data.length % thisConstant.rowCountPerPage; // if (x !== 0) { // index = index + 1; // } var result = []; for (var i = 0; i < index; i++) { var item = {}; item.id = i; item.dataValue = []; var start = i * thisConstant.rowCountPerPage; for (var j = start; j < start + thisConstant.rowCountPerPage; j++) { var rowData = angular.copy(node.data[j]); if (!rowData) { continue; } for (var k = 1; k < node.headerObj.length; k++) { var dataModel = node.headerObj[k]; var field = thisConstant.prefixField + (k + 1); if (dataModel.dataType === 1) { rowData[field] = Number(rowData[field]).formatAmount(); } else if (dataModel.dataType === 3) { rowData[field] = rowData[field] == 1 ? '是' : '否'; } else { var percentData = Number(rowData[field]) * 100; rowData[field] = Number(percentData).formatAmount() + '%'; } } item.dataValue.push(rowData); } result.push(item); } return result; }, // 构造列表 createColumns: function (node) { var result = []; node.keys.forEach(function (key) { var item = {}; item.dataField = key, item.caption = $translate.instant(node.header[key]); if (key !== thisConstant.orgColumn) { item.format = { type: 'fixedPoint' }; item.cssClass = 'orange-color'; item.alignment = 'right'; } result.push(item); }); return result; }, isChangedArray: function (newValue, oldValue) { if (!newValue && !oldValue) { return false; } if (!newValue) { return true; } if (!oldValue) { return true; } if (newValue.length !== oldValue.length) { return true; } // 排序 newValue = newValue.sort(); oldValue = oldValue.sort(); for (var i = 0; i < newValue.length; i++) { if (newValue[i] !== oldValue[i]) { return true; } } return false; }, querySummary: function (queryModel) { if (thisDateService.isChangedArray(queryModel, scope.selectedOrganizationList)) { scope.selectedOrganizationList = queryModel; thisDateService.querySummaryProcess(); } } }; var mainModule = { // 初始化参数 initParams: function () { scope.selectedOrganizationList = []; scope.hasData = true; mainModule.initFilterMonth(); mainModule.watchFilter(); }, // 初始化查询月份 initFilterMonth: function () { //if (vatSessionService.lastDashboardSummaryQueryMonth) { // scope.filterMonth = vatSessionService.lastDashboardSummaryQueryMonth; //} else { // var lastmonth = thisDateService.getLastMonth(); // scope.filterMonth = lastmonth.formatDateTime(thisConstant.dateFormate); //} // TODO: Dashboard Demo for Edmond var lastmonth = new Date(2017, 0, 1); scope.filterMonth = lastmonth.formatDateTime(thisConstant.dateFormate); var elem1 = $("#" + thisConstant.filterMonth); elem1.datepicker({ minViewMode: 1, autoclose: true, language: "zh-CN", format: "yyyy-mm", }); elem1.datepicker('setDate', lastmonth); }, // 监视查询条件变更 watchFilter: function () { // 日期选择改变时 scope.$watch('filterMonth', function (newValue, oldValue) { if (newValue !== oldValue) { vatSessionService.lastDashboardSummaryQueryMonth = newValue; thisDateService.querySummaryProcess(); } }); }, // 入口函数 main: function () { mainModule.initParams(); } }; //开始 (function initialize() { $log.debug('appIndexAnalysis.link.initialize()...'); scope.querySummary = thisDateService.querySummary; scope.showFilter = false; mainModule.main(); })(); } }; } ]);