362 lines
16 KiB
JavaScript
362 lines
16 KiB
JavaScript
![]() |
define(["moment"], function (moment) {
|
|||
|
return ["$scope", "$filter", "$stateParams", "config", "DashboardService", "MMWService", '$calculater', '$timeout', '$compile', '$mdDialog',
|
|||
|
function ($scope, $filter, $stateParams, config, $DashboardService, $MMWService, $calculater, $timeout, $compile, $mdDialog) {
|
|||
|
|
|||
|
//報表呈現的筆數<筆數大影響效能>
|
|||
|
var page_count = 25;
|
|||
|
|
|||
|
var operator =[];
|
|||
|
operator.push({ operator_name: $filter('translate')('rpt01.unequal'), operator_no: '<>' });
|
|||
|
operator.push({ operator_name: $filter('translate')('rpt01.equal'), operator_no: '=' });
|
|||
|
operator.push({ operator_name: $filter('translate')('rpt01.less'), operator_no: '<' });
|
|||
|
operator.push({ operator_name: $filter('translate')('rpt01.less_equal'), operator_no: '<=' });
|
|||
|
operator.push({ operator_name: $filter('translate')('rpt01.more'), operator_no: '>' });
|
|||
|
operator.push({ operator_name: $filter('translate')('rpt01.more_equal'), operator_no: '>=' });
|
|||
|
operator.push({ operator_name: $filter('translate')('rpt01.in'), operator_no: 'in' });
|
|||
|
operator.push({ operator_name: $filter('translate')('rpt01.like'), operator_no: 'LIKE' });
|
|||
|
|
|||
|
$scope.report_info = [];
|
|||
|
|
|||
|
$scope.init = function () {
|
|||
|
|
|||
|
//取得所有描述語言報表
|
|||
|
Load_Report_info(function (data) {
|
|||
|
|
|||
|
$scope.report_info = JSON.parse(data.ResultJson);
|
|||
|
|
|||
|
});
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
$scope.sel_report = function () {
|
|||
|
|
|||
|
$scope.condition_list=[];
|
|||
|
|
|||
|
$scope.$root.showQueryList({
|
|||
|
key: 'page_no',
|
|||
|
header: [
|
|||
|
{ label: $filter('translate')('rpt01.reportID'), code: 'report_id' },
|
|||
|
{ label: $filter('translate')('rpt01.reportName'), code: 'report_name' }
|
|||
|
],
|
|||
|
query: function (conditions, feedback) {
|
|||
|
feedback($scope.report_info);
|
|||
|
},
|
|||
|
selectCode: $scope.selectareaNo || '',
|
|||
|
confirm: function (selectItem, dialog) {
|
|||
|
|
|||
|
if (selectItem) {
|
|||
|
|
|||
|
$scope.condition_list = selectItem.script_condition;
|
|||
|
$scope.report_id = selectItem.report_id;
|
|||
|
$scope.report_name = selectItem.report_name;
|
|||
|
$('#report_data').empty();
|
|||
|
}
|
|||
|
|
|||
|
dialog.hide();
|
|||
|
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
//查詢條件開窗
|
|||
|
$scope.condition = function () {
|
|||
|
|
|||
|
$mdDialog.dialog('module/moduleRPT/program/rpt01/rpt01.tmp.html', function (dialog) {
|
|||
|
//$css.add('module/moduleRPT/program/rpt01/mrs02/mrs02-dialog.css');
|
|||
|
return {
|
|||
|
condition:$scope.condition_list,
|
|||
|
operator:function(index, event){
|
|||
|
$scope.$root.showSelect({
|
|||
|
title: $filter('translate')('rpt01.operator'),
|
|||
|
label : 'operator_no',
|
|||
|
sub_label:'operator_name',
|
|||
|
code : 'operator_no',
|
|||
|
order: 'operator_no',
|
|||
|
selectCode : '',
|
|||
|
list : operator,
|
|||
|
confirm : function(s_item, s_dialog){
|
|||
|
|
|||
|
$scope.condition_list[index].cond_operand=s_item.operator_no;
|
|||
|
|
|||
|
s_dialog.hide();
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
},
|
|||
|
confirm: function (callback) {
|
|||
|
dialog.hide();
|
|||
|
},
|
|||
|
back: function () {
|
|||
|
dialog.hide();
|
|||
|
},background: {
|
|||
|
click: function () {
|
|||
|
dialog.hide();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
);
|
|||
|
}
|
|||
|
|
|||
|
$scope.confirm = function () {
|
|||
|
|
|||
|
$('#report_data').empty();
|
|||
|
|
|||
|
reguest_condition_list = [];
|
|||
|
|
|||
|
for (var i = 0 ;i<=$scope.condition_list.length-1;i++){
|
|||
|
|
|||
|
var item = $scope.condition_list[i];
|
|||
|
|
|||
|
if (item.isSelect || item.check_necessary == 1) {
|
|||
|
if (item.default_value == '' || item.default_value== undefined) {
|
|||
|
$scope.$root.showAlert(item.item_no + '.' + item.cond_desc + $filter('translate')('rpt01.error_list.none_condition'));
|
|||
|
return false;
|
|||
|
} else {
|
|||
|
reguest_condition_list.push({ cond_field: item.cond_field, cond_data_type: item.cond_data_type, cond_operand: item.cond_operand, default_value: item.default_value, insert_name: item.insert_name });
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
//console.log(reguest_condition_list);
|
|||
|
|
|||
|
$timeout(function () {
|
|||
|
|
|||
|
var currentDate = new Date();
|
|||
|
|
|||
|
$MMWService.sendToEAISrv({
|
|||
|
uri: 'KMI.report.query.json',
|
|||
|
content: {
|
|||
|
report_id: $scope.report_id,
|
|||
|
login_employee_no: 'DS',
|
|||
|
script_condition: reguest_condition_list,
|
|||
|
client_start_time: currentDate
|
|||
|
},
|
|||
|
success: function (data) {
|
|||
|
//console.log(JSON.parse(data.ResultJson));
|
|||
|
$scope.query_result = JSON.parse(data.ResultJson);
|
|||
|
|
|||
|
//所有資料
|
|||
|
$scope.rpt_data = $scope.query_result.query_result[$scope.report_id];
|
|||
|
|
|||
|
//無資料跳出
|
|||
|
if ($scope.rpt_data.length == 0) {
|
|||
|
$scope.$root.showAlert($filter('translate')('rpt01.error_list.none_data'));
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
//所有欄位
|
|||
|
$scope.rpt_column = $scope.query_result.columns_name;
|
|||
|
//所有欄位原始名稱
|
|||
|
var column_raw_name = Object.keys($scope.rpt_data[0]);
|
|||
|
|
|||
|
//整理欄位顯示資料
|
|||
|
var column_info = [];
|
|||
|
for (var i = 0; i < $scope.rpt_column.length; i++) {
|
|||
|
var temp_cond = {
|
|||
|
column_name: column_raw_name[i],
|
|||
|
column_display: $scope.rpt_column[i]
|
|||
|
};
|
|||
|
column_info.push(temp_cond);
|
|||
|
}
|
|||
|
|
|||
|
generateColumn({
|
|||
|
target: $('#report_data'),
|
|||
|
bind: 'rpt_data', //ng-repeat 對應 scope
|
|||
|
column_info: column_info,//欄位資訊
|
|||
|
column_raw_name: column_raw_name
|
|||
|
}, function () {
|
|||
|
|
|||
|
$timeout(function () {
|
|||
|
$compile(document.getElementById('report_data'))($scope);
|
|||
|
$timeout(function () {
|
|||
|
$('#report_data').css('opacity', 1);
|
|||
|
$scope.$root.hideLoading();
|
|||
|
});
|
|||
|
});
|
|||
|
|
|||
|
});
|
|||
|
},
|
|||
|
error: function (data) {
|
|||
|
return false;
|
|||
|
}
|
|||
|
});
|
|||
|
});
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
$scope.getPages = function (list, PageConfig, filterItem, header) {
|
|||
|
if (list) {
|
|||
|
|
|||
|
var temp_list = $filter('filter')(list, filterItem)
|
|||
|
if (header)
|
|||
|
temp_list = $filter('orderBy')(temp_list, "'" + header.code + "'", header.order);
|
|||
|
if (PageConfig) {
|
|||
|
PageConfig.page = PageConfig.page || 0;
|
|||
|
PageConfig.total_page = Math.ceil(temp_list.length / PageConfig.page_count);
|
|||
|
if (PageConfig.page >= PageConfig.total_page) {
|
|||
|
PageConfig.page = 0;
|
|||
|
}
|
|||
|
var index = PageConfig.page * PageConfig.page_count;
|
|||
|
return temp_list.slice(index, index + PageConfig.page_count);
|
|||
|
} else {
|
|||
|
return temp_list;
|
|||
|
}
|
|||
|
|
|||
|
} else {
|
|||
|
PageConfig.page = 0;
|
|||
|
PageConfig.total_page = 1;
|
|||
|
return list;
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
$scope.orderResult = function (index, key) {
|
|||
|
if (key != undefined) {
|
|||
|
if ($scope[key].qeryOrder != index) {
|
|||
|
$scope[key].header[index].order = false;
|
|||
|
} else {
|
|||
|
$scope[key].header[index].order = !$scope[key].header[index].order;
|
|||
|
}
|
|||
|
$scope[key].qeryOrder = index;
|
|||
|
} else {
|
|||
|
if ($scope.qeryOrder != index) {
|
|||
|
$scope.header[index].order = false;
|
|||
|
} else {
|
|||
|
$scope.header[index].order = !$scope.header[index].order;
|
|||
|
}
|
|||
|
$scope.qeryOrder = index;
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
|
|||
|
$scope.prevPage = function (PageConfig) {
|
|||
|
return PageConfig.page = (PageConfig.page - 1 < 0 ? 0 : PageConfig.page - 1);
|
|||
|
};
|
|||
|
|
|||
|
$scope.pageInfo = function (PageConfig) {
|
|||
|
return (PageConfig.page + 1) + ' / ' + PageConfig.total_page;
|
|||
|
};
|
|||
|
|
|||
|
$scope.nextPage = function (PageConfig) {
|
|||
|
return PageConfig.page = (PageConfig.page + 1 > (PageConfig.total_page - 1) ? (PageConfig.total_page - 1) : PageConfig.page + 1);
|
|||
|
};
|
|||
|
|
|||
|
$scope.filterNone = function (ColumnName, filterColumns) {
|
|||
|
|
|||
|
if (filterColumns[ColumnName] != undefined && filterColumns[ColumnName] == '') {
|
|||
|
delete filterColumns[ColumnName];
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
function Load_Report_info(callback) {
|
|||
|
$MMWService.sendToEAISrv({
|
|||
|
uri: 'KMI.report.info.get.json',
|
|||
|
content: {
|
|||
|
report_type: '2',
|
|||
|
login_employee_no: config.cache.account
|
|||
|
},
|
|||
|
success: function (data) {
|
|||
|
if (callback) {
|
|||
|
callback(data);
|
|||
|
}
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
//動態組合kmi-list
|
|||
|
function generateColumn(options, callback) {
|
|||
|
if (options.column_info && options.column_info.length > 0) {
|
|||
|
var report_content = '<div class="kmi-list column-selector"></div>',
|
|||
|
total_width = 0,
|
|||
|
result_id = '',
|
|||
|
tab,
|
|||
|
header,
|
|||
|
row;
|
|||
|
|
|||
|
$scope.result = [];
|
|||
|
$scope.header = [];
|
|||
|
$scope.filterColumns = {};
|
|||
|
$scope.statistics_result = {};
|
|||
|
|
|||
|
options.target.attr('ng-init', result_id + 'PageConfig = {page_count : ' + page_count + '}');
|
|||
|
|
|||
|
report_content = $(report_content).appendTo(options.target)
|
|||
|
report_content.attr('column-selector-id', 'R01_' + result_id + 'list');
|
|||
|
header = $('<div class="kmi-list__header"></div>').appendTo(report_content);
|
|||
|
row = $('<div class="kmi-list__row"></div>').appendTo($('<div class="kmi-list__row-content"></div>').appendTo(report_content))
|
|||
|
.attr('ng-repeat', 'item in getPages(' + options.bind + ', ' + result_id + 'PageConfig, ' + result_id + 'filterColumns, ' + result_id + 'header[' + result_id + 'qeryOrder]) track by $index')
|
|||
|
.attr('ng-class', '{\'is-select\':item.isSelect}');
|
|||
|
|
|||
|
|
|||
|
|
|||
|
options.column_info.forEach(function (condition, i) {
|
|||
|
|
|||
|
var headerColumn = '<div class="kmi-list__column head-controls" style="flex:1;">';
|
|||
|
headerColumn += '<div class="filter" ng-show="' + result_id + 'header[' + i + '].isFilter">';
|
|||
|
headerColumn += '<input ng-model="' + result_id + 'filterColumns[\'' + condition.column_name + '\']"/>';
|
|||
|
headerColumn += '<i class="material-icons clear" style="position: absolute;top: 2px;right: 4px;" ng-click="' + result_id + 'header[' + i + '].isFilter = false;' + result_id + 'filterColumns[\'' + condition.column_name + '\'] = \'\';filterNone(\'' + condition.column_name + '\',filterColumns);">clear</i>';
|
|||
|
headerColumn += '</div>';
|
|||
|
headerColumn += '<div class="order" ng-hide="' + result_id + 'header[' + i + '].isFilter">';
|
|||
|
headerColumn += '<i class="material-icons search" style="margin-left: 5px;z-index:1;" ng-click="' + result_id + 'header[' + i + '].isFilter = true">search</i>';
|
|||
|
headerColumn += '<label>' + condition.column_display + '</label>';
|
|||
|
headerColumn += '<i class="material-icons" ng-show="' + result_id + 'qeryOrder == ' + i + '">{{!' + result_id + 'header[' + i + '].order?\'\':\'\'}}</i>';
|
|||
|
//if(options.id != undefined){
|
|||
|
// headerColumn += '<div class="kmi-can-click" ng-click="orderResult('+i+', \''+ options.id +'\');"></div>';
|
|||
|
//} else {
|
|||
|
headerColumn += '<div class="kmi-can-click" ng-click="orderResult(' + i + ');"></div>';
|
|||
|
//}
|
|||
|
headerColumn += '</div>';
|
|||
|
headerColumn += '</div>';
|
|||
|
header.append(headerColumn);
|
|||
|
|
|||
|
var listColumn = '<div class="kmi-list__column" style="flex:1;z-index:0;"';
|
|||
|
|
|||
|
listColumn += 'ng-class="{\' column-border\':!$last}" ng-bind="item[\'' + condition.column_name + '\']" >';
|
|||
|
|
|||
|
listColumn += '</div>';
|
|||
|
|
|||
|
row.append(listColumn);
|
|||
|
//if(options.id != undefined){
|
|||
|
// $scope[options.id].header[i] = {code:condition.column_name};
|
|||
|
//} else {
|
|||
|
$scope.header[i] = { code: condition.column_name };
|
|||
|
//}
|
|||
|
total_width += 120;//先暫定每個欄位寬度120px;
|
|||
|
|
|||
|
});
|
|||
|
report_content.attr('kmi-scrollbar', total_width + 'px');
|
|||
|
|
|||
|
//總計
|
|||
|
if (options.statistics_info && options.statistics_info.length > 0) {
|
|||
|
var totalContent = $('<div class="total-content"></div>').appendTo(options.target);
|
|||
|
options.statistics_info.forEach(function (total) {
|
|||
|
if (options.id != undefined) {
|
|||
|
$scope[options.id].statistics_result[total.column_name] = 0;
|
|||
|
} else {
|
|||
|
$scope.statistics_result[total.column_name] = 0;
|
|||
|
}
|
|||
|
totalContent.append('<label class="total-name">' + total.column_display + ':</label><label class="total-value" ng-bind="' + result_id + 'statistics_result[\'' + total.column_name + '\']"></label>');
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
$('<div class="page-content"></div>').appendTo(options.target)
|
|||
|
.append('<div class="page-icon"><i class="material-icons"></i><div class="kmi-can-click" ng-click="prevPage(' + result_id + 'PageConfig);"></div></div>')
|
|||
|
.append('<label ng-bind="pageInfo(' + result_id + 'PageConfig);"></label>')
|
|||
|
.append('<div class="page-icon"><i class="material-icons"></i><div class="kmi-can-click" ng-click="nextPage(' + result_id + 'PageConfig);"></div></div>');
|
|||
|
|
|||
|
|
|||
|
if (callback) {
|
|||
|
callback(report_content);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
]
|
|||
|
});
|