app.controller('adStatisticsCtrl', ['$scope', '$http', '$timeout', '$state', '$interval', 'uiGridConstants', 'FileUploader', 'i18nService', 'toaster', 'chartOptions', function ($scope, $http, $timeout, $state, $interval, uiGridConstants, FileUploader, i18nService, toaster, chartOptions) { i18nService.setCurrentLang("zh-cn"); moment.locale('zh-cn'); $scope.startTimeOpen = false; $scope.endTimeOpen = false; $scope.timeChange = function (newDate, oldDate) { $scope.startTimeOpen = false; $scope.endTimeOpen = false; }; var defaultValue = { ad: {adId: "", name: "广告"}, agent: {id: "", nickname: "代理商"}, dealer: {value: "", label: "经销商"}, address: {value: "", label: "地址"}, dev: {value: "", label: "设备"} } //下拉框数据 $scope.condition = { ad: [defaultValue.ad], agent: [defaultValue.agent], dealer: [defaultValue.dealer], address: [defaultValue.address], dev: [defaultValue.dev] }; //查询条件 $scope.query = { ad: defaultValue.ad, agent: defaultValue.agent, dealer: defaultValue.dealer, address: defaultValue.address, dev: defaultValue.dev, startTime: moment().format("YYYY-MM-DD"), endTime: moment().format("YYYY-MM-DD"), }; //不传分页参数则获取全部 广告 todo如果广告过多需要按搜索条件加载 $http.get('/ad/getAdList', {params: {pageSize: 1000}}).then(function (data) { data = data.data $scope.condition.ad = data.data.dataList; $scope.condition.ad.unshift(defaultValue.ad);//可以选空 }); //不传分页参数则获取全部代理商 $http.get('/agent/getAgentsDetailList', {}).then(function (data) { data = data.data $scope.condition.agent = data.data.dataList; $scope.condition.agent.unshift(defaultValue.agent);//可以选空 }); // angular 事件绑定 $scope.ngEvent = { //广告变更事件 changeAd: function () { var id = $scope.query.ad.adId; //如果广告有选中,则清空其他条件 代理商、经销商、地址、设备 if (id) { $scope.query.agent = defaultValue.agent; $scope.query.dealer = defaultValue.dealer; $scope.query.address = defaultValue.address; $scope.query.dev = defaultValue.dev; // 代理商列表无需刷新,避免重新获取 $scope.condition.dealer = [defaultValue.dealer]; $scope.condition.address = [defaultValue.address]; $scope.condition.dev = [defaultValue.dev]; } else { } }, //初始化代理商 changeAgent: function () { var id = $scope.query.agent.id; //无论是否选择了数据,都清空子级下拉框选中的项 $scope.query.dealer = defaultValue.dealer; $scope.query.address = defaultValue.address; $scope.query.dev = defaultValue.dev; //无论怎么选择,都清空子下拉框的所有选项 $scope.condition.dealer = [defaultValue.dealer]; $scope.condition.address = [defaultValue.address]; $scope.condition.dev = [defaultValue.dev]; //如果选择了代理商,则加载经销商 if (id) { $http.get('/ad/getDealerList', {params: {agentId: id}}).then(function (data) { data = data.data $scope.condition.dealer = data.data; $scope.condition.dealer.unshift(defaultValue.dealer);//可以选空 }); } }, changeDealer: function () { var id = $scope.query.dealer.value; $scope.query.address = defaultValue.address; $scope.query.dev = defaultValue.dev; $scope.condition.address = [defaultValue.address]; $scope.condition.dev = [defaultValue.dev]; //加载地址下拉框 id && $http.get('/ad/getAddressList', {params: {id: id}}).then(function (data) { data = data.data $scope.condition.address = data.data; $scope.condition.address.unshift(defaultValue.address);//可以选空 }); }, changeAddress: function () { var id = $scope.query.address.value; $scope.query.dev = defaultValue.dev; $scope.condition.dev = [defaultValue.dev]; //加载设备下拉框 id && $http.get('/ad/getDevList', {params: {id: id}}).then(function (data) { data = data.data $scope.condition.dev = data.data; $scope.condition.dev.unshift(defaultValue.dev);//可以选空 }); }, changeDev: function () { }, quickTime: function (event, passDay) { $scope.query.startTime = moment().add( -(passDay - 1),"day").format("YYYY-MM-DD"); $scope.query.endTime = moment().format("YYYY-MM-DD"); }, //查询 query: function () { if ($scope.query.startTime > $scope.query.endTime) { toaster.pop("info", "提示", "开始时间必须小于结束时间!"); return; } $scope.getPagedDataAsync(1, $scope.gridOptions.paginationPageSize); }, exportExcelOpen: false, //导出 exportExcel: function () { var params = {}; var query = $scope.query; params.adId = query.ad.adId params.agentId = query.agent.id params.dealerId = query.dealer.value params.groupId = query.address.value params.devNo = query.dev.value params.startTime = query.startTime params.endTime = query.endTime if ($scope.ngEvent.exportExcelOpen) { toaster.pop("info", "提示", "有一份报表正在生成,请稍候!"); return; } else { $scope.ngEvent.exportExcelOpen = true; } $http.get('/ad/exportExcel', {params: params}).then(function (data) { data = data.data $scope.ngEvent.exportExcelOpen = false; if (data.result == 1) { var payload = data.payload; toaster.pop("success", data.description); $state.go('app.tool.offlineTask', { searchKey: payload }); } }).catch(function (data) { $scope.ngEvent.exportExcelOpen = false; if (data.status == 504){ toaster.pop("error", "计算超时,请前往任务->执行离线生成广告报表"); }else{ toaster.pop("error", "系统错误,请重试"); } }); } }; $scope.gridOptions = { data: 'myData', showGridFooter: true, //是否显示grid footer //-------- 分页属性 ---------------- paginationPageSizes: [10, 20, 50, 100], //每页显示个数可选项 paginationCurrentPage: 1, //当前页码 paginationPageSize: 10, //每页显示个数 totalItems: 0,// 总数量 useExternalPagination: true,//是否使用分页按钮 //过滤 enableFiltering: false, columnDefs: [], // 菜单 enableGridMenu: true, //---------------api--------------------- onRegisterApi: function (gridApi) { $scope.gridApi = gridApi; gridApi.pagination.on.paginationChanged($scope, function (newPage, pageSize) { if ($scope.setPagingData) { $scope.getPagedDataAsync(newPage, pageSize); } }); } }; function setColumnDefs() { $scope.gridOptions.columnDefs = [ {field: 'adId', displayName: '广告编号', cellClass: "text-center"}, {field: 'adName', displayName: '广告名称'}, {field: 'agentName', displayName: '代理商'}, {field: 'dealerName', displayName: '经销商'}, { field: 'address', displayName: '设备地址', cellTemplate: '
{{row.entity.address}}-{{row.entity.groupName}}
' }, {field: 'logicalCode', displayName: '设备编号'}, {field: 'timestamp', displayName: '点击时间', cellTemplate: '
'}, { field: 'fans', displayName: '粉丝信息', cellTemplate: '
{{row.entity.nickname}}
' }, { field: 'price', displayName: '广告总价', cellTemplate: '
' }, { field: 'agentPrice', displayName: '代理商分成', cellTemplate: '
' }, { field: 'dealerPrice', displayName: '经销商分成', cellTemplate: '
' }, ]; var fields = $scope.gridOptions.columnDefs; for (var index in fields) { var item = fields[index]; if (item && item['minWidth'] == null) { item['minWidth'] = 100; } } } $scope.setPagingData = function (data, curPage, pageSize) { var firstRow = (curPage - 1) * pageSize; var pagedData = data.data.dataList; $scope.myData = pagedData; $scope.gridOptions.totalItems = data.data.total; }; $scope.getPagedDataAsync = function (curPage, pageSize) { var params = { pageSize: pageSize, pageIndex: curPage }; var query = $scope.query; params.adId = query.ad.adId params.agentId = query.agent.id params.dealerId = query.dealer.value params.groupId = query.address.value params.devNo = query.dev.value params.startTime = query.startTime params.endTime = query.endTime $http.get('/ad/getAdFansDetail', { params: params }).then(function (data) { data = data.data $scope.setPagingData(data, curPage, pageSize); }).catch(function (data) { toaster.pop("error", "提示", "获取广告明细失败"); }); }; function initDataGrid() { //首次加载表格 $scope.getPagedDataAsync($scope.gridOptions.paginationCurrentPage, $scope.gridOptions.paginationPageSize); } setColumnDefs(); initDataGrid(); }]);