basicDataModule .controller('RegionManageController', ['$scope', '$log', 'SweetAlert', 'regionService', '$translate', 'areaRegionService', 'uiGridTreeViewConstants', '$timeout', 'areaService', '$q', function ($scope, $log, SweetAlert, regionService, $translate, areaRegionService, uiGridTreeViewConstants, $timeout, areaService, $q) { 'use strict'; var tree; $scope.my_tree = tree = {}; $scope.defaultCity = { id: '', parentID: '', name: '' }; $scope.regionTypeData = [{ type: 0, name: $translate.instant('AdministrativeRegions') }, { type: 1, name: $translate.instant('CustomArea') }]; var isActiveMap = { false: 'Enable', true: 'Disable' }; $scope.awesomeCallback = function (node, tree) { // Do something with node or tree $log.info('callback'); }; $scope.otherAwesomeCallback = function (node, isSelected, tree) { // Do soemthing with node or tree based on isSelected $log.info('other call back', node); $scope.tree = tree; } var getProvinceAndCityList = function (branch) { var citys = []; if (branch.itemData.data.isArea) { // 如果是自定义区域 if (branch.children && branch.children.length > 0) { branch.children.forEach(function (row) { if (!row.itemData.data.isArea) { var tempList = getProvinceAndCityList(row); citys = _.union(citys, tempList); } }); } } else { // 如果是行政区域, 省 if (branch.children && branch.children.length > 0) { var tempCities = []; branch.children.forEach(function (row) { citys.push({ id: row.itemData.id, name: row.text, level: 2, status: 2, parentId: row.itemData.parentId, }); }); //var allCities = _.find($scope.provinceCityData, function(num) { // return num.id === branch.itemData.id //}); //if (allCities && allCities.children && allCities.children.length === branch.children.length) { // citys.push({ // id: branch.itemData.id, // name: branch.text, // level: 1, // status: 2 // }); //} else { // citys.push({ // id: branch.itemData.id, // name: branch.text, // level: 1, // status: 1 // }); //} } else { // 市 } } return citys; }; var colorPanel = { // 颜色列表 // yellow,orange,gold colorList: ['#FFB300', '#FEE002', '#FFFA23'], createNew: function () { var colorPanelInstance = {}; colorPanelInstance.index = 0; colorPanelInstance.getNextColor = function () { if (colorPanelInstance.index >= colorPanel.colorList.length - 1) { colorPanelInstance.index = 0; } else { colorPanelInstance.index++; } return colorPanel.colorList[colorPanelInstance.index]; } return colorPanelInstance; } }; var colorPanelInstance = colorPanel.createNew(); //var loadRegionTree = function () { // $scope.doing_async = true; // regionService.getSettingRegionTree().success(function (data) { // initParam(); // setAreaRegionTreeColor(data); // $scope.areaRegionTreeData = data; // $timeout(function () { // if ($scope.selectedBranch) { // $scope.gridInstance.selectItem($scope.selectedBranch.key); // } else { // $scope.gridInstance.selectItem(data[0].id); // } // }, 20); // }); //}; var setAreaRegionTreeColor = function (data) { if (data && data.length > 0) { data.forEach(function (row) { var color = colorPanelInstance.getNextColor(); row.data.color = color; if (row.items && row.items.length > 0) { row.items.forEach(function (row2) { setColor(row2, color); }); } }); // if (data[0].items && data[0].items.length > 0) { // data[0].items.forEach(function(row) { // var color = colorPanelInstance.getNextColor(); // row.data.color = color; // if (row.children && row.children.length > 0) { // row.children.forEach(function(row2) { // setColor(row2, color); // }); // } // }); // } } }; var orders = new DevExpress.data.ODataStore({ url: "http://localhost:20001/api/v1/region/getSettingRegionTree" }); var dataSource = new DevExpress.data.DataSource({ load: function (loadOptions) { var d = new $.Deferred(); regionService.getSettingRegionTree().success(function (data) { initParam(); setAreaRegionTreeColor(data); //$scope.areaRegionTreeData = data; $timeout(function () { if ($scope.selectedBranch) { $scope.gridInstance.selectItem($scope.selectedBranch.key); } else { // 菜单直接点进来就可以加一级 // $scope.gridInstance.selectItem(data[0].id); } }, 20); d.resolve(data); }); return d.promise(); } }); $scope.unSelectArea = function (event) { var className = event.target.className; if (className && (className.indexOf('cannot-click') > -1 || className.indexOf('material-icons') > -1)) { return; } $scope.gridInstance.unselectAll(); $scope.selectedBranch = null; initParam(); $timeout(refreshMap, 20); }; var loadRegionTree = function () { $scope.areaTreeViewOptions = { // bindingOptions: { // dataSource: 'areaRegionTreeData', // searchValue: 'searchValue', // expandAllEnabled: 'expandAll', // }, itemTemplate: 'itemAreaTreeTemplate', dataStructure: "plain", //dataSource: new DevExpress.data.DataSource({ // store: new DevExpress.data.ODataStore({ // url: "http://localhost:20001/api/v1/region/getSettingRegionTree" // }) //}), dataSource: dataSource, // remoteOperations: { // sorting: true, // //paging: true // }, // selection: { // mode: "single" // }, selectionMode: 'single', //单选 loadPanel: { enabled: true }, scrolling: { mode: "virtual" }, keyExpr: "uniqueId", showRowLines: true, showColumnLines: true, rowAlternationEnabled: true, showBorders: true, // selectAllText: $translate.instant('SelectAll'), selectByClick: true, // 点击选中 scrollDirection: 'vertical', //Accepted Values: 'vertical' | 'horizontal' | 'both' selectNodesRecursive: false, //级联选择 onInitialized: function (e) { $scope.gridInstance = e.component; }, onItemClick: function (e) { // $scope.gridInstance.selectItem(e.node.key); // if ($scope.selectedBranch != null && $scope.selectedBranch.key === e.node.key){ // //默认全部不选择 // $scope.gridInstance.unselectAll(); // $scope.selectedBranch = null; // $timeout(refreshMap, 20); // return; // } $scope.selectedBranch = e.node; // 可以添加的条件 if ($scope.hasEditPermission) { $scope.isActiveOperate = $scope.selectedBranch.itemData.data.isActive; if ($scope.selectedBranch.itemData.data.isActive) { if ($scope.selectedBranch.itemData.data.isArea) { $scope.canEdit = true; $scope.canAdd = true; $scope.isActiveStr = $translate.instant(isActiveMap[$scope.selectedBranch.itemData.data.isActive]); } else { $scope.canEdit = false; $scope.canAdd = false; $scope.isActiveStr = ''; } } else { $scope.canAdd = false; $scope.canEdit = false; $scope.isActiveStr = $translate.instant(isActiveMap[$scope.selectedBranch.itemData.data.isActive]); } } $timeout(refreshMap, 20); } }; }; var setColor = function (branch, color) { branch.data.color = color; if (branch.items && branch.items.length) { branch.items.forEach(function (row) { setColor(row, color); }); } }; var loadProvinceAndCity = function () { regionService.getProvinceAndCityTreeList().success(function (data) { // 只取有效的数据 //data = _.filter(data, function (num) { return num.isActive }); //$scope.provinceList = _.filter(data, function (num) { return num.levelType === 1 }); //$scope.allCityList = _.filter(data, function (num) { return num.levelType === 2 }); $scope.provinceCityData = data; }); }; var selectRegion = function (region) { $scope.selectedBranch = region; $scope.selectedRegion = region.data; $scope.selectedRegion.isActiveStr = $translate.instant(isActiveMap[$scope.selectedRegion.isActive]); if (!$scope.selectedRegion.isActive) { $scope.canAdd = false; } else { if ($scope.selectedRegion.isArea) { $scope.canAdd = true; } else { $scope.canAdd = false; } } refreshMap(); }; var refreshMap = function () { $timeout(function () { if ($scope.mychart) { var option = angular.copy($scope.option); var data = []; if ($scope.selectedBranch && $scope.selectedBranch.parent === null) { // 如果是根节点 if ($scope.selectedBranch.children && $scope.selectedBranch.children.length > 0) { $scope.selectedBranch.children.forEach(function (row) { var tempCity = getAreaCityRecursive(row); var tempData = getMapData(tempCity, row); if (tempData && tempData.length > 0) { data = _.union(data, tempData); } }); } } else { var areaCity = getAreaCityRecursive($scope.selectedBranch); var tempData = getMapData(areaCity, $scope.selectedBranch); if (tempData && tempData.length > 0) { data = _.union(data, tempData); } } if (data && data.length > 0) { option.series[0].data = data; $scope.mychart.setOption(option); } else { option.series[0].data = []; $scope.mychart.setOption(option); } } }, 0); }; var getMapData = function (areaCity, branch) { var data = []; if (areaCity && areaCity.length > 0) { var reg = /省$/gi; var cityreg = /市$/gi; areaCity.forEach(function (row) { //will replace with constanct variable if (row === '香港特别行政区') { row = '香港'; } else if (row === '澳门特别行政区') { row = '澳门'; } var item = { name: row.replace(reg, '').replace(cityreg, ''), value: randomData(), itemStyle: { normal: { areaColor: branch.itemData.data.color } } }; data.push(item); }); } return data; }; var getAreaCityRecursive = function (branch) { var citys = []; if (!branch || !branch.itemData || !branch.itemData.data) { return citys; } if (branch.itemData.data.isArea) { // 如果是自定义区域 if (branch.children && branch.children.length > 0) { var tempCities = []; branch.children.forEach(function (row) { var temp = getAreaCityRecursive(row); if (temp && temp.length > 0) { tempCities = _.union(tempCities, temp); } }); citys = _.union(citys, tempCities); } } else { // 如果是行政区域 if (branch.children && branch.children.length > 0) { var tempCities = []; tempCities.push(branch.text); citys = _.union(citys, tempCities); } else { } } return citys; }; var newRegion = function ($event) { if (!$scope.canAdd) { return; $event.stopPropagation(); } $scope.editModel = {}; if ($scope.selectedBranch) { $scope.editModel.mergerName = $scope.selectedBranch.itemData.data.mergerName; } $scope.editModel.isfirstShow = true; $scope.isAdd = true; $scope.editModel.RegionNames = []; // 如果是选择行政省,则添加输入框中,行政省不能选 if ($scope.canAdd && $scope.selectedBranch && $scope.selectedBranch.children && $scope.selectedBranch.children.length > 0 && !$scope.selectedRegion.isArea) { $scope.selectProvince = _.find($scope.provinceList, function (num) { return num.id + '' === $scope.selectedBranch.itemData.id }); $scope.loadCity(); } else { $scope.selectProvince = null; $scope.selectCity = null; } resetErrorStatus(); $scope.editModel.SelectedCityList = []; $('#addRegionPop').modal('show'); $event.stopPropagation(); }; var changeRegionName = function () { if (!$scope.editModel.name) { $scope.editModel.name = ''; } $scope.editModel.mergerName = $scope.selectedRegion.mergerName + ',' + $scope.editModel.name; $scope.editModel.shortName = $scope.editModel.name; }; var save = function () { resetErrorStatus(); if (!($('#addRegionForm').valid())) { return; } var selectedCity = $scope.selectedNodeList; console.log('selectedCity', selectedCity); //var tree = $scope.editModel.MyTree; var areaId = $scope.selectedBranch ? $scope.selectedBranch.itemData.id : null; var parentId = $scope.selectedBranch ? $scope.selectedBranch.itemData.parentId : null; var name = $scope.editModel.areaName; //增加区域的情况 if ($scope.isAdd) { $scope.editModel.IsEdit = false; var saveModel = { parentId: areaId, name: name, cityList: selectedCity }; console.log(saveModel); areaRegionService.add(saveModel).success(function (data) { if (!data.result) { swal($translate.instant('SaveFail'), $translate.instant(data.resultMsg), 'warning'); return; } SweetAlert.success($translate.instant('SaveSuccess')); refreshAreaRegionTree(); $('#addRegionPop').modal('hide'); }); } else { //编辑区域的情况 var saveModel = { id: areaId, parentId: $scope.selectedBranch.itemData.parentId, name: name, cityList: selectedCity, isActive: true }; areaRegionService.update(saveModel).success(function (data) { if (!data.result) { swal($translate.instant('SaveFail'), $translate.instant(data.resultMsg), 'warning'); return; } SweetAlert.success($translate.instant('SaveSuccess')); refreshAreaRegionTree(); $('#addRegionPop').modal('hide'); }); } }; var addCityToMap = function (model) { if (model.isArea) { return; } if ($scope.mychart) { var option = $scope.option; var areaCity = []; if (model.provinceRegionID && model.cityRegionID) { // 指定市 areaCity.push(model.cityName); } else { // 某一个省的所有市 var cityNameList = _.pluck($scope.cityList, 'name'); cityNameList = _.filter(cityNameList, function (num) { return num !== '' }); areaCity = cityNameList; } var item = getMapData(areaCity, $scope.selectedBranch); if (!option.series[0].data || option.series[0].data.length === 0) { option.series[0].data = []; } // 两个数组union起来 option.series[0].data = _.union(option.series[0].data, item); $timeout(function () { $scope.mychart.setOption(option); }, 100); } }; var selectedCityList = []; var getCity = function (item) { if (item.children.length == 0) { selectedCityList.push(item); return; } item.children.forEach(function (itm) { getCity(itm); }); }; var edit = function ($event) { $scope.isAdd = false; $scope.editModel = $scope.selectedRegion; selectedCityList = []; var selectItem = $scope.selectedBranch; var selectedProvinceCityInfo = getProvinceAndCityList(selectItem); $scope.editModel.SelectedCityList = selectedProvinceCityInfo; $scope.editModel.IsEdit = true; $scope.selectRegionType = $scope.regionTypeData[1]; $scope.selectProvince = null; $scope.selectCity = null; $scope.editModel.areaName = $scope.selectedBranch.text; resetErrorStatus(); $('#addRegionPop').modal('show'); $event.stopPropagation(); }; var cancel = function () { if ($scope.selectedRegion.id) { $scope.isEdit = false; $scope.selectedRegion.isEditRegionItem = false; } else { $scope.isAdd = false; $scope.isEdit = false; $scope.selectedRegion.parentNode.subRegionList = _.filter($scope.selectedRegion.parentNode.subRegionList, function (num) { return num.id }); } }; var regionItemDbClick = function (model) { if (!$scope.isEdit) { $scope.selectedRegion = model; $scope.selectedRegion.pinYin = ''; $scope.selectedRegion.isEditRegionItem = true; $scope.selectedRegion.editName = $scope.selectedRegion.name; $scope.isEdit = true; } }; var resetErrorStatus = function () { var currentForm = $('#addRegionForm'); $.each(currentForm.children(), function (index, element) { // $(element).find('.has-error').removeClass('has-error'); $(element).find('.has-error label').remove(); }); validator.resetForm(); }; // 启用禁用 var updateIsActive = function ($event) { var updateModel = {}; updateModel.isActive = !$scope.selectedBranch.itemData.data.isActive; updateModel.id = $scope.selectedBranch.itemData.id; updateModel.text = $scope.selectedBranch.text; SweetAlert.swal({ title: $translate.instant('Confirm') + $scope.isActiveStr + '?', text: $translate.instant('ComfirmRegionIsActive').formatObj({ isActiveStr: $scope.isActiveStr, regionName: updateModel.text }), type: "warning", showCancelButton: true, confirmButtonColor: "#DD6B55", confirmButtonText: $translate.instant('Confirm'), cancelButtonText: $translate.instant('Cancel'), closeOnConfirm: false, closeOnCancel: true }, function (isConfirm) { if (isConfirm) { areaService.isactive(updateModel).success(function (data) { if (!data.result) { if (data.resultMsg) { swal($translate.instant('SaveFail'), $translate.instant(data.resultMsg), 'warning'); } else { var errorList = []; var template = $translate.instant(data.resultMsg); var orgNameList = data.data.join(','); swal($translate.instant('SaveFail'), template.formatObj({ orgNameList: orgNameList }), 'warning'); } updateModel.isActive = !$scope.selectedRegion.isActive; return; }; SweetAlert.success($translate.instant('SaveSuccess')); refreshAreaRegionTree(); $event.stopPropagation(); }); } }); }; var resources = { provinceRequired: $translate.instant('ProvinceRequired'), areaNameRequired: $translate.instant('AreaNameRequired') }; var validator = $("#addRegionForm").validate({ errorClass: "has-error", rules: { province: { required: true }, areaName: { required: true, maxlength: 50 } }, messages: { province: { required: resources.provinceRequired }, areaName: { required: resources.areaNameRequired, maxlength: $translate.instant('AreaNameOutOfLengthNode'), } }, errorPlacement: function (error, element) { setErrorStyle(error, element); } }); var setErrorStyle = function (error, element) { if (element.hasClass('has-error')) { element.parent().addClass('has-error'); error.insertAfter(element); error.addClass('label'); // error.addClass('label-danger'); } }; var setCollapsedID = function (model) { if (model.parentNode) { $scope.collapsedIDList.push(model.parentNode.id); setCollapsedID(model.parentNode); } }; var setParentNodeList = function (model) { if (model.subRegionList && model.subRegionList.length > 0) { model.subRegionList.forEach(function (row) { row.parentNode = model; setParentNodeList(row); }); } }; // id:主键ID // node:对应节点 // model:添加的时候的数据 var reloadById = function (id, node, model) { regionService.getAreRegionTreeByNodeID(id).success(function (data) { if (data && data.length > 0) { var oldData = node.data; node.children = angular.copy(data[0].children); node.label = data[0].label; node.data = angular.copy(data[0].data); node.data.isRoot = oldData.isRoot; if (!oldData.color) { oldData.color = colorPanelInstance.getNextColor(); } setColor(node, oldData.color); $scope.selectedRegion.isActiveStr = $translate.instant(isActiveMap[$scope.selectedRegion.isActive]); selectRegion(node); //if (model) { // addCityToMap(model); //} } }); }; var randomData = function () { return Math.round(Math.random() * 1000); }; $scope.drawChinaMap = function () { //var mychart = echarts.init(document.getElementById('chinaMap')); $.get('/app-resources/map/china.json', function (chinaJson) { $scope.chinaJson = chinaJson; echarts.registerMap('china', chinaJson); var mychart = echarts.init(document.getElementById('chinaMap')); var option = { //visualMap: { // min: 0, // max: 2500, // left: 'left', // top: 'bottom', // text: ['高', '低'], // 文本,默认为数值文本 // show: false, //}, legend: { orient: 'vertical', left: 'left', data: [] }, series: [{ type: 'map', map: 'china', nameMap: { 'China': '中国' }, label: { normal: { show: true, textStyle: { // #c12e34, 改label字体的颜色 color: '#894A00' } }, emphasis: { //textStyle: { // color: '#fff' //} } }, itemStyle: { normal: { areaColor: '#C9C9C9', borderColor: 'white', borderWidth: 0.5, label: { show: false } }, emphasis: { areaColor: '#F2D997', label: { show: true } } }, scaleLimit: { min: 1 }, selectedMode: false, roam: true, data: [] }] }; $scope.option = option; mychart.setOption(option); //mychart.on('click', function (parmas) { //}); //mychart.dispatchAction({ // type: 'highlight', // // 可选,系列 index,可以是一个数组指定多个系列 // seriesIndex: 0, // // 可选,系列名称,可以是一个数组指定多个系列 // dataIndex: 1, // // 可选,数据的 名称 //}); //mychart.dispatchAction({ // type: 'highlight', // // 可选,系列 index,可以是一个数组指定多个系列 // seriesIndex: 0, // // 可选,系列名称,可以是一个数组指定多个系列 // dataIndex: 29, // // 可选,数据的 名称 //}); //mychart.dispatchAction({ // type: 'highlight', // // 可选,系列 index,可以是一个数组指定多个系列 // seriesIndex: 0, // // 可选,系列名称,可以是一个数组指定多个系列 // dataIndex: 28 // // 可选,数据的 名称 //}); mychart.on('click', function (parmas) { }); $scope.mychart = mychart; }); //mychart.setOption(option); }; $scope.changeRegionType = function () { if ($scope.selectRegionType.id == 0) { $scope.editModel.areaName = ''; } else { $scope.selectProvince = null; $scope.selectCity = null; } }; $scope.loadCity = function () { $scope.cityList = _.filter($scope.allCityList, function (num) { return num.parentID === $scope.selectProvince.id }); if ($scope.cityList != null && $scope.cityList.length > 0) { // 加上默认的城市 $scope.cityList.splice(0, 0, $scope.defaultCity); } else { $scope.cityList.push($scope.defaultCity); } $scope.selectCity = $scope.defaultCity; }; var havePermission = function () { $scope.$root.checkUserPermission(constant.adminPermission.basicData.areaManage.editCode).success(function (data) { $scope.hasEditPermission = data; initParam(); }); }; var initParam = function () { $scope.isActiveStr = ''; $scope.isAdd = true; $scope.isEdit = false; $scope.canEdit = false; if ($scope.hasEditPermission) { $scope.canAdd = true; } else { $scope.canAdd = false; } }; var refreshAreaRegionTree = function () { dataSource.reload() //$scope.gridInstance.repaint(); }; (function initialize() { $log.debug('RegionManageController.ctor()...'); $scope.regionList = []; $scope.selectedRegion = {}; $scope.selectedRegion.isActiveStr = $translate.instant(isActiveMap[false]);; $scope.selectRegion = selectRegion; $scope.newRegion = newRegion; // $scope.newRegionNode = newRegionNode; $scope.changeRegionName = changeRegionName; $scope.save = save; $scope.edit = edit; $scope.updateIsActive = updateIsActive; $scope.hasEditPermission = false; havePermission(); //loadAreaTree(); loadRegionTree(); $scope.drawChinaMap(); //loadProvinceAndCity(); })(); } ]);