This repo is archived. You can view files and clone it, but cannot push or open issues or pull requests.
SXS20240115/SRC/iMES_PAD/module/moduleRPT/program/rpt01/rpt01.js
2024-01-24 16:47:50 +08:00

362 lines
16 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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?\'&#xE5D8;\':\'&#xE5DB;\'}}</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">&#xE314;</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">&#xE315;</i><div class="kmi-can-click" ng-click="nextPage(' + result_id + 'PageConfig);"></div></div>');
if (callback) {
callback(report_content);
}
}
}
}
]
});