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

362 lines
16 KiB
JavaScript
Raw Permalink Normal View History

2024-01-24 16:47:50 +08:00
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);
}
}
}
}
]
});