You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

580 lines
18 KiB

4 years ago
/**
* 打印设置窗口定义文件
* @description [description]
* @version 1.0
*/
define(function(require, exports, module) {
var Window = require('../window/window');
var tpl = require('./printwindow.tpl');
var toolbuttons = require('../../../data/printwindow/toolbuttons.json');
var printColumns = require('../../../data/printwindow/columns.json');
var printDatas = require('../../../data/printwindow/data.json');
var ToolbarAdapter = require('../../../adapter/toolbarAdapter');
var GridAdapter = require('../../../adapter/datagridAdapter');
var moment = require('vendor/moment/moment.min');
var self = null;
// var PrintLoader = require('../printloader/printloader');
require('./printwindow.css');
function PrintWindow(args) {
this.options = {
title: '打印设置',
content: tpl,
top: window.scrollY + 100,
width: 860,
height: 600,
modal: true,
closed: true,
closable: true,
draggable: true,
data: null,
onClose: function() {
if (args.cb && typeof args.cb == 'function') {
args.cb();
}
}
}
self = this;
this.args = args;
this.id = createGuid();
_.extend(this.options, args.options || {});
Window.call(this, this.options);
}
inherits(PrintWindow, Window);
PrintWindow.prototype.customerize = function($container) {
this.toolContainer = this.getElement('.fdpr-print-toolbar');
this.gridContainer = this.getElement('.edp-print-main');
this.initToolbar();
this.initGrid();
this.setVkEvent();
this.getPrnData();
}
PrintWindow.prototype.setVkEvent = function() {
self.$container.on('focus', 'input', function(e) {
var fieldName = $(e.target).closest('td[field]').attr('field');
if(fieldName === 'orgcode') {
window.openVK(e.target, '1');
} else if(fieldName === 'prnname' || fieldName === 'remark') {
window.openVK(e.target, '2');
}
});
self.$container.on('blur', 'input', function(e) {
window.closeVK(e);
});
};
PrintWindow.prototype.init = function() {
self.getColumnSchema();
};
PrintWindow.prototype.getColumnSchema = function() {
var self = this;
var params = {'op':'schema', 'sync': true};
var result = ER.services.setPrn(params);
var columns = [];
if (result.isSuccess) {
columns = _.sortBy(result.columns, 'dispIndex');
columns = _.where(columns, {'isViewable': true})
}
self.gridColumns = [makeGridColumns(columns)];
};
function makeGridColumns(columns) {
var returnData = [];
var width = (1 / columns.length) * 100 + '%';
for (var i = 0;i < columns.length; i++) {
var tempCol = columns[i];
var columnData = {
'sortable': false,
'field': tempCol.fieldName,
'align': '',
'width': width,
'width1': width,
'rowspan': 1,
'colspan': 1,
'title': tempCol.dispName
};
if (tempCol.isEditable) {
if ( tempCol.fieldName == 'isenabled' || tempCol.fieldName == 'isdefault') {
columnData.editor = {
type: 'checkbox',
options:{on:'是',off:'否'}
};
} else {
columnData.editor = {
type: 'text'
};
}
}
returnData.push(columnData);
}
return returnData;
}
PrintWindow.prototype.getPrnData = function() {
var self = this;
var params = {
'op': 'search',
'rptId': self.args.printObj.rptId
}
ER.services.setPrn(params, function(isok, data) {
if (isok) {
makeCheckBoxTransfer(data);
self.gridadp.loadData(data.rows)
}
});
};
PrintWindow.prototype.saveData = function() {
var self = this;
self.failedNo = self.failedNo || '';
var data = this.$grid.datagrid('getData');
for (var i = 0; i < data.rows.length; i++) {
var _row = data.rows[i];
if ( $.trim(_row['prnname']) == '') {
ER.messager.err('格式名称不能为空!')
if (self.failedNo.indexOf(str) < 0) {
self.failedNo += str;
}
reject();
self.editStatus = true;
self.setBtnDisable();
self.setBtnEnable(self.btnsac);
self.$container.find('td[field="prnname"]:eq('+ (i + 1) +')').click();
return;
}
_row.isdefault = (_row.isdefault == "是" ? '1' : '0');
_row.isenabled = (_row.isenabled == "是" ? '1' : '0');
_row.rptid = self.args.printObj.rptId;
}
var originRows = $.extend([], data.rows, true);
data.rows = _.filter(data.rows, function(item) {
return item.$state ? true : false;
})
for (var i = 0; i < data.rows.length; i++) {
var str = '-' + data.rows[i]['serialno'] + '-';
// if (self.failedNo.indexOf(str) > -1) {
// data.rows[i]['$state'] = 'added';
// self.failedNo.replace(str, '');
// }
}
var params = {
'op':'save',
'rows':data.rows,
'deleteRows':[],
'rptId': self.args.printObj.rptId
}
self.setBtnEnable(self.allBtns);
ER.services.setPrn(params, function(isok, data1) {
if (isok) {
ER.messager.tip('保存成功!');
makeCheckBoxTransfer(data1);
if(data1 && data1.rows) {
self.gridadp.loadData(data1.rows)
}
}
});
};
function makeCheckBoxTransfer(data) {
if (data && data.rows) {
for (var i = 0; i < data.rows.length; i++) {
data.rows[i].isdefault = (data.rows[i].isdefault == "0" ? '否' : '是');
data.rows[i].isenabled = (data.rows[i].isenabled == "0" ? '否' : '是');
}
}
}
PrintWindow.prototype.makeColumnEditor = function(data) {
for (var i = 0; i < data.length; i++) {
// if ()
}
};
PrintWindow.prototype.initToolbar = function() {
var self = this;
this.tooladp = new ToolbarAdapter({
pageId: self.id,
container: this.toolContainer,
buttons: JSON.parse(toolbuttons),
menuButtons: [],
actions: {
click: function(opcode) {
self.opRouter(opcode);
}
}
});
this.tooladp.init();
};
PrintWindow.prototype.initGrid = function() {
var self = this;
var columns = self.gridColumns;
// var columns = JSON.parse(printColumns);
self.makeColumnEditor(columns);
self.gridadp = new GridAdapter({
id: self.id,
selfColumn: true,
name: '',
opts: {},
data: {
columns: columns
},
actions: {
onClickCell: onClickCell,
onBeforeEdit: onBeforeEdit,
onEndEdit: onEndEdit
}
});
self.gridadp.makeGridProperties({
height: 430,
showFooter: false,
rownumbers: true,
ctrlSelect: false,
singleSelect: true
});
self.gridadp.init(self.gridContainer);
self.gridadp.fitColumns();
// self.gridadp.loadData(JSON.parse(printDatas));
self.$grid = self.gridadp.grid.$grid;
};
PrintWindow.prototype.opRouter = function(opcode) {
var allBtns = this.allBtns = ['printadd', 'printedit', 'printdelete', 'refresh', 'printsave', 'printcancle', 'printpreview', 'printprint', 'printset'];
var btnsac = this.btnsac = ['printsave', 'printcancle'];
var self = this;
switch(opcode) {
case 'printadd':
self.addStatus = true;
self.setBtnDisable();
self.setBtnEnable(btnsac);
append();
break;
case 'printedit':
self.editStatus = true;
self.setBtnDisable();
self.setBtnEnable(btnsac);
break;
case 'printdelete':
removeit();
break;
case 'refresh':
self.getPrnData();
break;
case 'printsave':
self.editStatus = false;
self.addStatus = false;
accept();
self.saveData();
break;
case 'printcancle':
self.editStatus = false;
reject();
self.setBtnEnable(allBtns);
break;
case 'printpreview':
self.preview();
// getChanges();
break;
case 'printprint':
self.print();
break;
case 'printset':
self.setting();
break;
case 'quitprintset':
self.close();
break;
default: break;
}
};
PrintWindow.prototype.setBtnEnable = function(buttons) {
var self = this;
for (var i = 0; i < buttons.length; i++) {
self.tooladp.enable(buttons[i]);
}
};
PrintWindow.prototype.setBtnDisable = function() {
var self = this;
var buttons = ['printadd', 'printedit', 'printdelete', 'refresh', 'printsave', 'printcancle', 'printpreview', 'printprint', 'printset'];
for (var i = 0; i < buttons.length; i++) {
self.tooladp.disable(buttons[i]);
}
};
PrintWindow.prototype.open = function() {
Window.prototype.open.call(this);
return;
}
PrintWindow.prototype.removeItem = function(rows) {
var params = {
'op':'save',
'rows': [],
'deleteRows':rows,
'rptId': self.args.printObj.rptId
}
ER.services.setPrn(params, function(isok, data) {
if (isok) {
ER.messager.tip('删除成功!');
}
});
}
function onBeforeEdit(index, row) {
var rptObj = self.args.printObj;
row.rptcode = row.rptcode || rptObj.rptCode + (rptObj.rptName ? rptObj.rptName : '');
row.$state = self.addStatus ? 'added' : 'modified';
row.lrdate = moment().format('YYYY-MM-DD HH:mm:ss')// ER.services.getData()[0].sysdate;
}
var editIndex = undefined;
function endEditing(){
if (editIndex == undefined){return true}
if (self.$grid.datagrid('validateRow', editIndex)){
self.$grid.datagrid('endEdit', editIndex);
editIndex = undefined;
return true;
} else {
return false;
}
}
function onClickCell(index, field){
if (!self.editStatus) return;
if (editIndex != index){
if (endEditing()){
self.$grid.datagrid('selectRow', index);
self.$grid.datagrid('beginEdit', index);
var ed = self.$grid.datagrid('getEditor', {index:index,field:field});
if (ed){
($(ed.target).data('textbox') ? $(ed.target).textbox('textbox') : $(ed.target)).focus();
}
editIndex = index;
} else {
setTimeout(function(){
self.$grid.datagrid('selectRow', editIndex);
},0);
}
}
}
function onEndEdit(index, row){
var keys = Object.keys(row);
keys.splice(0, 1);
var ed = self.$grid.datagrid('getEditor', {
index: index,
field: keys[index]
});
if (ed) {
row[keys[index]] = ed.target.val();
}
}
function append(){
var rptObj = self.args.printObj;
var rows = self.$grid.datagrid('getData').rows;
var max = 0;
for (var i = 0; i < rows.length; i++) {
var _temp = parseInt(rows[i].serialno);
if (_temp > max) max = _temp;
}
self.index = max + 1;
if (endEditing()){
self.$grid.datagrid('appendRow',{
$state: 'added',
rptcode: rptObj.rptCode + (rptObj.rptName ? rptObj.rptName : ''),
serialno: self.index,
crtusercode: ER.Cache.logon.userCode,
lrdate: moment().format('YYYY-MM-DD HH:mm:ss')// ER.services.getData()[0].sysdate;
});
editIndex = self.$grid.datagrid('getRows').length-1;
self.$grid.datagrid('selectRow', editIndex)
.datagrid('beginEdit', editIndex);
}
}
function removeit(){
var selRows = self.gridadp.getSelected();
if(!selRows) {
return;
} else {
self.removeItem([selRows]);
}
var ronIndex = self.$grid.datagrid('getRowIndex', selRows)
self.$grid.datagrid('cancelEdit', ronIndex)
.datagrid('deleteRow', ronIndex);
editIndex = undefined;
}
function accept(){
if (endEditing()){
self.$grid.datagrid('acceptChanges');
}
}
function reject(){
self.$grid.datagrid('rejectChanges');
editIndex = undefined;
}
function getChanges(){
var rows = self.$grid.datagrid('getChanges');
alert(rows.length+' rows are changed!');
}
// =========================================================================
PrintWindow.prototype.preview = function() {
var row = self.gridadp.getSelected();
if (row) {
try {
this.activePrinter(1);
} catch (e) {
console.log(e);
}
}
}
PrintWindow.prototype.activePrinter = function(mod) {
var self = this;
var row = self.gridadp.getSelected();
// FDP.silent = true;
try {
var pd = self.getPrintData();
var pv = self.getPrintVariables();
ER.services.print(self.args.printObj.rptId, row.serialno, mod, pd, pv);
return;
} finally {
// FDP.silent = false;
}
}
PrintWindow.prototype.getPrintData = function() {
var ds = this.args.printObj;
var data = {
uiObjCode: ds.uiObjCode,
uiObjName: ds.uiObjName || '打印报表',
isMaster: true,
fieldList: [],
forPrint: []
};
var columns = this.args.columns;
for (var i = 0; i < columns.length; i++) {
var col = columns[i];
data.fieldList.push({
fieldName: col.fieldName,
fieldDes: col.dispName,
dataType: col.dataType,
dataWidth: col.headerWidth,
dataDec: col.dataDec
});
}
var fArrayData = [];
for (var k = 0; k < this.args.selectRows.length; k++) {
var tempData = {};
for (var j = 0; j < data.fieldList.length; j++) {
var fieldName = data.fieldList[j].fieldName;
tempData[fieldName] = this.args.selectRows[k][fieldName];
}
fArrayData.push(tempData);
}
data.forPrint = data.forPrint.concat(fArrayData);
return [data];
};
PrintWindow.prototype.getPrintVariables = function() {
var data = _.extend(this.args.qParams, ER.Cache.logon);
return data;
};
PrintWindow.prototype.print = function() {
var row = self.gridadp.getSelected();
if (row) {
try {
this.activePrinter(0);
} catch (e) {
console.log(e);
}
}
}
PrintWindow.prototype.setting = function() {
var row = self.gridadp.getSelected();
if (row) {
try {
this.activePrinter(2);
} catch (e) {
console.log(e);
}
}
}
PrintWindow.prototype.download = function() {
}
PrintWindow.prototype.exit = function() {
this.close();
// delete avalon.vmodels['fdp_print_toolbar'];
}
/**
* 获取本业务的层列明细表数据
* @param {[type]} funcData [功能编码]
* @param {[type]} code [数据源]
* @param {[type]} data [数据]
* @param {[type]} self [description]
* @param {Function} callback [description]
*/
function loadData(funcData, code, data, win, callback) {
var codes = code.split(';');
var datasets = [];
for (var c in codes) {
win[codes[c]] = new DataSource({
'funcObjCode': codes[c],
});
win[codes[c]].initUIObj(data[codes[c]]);
win[codes[c]].funcCode = funcData.funcCode;
if (0 < _.where(win[codes[c]].columns, {
'fieldName': 'FunCode'
}).length) {
win[codes[c]].fixQuery = {
FunCode: funcData.funCode
};
}
datasets.push(win[codes[c]]);
}
FDP.bizDao.getDataSet(datasets, function(isok, result) {
if (isok) {
if (callback) {
callback();
}
} else {
FDP.messager.err('获取打印格式数据源数据错误,请重试。');
}
});
}
/**
* [设置是否允许编辑或者新增行]
* @param {[type]} win [当前窗口]
* @param {Boolean} isEnable [布尔类型是否允许增加或编辑]
*/
function setEnableAddRow(win, isEnable) {
win.vm.grid_main.setOptions({
editable: isEnable,
enableAddRow: false
});
}
return PrintWindow;
});