jsp页面如下:materialsDetail.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ include file="/WEB-INF/views/commons/taglibs.jsp"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<script type="text/javascript" src="${ctx}/resources/loader/yepnope.min.js"></script>
<script type="text/javascript">
var businessId = "${businessId}";
var recordId = "${recordId}";
pagesize=eval('(${fields.pagesize==null?"{}":fields.pagesize})');
yepnope({
load:[
"${ctx}/resources/extjs/resources/css/ext-all.css",
// "${ctx}/resources/extjs/resources/css/yourtheme.css",
"${ctx}/resources/css/gridStyle.css",
"${ctx}/resources/extjs/adapter/ext/ext-base.js",
"${ctx}/resources/extjs/ext-all.js",
"${ctx}/resources/extjs/ext-lang-zh_CN.js",
"${ctx}/resources/extjs/ux/TabCloseMenu.js",
"${ctx}/resources/extjs/ux/Portal.js",
"${ctx}/resources/extjs/ux/SearchField.js",
"${ctx}/resources/extjs/ux/ProgressBarPager.js",
//通用
"${ctx}/resources/js/Ext.ux.override.js",
"${ctx}/resources/js/share.js",
"${ctx}/resources/js/shareux.js",
'${ctx}/plugins/project/web/resources/js/materials/MaterialsGridPanel.js',
'${ctx}/plugins/project/web/resources/js/materials/MaterialsFormWin.js'
],
complete:function(){
ctx = "${ctx}";
Ext.QuickTips.init();//支持tips提示非空
var meteriaGrid = new Ext.materials.MaterialsGridPanel({
taskId:'${param.taskId}',
parentInstanceId:'${parentInstanceId}',
nodeId:'${param.nodeId}',
isWrite:'${isWrite}',
zjl:'${zjl}',
fz:'${fz}',
parentTaskId:'${parentTaskId}',
isReadPrice:'${isReadPrice}',
isWritePrice:'${isWritePrice}',
projectId:'${projectId}'
});
new Ext.Viewport({
layout : 'fit',
items : [meteriaGrid]
});
}
});
</script>
</head>
<body>
</body>
</html>
GridPanel如下:
Ext.ns("Ext.materials");
Ext.materials.MaterialsGridPanel = Ext.extend(Ext.grid.GridPanel, {
projectId:null,
type:null,
parentInstanceId:null,
taskId:null,
nodeId:null,
isWrite:null,
zjl:null,
fz:null,
parentTaskId:null,
isReadPrice:null,
isWritePrice:null,
feeType:null,
constructor : function(_config) {
Ext.apply(this, _config || {});
this.pageSize = 20;
this.Url = {
all : ctx + '/projectMaterials/queryListForPage',// 加载所有
insertUrl : ctx + '/projectMaterials/insert',
updateUrl : ctx + '/projectMaterials/update',
deleteUrl : ctx + '/projectMaterials/delete',
getSumTotol: ctx + '/projectMaterials/getSumTotol' //获取总计一行数据
};
/** 顶部工具栏 */
if(this.isWrite==1&&this.isWritePrice==1){
this.toolbar = new Ext.Toolbar({
items:[new Ext.Action({
text : '新增',
iconCls : 'query',
scope:this,
handler : this.showAddWindow
}),new Ext.Action({
text : '修改',
iconCls : 'query',
scope:this,
handler : this.showEditWindow
}),new Ext.Action({
text : '删除',
iconCls : 'query',
scope:this,
handler : this.deleteData
})]
});
}else{
this.toolbar = new Ext.Toolbar({});
}
/** 基本信息-数据源 */
this.store = new Ext.data.Store({
remoteSort : true,
baseParams : {
start : 0,
limit : this.pageSize,
projectId:this.projectId,
feeType:this.feeType,
processInstanceId : this.parentInstanceId,
billId:recordId,
taskId:this.taskId
},
proxy : new Ext.data.HttpProxy({// 获取数据的方式
method : 'POST',
url : this.Url.all
}),
reader : new Ext.data.JsonReader({// 数据读取器
totalProperty : 'results', // 记录总数
root : 'rows' // Json中的列表数据根节点
}, ['id', 'billId', 'nameSpec','unit','amount','price','remark','alias','materialType']),
listeners:{
//增加统计一行
load:this.totalFunction,
scope : this
}
});
/** 基本信息-选择模式 */
this.selModel = new Ext.grid.CheckboxSelectionModel({
singleSelect : false
});
/** 基本信息-数据列 */
this.colModel = new Ext.grid.ColumnModel({
columns : [this.selModel, {
header:'ID',
dataIndex:'id',
hidden:true
},{
header:'提料单号',
dataIndex:'billId',
hidden:true
},{
header : '名称及规格',
dataIndex : 'nameSpec'
},{
header : '类型',
dataIndex : 'materialType',
renderer:function(value){
if(value==1){
return "材料";
}
if(value==2){
return "工具"
}
return value;
}
},{
header : '别名',
dataIndex : 'alias'
},{
header : '单位',
dataIndex : 'unit'
}, {
header:'数量',
dataIndex:'amount'
},{
header:'单价',
dataIndex:'price'
},{
header:'总价',
dataIndex:'totalPrice',
renderer:function(value,meta,record){
if(record.data.id){
value = record.data.price*record.data.amount;
}
return value;
}
},{
header : '备注',
dataIndex : 'remark',
300
}]
});
/**
this.searchField = new Ext.ux.form.SearchField( {
store : this.store,
paramName : 'processInstanceName',
emptyText : '请输入工作名称',
style : 'margin-left:5px;'
});
this.tbar.add(this.searchField);
*/
/** 底部工具条 */
this.bbar = new Ext.PagingToolbar({
pageSize : this.pageSize,
store : this.store,
displayInfo : true
});
Ext.materials.MaterialsGridPanel.superclass.constructor.call(this, {
store : this.store,
colModel : this.colModel,
selModel : this.selModel,
bbar : this.bbar,
tbar : this.toolbar,
autoScroll : 'auto',
region : 'center',
loadMask : true,
stripeRows : true
});
this.store.load();
},
/** 添加组件 */
showAddWindow : function() {
if (!this.addWindow) {
this.addWindow = new Ext.materials.MaterialsFormWin({
store : this.store,
saveUrl : this.Url.insertUrl
});
}
this.addWindow.reset();
this.addWindow.show();
},
/** 修改组件 */
showEditWindow : function() {
var records = this.getSelectionModel().getSelections();
if (records.length==0) {
Ext.MessageBox.show({
title : '警告',
icon : Ext.MessageBox.WARNING,
buttons : Ext.MessageBox.OK,
msg : '请选择要修改的记录'
});
return false;
}else if(records.length!=1){
Ext.MessageBox.show({
title : '警告',
icon : Ext.MessageBox.WARNING,
buttons : Ext.MessageBox.OK,
msg : '一次只能修改一条记录'
});
return false;
}else if(!records[0].data.id){
Ext.MessageBox.show({
title : '警告',
icon : Ext.MessageBox.WARNING,
buttons : Ext.MessageBox.OK,
msg : '总计一行是不可以修改的'
});
return false;
}
if (!this.editWindow) {
this.editWindow = new Ext.materials.MaterialsFormWin({
store : this.store,
saveUrl : this.Url.updateUrl
});
}
this.editWindow.reset();
this.editWindow.show();
this.editWindow.loadRecord(records[0]);
},
/** 删除信息 */
deleteData : function() {
/** 选中的记录 */
var records = this.getSelectionModel().getSelections();
if (records.length==0) {
Ext.MessageBox.show({
title : '警告',
icon : Ext.MessageBox.WARNING,
buttons : Ext.MessageBox.OK,
msg : '请选择要删除的记录'
});
return false;
}
var ids = [];
for (var i = 0; i < records.length; i++) {
ids[i]=records[i].data.id;
if(!records[i].data.id){
Ext.MessageBox.show({
title : '警告',
icon : Ext.MessageBox.WARNING,
buttons : Ext.MessageBox.OK,
msg : '总计一行是不可以删除的'
});
return false;
}
}
Ext.MessageBox.confirm('提示', '你确定要删除选中的记录吗?', function(btn) {
if (btn == 'yes') {
Ext.Ajax.request({
url : this.Url.deleteUrl,
params : {
ids : ids
},
success : function(response, options) {
var text = Ext
.decode(response.responseText);
Ext.Msg.alert('提示', text.msg,function(){
this.store.reload();
},this);
},
failure : function() {
Ext.MessageBox.alert('提示', '请求失败!');
},
scope : this
});
}
}, this);
},
//增加统计一行
totalFunction:function(){
if(this.store.getTotalCount()!=0){
Ext.Ajax.request({
url : this.Url.getSumTotol,
method : 'post',
params : {
billId:recordId
},
success : function(response, options) {
var data = Ext.decode(response.responseText).msg;
if(data!=null){
var record =new Ext.data.Record({id:'',billId:'',nameSpec:'',materialType:'总计:',alias:'',unit:'',amount:'',price:'',totalPrice:data.price,remark:''});
this.store.insert(this.store.getCount(),record);
}
},
scope : this
});
}
}
});
winForm如下:
Ext.ns('Ext.materials');
Ext.materials.MaterialsFormWin = Ext.extend(Ext.Window, {
saveUrl : null,
store:null,
constructor : function(config) {
Ext.apply(this, config || {});
/** 基本信息-详细信息的form */
this.formPanel = new Ext.form.FormPanel({
frame : false,
bodyStyle : 'padding:10px;border:0px',
labelwidth : 70,
defaultType : 'textfield',
defaults:{
anchor : '99%'
},
items : [{
xtype : 'hidden',
fieldLabel : 'ID',
name : 'id'
}, {
fieldLabel : '名称及规格',
allowBlank : false,
name : 'nameSpec',
blankText:'名称及规格是必填的'
}, {
fieldLabel : '类型',
name : 'materialType',
hiddenName:'materialType',
xtype:'combo',
triggerAction:'all',
allowBlank : false,
mode:'local',
store:new Ext.data.ArrayStore({
fields:['value','text'],
data:[
['1','材料'],
['2','工具']
]
}),
displayField:'text',
valueField:'value',
blankText:'类型是必填的',
editable:false
}, {
fieldLabel : '别名',
name : 'alias'
},{
fieldLabel:'单位',
allowBlank : false,
blankText:'单位是必填的',
name:'unit'
},{
xtype:'numberfield',
name:'amount',
fieldLabel:'数量',
allowNegative:false,
allowBlank : false,
decimalPrecision:0,
blankText:'数量是必填的',
nanText:'请输入有效数字'
},{
xtype:'numberfield',
name:'price',
fieldLabel:'单价',
allowNegative:false,
decimalPrecision:2,
allowBlank : false,
blankText:'单价是必填的',
nanText:'请输入有效数字'
},{
xtype : 'textarea',
fieldLabel : '备注',
maxLength : 128,
height : 100,
name : 'remark',
anchor : '99%'
}]
});
Ext.materials.MaterialsFormWin.superclass.constructor.call(this, {
layout : 'fit',
width : 500,
height : 350,
title : '无项目材料采购',
closeAction : 'hide',
plain : true,
modal : true,
resizable : true,
items : [this.formPanel],
buttons : [{
text : '保存',
iconCls:'disk',
handler : this.saveFun,
scope : this
}, {
text : '关闭',
iconCls:'cancel',
handler : function() {
var form = this.formPanel.getForm();
var id = form.findField("id")
.getValue();
form.reset();
if (id != '')
form.findField("id")
.setValue(id);
}
}]
});
},
saveFun : function() {
var form = this.formPanel.getForm();
if (!form.isValid()) {
return;
}
// 发送请求
this.formPanel.getForm().submit({
url : this.saveUrl,
method:'post',
params:{
billId:recordId
},
success : function(form,action) {
Ext.MessageBox.alert('提示',action.result.msg,function(){
this.store.reload();
this.hide();
},this);
},
failure : function(form, action) {
Ext.MessageBox.alert('提示', '请求失败!');
newTab.close();
waitMask.hide();
},
scope:this
});
},
reset:function(){
this.formPanel.getForm().reset();
},
loadRecord:function(record){
this.formPanel.getForm().loadRecord(record);
}
});