增加流程
html
请输入流程名称:<input type="text" id="lc_name" /><button onclick="lc_save()">保存</button> <!--选择流程审批人员--> <div id="sel_person"></div> <!--审批人员顺序显示--> <div id="sel_jd"></div>
js
//定义字符串作为tj()函数的流程人员字符串拼接 var lc_personArr = []; $(function(){ sel_person();//加载人员下拉 }) //后台查找所有的人员uid 和name 执行处理数据chuliSel_person() function sel_person(){ $.ajax({ type:"post", url:"chuli.php", async:true, data:{type:'sel_person'}, dataType:'json', success:function(data){ chuliSel_person(data); } }); } //循环添加单选按钮value为人员uid 显示为人员姓名,最后添加按钮 执行addJD() function chuliSel_person(data){ var str = ""; for(var i = 0; i < data.length; i++){ str += "<label><input type='radio' name='sel_person' value='"+data[i][0]+"'/>"+data[i][1]+"</label>"; } str += "<button onclick='addJD()'>添加</button>" $('#sel_person').html(str); } //添加选中的人员依次排序放入字符串 function addJD(){ //遍历单选,若被选中, $('input[type=radio]').each(function(){ if($(this).prop('checked')){ // 判断数组lc_personArr是否存在这一项,如果不存在则加入,若存在则提示改用户已存在 if($.inArray($(this).val(),lc_personArr) == -1){ lc_personArr.push($(this).val()); }else{ alert('该用户已存在'); } } }) //执行打印到网页函数。 print_jd(); } //数组打印到网页 function print_jd(){ var str =""; //遍历节点数组,循环拼接 下标:值 删除按钮,删除按钮传参此行下标 $(lc_personArr).each(function(key,value){ str += key+":"+value+"<button onclick='delete_jd("+key+")'>删除</button><br>"; }) $('#sel_jd').html(str); } //删除按钮函数 function delete_jd(key){ //删除传参下标的键值对 lc_personArr.splice(key,1); //重新执行打印到网页函数 print_jd(); } //保存按钮函数,保存此流程节点到数据库 function lc_save(){ //获取流程名称 var lc_name = $('#lc_name').val(); //传入后台流程名称和节点数组,成功则数组清空,打印页面清空,input清空。 $.ajax({ type:"post", url:"chuli.php", async:true, data:{ type:'lc_save', lc_name:lc_name, persenArr:lc_personArr }, dataType:'text', success:function(data){ if(data == 'ok'){ alert('添加成功'); lc_personArr = []; print_jd(); $('#lc_name').val(''); } } }); }
php case语句
//查找所有的人员uid 和name case 'sel_person': $sql = "select zh,name from lc_user"; $res = $db->query($sql); $attr = $res->fetch_all(); echo json_encode($attr); break; //保存流程 case 'lc_save': //获取时间戳,流程名称,节点数组 $time = time(); $lc_name = $_POST['lc_name']; $persenArr = $_POST['persenArr']; //liucheng表用时间戳做流程代号,放入数据库 $sql1 = "insert into liucheng values('$time','$lc_name')"; $res1 = $db->query($sql1); //遍历节点数组,添加节点数据库 foreach($persenArr as $k=>$v){ $sql2 = "insert into lc_jiedian(code,uids,orders) values('$time','{$v}','{$k}')"; // $sql2 = "insert into lc_jiedian values('','$time','{$v}','{$k}')"; $res2 = $db->query($sql2); } if($res1 && $res2){ echo 'ok'; } break;
发起事件
html
发起流程:<select id="sel_lc"></select> 内容:<textarea id="lc_nr"></textarea> <button onclick="lc_tj()">提交</button><br>
js
$(function(){ sel_lc();//查找显示流程名称 }) //查找显示流程名称,代号 成功执行chuliSel_lc() function sel_lc(){ $.ajax({ type:"post", url:"chuli.php", async:true, data:{type:'sel_lc'}, dataType:'json', success:function(data){ chuliSel_lc(data); } }); } //流程代号,名称,循环放入下拉 function chuliSel_lc(data){ var str = ""; for(var i = 0; i < data.length; i++){ str += "<option value='"+data[i][0]+"'>"+data[i][1]+"</option>"; } $('#sel_lc').html(str); } //提交按钮提交流程函数 function lc_tj(){ //获取内容,流程代号传入后台 var nr = $('#lc_nr').val(); var code = $('#sel_lc').val(); $.ajax({ type:"post", url:"chuli.php", async:true, data:{ type:'lc_tj', code:code, nr:nr }, dataType:'text', success:function(data){ if(data=='ok')alert('提交成功'); } }); }
php
//查找所有流程名称,代号 case 'sel_lc': $sql = "select * from liucheng"; $res = $db->query($sql); $attr = $res->fetch_all(); echo json_encode($attr); break; //添加事件 case 'lc_tj': //获取时间戳作为提交日期,获取流程代号,提交人,提交内容,添加入表,并设置towhere=0,isok=0 $time = time(); $code = $_POST['code']; $uid = $_SESSION['uid']; $nr = $_POST['nr']; $sql = "insert into lc_user_liucheng (code,uid,content,isok,riqi,towhere) values('$code','$uid','$nr','0','$time','0')"; $res = $db->query($sql); if($res) echo 'ok'; break;
流程显示与处理
html仅为id为lc_detail的表格
js
//流程显示,后台连表查登录用户的处理数据 function sel_detail(){ $.ajax({ type:"post", url:"chuli.php", async:true, data:{ type:'sel_detail' }, dataType:'json', success:function(data){ //console.log(data); chuliLc_detail(data) } }); } //获取数据后拼接显示,当此用户的节点顺序<towhere顺序(即已审核完),则操作显示已处理,当此用户节点顺序=towhere顺序(即该此人审核),则显示按钮审核。 function chuliLc_detail(data){ var str =""; str +=`<tr><th>流程代号</th> <th>发起人</th> <th>内容</th> <th>发起时间</th> <th>操作</th></tr>` //审核事件,传参为流程细节表的主键 for(var i = 0; i <data.length; i++){ str += "<tr>" if(data[i][3] < data[i][10]){ str += "<td>"+data[i][1]+"</td><td>"+data[i][6]+"</td><td>"+data[i][7]+"</td><td>"+data[i][9]+"</td><td>已处理</td>"; }else if(data[i][3] == data[i][10]){ str += "<td>"+data[i][1]+"</td><td>"+data[i][6]+"</td><td>"+data[i][7]+"</td><td>"+data[i][9]+"</td><td><button onclick='review("+data[i][4]+")'>通过</button></td>"; } str += "</tr>" } $('#lc_detail').html(str); } //审核,传参此条流程的主键,后台修改towhere+1,再执行sel_detail(),重新加载页面。 function review(ids){ $.ajax({ type:"post", url:"chuli.php", async:true, data:{ type:'review', ids:ids }, dataType:'json', success:function(data){ sel_detail(); } }); }
php
//显示流程 case 'sel_detail': //获取此用户的uid $uid = $_SESSION['uid']; //连表查节点表和流程细节表,查与此用户有关的并且流程代号相同的 $sql = "select * from lc_jiedian as a join lc_user_liucheng as b where a.uids = '$uid' and a.code = b.code"; $res = $db->query($sql); $attr = $res->fetch_all(); echo json_encode($attr); break; //审核 case 'review': //towhere加1 $ids = $_POST['ids']; $sql1 = "update lc_user_liucheng set towhere = towhere + 1 where ids = '$ids'"; $res1 = $db->query($sql1); //查找现在事件的towhere 和 事件代码 $sql2 = "select code,towhere from lc_user_liucheng where ids = '$ids'"; $res2 = $db->query($sql2); $attr = $res2->fetch_row(); //查找此流程一共有多少条语句,来确定towhere的最大值 $sql3 = "select count(*) from lc_jiedian where code = '{$attr[0]}'"; $res3 = $db->query($sql3); $attr2 = $res3->fetch_row(); //当towhere 和 共有多少条语句相等时,isok设为1(因为最后一个人审核后towhere也会加1,查找语句数为最大orders加1) if($attr[1] == $attr2[0]){ $sql4 = "update lc_user_liucheng set isok = 1 where ids = '$ids'"; $res4 = $db->query($sql4); } echo 'ok'; break;
补充:
inArray() 判断数组中是否存在某一个数
eg:$.inArray(‘abc’,array) 判断array中是否存在字符串abc ,若存在则返回下标,不存在返回-1
splice() 删除数组中某一项,会改变原数组,其他项会自动重新排列
eg:$.splice(key,1) key为开始下标,1为一项。