|
|
|
|
|
define(function (require, exports, module) {
|
|
|
|
|
|
function editpanelnavAdapter(id, args, pageId) {
|
|
|
this.id = id;
|
|
|
this.pageId = pageId;
|
|
|
this.opts = {
|
|
|
dispType: 'group',
|
|
|
editable: false,
|
|
|
groupCaption:[]
|
|
|
};
|
|
|
this.data = {
|
|
|
columns: [], // 列
|
|
|
item: {} //行数据
|
|
|
};
|
|
|
|
|
|
this.actions = {};
|
|
|
|
|
|
this.vmodel = {};
|
|
|
|
|
|
this.state = 'browse';
|
|
|
|
|
|
this.allowEdit = false;//不应该定义在opts里???
|
|
|
|
|
|
_init(this, args);
|
|
|
}
|
|
|
|
|
|
function _init(self, args) {
|
|
|
//如果是DataSource,进行相关数据提取和事件操作
|
|
|
if (args && args.data && args.data.isDataSource) {
|
|
|
_initDs(self, args);
|
|
|
}
|
|
|
|
|
|
if (self.actions.hasOwnProperty('onRClick')) {
|
|
|
var fn = self.actions.onRClick;
|
|
|
self.actions.onRClick = function (e) {
|
|
|
self.onRClick(e);
|
|
|
fn(e);
|
|
|
}
|
|
|
} else {
|
|
|
self.actions.onRClick = function (e) {
|
|
|
self.onRClick(e);
|
|
|
}
|
|
|
}
|
|
|
_.extend(self, args);
|
|
|
}
|
|
|
|
|
|
|
|
|
function _initDs(self, args) {
|
|
|
var dsDetails = null;
|
|
|
self.dataSrc = args.data;
|
|
|
dsDetails = self.dataSrc.getDetails();
|
|
|
self.title = self.dataSrc.uiObjName;
|
|
|
var _columns = _.filter(self.dataSrc.columns, function(item) {
|
|
|
return (item.procParaType == Store.Enums.ProcParaType.NONE ||
|
|
|
!item.procParaType);
|
|
|
});
|
|
|
args.data = {
|
|
|
columns: _columns,
|
|
|
item: self.dataSrc.curRow
|
|
|
};
|
|
|
|
|
|
self.dataSrc.on('onCurrentChanged', function (ds, e) {
|
|
|
self.refresh(e.newRow);
|
|
|
self.state = e.newRow && e.newRow.dataRowState == Store.Enums.DataRowState.ADDED ? 'add' : 'edit';
|
|
|
});
|
|
|
|
|
|
self.dataSrc.on('onCollectChanged', function (ds, e) {
|
|
|
if (e.action == Store.Enums.CollectionChangedAction.RESET) {
|
|
|
self.refresh(ds.currentRow);
|
|
|
}
|
|
|
|
|
|
if (e.action == Store.Enums.CollectionChangedAction.REPLACE && e.row == self.data.item) {
|
|
|
self.refresh(e.row);
|
|
|
}
|
|
|
});
|
|
|
|
|
|
self.dataSrc.on('onValueChanged', function (ds, e) {
|
|
|
if (e.row === self.data.item) {
|
|
|
self.setValue(e.col.fieldName, e.row.getColumnText(e.col));
|
|
|
}
|
|
|
});
|
|
|
|
|
|
self.dataSrc.on('onPropertyChanged', function (ds, e) {
|
|
|
if (e.propertyName == 'Editable') {
|
|
|
if (ds.getEditable()) {
|
|
|
self.enable();
|
|
|
} else {
|
|
|
self.disable();
|
|
|
}
|
|
|
|
|
|
}
|
|
|
});
|
|
|
|
|
|
self.dataSrc.on('commitEdit', function (ds, e) {
|
|
|
var currentRow = ds.currentRow;
|
|
|
var columns = ds.columns;
|
|
|
var editors = self.vmodel.$editors;
|
|
|
for (var i = 0; i < editors.length; i++) {
|
|
|
var editor = editors[i];
|
|
|
e.isCancel = !currentRow.setColumnText(editor.fieldName, editor.getValue());
|
|
|
if (e.isCancel) {
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
|
|
|
//处理编辑受限问题
|
|
|
for (var i = 0; i < dsDetails.length; i++) {
|
|
|
dsDetails[i].on('onFieldChanged', function (ds, e) {
|
|
|
self.checkEditLimit(ds.getParentRelation().master);
|
|
|
});
|
|
|
|
|
|
dsDetails[i].on('onRowDeleted', function (ds, e) {
|
|
|
self.checkEditLimit(ds.getParentRelation().master);
|
|
|
});
|
|
|
|
|
|
dsDetails[i].on('onPropertyChanged', function (ds, e) {
|
|
|
if (e.propertyName == 'Editable') {
|
|
|
if (ds.getEditable()) {
|
|
|
self.enable();
|
|
|
self.checkEditLimit(ds.getParentRelation().master);
|
|
|
} else {
|
|
|
self.disable();
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
|
|
|
editpanelnavAdapter.prototype.enable = function () {
|
|
|
if (this.vmodel.$enable) {
|
|
|
this.vmodel.$enable();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
editpanelnavAdapter.prototype.disable = function () {
|
|
|
if (this.vmodel.$disable) {
|
|
|
this.vmodel.$disable();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
editpanelnavAdapter.prototype.refresh = function (row) {
|
|
|
if (this.vmodel.$refresh) {
|
|
|
this.vmodel.$refresh(row);
|
|
|
this.data.item = row;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
editpanelnavAdapter.prototype.checkEditLimit = function (dataSrc) {
|
|
|
var self = this;
|
|
|
var details = dataSrc.getDetails();
|
|
|
if (details.length == 0) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var isEmpty = true;
|
|
|
for (var j = 0; j < details.length; j++) {
|
|
|
isEmpty = isEmpty && details[j].isEmpty();
|
|
|
}
|
|
|
|
|
|
for (var i = 0; i < dataSrc.columns.length; i++) {
|
|
|
var col = dataSrc.columns[i];
|
|
|
if (col.isEditLimit) {
|
|
|
self.setEditorEditable(col.fieldName, col.isEditable && isEmpty);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
editpanelnavAdapter.prototype.setValue = function (fieldName, value) {
|
|
|
if (this.vmodel.$setValue) {
|
|
|
this.vmodel.$setValue(fieldName, value);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
editpanelnavAdapter.prototype.setEditorEditable = function (colName, editable) {
|
|
|
if (this.vmodel && this.vmodel.$editors) {
|
|
|
var editor = _.where(this.vmodel.$editors, {fieldName: colName})[0];
|
|
|
if (editor) {
|
|
|
editor.disable(!editable);
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
|
|
|
editpanelnavAdapter.prototype.addContextMenu = function (fn) {
|
|
|
this._contextMenu = fn;
|
|
|
};
|
|
|
|
|
|
editpanelnavAdapter.prototype.removeContextMenu = function () {
|
|
|
delete this._contextMenu;
|
|
|
};
|
|
|
|
|
|
editpanelnavAdapter.prototype.onRClick = function (e) {
|
|
|
if (this._contextMenu) {
|
|
|
e.preventDefault();
|
|
|
this._contextMenu({
|
|
|
top: e.pageY,
|
|
|
left: e.pageX
|
|
|
});
|
|
|
}
|
|
|
};
|
|
|
|
|
|
editpanelnavAdapter.prototype.getColumnEditable = function (fieldName) {
|
|
|
//非数据源,编辑可用
|
|
|
if (!this.dataSrc) return true;
|
|
|
|
|
|
//数据源不允许编辑,编辑不可用
|
|
|
if (!this.dataSrc.allowEdit) return false;
|
|
|
|
|
|
//通过列的ReadOnly,来决定是否可以编辑
|
|
|
var col = this.dataSrc.getColumn(fieldName);
|
|
|
if (col.getReadOnly()) return false;
|
|
|
|
|
|
//主键不允许编辑
|
|
|
if (this.state == 'edit' && col.isPrimaryKey) return false;
|
|
|
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
return editpanelnavAdapter;
|
|
|
|
|
|
})
|