BoardManageMainPanel.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445
  1. Ext.define('erp.view.desktop.BoardManageMainPanel', {
  2. extend: 'Ext.panel.Panel',
  3. alias:'widget.managemain',
  4. id:'managemain',
  5. border: 0,
  6. hideBorders: true,
  7. layout: 'border',
  8. style: {
  9. 'border-left': '1px solid silver'
  10. },
  11. initRecord: null,
  12. initComponent:function(){
  13. var me = this;
  14. me.initRecord = null;
  15. var dataTypeStore = Ext.create('Ext.data.Store', {
  16. fields: ['type', 'name'],
  17. data: [
  18. { "type": "String", "name": "下拉框" },
  19. { "type": "SQL", "name": "SQL取数" }
  20. ]
  21. });
  22. var dataTypeCombo = new Ext.form.ComboBox({
  23. store: dataTypeStore,
  24. valueField: 'type',
  25. displayField: 'name',
  26. mode: 'local',
  27. forceSelection: true,
  28. editable: false,
  29. triggerAction: 'all',
  30. selectOnFocus: true,
  31. listeners: {
  32. change: function() {
  33. var selected = Ext.getCmp('boardParamsGrid').getSelectionModel().getSelection()[0];
  34. selected.set('optionalValues', '');
  35. }
  36. }
  37. });
  38. me.items = [{
  39. xtype: 'form',
  40. id:'boardSetForm',
  41. region: 'north',
  42. height: '30%',
  43. bodyStyle: {
  44. border: 'none'
  45. },
  46. style: {
  47. border: '1px solid silver'
  48. },
  49. bodyPadding: 10,
  50. defaults: {
  51. width: 300,
  52. labelWidth: 80
  53. },
  54. items: [{
  55. xtype: 'hidden',
  56. name: 'code',
  57. id:'code'
  58. },{
  59. xtype: 'textfield',
  60. name: 'name',
  61. allowBlank: false,
  62. fieldLabel: '名称'
  63. },{
  64. xtype:'triggerfield',
  65. name:'iconCls',
  66. fieldLabel: '图标',
  67. triggerCls: "icon-selecter",
  68. overCls: '',
  69. hideTrigger : false,
  70. editable: false,
  71. allowBlank: false,
  72. onTriggerClick : function(){
  73. me.showIcons(me);
  74. }
  75. },{
  76. xtype: 'radiogroup',
  77. fieldLabel: '展示方式',
  78. columns: 2,
  79. allowBlank: false,
  80. items: [
  81. { boxLabel: '自动切换', name: 'display', inputValue: 'AutoSwitch'},
  82. // { boxLabel: '分屏展示', name: 'display', inputValue: 'SplitScreen' }
  83. ]
  84. }, {
  85. xtype:'combo',
  86. columnWidth:0.75,
  87. fieldLabel:'数据源',
  88. name:'dataSourceCode',
  89. id:'dataSourceCode',
  90. //value:'UAS',
  91. editable:false,
  92. allowBlank: false,
  93. store:Ext.create('Ext.data.Store',{
  94. fields:['username','code','name'],
  95. proxy:{
  96. type:'ajax',
  97. url:'datasource/get',
  98. reader: {
  99. type: 'json',
  100. root: 'content'
  101. }
  102. },
  103. autoLoad: true
  104. }),
  105. queryMode: 'local',
  106. displayField: 'name',
  107. valueField: 'code'
  108. }],
  109. bbar: ['->', {
  110. xtype: 'button',
  111. text: '保存',
  112. width: 100,
  113. handler: function() {
  114. var formpanel = Ext.getCmp('boardSetForm');
  115. if(formpanel.isValid()) {
  116. formpanel.savePanel(formpanel)
  117. }else {
  118. Ext.Msg.alert('警告', '有必填项未填!');
  119. }
  120. }
  121. }, '->'],
  122. savePanel: function(formpanel) {
  123. var me = this;
  124. var managePanel = Ext.getCmp('manage');
  125. var el = me.getEl();
  126. if(!managePanel.selectedPanelRecord) {
  127. Ext.Msg.confirm('提示', '请先选择左侧面板')
  128. return;
  129. }
  130. var newRecord = {
  131. data: formpanel.getForm().getValues(),
  132. getData: function() {
  133. return this.data;
  134. }
  135. };
  136. var values = formpanel.getForm().getValues();
  137. var type;
  138. if(values.code){
  139. type = 'update';
  140. }else{
  141. type = 'save';
  142. }
  143. el.mask('保存中...');
  144. Ext.Ajax.request({
  145. url:'panel/'+type,
  146. method:'POST',
  147. params:{
  148. json:Ext.encode(values)
  149. },
  150. callback:function(options,success,response){
  151. el.unmask();
  152. var res = Ext.decode(response.responseText);
  153. if(typeof(res.success)!=='undefined'&&res.success==false){
  154. Ext.Msg.alert('保存失败',res.message);
  155. }else{
  156. Ext.Msg.alert('提示','保存成功!');
  157. var desktop = Ext.getCmp('desktop');
  158. desktop.shortcutsView.store.reload();
  159. if(type=='save'){
  160. newRecord.data.code = res.code;
  161. }
  162. var r = {
  163. data: newRecord.data,
  164. get: function(key) {return this[key]},
  165. set: function(key, value) {this[key] = value},
  166. getData: function() {return this.data}
  167. }
  168. // 更新左侧item
  169. var leftpanel = Ext.getCmp('manageleft');
  170. leftpanel.updateItem(r);
  171. me.setPanelDisabled();
  172. }
  173. }
  174. });
  175. }
  176. }, {
  177. xtype: 'grid',
  178. region: 'center',
  179. height: '70%',
  180. id:'boardParamsGrid',
  181. store: Ext.create('Ext.data.JsonStore',{
  182. fields: ['code', 'name', 'type', 'optionalValues'],
  183. data: []
  184. }),
  185. autoScroll: true,
  186. forceFit: true,
  187. columnLines: true,
  188. columns: [
  189. { text: 'ID', dataIndex: 'code', hidden: true },
  190. { text: '参数名称', dataIndex: 'name', flex: 1, editor: 'textfield' },
  191. { text: '数据类型', dataIndex: 'type', flex: 1, editor: dataTypeCombo, renderer: function (value, cellmeta, record) {
  192. var index = dataTypeStore.find(dataTypeCombo.valueField, value);
  193. var ehrRecord = dataTypeStore.getAt(index);
  194. var returnvalue = "";
  195. if (ehrRecord) {
  196. returnvalue = ehrRecord.get('name');
  197. }
  198. return returnvalue;
  199. }
  200. },
  201. { text: '值', dataIndex: 'optionalValues', flex: 4 },
  202. { xtype:'actioncolumn', align: 'center', width: 50, items:[{
  203. iconCls: 'save',
  204. tooltip: '保存',
  205. handler: function(th, rowIndex, colIndex) {
  206. var grid =this.up('grid');
  207. var rec = grid.getStore().getAt(rowIndex);
  208. var data = Object.assign({}, rec.data);
  209. if(data.type == 'String') {
  210. data.optionalValues = data.optionalValues instanceof Array ? data.optionalValues : data.optionalValues.split(',')
  211. }else if(data.type == 'SQL') {
  212. data.optionalValues = data.optionalValues instanceof Array ? data.optionalValues : [data.optionalValues]
  213. }
  214. grid.saveParam(data);
  215. }
  216. }] }
  217. ],
  218. tbar: [{
  219. xtype: 'button',
  220. text: '添加参数',
  221. disabled: true,
  222. handler: function() {
  223. if(!me.initRecord.get('code')) {
  224. Ext.Msg.alert('提示', '请先保存面板再执行添加参数操作!');
  225. return;
  226. }
  227. var grid = this.up('grid');
  228. var record = {
  229. name: '新参数',
  230. type: 'String',
  231. inputMode: 'Radio',
  232. optionalValues: []
  233. };
  234. grid.addParam(record);
  235. }
  236. }, {
  237. xtype: 'button',
  238. text: '删除参数',
  239. disabled: true,
  240. handler: function() {
  241. var grid =this.up('grid');
  242. var record = grid.getSelectionModel().getSelection()[0];
  243. if(record) {
  244. Ext.Msg.confirm('确认', '确定要删除参数 ' + record.get('name') + '?', function(btn) {
  245. if(btn == 'yes') {
  246. grid.deleteParam(record, grid.getStore().indexOf(record));
  247. }
  248. });
  249. }
  250. }
  251. }],
  252. plugins: [
  253. Ext.create('Ext.grid.plugin.CellEditing', {
  254. clicksToEdit: 2
  255. })
  256. ],
  257. listeners: {
  258. celldblclick: function (gridview, colEl, colIndex, record, rowEl, rowIndex, e, eOpts) {
  259. var types = ['String', 'SQL'];
  260. var titles = ['下拉项', 'SQL定义'];
  261. var i = types.indexOf(record.get('type'));
  262. if(colIndex == 2 && i != -1) { // 值列
  263. Ext.create('erp.view.desktop.ParamValueEditor',{
  264. title: titles[i],
  265. paramRecord: record
  266. }).show();
  267. }
  268. },
  269. },
  270. loadGridData: function() {
  271. var grid = this;
  272. grid.getEl().mask('loading...');
  273. Ext.Ajax.request({
  274. url:'parameter/get/byPanel/' + me.initRecord.get('code'),
  275. method:'POST',
  276. callback:function(options,success,response){
  277. grid.getEl().unmask();
  278. if(response.responseText == '') return;
  279. var res = JSON.parse(response.responseText);
  280. if(success) {
  281. res = res instanceof Array ? res : [res];
  282. grid.getStore().loadData(res);
  283. }else {
  284. Ext.Msg.alert('失败', res.message);
  285. }
  286. }
  287. });
  288. },
  289. addParam: function(record) {
  290. var grid = this;
  291. var rowIndex = grid.getStore().add(record);
  292. grid.getPlugin().startEditByPosition({ row: grid.getStore().getCount() - 1, column: 0 });
  293. },
  294. saveParam: function(record) {
  295. var grid = this;
  296. var type;
  297. if(record['code']) {
  298. type = 'updatePart';
  299. }else {
  300. type = 'save';
  301. }
  302. record.inputMode = 'DropDownBox';
  303. record.panelCode = me.initRecord.get('code');
  304. grid.getEl().mask('保存中...');
  305. Ext.Ajax.request({
  306. url:'parameter/' + type,
  307. method:'POST',
  308. params:{
  309. json:Ext.encode(record)
  310. },
  311. callback:function(options,success,response){
  312. grid.getEl().unmask();
  313. var res = JSON.parse(response.responseText);
  314. if(success) {
  315. if(grid) {
  316. grid.loadGridData();
  317. Ext.Msg.alert('成功', '已更新');
  318. }
  319. }else {
  320. Ext.Msg.alert('失败', res.message);
  321. }
  322. }
  323. });
  324. },
  325. deleteParam: function(record) {
  326. var grid = this;
  327. if(record.get('code')) {
  328. grid.getEl().mask('删除中...');
  329. Ext.Ajax.request({
  330. url:'parameter/delete/' + record.get('code'),
  331. method:'POST',
  332. callback:function(options,success,response){
  333. grid.getEl().unmask();
  334. var res = JSON.parse(response.responseText);
  335. if(success) {
  336. grid.loadGridData();
  337. }else {
  338. Ext.Msg.alert('失败', res.message);
  339. }
  340. }
  341. });
  342. }else {
  343. grid.getStore().remove(record);
  344. }
  345. }
  346. }];
  347. this.callParent(arguments);
  348. },
  349. load: function(record, item) {
  350. var me = this;
  351. me.initRecord = record;
  352. var formpanel = me.down('form');
  353. var form = formpanel.getForm();
  354. me.reset();
  355. // from添加数据
  356. form.loadRecord(record);
  357. // 参数grid添加数据
  358. var paramGrid = Ext.getCmp('boardParamsGrid');
  359. paramGrid.loadGridData();
  360. // 看板grid添加数据
  361. var boardGrid = Ext.getCmp('tplGrid');
  362. boardGrid.loadGridData();
  363. // 设置各个按钮状态
  364. me.setPanelDisabled();
  365. },
  366. setPanelDisabled: function() {
  367. var me = this;
  368. var rightpanel = Ext.getCmp('manageright');
  369. var isDisabled =Ext.getCmp('manage').selectedPanelRecord ? false : true;
  370. me.setButtonDisabled(isDisabled);
  371. rightpanel.setButtonDisabled(isDisabled);
  372. },
  373. reset: function() {
  374. var me = this;
  375. var formpanel = me.down('form');
  376. var form = formpanel.getForm();
  377. form.reset();
  378. var paramgrid = Ext.getCmp('boardParamsGrid');
  379. paramgrid.getStore().removeAll();
  380. var boardgrid = Ext.getCmp('tplGrid');
  381. boardgrid.getStore().removeAll();
  382. },
  383. showIcons: function(me) {
  384. var iconbox = Ext.create('Ext.window.Window', {
  385. title: '选择图标',
  386. height: 200,
  387. width: 400,
  388. layout: 'fit',
  389. modal:true,
  390. items: [{
  391. xtype: 'dataview',
  392. overItemCls: 'icon-over',
  393. selectedItemCls: 'icon-selected',
  394. trackOver: true,
  395. itemSelector: 'div.select-icon-item',
  396. store: Ext.create('Ext.data.Store', {
  397. fields: ['name', 'iconCls', 'code'],
  398. data: [
  399. { iconCls: 'grid-shortcut'},
  400. { iconCls: 'accordion-shortcut'},
  401. { iconCls: 'cpu-shortcut'},
  402. { iconCls: 'notepad-shortcut'}
  403. ]
  404. }),
  405. tpl: new Ext.XTemplate([
  406. '<tpl for=".">',
  407. '<div icon="{iconCls}" class="select-icon-item {iconCls}">',
  408. '</div>',
  409. '</tpl>',
  410. '<div class="x-clear"></div>'
  411. ]),
  412. renderTo: Ext.getBody(),
  413. listeners: {
  414. afterrender: function() {
  415. this.on('itemclick', function(th){
  416. var icon = th.getSelectedNodes()[0].getAttribute('icon')
  417. me.changeIcon(icon, th.up());
  418. }, me);
  419. }
  420. }
  421. }]
  422. });
  423. iconbox.show();
  424. },
  425. changeIcon: function(icon, iconbox) {
  426. var form = this.items.items[0].getForm();
  427. form.findField('iconCls').setValue(icon);
  428. iconbox.close();
  429. },
  430. setButtonDisabled: function(isDisabled) {
  431. var grid = this.down('grid');
  432. var buttons = grid.dockedItems.items[1].items.items;
  433. Ext.Array.each(buttons,function(btn){
  434. if(btn.xtype=='button'&&btn.disabled!=isDisabled){
  435. btn.setDisabled(isDisabled);
  436. }
  437. });
  438. },
  439. });