1.流程管理的用法是什么样的?
2.怎么发起想要的流程?
3.审批的人要是怎么审批通过?
4.流程审核是不是要挨个走过?
一、要有数据库的内容的
肯定会有表的,首先就是用户表了,然后就是流程表,用户编写的流程表,还有审核人员的表
二、数据库结束后,就是新建流程的页面,这页面会有审核人员,还有流程的名字还有提交的按钮
(1)添加节点的人员,这个是要遍历数据库来查看都什么管理人员
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<div>
请选择节点人员:
<?php
session_start();
//开启session
include(
"DBDA.class.php"
);
//调用封装好的数据库
$db =
new
DBDA();
//造新对象
$suser =
"select * from users"
;
//查询用户表中的所有值
$auser = $db->Query($suser);
//执行查询语句
foreach
($auser
as
$v)
{
echo
"<input class='ck' type='radio' value='{$v[0]}' name='ck' />{$v[2]} "
;
//输出单选按钮,数组中的索引2,也就是用户名,但是它的值是代号
}
?>
</div>
|
查看一下显示结果:
(2)既然后选择审核人员,那么就是有添加的按钮
1
|
<input type=
"button"
value=
"添加节点"
id=
"insert"
/>
//起个名字,便于给它添加单击按钮
|
(3)对这个按钮添加点击事件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
$(
"#insert"
).click(
function
(){
var
ck = $(
".ck"
);
//找到项
var
uid =
""
;
for
(
var
i=0;i<ck.length;i++)
{
if
(ck.eq(i).prop(
"checked"
))
//单选按钮的选中状态
{
uid = ck.eq(i).val();
//单选按钮的值
}
}
$.ajax({
url:
"addjd.php"
,
//添加节点的处理页面
data:{uid:uid},
//将单选按钮的值传过去
type:
"POST"
,
//传值方式
dataType:
"TEXT"
,
//值的返回状态
success:
function
(data){
window.location.href=
"liucheng_gaunli.php"
;
//执行处理页面成功后会刷新页面
}
});
})
|
(4)添加节点的处理页面
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<?php
session_start();
//开启session
$uid
=
$_POST
[
"uid"
];
//接收传过来的值
if
(
empty
(
$_SESSION
[
"jiedian"
]))
{
$attr
=
array
(
$uid
);
//定义一个数组放用户
$_SESSION
[
"jiedian"
] =
$attr
;
//将第一个用户放入数组中
}
else
{
$attr
=
$_SESSION
[
"jiedian"
];
//数组中有值
$attr
[] =
$uid
;
//放入数组中值
$_SESSION
[
"jiedian"
] =
$attr
;
//将值再交给session
}
|
(5)在主页面中显示添加的这些节点
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<?php
if
(
empty
(
$_SESSION
[
"jiedian"
]))
//如果没有节点值
{
echo
"<div>还没有添加节点</div>"
;
//输出这句话
}
else
{
$attr
=
$_SESSION
[
"jiedian"
];
//数组中有了值
foreach
(
$attr
as
$k
=>
$v
)
//循环遍历,$v只是名字,还有有所以所以用$k
{
$sname
=
"select name from users where uid='{$v}'"
;
//编写查询语句
$name
=
$db
->StrQuery(
$sname
);
//执行查询语句<br> //输出索引号还有名字,加一个删除按钮吧,可以吧这个节点删除
echo
"<div>{$k}--{$name}--<input type='button' value='删除' sy='{$k}' class='sc' /></div>"
;
}
}
?>
|
添加节点看下效果:
1.还没有添加节点的效果图:
2.随便添加几个审核人员:人员已经显示出来了
(6)这样之后就是对其的删除按钮添加单击事件了
1
2
3
4
5
6
7
8
9
10
11
12
|
$(
".sc"
).click(
function
(){
var
sy = $(this).attr(
"sy"
);
//点击这个按钮,选中这个的索引号
$.ajax({
url:
"shanchu.php"
,
//删除按钮的处理页面
data:{sy:sy},
//把索引号传到处理页面
type:
"POST"
,
//传值方式
dataType:
"TEXT"
,
success:
function
(data){
window.location.href=
"liucheng_gaunli.php"
;
//执行处理页面成功后会刷新页面
}
});
})
|
(7)删除按钮的处理页面
1
2
3
4
5
6
7
8
|
<?php
session_start();
//开启session
$attr
=
$_SESSION
[
"jiedian"
];
//节点的数组
$sy
=
$_POST
[
"sy"
];
//接收穿过来的索引号
unset(
$attr
[
$sy
]);
//删除数据
$attr
=
array_values
(
$attr
);
//重新索引
$_SESSION
[
"jiedian"
] =
$attr
;
|
查看下删除节点的效果
1.没有删除之前
2.删除一个节点之后
(8)节点的操作已经结束之后,那么就是流程的名称了,这个简单,写名称的文本框:重要的就是对这个流程的保存了,那么也要有保存按钮
1
|
<div>请输入流程名称:<input type=
"text"
id=
"name"
/></div>
//起个名字,下面保存的写个单击事件有用
|
1
|
<div><input type=
"button"
value=
"保存"
id=
"save"
/></div>
//保存按钮要有单击事件的
|
这样整体的效果图就出来了:
(9)最后就是保存按钮的单击事件了
1
2
3
4
5
6
7
8
9
10
11
|
$(
"#save"
).click(
function
(){
var
name = $(
"#name"
).val();
//取到文本框的值
$.ajax({
url:
"baocun.php"
,
//保存的处理页面
data:{name:name},
//将文本框的值传到处理页面
type:
"POST"
,
//传值方式
dataType:
"TEXT"
,
success:
function
(data){
alert(
"添加成功!"
);
//执行处理页面成功后会弹出提示框
}
});<br>})
|
(10)保存流程的处理页面
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<?php
session_start();
//开启session
include
(
"DBDA.class.php"
);
//调用封装的数据库类
$db
=
new
DBDA();
//造新对象
$name
=
$_POST
[
"name"
];
//接收传过来的值
$code
= time();
//代号是时间
$sflow
=
"insert into flow values('{$code}','{$name}')"
;
//修改流程表中的值:代号和名字
$db
->Query(
$sflow
,0);
//执行语句
$attr
=
$_SESSION
[
"jiedian"
];
foreach
(
$attr
as
$k
=>
$v
)
{
$spath
=
"insert into flowpath values('','{$code}','{$v}','{$k}')"
;
//修改流程节点的数值
$db
->Query(
$spath
,0);
//执行语句
}
|
看下保存效果:
看下数据库,内容也保存数据库了
三、新建流程页面已经结束了,那么就是用户登录页面了,这个页面写了很多遍了,不多说了,直接上代码
(1)登录的基本显示:都是些基本语句
1
2
3
4
|
<h1>用户登录</h1>
<div>账号:<input type=
"text"
id=
"uid"
/></div>
<div>密码:<input type=
"password"
id=
"pwd"
/></div>
<div><input type=
"button"
value=
"登录"
id=
"btn"
/></div>
|
(2)这里登录,我们也用ajax进行登录吧
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
$(
"#btn"
).click(
function
(){
//对登录按钮添加单击事件
var
uid=$(
"#uid"
).val();
//获取用户的值
var
pwd=$(
"#pwd"
).val();
//获取密码的值
$.ajax({
url:
"logincl.php"
,
//编写登录的处理页面
data:{uid:uid,pwd:pwd},
//将用户和密码传到处理页面
type:
"POST"
,
dataType:
"text"
,
success:
function
(data)
{
if
(data.trim()==
"OK"
)
{
window.location.href=
"main.php"
;
//处理页面执行成功后,跳转到主页面
}
else
{
alert(
"用户名密码输入错误"
);
//否则就提示错误
}
}
})
})
|
(3)看下处理页面的编写
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<?php
session_start();
//开启session
include
(
"DBDA.class.php"
);
//调用封装的类
$db
=
new
DBDA();
//造新对象
//传过来的值
$uid
=
$_POST
[
"uid"
];
$pwd
=
$_POST
[
"pwd"
];<br>
//查询语句
$sql
=
" select pwd from users where uid='{$uid}' and pwd='{$pwd}' "
;
//执行语句
$attr
=
$db
->Query(
$sql
);
if
(!
empty
(
$pwd
) && !
empty
(
$attr
) &&
$attr
[0][0]==
$pwd
)
{
$_SESSION
[
"uid"
] =
$uid
;
//session接收用户值
echo
"OK"
;
}
else
{
echo
"ON"
;
}
?>
|
最后,我们看下最后结果,登录成功就会进入主页,登录失败会提示错误
四、节点用户的审核处理界面了(对于这个审核界面有很多需要注意的地方)
(1)登录成功界面的显示部分:并不是每个人登录成功界面是一样的,还有就是如果这个人员不参与审核的话,也应该是没有信息的才对
想要显示的表头,也就是一行:我们可以用表来显示
1
2
3
4
5
6
7
8
|
<tr>
<td>流程代号</td>
<td>发起者</td>
<td>发起内容</td>
<td>是否结束</td>
<td>发起时间</td>
<td>操作</td>
</tr>
|
先看下表头的显示:
(2)开启一下session这样登录者的信息就会保存下来
1
2
3
4
5
6
7
8
9
10
11
12
|
session_start();
include
(
"DBDA.class.php"
);
//会用到数据库,所以可以调用一下数据库的类
$db
=
new
DBDA();
//造新对象
$uid
=
""
;
if
(
empty
(
$_SESSION
[
"uid"
]))
//判断保存的session值是不是为空
{
header(
"location:login.php"
);
//为空就返回登录页面
}
else
{
$uid
=
$_SESSION
[
"uid"
];
//不为空就输保存一下用户
}
|
(3)接下来就是用户这是不是和流程有关系?流程走到哪了(分情况)?还有就是有没有通过
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
//查询登录者参与的所有流程
$su_flow
=
"select * from userflow where code in(select code from flowpath where uids='{$uid}')"
;
$au_flow
=
$db
->Query(
$su_flow
);
//执行查询语句
foreach
(
$au_flow
as
$vu_flow
)
{
$towhere
=
$vu_flow
[6];
//流程走到哪里了
//找到登录者在该流程中的位置
$s_weizhi
=
"select orders from flowpath where code='{$vu_flow[1]}' and uids='{$uid}'"
;
$wezhi
=
$db
->StrQuery(
$s_weizhi
);
//该人员在流程中的位置
if
(
$towhere
>=
$wezhi
)
{
$caozuo
=
""
;
if
(
$towhere
==
$wezhi
)
{
//流程正好走到登录者位置
$caozuo
=
"<a href='tongguo.php?ids={$vu_flow[0]}'>通过</a>"
;
//get方式传过处理页面
}
else
{
//流程走过登录者
$caozuo
=
"<span style='background-color:green; color:white'>已通过</span>"
;
}
echo
"<tr><td>{$vu_flow[1]}</td><td>{$vu_flow[2]}</td><td>{$vu_flow[3]}</td><td>{$vu_flow[4]}</td><td>{$vu_flow[5]}</td><td>{$caozuo}</td></tr>"
;
}
else
<br> {
//流程未走到登录者
}
}
|
(4)通过的处理页面
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<?php
include
(
"DBDA.class.php"
);
//调用封装好的数据库类
$db
=
new
DBDA();
//造新对象<br>
$ids
=
$_GET
[
"ids"
];
//将代号传过来
$sql
=
"update userflow set towhere=towhere+1 where ids='{$ids}'"
;
//修改towhere的值看已经执行到哪了
$db
->Query(
$sql
,0);
//执行修改语句
$swhere
=
"select * from userflow where ids='{$ids}'"
;
$attr
=
$db
->Query(
$swhere
);
$towhere
=
$attr
[0][6];
//走到哪了
$code
=
$attr
[0][1];
//流程代号
$ssl
=
"select count(*) from flowpath where code='{$code}'"
;
//查询总数
$pcount
=
$db
->StrQuery(
$ssl
);
//该流程节点人员数量
if
(
$towhere
>=
$pcount
)
{<br>
$sql
=
"update userflow set isok=true where ids='{$ids}'"
;
//修改是不是已经通过了
$db
->Query(
$sql
,0);
}
header(
"location:main.php"
);
|
因为还没有写发起流程界面,那么先从数据库中添加几条数据看看:
(1)我们先要新建个流程,这是第一个页面,我们就用新建流程
看下结点还有流程名称 来看下数据库中结点的表
根据这些我们在流程表中自己先添加信息吧,等后来再通过发起流程添加,现在只看下效果
登录审核人员的账号看下:
第一个人是李四:
我们点击通过,继续往下走
第二个人是马七,我们不点通过,看下下一个人员(王五)有没有这个通过的操作:是没有这个操作的
我们让马七通过审核,再看下王五的界面
王五的界面就是:就发现有了这个操作,继续下去,我们看下最后这个通过会不会变成1
最后审核人员张三
看下结果是否会结束:
再看下数据库中towhere中的数值是不是已经结束了:
这个就剩下发起流程的步骤了,可以先看下效果:
(1)发起流程有个链接页面,单击这个,可以链接到发起流程页面
(2)这个及时发起流程的页面了
至此,这个流程管理就结束了。