ExtJS EditorGridPanel 控制每一个单元格是否可以编辑

来源:互联网 发布:卡尔曼滤波算法库 编辑:程序博客网 时间:2024/06/04 18:15


//loginUser 为当前登录人 

//loginUser = '6651';
Ext.onReady(function() {
Ext.QuickTips.init();
//空或零 返回 true
function isNullORZero(value){
return (value == 0 || value == '')?true:false;
}
//将输入分数保存为只有两位小数
function checkFloat(v) {
var rg = /^\d+(\.\d{1,2})?$/;
var value = v;
if ((Number(value) == 0)) {
return formaFloat(value);
} else if (!rg.test(value)) {
value = Math.round(value * Math.pow(10, 2)) / Math.pow(10, 2);
}
return value;
}
// 自动格式化为float类型数据
function formaFloat(s) {
if (/[^0-9\.]/.test(s))
return "0.0";
if (/^[0-9]+$/.test(s))
s += '.';
if (/^[0-9]+\.$/.test(s))
s = s + '0';
if (/^\.[0-9]/.test(s))
s = '0' + s;
return s;
}
var ajaxMask = new Ext.LoadMask(Ext.get('mainfrom'), {
msg : "数据发送中,请稍后..."
});


/*
* 当前打分领导            stepCode                打分                     当前登录人                   
* A             ManAuditEval1           score2           A                
* B             ManAuditEval2           score3           B
* C             ManAuditEval3           score4           C
* D             ManAuditEval4           score            D

* 满足以上条件才能选中
*/
function onRowSelected(o, rowIndex, r) {
var score;
switch(r.get('stepCode')){
case 'ManAuditEval1' : score = r.get('score2'); break;
case 'ManAuditEval2' : score = r.get('score3'); break;
case 'ManAuditEval3' : score = r.get('score4'); break;
default : score = r.get('score');
}
if(r.get('currentUser') != loginUser || isNullORZero(score)){
o.deselectRow(rowIndex);
}
};


function onRowDeSelected(o, rowIndex, r) {
};


var sm = new Ext.grid.CheckboxSelectionModel({
handleMouseDown : Ext.emptyFn,
listeners : {
"rowselect" : onRowSelected,
"rowdeselect" : onRowDeSelected
}
});


var jsonData = {"totalProperty":4,"dataList":[
            {"auditEmpNumber":"48210127","empId":"6528","position":"蜀汉昭烈帝","status":"",
                "score4":"0.0","score3":"0.0","score2":"0.0","score1":"98.0","score":"0.0","stepCode":"ManAuditEval1",
                "empNumber":"48210037","selfScore":"98.0","caseId":"414053","prevAudit":"6651","empName":"刘备","currentUser":"6651"}
                
           ,{"auditEmpNumber":"48210127","empId":"6645","position":"东汉丞相","status":"未确认",
"score4":"0.0","score3":"0.0","score2":"97.0","score1":"98.0","score":"0.0","stepCode":"ManAuditEval2",
"empNumber":"48210121","selfScore":"98.0","caseId":"414078","prevAudit":"6651","empName":"曹操","currentUser":"6651"}

,{"auditEmpNumber":"48210127","empId":"6670","position":"东吴太祖大皇帝","status":"未确认",
"score4":"96.0","score3":"91.0","score2":"94.0","score1":"97.0","score":"0.0","stepCode":"ManAuditEval4",
"empNumber":"48210146","selfScore":"97.0","caseId":"414030","prevAudit":"6651","empName":"孙权","currentUser":"6652"}

,{"auditEmpNumber":"48210127","empId":"8072","position":"曹魏高祖文皇帝","status":"",
"score4":"92.0","score2":"96.0","score1":"95.0","score":"0.0","score3":"90.0","stepCode":"ManAuditEval4",
"empNumber":"48520003","selfScore":"95.0","caseId":"414060","prevAudit":"6651","empName":"曹丕","currentUser":"6651"}]
};
var cm = new Ext.grid.ColumnModel([sm, {
header : 'empId',
dataIndex : 'empId',
hidden : true
}, {

header : 'caseId',
dataIndex : 'caseId',
hidden : true
}, {
header : 'stepCode',
dataIndex : 'stepCode',
hidden : true
}, {
header : '员工编号',
dataIndex : 'empNumber'
}, {
header : '员工姓名',
dataIndex : 'empName',
sortable : true
}, {
header : '员工职位',
dataIndex : 'position',
sortable : true,
width : 180
}, {
id : 'selfScore',
header : '员工自评分',
dataIndex : 'selfScore',
renderer : function(v, c, r, ri, ci, str) {
return checkFloat(v);
}
//多个领导打分,并展示结果 
/*
* 当前打分领导            stepCode                打分                     当前登录人                   
* A             ManAuditEval1           score2           A                
* B             ManAuditEval2           score3           B
* C             ManAuditEval3           score4           C
* D最终                        ManAuditEval4           score            D

* 满足以上条件才能打分
*/
}, {
id : 'score2',
dataIndex : 'score2',
header : '领导打分一',
editable : false,
editor : new Ext.form.TextField({
allowBlank : false,
name : 'score1',
regex : /^(?:\d?\d(\.\d{1,2})?|100|0.0|100.0|0.00|100.00)$/,
regexText : '请输入0~100的数字!'
}),
renderer : function(v, m, r, ri, ci, str) {
var isUser = r.get('currentUser') != loginUser;
if(r.get('stepCode') == 'ManAuditEval1'){
cm.setEditable(ci,true);
if(isUser){
m.css += "x-item-disabled";
}
} else {
m.css += " x-item-disabled";
}
return checkFloat(v);
},
hidden : false
}, {
id : 'score3',
dataIndex : 'score3',
header : '领导打分二',
editable : false,
editor : new Ext.form.TextField({
allowBlank : false,
name : 'score3',
regex : /^(?:\d?\d(\.\d{1,2})?|100|0.0|100.0|0.00|100.00)$/,
regexText : '请输入0~100的数字!'
}),
renderer : function(v, m, r, ri, ci, str) {
var isUser = r.get('currentUser') != loginUser;
if(r.get('stepCode') == 'ManAuditEval2'){
cm.setEditable(ci,true);
if(isUser){
m.css += "x-item-disabled";
}
} else {
m.css += "x-item-disabled";
}
return checkFloat(v);
},
hidden : false
}, {
id : 'score4',
dataIndex : 'score4',
header : '领导打分三',
editable : false,
editor : new Ext.form.TextField({
allowBlank : false,
name : 'score3',
regex : /^(?:\d?\d(\.\d{1,2})?|100|0.0|100.0|0.00|100.00)$/,
regexText : '请输入0~100的数字!'
}),
renderer : function(v, m, r, ri, ci, str) {
var isUser = r.get('currentUser') != loginUser;
if(r.get('stepCode') == 'ManAuditEval3'){
cm.setEditable(ci,true);
if(isUser){
m.css += "x-item-disabled";
}
} else {
m.css += "x-item-disabled";
}
return checkFloat(v);
},
hidden : false
}, {
id : 'score',
header : '部门领导打分',
dataIndex : 'score',
editable : false,
editor : new Ext.form.TextField({
allowBlank : false,
name : 'score',
regex : /^(?:\d?\d(\.\d{1,2})?|100|0.0|100.0|0.00|100.00)$/,
regexText : '请输入0~100的数字!'
}),
renderer : function(v, m, r, ri, ci, str) {
//alert(r.get('stepCode'));
var isUser = r.get('currentUser') != loginUser;
if(r.get('stepCode') == 'ManAuditEval4'){
cm.setEditable(ci,true);
if(isUser){
m.css += "x-item-disabled";
}
} else {
m.css += "x-item-disabled";
}
return checkFloat(v);
},
hidden : false
}, {
header : '考核状态',
dataIndex : 'status',
renderer : function(v, c, r, ri, ci, str) {
var isUser = r.get('currentUser') == loginUser;
//alert(isUser); isNullORZero 
var str;
switch(r.get('stepCode')){
case 'ManAuditEval1' : (isNullORZero(r.get('score2'))&& isUser)?str = '考核尚未打分':str = '考核已打分'; break;
case 'ManAuditEval2' : (isNullORZero(r.get('score3'))&& isUser)?str = '考核尚未打分':str = '考核已打分'; break;
case 'ManAuditEval3' : (isNullORZero(r.get('score4'))&& isUser)?str = '考核尚未打分':str = '考核已打分'; break;
default : (isNullORZero(r.get('score')) && isUser)?str = '考核尚未打分':str = '考核已打分';
}
//alert('考核状态:' + str);
return str;
}
}, {
header : 'auditEmpNumber',
dataIndex : 'auditEmpNumber',
hidden : true
}, {
header : '当前审批人',
dataIndex : 'currentUser',
hidden : true
}]);


// 页面数据加载
var store = new Ext.data.Store({
url : '/gatherEMPAppraisalAction.do?method=gatherAppraisalByMa',
reader : new Ext.data.JsonReader({
totalProperty : 'totalProperty',
root : 'dataList',
fields : ['empId', 'caseId', 'empNumber',
'empName', 'position', {
name : 'selfScore',
type : 'float'
}, {
name : 'score',
type : 'float'
}, 'score1','score2', 'score3', 'score4', 'status','isCellEditable',
'grade', 'auditEmpNumber', 'currentUser',
'stepCode', 'nextStepId', 'nextStepName']
})
});


// 改成可编辑的grid
var grid = new Ext.grid.EditorGridPanel({
//title : '考核汇总打分',
bodyStyle : 'width:100%',
height : document.body.clientHeight - 240,
loadMask : {
msg : '正在加载数据,请稍候!'
},
frame : true,
autoScorll : true,
cm : cm,
sm : sm,
store : store,
renderTo : 'mainfrom',
buttonAlign : 'center',
clicksToEdit : 1,
buttons : [{
cls : 'x-btn-text-icon blist',
icon : '/style/default/images/button_ok.png',
text : '提交审批结果',
handler : submitEval
}],
tbar : [{
text:'结束考核任务',
cls : 'x-btn-text-icon blist',
icon : '/style/default/images/button_ok.png',
tabTip : '全部人员审批完成,才能结束考核任务' ,
handler : finish
}]
});
grid.getStore().loadData(jsonData,true);

//当前单元格是否可以编辑  
/*
* 当前打分领导            stepCode                打分                     当前登录人                   
* A             ManAuditEval1           score2           A                
* B             ManAuditEval2           score3           B
* C             ManAuditEval3           score4           C
* D             ManAuditEval4           score            D

* 满足以上条件才能编辑
*/
grid.on('beforeedit',function(e){
var isUser = e.record.get('currentUser') != loginUser;
//alert(e.record.get('currentUser') != loginUser);
//alert("field: " + e.field + "  ,stepCode: " + e.record.data.stepCode);
   var _field;
switch(e.record.get('stepCode')){
case 'ManAuditEval1' : _field = 'score2'; break;
case 'ManAuditEval2' : _field = 'score3'; break;
case 'ManAuditEval3' : _field = 'score4'; break;
default : _field = 'score';
}
/* alert("_field: " + _field.toString());
alert("e.field: " + e.field.toString());
alert(_field.toString() == e.field.toString());*/
if(_field.toString() != e.field.toString() || isUser){
e.cancel = true;
}
});
function loadCallback(store, rd, op) {
var records = new Array();
var index = 0;
for (var i = 0, j = rd.length; i < j; i++) {
records[index++] = rd[i]
}
}
// 是否可以结束当前汇总任务
/*
*   流程状态stepCode    打分保存字段
*    ManAuditEval1       score2
*    ManAuditEval2       score3
*    ManAuditEval3       score4
*    ManAuditEval4       score
*  说明:提交打分后状态会变,所以要取值为上一个状态的打分值
*/
function finish(){
var o = {};
var m = '';
var count = 0;
for (var i = 0; i < store.getCount(); i++) {
var r = store.getAt(i);
var _score;
var _isUser = r.get('currentUser') == loginUser;
switch(r.get('stepCode')){
case 'ManAuditEval1' : _isUser?_score = r.get('score2'):_score = r.get('score'); break;
case 'ManAuditEval2' : _isUser?_score = r.get('score3'):_score = r.get('score2'); break;
case 'ManAuditEval3' : _isUser?_score = r.get('score4'):_score = r.get('score3'); break;
default : _isUser?_score = r.get('score'):_score = r.get('score4');
   }
   //isNullORZero
   //if (r.get('selfScore') == '' || _score == '' || r.get('selfScore') == 0 || _score == 0) {
   if(isNullORZero(r.get('selfScore')) || isNullORZero(_score)){
o.msg = (o.msg || '') + '、' + r.data['empName'];
}
if ((_score != '' && _score != 0) && r.get('currentUser') == loginUser) {
m = m + '、' + r.data['empName'];
o.msg = (o.msg || '') + '、' + r.data['empName'];
}
}
//alert('o.msg : '+o.msg);
//alert('m :'+m+'@@');
if (m != '') {
o.msg = '员工:' + m.substring(1) + '的考核尚未提交!'
} else {
o.msg = '员工:' + o.msg.substring(1) + '的考核尚未打分!'
}
alert(o.msg);
}

var normal = [];
var tmp = [];
// 提交
function submitEval() {
var canSubmit;
var res = sm.getSelections();
var nextAuditor = [];
var nextStep = [];


if (res.length == 0) {
Ext.Msg.alert("提示", "请选择一条记录进行提交!");
return;
} else {
batchAudit();
}
}
// 提交方法
function batchAudit() {
var loadingCtr = Ext.Msg.wait("数据提交中,请稍等");
var res = sm.getSelections();
var evl = []; // 需要选择提交的Id
for (var i = 0; i < res.length; i++) {
var r = res[i];
var o = {};
o.empId = r.data['empId'];
o.caseId = r.data['caseId'];
o.empNumber = r.data['empNumber'];
o.empName = r.data['empName'];
o.position = r.data['position'];
o.selfScore = checkFloat(r.data['selfScore']);
o.score = checkFloat(r.data['score']);
o.auditEmpNumber = r.data['auditEmpNumber'];
o.grade = r.data['grade'];// add 9-8-26
o.stepCode = r.data['stepCode'];
o.nextStepId = r.data['nextStepId'];
// o.nextStepName = r.data['nextStepName'];
evl.push(o);
}


var json = encodeArray(evl);
ajaxMask.show();
Ext.Ajax.request({
url : '/Action.do?method=method',
method : 'POST',
params : {
periodId : periodId,
json : json
},
success : function(response, options) {
var rst = Ext.decode(response.responseText);
if (rst.success == 'false') {
Ext.Msg.alert('提示', rst.message);
} else {
store.reload();
}


if (nextAuditor_win && nextAuditor_win.isVisible())
nextAuditor_win.hide();
if (nextStep_win && nextStep_win.isVisible())
nextStep_win.hide();
loadingCtr.hide();
ajaxMask.hide();
},
failure : function() {
loadingCtr.hide();
ajaxMask.hide();
}
});
}


var vp = new Ext.Viewport({
layout : 'fit',
items :  [grid]
});


})
原创粉丝点击