1.我们使用的很多软件都会有批量操作的功能,选中多个复选框,然后点击按钮进行批量操作。如下图所示:
2.绑定click事件,首先需要判断是否选中,是否是结账状态,是否审核,如果都符合那么获得选中的凭证id date num,放入到数组中去
//批量审核
$(".allcheck").on("click",function(){
var _child = $(".check_list_table_container").children();
var _arr=[];
//选中否
var _num = 0;
//结账否
var _flagNum=0;
//审核否
var _checkNum=0;
_child.each(function(){
var _checked = $(this).find(".dd").prop("checked");
if(_checked){
_num = _num+1;
var _flag = $(this).attr("flag");
if(_flag=="true"){
_flagNum+=1;
}
var _checkN = $(this).find(".operate_left .li_state").html();
if(_checkN=="已审核"){
_checkNum+=1;
}
}
});
//判断至少有一个凭证被选中
if(_num<1){
alert("请至少选中一个凭证!");
return;
}
//如果已经结账的话则不能进行批审
if(_flagNum>0){
alert("结账状态不能进行批审操作!");
return;
}
//如果已经审核的话则不能批审
if(_checkNum>0){
alert("已审核状态不能进行批审操作");
return;
}
//所有的判断之后:进行批审操作
_child.each(function(){
var _checked = $(this).find(".dd").prop("checked");
if(_checked){
var _pzid2 = $(this).find(".operate_right").attr("name");
var _date = $(this).find(".operate_left").attr("name");
var _pzNum = $(this).find(".operate_right").children(":last").attr("name");
_arr.push(_pzid2,_date,_pzNum);
}
});
//调用批审方法
checkBtn2(_arr);
});
3.批审的方法需要将数组传递过来调用到后台进行处理:
//审核
function checkBtn2($arr){
var token = $("#token").val();
var AccountID = account_id;
//将token保存到凭证表中
var linkurl = "../../finance/voucher/voucherlist_updateList.zm?token="+token+"&AccountID="+AccountID;
$.ajax({
type:"GET", //请求类型
url:linkurl,//请求路径
dataType:"JSON",//预期服务器返回类型
async:true,
data:{
//将一个JavaScript值转换为一个JSON字符串
"ids":JSON.stringify($arr)
},
//如果成功,回调函数
success:function(data){
alert("批审成功!");
//页面改为相反的审核
if(data!=null && data.Status==1 ){
for(var k=0;k<$arr.length;k+=3){
$("li[name="+$arr[k]+"]").html("已审核");
var str="<li class=\"swipes\"><i class=\"iconfont\" οnclick=\"loseBtn('"+$arr[k]+"','"+$arr[k+1]+"','"+$arr[k+2]+"');\"></i>弃审</li>";
$("ul[name="+$arr[k]+"]").html(str)
}
}
//把checkbox前的勾去掉
$(".table_header .table_check").find("#checkall").prop("checked",false);
$(".check_list_table_container").children().find(".dd").prop("checked",false);
$(".check_list_table_container .table_form").css("borderColor","#f2f2f2");
}
});
}
因为数组无法传递到后台,所以需要将数据通过JSON.stringify()方法将数组变为json字符串传递
当审批成功之后将需要显示的内容进行拼接string,找到对应的id.html拼接在页面上显示
4.在后台中将ids中的id遍历保存在list集合中,然后再凭证中和凭证分录中分别update审核人名称。
因为凭证头和凭证分路的修改是同步的,所以使用到事务。
//批量操作——审批通过
public void updateList() {
initData();
String token = request.getParameter("token");
AccountID = request.getParameter("AccountID");
//获取ids的JSONArray格式
String arr= request.getParameter("ids");
JSONArray array = JSONArray.fromObject(arr);
//三个为一组,每个的第一个都是id,遍历到list集合中去
List<Object> list = new ArrayList<Object>();
int i=0;
for (Object object : array) {
if(i%3==0){
list.add(object);
}
i++;
}
//获取审核人
String checkName = UserwebService.decodeToken(token);
JSONObject nameObject = JSONObject.fromObject(checkName);
JSONObject resultObject = nameObject.getJSONObject("result");
String cName = (String) resultObject.get("TName");
//获取凭证分录管理器
CPZMgr pzMgr = Global.GetFinance(AccountID).getPZMgr();
CPZDefMgr pzdefMgr = Global.GetFinance(AccountID).getPZDefMgr();
//遍历保存
for(int j=0;j<list.size();j++){
//根据凭证头ID获取凭证分录
List<CBaseObject> pzList = pzMgr.GetList(" Acct_PZDef_id = '"+list.get(j)+"' ");
//循环将审核人名称保存到凭证表中
for (CBaseObject cBaseObject : pzList) {
CPZ pz= (CPZ)cBaseObject;
//审核人从其他接口进行获取
pz.setSHR(cName);
pzMgr.Update(pz);
}
//将审核人保存在凭证头中
CPZDef pzdef = (CPZDef)pzdefMgr.Find(Util.GetUUID(list.get(j).toString()));
pzdef.setSHR(cName);
pzdefMgr.Update(pzdef);
}
JSONObject retJson = new JSONObject();
try {
DB db = pzMgr.Ctx.getMainDB();
db.BeginTransaction();
//只要有一个没有保存则取消保存,审核失败
if (!pzMgr.Save() || !pzdefMgr.Save())
{
db.RollbackTransaction();
pzMgr.Cancel();
pzdefMgr.Cancel();
retJson.put("Status", 0);
retJson.put("Err", "审核失败!");
this.returnAjax(retJson.toString());
return;
}
//否则审核成功,提交事务
retJson.put("Status", 1);
retJson.put("Err", "审核成功!");
db.CommitTransaction();
pzMgr.Commit();
pzdefMgr.Commit();
this.returnAjax(retJson.toString());
} catch (SQLException e) {
e.printStackTrace();
retJson.put("Status", 0);
retJson.put("Err", "审核失败!");
this.returnAjax(retJson.toString());
return;
}
}
小结:
批量操作虽然比较简单,但也是最常用到的一个功能,一方面是数组的传递,一方面是事务的使用,思路对了,做起来也就自然对了。