citModule.controller('citUploadModalController', ['$scope', '$log', '$translate', '$location', '$timeout', '$interval', '$filter', '$state', 'SweetAlert', '$uibModal', 'apiInterceptor', '$q', 'Upload', 'templateGroupService', 'enums','vatSessionService', function ($scope, $log, $translate, $location, $timeout, $interval, $filter,$state, SweetAlert, $uibModal, apiInterceptor, $q, Upload, templateGroupService, enums,vatSessionService) { var thisConstant = { sheetSelectDxID: window.PWC.newGuid(), sheetDxTreeID: window.PWC.newGuid(), // 查找现有报表模板 findSheetDxDropID: window.PWC.newGuid(), findSheetDxTreeID: window.PWC.newGuid(), searchBoxDivId: window.PWC.newGuid(), // get sheetName list uploadUrl: apiInterceptor.webApiHostUrl + '/templateGroup/getSheetNameList', // resumable:true, getSheetNameListError: '获取Sheet下拉列表失败', getSheetNameTitle: '解析Excel', allSheets: '所有报表', pleaseSelectFile: '请选择文件', pleaseSelectTemplate: '请选择报表', deleteSuccess: '删除成功', // 上传报表路径 importTemplateExcelFile: apiInterceptor.vatWebApiHostUrl + '/DataImport/importEntDataListExcelFile', // 是否是第一次画sheet 的dropdown isFirstDrawDxDropDown: true, underLineSeparator: '_', codeReg: /^[a-zA-Z0-9\.]*$/, codeError: 'code必须为英文字母或者数字', }; var thisData = { // 所有 sheet Name的数组 sheetNameList: [], // 所有sheet name 的列表[{id:1, name:'sheet名称'}] sheetNameObjList: [], sheetTreeView: null, // dropdown的显示文字 sheetText: thisConstant.allSheets, selectSheetNameList: [], // 查找现有报表,选择的报表列表 selectTemplateCodeList: [], findSheetTreeView: null }; var thisDataService = { newModel: function() { var editModel = {}; editModel.sheetSelectDxID = thisConstant.sheetSelectDxID; editModel.templateGroupID = $scope.templateModel.templateGroupID; editModel.findSheetDxDropID = thisConstant.findSheetDxDropID; editModel.reportType = $scope.templateModel.reportType; return editModel; }, // 获取sheet列表 getSheetList: function () { if (!$scope.editModel || !$scope.editModel.file) { return; } var deferred = $q.defer(); var tempFileName = PWC.newGuid() + '.dat'; var token = $('input[name="__RequestVerificationToken"]').val(); $('#busy-indicator-container').show(); Upload.upload({ url: thisConstant.uploadUrl, data: { filename: $scope.editModel.file.name, tempFileName: tempFileName, }, file: $scope.editModel.file, // resumeChunkSize: resumable ? $scope.chunkSize : null, headers: { 'Access-Control-Allow-Origin': '*', Authorization: apiInterceptor.tokenType + ' ' + apiInterceptor.apiToken, __RequestVerificationToken: token, withCredentials: true, }, __RequestVerificationToken: token, withCredentials: true }).then(function(resp) { var ret = resp.data; $('#busy-indicator-container').hide(); deferred.resolve(); if (ret.result) { // 导入成功 thisData.sheetNameList = ret.data; thisData.sheetNameObjList = thisDataService.parseSheetNameObjList(ret.data); // thisDataService.refreshSheetNameDropDownList(thisData.sheetNameObjList); thisDataService.drawSheetNameDropDownList(); } else { if (ret.resultMsg && ret.resultMsg.length > 0) { SweetAlert.warning($translate.instant(ret.resultMsg)); } else { SweetAlert.swal({ title: thisConstant.getSheetNameTitle, text: thisConstant.getSheetNameListError, type: "info", showCancelButton: false, closeOnConfirm: false, closeOnCancel: true, html: true }); } } }, function(resp) { deferred.resolve(); if (resp.statusText === 'HttpRequestValidationException') { SweetAlert.warning($translate.instant('HttpRequestValidationException')); } else { SweetAlert.warning('SaveFail'); } console.log('Error status: ' + resp.status); }, function(evt) { deferred.resolve(); var progressPercentage = parseInt(100.0 * evt.loaded / evt.total); $log.debug('progress: ' + progressPercentage + '% ' + evt.config.data.file.name); }); }, // 验证Template 的code list 必须为英文字母或者数字 validateTemplateCodeList: function(data) { if (data && data.length > 0) { for (var i = 0; i < data.length; i++) { if (!thisDataService.validateTemplateCode(data[i])) { return data[i] + thisConstant.codeError; } } } return null; }, // 验证Template 的code 必须为英文字母或者数字 validateTemplateCode: function(value) { // body... var arr = value.split(thisConstant.underLineSeparator); if (arr && arr.length > 0) { // code必须为英文字母或者数字 if (!thisConstant.codeReg.test(arr[0])) { return false; } } return true; }, // 转换sheet obj List parseSheetNameObjList: function(data) { var ret = []; if (data && data.length > 0) { for (var i = 0; i < data.length; i++) { var row = data[i]; var item = { name: row, }; item.id = row; ret.push(item); } } return ret; }, // 绘制sheet drop down list drawSheetNameDropDownList: function() { thisData.dxTreeViewDiv = '<div class="tree-view-list margin-sheet" id="' + thisConstant.sheetDxTreeID + '">'; $("#" + thisConstant.sheetSelectDxID).dxDropDownBox({ value: [], valueExpr: "id", displayExpr: "name", // text: thisConstant.allSheets, showClearButton: false, noDataText: '', dropDownOptions: { maxHeight: '380px' }, dataSource: thisData.sheetNameObjList, contentTemplate: function(e) { var value = e.component.option("value"), $treeView = $(thisData.dxTreeViewDiv).dxTreeView({ dataSource: e.component.option("dataSource"), dataStructure: "plain", keyExpr: "id", parentIdExpr: "parentID", selectionMode: "multiple", displayExpr: "name", selectByClick: true, noDataText: '', expandAllEnabled: true, selectNodesRecursive: true, showCheckBoxesMode: "selectAll", selectAllText: '全部', onSelectionChanged: function(args) { var value = args.component.getSelectedNodesKeys(); thisData.selectSheetNameList = value; e.component.option("value", value); } }); thisData.sheetTreeView = $treeView.dxTreeView("instance"); thisData.sheetText = e.component.option("text"); e.component.on("valueChanged", function(args) { // var value = args.value; // syncTreeViewSelection(thisData.sheetTreeView, value); }); return $treeView; } }); }, // 上传报表 save: function(modalInstance) { if (!$scope.editModel || !$scope.editModel.file) { SweetAlert.warning(thisConstant.pleaseSelectFile); return; } var deferred = $q.defer(); var tempFileName = PWC.newGuid() + '.dat'; var token = $('input[name="__RequestVerificationToken"]').val(); var json = ''; if (thisData.selectSheetNameList && thisData.selectSheetNameList.length > 0) { var validateRet = thisDataService.validateTemplateCodeList(thisData.selectSheetNameList); if (validateRet) { SweetAlert.warning(validateRet); return; } json = JSON.stringify(thisData.selectSheetNameList); } else { SweetAlert.warning(thisConstant.pleaseSelectTemplate); return; } // 转圈圈 $('#busy-indicator-container').show(); Upload.upload({ url: thisConstant.importTemplateExcelFile, data: { templateGroupID: $scope.editModel.templateGroupID, sheetList: json, filename: $scope.editModel.file.name, tempFileName: tempFileName, reportType: $scope.editModel.reportType }, file: $scope.editModel.file, // resumeChunkSize: resumable ? $scope.chunkSize : null, headers: { 'Access-Control-Allow-Origin': '*', Authorization: apiInterceptor.tokenType + ' ' + apiInterceptor.apiToken, __RequestVerificationToken: token, withCredentials: true, from: vatSessionService.project.dbName+'@cn.pwc.com' }, __RequestVerificationToken: token, withCredentials: true }).then(function(resp) { var ret = resp.data; $('#busy-indicator-container').hide(); deferred.resolve(); if (ret.result) { // 导入成功 // 获取name var array = thisData.selectSheetNameList[0].split(thisConstant.underLineSeparator); var resultModel = { name: array[1] }; SweetAlert.warning('上传成功'); modalInstance.close(resultModel); //$state.reload('cit.importData.documentList.reportView'); //$scope.onClosed({ model: null }); } else { if (ret.resultMsg && ret.resultMsg.length > 0) { SweetAlert.warning(ret.data + $translate.instant(ret.resultMsg)); } else { SweetAlert.swal({ title: thisConstant.getSheetNameTitle, text: thisConstant.getSheetNameListError, type: "info", showCancelButton: false, closeOnConfirm: false, closeOnCancel: true, html: true }); } } }, function(resp) { deferred.resolve(); if (resp.statusText === 'HttpRequestValidationException') { SweetAlert.warning($translate.instant('HttpRequestValidationException')); } else { SweetAlert.warning($translate.instant('SaveFail')); } console.log('Error status: ' + resp.status); }, function(evt) { deferred.resolve(); var progressPercentage = parseInt(100.0 * evt.loaded / evt.total); $log.debug('progress: ' + progressPercentage + '% ' + evt.config.data.file.name); }); }, saveFindAdd: function(modalInstance) { // body... if (!thisData.selectTemplateCodeList || thisData.selectTemplateCodeList.length === 0) { SweetAlert.warning(thisConstant.pleaseSelectTemplate); return; } var model = { serviceTypeID: $scope.editModel.serviceTypeID, payTaxType: $scope.editModel.payTaxType, reportType: $scope.editModel.reportType, industryIDs: $scope.editModel.industryIDs, templateGroupID: $scope.editModel.templateGroupID, templateIdList: thisData.selectTemplateCodeList }; var filterTemplate = _.filter(thisData.allTemplateList, function(row) { return model.templateIdList.indexOf(row.id) > -1; }); var codeKey = _.uniq(_.pluck(filterTemplate, 'code')); var repeatCode = []; codeKey.forEach(function(row) { var filter = _.filter(filterTemplate, function(t) { return row === t.code; }); if (filter && filter.length > 1) { repeatCode.push(row); } }); if (repeatCode && repeatCode.length > 0) { SweetAlert.warning(repeatCode.join(',') + '代码重复'); return; } templateGroupService.addExistTemplate(model).success(function(ret) { console.log(ret); if (ret.result) { // 选中的第一个报表 var bindModel = _.find(thisData.allTemplateList, function(row) { return row.templateGroupID && thisData.selectTemplateCodeList.indexOf(row.id) > -1; }); thisData.resultModel = bindModel; $scope.operateType = null; thisData.isUpdate = true; modalInstance.close(bindModel); } else { if (ret.resultMsg && ret.resultMsg.length > 0) { SweetAlert.warning($translate.instant(ret.resultMsg)); } else { SweetAlert.warning($translate.instant('SaveFail')); } } }); }, // 绘制查找sheet的dropdown 列表 drawFindSheetDropDownList: function(data) { // body... thisData.dxTreeViewFindDiv = '<div class="tree-view-list margin-find" id="' + thisConstant.findSheetDxTreeID + '">'; thisData.searchBoxDiv = '<div class="search-box" id="' + thisConstant.searchBoxDivId + '">'; // data.forEach(function(row){ // row.expanded = true; // }); var getSearchList = function(dataSource, value) { if (!value) { return dataSource; } dataSource.forEach(function (x) { x.expanded = false; }); var groupIDs = _.uniq(_.pluck(dataSource, 'parentID')); var group = _.filter(dataSource, function(row) { return groupIDs.indexOf(row.id) >= 0; }); var result = _.filter(dataSource, function(row) { if (!row.nameDisplay) { return false; } return row.nameDisplay.toLowerCase().indexOf(value.toLowerCase()) > -1; }); if (result && result.length > 0) { var templateGroup = _.uniq(_.pluck(result, 'parentID')); templateGroup.forEach(function(id) { internalSearchParent(result, group, id); }); } return result; }; var internalSearchParent = function (result, group, id) { var find = _.find(result, function (t) { return t.id === id; }); if (!find) { find = _.find(group, function (t) { return t.id === id; }); if (find) { if (find.parentID && !find.expanded) { internalSearchParent(result, group, find.parentID); } find.expanded = true; result.push(find); } } else if (find.parentID && !find.expanded) { internalSearchParent(result, group, find.parentID); } else { find.expanded = true; } }; var searchTextChange = function(value) { var o = $('#' + thisConstant.findSheetDxTreeID).dxTreeView('option'); var orgList = getSearchList(thisData.allTemplateList, value); o.dataSource = orgList; o.value = []; $('#' + thisConstant.findSheetDxTreeID).dxTreeView('option', o); }; $("#" + thisConstant.findSheetDxDropID).dxDropDownBox({ value: [], valueExpr: "id", displayExpr: "nameDisplay", // text: thisConstant.allSheets, showClearButton: false, noDataText: '', dropDownOptions: { maxHeight: '380px' }, dataSource: thisData.allTemplateList, contentTemplate: function(e) { var value = e.component.option("value"), $treeView = $(thisData.dxTreeViewFindDiv).dxTreeView({ dataSource: e.component.option("dataSource"), dataStructure: "plain", keyExpr: "id", parentIdExpr: "parentID", selectionMode: "multiple", displayExpr: "nameDisplay", expandedExpr: 'expanded', selectByClick: true, expandAllEnabled: true, selectNodesRecursive: true, showCheckBoxesMode: "normal", noDataText: '', height: '300px', value: [], itemTemplate: function(itemData, itemIndex, itemElement) { itemElement.append("<span title='" + itemData.nameDisplay + "'>" + itemData.nameDisplay + "</span>"); }, onItemSelectionChanged: function(args) { var value = args.component.getSelectedNodesKeys(); thisData.selectTemplateCodeList = value; e.component.option("value", value); } }); thisData.findSheetTreeView = $treeView.dxTreeView("instance"); thisData.sheetText = e.component.option("text"); var textBox = $(thisData.searchBoxDiv).dxTextBox({ placeholder: "搜索", mode: "search", onValueChanged: function(args) { var value = args.value; searchTextChange(value); }, onKeyUp: function(args) { var value = $(args.element).dxTextBox('option').text; searchTextChange(value); } }); e.component.on("valueChanged", function(args) { // var value = args.value; // syncTreeViewSelection(thisData.sheetTreeView, value); }); var wrapper = $("<div>").append(textBox).append('<br/>').append($treeView); return wrapper; } }); }, // 删除系统级别的报表 deleteSystemTemplate: function() { // 删除模板服务 var deleteTemplate = function(model) { templateGroupService.deleteTemplate(model).success(function(ret) { if (ret.result) { $scope.operateType = null; $scope.isUpdate = true; SweetAlert.warning('删除成功'); $scope.onClosed({ model: null }); $scope.operateType = null; } else { SweetAlert.warning($translate.instant('SaveFail')); } }); }; var text = "确定要删除报表" + $scope.templateModel.name + "吗?"; SweetAlert.swal({ title: '确定删除吗?', text: text, type: "warning", showCancelButton: true, confirmButtonColor: "#DD6B55", confirmButtonText: $translate.instant('Confirm'), cancelButtonText: $translate.instant('Cancel'), closeOnConfirm: false, closeOnCancel: true }, function(isConfirm) { if (isConfirm) { var model = { id: $scope.templateModel.id, isDeletePermanent: false, path: $scope.templateModel.path }; deleteTemplate(model); } else { $scope.operateType = null; $scope.isUpdate = false; } }); } }; var thisModalService = { open: function(editModel) { $scope.editModel = editModel; var modalInstance = $uibModal.open({ animation: false, ariaLabelledBy: 'modal-title', ariaDescribedBy: 'modal-body', templateUrl: 'editTemplateModal.html', windowClass: 'edit-template-modal-wrapper', scope: $scope, resolve: { editModel: editModel } }); modalInstance.result.then(function(data) { thisData.isUpdate = true; thisData.resultModel = data; $scope.onClosed({ model: data }); $scope.operateType = null; }, function() { $scope.operateType = null; $scope.isUpdate = false; $log.info('Modal dismissed at: ' + new Date()); }); $scope.getSheetList = thisDataService.getSheetList; // 确定 $scope.save = function () { thisDataService.save(modalInstance); } // 取消 $scope.cancel = function() { modalInstance.dismiss('cancel'); }; $timeout(function() { thisData.sheetNameObjList = []; // 下拉框内容 thisDataService.drawSheetNameDropDownList(); }, 10); }, newModel: function() { var editModel = thisDataService.newModel(); thisModalService.open(editModel); var serviceTypeID = $scope.templateModel.serviceTypeID; var payTaxType = (serviceTypeID === enums.serviceType.CIT) ? '' : $scope.templateModel.payTaxType; var reportType = (serviceTypeID === enums.serviceType.CIT) ? $scope.templateModel.reportType : ''; var industryIDs = $scope.templateModel.industryIDs; templateGroupService.getTemplateUniqList(serviceTypeID, payTaxType, reportType, industryIDs).success(function (data) { var result = data; if ($scope.templateModel.currentTemplateCodeList && $scope.templateModel.currentTemplateCodeList.length > 0) { result = _.filter(data, function(row) { return $scope.templateModel.currentTemplateCodeList.indexOf(row.code) === -1; }); } if (result && result.length > 0) { result.forEach(function(row) { if (row.code) { row.nameDisplay = row.name + thisConstant.underLineSeparator + row.code; } else { row.nameDisplay = row.name; } }); } thisData.allTemplateList = result; $timeout(function() { thisDataService.drawFindSheetDropDownList(thisData.allTemplateList); }, 10); }); }, // 删除报表Comfirm框 deleteTemplateComfirmModel: function() { var editModel = {}; editModel.title = "删除报表" + $scope.templateModel.code + thisConstant.underLineSeparator + $scope.templateModel.name; editModel.deleteConfirmText = '从当前模板删除还是整个系统中删除?'; editModel.id = $scope.templateModel.id; editModel.code = $scope.templateModel.code; editModel.name = $scope.templateModel.name; editModel.isSystemType = $scope.templateModel.isSystemType; editModel.path = $scope.templateModel.path; $scope.editModel = editModel; var modalInstance = $uibModal.open({ animation: true, backdrop: false, ariaLabelledBy: 'modal-title', ariaDescribedBy: 'modal-body', templateUrl: 'deleteTemplateModal.html', windowClass: 'edit-template-modal-wrapper', scope: $scope, resolve: { editModel: editModel } }); modalInstance.result.then(function(data) { $scope.templateModel = data; $scope.isUpdate = true; $scope.onClosed({ model: data }); $scope.operateType = null; }, function() { $scope.operateType = null; $scope.isUpdate = false; $log.info('Modal dismissed at: ' + new Date()); }); // 删除模板服务 var deleteTemplate = function(model) { templateGroupService.deleteTemplate(model).success(function(ret) { if (ret.result) { modalInstance.close(model); } else { SweetAlert.warning($translate.instant('SaveFail')); } }); }; // 删除关联 $scope.deleteRelation = function() { // thisDataService.saveFindAdd(modalInstance) var model = { id: $scope.editModel.id, isDeletePermanent: false, path: $scope.editModel.path }; deleteTemplate(model); }; // 永久删除 $scope.deletePermanent = function() { // var model = { id: $scope.editModel.id, isDeletePermanent: true, path: $scope.editModel.path }; deleteTemplate(model); }; // 取消 $scope.cancel = function() { modalInstance.dismiss('cancel'); }; }, // 编辑报表名称 editTemplateNameModal: function() { var editModel = { name: $scope.templateModel.name, id: $scope.templateModel.id, code: $scope.templateModel.code, title: '编辑报表' + $scope.templateModel.name }; $scope.editModel = editModel; var modalInstance = $uibModal.open({ animation: false, ariaLabelledBy: 'modal-title', ariaDescribedBy: 'modal-body', templateUrl: 'editTemplateNameModal.html', windowClass: 'edit-template-name-wrapper', size: 'sm', scope: $scope, resolve: { editModel: editModel } }); modalInstance.result.then(function(data) { $scope.isUpdate = true; $scope.onClosed({ model: data }); $scope.operateType = null; }, function() { $scope.operateType = null; $scope.isUpdate = false; $log.info('Modal dismissed at: ' + new Date()); }); // 删除模板服务 var updateTemplateName = function(model) { templateGroupService.updateTemplateName(model).success(function(ret) { if (ret.result) { // 导入成功 modalInstance.close(model); } else { if (ret.resultMsg && ret.resultMsg.length > 0) { SweetAlert.warning(ret.data + $translate.instant(ret.resultMsg)); } else { SweetAlert.warning($translate.instant('SaveFail')); } } }); }; // 修改报表名称 $scope.saveUpdateTemplateName = function() { // thisDataService.saveFindAdd(modalInstance) var model = { id: $scope.editModel.id, name: $scope.editModel.name, }; updateTemplateName(model); }; // 取消 $scope.cancel = function() { modalInstance.dismiss('cancel'); }; } }; var mainModule = { main: function() { $scope.editModel = {}; mainModule.watchFunction(); }, watchFunction: function() { $scope.$watch('operateType', function(newValue, oldValue) { if (newValue !== oldValue) { thisData.isUpdate = false; thisData.resultModel = null; $scope.isUpdate = false; } if (newValue === constant.Operation.Add) { thisModalService.newModel(); } else if (newValue === constant.Operation.Delete) { // 删除 if ($scope.templateModel) { if ($scope.templateModel.isSystemType) { // 系统级别直接删除,不用提示 thisDataService.deleteSystemTemplate(); } else { thisModalService.deleteTemplateComfirmModel(); } } } else if (newValue === constant.Operation.Edit) { thisModalService.editTemplateNameModal(); } }); } }; (function initialize() { mainModule.main(); })(); } ]);