infrastructureModule
    .controller('UserDetailViewController', ['$window', '$location', 'userService', '$stateParams', '$location', '$scope',
        '$log', 'SweetAlert', 'permissionService', '$translate', 'areaRegionService', 'uiGridTreeViewConstants', '$timeout',
        'areaService', 'uiGridConstants', '$interval', 'orgService', '$q', 'roleService', '$rootScope', '$state', 'userService',
        function ($window, $location, userService, $stateParams, $location, $scope,
            $log, SweetAlert, permissionService, $translate, areaRegionService, uiGridTreeViewConstants, $timeout,
            areaService, uiGridConstants, $interval, orgService, $q, roleService, $rootScope, $state, userService) {

            $scope.serviceType = constant.serviceType.VAT;
            var roleCardSelector = '#assign-user-box';

            $scope.back = function () {
                if ($rootScope.previousLocation.indexOf('user') > 0) {
                    //重新刷新数据
                    $state.go('user');
                } else {
                    $window.history.back();
                }
            };

            $scope.showOperateLogPop = function () {
                $scope.isShowLog = true;
            };

            // 添加或者编辑机构层级成功之后,刷新当前页面的数据
            $scope.$watch('userRolesIsUpdate', function (newValue, oldValue) {
                if (newValue) {
                    $scope.getOrgRoleListView();
                }
            });

            //设置角色,可添加或取消原始角色,可添加和取消额外角色。可设置访问不可访问
            $scope.setRoleToOrganization = function () {
                var selectedArr = [];
                var hasOneItem = false;
                $scope.roleList.forEach(function (item) {

                    if (item.isChecked) {
                        hasOneItem = true;
                    }

                    var selectedObject = {
                        id: PWC.newGuid(),
                        dimensionValueID: $scope.dimensionValueId,
                        dimensionID: $scope.dimensionId,
                        userID: $scope.userId,
                        organizationID: $scope.organizationId,
                        roleID: item.id,
                        isAdd: item.isChecked,
                        IsAccessible: $scope.roleEntity.isAccessible,
                        hasOriginalRole: $scope.roleEntity.hasOriginalRole
                    };

                    selectedArr.push(selectedObject);
                });

                if (!hasOneItem && $scope.roleEntity.isAccessible && !$scope.roleEntity.hasOriginalRole) {
                    showWarning("SelectAtLeastOneRole");
                    return false;
                };

                userService.updateUserRoleOrganization(selectedArr).success(function (data) {
                    if (data) {
                        showSuccessMsg("SaveSuccess");
                        //刷新用户角色列表
                        loadUserRole();
                    }
                });

            };

            //用户角色框隐藏
            $scope.closeSetRoleCard = function () {
                hideRoleInfoCard();
            };

            var hideRoleInfoCard = function () {
                $(roleCardSelector).hide();
            };

            //添加现有机构到当前用户权限控制
            $scope.addExistOrg = function () {
                var selectedKeyItem = [];
                $scope.orgSettingList.data.forEach(function (row) {
                    selectedKeyItem.push(row.orgID);
                });
                $scope.selectedKeyItems = selectedKeyItem;
                $scope.addExistOrgOperateType = constant.Operation.Add;
                $scope.addExistOrgIsUpdate = false;
            };

            //添加现有权限
            $scope.popupRoleAddWin = function () {

                if (!$scope.hasEditPermission) {
                    return;
                }
                var selectedKeyItem = [];
                $scope.roleInfoList.forEach(function (row) {
                    selectedKeyItem.push(row.roleID);
                });
                $scope.addExistRoleOperateType = constant.Operation.Add;
                $scope.addExistRoleIsUpdated = false;
                $scope.selectedRoleList = selectedKeyItem;
            };

            $scope.$watch('addExistRoleIsUpdated', function (newValue, oldValue) {
                if (newValue) {
                    if ($scope.selectedRoleList && $scope.selectedRoleList.length > 0) {

                        var removedRoles = [];
                        var addedRoles = [];
                        var roleIdList = _.map($scope.roleInfoList, function (item) {
                            return item.roleID;
                        });
                        var userRoleUpdateModel = {};

                        roleIdList.forEach(function (item) {
                            if ($scope.selectedRoleList.indexOf(item) < 0) {
                                removedRoles.push(item);
                            }
                        });

                        $scope.selectedRoleList.forEach(function (item) {
                            if (roleIdList.indexOf(item) < 0) {
                                addedRoles.push(item);
                            }
                        });

                        var userID = $scope.selectedUser.id;
                        userRoleUpdateModel.userID = userID;
                        userRoleUpdateModel.removedRoles = []; //如果取消掉,根据现在的需求不需要删除
                        userRoleUpdateModel.addedRoles = addedRoles;

                        if (addedRoles.length > 0) {
                            roleService.updateUserRole(userRoleUpdateModel).success(function (data) {
                                $scope.getUserRoleData();
                                $scope.getDimensionRoleListView();
                                $scope.getOrgRoleListView();

                                SweetAlert.success($translate.instant('addUserRoleTitle'), $translate.instant('addUserRoleSuccess'));
                            });
                        } else {
                            SweetAlert.success($translate.instant('operationSuccess'), $translate.instant('noAdditionalRoleAdded'));
                        }
                    }
                }
            });

            // 添加范围确认之后触发数据库更新操作
            $scope.$watch('addExistDimensionIsUpdated', function (newValue, oldValue) {
                if (newValue) {
                    if ($scope.selectedDimensionValueList && $scope.selectedDimensionValueList.length > 0) {

                        var addedDimensions = [];
                        var dimensionValueUpdateModel = {};

                        $scope.selectedDimensionValueList.forEach(function (item) {
                            if ($scope.originalDVlist == undefined || $scope.originalDVlist.indexOf(item) < 0) {
                                addedDimensions.push(item);
                            }
                        });

                        var userID = $scope.selectedUser.id;
                        dimensionValueUpdateModel.userID = userID;
                        dimensionValueUpdateModel.addedDimensions = addedDimensions;

                        var invalidItems = _.filter(addedDimensions, function (item) {
                            return item.parentID == null;
                        });

                        if (invalidItems.length == addedDimensions.length) {
                            SweetAlert.warning($translate.instant('addDimensionValueFirstWarn'));
                            return;
                        } else {

                            roleService.updateDimensionValues(dimensionValueUpdateModel).success(function (data) {
                                $scope.getDimensionRoleListView();

                                SweetAlert.success($translate.instant('addDimensionTitle'), $translate.instant('addDimensionSuccess'));
                            });
                        }
                    } else {
                        SweetAlert.warning($translate.instant('addDimensionValueFirstWarn'));
                        return;
                    }
                }
            });

            $scope.$watch('isUpdateUser', function (newValue, oldValue) {
                if (newValue) {
                    $scope.getUserRoleData();
                    $scope.getDimensionRoleListView();
                    $scope.getOrgRoleListView();
                }
            });

            var loadPermissionTree = function () {
                $scope.permissionTreeViewOptions = {
                    bindingOptions: {
                        dataSource: 'permissionTreeViewData',
                        searchValue: 'searchValue',
                        expandAllEnabled: 'expandAll'
                    },
                    dataStructure: "plain",
                    selection: {
                        mode: "single"
                    },
                    loadPanel: {
                        enabled: true
                    },
                    scrolling: {
                        mode: "virtual"
                    },
                    keyExpr: "id",
                    showRowLines: true,
                    showColumnLines: true,
                    rowAlternationEnabled: true,
                    showBorders: true,
                    selectAllText: $translate.instant('SelectAll'),
                    scrollDirection: 'vertical', //Accepted Values: 'vertical' | 'horizontal' | 'both'
                    selectNodesRecursive: true, //级联选择
                    //showCheckBoxesMode: 'selectAll', //Accepted Values: 'none' | 'normal' | 'selectAll'
                    noDataText: $translate.instant('NoDataText'),
                };
            };

            //显示角色卡片的时候,原始角色绑定,并绑定是否选中
            var getOrignalUserRole = function (userID) {
                //getUserRoleListByUserID
                userService.getUserRoleListByUserID(userID).success(function (data) {
                    if (data) {

                        var subRoleList = data && data.roleInfoList || [];
                        $scope.originalUserRoleList = subRoleList;
                        //console.log(JSON.stringify("rolelist:" + JSON.stringify(data.RoleInfoList)));
                    }

                });
            };

            //显示角色卡片的时候,获取所有当前用户的角色列表,如果在所有角色列表中有存在,则选中
            var getRoleByService = function (row, enumSettingType) {
                roleService.getRoleListByRoleTypeId(constant.serviceType.VAT).success(function (roleData) {
                    if (roleData) {
                        //$scope.roleList = roleData;

                        var selectedUserRole;
                        if (enumSettingType == 1) {
                            //当前维度行
                            selectedUserRole = _.find($scope.dimensionRoleList, function (item) {
                                return item.dimensionID == row.dimensionID && item.dimensionValueID == row.dimensionValueID;
                            });
                        } else {
                            selectedUserRole = _.find($scope.orgRoleList, function (item) {
                                return item.orgID == row.orgID;
                            });
                        }

                        //当前用户行的角色列表
                        var roleInfoList = selectedUserRole && selectedUserRole.extraRoleList;
                        var hasAllCheck = true;
                        if (roleInfoList && roleInfoList.length > 0) {
                            roleData.forEach(function (roleItem) {

                                var selectedRole = _.find(roleInfoList, function (item) {
                                    return item.roleID == roleItem.id;
                                });

                                if (selectedRole) {
                                    roleItem.isChecked = true;
                                } else {
                                    roleItem.isChecked = false;
                                    hasAllCheck = false;
                                }
                            });
                        } else {
                            hasAllCheck = false;
                        }
                        $scope.roleEntity.isAllRoleChecked = hasAllCheck;
                        $scope.roleEntity.isHeritable = row.hasOriginalRole;
                        $scope.roleEntity.isAccessible = row.isAccessible;
                        $scope.roleList = roleData;
                        // console.log(JSON.stringify(roleData));
                    }
                });
            };

            //点击显示当前用户的角色卡片
            $scope.showRoleInfoCard = function (row, enumSettingType) {

                $scope.enumSettingType = enumSettingType;
                $scope.roleEntity = {};
                $scope.dimensionValueID = row.entity.dimensionValueID;
                $scope.orgID = row.entity.orgID;
                $scope.dimensionID = row.entity.dimensionID;

                var roleCard = $(roleCardSelector);
                var rowId = $('#' + (row.entity.dimensionValueID || row.entity.orgID));

                getOrignalUserRole($scope.userID);
                getRoleByService(row.entity, enumSettingType);

                showOrgCard(roleCard, rowId, 40, 0);

            };

            //全部选中
            $scope.AllRoleChecked = function () {
                angular.forEach($scope.roleList, function (item) {
                    item.isChecked = $scope.roleEntity.isAllRoleChecked;
                });
            };

            var showWarning = function (resultMsg) {

                var errMsg = $translate.instant(resultMsg);
                SweetAlert.warning(errMsg);
            };

            //为事业部的值(其他维度的值)添加用户角色
            $scope.setRoleToDimensionValue = function () {

                if ($scope.enumSettingType == 1) {
                    saveUpdateRoleDimensionValue();
                } else {
                    saveUpateRoleOrg();
                }
                $scope.closeSetRoleCard();
            };

            var saveUpateRoleOrg = function () {
                var selectedArr = [];
                var hasOneItem = false;
                $scope.roleList.forEach(function (item) {

                    if (item.isChecked) {
                        hasOneItem = true;
                    }

                    var selectedObject = {
                        id: PWC.newGuid(),
                        userID: $scope.userID,
                        organizationID: $scope.orgID,
                        roleID: item.id,
                        isAdd: item.isChecked,
                        IsAccessible: $scope.roleEntity.isAccessible,
                        hasOriginalRole: $scope.roleEntity.isHeritable || false
                    };

                    selectedArr.push(selectedObject);
                });

                if (!hasOneItem && $scope.roleEntity.isAccessible && !$scope.roleEntity.hasOriginalRole) {
                    showWarning("SelectAtLeastOneRole");
                    return false;
                };

                userService.updateUserRoleOrganization(selectedArr).success(function (data) {
                    if (data) {
                        showSuccessMsg("SaveSuccess");
                        //刷新用户角色列表
                        $scope.getOrgRoleListView();
                    }
                });
            };

            var saveUpdateRoleDimensionValue = function () {
                var selectedArr = [];
                var hasOneItem = false;
                $scope.roleList.forEach(function (item) {

                    if (item.isChecked) {
                        hasOneItem = true;
                    }

                    var selectedObject = {
                        id: PWC.newGuid(),
                        dimensionValueID: $scope.dimensionValueID,
                        dimensionID: $scope.dimensionID,
                        userID: $scope.userID,
                        roleID: item.id,
                        isAdd: item.isChecked,
                        IsAccessible: $scope.roleEntity.isAccessible,
                        hasOriginalRole: $scope.roleEntity.isHeritable || false
                    };

                    selectedArr.push(selectedObject);
                });

                if (!hasOneItem && $scope.roleEntity.isAccessible && !$scope.roleEntity.isHeritable) {
                    showWarning("SelectAtLeastOneRole");
                    return false;
                };

                userService.updateUserRoleDimension(selectedArr).success(function (data) {
                    if (data) {
                        $scope.getDimensionRoleListView();
                        showSuccessMsg("SaveSuccess");
                    }
                });
            };

            var showSuccessMsg = function (resultMsg) {

                var errMsg = $translate.instant(resultMsg);
                SweetAlert.success(errMsg);
            };

            //用户角色框隐藏
            $scope.closeSetRoleCard = function () {
                hideRoleInfoCard();
            };

            var hideRoleInfoCard = function () {
                $(roleCardSelector).hide();
            };

            // 显示机构角色卡片  
            var showOrgCard = function (popCard, row, topOffset, leftOffset) {

                popCard.css("display", "block");

                var top = row.offset().top + topOffset;
                if (top + popCard.height() > window.innerHeight) {
                    top = window.innerHeight - popCard.height() - 20;
                }

                popCard.css('top', top + 'px');

                var left = row.offset().left + leftOffset;
                if (left + popCard.width() > window.innerWidth) {
                    left = row.offset().left - popCard.width() - 30;
                }

                popCard.css('left', left + 'px');

                popCard.show();
                event.stopPropagation();
            };

            $scope.loadPermissions = function (roleID, $event) {

                //如果点击的是x,就不需要加载其他数据了
                var element = $event.target;
                var closeEle = $(element).hasClass('fa');

                if (closeEle) {
                    return;
                }

                //获取全部的权限
                //前端选中该节点
                $scope.selectedRoleID = roleID;
                if (roleID == '0') {
                    getAllPermissionsByRoleIDList();
                } else {
                    $scope.getDevTreePermissionsByRoleID($scope.selectedRoleID, $scope.serviceType);
                }
            };

            var getAllPermissionsByRoleIDList = function () {
                var roleIDList = _.map($scope.roleInfoList, function (item) {
                    return item.roleID;
                });
                $scope.getDevTreePermissionsByRoleIDList(roleIDList, $scope.serviceType);
            };

            //获取指定角色ID的权限
            $scope.getDevTreePermissionsByRoleID = function (roleID, serviceID) {
                permissionService.getDevTreePermissionsByRoleID(roleID, serviceID).success(function (data) {
                    $scope.permissionTreeViewData = data.permissionDevTreeList;;

                });
            };

            //获取指定角色列表的权限合集
            $scope.getDevTreePermissionsByRoleIDList = function (roleIDList, serviceID) {
                permissionService.getDevTreePermissionsByRoleIDList(roleIDList, serviceID).success(function (data) {
                    $scope.permissionTreeViewData = data;
                });
            };

            // 修改用户
            $scope.updateUser = function (user) {
                if (!$scope.hasEditPermission) {
                    return;
                }

                if ($scope.userOperateType === constant.Operation.Edit) {
                    $scope.userOperateType = null;
                }

                $scope.userOperateType = constant.Operation.Edit;
                $scope.isUpdateUser = false;
                $scope.selectedUser = {
                    id: user.id
                };
            };

            // 禁用用户
            $scope.disableUser = function (user) {
                if (!$scope.hasEditPermission) {
                    return;
                }
                if ($scope.userOperateType === constant.Operation.Disable) {
                    $scope.userOperateType = null;
                }

                $scope.userOperateType = constant.Operation.Disable;
                $scope.isUpdateUser = false;
                $scope.selectedUser = {
                    id: user.id,
                    userName: user.userName,
                    currentStatus: user.status
                };
            };

            // 启用用户
            $scope.enable = function (user) {
                if (!$scope.hasEditPermission) {
                    return;
                }
                if ($scope.userOperateType === constant.Operation.Enable) {
                    $scope.userOperateType = null;
                }

                $scope.userOperateType = constant.Operation.Enable;
                $scope.isUpdateUser = false;
                $scope.selectedUser = {
                    id: user.id,
                    userName: user.userName,
                    currentStatus: user.status
                };
            };

            //删除用户角色
            $scope.removeRole = function (role) {
                if (!$scope.hasEditPermission) {
                    return;
                }

                var roleDeleteText;
                if (role.roleID !== '0') {
                    roleDeleteText = $translate.instant('roleDeleteConfirm') + ' - ' + role.roleName + '?';
                } else {
                    roleDeleteText = $translate.instant('allRoleDeleteConfirm') + '?';
                }

                SweetAlert.swal({
                    title: $translate.instant('ConfirmDelete') + '?',
                    text: roleDeleteText,
                    type: "warning",
                    showCancelButton: true,
                    confirmButtonColor: "#DD6B55",
                    confirmButtonText: $translate.instant('Confirm'),
                    cancelButtonText: $translate.instant('Cancel'),
                    closeOnConfirm: false,
                    closeOnCancel: true
                }, function (isConfirm) {
                    if (isConfirm) {

                        if (role.roleID == '0') {
                            var roleIDList = _.map($scope.roleInfoList, function (item) {
                                return item.roleID;
                            });

                            roleService.removeUserRole($scope.userID, roleIDList, $scope.serviceType).success(function (data) {
                                if (data) {
                                    //同时刷新上层维度设置和各机构设置    
                                    $scope.getUserRoleData();
                                    $scope.getDimensionRoleListView();
                                    $scope.getOrgRoleListView();
                                }
                            });
                            $scope.roleInfoList = [];
                        } else {
                            var roleList = [];
                            roleList.push(role.roleID);
                            roleService.removeUserRole($scope.userID, roleList, $scope.serviceType).success(function (data) {
                                if (data) {
                                    //同时刷新上层维度设置和各机构设置  
                                    $scope.getDimensionRoleListView();
                                    $scope.getOrgRoleListView();
                                }
                            });
                            $scope.roleInfoList = _.without($scope.roleInfoList, _.find($scope.roleInfoList, function (item) {
                                return item.roleID === role.roleID
                            }));

                            if ($scope.roleInfoList.length === 1) {
                                var singleRole = $scope.roleInfoList[0];
                                if (singleRole.roleID === '0') {
                                    getAllPermissionsByRoleIDList();
                                }
                            }
                        }

                        SweetAlert.success($translate.instant('deleteUserRoleTitle'), $translate.instant('deleteUserRoleSuccess'));
                    }
                });
            };

            $scope.getGridHeight = function () {
                return {};
            };

            $scope.getUserRoleData = function () {

                var userId = $stateParams.id;
                $scope.userID = userId;

                userService.GetUserById(userId).success(function (data) {
                    $scope.user = data;

                    var filterOperationObjectList = [];
                    filterOperationObjectList.push(data.userName);

                    $scope.filterOperationObjectList = filterOperationObjectList;

                    console.log(data);
                });

                $scope.selectedUser = {
                    id: userId
                };

                roleService.getAllRoleListByUserID(userId, $scope.serviceType).success(function (data) {

                    //默认添加全部角色 
                    data.unshift({
                        roleName: '全部角色',
                        roleID: '0'
                    });
                    $scope.roleInfoList = data;

                    $scope.selectedRoleID = data !== undefined && data.length > 0 ? data[0].roleID : '';
                    //$scope.getDevTreePermissionsByRoleID($scope.selectedRoleID, $scope.serviceType);
                    getAllPermissionsByRoleIDList();
                });
            };

            $scope.toggleCallback = function (ivhNode, isExpand, ivhTree) {
                console.log(ivhNode);
            };

            $scope.tickCheckbox = function (ivhNode, isExpand, ivhTree) {
                console.log(ivhNode);
            };

            $scope.filter = function () {
                var searchValue = $scope.searchText;
                if (searchValue !== '') {

                    var xx = $.extend(true, {}, $scope.data);

                    var tempData = _.filter(xx, function (item) {
                        return (item.orgName !== undefined && item.orgName.indexOf(searchValue) >= 0) ||
                            (item.businessUnit !== undefined && item.businessUnit.indexOf(searchValue) >= 0) ||
                            (item.areaName !== undefined && item.areaName.indexOf(searchValue) >= 0) ||
                            (item.industryName !== undefined && item.industryName.indexOf(searchValue) >= 0) ||
                            (item.userInfo !== undefined && item.userInfo.indexOf(searchValue) >= 0);
                    });

                    tempData.forEach(function (item) { item.$$treeLevel = 0; });
                    $scope.areaORGGridList.data = tempData;
                } else {
                    $scope.areaORGGridList.data = $scope.data;
                }
            };

            $scope.AddOrg = function (buID) {
                $scope.orgOperateType = constant.Operation.Add;
                $scope.selectedOrg = null;
                $scope.isOrgUpdate = false;
                $scope.organization = {
                    businessUnitID: buID
                };
            };

            //添加现有维度
            $scope.popupDimensionAddWin = function () {

                $scope.addExisDimensionOperateType = constant.Operation.Add;
                $scope.addExistDimensionIsUpdated = false;
                $scope.selectedDimensionValueList = [];

                $scope.generalSettingList.data.forEach(function (item) {
                    $scope.selectedDimensionValueList.push(item.dimensionValueID);
                    $scope.originalDVlist = angular.copy($scope.selectedDimensionValueList);
                });
            };

            //获取机构上层维度设置
            $scope.getDimensionRoleListView = function () {

                var userId = $stateParams.id;
                orgService.getOrgBuAreaIndustryUser(userId).success(function (data) {

                    data.forEach(function (row) {
                        var uniqueRoleList = _.uniq(row.roleList, function (item) {
                            return item.roleID;
                        });

                        if (row.isAccessible) {
                            var roleNameList = _.map(uniqueRoleList, function (x) {
                                return x.roleName;
                            }).join(',');
                            row.roleName = roleNameList;
                        } else {
                            row.roleName = $translate.instant('NonAccessible'); //不可访问
                        }

                        row.extraRoleList = _.filter(row.roleList, function (item) {
                            return item.roleSource == constant.roleSource.DimensionLevel;
                        });

                    });

                    $scope.dimensionRoleList = data;
                    $scope.generalSettingList.data = data;
                    $scope.getOrgRoleListView();
                });
            };

            //获取机构设置
            $scope.getOrgRoleListView = function () {

                var userId = $stateParams.id;
                userService.getUserRoleByUserID(userId).success(function (data) {
                    if (data && data.orgDtoList)
                        data.orgDtoList.forEach(function (row) {

                            //var uniqueRoleList = _.uniq(row.roleList, function (item) {
                            //    return item.id;
                            //});

                            //var roleNameList = _.map(uniqueRoleList, function (x) { return x.name; }).join(',');
                            //row.roleName = roleNameList;
                            //row.extraRoleList = _.filter(row.roleList, function (item) {
                            //    return item.roleSource == constant.roleSource.OrganizationLevel;
                            //});
                            var uniqRoleList = _.uniq(row.roleList, function (item) { return item.id });

                            if (row.isAccessible) {
                                if (uniqRoleList && uniqRoleList.length > 0) {
                                    row.roleName = _.map(uniqRoleList, function (x) { return x.name; }).join(constant.comma);
                                }
                                else {
                                    row.roleName = $translate.instant('NoRole');
                                }
                            }
                            else {
                                row.roleName = $translate.instant('NonAccessible'); //不可访问
                            }
                        });

                    $scope.orgRoleList = data.orgDtoList;
                    $scope.orgSettingList.data = data.orgDtoList;
                    $scope.allOrgInfo = data.orgRoleInfoList;
                });
            };

            //添加现有机构
            $scope.$watch('addExistOrgIsUpdate', function (newValue, oldValue) {
                if (newValue) {
                    if ($scope.selectedExistOrgList && $scope.selectedExistOrgList.length > 0) {
                        var orgList = [];
                        var newAddedItems = [];

                        $scope.orgSettingList.data.forEach(function (row) {
                            orgList.push(row.orgID);
                        });
                        var selectedOrgIdList = _.map($scope.selectedExistOrgList, function (item) {
                            return item.id;
                        });
                        selectedOrgIdList.forEach(function (orgId) {
                            if (orgList.indexOf(orgId) < 0) {
                                newAddedItems.push(orgId);
                            }
                        });

                        var userID = $stateParams.id;
                        roleService.updateUserOrg(newAddedItems, userID).success(function (data) {
                            $scope.getOrgRoleListView();
                            SweetAlert.success($translate.instant('addExistOrgTitle'), $translate.instant('addOrgListSuccess'));
                        });
                    }
                }
            });


            var areaORGGridInit = function () {
                $scope.areaORGGridList = {
                    enableRowSelection: true,
                    enableSelectAll: false,
                    rowHeight: 40,
                    enableRowHeaderSelection: false,
                    modifierKeysToMultiSelect: false,
                    enableHorizontalScrollbar: uiGridConstants.scrollbars.NEVER,
                    enableVerticalScrollbar: uiGridConstants.scrollbars.enableVerticalScrollbar,

                    enableSorting: true,
                    enableColumnMenus: false,
                    enableFiltering: false,
                    showTreeExpandNoChildren: false,
                    enableFullRowSelection: true, //是否点击行任意位置后选中,默认为false
                    multiSelect: false, // 是否可以选择多个,默认为true; 
                    columnDefs: [{
                        field: 'orgName',
                        name: $translate.instant('OrganizationName'),
                        headerCellClass: '',

                        cellTemplate: '<div ng-class="{true: \'text-align-left\', false: \'text-align-left-padding\'}[!row.entity.isOrganization]"><span title="{{row.entity.orgName}}">{{row.entity.orgName}}</span></div>'
                    }, {
                        field: 'businessUnit',
                        name: $translate.instant('BusinessUnitTitleName'),
                        headerCellClass: '',

                        cellTemplate: '<div class="text-align-left"><span title="{{row.entity.businessUnit}}">{{row.entity.businessUnit}}</span></div>'
                    }, {
                        field: 'area',
                        name: $translate.instant('AreaTitleName'),
                        headerCellClass: '',

                        cellTemplate: '<div class="text-align-left"><span>{{row.entity.areaName}}</span></div>'
                    }, {
                        field: 'industry',
                        name: $translate.instant('IndustryTitleName'),
                        headerCellClass: '',

                        cellTemplate: '<div class="text-align-left"><span>{{row.entity.industryName}}</span></div>'
                    }, {
                        field: 'user',
                        name: $translate.instant('UserTitleName'),
                        headerCellClass: '',

                        cellTemplate: '<div class="text-align-left"><span>{{row.entity.userInfo}}</span></div>'
                    }],
                    onRegisterApi: function (gridApi) {

                        $scope.gridApi = gridApi;

                        $scope.gridSelectCount = $scope.gridApi.selection.getSelectedRows().length;
                        var onRowsRenderedOff = gridApi.core.on.rowsRendered(null, function () {
                            onRowsRenderedOff(); // run once
                            PWC.triggerRowSelectOnClick('#etsGrid'); // requires '.ui-grid-canvas'
                        });
                        // call resize every 500 ms for 5 s after modal finishes opening - usually only necessary on a bootstrap modal
                        $interval(function () {
                            $scope.gridApi.core.handleWindowResize();
                        }, 500, 60 * 60 * 8);

                    }
                };

                $scope.getRoleListWithComma = function (roleList) {
                    var nameList = _.map(roleList, function (item) {
                        return item.roleName
                    });
                    return nameList.join(',');
                };

                var str = '';
                if ($scope.hasEditPermission) {
                    str = '<div class="text-align-left"><span>&nbsp;<i class="fa fa-trash" style="color:#ee7749" aria-hidden="true" ng-click="grid.appScope.deleteDimensionRole(row)"></i></span></div>';
                } else {
                    str = '<div class="text-align-left"><span class="no-permission">&nbsp;<i class="fa fa-trash" style="color:#ee7749" aria-hidden="true"></i></span></div>';
                }

                //机构上层维度设置 grid初始化
                $scope.generalSettingList = {
                    enableRowSelection: true,
                    enableSelectAll: false,
                    rowHeight: 40,
                    enableRowHeaderSelection: false,
                    modifierKeysToMultiSelect: false,
                    enableHorizontalScrollbar: uiGridConstants.scrollbars.NEVER,
                    enableVerticalScrollbar: uiGridConstants.scrollbars.enableVerticalScrollbar,

                    enableSorting: true,
                    enableColumnMenus: false,
                    enableFiltering: false,
                    showTreeExpandNoChildren: false,
                    enableFullRowSelection: true, //是否点击行任意位置后选中,默认为false
                    multiSelect: false, // 是否可以选择多个,默认为true; 
                    columnDefs: [{
                        field: 'roleObject',
                        width: '20%',
                        name: $translate.instant('RoleDimensionTitle'),
                        headerCellClass: '',

                        cellTemplate: '<div><span title="{{row.entity.dimensionName}}" style="padding-left:10px;">{{row.entity.dimensionName}}</span></div>'
                    }, {
                        field: 'accessControl',
                        name: $translate.instant('DimensionName'),
                        headerCellClass: '',
                        width: '20%',
                        cellTemplate: '<div><span title="{{row.entity.dimensionValueName}}" style="padding-left:10px;">{{row.entity.dimensionValueName}}</span></div>'
                    }, {
                        field: 'role',
                        name: $translate.instant('RoleTitle'),
                        headerCellClass: '',
                        width: '39%',
                        cellTemplate: '<div class="text-align-left"  id="{{row.entity.dimensionValueID}}"  aria-hidden="true" ng-click="grid.appScope.showRoleInfoCard(row,1)"><span title="{{row.entity.roleName}}">{{row.entity.roleName |limitString:32 }}</span></div>'
                    }, {
                        field: 'array',
                        name: '',
                        headerCellClass: '',
                        width: '1%',
                        cellTemplate: '<div class="text-align-left"  id="{{row.entity.dimensionValueID}}"  aria-hidden="true" ng-click="grid.appScope.showRoleInfoCard(row,1)"><i class="fa fa-caret-down icon-right" style="padding-left: 0px;"></i></div>'
                    }, {
                        field: 'role',
                        name: $translate.instant('OrgUserAction'),
                        headerCellClass: '',
                        width: '20%',
                        cellTemplate: str
                    }],
                    onRegisterApi: function (gridApi) {

                        $scope.gridApi = gridApi;

                        $scope.gridSelectCount = $scope.gridApi.selection.getSelectedRows().length;
                        var onRowsRenderedOff = gridApi.core.on.rowsRendered(null, function () {
                            onRowsRenderedOff(); // run once
                            //PWC.triggerRowSelectOnClick('#etsGrid'); // requires '.ui-grid-canvas'
                        });
                        // call resize every 500 ms for 5 s after modal finishes opening - usually only necessary on a bootstrap modal
                        $interval(function () {
                            $scope.gridApi.core.handleWindowResize();
                        }, 500, 60 * 60 * 8);

                    }
                };

                $scope.isChecked = true;

                $scope.switchCheck = function () {
                    $scope.isChecked = !$scope.isChecked;
                };


                var orgStr = '';
                if ($scope.hasEditPermission) {
                    orgStr = '<div class="text-align-left"><span><i style="color: #404041;" class="material-icons" ng-click="grid.appScope.modifyOrgRole(row)">create</i>&nbsp;<i class="fa fa-trash" style="color:#ee7749" aria-hidden="true" ng-click="grid.appScope.deleteOrgRole(row)"></i></span></div>';
                } else {
                    orgStr = '<div class="text-align-left"><span class="no-permission"><i class="material-icons">create</i>&nbsp;<i class="fa fa-trash" style="color:#ee7749" aria-hidden="true"></i></span></div>';
                }
                //机构设置 grid初始化
                $scope.orgSettingList = {
                    enableRowSelection: true,
                    enableSelectAll: false,
                    rowHeight: 40,
                    enableRowHeaderSelection: false,
                    modifierKeysToMultiSelect: false,
                    enableHorizontalScrollbar: uiGridConstants.scrollbars.NEVER,
                    enableVerticalScrollbar: uiGridConstants.scrollbars.enableVerticalScrollbar,

                    enableSorting: true,
                    enableColumnMenus: false,
                    //enableColumnResizing: true,
                    enableFiltering: false,
                    showTreeExpandNoChildren: false,
                    enableFullRowSelection: true, //是否点击行任意位置后选中,默认为false
                    multiSelect: false, // 是否可以选择多个,默认为true; 
                    columnDefs: [{
                        field: 'orgNameTitle',
                        name: $translate.instant('OrgNameTitle'),
                        headerCellClass: '',
                        width: '35%',
                        cellTemplate: '<div ng-class="{true: \'text-align-left\', false: \'text-align-left-padding\'}[!row.entity.isOrganization]"><span title="{{row.entity.orgName}}">{{row.entity.orgName | limitString:30}}</span></div>'
                    }, {
                        field: 'roleTitle',
                        name: $translate.instant('RoleTitle'),
                        headerCellClass: '',
                        width: '40%',
                        cellTemplate: '<div class="text-align-left"  id="{{row.entity.orgID}}"  aria-hidden="true"><span title="{{row.entity.roleName}}">{{row.entity.roleName |limitString:32 }}</span></div>'
                    }, {
                        field: 'roleAction',
                        name: $translate.instant('OrgUserAction'),
                        headerCellClass: '',
                        width: '25%',
                        cellTemplate: orgStr
                    }],
                    onRegisterApi: function (gridApi) {

                        $scope.gridApi = gridApi;

                        $scope.gridSelectCount = $scope.gridApi.selection.getSelectedRows().length;
                        var onRowsRenderedOff = gridApi.core.on.rowsRendered(null, function () {
                            onRowsRenderedOff(); // run once
                            //PWC.triggerRowSelectOnClick('#etsGrid'); // requires '.ui-grid-canvas'
                        });
                        // call resize every 500 ms for 5 s after modal finishes opening - usually only necessary on a bootstrap modal
                        $interval(function () {
                            $scope.gridApi.core.handleWindowResize();
                        }, 500, 60 * 60 * 8);

                    }
                };

            };

            $scope.modifyDimensionRole = function (data) {
                console.log('modifyDimensionRole:', data);
            };

            $scope.deleteDimensionRole = function (data) {

                var userId = $stateParams.id;

                SweetAlert.swal({
                    title: $translate.instant('ConfirmDelete') + '?',
                    text: $translate.instant('userDimensionDeleteConfirm') + '?',
                    type: "warning",
                    showCancelButton: true,
                    confirmButtonColor: "#DD6B55",
                    confirmButtonText: $translate.instant('Confirm'),
                    cancelButtonText: $translate.instant('Cancel'),
                    closeOnConfirm: false,
                    closeOnCancel: true
                }, function (isConfirm) {
                    if (isConfirm) {
                        orgService.deleteUserDimensionValue(data.entity, userId).success(function (data) {
                            $scope.getDimensionRoleListView();
                            SweetAlert.success($translate.instant('deleteRoleUserDetailTitle'), $translate.instant('deleteUserDimensionSuccess'));
                        });
                    }
                });
            };

            $scope.modifyOrgRole = function (row) {

                console.log(row);
                $scope.userRoleOperateType = constant.Operation.Edit;
                $scope.selectedOrgID = row.entity.orgID;
                $scope.selectedUserID = $scope.userID;
                $scope.userRolesIsUpdate = false;
            };

            $scope.deleteOrgRole = function (data) {

                var userId = $stateParams.id;

                SweetAlert.swal({
                    title: $translate.instant('ConfirmDelete') + '?',
                    text: $translate.instant('userOrgDeleteConfirm') + '?',
                    type: "warning",
                    showCancelButton: true,
                    confirmButtonColor: "#DD6B55",
                    confirmButtonText: $translate.instant('Confirm'),
                    cancelButtonText: $translate.instant('Cancel'),
                    closeOnConfirm: false,
                    closeOnCancel: true
                }, function (isConfirm) {
                    if (isConfirm) {

                        var selectedArr = [];
                        var allOrgInfo = _.filter($scope.allOrgInfo, function (item) {
                            return item.organizationID == data.entity.orgID;
                        });

                        if (allOrgInfo && allOrgInfo.length > 0) {
                            allOrgInfo.forEach(function (row) {
                                var selectedObject = {
                                    dimensionValueID: row.dimensionValueID,
                                    dimensionID: row.dimensionID,
                                    userID: userId,
                                    organizationID: row.organizationID,
                                    isHeritable: false //设置维度在机构上,是否可继承
                                };
                                selectedArr.push(selectedObject);
                            });
                        }


                        userService.deleteUserRoleOrg(selectedArr).success(function (data) {
                            if (data) {
                                SweetAlert.success($translate.instant('deleteRoleUserDetailTitle'), $translate.instant('deleteUserOrgSuccess'));
                                $scope.getOrgRoleListView();
                            }
                        });
                        //orgService.deleteUserOrg(data.entity, userId).success(function (data) {
                        //    $scope.getOrgRoleListView();
                        //    SweetAlert.success($translate.instant('deleteRoleUserDetailTitle'), $translate.instant('deleteUserOrgSuccess'));
                        //});
                    }
                });
            };


            var getUserPermission = function () {

                var list = [];

                var userManageTemp = constant.adminPermission.infrastructure.userManage;
                list.push(userManageTemp.addCode);
                list.push(userManageTemp.editCode);

                $scope.$root.checkUserPermissionList(list).success(function (data) {
                    $scope.hasAddPermission = data[userManageTemp.addCode];
                    $scope.hasEditPermission = data[userManageTemp.editCode];
                    areaORGGridInit();
                });
            };

            (function initialize() {
                $log.debug('UserDetailViewController.ctor()...');

                $scope.roleEntity = {};

                $scope.hasAddPermission = false;

                $scope.hasEditPermission = false;

                getUserPermission();

                loadPermissionTree();

                $scope.getDimensionRoleListView();
                $scope.getOrgRoleListView();

                $scope.getUserRoleData();

            })();
        }
    ]);