Browse Source

1017新需求调整

zhuth 8 years ago
parent
commit
2b8fbd53a4
24 changed files with 857 additions and 458 deletions
  1. 1 0
      kanban-console/src/main/webapp/WEB-INF/views/desktop.html
  2. 52 23
      kanban-console/src/main/webapp/resources/app/controller/board.js
  3. 1 1
      kanban-console/src/main/webapp/resources/app/controller/desktop.js
  4. 12 0
      kanban-console/src/main/webapp/resources/app/store/boardparam.js
  5. 0 12
      kanban-console/src/main/webapp/resources/app/store/desktopboard.js
  6. 26 6
      kanban-console/src/main/webapp/resources/app/view/desktop/BoardManageLeftPanel.js
  7. 178 150
      kanban-console/src/main/webapp/resources/app/view/desktop/BoardManageMainPanel.js
  8. 128 20
      kanban-console/src/main/webapp/resources/app/view/desktop/BoardManageRightPanel.js
  9. 93 18
      kanban-console/src/main/webapp/resources/app/view/desktop/BoardManageWindow.js
  10. 81 81
      kanban-console/src/main/webapp/resources/app/view/desktop/BoardParamWindow.js
  11. 6 11
      kanban-console/src/main/webapp/resources/app/view/desktop/Desktop.js
  12. 182 19
      kanban-console/src/main/webapp/resources/app/view/desktop/GlobalParamWindow.js
  13. 12 0
      kanban-console/src/main/webapp/resources/app/view/desktop/StartMenu.js
  14. 11 1
      kanban-console/src/main/webapp/resources/app/view/template/templatebuilderpanel.js
  15. 11 78
      kanban-console/src/main/webapp/resources/app/view/template/templateeditpanel.js
  16. 5 23
      kanban-console/src/main/webapp/resources/app/view/template/templatetree.js
  17. 1 0
      kanban-console/src/main/webapp/resources/app/view/template/viewport.js
  18. 14 14
      kanban-console/src/main/webapp/resources/app/view/user/UserSetting.js
  19. 26 1
      kanban-console/src/main/webapp/resources/css/desktop.css
  20. BIN
      kanban-console/src/main/webapp/resources/images/icons/delete16x16.png
  21. BIN
      kanban-console/src/main/webapp/resources/images/icons/refresh16x16.png
  22. BIN
      kanban-console/src/main/webapp/resources/images/icons/save16x16.png
  23. BIN
      kanban-console/src/main/webapp/resources/images/icons/separator.png
  24. 17 0
      kanban-console/src/main/webapp/resources/js/util/utils.js

+ 1 - 0
kanban-console/src/main/webapp/WEB-INF/views/desktop.html

@@ -11,6 +11,7 @@
 	rel="stylesheet" type="text/css" />
 <script src="static/lib/ext/4.2/ext-all.js" type="text/javascript"></script>
 <script type="text/javascript" src="static/lib/i18n/i18n.js"></script>
+<script type="text/javascript" src="static/js/util/utils.js"></script>
 
 <script type="text/javascript">
 	Ext.Loader.setConfig({

+ 52 - 23
kanban-console/src/main/webapp/resources/app/controller/board.js

@@ -11,9 +11,57 @@ Ext.define('erp.controller.board', {
     	var me = this;
     	me.formIndex = 1;
     	var formIndex = 1;
-    	var gridIndex = 1;
+		var gridIndex = 1;
+		
     	this.control({
     		'templatebuilderpanel':{
+				afterlayout: function(view) {
+					// 如果不是第一次进入界面则直接退出
+					if(window.f == 1) {
+						return;
+					}
+					window.f = 1;
+
+					var flag = 'board?code=';
+					var start = window.location.href.indexOf(flag) + flag.length;
+					var code = decodeURI(window.location.href.substring(start));
+					view.getEl().mask('loading...');
+					Ext.Ajax.request({
+						url:'template/get/' + code,
+						method:'POST',
+						callback:function(options,success,response){
+							view.getEl().unmask();
+							var record = JSON.parse(response.responseText);
+							try {
+								view.modelRecord = record;
+								record.get = function(key) {
+									return this[key];
+								};
+								record.set = function(key, value) {
+									this[key] = value;
+								};
+								view.fireEvent('repaintcomponent', view, record);
+							}catch(e) {
+								Ext.Msg.alert(e.name, e.message)
+							}
+						}
+					});
+				},
+				repaintcomponent:function(view, record){
+					var builderPanel = Ext.getCmp('templatebuilderpanel');
+					var editPanel = Ext.getCmp('templateeditpanel');
+					if(builderPanel.items.items.length > 0) {
+						builderPanel.removeAll();
+						Ext.getCmp('elementdetailgrid').getStore().removeAll();
+						Ext.getCmp('detailpropertiesgrid').getStore().removeAll();
+						Ext.getCmp('baseConfigForm').removeAll(true);
+						builderPanel.currenSelectPanel = null;
+						me.repaint(record);
+					}else {
+						me.repaint(record);
+					}
+					view.setButtonDisabled(false);					
+				},
     			beforeaddpanel:function(panel, config){
     			},
     			afteraddpanel: function(panel, component) {
@@ -23,7 +71,7 @@ Ext.define('erp.controller.board', {
     				self.fireEvent('changepanel',self,component);
     			},
     			changepanel:function(self,newPanel){
-    				var currentPanel = self.currenSelectPanel;
+					var currentPanel = self.currenSelectPanel;
     				if(currentPanel!=null&&currentPanel.id!=newPanel.id){
     					currentPanel.removeCls('select-panel');
     					newPanel.addCls('select-panel');
@@ -112,26 +160,7 @@ Ext.define('erp.controller.board', {
     			}
     		},
     		'templatetree': {
-    			select : function(view, record, index, e) {
-    				var templatelist = Ext.getCmp('templatetree');
-    				templatelist.fireEvent('repaintcomponent',view, record, index, e);
-				},
-				repaintcomponent:function(view, record, index, e){
-    				var templateTree = Ext.getCmp('templatetree');
-					var builderPanel = Ext.getCmp('templatebuilderpanel');
-					var editPanel = Ext.getCmp('templateeditpanel');
-					if(builderPanel.items.items.length > 0) {
-						var builderPanel = Ext.getCmp('templatebuilderpanel');
-						builderPanel.removeAll();
-						Ext.getCmp('elementdetailgrid').getStore().removeAll();
-						Ext.getCmp('detailpropertiesgrid').getStore().removeAll();
-						Ext.getCmp('baseConfigForm').removeAll(true);
-						builderPanel.currenSelectPanel = null;
-						me.repaint(record);
-					}else {
-						me.repaint(record);
-					}
-					templateTree.setButtonDisabled(false);					
+				select: function() {
 				}
     		}
     	});
@@ -188,7 +217,7 @@ Ext.define('erp.controller.board', {
             	height: height,
             	detailData: modelObj[i].detailData,
 				baseConfigFormValue: modelObj[i].baseConfigFormValue
-            });
+			});
 	        companel.repaint();
 	        companel.setXY([x,y]);
 	        //companel.setLayoutPosition({x: modelObj[i].x, y: modelObj[i].y, width: modelObj[i].width, height: modelObj[i].height})

+ 1 - 1
kanban-console/src/main/webapp/resources/app/controller/desktop.js

@@ -2,7 +2,7 @@ Ext.QuickTips.init();
 Ext.define('erp.controller.desktop', {
     extend: 'Ext.app.Controller',
     views:['desktop.Desktop', 'desktop.BoardManageLeftPanel', 'desktop.BoardManageMainPanel', 'desktop.BoardManageRightPanel','user.UserSetting','resourcepoint.ResourcePoint'],
-    stores:['desktopboard', 'boardmodel','user','resourcepoint','globalparam'],
+    stores:['desktopboard', 'boardmodel','user','resourcepoint','boardparam'],
     init:function(){
     	var me = this;
     },

+ 12 - 0
kanban-console/src/main/webapp/resources/app/store/boardparam.js

@@ -0,0 +1,12 @@
+Ext.define('erp.store.boardparam', {
+    extend: 'Ext.data.Store',
+    fields: ['code', 'inputMode', 'name', 'optionalValues', 'defaultOptionalValueIndex', 'type'],
+    proxy: {
+        type: 'ajax',
+        url: 'globalParameters/get',
+        reader: {
+            type: 'json',
+            root: 'content'
+        }
+    }
+});

+ 0 - 12
kanban-console/src/main/webapp/resources/app/store/desktopboard.js

@@ -8,17 +8,5 @@ Ext.define('erp.store.desktopboard', {
 			type: 'json',
 			root: 'content'
         }
-    },
-    listeners:{
-    	load:function( store, operation, eOpts ){
-    		var dataView = Ext.getCmp('desktopDataView');
-			store.insert(0,{
-				code:'boardsetdiv',
-				name:'看板设置',
-				type:'boardmanage',
-				iconCls:'setting-shortcut'
-			});
-			dataView.resetItemLayout();
-    	}
     }
 });

+ 26 - 6
kanban-console/src/main/webapp/resources/app/view/desktop/BoardManageLeftPanel.js

@@ -22,11 +22,11 @@ Ext.define('erp.view.desktop.BoardManageLeftPanel',{
 		var me = this;
 		me.tbar = [{
 			xtype: 'button',
-			text: '新增板',
+			text: '新增板',
 			handler: function(btn) {
 				var store = me.shortcutsView.getStore();
 				me.shortcutsView.getStore().loadData([{ 
-					name: '新板', 
+					name: '新板', 
 					iconCls: 'grid-shortcut', 
 					code: ''
 				}],true);
@@ -35,7 +35,7 @@ Ext.define('erp.view.desktop.BoardManageLeftPanel',{
 			}
 		},{
 			xtype: 'button',
-			text: '删除板',
+			text: '删除板',
 			handler:function(){
 				me.deleteBoard();
 			}
@@ -68,6 +68,18 @@ Ext.define('erp.view.desktop.BoardManageLeftPanel',{
 						select: function (view, record, eOpts) {
 							var mainpanel = Ext.getCmp('managemain');
 							mainpanel.load(record, me);
+							me.setPanelDisabled(false);
+
+							var managepanel = Ext.getCmp('manage');
+							managepanel.setSelectPanelRecord(record);
+						},
+						deselect: function() {
+							var mainpanel = Ext.getCmp('managemain');
+							mainpanel.reset();
+							me.setPanelDisabled(true);
+
+							var managepanel = Ext.getCmp('manage');
+							managepanel.setSelectPanelRecord(null);
 						}
 					}
 				});
@@ -75,6 +87,12 @@ Ext.define('erp.view.desktop.BoardManageLeftPanel',{
 			});
 		}
 	},
+	setPanelDisabled: function(isDisabled) {
+		var mainpanel = Ext.getCmp('managemain');
+		var rightpanel = Ext.getCmp('manageright');
+		mainpanel.setButtonDisabled(isDisabled);
+		rightpanel.setButtonDisabled(isDisabled);
+	},
     deleteBoard:function(){
     	var me = this;
     	var store = me.shortcutsView.store;
@@ -82,7 +100,7 @@ Ext.define('erp.view.desktop.BoardManageLeftPanel',{
     	var mainpanel = Ext.getCmp('managemain');
  
     	if(record){
-    		Ext.Msg.confirm('提示','是否确定删除该板?',function(btn){
+    		Ext.Msg.confirm('提示','是否确定删除该板?',function(btn){
     			if(btn=='yes'){
     				Ext.Ajax.request({
     					url:'kanban/delete/' + record.get('code'),
@@ -92,15 +110,17 @@ Ext.define('erp.view.desktop.BoardManageLeftPanel',{
     						if(typeof(res.success)!=='undefined'&&res.success==false){
     							Ext.Msg.alert('删除失败',res.message);
     						}else{
-    							Ext.Msg.alert('提示','删除成功!');
 								me.refreshData(me.shortcutsView,store,record);
+
+								me.setPanelDisabled(true);
+								Ext.getCmp('manage').setSelectPanelRecord(null);
     						}
     					}
     				});
     			}
     		});
     	}else{
-    		Ext.Msg.alert('提示','未选中板!');
+    		Ext.Msg.alert('提示','未选中板!');
     	}
     },
     refreshData:function(view,store,record){

+ 178 - 150
kanban-console/src/main/webapp/resources/app/view/desktop/BoardManageMainPanel.js

@@ -4,16 +4,44 @@ Ext.define('erp.view.desktop.BoardManageMainPanel', {
 	id:'managemain',
 	border: 0,
 	hideBorders: true,
-	layout: 'fit',
+	layout: 'border',
+	style: {
+		'border-left': '1px solid silver'
+	},
 	initComponent:function(){
 		var me = this;
 		me.initRecord = null;
+
+        var dataTypeStore = Ext.create('Ext.data.Store', {
+            fields: ['type', 'name'],
+            data: [
+                { "type": "String", "name": "枚举值" },
+                { "type": "SQL", "name": "SQL取数" }
+            ]
+        });
+        var dataTypeCombo = new Ext.form.ComboBox({
+            store: dataTypeStore,
+            valueField: 'type',
+            displayField: 'name',
+            mode: 'local',
+            forceSelection: true,
+            editable: false,
+            triggerAction: 'all',
+            selectOnFocus: true
+        });
 		me.items = [{
 			xtype: 'form',
 			id:'boardSetForm',
+			region: 'north',
+			bodyStyle: {
+				border: 'none'
+			},
+			style: {
+				border: '1px solid silver'
+			},
 			bodyPadding: 10,
 			defaults: {
-				width: 240,
+				width: 300,
                 labelWidth: 80
 			},
 			items: [{
@@ -48,145 +76,163 @@ Ext.define('erp.view.desktop.BoardManageMainPanel', {
 				fieldLabel: '模板字段',
 				name: 'templateCodes',
 				id:'templateCodes',
-				hidden:true
-			},{
-				xtype: 'combobox',
-				fieldLabel: '资源点',
-				id: 'respoint',
-				// store: Ext.data.StoreManager.lookup('resourcepoint'),
-				store: Ext.create('erp.store.resourcepoint',{
-					proxy:{
-						type:'ajax',
-						url:'resourcePoint/get/all',
-						reader: {
-							type: 'json'
+				// hidden:true
+			}]
+		}, {
+			xtype: 'grid',
+			region: 'center',
+			id:'boardParamsGrid',
+			store: Ext.create('Ext.data.JsonStore',{
+				fields: ['code', 'name', 'type', 'optionalValues'],
+				data: []
+			}),
+			autoScroll: true,
+			forceFit: true,
+			columnLines: true,
+			columns: [
+				{ text: 'ID', dataIndex: 'code', hidden: true },
+				{ text: '参数名称', dataIndex: 'name', flex: 1, editor: 'textfield' },
+				{ text: '数据类型', dataIndex: 'type', flex: 1, editor: dataTypeCombo, renderer: function (value, cellmeta, record) {
+					var index = dataTypeStore.find(dataTypeCombo.valueField, value);
+					var ehrRecord = dataTypeStore.getAt(index);
+					var returnvalue = "";
+					if (ehrRecord) {
+						returnvalue = ehrRecord.get('name');
+					}
+					return returnvalue;
+				}
+			},
+				{ text: '值', dataIndex: 'optionalValues', flex: 2, editor: 'textfield' },
+				{ xtype:'actioncolumn', align: 'center', items:[{
+					iconCls: 'save',
+					tooltip: '保存',
+					handler: function(th, rowIndex, colIndex) {
+						var grid =this.up('grid');
+						var rec = grid.getStore().getAt(rowIndex);
+						var data = Object.assign({}, rec.data);
+						if(data.type == 'String') {
+							data.optionalValues = data.optionalValues instanceof Array ? data.optionalValues : data.optionalValues.split(',')
+						}else if(data.type == 'SQL') {
+							data.optionalValues = data.optionalValues instanceof Array ? data.optionalValues : [data.optionalValues]
 						}
+						grid.saveParam(data);
+					}
+				}, '-', {
+					iconCls: 'delete',
+					tooltip: '删除',
+					handler: function(th, rowIndex, colIndex) {
+						var grid =this.up('grid');
+						Ext.Msg.confirm('确认', '确定要删除该参数?', function(btn) {
+							if(btn == 'yes') {
+								var rec = grid.getStore().getAt(rowIndex);
+								grid.deleteParam(rec);
+							}
+						});
+					}
+				}] }
+			],
+			tbar: [{
+				xtype: 'button',
+				// iconCls: 'add',
+				text: '添加参数',
+				disabled: true,
+				handler: function() {
+					var grid =this.up('grid');
+					var record = {
+						name: '新参数',
+						type: 'String',
+						inputMode: 'Radio',
+						optionalValues: ['']
+					};
+					grid.addParam(record);
+				}
+			}],
+			plugins: [
+				Ext.create('Ext.grid.plugin.CellEditing', {
+					clicksToEdit: 2
+				})
+			],
+			addParam: function(record) {
+				var grid = this;
+				var rowIndex = grid.getStore().add(record);
+				grid.getPlugin().startEditByPosition({ row: grid.getStore().getCount() - 1, column: 0 });
+			},
+			saveParam: function(record) {
+				var grid = this;
+				var type;
+				if(record['code']) {
+					type = 'update';
+				}else {
+					type = 'save';
+				}
+				record.inputMode = 'DropDownBox';
+				Ext.Ajax.request({
+					url:'globalParameters/' + type,
+					method:'POST',
+					params:{
+						json:Ext.encode(record)
 					},
-					autoLoad: true
-				}),
-				name: 'resourcePointCode',
-				value: '非资源点看板',
-				displayField: 'name',
-				valueField: 'code',
-				editable: false,
-				listeners: {
-					change: function(th, newValue, oldValue, eOpts) {
-						var formpanel = me.items.items[0];
-						var form = formpanel.getForm();
-						form.findField('templateCodes').setValue('');
-						me.selectTemplateCodes([]);
-						me.switchResourcePoint(th, newValue, oldValue, eOpts);
+					callback:function(options,success,response){
+						var res = JSON.parse(response.responseText);
+						if(success) {
+							if(grid) {
+								grid.getStore().reload();
+							}
+						}else {
+							Ext.Msg.alert('失败', res.message);
+						}
 					}
+				});
+			},
+			deleteParam: function(record) {
+				var grid = this;
+				if(record.get('code')) {
+					Ext.Ajax.request({
+						url:'globalParameters/delete/' + record.get('code'),
+						method:'POST',
+						callback:function(options,success,response){
+							var res = JSON.parse(response.responseText);
+							if(success) {
+								if(grid) {
+									grid.getStore().reload();
+								}
+							}else {
+								Ext.Msg.alert('失败', res.message);
+							}
+						}
+					});
+				}else {
+					grid.getStore().remove(record);
 				}
-			}]
-		}];
-		me.tbar = [{
-			xtype: 'button',
-			text: '保存',
-			handler: function() {
-				me.save(me.items.items[0], me)
 			}
-		}],	
+		}];
 		this.callParent(arguments);
 	},
 	load: function(record, item) {
 		var me = this;
-		var formpanel = this.items.items[0];
+		var formpanel = me.down('form');
 		var form = formpanel.getForm();
+		me.reset();
 		// from添加数据
-		form.reset();
-		var oc = record.get('resourcePointCode');
-		record.set('resourcePointCode', oc ? oc : 'all');
 		form.loadRecord(record);
-		// grid添加数据
-		var gridpanel = formpanel.down('grid');
-		var modelstore = Ext.data.StoreManager.lookup('boardmodel');
-		var codes = record.data.templateCodes || [];
-		var data = codes.map(function(v, i) {
-			var r = modelstore.findRecord('code', v);
-			var name = r ? r.get('name') : '';
-			return {
-				name: name,
-				code: v
-			};
-		});
-		// 设置右侧模板grid选中状态
-		me.selectTemplateCodes(data);
+		// 参数grid添加数据
+		var paramgrid = Ext.getCmp('boardParamsGrid');
+
+		// 看板grid添加数据
+		var boardgrid = Ext.getCmp('tplGrid');
 		
 		this.initRecord = record;
 		this.currentItem = item;
 	},
-	selectTemplateCodes:function(data){
-		var grid = Ext.getCmp('tplGrid');
-		var store = grid.getStore();
-		var records = new Array();
-		Ext.Array.each(store.data.items,function(rec,index){
-			Ext.Array.each(data,function(item){
-				if(rec.get('code')==item.code){
-					records.push(rec);
-				}
-			});
-		});
-		grid.getSelectionModel().select(records);
-	},
-	save: function(formpanel, panel) {
+	reset: function() {
 		var me = this;
-		var el = me.getEl();
-		if(!panel.initRecord) {
-			Ext.Msg.confirm('提示', '请先选择左侧看板')
-			return;
-		}
-		var newRecord = {
-			data: formpanel.getForm().getValues(),
-			getData: function() {
-				return this.data;
-			}
-		};
-		// 保存数据到后台
-		var tplField = Ext.getCmp('templateCodes');
-		var values = formpanel.getForm().getValues();
-		values.templateCodes = tplField.templateCodes;
-		values.respoint = values.respoint == '非资源点看板' ? 'all' :values.respoint;
-		if(!values.templateCodes||values.templateCodes.length<=0){
-			Ext.Msg.alert('提示','请先选择模板!');
-			return;
-		}
-		var type;
-		if(values.code){
-			type = 'update';
-		}else{
-			type = 'save';
-			delete values.code;
-		}
-		values.resourcePointCode = values.resourcePointCode == 'all' ? null : values.resourcePointCode;
-		el.mask('保存中...');
-		Ext.Ajax.request({
-			url:'kanban/'+type,
-			method:'POST',
-			params:{
-				json:Ext.encode(values)
-			},
-			callback:function(options,success,response){
-				el.unmask();
-				var res = Ext.decode(response.responseText);
-				if(typeof(res.success)!=='undefined'&&res.success==false){
-					Ext.Msg.alert('保存失败',res.message);
-				}else{
-					Ext.Msg.alert('提示','保存成功!');
-					Ext.getCmp('code').setValue(res.code);
-					var desktop = Ext.getCmp('desktop');
-					desktop.shortcutsView.store.reload();
-					if(type=='save'){
-						newRecord.data.code = res.code;
-					}
-					panel.initRecord = newRecord;
-					// 更新左侧item
-					var leftpanel = Ext.getCmp('manageleft');
-					leftpanel.updateItem(newRecord);
-				}
-			}
-		});
-
+		var formpanel = me.down('form');
+		var form = formpanel.getForm();
+		form.reset();
+		var paramgrid = Ext.getCmp('boardParamsGrid');
+		paramgrid.getStore().removeAll();
+		var boardgrid = Ext.getCmp('tplGrid');
+		boardgrid.getStore().removeAll();
 	},
 	showIcons: function(me) {
 		var iconbox = Ext.create('Ext.window.Window', {
@@ -235,31 +281,13 @@ Ext.define('erp.view.desktop.BoardManageMainPanel', {
 		form.findField('iconCls').setValue(icon);
 		iconbox.close();
 	},
-	/**
-	 * 切换资源点
-	 */
-	switchResourcePoint: function(th, newValue, oldValue, eOpts) {
-		var store = th.getStore();
-		var record = store.findRecord('code',newValue);
-		var templateCodes = record ? record.get('templateCodes') : [];
-		this.modelFilter(templateCodes);
-	},
-	/**
-	 * 过滤模板列表
-	 */
-	modelFilter: function(data) {
-		var modelGrid = Ext.getCmp('tplGrid');
-		var store = modelGrid.getStore();
-		store.clearFilter();
-		if(data instanceof Array) {
-			if(!data.length){
-				return;
+	setButtonDisabled: function(isDisabled) {
+		var grid = this.down('grid');
+		var buttons = grid.dockedItems.items[1].items.items;
+		Ext.Array.each(buttons,function(btn){
+			if(btn.xtype=='button'&&btn.disabled!=isDisabled){
+				btn.setDisabled(isDisabled);
 			}
-			store.filterBy(function(record, id) {
-				if(data.indexOf(record.get('code')) != -1) {
-					return true;
-				}
-			});
-		}
-	}
+		});
+	},
 });

+ 128 - 20
kanban-console/src/main/webapp/resources/app/view/desktop/BoardManageRightPanel.js

@@ -7,38 +7,97 @@ Ext.define('erp.view.desktop.BoardManageRightPanel',{
 	layout:'fit',
 	autoScroll: true,
 	hideBorders: true, 
+	selectedIndex: 1,
 	initComponent:function(){
 		var me = this;
 		me.items = [{
 			xtype: 'grid',
 			id:'tplGrid',
-			height: 400,
-		    // title: '选择模板',
-		    hideHeaders:true,
-		    store: Ext.data.StoreManager.lookup('boardmodel'),
-		    selModel: Ext.create('Ext.selection.CheckboxModel'),
+			// store: Ext.data.StoreManager.lookup('boardmodel'),
+			selModel: Ext.create('Ext.selection.CheckboxModel'),
+			
+			store : Ext.create('Ext.data.Store', {
+				fields : ['code', 'content', 'dataSourceCode', 'globalParameterCodes','name','parameters','title','description'],
+				autoLoad:true,
+				proxy:{
+					type:'ajax',
+					url:'template/get',
+					reader:{
+						type: 'json',
+						root:'content'
+					}
+				}
+			}),
 		    columnLines:true,
 			columns: [
-				{ text: '选择模板', dataIndex: 'name', width: 150, flex: 1 },
-				{ text: 'ID', dataIndex: 'code', flex: 1, hidden: true },
-				{
-					text: '备注', dataIndex: 'description', flex: 1, renderer: function (v, metadata, record, rowIndex, columnIndex, store) {
+				{ text: 'ID', dataIndex: 'code', hidden: true },
+				{ text: '看板名称', dataIndex: 'name', width: 150, flex: 1, editor: 'textfield' },
+				{ text: '备注', dataIndex: 'description', flex: 1, editor: 'textfield', renderer: function (v, metadata, record, rowIndex, columnIndex, store) {
 						metadata.tdAttr = 'data-qtip="' + v + '"';
 						return v;
 					}
-				}
+				},
+				{ xtype: 'actioncolumn', align: 'center', width: 50, items: [{
+					iconCls: 'edit',
+                    tooltip: '看板配置',
+                    handler: function(grid, rowIndex, colIndex, th, eOpts, record) {
+						var data = JSON.stringify(record.data);
+						data = data.replace('%', '$_^')
+						var code = record.get('code');
+						window.open(basePath+'board?code=' + code,'board');
+					}
+				}] }
+			],
+			tbar: [{
+				xtype: 'button',
+				text: '添加看板',
+				disabled: true,
+				handler: function() {
+					var grid = this.up('grid');
+					var record = {
+						name: '新看板',
+						description: ''
+					}
+					grid.addBoard(record);
+                }
+			}, {
+				xtype: 'button',
+				text: '删除看板',
+				disabled: true,
+				handler: function() {
+					var grid = this.up('grid');
+					var record = grid.getSelectionModel().getSelection()[0];
+					if(record) {
+						grid.deleteBoard(record);
+					}
+                }
+			}],
+			plugins: [
+				Ext.create('Ext.grid.plugin.CellEditing', {
+					clicksToEdit: 2
+				})
 			],
 			listeners: {
-				afterrender:function(grid){
-					grid.store.load();
-				},
 				select:function( e, record, index, eOpts ){
 					var grid = Ext.getCmp('tplGrid');
 					grid.updateTemplateCodes();
+
+					var ctr = this.body.dom.getElementsByTagName('tr')[index];
+					var s = ctr.getElementsByTagName('td')[0].children[0].children[0];
+					var order = me.selectedIndex++;
+					grid.setSelectedIndex(s, order, 'add');
 				},
 				deselect:function( e, record, index, eOpts ){
 					var grid = Ext.getCmp('tplGrid');
 					grid.updateTemplateCodes();
+
+					var ctr = this.body.dom.getElementsByTagName('tr')[index];
+					var s = ctr.getElementsByTagName('td')[0].children[0].children[0];
+					me.selectedIndex--;
+					var order = '';
+					var currentOrder = grid.setSelectedIndex(s, order, 'remove');
+
+					grid.resetSelectedIndex(currentOrder);
 				}
 			},
 			updateTemplateCodes:function(){
@@ -51,15 +110,64 @@ Ext.define('erp.view.desktop.BoardManageRightPanel',{
 				});
 				tplField.setValue(codes.join(','));
 				tplField.templateCodes = codes;
+			},
+			/** 设置选中模板项的顺序 */
+			setSelectedIndex: function(selecter, order, AR) {
+				var oldOrder = selecter.innerText;
+				selecter.innerText = order;
+				selecter.classList[AR]('selectedIndex');
+				return oldOrder;
+			},
+			/** 更新选中项的值 */
+			resetSelectedIndex: function(currentOrder) {
+				var selectedRecords = this.getSelectionModel().getSelection();
+				for(var i = 0; i < selectedRecords.length; i++) {
+					var tr = this.body.dom.getElementsByTagName('tr')[selectedRecords[i].index]; // 选中行tr
+					var sbox = tr.getElementsByTagName('td')[0].children[0].children[0]; // 选中行勾选框
+					if(Number(sbox.innerText) > Number(currentOrder)) {
+						sbox.innerText--;
+					}
+				}
+			},
+			addBoard: function(record) {
+				var grid = this;
+				grid.getStore().add(record);
+			},
+			deleteBoard: function(record) {
+				var grid = this;
+				Ext.Msg.confirm('提示','是否确定删除该看板?',function(btn){
+					if(btn=='yes'){
+						if(record.get('code')) {
+							// Ext.Ajax.request({
+							// 	url:'globalParameters/delete/' + record.get('code'),
+							// 	method:'POST',
+							// 	callback:function(options,success,response){
+							// 		var res = JSON.parse(response.responseText);
+							// 		if(success) {
+							// 			if(grid) {
+							// 				grid.getStore().reload();
+							// 			}
+							// 		}else {
+							// 			Ext.Msg.alert('失败', res.message);
+							// 		}
+							// 	}
+							// });
+						}else {
+							grid.getStore().remove(record);
+						}
+					}
+				});
 			}
 		}];
-		me.tbar = ['->', {
-			xtype: 'button',
-			text: '参数设置',
-			handler: function() {
-				Ext.create('erp.view.desktop.GlobalParamWindow').show(); 	
-			}
-		}],	
 		this.callParent(arguments);
+	},
+	setButtonDisabled: function(isDisabled) {
+		var grid = this.down('grid');
+		var buttons = grid.dockedItems.items[1].items.items;
+		Ext.Array.each(buttons,function(btn){
+			if(btn.xtype=='button'&&btn.disabled!=isDisabled){
+				btn.setDisabled(isDisabled);
+			}
+		});
 	}
 });

+ 93 - 18
kanban-console/src/main/webapp/resources/app/view/desktop/BoardManageWindow.js

@@ -1,28 +1,103 @@
 Ext.define('erp.view.desktop.BoardManageWindow',{
 	extend: 'Ext.window.Window',
 	alias: 'widget.boardmanagewin',
-	width: 800,
+	width: 1000,
 	height: 550,
 	modal: true,
 	layout: 'fit',
 	id: 'manage',
 	record: null,
 	maximizable:true,
-	items: [{
-		xtype: 'panel',
-		layout: 'border',
-		items: [{
-			xtype: 'manageleft',
-			width: 200,
-			region: 'west'
-		},{
-			xtype: 'managemain',
-			region: 'center',
-			width:300
-		},{
-			xtype: 'manageright',
-			region: 'east',
-			flex:1
-		}]
-	}]
+	buttonAlign: 'center',
+	selectedPanelRecord: null,
+	initComponent:function(){
+		var me = this;
+		me.items = [{
+			xtype: 'panel',
+			layout: 'border',
+			items: [{
+				xtype: 'manageleft',
+				width: 200,
+				region: 'west'
+			},{
+				xtype: 'managemain',
+				region: 'center',
+			},{
+				xtype: 'manageright',
+				region: 'east',
+				width:250
+			}]
+		}];
+		me.buttons = [{
+			xtype: 'button',
+			text: '保存',
+			handler: function() {
+				var panel = me.items.items[0].items.items[1];
+				var formpanel = panel.items.items[0];
+				me.save(formpanel, panel)
+			}
+		}],	
+		me.callParent(arguments);
+	},
+	setSelectPanelRecord: function(record) {
+		this.selectedPanelRecord = record;
+	},
+	save: function(formpanel, panel) {
+		var me = this;
+		var el = me.getEl();
+		if(!me.selectedPanelRecord) {
+			Ext.Msg.confirm('提示', '请先选择左侧面板')
+			return;
+		}
+		var newRecord = {
+			data: formpanel.getForm().getValues(),
+			getData: function() {
+				return this.data;
+			}
+		};
+		// 保存数据到后台
+		var tplField = Ext.getCmp('templateCodes');
+		var values = formpanel.getForm().getValues();
+		values.templateCodes = tplField.templateCodes;
+		values.respoint = values.respoint == '非资源点看板' ? 'all' :values.respoint;
+		if(!values.templateCodes||values.templateCodes.length<=0){
+			Ext.Msg.alert('提示','请先选择模板!');
+			return;
+		}
+		var type;
+		if(values.code){
+			type = 'update';
+		}else{
+			type = 'save';
+			delete values.code;
+		}
+		values.resourcePointCode = values.resourcePointCode == 'all' ? null : values.resourcePointCode;
+		el.mask('保存中...');
+		Ext.Ajax.request({
+			url:'kanban/'+type,
+			method:'POST',
+			params:{
+				json:Ext.encode(values)
+			},
+			callback:function(options,success,response){
+				el.unmask();
+				var res = Ext.decode(response.responseText);
+				if(typeof(res.success)!=='undefined'&&res.success==false){
+					Ext.Msg.alert('保存失败',res.message);
+				}else{
+					Ext.Msg.alert('提示','保存成功!');
+					Ext.getCmp('code').setValue(res.code);
+					var desktop = Ext.getCmp('desktop');
+					desktop.shortcutsView.store.reload();
+					if(type=='save'){
+						newRecord.data.code = res.code;
+					}
+					panel.initRecord = newRecord;
+					// 更新左侧item
+					var leftpanel = Ext.getCmp('manageleft');
+					leftpanel.updateItem(newRecord);
+				}
+			}
+		});
+	},
 }); 

+ 81 - 81
kanban-console/src/main/webapp/resources/app/view/desktop/BoardParamWindow.js

@@ -10,10 +10,20 @@ Ext.define('erp.view.desktop.BoardParamWindow',{
 	record:null,
 	respoint: null, // 关联资源点
 	respointStore:null,
-	globalparamStore:null, // 公共参数store
+	paramStore:null, // 参数store
+	selectedIndex: 1,
 	initComponent:function(){
 		var me = this;
-		me.globalparamStore = Ext.data.StoreManager.lookup('globalparam');
+		me.paramStore = Ext.create('erp.store.boardparam',{
+			proxy: {
+				type: 'ajax',
+				url: 'globalParameters/get/' + me.record.get('code'),
+				reader: {
+					type: 'json',
+					root: 'content'
+				}
+			}
+		}).load();
 		me.init();
 		me.callParent(arguments);
 	},
@@ -49,31 +59,31 @@ Ext.define('erp.view.desktop.BoardParamWindow',{
 					if(response.responseText){
 						var res = Ext.decode(response.responseText);
 						me.resData = res;
-						me.respoint = record.get('resourcePointCode') || 'all';
-						me.respointStore = Ext.create('erp.store.resourcepoint',{
-							proxy:{
-								type:'ajax',
-								url:'resourcePoint/get/' + me.respoint,
-								reader: {
-									type: 'json'
-								}
-							},
-							autoLoad: true
-						}).load(function(records, operation, success) {
-							// 删除第一个非资源点看板
-							me.respointStore.removeAt(0);
-							// 显示资源点名称
-							var boardForm = Ext.getCmp('paramsForm');
-							var form = boardForm.getForm();
-							var respointName = form.findField('respointName');
-							if(records.length > 1) {
-								respointName.setValue('非资源点看板');
-							}else{
-								respointName.setValue(records[0].get('name'));
-							}
-						});
-						// var globalItems = me.parseGlobalParam(res.globalParameters);
-						var globalItems = me.parseGlobalParam(me.globalparamStore.data.items.map(function(item) {
+						// me.respoint = record.get('resourcePointCode') || 'all';
+						// me.respointStore = Ext.create('erp.store.resourcepoint',{
+						// 	proxy:{
+						// 		type:'ajax',
+						// 		url:'resourcePoint/get/' + me.respoint,
+						// 		reader: {
+						// 			type: 'json'
+						// 		}
+						// 	},
+						// 	autoLoad: true
+						// }).load(function(records, operation, success) {
+						// 	// 删除第一个非资源点看板
+						// 	me.respointStore.removeAt(0);
+						// 	// 显示资源点名称
+						// 	var boardForm = Ext.getCmp('paramsForm');
+						// 	var form = boardForm.getForm();
+						// 	var respointName = form.findField('respointName');
+						// 	if(records.length > 1) {
+						// 		respointName.setValue('非资源点看板');
+						// 	}else{
+						// 		respointName.setValue(records[0].get('name'));
+						// 	}
+						// });
+						// var globalItems = me.parseParam(res.globalParameters);
+						var globalItems = me.parseParam(me.paramStore.data.items.map(function(item) {
 							return item.data
 						}));
 						var items = me.getConfig(globalItems,templateCode,res);
@@ -85,7 +95,7 @@ Ext.define('erp.view.desktop.BoardParamWindow',{
 			});			
 		}
 	},
-	parseGlobalParam:function(globalParameters){
+	parseParam:function(globalParameters){
 		var me = this;
 		var items = new Array();
 		var item;
@@ -108,10 +118,10 @@ Ext.define('erp.view.desktop.BoardParamWindow',{
 		return items;
 	},
 	getManualField:function(param){
-		var xtype;
+		var xtype = 'textfield';
 		if(param.type=='Number'){
 			xtype = 'numberfield';
-		}else if(param.type=='Number'){
+		}else if(param.type=='Text'){
 			xtype = 'textfield';
 		}else if(param.type=='Date'){
 			xtype = 'datefield';
@@ -173,6 +183,7 @@ Ext.define('erp.view.desktop.BoardParamWindow',{
 			}
 			item.items.push({
 				boxLabel:option,
+				name: code,
 				inputValue:option,
 				checked:check
 			});
@@ -191,18 +202,13 @@ Ext.define('erp.view.desktop.BoardParamWindow',{
 				margin:'5 5 5 5'
 			},
 			items:[{
-				xtype: 'displayfield',
-				fieldLabel: '关联资源点',
-				name: 'respointName',
-				value: 'unknown'
-			},{
 				xtype:'fieldset',
 				title:'参数信息',
 				items:items,
 				hidden:items.length>0?false:true
 			},{
 				xtype:'fieldset',
-				title:'刷新频率',
+				title:'运行配置',
 				layout:'column',
 				defaults:{
 					columnWidth:0.5,
@@ -233,7 +239,16 @@ Ext.define('erp.view.desktop.BoardParamWindow',{
 			region: 'east',
 			width: 300,
 		    hideHeaders:true,
-			store: Ext.data.StoreManager.lookup('boardmodel'),
+			store: Ext.create('erp.store.boardmodel',{
+				proxy:{
+					type:'ajax',
+					url:'template/get' + me.record.get('code'),
+					reader: {
+						type: 'json',
+						root: 'content'
+					}
+				}
+			}).load(),
 			selModel: Ext.create('Ext.selection.CheckboxModel'),
 		    columnLines:true,
 		    columns: [
@@ -249,61 +264,46 @@ Ext.define('erp.view.desktop.BoardParamWindow',{
 			listeners: {
 				afterrender:function(grid){
 					grid.store.load(function() {
-						me.modelStoreFilter();
 						me.selectModel();
 					});
 				},
 				select:function( e, record, index, eOpts ){
-					var globalCode = record.data.globalParameterCodes;
-					me.globalParamsFilter(globalCode, true);
+					var ctr = this.body.dom.getElementsByTagName('tr')[index];
+					var s = ctr.getElementsByTagName('td')[0].children[0].children[0];
+					var order = me.selectedIndex++;
+					grid.setSelectedIndex(s, order, 'add');
 				},
 				deselect:function( e, record, index, eOpts ){
-					var globalCode = record.data.globalParameterCodes;
-					me.globalParamsFilter(globalCode, false);
+					var ctr = this.body.dom.getElementsByTagName('tr')[index];
+					var s = ctr.getElementsByTagName('td')[0].children[0].children[0];
+					me.selectedIndex--;
+					var order = '';
+					var currentOrder = grid.setSelectedIndex(s, order, 'remove');
+					
+					grid.resetSelectedIndex(currentOrder);
+				}
+			},
+			/** 设置选中模板项的顺序 */
+			setSelectedIndex: function(selecter, order, AR) {
+				var oldOrder = selecter.innerText;
+				selecter.innerText = order;
+				selecter.classList[AR]('selectedIndex');
+				return oldOrder;
+			},
+			/** 更新选中项的值 */
+			resetSelectedIndex: function(currentOrder) {
+				var selectedRecords = this.getSelectionModel().getSelection();
+				for(var i = 0; i < selectedRecords.length; i++) {
+					var tr = this.body.dom.getElementsByTagName('tr')[selectedRecords[i].index]; // 选中行tr
+					var sbox = tr.getElementsByTagName('td')[0].children[0].children[0]; // 选中行勾选框
+					if(Number(sbox.innerText) > Number(currentOrder)) {
+						sbox.innerText--;
+					}
 				}
 			}
 		}];
 		return config;
 	},
-	globalParamsFilter: function(globalCode, v) {
-		var paramsForm = Ext.getCmp('paramsForm');
-		var formitems = paramsForm.items.items;
-		var gitems = formitems[1].items.items;
-		Ext.each(gitems, function(gitem) {
-			if(globalCode == '') return;
-			else {
-				if(globalCode.indexOf(gitem.name) != -1) {
-					gitem.setVisible(v);
-				}
-			}
-		});
-	},
-	modelStoreFilter: function() {
-		var me = this;
-		var models = []; // 所有产线的模板code数组
-		var respointData = me.respointStore.data.items;
-		// 如果存在多个产线说明该看板是非资源点看板,不进行过滤
-		if(respointData.length > 1) {
-			me.selectModel();
-			return;
-		}else {
-			// 这里虽然用的是map,其实数组中应该只有一个对象
-			respointData.map(function(respoint) {
-				respoint.get('templateCodes').map(function(modelCode) {
-					models.push(modelCode);
-				});
-			});
-			var modelGrid = Ext.getCmp('modelGrid');
-			var modelStore = modelGrid.getStore();
-			modelStore.filterBy(function(record) {
-				if(models.indexOf(record.get('code')) != -1) {
-					return true;
-				}else{
-					return false;
-				}
-			});
-		}
-	},
 	selectModel: function() {
 		var me = this;
 		var codes = me.record.get('templateCodes');

+ 6 - 11
kanban-console/src/main/webapp/resources/app/view/desktop/Desktop.js

@@ -86,8 +86,10 @@ Ext.define('erp.view.desktop.Desktop', {
             overItemCls: 'x-view-over',
             trackOver: true,
             itemSelector: me.shortcutItemSelector,
-            // store: Ext.data.StoreManager.lookup('desktopboard'),
-            store: Ext.create('erp.store.desktopboard').load(),
+            store: Ext.create('erp.store.desktopboard').load(function() {
+                var dataView = Ext.getCmp('desktopDataView');
+                dataView.resetItemLayout();
+            }),
             style: {
                 position: 'absolute'
             },
@@ -189,13 +191,6 @@ Ext.define('erp.view.desktop.Desktop', {
 
     createTemplateWin:function(record){
     	var me = this;
-    	var type = record.get('type');
-    	var winType = '';
-    	if(type == 'boardmanage') {
-    		winType = 'BoardManage'
-    	}else {
-    		winType = 'BoardParam';
-        }
         // 传入复制对象以去除组件之间相互干扰
         var copyRecord = Object.assign({}, record);
         copyRecord.set = function(field, value) {
@@ -204,8 +199,8 @@ Ext.define('erp.view.desktop.Desktop', {
         copyRecord.get = function(field, value) {
             return this.data[field];
         }
-		Ext.create('erp.view.desktop.' + winType + 'Window',{
-			title:record.get('name'),
+		Ext.create('erp.view.desktop.BoardParamWindow',{
+			title: subStrLength(record.get('name'), 10) + '<span class="separator">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>运行配置',
 			record: copyRecord
 		}).show();    	
     },

+ 182 - 19
kanban-console/src/main/webapp/resources/app/view/desktop/GlobalParamWindow.js

@@ -2,48 +2,211 @@ Ext.define('erp.view.desktop.GlobalParamWindow', {
     extend: 'Ext.window.Window',
     alias: 'widget.globalparamwin',
     id: 'globalparam',
-    width: 500,
-    height: 300,
+    width: 600,
+    height: 400,
     title: '参数设置',
     modal: true,
     layout: 'border',
     initComponent: function () {
         var me = this;
+        var showTypeStore = Ext.create('Ext.data.Store', {
+            fields: ['type', 'name'],
+            data: [
+                { "type": "Radio", "name": "单选框" },
+                { "type": "DropDownBox", "name": "下拉框" },
+                { "type": "Manual", "name": "文本框" }
+            ]
+        });
+        var showTypeCombo = new Ext.form.ComboBox({
+            store: showTypeStore,
+            valueField: 'type',
+            displayField: 'name',
+            mode: 'local',
+            forceSelection: true,
+            editable: false,
+            triggerAction: 'all',
+            selectOnFocus: true,
+            listeners: {
+                change: function(th, newValue, oldValue, eOpts) {
+                    var grid = me.down('grid');
+                    var record = grid.getSelectionModel().getSelection()[0];
+                    record.set('type', '');
+                }
+            }
+        });
+        var dataTypeStore = Ext.create('Ext.data.Store', {
+            fields: ['type', 'name'],
+            data: [
+                { "type": "String", "name": "枚举" },
+                { "type": "SQL", "name": "SQL" },
+                { "type": "Number", "name": "数值" },
+                { "type": "Text", "name": "文本" },
+                { "type": "Date", "name": "日期" }
+            ]
+        });
+        var dataTypeCombo = new Ext.form.ComboBox({
+            store: dataTypeStore,
+            valueField: 'type',
+            displayField: 'name',
+            mode: 'local',
+            forceSelection: true,
+            editable: false,
+            triggerAction: 'all',
+            selectOnFocus: true,
+            listeners: {
+                expand(field, eOpts ) {
+                    var grid = me.down('grid');
+                    var record = grid.getSelectionModel().getSelection()[0];
+                    var data = record.get('inputMode') == 'Manual' ? ["Number", "Text", "Date", ] : ["String", "SQL"];
+                    field.store.filterBy(function(rc, id) {
+                        return data.indexOf(rc.get('type')) != -1
+                    });
+                }
+            }
+        });
         me.items = [{
             xtype: 'grid',
             region: 'center',
             hideHeaders: false,
-            store: Ext.data.StoreManager.lookup('globalparam'),
+            store: Ext.data.StoreManager.lookup('boardparam'),
             autoScroll: true,
+            forceFit: true,
             columnLines: true,
+            sortableColumns: false,
+            enableColumnHide: false,
             columns: [
-                { text: 'ID', dataIndex: 'code', flex: 1, hidden: true },
-                { text: '展示方式', dataIndex: 'inputMode', flex: 1, editor: 'textfield'},
+                { text: 'ID', dataIndex: 'code', hidden: true },
+                { xtype: 'rownumberer' },
+                { text: '展示方式', dataIndex: 'inputMode', flex: 1, editor: showTypeCombo, renderer: function (value, cellmeta, record) {
+                        var index = showTypeStore.find(showTypeCombo.valueField, value);
+                        var ehrRecord = showTypeStore.getAt(index);
+                        var returnvalue = "";
+                        if (ehrRecord) {
+                            returnvalue = ehrRecord.get('name');
+                        }
+                        return returnvalue;
+                    }
+                },
                 { text: '参数名称', dataIndex: 'name', flex: 1, editor: 'textfield' },
-                { text: '数据类型', dataIndex: 'type', flex: 1, editor: 'textfield' },
-                { text: '值', dataIndex: 'optionalValues', flex: 2, editor: 'textfield' }
+                { text: '数据类型', dataIndex: 'type', flex: 1, editor: dataTypeCombo, renderer: function (value, cellmeta, record) {
+                    var index = dataTypeStore.find(dataTypeCombo.valueField, value);
+                    var ehrRecord = dataTypeStore.getAt(index);
+                    var returnvalue = "";
+                    if (ehrRecord) {
+                        returnvalue = ehrRecord.get('name');
+                    }
+                    return returnvalue;
+                }
+            },
+                { text: '值', dataIndex: 'optionalValues', flex: 2, editor: 'textfield' },
+                { xtype:'actioncolumn', align: 'center', items:[{
+                    iconCls: 'save',
+                    tooltip: '保存',
+                    handler: function(grid, rowIndex, colIndex) {
+                        var rec = grid.getStore().getAt(rowIndex);
+                        var data = rec.data;
+                        if(data.inputMode == 'Manual') {
+                            delete data.defaultOptionalValueIndex
+                            delete data.optionalValues
+                        }else {
+                            if(data.type == 'String') {
+                                data.optionalValues = data.optionalValues instanceof Array ? data.optionalValues : data.optionalValues.split(',')
+                            }else if(data.type == 'SQL') {
+                                data.optionalValues = data.optionalValues instanceof Array ? data.optionalValues : [data.optionalValues]
+                            }
+                        }
+                        me.saveParam(data, grid);
+                    }
+                }, '-', {
+                    iconCls: 'delete',
+                    tooltip: '删除',
+                    handler: function(grid, rowIndex, colIndex) {
+                        Ext.Msg.confirm('确认', '确定要删除该参数?', function(btn) {
+                            if(btn == 'yes') {
+                                var rec = grid.getStore().getAt(rowIndex);
+                                me.deleteParam(rec, grid);
+                            }
+                        });
+                    }
+                }] }
             ],
             tbar: [{
                 xtype: 'button',
-                text: '添加'
-            },{
+                iconCls: 'add',
+                text: '添加',
+                handler: function() {
+                    var grid = me.down('grid');
+                    var record = {
+                        name: '新参数',
+                        type: 'String',
+                        inputMode: 'Radio',
+                        optionalValues: ['']
+                    };
+                    me.addParam(record, grid);
+                }
+            }, {
                 xtype: 'button',
-                text: '删除'
+                iconCls: 'refersh',
+                text: '刷新',
+                handler: function() {
+                    this.up('grid').getStore().reload();
+                }
             }],
             plugins: [
                 Ext.create('Ext.grid.plugin.CellEditing', {
                     clicksToEdit: 2
                 })
-            ],
-            listeners: {
-                afterrender: function (grid) {
-                },
-                select: function (e, record, index, eOpts) {
-                },
-                deselect: function (e, record, index, eOpts) {
-                }
-            }
+            ]
         }];
         me.callParent(arguments);
+    },
+    addParam: function(record, grid) {
+        var rowIndex = grid.getStore().add(record);
+        grid.getPlugin().startEditByPosition({ row: grid.getStore().getCount() - 1, column: 1 });
+    },
+    deleteParam: function(record, grid) {
+        if(record.get('code')) {
+            Ext.Ajax.request({
+                url:'globalParameters/delete/' + record.get('code'),
+                method:'POST',
+                callback:function(options,success,response){
+                    var res = JSON.parse(response.responseText);
+                    if(success) {
+                        if(grid) {
+                            grid.getStore().reload();
+                        }
+                    }else {
+                        Ext.Msg.alert('失败', res.message);
+                    }
+                }
+            });
+        }else {
+            grid.getStore().remove(record);
+        }
+    },
+    saveParam: function(record, grid) {
+        var type;
+        if(record['code']) {
+            type = 'update';
+        }else {
+            type = 'save';
+        }
+        Ext.Ajax.request({
+			url:'globalParameters/' + type,
+			method:'POST',
+			params:{
+				json:Ext.encode(record)
+			},
+			callback:function(options,success,response){
+                var res = JSON.parse(response.responseText);
+                if(success) {
+                    if(grid) {
+                        grid.getStore().reload();
+                    }
+                }else {
+                    Ext.Msg.alert('失败', res.message);
+                }
+            }
+        });
     }
 }); 

+ 12 - 0
kanban-console/src/main/webapp/resources/app/view/desktop/StartMenu.js

@@ -57,8 +57,20 @@ Ext.define('erp.view.desktop.StartMenu', {
             	iconCls:'video'
             },
             items: [{
+                text:'配置中心',
+                handler: function() {
+                    Ext.create('erp.view.desktop.BoardManageWindow',{
+                        title: '配置中心',
+                    }).show();
+                }
+            },{
             	text:'模板设置',
             	handler:me.openTemplateSetting
+            },{
+                text: '参数设置',
+                handler: function() {
+                    Ext.create('erp.view.desktop.GlobalParamWindow').show();
+                }
             },{
             	text:'用户设置',
             	handler:function(){

+ 11 - 1
kanban-console/src/main/webapp/resources/app/view/template/templatebuilderpanel.js

@@ -64,5 +64,15 @@ Ext.define('erp.view.template.templatebuilderpanel', {
         var component = me.add(config);		            	
         me.doLayout();
         me.fireEvent('afteraddpanel',me, component);
-	}
+	},
+	setButtonDisabled:function(active){
+		var templateEditPanel = Ext.getCmp('templateeditpanel');
+		var tbar = templateEditPanel.dockedItems.items[0];
+		var btns = tbar.items.items;
+		Ext.Array.each(btns,function(btn){
+			if(btn.xtype=='button'&&btn.disabled!=active){
+				btn.setDisabled(active);
+			}
+		});
+	},
 });

+ 11 - 78
kanban-console/src/main/webapp/resources/app/view/template/templateeditpanel.js

@@ -36,7 +36,7 @@ Ext.define('erp.view.template.templateeditpanel',{
 				disabled:true
 			},{
 				xtype:'button',
-				text:'板设置',
+				text:'板设置',
 				id:'tplSetBtn',
 				handler:me.setTemplateConfig,
 				disabled:true
@@ -89,8 +89,8 @@ Ext.define('erp.view.template.templateeditpanel',{
 	},
 	editPanelRepaint:function(){
 		var me = this;
-		var templateList = Ext.getCmp('templatetree');
-		var record = templateList.getSelectionModel().getSelection()[0];
+		var templatebuilderpanel = Ext.getCmp('templatebuilderpanel');
+		var record = templatebuilderpanel.modelRecord;
 		if(!record){
 			Ext.Msg.alert('提示','请先选择模板!')
 		}else{
@@ -103,7 +103,7 @@ Ext.define('erp.view.template.templateeditpanel',{
 					return;
 				}
 				record.set('content',xml);
-				templateList.fireEvent('repaintcomponent',templateList,record);		
+				templatebuilderpanel.fireEvent('repaintcomponent',templatebuilderpanel,record);		
 				Ext.getCmp('importWin').close();
 			}
 		}		
@@ -155,14 +155,13 @@ Ext.define('erp.view.template.templateeditpanel',{
 		}).show();
 	},
 	setTemplateConfig:function(){
-		var record = Ext.getCmp('templatetree').getSelectionModel().getSelection()[0];
+		var templatebuilderpanel = Ext.getCmp('templatebuilderpanel');
+		var record = templatebuilderpanel.modelRecord;
 		var me = Ext.getCmp('templateeditpanel');
-		var globalParams = me.getGlobalParams();
-		var radios = me.parseGlobalParamToRadio(globalParams,record.get('globalParameterCodes'));
 		var win = record.win;
 		if(!win){
 			win = Ext.create('Ext.window.Window',{
-				title:'板设置',
+				title:'板设置',
 				width:580,
 				height:500,
 				modal:true,
@@ -180,7 +179,7 @@ Ext.define('erp.view.template.templateeditpanel',{
 						xtype:'textarea',
 						fieldLabel:'标题',
 						columnWidth:1,
-						height:80,
+						height:200,
 						name:'title',
 						value:record.get('title'),
 						listeners:{
@@ -220,36 +219,12 @@ Ext.define('erp.view.template.templateeditpanel',{
 					    queryMode: 'local',
 					    displayField: 'name',
 					    valueField: 'code'
-			        },{
-						xtype:'fieldset',
-						title:'公共参数',
-						columnWidth:1,
-				        collapsible: true,
-				        layout:'column',
-				        defaults:{
-				        	margin:'5 5 5 5',
-				        	columnWidth:0.5,
-				        	labelWidth:130
-				        },
-				        items:[{
-				        	xtype:'checkboxgroup',
-				        	columnWidth:1,
-				        	layout:'column',
-				        	defaults:{
-				        		columnWidth:0.33
-				        	},
-				        	name:'globalParameterCodes',
-				        	items:radios,
-				        	vertical: false
-				        }]
-				        
-					}],
+			        }],
 					buttons:[{
 						text:'确定',
 						handler:function(btn){
 							var form = Ext.getCmp('tplSetForm');
 							var values = form.getForm().getValues();
-							var me = Ext.getCmp('templateeditpanel');
 							me.saveAsXml(values);
 						}
 					},{
@@ -265,45 +240,6 @@ Ext.define('erp.view.template.templateeditpanel',{
 		}
 		win.show();
 	},
-	getGlobalParams:function(){
-		var items = new Array();
-		Ext.Ajax.request({
-			url:'globalParameters/get',
-			method:'get',
-			async:false,
-			callback:function(options,success,response){
-				var res = Ext.decode(response.responseText);
-				Ext.Array.each(res.content,function(param){
-					var item = new Object();
-					item.code = param.code;
-					item.name = param.name;
-					items.push(item);
-				});
-			}
-		});
-		return items;
-
-	},
-	parseGlobalParamToRadio:function(globalParameters,globalParameterCodes){
-		var me = this;
-		var items = new Array();
-		var item;
-		Ext.Array.each(globalParameters,function(param){
-			item = new Object();
-			item.boxLabel = param.name;
-			item.name = 'globalParameterCodes';
-			item.inputValue = param.code;
-			items.push(item);
-			if(globalParameterCodes&&globalParameterCodes.length>0){
-				Ext.Array.each(globalParameterCodes,function(code){
-					if(param.code==code){
-						item.checked = true;
-					}
-				});
-			}
-		});
-		return items;
-	},
 	saveAsXml:function(extraParams){
 		var me = this;
 		var builderPanel = Ext.getCmp('templatebuilderpanel');
@@ -324,8 +260,8 @@ Ext.define('erp.view.template.templateeditpanel',{
 		return content;
 	},
 	save:function(content,extraParams){
-		var templateTree = Ext.getCmp('templatetree');
-		var record = templateTree.getSelectionModel().getSelection()[0];
+		var templatebuilderpanel = Ext.getCmp('templatebuilderpanel');
+		var record = templatebuilderpanel.modelRecord;
 		var templateCode = record.get('code');
 		var json = {
         	content:content
@@ -366,9 +302,6 @@ Ext.define('erp.view.template.templateeditpanel',{
 			}
 		});
 	},
-	myFn:function(data){
-		console.log(data);
-	},
 	clear:function(){
 		var builderPanel = Ext.getCmp('templatebuilderpanel');
 		builderPanel.removeAll();

+ 5 - 23
kanban-console/src/main/webapp/resources/app/view/template/templatetree.js

@@ -5,35 +5,17 @@ Ext.define('erp.view.template.templatetree',{
 	layout: 'fit',
 	border: 0,
 	hideBorders: true, 
-	title: '模板目录',
+	title: '面板参数',
 	collapsible:true,
 	plugins:[Ext.create('erp.view.plugin.tplgridcontextmenu')],
-	store : Ext.create('Ext.data.Store', {
-		fields : ['code', 'content', 'dataSourceCode', 'globalParameterCodes','name','parameters','title','description'],
-		autoLoad:true,
-		proxy:{
-			type:'ajax',
-			url:'template/get',
-			reader:{
-				type: 'json',
-				root:'content'
-			}
-		}
+	store: Ext.create('Ext.data.JsonStore',{
+		fields: ['code', 'name'],
+		data: [{code: 1243, name: 33}]
 	}),
 	hideHeaders: true,
 	columns:[{
 		header:'名称',
 		dataIndex:'name',
 		flex:1
-	}],
-	setButtonDisabled:function(active){
-  	 	var templateEditPanel = Ext.getCmp('templateeditpanel');
-  	 	var tbar = templateEditPanel.dockedItems.items[0];
-  	 	var btns = tbar.items.items;
-  	 	Ext.Array.each(btns,function(btn){
-  	 		if(btn.xtype=='button'&&btn.disabled!=active){
-  	 			btn.setDisabled(active);
-  	 		}
-  	 	});
-  	 }
+	}]
 });

+ 1 - 0
kanban-console/src/main/webapp/resources/app/view/template/viewport.js

@@ -1,6 +1,7 @@
 Ext.define('erp.view.template.viewport',{ 
 	extend: 'Ext.Viewport', 
 	layout: 'border',
+	alias:'widget.boardset',
 	title:'viewport',
 	border: 0,
 	hideBorders: true, 

+ 14 - 14
kanban-console/src/main/webapp/resources/app/view/user/UserSetting.js

@@ -71,20 +71,20 @@ Ext.define('erp.view.user.UserSetting',{
 					grid.store.load();
 				},
 				select:function(grid, record, index, eOpts ){				
-					var resourcePointGrid = Ext.getCmp('resourcePointGrid');
+					var userboardgrid = Ext.getCmp('userboardgrid');
 					var selRec = new Array();
 					var resourcePoints = record.get('resourcePointCodes');
 					Ext.Array.each(resourcePoints,function(point){
-						Ext.Array.each(resourcePointGrid.store.data.items,function(item){
+						Ext.Array.each(userboardgrid.store.data.items,function(item){
 							if(point==item.get('code')){
 								selRec.push(item);
 							}
 						});					
 					});
 					if(record.get('role')=='Admin'){
-						resourcePointGrid.getSelectionModel().selectAll(); //管理员默认全勾选
+						userboardgrid.getSelectionModel().selectAll(); //管理员默认全勾选
 					}else{
-						resourcePointGrid.getSelectionModel().select(selRec);
+						userboardgrid.getSelectionModel().select(selRec);
 					}
 				}
 			},
@@ -106,7 +106,7 @@ Ext.define('erp.view.user.UserSetting',{
 			}]
 		},{
 			xtype:'grid',
-			id:'resourcePointGrid',
+			id:'userboardgrid',
 			region:'east',
 			flex:1,
 			columns:[{
@@ -120,11 +120,11 @@ Ext.define('erp.view.user.UserSetting',{
 			}],
 			tbar:[{
 				xtype:'tbtext',
-				text:'<span style="font-size:13px;font-weight:bold">资源点</font>',
+				text:'<span style="font-size:13px;font-weight:bold">面板</font>',
 				height:24,
 				style:'line-height:24px'
 			}],
-			store:Ext.data.StoreManager.lookup('resourcepoint'),
+			store:Ext.data.StoreManager.lookup('desktopboard'),
 			selModel: Ext.create('Ext.selection.CheckboxModel'),
 			listeners:{
 				afterrender:function(grid){
@@ -165,7 +165,7 @@ Ext.define('erp.view.user.UserSetting',{
 		var me = this;
 		var grid = me.getGrid();
 		var record = grid.getSelectionModel().getSelection()[0];
-		var resourcePointGrid = Ext.getCmp('resourcePointGrid');
+		var userboardgrid = Ext.getCmp('userboardgrid');
 		if(record.get('code')){
 			Ext.Msg.confirm('提示','是否确定删除该用户',function(btn){
 				if(btn=='yes'){
@@ -182,7 +182,7 @@ Ext.define('erp.view.user.UserSetting',{
 							}else{
 								Ext.Msg.alert('提示','删除成功!');
 								grid.store.reload();
-								resourcePointGrid.getSelectionModel().deselectAll();
+								userboardgrid.getSelectionModel().deselectAll();
 							}
 						}
 					});
@@ -195,11 +195,11 @@ Ext.define('erp.view.user.UserSetting',{
 	save:function(){
 		var me = this;
 		var grid = me.getGrid();
-		var resourcePointGrid = Ext.getCmp('resourcePointGrid');
+		var userboardgrid = Ext.getCmp('userboardgrid');
 		var record = grid.getSelectionModel().getSelection()[0];
 		if(record){
 			var values = record.data;
-			values.resourcePointCodes = me.getSelectPoints(resourcePointGrid);
+			values.resourcePointCodes = me.getSelectPoints(userboardgrid);
 			var type;
 			if(!record.get('code')){
 				type = 'savePart';
@@ -232,7 +232,7 @@ Ext.define('erp.view.user.UserSetting',{
 						}else{
 							code = res.code;
 						}
-						resourcePointGrid.getSelectionModel().deselectAll();
+						userboardgrid.getSelectionModel().deselectAll();
 						Ext.defer(function(){
 							me.reSelect(grid,code);
 						},300);
@@ -256,9 +256,9 @@ Ext.define('erp.view.user.UserSetting',{
 	getGrid:function(){
 		return Ext.getCmp('userSettingGrid');
 	},
-	getSelectPoints:function(resourcePointGrid){
+	getSelectPoints:function(userboardgrid){
 		var sel = new Array();
-		var selPoints = resourcePointGrid.getSelectionModel().getSelection();
+		var selPoints = userboardgrid.getSelectionModel().getSelection();
 		Ext.Array.each(selPoints,function(point){
 			sel.push(point.get('code'));
 		});

+ 26 - 1
kanban-console/src/main/webapp/resources/css/desktop.css

@@ -282,7 +282,13 @@ div.ux-taskbar div.x-toolbar {
     background-image:url(../images/icons/fam/delete.gif) !important;
 }
 .save {
-    background-image:url(../images/icons/save.gif) !important;
+    background-image:url(../images/icons/save16x16.png) !important;
+}
+.delete {
+    background-image:url(../images/icons/delete16x16.png) !important;
+}
+.refersh {
+    background-image:url(../images/icons/refresh16x16.png) !important;
 }
 .accordion {
     background-image:url(../images/accordian.gif) !important;
@@ -290,6 +296,13 @@ div.ux-taskbar div.x-toolbar {
 .tabs {
     background-image:url(../images/tabs.gif) !important;
 }
+.edit {
+    background-image:url(../images/icons/fam/page_white_edit.png) !important;
+}
+.separator {
+    background-image:url(../images/icons/separator.png) !important;
+    background-repeat: no-repeat;
+}
 
 /*----------------------------------------------------
     IM window icons
@@ -400,3 +413,15 @@ div.ux-taskbar div.x-toolbar {
 	border-color:#c1bfc1
 }
 
+/*----------------------------------------------------
+    boardModel GridSelecter
+*/
+
+.selectedIndex {
+    text-align: center;
+    color: red;
+    font-style: italic;
+    font-size: x-large;
+    background-position: 0 0 !important;
+}
+

BIN
kanban-console/src/main/webapp/resources/images/icons/delete16x16.png


BIN
kanban-console/src/main/webapp/resources/images/icons/refresh16x16.png


BIN
kanban-console/src/main/webapp/resources/images/icons/save16x16.png


BIN
kanban-console/src/main/webapp/resources/images/icons/separator.png


+ 17 - 0
kanban-console/src/main/webapp/resources/js/util/utils.js

@@ -85,4 +85,21 @@ function hideLoading(spinner) {
 		spinner.stop();
 	}
 	return null;
+}
+
+/**
+ * 截取长文本
+ * 
+ * @param {string} str 需要截取的文本
+ * @param {int} length 限制长度
+ * @param {string} suf 后缀
+ * 
+ * @returns 处理之后的字符串
+ */
+function subStrLength(str, length, suf) {
+	if(str.length > length) {
+		return str.substr(0, length) + suf || '...';
+	}else {
+		return str;
+	}
 }