define(function (require, exports, module) { var Window = require('system/views/pages/window'); var tpl = require('text!apps/edp/frd/frd002/refwin.tpl'); // var DataSource = require('system/base/datasource'); function RefWindow(args) { this.options = { title: '参照信息', content: tpl, width: 612, height: 435, modal: true, closed: true, closable: true, data: null } this.args = args; Window.call(this, this.options); this.dsMaster = new DataSource({ funcObjCode: 'tFrmUIObj' }); this.dsDetail = new DataSource({ funcObjCode: 'tFrmUIProp' }); } inherits(RefWindow, Window); RefWindow.prototype.init = function () { var self = this; var tree = { actions: { // onDblClick: function(event, treeId, treeNode) { // var newRow = treeNode.tag; // if (newRow) { // self.dsMaster.setCurrentRow(newRow); // } // }, onClick: function (event, treeNode) { var newRow = treeNode.row; if (newRow !== undefined) { self.dsMaster.setCurrentRow(newRow); } } } } this.register('tree', 'tree_obj', tree); } RefWindow.prototype.open = function () { var self = this; var code = this.dsMaster.uiObjCode + ';' + this.dsDetail.uiObjCode; var post_data = { funcCode: '', uiObjCodes: code }; Store.services.getUiObjSchema(post_data, function (isOk, data) { if (isOk) { self.dsMaster.initUIObj(data[self.dsMaster.uiObjCode]); self.dsDetail.initUIObj(data[self.dsDetail.uiObjCode]); self.dsMaster.addRelation(self.dsDetail, 'UIObjCode', 'UIObjCode'); Window.prototype.open.call(self); } }); }; RefWindow.prototype.customerize = function ($container) { var self = this; this.$cmbField = this.getElement('.cmbField'); this.$cmbFieldName = this.getElement('.cmbFieldName'); var $btnOk = this.getElement('.btnOk'); if ($btnOk) { $btnOk.on('click', function () { self.doOp('ok'); }); } var $btnCancel = this.getElement('.btnCancel'); if ($btnCancel) { $btnCancel.click(function () { self.doOp('exit'); }); } this.dsMaster.search(function (isOk) { self.dsMaster.setCurrentRow(null); var nodes = parseTreeData(self.dsMaster); self.vm.tree_obj.reset(nodes); self.dsMaster.on('onCurrentChanged', function (ds, e) { if (ds.currentRow) { ds.loadDetails(function (isOk) { if (isOk) { var items = parseFieldItems(self.dsDetail); self.$cmbField.combobox('loadData', items); self.$cmbField.combobox('clear'); self.$cmbFieldName.combobox('loadData', items); self.$cmbFieldName.combobox('clear'); } }); } }); }); }; /** * 转化ds数据为字段元素 * {text:[fieldName],value:[rowindex]} * @param {Object} ds 数据源 * @return {Array} 字段数组 */ function parseFieldItems(ds) { var items = []; for (var i = 0; i < ds.rows.length; i++) { var row = ds.rows[i]; var item = { text: row['DispName'], value: row['FieldName'] } items.push(item); } ; return items; } /** * 转为ds数据为树节点数据 * {row:[rowindex],id:[UIObjCode],pId:[ModuleCode],name:[UIObjName]} * @param {Object} ds 数据源 * @return {Array} 树数据 */ function parseTreeData(ds) { var nodes = []; var root = { pId: '', id: '*', name: '界面对象' }; nodes.push(root); var modules = []; for (var i = 0; i < ds.rows.length; i++) { var row = ds.rows[i]; if (modules.indexOf(row['ModuleCode']) < 0) { modules.push(row['ModuleCode']); var moduleNode = { pId: '*', id: row['ModuleCode'], name: row['ModuleName'] }; nodes.push(moduleNode); } var treeNode = { row: i, uiObjCode: row['UIObjCode'], pId: row['ModuleCode'], id: row['UIObjCode'], name: row['UIObjName'] }; nodes.push(treeNode); } ; return nodes; } RefWindow.prototype.select = function () { var refObj = this.vm.tree_obj.getSelected().uiObjCode; if (!refObj) { Store.showError(Store.MSG.UIOBJ_NOT_SELECT); return; } var refField = this.$cmbField.combobox('getValue'); var refFieldName = this.$cmbFieldName.combobox('getValue'); if (this.args.row) { this.args.row.validator('RefObj', refObj); this.args.row.validator('RefField', refField); this.args.row.validator('RefFieldName', refFieldName); } if (this.args.callback) { this.args.callback(); } this.close(); }; RefWindow.prototype.doOp = function (opCode) { var isHandled = false; switch (opCode) { case 'ok': this.select(); break; case 'exit': this.close(); break; case 'refresh': this.refresh(); } }; RefWindow.prototype.refresh = function () { var self = this; //表参照专用,表参照相关约束 this.args.refParam.ignoreValue = true; this.dsMaster.refQuery = this.args.refParam; this.dsMaster.search(); }; return RefWindow; })