BoardParamWindow.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  1. Ext.define('erp.view.desktop.BoardParamWindow',{
  2. extend:'Ext.window.Window',
  3. alias:'widget.boardparamwin',
  4. width:800,
  5. height:450,
  6. modal:true,
  7. layout:'border',
  8. id:'template',
  9. resData:null,
  10. border: 0,
  11. initComponent:function(){
  12. var me = this;
  13. me.items = [{
  14. xtype:'form',
  15. id:'paramForm',
  16. region: 'center',
  17. layout:'column',
  18. autoScroll: true,
  19. defaults:{
  20. columnWidth:1,
  21. margin:'5 5 5 5'
  22. },
  23. items:[{
  24. xtype:'fieldset',
  25. title:'参数设置',
  26. hidden: true
  27. },{
  28. xtype:'fieldset',
  29. title:'运行设置',
  30. layout:'column',
  31. defaults:{
  32. },
  33. items:[{
  34. xtype:'numberfield',
  35. id:'refreshFrequency',
  36. name:'refreshFrequency',
  37. fieldLabel:'刷新/切换频率(秒/次)',
  38. value:'5',
  39. minValue:1,
  40. allowBlank:false
  41. },/*{
  42. xtype:'numberfield',
  43. id:'switchFrequency',
  44. name:'switchFrequency',
  45. fieldLabel:'切换频率(秒/次)',
  46. minValue:3,
  47. value:'30',
  48. minValue:1
  49. }*/]
  50. }],
  51. /**
  52. * 添加面板参数下拉组件
  53. */
  54. addParamCombo: function() {
  55. var form = this;
  56. var items = me.resData.parameters;
  57. var paramFieldSet = form.items.items[0];
  58. paramFieldSet.removeAll();
  59. var comboxs = [];
  60. Ext.Array.each(items, function(item, index) {
  61. var data = item.optionalValues ? item.optionalValues.map(function (v) {
  62. return {
  63. value: v,
  64. name: v
  65. }
  66. }) : []
  67. var combox = new Ext.form.field.ComboBox({
  68. fieldLabel: item.name,
  69. name: item.code,
  70. store: Ext.create('Ext.data.Store', {
  71. fields: ['value', 'name'],
  72. data: data
  73. }),
  74. queryMode: 'local',
  75. displayField: 'name',
  76. valueField: 'value',
  77. value: item.value || '',
  78. allowBlank: false,
  79. });
  80. comboxs.push(combox);
  81. });
  82. paramFieldSet.add(comboxs);
  83. if(comboxs.length != 0) {
  84. paramFieldSet.show();
  85. }
  86. form.doLayout();
  87. }
  88. },{
  89. xtype: 'grid',
  90. id:'modelGrid',
  91. selectedIndex: 1,
  92. region: 'east',
  93. width: 300,
  94. store : Ext.create('Ext.data.Store', {
  95. fields : ['code', 'content', 'enabled', 'description', 'name','title','panelCode'],
  96. data: []
  97. }),
  98. selModel: Ext.create('Ext.selection.CheckboxModel'),
  99. columnLines:true,
  100. columns: [
  101. { text: 'ID', dataIndex: 'code', flex: 1, hidden: true },
  102. {
  103. text: '看板名称', dataIndex: 'name', flex: 1, editor: 'textfield', renderer: function (v, metadata, record, rowIndex, columnIndex, store) {
  104. metadata.tdAttr = 'data-qtip="' + (v || '') + '"';
  105. return v;
  106. }
  107. }
  108. ],
  109. listeners: {
  110. afterLayout: function(grid) {
  111. grid.getSelectionModel().deselectAll();
  112. grid.selectModel();
  113. },
  114. },
  115. loadGridData: function() {
  116. var grid = this;
  117. res = me.resData.relatedKanbans || [];
  118. grid.getStore().loadData(res);
  119. grid.getStore().sort('enabled', 'DESC');
  120. },
  121. selectModel: function() {
  122. var grid = this;
  123. if(!me.resData) {
  124. return;
  125. }
  126. var selectedModels = me.resData.relatedKanbans || [];
  127. var modelStore = grid.getStore();
  128. var records = [];
  129. selectedModels.map(function(model) {
  130. var record = modelStore.findRecord('code',model['code']);
  131. if(record && model.enabled) {
  132. records.push(record);
  133. }
  134. });
  135. grid.getSelectionModel().select(records || []);
  136. },
  137. getSelectedModels: function() {
  138. var grid = this;
  139. var selectedModels = grid.getSelectionModel().getSelection();
  140. return selectedModels || [];
  141. },
  142. }];
  143. me.callParent(arguments);
  144. },
  145. buttonAlign: 'center',
  146. buttons:[{
  147. text:'确定',
  148. formBind:true,
  149. handler:function(){
  150. var me = Ext.getCmp('template');
  151. var formpanel = Ext.getCmp('paramForm');
  152. if(formpanel.isValid()) {
  153. var modelGrid = Ext.getCmp('modelGrid');
  154. if(modelGrid.getSelectedModels().length == 0) {
  155. showErrorMsg('警告','请至少选中一个看板!');
  156. return;
  157. }
  158. if(!me.checkFrequency()) {
  159. return;
  160. }
  161. me.setFullScreen();
  162. me.savePanelInstance();
  163. }else {
  164. showErrorMsg('警告', '有必填项未填!');
  165. }
  166. }
  167. },{
  168. text:'取消',
  169. handler:function(btn){
  170. btn.ownerCt.ownerCt.close()
  171. }
  172. }],
  173. listeners: {
  174. afterLayout: function(me) {
  175. me.init();
  176. }
  177. },
  178. load: function() {
  179. var me = this;
  180. // 添加参数下拉框
  181. var paramForm = Ext.getCmp('paramForm');
  182. paramForm.addParamCombo();
  183. // 读取看板grid数据
  184. var modelGrid = Ext.getCmp('modelGrid');
  185. modelGrid.loadGridData();
  186. },
  187. init: function() {
  188. var me = this;
  189. var record = me.record;
  190. var code = record.get('code');
  191. var view = Ext.getCmp('desktopDataView');
  192. view.getEl().mask('loading...');
  193. if(me.record){
  194. Ext.Ajax.request({
  195. url:'panelInstance/get/byPanel/'+code,
  196. method:'POST',
  197. callback:function(options, success, response){
  198. view.getEl().unmask();
  199. if(response.responseText){
  200. var res = Ext.decode(response.responseText);
  201. if(success) {
  202. var form = Ext.getCmp('paramForm');
  203. var formData = {
  204. data: {
  205. refreshFrequency: res.refreshFrequency,
  206. switchFrequency: res.refreshFrequency,
  207. },
  208. getData: function() {
  209. return this.data
  210. }
  211. }
  212. form.loadRecord(formData);
  213. res.parameters = Ext.decode(res.parameters) || [];
  214. me.resData = res;
  215. me.load();
  216. }else {
  217. showErrorMsg('失败', res.message, Ext.getCmp('template'));
  218. }
  219. }
  220. }
  221. });
  222. }
  223. },
  224. /**
  225. * 生成面板实例后打开展示界面
  226. */
  227. savePanelInstance: function() {
  228. var me = this;
  229. var params = me.getBoardConfig();
  230. Ext.Ajax.request({
  231. url:'panelInstance/updatePart/',
  232. method:'POST',
  233. params:{
  234. json:Ext.encode(params)
  235. },
  236. callback:function(options,success,response){
  237. var res = JSON.parse(response.responseText);
  238. if(success) {
  239. me.viewBoard();
  240. }else {
  241. showErrorMsg('失败', res.message);
  242. }
  243. }
  244. });
  245. },
  246. getBoardConfig: function() {
  247. var me = this;
  248. var modelGrid = Ext.getCmp('modelGrid');
  249. var selectedModelCodes = modelGrid.getSelectedModels().map(function(model) {
  250. return model.get('code');
  251. });
  252. var relatedKanbans = me.resData.relatedKanbans.map(function(kanban) {
  253. kanban.enabled = selectedModelCodes.indexOf(kanban.code) != -1;
  254. return kanban;
  255. });
  256. var paramForm = Ext.getCmp('paramForm');
  257. var config = paramForm.getForm().getValues();
  258. var parameters = me.resData.parameters.map(function(p) {
  259. p.value = config[p.code];
  260. return p
  261. })
  262. return {
  263. code: me.resData.code,
  264. parameters: Ext.encode(parameters),
  265. refreshFrequency: config.refreshFrequency,
  266. switchFrequency: config.refreshFrequency,
  267. relatedKanbans: relatedKanbans
  268. }
  269. },
  270. checkFrequency:function(){
  271. var me = this;
  272. var refreshFreq = Ext.getCmp('refreshFrequency').value;
  273. var switchFreq = Ext.getCmp('refreshFrequency').value;
  274. if(switchFreq){
  275. if(refreshFreq>switchFreq){
  276. showErrorMsg('警告','刷新频率必须小于切换频率!');
  277. return false;
  278. }
  279. }else {
  280. var modelGrid = Ext.getCmp('modelGrid');
  281. // 看板数量为2个以上时切换频率不可为空
  282. if(modelGrid.getSelectedModels().length >= 2) {
  283. showErrorMsg('警告','切换频率不可为空');
  284. return false;
  285. }
  286. }
  287. return true;
  288. },
  289. viewBoard:function(){
  290. var me = this;
  291. // Ext.getCmp('template').close();
  292. Ext.create('erp.view.desktop.BoardWindow',{
  293. instanceCode:me.resData.code,
  294. html:'<iframe src="boardshow?code=' + me.resData.code + '" width="100%" height="100%" style="border:none"></iframe>'
  295. }).show();
  296. },
  297. setFullScreen: function () {
  298. var element = document.documentElement;
  299. if (element.requestFullscreen) {
  300. element.requestFullscreen();
  301. } else if (element.mozRequestFullScreen) {
  302. element.mozRequestFullScreen();
  303. } else if (element.webkitRequestFullScreen) {
  304. element.webkitRequestFullScreen();
  305. } else if (element.msRequestFullscreen) {
  306. element.msRequestFullscreen();
  307. }
  308. }
  309. });