ExtJS EditorGridPanel 控制每一个单元格是否可以编辑
//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]
});
})
ExtJS EditorGridPanel 控制每一个单元格是否可以编辑相关推荐
- java jtable 复选框_java swing如何在JTable一个单元格添加多个复选框
展开全部 java swing中在jTable中添加多个复选框的方32313133353236313431303231363533e59b9ee7ad9431333337616566式如下:impor ...
- 关于.net Microsoft.Office.Interop.Word组建操作word的问题,如何控制word表格单元格内部段落的样式。...
控制word表格单元格内部文字样式.我要将数据导出到word当中,对于word表格一个单元格中的一段文字,要设置不同的样式,比如第一行文字作为标题要居中,加粗,第二行为正常的正文. 代码如下 publ ...
- delphi dbgrideh 遍历每一个单元格_真香!我用Python 制作了一个迷宫游戏
相信大家都玩过迷宫的游戏,对于简单的迷宫,我们可以一眼就看出通路,但是对于复杂的迷宫,可能要仔细寻找好久,甚至耗费数天,然后可能还要分别从入口和出口两头寻找才能找的到通路,甚至也可能找不到通路. 虽然 ...
- datagridview java_仅更新datagridview中的一个单元格
我正在编写一个Watch Window,它从 Serial Port 获取数据,并在 DataGridView 中显示变量info / value . 我有一个 Timer Event ,每隔500毫 ...
- ios 获取最后一个cell_关于ios:向UICollectionView的第一个和最后一个单元格添加填充...
我子类化UICollectionViewFlowLayout以获取具有分页行为的水平UICollectionView. 只要UICollectionViewCell不是最后一个单元格,它就可以很好地工 ...
- html 点击按钮js自增,JS实现点击按钮自动增加一个单元格的方法
本文实例讲述了JS实现点击按钮自动增加一个单元格的方法.分享给大家供大家参考.具体分析如下: 这是一个网页在线自助生成表格的特效代码. 核心功能代码是JS实现,点击网页中的添加按钮,网页中自动增加一个 ...
- 如何用Apache POI操作Excel文件-----如何对一个单元格加注解?
有的时候,我们需要通过操作Apache POI,在生成Cell数据的同时,能对其生成的Cell,加上注解(comments),类似于下面的. 那么对于这种情况,我们的代码应该如何写呢? 借花献佛,我就 ...
- 2022-01-19:青蛙过河。 一只青蛙想要过河。 假定河流被等分为若干个单元格,并且在每一个单元格内都有可能放有一块石子(也有可能没有)。 青蛙可以跳上石子,但是不可以跳入水中。 给你石子的位置列
2022-01-19:青蛙过河. 一只青蛙想要过河. 假定河流被等分为若干个单元格,并且在每一个单元格内都有可能放有一块石子(也有可能没有). 青蛙可以跳上石子,但是不可以跳入水中. 给你石子的位置列 ...
- Excel - 如何在 Excel 表格的一个单元格内换行?
Excel表格是我们经常使用的一个办公软件.我们在使用excel表格时,有时候会需要在一个单元格内进行换行.如果我们直接敲击回车,那么会直接切换至另一个单元格.接下来,小编来和大家分享下如何在一个单元 ...
最新文章
- 目标检测之Faster-RCNN的pytorch代码详解(数据预处理篇)
- 找到二叉树中的最大搜索子树
- 关于hibernate的查询
- 深度学习二(Pytorch物体检测实战)
- PHP生成海报 文字描边,php实现图片添加描边字和马赛克的方法
- IPSec隧道配置案例(手动模式)
- github提交代码403
- php接收vb post数据,VB Post方式提取网页数据
- 数学归纳法证明求和公式
- Objective-C写出Json文件(可作配置文件)
- 纯福利文章、送5本Java核心技术(不定期送福利)
- SRS学习-配置DVR
- 曲线运动与万有引力公式_干货|曲线运动与万有引力定律相关解题技巧
- 2020.11.9--AE--文字的文本属性、文字动画效果、内置动画预设
- 华为申请区块链产权管理专利
- mysql悲观群_谈谈mysql的悲观和乐观锁
- Acme Cad Dwg 转换 设置字体
- iOS SDK详解之视频播放(AVPlayer)附Demo
- html表单 access,【Access基础】OpenForm打开窗体方法详解
- python 掷骰子游戏
热门文章
- python判断字典是否为空
- The Square Root of Three 孤独的根号三 David B. Feinberg 大卫·范伯格
- Android 模拟器下载应用(APK)到 PC 研究
- 怎么免费批量将JPG转WEPB
- 关机状态下启动微型计算机叫什么,微机的冷启动方式是什么?
- #学习笔记#Excel#Power Query 提取特定字段
- 几张视觉图,很有意思
- Spark之cache ,persist ,checkpoint ,广播变量及其案例 : 根据IP地址(浏览器访问日志获取) / 经度纬度定位地理位置案例(7)
- 【codevs 3287】货车运输
- 解决Visual Studio的IIS与无法启动调试器问题