在公司運營中,人員的變動及請假、離職情況都很普遍,這就需要有一個管理系統來系統的做一套流程,可以提升工作效率節省時間。在流程中需要有順序的進行提交審核,接下來我們做一套簡單的新建流程以及提交審核的系統:
首先需要幾張表:userss表、liucheng表、jiedian表、userflow表
第一步新建流程,添加節點,這里要將userss表中的性命顯示出來,這里可以用單選也可以用下拉,我們用下拉列表顯示:
<h1>新建流程</h1> <div>請選擇節點人員: <select id="user"> <?php session_start(); require "DBDA.class.php"; $db = new DBDA(); $sql = "select * from userss"; $arr = $db->query($sql); foreach($arr as $v) { echo "<option value='{$v[0]}'>{$v[2]}</option>";//找到人員姓名 } ?> </select> <input type="button" value="添加節點" id="addjd" /><!--id為了添加點擊事件--> </div><br />
效果圖:
第二步引入jquery包,給節點添加點擊事件:
<script>//給節點添加點擊事件 $("#addjd").click(function(){ var uid = $("#user").val(); $.ajax({ url:"liuadd.php", data:{uid:uid}, type:"POST", dataType:"TEXT", success: function(data){ window.location.href="liucheng.php";//刷新頁面 } }) })
liuadd.php處理頁面:
<?php session_start(); $uid = $_POST["uid"];//取用戶名 if(empty($_SESSION["jiedian"])) { $arr = array($uid);//如果為空,造一個數組 $_SESSION["jiedian"] = $arr; } else { $arr = $_SESSION["jiedian"]; $arr[] = $uid;//將值添加進去 $_SESSION["jiedian"] = $arr; }
第三步嵌入php代碼,取出session的值,點擊添加節點添加到下方:
<div> <?php if(empty($_SESSION["jiedian"])) { echo "您尚未添加節點人員"; } else { $arr = $_SESSION["jiedian"]; foreach($arr as $k=>$v) { $sql = "select name from userss where uid = '{$v}'"; $name = $db->strquery($sql); echo "<div id='ys'>{$k}--{$name}--<input type='button' value='移除' class='yichu' sy='{$k}' /></div>";//取出索引,姓名並添加移除按鈕 } } ?> </div><br />
看看效果:
第四步:給移除按鈕添加點擊事件:
//移除的點擊事件 $(".yichu").click(function(){ var sy = $(this).attr("sy"); $.ajax({ url:"yichu.php", data:{sy:sy}, type:"POST", dataType:"TEXT", success: function(data){ window.location.href="liucheng.php"; } }) })
yichu.php處理頁面:
<?php session_start(); $sy = $_POST["sy"]; $arr = $_SESSION["jiedian"]; unset($arr[$sy]);//從數組中刪除sy這一項 $arr = array_values($arr);//重新索引 $_SESSION["jiedian"] = $arr;
第五步:添加流程名稱及保存按鈕,保存到數據庫:
<div>請輸入流程名稱: <input type="text" id="name" /> </div><br /> <input type="button" value="保存" id="baocun" />
保存按鈕添加點擊事件:
//保存的點擊事件 $("#baocun").click(function(){ var name = $("#name").val(); $.ajax({ url:"baocun.php", data:{name:name}, type:"POST", dataType:"TEXT", success: function(data){ alert("保存成功"); } }) })
baocun.php處理頁面:
<?php session_start(); require "DBDA.class.php"; $db = new DBDA(); $name = $_POST["name"]; $code = time();//時間戳生成code $sql = "insert into liucheng values('{$code}','{$name}')";//保存到liucheng里邊 $db->query($sql,0); $arr = $_SESSION["jiedian"]; foreach($arr as $k=>$v) { $sql = "insert into jiedian values('','{$code}','{$v}','{$k}')";//保存到jiedian里邊。 $db->query($sql,0); }
實現效果:
數據庫:
上邊是新建流程及保存流程,下邊我們就要進行流程的發起和審核:
發起流程要先登錄,所以先建個登錄頁面:
<h1>登錄頁面</h1> <form action="liudengchuli.php" method="post"> <div>用戶名:<input type="text" name="uid" /></div> <div>密碼:<input type="password" name="pwd" /></div> <input type="submit" value="登錄" /> </form>
登錄處理頁面:
<?php session_start(); $uid = $_POST["uid"]; $pwd = $_POST["pwd"]; require "DBDA.class.php";//引入封裝類 $db = new DBDA(); $sql = "select pwd from userss where uid = '{$uid}'";//通過用戶名找密碼 $mm = $db->strquery($sql); if($mm == $pwd && !empty($pwd))//判斷密碼是否相同且不為空 { $_SESSION["uid"] = $uid; header("location:liumain.php"); }
然后做一個主頁面,主頁面內容非常簡單,就是發起流程和審核流程:
<body> <h1>主頁面</h1> <div><a href="faqi.php">發起流程</a> <a href="shenhe.php">審核流程</a></div> </body>
建好主頁面后開始發起流程頁面的設置:
發起流程用下拉列表顯示:
<h1>發起流程</h1> <form action="faqichuli.php" method="post"> <div>請選擇發起的流程: <select name="lc"> <?php require "DBDA.class.php"; $db = new DBDA(); $sql = "select * from liucheng"; $arr = $db->query($sql); foreach($arr as $v) { echo "<option value='{$v[0]}'>{$v[1]}</option>";//取出流程名稱 } ?> </select> </div> <br /> <div>請輸入發起的內容: <textarea name="nr"></textarea> </div> <br /> <input type="submit" value="發起" /> </form>
寫發起處理頁面:
<?php session_start(); $code =$_POST["lc"]; $nr = $_POST["nr"]; $uid = $_SESSION["uid"]; $time = date("Y-m-d H:i:s",time());//將時間戳替換為格式化的時間 require "DBDA.class.php"; $db = new DBDA(); $sql = "insert into userflow values('','{$code}','{$uid}','{$nr}',0,'{$time}',0)"; $db->query($sql,0); header("location:liumain.php");//跳回主頁面
發起后要進行審核,審核是一級級的審,下級沒有通過的時候上級是不會看到的:
<h1>審核頁面</h1> <?php session_start(); $uid = $_SESSION["uid"];//存儲的用戶名 require "DBDA.class.php"; $db = new DBDA(); $sql = "select * from userflow a where code in(select code from jiedian where uid='{$uid}') and towhere >=(select orders from jiedian b where b.code=a.code and b.uid='{$uid}' )" ;//這里用到了相關子查詢,流程順序是否已經到達該用戶或已經被該用戶審核過 $arr = $db->query($sql); echo "<table width='100%' border='1' cellpadding='0' cellspacing='0'> <tr> <td>流程代號</td> <td>發起者</td> <td>發起內容</td> <td>是否結束</td> <td>發起時間</td> <td>操作</td> </tr> "; foreach($arr as $v) { $zt = "<a href='liutongguo.php? code={$v[0]}'>通過</a>"; $sql = "select orders from jiedian where code='{$v[1]}' and uid='{$uid}'";//通過用戶名和代號找出順序 $wz = $db->strquery($sql); if($v[6]>$wz) { $zt = "<span style='color:green'>已通過</span>"; } //顯示表中內容 echo "<tr> <td>{$v[1]}</td> <td>{$v[2]}</td> <td>{$v[3]}</td> <td>{$v[4]}</td> <td>{$v[5]}</td> <td>{$zt}</td> </tr>"; } echo "</table>"; ?>
最后是通過處理頁面:
<?php $ids = $_GET["code"]; require "DBDA.class.php"; $db = new DBDA(); //讓流程往下走 $sql = "update userflow set towhere = towhere+1 where ids='{$ids}'";//審核通過后順序加一,給到下一個人 $db->query($sql,0); //判斷流程是否結束 $sql = "select max(orders) from jiedian where code=( select code from userflow where ids='{$ids}')";//找出順序中最大的數 $maxsx = $db->strquery($sql); $sql = "select towhere from userflow where ids='{$ids}'"; $towhere = $db->strquery($sql); if($towhere>$maxsx) { //如果結束了,修改狀態 $sql = "update userflow set isok = 1 where ids='{$ids}'"; $db->query($sql,0); } header("location:shenhe.php");
看一下效果:
審核人登錄:
點擊通過:
最終審核人:
通過后是否結束顯示為1: