vatDashboardModule.controller('SummaryDashboardConfigController', ['$scope', '$log', '$translate', '$timeout', '$q', '$interval', 'apiInterceptor', 'Upload', 'vatImportService', 'SweetAlert', 'uiGridConstants', 'vatSessionService', 'enums', 'vatOperationLogService', 'projectService', 'vatCommonService', 'vatDashboardService', 'indexAnalysisDetailService', '$stateParams', '$state', function ($scope, $log, $translate, $timeout, $q, $interval, apiInterceptor, Upload, vatImportService, SweetAlert, uiGridConstants, vatSessionService, enums, vatOperationLogService, projectService, vatCommonService, vatDashboardService, indexAnalysisDetailService, $stateParams, $state) { 'use strict'; $scope.config = { id: '', chartName: '', modelItems: [], analysisItems: [], isShowData: 0, isShowGrid: 0 }; if (!_.isEmpty(vatSessionService.querySummayDashboardModel)) { if (!_.isEmpty(vatSessionService.querySummayDashboardModel.organizationIDList)) { $scope.selectedOrganizes = vatSessionService.querySummayDashboardModel.organizationIDList; $scope.selectedOrgIds = vatSessionService.querySummayDashboardModel.organizationIDList.join(','); } else { $scope.selectedOrganizes = []; $scope.selectedOrgIds = ''; } $scope.filterYear = vatSessionService.querySummayDashboardModel.year; $scope.filterPeriod = vatSessionService.querySummayDashboardModel.period; } else { $scope.selectedOrganizes = []; $scope.selectedOrgIds = ''; $scope.filterYear = 0; $scope.filterPeriod = 0; } $scope.chartRenderOption = { id: '', name: '', isShowData: $scope.config.isShowData, header: { v1: $translate.instant('OrgName') }, headerObj: [{ name: $translate.instant('OrgName'), dataType: 1, chartType: 'line' }], data: [] }; //图表名称text box option $scope.chartNameOption = { width: 280, placeholder: $translate.instant('PleaseInputChartName'), bindingOptions: { value: 'config.chartName' } } //获取指定指标的二级分析指标 $scope.subModelDataList = []; var getSubModelList = function () { vatDashboardService.getSubModelList($scope.filterYear, $scope.filterPeriod).success(function (result) { if (result && result.data && result.data.length > 0) { $scope.subModelDataList = result.data; } }); }; //添加分析指标下拉树控件 $scope.selectIdList = []; var syncTreeViewSelection = function () { if ($scope.treeView) { $scope.fromSyncSelection = true; if (!$scope.selectIdList || $scope.selectIdList.length === 0) { $scope.treeView.unselectAll(); $scope.fromSyncSelection = false; return; } $scope.selectIdList.forEach(function (key) { $scope.treeView.selectItem(key); }); _.each($scope.indexList, function (item) { if (!_.contains($scope.selectIdList, item.id) && item.parentId) { $scope.treeView.unselectItem(item.id); } }); $scope.fromSyncSelection = false; } }; $scope.indexList = []; $scope.treeView = null; $scope.multiSelectAnalysisOptionHeight = 300; $scope.multiSelectAnalysisOption = { width: 280, valueExpr: "name", displayExpr: "name", showClearButton: true, bindingOptions: { value: 'selectNameList', dataSource: 'indexList' }, onValueChanged: function (args) { if (!args.value) { $scope.selectIdList = []; } }, treeView: { bindingOptions: { dataSource: 'indexList', searchValue: 'searchText', height: 'multiSelectAnalysisOptionHeight' }, dataStructure: "plain", keyExpr: "id", parentIdExpr: "parentId", selectionMode: "multiple", displayExpr: "name", selectByClick: true, selectNodesRecursive: true, showCheckBoxesMode: "normal", onContentReady: function (e) { $scope.treeView = e.component; }, onItemSelectionChanged: function (args) { if (!$scope.fromSyncSelection) { var value = args.component.getSelectedNodesKeys(); $scope.selectIdList = value; $scope.selectNameList = _.filter($scope.indexList, function (nameItem) { return _.contains($scope.selectIdList, nameItem.id) && nameItem.parentId; }); $scope.riskDataSource = []; _.each($scope.selectNameList, function (nameItem) { var parentNode = _.where($scope.indexList, { id: nameItem.parentId })[0]; if (_.where($scope.riskDataSource, { id: parentNode.id }).length < 1) { if (_.contains($scope.selectRiskIdList, parentNode.id)) { $scope.riskDataSource.push({ id: parentNode.id, name: parentNode.name, selected: true }); } else { $scope.riskDataSource.push({ id: parentNode.id, name: parentNode.name, selected: false }); } } }); $scope.selectRiskIdList = _.filter($scope.selectRiskIdList, function (riskId) { return _.where($scope.riskDataSource, { id: riskId }).length > 0; }); $scope.selectNameList = _.map($scope.selectNameList, function (item) { return item.name; }); } } } }; $scope.riskDataSource = []; $scope.selectRiskNameList = []; $scope.selectRiskIdList = []; //风险提示Options $scope.riskTipMultiSelectAnalysisOption = { width: 280, valueExpr: "id", displayExpr: "name", showClearButton: true, contentTemplate: 'riskContent', bindingOptions: { dataSource: 'riskDataSource', value: 'selectRiskIdList' }, onValueChanged: function (args) { if (!args.value) { $scope.selectRiskIdList = []; } }, treeView: { bindingOptions: { dataSource: 'riskDataSource' }, height: 300, dataStructure: "plain", keyExpr: "id", selectionMode: "multiple", displayExpr: "name", selectByClick: true, selectNodesRecursive: true, showCheckBoxesMode: "normal", onContentReady: function (e) { var riskTree = $('#riskTipTree').dxTreeView('instance'); _.each($scope.riskDataSource, function (nameItem) { if (_.contains($scope.selectRiskIdList, nameItem.id)) { riskTree.selectItem(nameItem.id); } else { riskTree.unselectItem(nameItem.id); } return nameItem; }); }, onItemSelectionChanged: function (args) { var value = args.component.getSelectedNodesKeys(); $scope.selectRiskIdList = value; $scope.selectRiskNameList = _.filter($scope.riskDataSource, function (nameItem) { return _.contains($scope.selectRiskIdList, nameItem.id); }); $scope.selectRiskNameList = _.map($scope.selectRiskNameList, function (item) { return item.name; }); } } }; $scope.$watch('selectRiskIdList', function () { var riskTree = $('#riskTipTree').dxTreeView('instance'); if (riskTree) { _.each($scope.riskDataSource, function (nameItem) { if (_.contains($scope.selectRiskIdList, nameItem.id)) { riskTree.selectItem(nameItem.id); } else { riskTree.unselectItem(nameItem.id); } return nameItem; }); } }); //删除分析指标 var removeAnalysisItem = function (item) { $scope.config.analysisItems = _.filter($scope.config.analysisItems, function (analysisItem) { return analysisItem.id != item.id; }); $scope.selectIdList = _.filter($scope.selectIdList, function (indexItem) { return indexItem != item.id; }); }; //保存指标配置 var internalSaveConfig = function (data) { vatDashboardService.saveSummaryConfig(data).success(function () { $state.go('summaryDashboard'); }); }; var saveDashboardConfig = function () { if ($scope.config.analysisItems.length < 1) { SweetAlert.warning($translate.instant('DeleteMeasureAlert')); return; } if (!$scope.config.chartName) { SweetAlert.warning($translate.instant('checkChartName')); return; } var indexIds = ''; var indexIdArr = []; var userSetting = ''; var userSettingArr = [{ name: $translate.instant('OrgName'), dataType: 1, chartType: 'line' }]; _.each($scope.config.analysisItems, function (item) { indexIdArr.push(item.id); userSettingArr.push({ name: item.analysisName, dataType: item.dataType, chartType: item.chartType }); }); indexIds = indexIdArr.join(','); userSetting = JSON.stringify(userSettingArr); var data = {}; data.ID = $scope.config.id; data.name = $scope.config.chartName; data.indexIDs = indexIds; data.userSetting = userSetting; data.isShowData = $scope.config.isShowData; data.isShowGrid = $scope.config.isShowGrid; data.riskTip = $scope.selectRiskIdList.join(','); data.orderIndex = 4; $scope.internalSaveConfig(data); }; //取消保存 var cancelConfig = function () { $state.go('summaryDashboard'); }; //删除图表 //var deleteChartConfig = function () { // SweetAlert.swal({ // title: $translate.instant('ConfirmDelete'), // text: $translate.instant('deleteChart') + "?", // type: "warning", // showCancelButton: true, // confirmButtonColor: "#DD6B55", // confirmButtonText: $translate.instant('Confirm'), // cancelButtonText: $translate.instant('Cancel'), // closeOnConfirm: true // }, function (isConfirm) { // if (isConfirm) { // vatDashboardService.deleteChartConfig($scope.config.id).success(function () { // SweetAlert.success($translate.instant('DeleteSuccess')); // $state.go('summaryDashboard'); // }); // } // }); //}; $scope.chartChanged = true; var setAnalysisItems = function () { $scope.config.analysisItems = _.filter($scope.config.analysisItems, function (item) { return _.contains($scope.selectIdList, item.id); }); _.each($scope.selectIdList, function (selectIndexItem) { _.each($scope.subModelDataList, function (item) { if (selectIndexItem === item.id && _.where($scope.config.analysisItems, { id: selectIndexItem }).length === 0) { //添加分析指标 var obj = new Object(); obj.id = item.id; obj.analysisName = item.indexName; obj.dataType = item.dataType; obj.chartType = 'bar'; obj.chartOptions = { items: [ { typeName: $translate.instant("barchart"), typeValue: 'bar' }, { typeName: $translate.instant("linechart"), typeValue: 'line' }, { typeName: $translate.instant("areachart"), typeValue: 'area' }, { typeName: $translate.instant("stepchart"), typeValue: 'step' } ], displayExpr: 'typeName', valueExpr: 'typeValue', itemTemplate: 'chartTypeItemTemplate', value: 'bar', onItemClick: function (e) { obj.chartType = e.itemData.typeValue; $scope.chartChanged = !$scope.chartChanged; } }; if (!_.isEmpty($scope.indexList)) { var indexItemObj = _.find($scope.indexList, function (indexItem) { return indexItem.id == selectIndexItem; }); if (!_.isEmpty(indexItemObj)) { obj.index = indexItemObj.orderIndex; } } $scope.config.analysisItems.push(obj); } }) }); //对分析指标排序,使分析指标顺序与指标列表中一致。 $scope.config.analysisItems = _.sortBy($scope.config.analysisItems, 'index'); }; var getModel = function () { //获取指标汇总配置 var modelPromise; if (!_.isEmpty($scope.model)) { modelPromise = $q.when($scope.model); } else if ($stateParams.id) { $scope.config.id = $stateParams.id; modelPromise = vatDashboardService.getDashboardConfigSummary($scope.config.id).then(function (result) { if (result && result.data && result.data.data) { return $q.when(result.data.data); } else { return $q.reject(); } }); } else { modelPromise = $q.reject(); } modelPromise.then(function (result) { if (result) { if (_.isEmpty($scope.model)) { $scope.model = result; } var selectedAnalysisItems = JSON.parse(result.userSetting); selectedAnalysisItems.splice(0, 1); var ids = result.indexIDs.split(','); $scope.selectedIndexIds = result.indexIDs; $scope.config.analysisItems.length = 0; _.each(ids, function (id, index) { //添加分析指标 var obj = new Object(); obj.id = id; obj.analysisName = selectedAnalysisItems[index].name; obj.dataType = selectedAnalysisItems[index].dataType; obj.chartType = selectedAnalysisItems[index].chartType; obj.chartOptions = { items: [ { typeName: $translate.instant("barchart"), typeValue: 'bar' }, { typeName: $translate.instant("linechart"), typeValue: 'line' }, { typeName: $translate.instant("areachart"), typeValue: 'area' }, { typeName: $translate.instant("stepchart"), typeValue: 'step' } ], displayExpr: 'typeName', valueExpr: 'typeValue', itemTemplate: 'chartTypeItemTemplate', value: obj.chartType, onItemClick: function (e) { obj.chartType = e.itemData.typeValue; $scope.chartChanged = {}; } }; $scope.config.analysisItems.push(obj); }); if (result.indexIDs && ids.length > 0) { $scope.selectIdList = ids; } var riskTipIds = result.riskTip ? result.riskTip.split(',') : null; if (riskTipIds && riskTipIds.length > 0) { $scope.selectRiskIdList = riskTipIds; } $scope.config.selectedModelId = result.modelID; $scope.config.chartName = result.name; $scope.config.isShowData = result.isShowData; $scope.config.isShowGrid = result.isShowGrid ? result.isShowGrid : 0; } }); }; //设置分析指标下拉框的显示值 $scope.$watchGroup(['selectIdList', 'indexList', 'treeView'], function (newItems, oldItems) { if (newItems[1].length > 0) { $scope.selectNameList = _.filter($scope.indexList, function (nameItem) { return _.contains($scope.selectIdList, nameItem.id) && nameItem.parentId; }); $scope.riskDataSource = []; _.each($scope.selectNameList, function (nameItem) { var parentNode = _.where($scope.indexList, { id: nameItem.parentId })[0]; if (_.where($scope.riskDataSource, { id: parentNode.id }).length < 1) { if (_.contains($scope.selectRiskIdList, parentNode.id)) { $scope.riskDataSource.push({ id: parentNode.id, name: parentNode.name, selected: true }); } else { $scope.riskDataSource.push({ id: parentNode.id, name: parentNode.name, selected: false }); } } }); $scope.selectRiskIdList = _.filter($scope.selectRiskIdList, function (riskId) { return _.where($scope.riskDataSource, { id: riskId }).length > 0; }); $scope.selectNameList = _.map($scope.selectNameList, function (item) { return item.name; }); } syncTreeViewSelection(); }); //分析指标根据选中的指标变化 $scope.$watchGroup(['selectIdList', 'subModelDataList', 'indexList'], function () { setAnalysisItems(); }); // 如果直接传入model,则在model有值后触发设置操作 $scope.$watch('model', function (newVal, oldVal) { if (!_.isEmpty(newVal)) { getModel(); } }); // 如果直接传入外部数据源,则在有值后更新这些数据源 $scope.$watch('externalDataSource', function (newVal, oldVal) { if (!_.isEmpty(newVal)) { if (!_.isEmpty(newVal.orgIds)) { $scope.selectedOrganizes = newVal.orgIds; $scope.selectedOrgIds = newVal.orgIds.join(','); } if (_.isFunction(newVal.onSave)) { $scope.internalSaveConfig = newVal.onSave; } if (_.isFunction(newVal.onCancel)) { $scope.cancelConfig = newVal.onCancel; } } }, true); //分析指标配置变动联动图表 $scope.$watchGroup(['config.analysisItems.length', 'subModelDataList.length', 'selectedOrganizes.length', 'chartChanged', 'config.isShowData'], function (newItems, oldItems) { if (newItems[0] > 0 && newItems[1] > 0) { var obj = { id: $scope.config.id, name: $scope.config.chartName, isShowData: $scope.config.isShowData, header: { v1: $translate.instant('OrgName') }, headerObj: [{ name: $translate.instant('OrgName'), dataType: 1, chartType: 'line' }], data: [], noChartMsg: $translate.instant('PleaseAddMeasuresRight') }; for (var key in obj.header) { if (key != "v1") { delete obj.header[key]; } } var org = obj.headerObj.pop(); obj.headerObj = [org]; _.each($scope.config.analysisItems, function (value, index) { obj.header['v' + (index + 2)] = value.analysisName; obj.headerObj.push({ name: value.analysisName, dataType: value.dataType, chartType: value.chartType }); }); obj.data = []; _.each($scope.selectedOrganizes, function (orgItem) { var flag = false; var orgModelObj = { v0: '', v1: '' }; if ($scope.config.analysisItems.length > 0 && $scope.subModelDataList.length > 0) { _.each($scope.config.analysisItems, function (value, index) { orgModelObj['v' + (index + 2)] = 0; _.chain($scope.subModelDataList).where({ organizationID: orgItem, flag: true }).each(function (itemData) { if (itemData.id === value.id) { orgModelObj['v' + (index + 2)] = parseFloat(itemData.data ? itemData.data : 0); if (!flag) { orgModelObj['v0'] = itemData.organizationID; orgModelObj['v1'] = itemData.organizationName; flag = true; } } }).value(); }); } if (flag) { obj.data.push(orgModelObj); } }); $scope.chartRenderOption = obj; } else { $scope.chartRenderOption = { noChartMsg: $translate.instant('PleaseAddMeasuresRight') }; } //showChartTipInfo(); }); (function initialize() { //获取所有指标信息 indexAnalysisDetailService.getIndexAnalysisDropDownList().success(function (data) { var dataOrder = 0; data = _.map(data, function (item) { item.orderIndex = dataOrder; dataOrder++; return item; }); $scope.indexList = data; $scope.multiSelectAnalysisOptionHeight = 300; if ($scope.indexList && $scope.indexList.length <= 15) { $scope.multiSelectAnalysisOptionHeight = 20 * $scope.indexList.length; } }); getSubModelList(); $scope.removeAnalysisItem = removeAnalysisItem; $scope.internalSaveConfig = internalSaveConfig; $scope.saveDashboardConfig = saveDashboardConfig; $scope.cancelConfig = cancelConfig; //$scope.deleteChartConfig = deleteChartConfig; getModel(); })(); } ]);