流程增加,发起事件,流程显示,处理。

增加流程

 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为一项。

猜你喜欢

转载自www.cnblogs.com/SSs1995/p/9236749.html