Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
在你之后
activiti7-workflow
提交
746b5e9a
A
activiti7-workflow
项目概览
在你之后
/
activiti7-workflow
与 Fork 源项目一致
Fork自
jwxkk / activiti7-workflow
通知
4
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
activiti7-workflow
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
746b5e9a
编写于
9月 14, 2020
作者:
jwxkk
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
完善系统功能
上级
5262cbec
变更
42
展开全部
隐藏空白更改
内联
并排
Showing
42 changed file
with
1709 addition
and
3438 deletion
+1709
-3438
src/main/java/com/imooc/activitiweb/ActivitiwebApplication.java
...in/java/com/imooc/activitiweb/ActivitiwebApplication.java
+21
-0
src/main/java/com/imooc/activitiweb/DemoApplicationConfiguration.java
...a/com/imooc/activitiweb/DemoApplicationConfiguration.java
+0
-2
src/main/java/com/imooc/activitiweb/controller/ActivitiHistoryController.java
...ooc/activitiweb/controller/ActivitiHistoryController.java
+112
-95
src/main/java/com/imooc/activitiweb/controller/HelloController.java
...ava/com/imooc/activitiweb/controller/HelloController.java
+28
-2
src/main/java/com/imooc/activitiweb/controller/ProcessDefinitionController.java
...c/activitiweb/controller/ProcessDefinitionController.java
+29
-23
src/main/java/com/imooc/activitiweb/controller/ProcessInstanceController.java
...ooc/activitiweb/controller/ProcessInstanceController.java
+32
-13
src/main/java/com/imooc/activitiweb/controller/TaskController.java
...java/com/imooc/activitiweb/controller/TaskController.java
+187
-14
src/main/java/com/imooc/activitiweb/controller/UserController.java
...java/com/imooc/activitiweb/controller/UserController.java
+38
-0
src/main/java/com/imooc/activitiweb/listener/ErrServiceTaskListener.java
...om/imooc/activitiweb/listener/ErrServiceTaskListener.java
+13
-0
src/main/java/com/imooc/activitiweb/listener/MultInstancesStartListener.java
...mooc/activitiweb/listener/MultInstancesStartListener.java
+23
-0
src/main/java/com/imooc/activitiweb/listener/MultInstancesTKListener.java
...m/imooc/activitiweb/listener/MultInstancesTKListener.java
+13
-0
src/main/java/com/imooc/activitiweb/listener/PiListener.java
src/main/java/com/imooc/activitiweb/listener/PiListener.java
+25
-0
src/main/java/com/imooc/activitiweb/listener/ServiceTaskListener1.java
.../com/imooc/activitiweb/listener/ServiceTaskListener1.java
+17
-0
src/main/java/com/imooc/activitiweb/listener/ServiceTaskListener2.java
.../com/imooc/activitiweb/listener/ServiceTaskListener2.java
+15
-0
src/main/java/com/imooc/activitiweb/listener/TkListener1.java
...main/java/com/imooc/activitiweb/listener/TkListener1.java
+13
-0
src/main/java/com/imooc/activitiweb/listener/TkListener2.java
...main/java/com/imooc/activitiweb/listener/TkListener2.java
+13
-0
src/main/java/com/imooc/activitiweb/mapper/ActivitiMapper.java
...ain/java/com/imooc/activitiweb/mapper/ActivitiMapper.java
+38
-2
src/main/java/com/imooc/activitiweb/security/ActivitiSecurityConfig.java
...om/imooc/activitiweb/security/ActivitiSecurityConfig.java
+1
-1
src/main/java/com/imooc/activitiweb/security/ActivitiSecurityController.java
...mooc/activitiweb/security/ActivitiSecurityController.java
+1
-1
src/main/java/com/imooc/activitiweb/security/MyUserDetailsService.java
.../com/imooc/activitiweb/security/MyUserDetailsService.java
+1
-1
src/main/java/com/imooc/activitiweb/security/SimpleResponse.java
...n/java/com/imooc/activitiweb/security/SimpleResponse.java
+1
-1
src/main/resources/application.yml
src/main/resources/application.yml
+5
-4
src/main/resources/resources/bpmnjs/.gitignore
src/main/resources/resources/bpmnjs/.gitignore
+2
-1
src/main/resources/resources/bpmnjs/app/index.html
src/main/resources/resources/bpmnjs/app/index.html
+12
-10
src/main/resources/resources/bpmnjs/app/index.js
src/main/resources/resources/bpmnjs/app/index.js
+59
-33
src/main/resources/resources/bpmnjs/dist/index.html
src/main/resources/resources/bpmnjs/dist/index.html
+12
-10
src/main/resources/resources/bpmnjs/dist/index.js
src/main/resources/resources/bpmnjs/dist/index.js
+269
-3068
src/main/resources/resources/bpmnjs/resources/activiti.json
src/main/resources/resources/bpmnjs/resources/activiti.json
+7
-1
src/main/resources/resources/bpmnjs/resources/newDiagram.bpmn
...main/resources/resources/bpmnjs/resources/newDiagram.bpmn
+1
-1
src/main/resources/resources/bpmnjs/resources/tools.js
src/main/resources/resources/bpmnjs/resources/tools.js
+54
-45
src/main/resources/resources/layuimini/api/init.json
src/main/resources/resources/layuimini/api/init.json
+3
-3
src/main/resources/resources/layuimini/css/public.css
src/main/resources/resources/layuimini/css/public.css
+3
-0
src/main/resources/resources/layuimini/index.html
src/main/resources/resources/layuimini/index.html
+3
-3
src/main/resources/resources/layuimini/page/HistoryTasks.html
...main/resources/resources/layuimini/page/HistoryTasks.html
+7
-2
src/main/resources/resources/layuimini/page/ProcessDefinition.html
...resources/resources/layuimini/page/ProcessDefinition.html
+211
-91
src/main/resources/resources/layuimini/page/ProcessInstance.html
...n/resources/resources/layuimini/page/ProcessInstance.html
+192
-0
src/main/resources/resources/layuimini/page/ToDoTasks.html
src/main/resources/resources/layuimini/page/ToDoTasks.html
+68
-9
src/main/resources/resources/layuimini/page/login-1.html
src/main/resources/resources/layuimini/page/login-1.html
+1
-1
src/main/resources/resources/layuimini/page/login-2.html
src/main/resources/resources/layuimini/page/login-2.html
+1
-1
src/main/resources/resources/layuimini/page/table/FormDataShow.html
...esources/resources/layuimini/page/table/FormDataShow.html
+166
-0
user.sql
user.sql
+12
-0
数据字典activiti7.pdm
数据字典activiti7.pdm
+0
-0
未找到文件。
src/main/java/com/imooc/activitiweb/ActivitiwebApplication.java
浏览文件 @
746b5e9a
...
...
@@ -11,3 +11,24 @@ public class ActivitiwebApplication {
}
}
/*
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
@SpringBootApplication(scanBasePackages = {"com.imooc.activitiweb"})
public class ActivitiwebApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(ActivitiwebApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(ActivitiwebApplication.class, args);
}
}*/
src/main/java/com/imooc/activitiweb/DemoApplicationConfiguration.java
浏览文件 @
746b5e9a
...
...
@@ -2,8 +2,6 @@ package com.imooc.activitiweb;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.security.core.authority.SimpleGrantedAuthority
;
import
org.springframework.security.core.userdetails.User
;
import
org.springframework.security.core.userdetails.UserDetailsService
;
...
...
src/main/java/com/imooc/activitiweb/controller/ActivitiHistoryController.java
浏览文件 @
746b5e9a
package
com.imooc.activitiweb.controller
;
import
com.imooc.activitiweb.SecurityUtil
;
import
com.imooc.activitiweb.pojo.UserInfoBean
;
import
com.imooc.activitiweb.util.AjaxResponse
;
import
com.imooc.activitiweb.util.GlobalConfig
;
import
org.activiti.bpmn.model.*
;
import
org.activiti.bpmn.model.Process
;
import
org.activiti.bpmn.model.*
;
import
org.activiti.engine.HistoryService
;
import
org.activiti.engine.RepositoryService
;
import
org.activiti.engine.history.HistoricActivityInstance
;
import
org.activiti.engine.history.HistoricProcessInstance
;
import
org.activiti.engine.history.HistoricTaskInstance
;
import
org.activiti.engine.history.HistoricTaskInstanceQuery
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.security.core.annotation.AuthenticationPrincipal
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.*
;
...
...
@@ -69,112 +73,125 @@ public class ActivitiHistoryController {
}
//流程图高亮
@
RequestMapping
(
"/
highLine"
)
@ResponseBody
public
Map
<
String
,
Object
>
getApplyStatus
(
String
instanceId
)
{
HistoricProcessInstance
historicProcessInstance
=
historyService
.
createHistoricProcessInstanceQuery
()
.
processInstanceId
(
instanceId
).
singleResult
();
//获取bpmnModel对象
BpmnModel
bpmnModel
=
repositoryService
.
getBpmnModel
(
historicProcessInstance
.
getProcessDefinitionId
());
//因为我们这里只定义了一个Process 所以获取集合中的第一个即可
Process
process
=
bpmnModel
.
getProcesses
().
get
(
0
);
//获取所有的FlowElement信息
Collection
<
FlowElement
>
flowElements
=
process
.
getFlowElements
();
Map
<
String
,
String
>
map
=
new
HashMap
<>();
for
(
FlowElement
flowElement
:
flowElements
)
{
//判断是否是连线
if
(
flowElement
instanceof
SequenceFlow
)
{
SequenceFlow
sequenceFlow
=
(
SequenceFlow
)
flowElement
;
String
ref
=
sequenceFlow
.
getSource
Ref
();
String
targetRef
=
sequenceFlow
.
getTargetRef
(
);
map
.
put
(
ref
+
targetRef
,
sequenceFlow
.
getId
());
//流程图高亮
@
GetMapping
(
"/get
highLine"
)
public
AjaxResponse
gethighLine
(
@RequestParam
(
"instanceId"
)
String
instanceId
,
@AuthenticationPrincipal
UserInfoBean
UuserInfoBean
)
{
try
{
HistoricProcessInstance
historicProcessInstance
=
historyService
.
createHistoricProcessInstanceQuery
()
.
processInstanceId
(
instanceId
).
singleResult
();
//获取bpmnModel对象
BpmnModel
bpmnModel
=
repositoryService
.
getBpmnModel
(
historicProcessInstance
.
getProcessDefinitionId
());
//因为我们这里只定义了一个Process 所以获取集合中的第一个即可
Process
process
=
bpmnModel
.
getProcesses
().
get
(
0
);
//获取所有的FlowElement信息
Collection
<
FlowElement
>
flowElements
=
process
.
getFlowElements
();
Map
<
String
,
String
>
map
=
new
HashMap
<>();
for
(
FlowElement
flowElement
:
flowElements
)
{
//判断是否是连线
if
(
flowElement
instanceof
SequenceFlow
)
{
SequenceFlow
sequenceFlow
=
(
SequenceFlow
)
flowElement
;
String
ref
=
sequenceFlow
.
getSourceRef
()
;
String
targetRef
=
sequenceFlow
.
getTarget
Ref
();
map
.
put
(
ref
+
targetRef
,
sequenceFlow
.
getId
()
);
}
}
}
//获取流程实例 历史节点(全部)
List
<
HistoricActivityInstance
>
list
=
historyService
.
createHistoricActivityInstanceQuery
()
.
processInstanceId
(
instanceId
)
.
list
();
//各个历史节点 两两组合 key
Set
<
String
>
keyList
=
new
HashSet
<>();
for
(
HistoricActivityInstance
i:
list
)
{
for
(
HistoricActivityInstance
j
:
list
){
if
(
i
!=
j
){
keyList
.
add
(
i
.
getActivityId
()+
j
.
getActivityId
());
//获取流程实例 历史节点(全部)
List
<
HistoricActivityInstance
>
list
=
historyService
.
createHistoricActivityInstanceQuery
()
.
processInstanceId
(
instanceId
)
.
list
();
//各个历史节点 两两组合 key
Set
<
String
>
keyList
=
new
HashSet
<>();
for
(
HistoricActivityInstance
i
:
list
)
{
for
(
HistoricActivityInstance
j
:
list
)
{
if
(
i
!=
j
)
{
keyList
.
add
(
i
.
getActivityId
()
+
j
.
getActivityId
());
}
}
}
}
//高亮连线ID
Set
<
String
>
highLine
=
new
HashSet
<>();
keyList
.
forEach
(
s
->
highLine
.
add
(
map
.
get
(
s
)));
//获取流程实例 历史节点(已完成)
List
<
HistoricActivityInstance
>
listFinished
=
historyService
.
createHistoricActivityInstanceQuery
()
.
processInstanceId
(
instanceId
)
.
finished
()
.
list
();
//高亮节点ID
Set
<
String
>
highPoint
=
new
HashSet
<>();
listFinished
.
forEach
(
s
->
highPoint
.
add
(
s
.
getActivityId
()));
//获取流程实例 历史节点(待办节点)
List
<
HistoricActivityInstance
>
listUnFinished
=
historyService
.
createHistoricActivityInstanceQuery
()
.
processInstanceId
(
instanceId
)
.
unfinished
()
.
list
();
//需要移除的高亮连线
Set
<
String
>
set
=
new
HashSet
<>();
//待办高亮节点
Set
<
String
>
waitingToDo
=
new
HashSet
<>();
listUnFinished
.
forEach
(
s
->{
waitingToDo
.
add
(
s
.
getActivityId
());
//高亮连线ID
Set
<
String
>
highLine
=
new
HashSet
<>();
keyList
.
forEach
(
s
->
highLine
.
add
(
map
.
get
(
s
)));
for
(
FlowElement
flowElement
:
flowElements
)
{
//判断是否是 用户节点
if
(
flowElement
instanceof
UserTask
)
{
UserTask
userTask
=
(
UserTask
)
flowElement
;
if
(
userTask
.
getId
().
equals
(
s
.
getActivityId
())){
List
<
SequenceFlow
>
outgoingFlows
=
userTask
.
getOutgoingFlows
();
//因为 高亮连线查询的是所有节点 两两组合 把待办 之后 往外发出的连线 也包含进去了 所以要把高亮待办节点 之后 即出的连线去掉
if
(
outgoingFlows
!=
null
&&
outgoingFlows
.
size
()>
0
){
outgoingFlows
.
forEach
(
a
->
{
if
(
a
.
getSourceRef
().
equals
(
s
.
getActivityId
())){
set
.
add
(
a
.
getId
());
}
});
//获取流程实例 历史节点(已完成)
List
<
HistoricActivityInstance
>
listFinished
=
historyService
.
createHistoricActivityInstanceQuery
()
.
processInstanceId
(
instanceId
)
.
finished
()
.
list
();
//高亮节点ID
Set
<
String
>
highPoint
=
new
HashSet
<>();
listFinished
.
forEach
(
s
->
highPoint
.
add
(
s
.
getActivityId
()));
//获取流程实例 历史节点(待办节点)
List
<
HistoricActivityInstance
>
listUnFinished
=
historyService
.
createHistoricActivityInstanceQuery
()
.
processInstanceId
(
instanceId
)
.
unfinished
()
.
list
();
//需要移除的高亮连线
Set
<
String
>
set
=
new
HashSet
<>();
//待办高亮节点
Set
<
String
>
waitingToDo
=
new
HashSet
<>();
listUnFinished
.
forEach
(
s
->
{
waitingToDo
.
add
(
s
.
getActivityId
());
for
(
FlowElement
flowElement
:
flowElements
)
{
//判断是否是 用户节点
if
(
flowElement
instanceof
UserTask
)
{
UserTask
userTask
=
(
UserTask
)
flowElement
;
if
(
userTask
.
getId
().
equals
(
s
.
getActivityId
()))
{
List
<
SequenceFlow
>
outgoingFlows
=
userTask
.
getOutgoingFlows
();
//因为 高亮连线查询的是所有节点 两两组合 把待办 之后 往外发出的连线 也包含进去了 所以要把高亮待办节点 之后 即出的连线去掉
if
(
outgoingFlows
!=
null
&&
outgoingFlows
.
size
()
>
0
)
{
outgoingFlows
.
forEach
(
a
->
{
if
(
a
.
getSourceRef
().
equals
(
s
.
getActivityId
()))
{
set
.
add
(
a
.
getId
());
}
});
}
}
}
}
}
});
});
highLine
.
removeAll
(
set
);
highLine
.
removeAll
(
set
);
//获取当前用户
//User sysUser = getSysUser();
Set
<
String
>
iDo
=
new
HashSet
<>();
//存放 高亮 我的办理节点
//当前用户已完成的任务
List
<
HistoricTaskInstance
>
taskInstanceList
=
historyService
.
createHistoricTaskInstanceQuery
()
.
taskAssignee
(
"bajie"
)
.
finished
()
.
processInstanceId
(
instanceId
).
list
();
//获取当前用户
//User sysUser = getSysUser();
Set
<
String
>
iDo
=
new
HashSet
<>();
//存放 高亮 我的办理节点
//当前用户已完成的任务
String
AssigneeName
=
null
;
if
(
GlobalConfig
.
Test
)
{
AssigneeName
=
"bajie"
;
}
else
{
AssigneeName
=
UuserInfoBean
.
getUsername
();
}
List
<
HistoricTaskInstance
>
taskInstanceList
=
historyService
.
createHistoricTaskInstanceQuery
()
.
taskAssignee
(
AssigneeName
)
.
finished
()
.
processInstanceId
(
instanceId
).
list
();
taskInstanceList
.
forEach
(
a
->
iDo
.
add
(
a
.
getTaskDefinitionKey
()));
taskInstanceList
.
forEach
(
a
->
iDo
.
add
(
a
.
getTaskDefinitionKey
()));
Map
<
String
,
Object
>
reMap
=
new
HashMap
<>();
reMap
.
put
(
"highPoint"
,
highPoint
);
reMap
.
put
(
"highLine"
,
highLine
);
reMap
.
put
(
"waitingToDo"
,
waitingToDo
);
reMap
.
put
(
"iDo"
,
iDo
);
Map
<
String
,
Object
>
reMap
=
new
HashMap
<>();
reMap
.
put
(
"highPoint"
,
highPoint
);
reMap
.
put
(
"highLine"
,
highLine
);
reMap
.
put
(
"waitingToDo"
,
waitingToDo
);
reMap
.
put
(
"iDo"
,
iDo
);
return
reMap
;
return
AjaxResponse
.
AjaxData
(
GlobalConfig
.
ResponseCode
.
SUCCESS
.
getCode
(),
GlobalConfig
.
ResponseCode
.
SUCCESS
.
getDesc
(),
reMap
);
}
catch
(
Exception
e
)
{
return
AjaxResponse
.
AjaxData
(
GlobalConfig
.
ResponseCode
.
ERROR
.
getCode
(),
"渲染历史流程失败"
,
e
.
toString
());
}
}
...
...
src/main/java/com/imooc/activitiweb/controller/HelloController.java
浏览文件 @
746b5e9a
...
...
@@ -3,8 +3,8 @@ package com.imooc.activitiweb.controller;
import
com.imooc.activitiweb.SecurityUtil
;
import
com.imooc.activitiweb.mapper.ActivitiMapper
;
import
com.imooc.activitiweb.pojo.UserInfoBean
;
import
com.imooc.activitiweb.pojo.Act_ru_task
;
import
com.imooc.activitiweb.pojo.UserInfoBean
;
import
com.imooc.activitiweb.util.AjaxResponse
;
import
com.imooc.activitiweb.util.GlobalConfig
;
import
org.activiti.api.process.model.ProcessInstance
;
...
...
@@ -13,11 +13,11 @@ import org.activiti.api.process.runtime.ProcessRuntime;
import
org.activiti.api.runtime.shared.query.Page
;
import
org.activiti.api.runtime.shared.query.Pageable
;
import
org.activiti.api.task.model.Task
;
import
org.activiti.api.task.model.builders.TaskPayloadBuilder
;
import
org.activiti.api.task.runtime.TaskRuntime
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.security.core.annotation.AuthenticationPrincipal
;
import
org.springframework.security.core.context.SecurityContextHolder
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.List
;
...
...
@@ -37,6 +37,8 @@ public class HelloController {
private
ProcessRuntime
processRuntime
;
@RequestMapping
(
value
=
"/hello"
,
method
=
RequestMethod
.
GET
)
public
String
say
()
{
return
"你好"
;
...
...
@@ -94,6 +96,7 @@ public class HelloController {
.
withProcessDefinitionKey
(
processDefinitionKey
)
.
withName
(
instanceName
)
.
withVariable
(
"assignee"
,
"bajie"
)
.
withVariable
(
"day"
,
"4"
)
.
withBusinessKey
(
"自定义BusinessKey"
)
.
build
());
return
AjaxResponse
.
AjaxData
(
GlobalConfig
.
ResponseCode
.
SUCCESS
.
getCode
(),
...
...
@@ -104,4 +107,27 @@ public class HelloController {
}
}
//完成待办任务带参数
@GetMapping
(
value
=
"/testcompleteTask"
)
public
AjaxResponse
testcompleteTask
(
@RequestParam
(
"taskID"
)
String
taskID
)
{
try
{
if
(
GlobalConfig
.
Test
)
{
securityUtil
.
logInAs
(
"bajie"
);
}
Task
task
=
taskRuntime
.
task
(
taskID
);
taskRuntime
.
complete
(
TaskPayloadBuilder
.
complete
().
withTaskId
(
task
.
getId
())
.
withVariable
(
"day"
,
"2"
)
//执行环节设置变量
.
build
());
return
AjaxResponse
.
AjaxData
(
GlobalConfig
.
ResponseCode
.
SUCCESS
.
getCode
(),
GlobalConfig
.
ResponseCode
.
SUCCESS
.
getDesc
(),
null
);
}
catch
(
Exception
e
)
{
return
AjaxResponse
.
AjaxData
(
GlobalConfig
.
ResponseCode
.
ERROR
.
getCode
(),
"完成失败"
,
e
.
toString
());
}
}
}
src/main/java/com/imooc/activitiweb/controller/ProcessDefinitionController.java
浏览文件 @
746b5e9a
package
com.imooc.activitiweb.controller
;
import
com.imooc.activitiweb.SecurityUtil
;
import
com.imooc.activitiweb.mapper.ActivitiMapper
;
import
com.imooc.activitiweb.util.AjaxResponse
;
import
com.imooc.activitiweb.util.GlobalConfig
;
import
org.activiti.api.process.runtime.ProcessRuntime
;
import
org.activiti.engine.RepositoryService
;
import
org.activiti.engine.repository.Deployment
;
...
...
@@ -12,9 +12,11 @@ import org.apache.commons.io.FilenameUtils;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.multipart.MultipartFile
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.File
;
import
java.io.InputStream
;
import
java.io.OutputStream
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
...
...
@@ -23,10 +25,6 @@ import java.util.UUID;
import
java.util.zip.ZipInputStream
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
@RestController
@RequestMapping
(
"/processDefinition"
)
public
class
ProcessDefinitionController
{
...
...
@@ -40,6 +38,9 @@ public class ProcessDefinitionController {
@Autowired
private
SecurityUtil
securityUtil
;
@Autowired
ActivitiMapper
mapper
;
@PostMapping
(
value
=
"/uploadStreamAndDeployment"
)
public
AjaxResponse
uploadStreamAndDeployment
(
@RequestParam
(
"processFile"
)
MultipartFile
multipartFile
)
{
...
...
@@ -118,14 +119,14 @@ public class ProcessDefinitionController {
* @return
*/
@PostMapping
(
value
=
"/addDeploymentByFileNameBPMN"
)
public
AjaxResponse
addDeploymentByFileNameBPMN
(
@RequestParam
(
"deploymentFileUUID"
)
String
deploymentFileUUID
,
@RequestParam
(
"deploymentName"
)
String
deploymentName
)
{
public
AjaxResponse
addDeploymentByFileNameBPMN
(
@RequestParam
(
"deploymentFileUUID"
)
String
deploymentFileUUID
,
@RequestParam
(
"deploymentName"
)
String
deploymentName
)
{
try
{
String
filename
=
"resources/bpmn/"
+
deploymentFileUUID
;
Deployment
deployment
=
repositoryService
.
createDeployment
()
//初始化流程
.
addClasspathResource
(
filename
)
.
name
(
deploymentName
)
.
deploy
();
System
.
out
.
println
(
deployment
.
getName
());
//
System.out.println(deployment.getName());
return
AjaxResponse
.
AjaxData
(
GlobalConfig
.
ResponseCode
.
SUCCESS
.
getCode
(),
GlobalConfig
.
ResponseCode
.
SUCCESS
.
getDesc
(),
deployment
.
getId
());
}
catch
(
Exception
e
)
{
...
...
@@ -136,13 +137,13 @@ public class ProcessDefinitionController {
}
@PostMapping
(
value
=
"/addDeploymentByString"
)
public
AjaxResponse
addDeploymentByString
(
@RequestParam
(
"stringBPMN"
)
String
stringBPMN
,
@RequestParam
(
"deploymentName"
)
String
deploymentName
)
{
public
AjaxResponse
addDeploymentByString
(
@RequestParam
(
"stringBPMN"
)
String
stringBPMN
)
{
try
{
Deployment
deployment
=
repositoryService
.
createDeployment
()
.
addString
(
"
OnLine
.bpmn"
,
stringBPMN
)
.
name
(
deploymentName
)
.
addString
(
"
CreateWithBPMNJS
.bpmn"
,
stringBPMN
)
.
name
(
"不知道在哪显示的部署名称"
)
.
deploy
();
System
.
out
.
println
(
deployment
.
getName
());
//
System.out.println(deployment.getName());
return
AjaxResponse
.
AjaxData
(
GlobalConfig
.
ResponseCode
.
SUCCESS
.
getCode
(),
GlobalConfig
.
ResponseCode
.
SUCCESS
.
getDesc
(),
deployment
.
getId
());
}
catch
(
Exception
e
)
{
...
...
@@ -190,12 +191,13 @@ public class ProcessDefinitionController {
for
(
ProcessDefinition
pd
:
list
)
{
HashMap
<
String
,
Object
>
hashMap
=
new
HashMap
<>();
System
.
out
.
println
(
"流程定义ID:"
+
pd
.
getId
());
hashMap
.
put
(
"Name"
,
pd
.
getName
());
hashMap
.
put
(
"Key"
,
pd
.
getKey
());
hashMap
.
put
(
"ResourceName"
,
pd
.
getResourceName
());
hashMap
.
put
(
"DeploymentId"
,
pd
.
getDeploymentId
());
hashMap
.
put
(
"Version"
,
pd
.
getVersion
());
//System.out.println("流程定义ID:"+pd.getId());
hashMap
.
put
(
"processDefinitionID"
,
pd
.
getId
());
hashMap
.
put
(
"name"
,
pd
.
getName
());
hashMap
.
put
(
"key"
,
pd
.
getKey
());
hashMap
.
put
(
"resourceName"
,
pd
.
getResourceName
());
hashMap
.
put
(
"deploymentID"
,
pd
.
getDeploymentId
());
hashMap
.
put
(
"version"
,
pd
.
getVersion
());
listMap
.
add
(
hashMap
);
}
...
...
@@ -235,13 +237,14 @@ public class ProcessDefinitionController {
@GetMapping
(
value
=
"/getDeployments"
)
public
AjaxResponse
getDeployments
()
{
try
{
List
<
HashMap
<
String
,
Object
>>
listMap
=
new
ArrayList
<
HashMap
<
String
,
Object
>>();
List
<
Deployment
>
list
=
repositoryService
.
createDeploymentQuery
().
list
();
for
(
Deployment
dep
:
list
)
{
HashMap
<
String
,
Object
>
hashMap
=
new
HashMap
<>();
hashMap
.
put
(
"
ID
"
,
dep
.
getId
());
hashMap
.
put
(
"
N
ame"
,
dep
.
getName
());
hashMap
.
put
(
"
D
eploymentTime"
,
dep
.
getDeploymentTime
());
hashMap
.
put
(
"
id
"
,
dep
.
getId
());
hashMap
.
put
(
"
n
ame"
,
dep
.
getName
());
hashMap
.
put
(
"
d
eploymentTime"
,
dep
.
getDeploymentTime
());
listMap
.
add
(
hashMap
);
}
...
...
@@ -258,10 +261,13 @@ public class ProcessDefinitionController {
//删除流程定义
@GetMapping
(
value
=
"/delDefinition"
)
public
AjaxResponse
delDefinition
(
@RequestParam
(
"pdID"
)
String
pdID
)
{
public
AjaxResponse
delDefinition
(
@RequestParam
(
"
depID"
)
String
depID
,
@RequestParam
(
"
pdID"
)
String
pdID
)
{
try
{
repositoryService
.
deleteDeployment
(
pdID
,
true
);
//删除数据
int
result
=
mapper
.
DeleteFormData
(
pdID
);
repositoryService
.
deleteDeployment
(
depID
,
true
);
return
AjaxResponse
.
AjaxData
(
GlobalConfig
.
ResponseCode
.
SUCCESS
.
getCode
(),
"删除成功"
,
null
);
...
...
src/main/java/com/imooc/activitiweb/controller/ProcessInstanceController.java
浏览文件 @
746b5e9a
package
com.imooc.activitiweb.controller
;
import
com.imooc.activitiweb.SecurityUtil
;
import
com.imooc.activitiweb.pojo.UserInfoBean
;
import
com.imooc.activitiweb.util.AjaxResponse
;
import
com.imooc.activitiweb.util.GlobalConfig
;
import
com.imooc.activitiweb.pojo.UserInfoBean
;
import
org.activiti.api.model.shared.model.VariableInstance
;
import
org.activiti.api.process.model.ProcessInstance
;
import
org.activiti.api.process.model.builders.ProcessPayloadBuilder
;
import
org.activiti.api.process.runtime.ProcessRuntime
;
import
org.activiti.api.runtime.shared.query.Page
;
import
org.activiti.api.runtime.shared.query.Pageable
;
import
org.activiti.engine.RepositoryService
;
import
org.activiti.engine.repository.ProcessDefinition
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.security.core.annotation.AuthenticationPrincipal
;
import
org.springframework.security.core.context.SecurityContextHolder
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
@RestController
...
...
@@ -27,6 +34,9 @@ public class ProcessInstanceController {
@Autowired
private
SecurityUtil
securityUtil
;
@Autowired
private
RepositoryService
repositoryService
;
...
...
@@ -42,22 +52,32 @@ public class ProcessInstanceController {
// securityUtil.logInAs(userInfoBean.getUsername());//这句不需要
// }
processInstances
=
processRuntime
.
processInstances
(
Pageable
.
of
(
0
,
50
));
System
.
out
.
println
(
"流程实例数量: "
+
processInstances
.
getTotalItems
());
//
System.out.println("流程实例数量: " + processInstances.getTotalItems());
List
<
ProcessInstance
>
list
=
processInstances
.
getContent
();
//list.sort((y,x)->x.getProcessDefinitionVersion()-y.getProcessDefinitionVersion());
list
.
sort
((
y
,
x
)->
x
.
getStartDate
().
toString
().
compareTo
(
y
.
getStartDate
().
toString
()));
List
<
HashMap
<
String
,
Object
>>
listMap
=
new
ArrayList
<
HashMap
<
String
,
Object
>>();
for
(
ProcessInstance
pi:
list
){
System
.
out
.
println
(
"getId:"
+
pi
.
getId
());
System
.
out
.
println
(
"getName:"
+
pi
.
getName
());
System
.
out
.
println
(
"getStatus:"
+
pi
.
getStatus
());
System
.
out
.
println
(
"getProcessDefinitionId:"
+
pi
.
getProcessDefinitionId
());
System
.
out
.
println
(
"getProcessDefinitionKey:"
+
pi
.
getProcessDefinitionKey
());
System
.
out
.
println
(
"getStartDate:"
+
pi
.
getStartDate
());
HashMap
<
String
,
Object
>
hashMap
=
new
HashMap
<>();
hashMap
.
put
(
"id"
,
pi
.
getId
());
hashMap
.
put
(
"name"
,
pi
.
getName
());
hashMap
.
put
(
"status"
,
pi
.
getStatus
());
hashMap
.
put
(
"processDefinitionId"
,
pi
.
getProcessDefinitionId
());
hashMap
.
put
(
"processDefinitionKey"
,
pi
.
getProcessDefinitionKey
());
hashMap
.
put
(
"startDate"
,
pi
.
getStartDate
());
hashMap
.
put
(
"processDefinitionVersion"
,
pi
.
getProcessDefinitionVersion
());
//因为processRuntime.processDefinition("流程部署ID")查询的结果没有部署流程与部署ID,所以用repositoryService查询
ProcessDefinition
pd
=
repositoryService
.
createProcessDefinitionQuery
()
.
processDefinitionId
(
pi
.
getProcessDefinitionId
())
.
singleResult
();
hashMap
.
put
(
"resourceName"
,
pd
.
getResourceName
());
hashMap
.
put
(
"deploymentId"
,
pd
.
getDeploymentId
());
listMap
.
add
(
hashMap
);
}
return
AjaxResponse
.
AjaxData
(
GlobalConfig
.
ResponseCode
.
SUCCESS
.
getCode
(),
GlobalConfig
.
ResponseCode
.
SUCCESS
.
getDesc
(),
processInstances
.
getContent
()
);
GlobalConfig
.
ResponseCode
.
SUCCESS
.
getDesc
(),
listMap
);
}
catch
(
Exception
e
)
{
return
AjaxResponse
.
AjaxData
(
GlobalConfig
.
ResponseCode
.
ERROR
.
getCode
(),
"获取流程实例失败"
,
e
.
toString
());
...
...
@@ -78,13 +98,12 @@ public class ProcessInstanceController {
}
else
{
securityUtil
.
logInAs
(
SecurityContextHolder
.
getContext
().
getAuthentication
().
getName
());
}
ProcessInstance
processInstance
=
processRuntime
.
start
(
ProcessPayloadBuilder
.
start
()
.
withProcessDefinitionKey
(
processDefinitionKey
)
.
withName
(
instanceName
)
.
withVariable
(
"content"
,
instanceVariable
)
.
withVariable
(
"参数2"
,
"参数2的值"
)
//
.withVariable("content", instanceVariable)
//
.withVariable("参数2", "参数2的值")
.
withBusinessKey
(
"自定义BusinessKey"
)
.
build
());
return
AjaxResponse
.
AjaxData
(
GlobalConfig
.
ResponseCode
.
SUCCESS
.
getCode
(),
...
...
src/main/java/com/imooc/activitiweb/controller/TaskController.java
浏览文件 @
746b5e9a
package
com.imooc.activitiweb.controller
;
import
com.imooc.activitiweb.SecurityUtil
;
import
com.imooc.activitiweb.mapper.ActivitiMapper
;
import
com.imooc.activitiweb.util.AjaxResponse
;
import
com.imooc.activitiweb.util.GlobalConfig
;
import
org.activiti.api.process.model.ProcessInstance
;
...
...
@@ -10,16 +11,19 @@ import org.activiti.api.runtime.shared.query.Pageable;
import
org.activiti.api.task.model.Task
;
import
org.activiti.api.task.model.builders.TaskPayloadBuilder
;
import
org.activiti.api.task.runtime.TaskRuntime
;
import
org.activiti.bpmn.model.FormProperty
;
import
org.activiti.bpmn.model.UserTask
;
import
org.activiti.engine.RepositoryService
;
import
org.apache.commons.lang3.BooleanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.bind.annotation.*
;
import
java.text.SimpleDateFormat
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
@RestController
@RequestMapping
(
"/task"
)
public
class
TaskController
{
...
...
@@ -32,6 +36,12 @@ public class TaskController {
@Autowired
private
ProcessRuntime
processRuntime
;
@Autowired
private
RepositoryService
repositoryService
;
@Autowired
ActivitiMapper
mapper
;
//获取我的代办任务
@GetMapping
(
value
=
"/getTasks"
)
public
AjaxResponse
getTasks
()
{
...
...
@@ -46,17 +56,17 @@ public class TaskController {
for
(
Task
tk
:
tasks
.
getContent
())
{
ProcessInstance
processInstance
=
processRuntime
.
processInstance
(
tk
.
getProcessInstanceId
());
HashMap
<
String
,
Object
>
hashMap
=
new
HashMap
<>();
hashMap
.
put
(
"
ID
"
,
tk
.
getId
());
hashMap
.
put
(
"
N
ame"
,
tk
.
getName
());
hashMap
.
put
(
"
S
tatus"
,
tk
.
getStatus
());
hashMap
.
put
(
"
C
reatedDate"
,
tk
.
getCreatedDate
());
if
(
tk
.
getAssignee
()
==
null
)
{
//执行人,null时前台显示未拾取
hashMap
.
put
(
"
A
ssignee"
,
"待拾取任务"
);
}
else
{
hashMap
.
put
(
"
A
ssignee"
,
tk
.
getAssignee
());
//
hashMap
.
put
(
"
id
"
,
tk
.
getId
());
hashMap
.
put
(
"
n
ame"
,
tk
.
getName
());
hashMap
.
put
(
"
s
tatus"
,
tk
.
getStatus
());
hashMap
.
put
(
"
c
reatedDate"
,
tk
.
getCreatedDate
());
if
(
tk
.
getAssignee
()
==
null
)
{
//执行人,null时前台显示未拾取
hashMap
.
put
(
"
a
ssignee"
,
"待拾取任务"
);
}
else
{
hashMap
.
put
(
"
a
ssignee"
,
tk
.
getAssignee
());
//
}
hashMap
.
put
(
"
I
nstanceName"
,
processInstance
.
getName
());
hashMap
.
put
(
"
i
nstanceName"
,
processInstance
.
getName
());
listMap
.
add
(
hashMap
);
}
...
...
@@ -84,7 +94,9 @@ public class TaskController {
if
(
task
.
getAssignee
()
==
null
)
{
taskRuntime
.
claim
(
TaskPayloadBuilder
.
claim
().
withTaskId
(
task
.
getId
()).
build
());
}
taskRuntime
.
complete
(
TaskPayloadBuilder
.
complete
().
withTaskId
(
task
.
getId
()).
build
());
taskRuntime
.
complete
(
TaskPayloadBuilder
.
complete
().
withTaskId
(
task
.
getId
())
//.withVariable("num", "2")//执行环节设置变量
.
build
());
return
AjaxResponse
.
AjaxData
(
GlobalConfig
.
ResponseCode
.
SUCCESS
.
getCode
(),
...
...
@@ -127,4 +139,165 @@ public class TaskController {
}
}
//渲染表单
@GetMapping
(
value
=
"/formDataShow"
)
public
AjaxResponse
formDataShow
(
@RequestParam
(
"taskID"
)
String
taskID
)
{
try
{
if
(
GlobalConfig
.
Test
)
{
securityUtil
.
logInAs
(
"bajie"
);
}
Task
task
=
taskRuntime
.
task
(
taskID
);
//-----------------------构建表单控件历史数据字典------------------------------------------------
//本实例所有保存的表单数据HashMap,为了快速读取控件以前环节存储的值
HashMap
<
String
,
String
>
controlistMap
=
new
HashMap
<>();
//本实例所有保存的表单数据
List
<
HashMap
<
String
,
Object
>>
tempControlList
=
mapper
.
selectFormData
(
task
.
getProcessInstanceId
());
for
(
HashMap
ls
:
tempControlList
)
{
//String Control_ID = ls.get("Control_ID_").toString();
//String Control_VALUE = ls.get("Control_VALUE_").toString();
controlistMap
.
put
(
ls
.
get
(
"Control_ID_"
).
toString
(),
ls
.
get
(
"Control_VALUE_"
).
toString
());
}
//String controlistMapValue = controlistMap.get("控件ID");
//controlistMap.containsKey()
//
/* ------------------------------------------------------------------------------
FormProperty_0ueitp2-_!类型-_!名称-_!默认值-_!是否参数
例子:
FormProperty_0lovri0-_!string-_!姓名-_!请输入姓名-_!f
FormProperty_1iu6onu-_!int-_!年龄-_!请输入年龄-_!s
默认值:无、字符常量、FormProperty_开头定义过的控件ID
是否参数:f为不是参数,s是字符,t是时间(不需要int,因为这里int等价于string)
注:类型是可以获取到的,但是为了统一配置原则,都配置到
*/
//注意!!!!!!!!:表单Key必须要任务编号一模一样,因为参数需要任务key,但是无法获取,只能获取表单key“task.getFormKey()”当做任务key
UserTask
userTask
=
(
UserTask
)
repositoryService
.
getBpmnModel
(
task
.
getProcessDefinitionId
())
.
getFlowElement
(
task
.
getFormKey
());
if
(
userTask
==
null
)
{
return
AjaxResponse
.
AjaxData
(
GlobalConfig
.
ResponseCode
.
SUCCESS
.
getCode
(),
GlobalConfig
.
ResponseCode
.
SUCCESS
.
getDesc
(),
"无表单"
);
}
List
<
FormProperty
>
formProperties
=
userTask
.
getFormProperties
();
List
<
HashMap
<
String
,
Object
>>
listMap
=
new
ArrayList
<
HashMap
<
String
,
Object
>>();
for
(
FormProperty
fp
:
formProperties
)
{
String
[]
splitFP
=
fp
.
getId
().
split
(
"-_!"
);
HashMap
<
String
,
Object
>
hashMap
=
new
HashMap
<>();
hashMap
.
put
(
"id"
,
splitFP
[
0
]);
hashMap
.
put
(
"controlType"
,
splitFP
[
1
]);
hashMap
.
put
(
"controlLable"
,
splitFP
[
2
]);
//默认值如果是表单控件ID
if
(
splitFP
[
3
].
startsWith
(
"FormProperty_"
))
{
//控件ID存在
if
(
controlistMap
.
containsKey
(
splitFP
[
3
]))
{
hashMap
.
put
(
"controlDefValue"
,
controlistMap
.
get
(
splitFP
[
3
]));
}
else
{
//控件ID不存在
hashMap
.
put
(
"controlDefValue"
,
"读取失败,检查"
+
splitFP
[
0
]
+
"配置"
);
}
}
else
{
//默认值如果不是表单控件ID则写入默认值
hashMap
.
put
(
"controlDefValue"
,
splitFP
[
3
]);
}
hashMap
.
put
(
"controlIsParam"
,
splitFP
[
4
]);
listMap
.
add
(
hashMap
);
}
return
AjaxResponse
.
AjaxData
(
GlobalConfig
.
ResponseCode
.
SUCCESS
.
getCode
(),
GlobalConfig
.
ResponseCode
.
SUCCESS
.
getDesc
(),
listMap
);
}
catch
(
Exception
e
)
{
return
AjaxResponse
.
AjaxData
(
GlobalConfig
.
ResponseCode
.
ERROR
.
getCode
(),
"失败"
,
e
.
toString
());
}
}
//保存表单
@PostMapping
(
value
=
"/formDataSave"
)
public
AjaxResponse
formDataSave
(
@RequestParam
(
"taskID"
)
String
taskID
,
@RequestParam
(
"formData"
)
String
formData
)
{
try
{
if
(
GlobalConfig
.
Test
)
{
securityUtil
.
logInAs
(
"bajie"
);
}
Task
task
=
taskRuntime
.
task
(
taskID
);
//formData:控件id-_!控件值-_!是否参数!_!控件id-_!控件值-_!是否参数
//FormProperty_0lovri0-_!不是参数-_!f!_!FormProperty_1iu6onu-_!数字参数-_!s
HashMap
<
String
,
Object
>
variables
=
new
HashMap
<
String
,
Object
>();
Boolean
hasVariables
=
false
;
//没有任何参数
List
<
HashMap
<
String
,
Object
>>
listMap
=
new
ArrayList
<>();
//前端传来的字符串,拆分成每个控件
String
[]
formDataList
=
formData
.
split
(
"!_!"
);
//
for
(
String
controlItem
:
formDataList
)
{
String
[]
formDataItem
=
controlItem
.
split
(
"-_!"
);
HashMap
<
String
,
Object
>
hashMap
=
new
HashMap
<>();
hashMap
.
put
(
"PROC_DEF_ID_"
,
task
.
getProcessDefinitionId
());
hashMap
.
put
(
"PROC_INST_ID_"
,
task
.
getProcessInstanceId
());
hashMap
.
put
(
"FORM_KEY_"
,
task
.
getFormKey
());
hashMap
.
put
(
"Control_ID_"
,
formDataItem
[
0
]);
hashMap
.
put
(
"Control_VALUE_"
,
formDataItem
[
1
]);
listMap
.
add
(
hashMap
);
//构建参数集合
switch
(
formDataItem
[
2
])
{
case
"f"
:
System
.
out
.
println
(
"控件值不作为参数"
);
break
;
case
"s"
:
variables
.
put
(
formDataItem
[
0
],
formDataItem
[
1
]);
hasVariables
=
true
;
break
;
case
"t"
:
SimpleDateFormat
timeFormat
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
);
variables
.
put
(
formDataItem
[
0
],
timeFormat
.
parse
(
formDataItem
[
2
]));
hasVariables
=
true
;
break
;
case
"b"
:
variables
.
put
(
formDataItem
[
0
],
BooleanUtils
.
toBoolean
(
formDataItem
[
2
]));
hasVariables
=
true
;
break
;
default
:
System
.
out
.
println
(
"控件参数类型配置错误:"
+
formDataItem
[
0
]
+
"的参数类型不存在,"
+
formDataItem
[
2
]);
}
}
//for结束
if
(
hasVariables
)
{
//带参数完成任务
taskRuntime
.
complete
(
TaskPayloadBuilder
.
complete
().
withTaskId
(
taskID
)
.
withVariables
(
variables
)
.
build
());
}
else
{
taskRuntime
.
complete
(
TaskPayloadBuilder
.
complete
().
withTaskId
(
taskID
)
.
build
());
}
//写入数据库
int
result
=
mapper
.
insertFormData
(
listMap
);
return
AjaxResponse
.
AjaxData
(
GlobalConfig
.
ResponseCode
.
SUCCESS
.
getCode
(),
GlobalConfig
.
ResponseCode
.
SUCCESS
.
getDesc
(),
listMap
);
}
catch
(
Exception
e
)
{
return
AjaxResponse
.
AjaxData
(
GlobalConfig
.
ResponseCode
.
ERROR
.
getCode
(),
"失败"
,
e
.
toString
());
}
}
}
src/main/java/com/imooc/activitiweb/controller/UserController.java
0 → 100644
浏览文件 @
746b5e9a
package
com.imooc.activitiweb.controller
;
import
com.imooc.activitiweb.mapper.ActivitiMapper
;
import
com.imooc.activitiweb.util.AjaxResponse
;
import
com.imooc.activitiweb.util.GlobalConfig
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.HashMap
;
import
java.util.List
;
@RestController
@RequestMapping
(
"/user"
)
public
class
UserController
{
@Autowired
ActivitiMapper
mapper
;
//获取用户
@GetMapping
(
value
=
"/getUsers"
)
public
AjaxResponse
getUsers
()
{
try
{
List
<
HashMap
<
String
,
Object
>>
userList
=
mapper
.
selectUser
();
return
AjaxResponse
.
AjaxData
(
GlobalConfig
.
ResponseCode
.
SUCCESS
.
getCode
(),
GlobalConfig
.
ResponseCode
.
SUCCESS
.
getDesc
(),
userList
);
}
catch
(
Exception
e
)
{
return
AjaxResponse
.
AjaxData
(
GlobalConfig
.
ResponseCode
.
ERROR
.
getCode
(),
"获取用户列表失败"
,
e
.
toString
());
}
}
}
src/main/java/com/imooc/activitiweb/listener/ErrServiceTaskListener.java
0 → 100644
浏览文件 @
746b5e9a
package
com.imooc.activitiweb.listener
;
import
org.activiti.engine.delegate.BpmnError
;
import
org.activiti.engine.delegate.DelegateExecution
;
import
org.activiti.engine.delegate.JavaDelegate
;
public
class
ErrServiceTaskListener
implements
JavaDelegate
{
@Override
public
void
execute
(
DelegateExecution
execution
)
{
throw
new
BpmnError
(
"Error_21ldg70"
);
}
}
src/main/java/com/imooc/activitiweb/listener/MultInstancesStartListener.java
0 → 100644
浏览文件 @
746b5e9a
package
com.imooc.activitiweb.listener
;
import
org.activiti.engine.delegate.DelegateExecution
;
import
org.activiti.engine.delegate.ExecutionListener
;
import
java.util.ArrayList
;
public
class
MultInstancesStartListener
implements
ExecutionListener
{
@Override
public
void
notify
(
DelegateExecution
execution
)
{
ArrayList
<
String
>
assigneeList
=
new
ArrayList
<>();
assigneeList
.
add
(
"bajie"
);
assigneeList
.
add
(
"wukong"
);
assigneeList
.
add
(
"salaboy"
);
execution
.
setVariable
(
"assigneeList"
,
assigneeList
);
//execution.setVariable("isPass",0);
}
}
src/main/java/com/imooc/activitiweb/listener/MultInstancesTKListener.java
0 → 100644
浏览文件 @
746b5e9a
package
com.imooc.activitiweb.listener
;
import
org.activiti.engine.delegate.DelegateTask
;
import
org.activiti.engine.delegate.TaskListener
;
public
class
MultInstancesTKListener
implements
TaskListener
{
@Override
public
void
notify
(
DelegateTask
delegateTask
)
{
System
.
out
.
println
(
"执行人:"
+
delegateTask
.
getAssignee
());
//根据任务节点逻辑查询实际需要的执行人是谁
delegateTask
.
setAssignee
(
"wukong"
);
}
}
src/main/java/com/imooc/activitiweb/listener/PiListener.java
0 → 100644
浏览文件 @
746b5e9a
package
com.imooc.activitiweb.listener
;
import
org.activiti.engine.delegate.DelegateExecution
;
import
org.activiti.engine.delegate.ExecutionListener
;
import
org.activiti.engine.delegate.Expression
;
import
org.springframework.beans.factory.annotation.Autowired
;
public
class
PiListener
implements
ExecutionListener
{
@Autowired
private
Expression
sendType
;
@Override
public
void
notify
(
DelegateExecution
execution
)
{
System
.
out
.
println
(
execution
.
getEventName
());
System
.
out
.
println
(
execution
.
getProcessDefinitionId
());
if
(
"start"
.
equals
(
execution
.
getEventName
())){
//记录节点开始时间
}
else
if
(
"end"
.
equals
(
execution
.
getEventName
())){
//记录节点结束时间
}
System
.
out
.
println
(
"sendType:"
+
sendType
.
getValue
(
execution
).
toString
());
}
}
src/main/java/com/imooc/activitiweb/listener/ServiceTaskListener1.java
0 → 100644
浏览文件 @
746b5e9a
package
com.imooc.activitiweb.listener
;
import
org.activiti.engine.delegate.DelegateExecution
;
import
org.activiti.engine.delegate.JavaDelegate
;
public
class
ServiceTaskListener1
implements
JavaDelegate
{
@Override
public
void
execute
(
DelegateExecution
execution
)
{
System
.
out
.
println
(
execution
.
getEventName
());
System
.
out
.
println
(
execution
.
getProcessDefinitionId
());
System
.
out
.
println
(
execution
.
getProcessInstanceId
());
execution
.
setVariable
(
"aa"
,
"bb"
);
}
}
src/main/java/com/imooc/activitiweb/listener/ServiceTaskListener2.java
0 → 100644
浏览文件 @
746b5e9a
package
com.imooc.activitiweb.listener
;
import
org.activiti.engine.delegate.DelegateExecution
;
import
org.activiti.engine.delegate.JavaDelegate
;
public
class
ServiceTaskListener2
implements
JavaDelegate
{
@Override
public
void
execute
(
DelegateExecution
execution
)
{
execution
.
getVariable
(
"aa"
);
System
.
out
.
println
(
execution
.
getVariable
(
"aa"
));
}
}
src/main/java/com/imooc/activitiweb/listener/TkListener1.java
0 → 100644
浏览文件 @
746b5e9a
package
com.imooc.activitiweb.listener
;
import
org.activiti.engine.delegate.DelegateTask
;
import
org.activiti.engine.delegate.TaskListener
;
public
class
TkListener1
implements
TaskListener
{
@Override
public
void
notify
(
DelegateTask
delegateTask
)
{
System
.
out
.
println
(
"执行人:"
+
delegateTask
.
getAssignee
());
//根据用户名查询用户电话并调用发送短信接口
delegateTask
.
setVariable
(
"delegateAssignee"
,
delegateTask
.
getAssignee
());
}
}
src/main/java/com/imooc/activitiweb/listener/TkListener2.java
0 → 100644
浏览文件 @
746b5e9a
package
com.imooc.activitiweb.listener
;
import
org.activiti.engine.delegate.DelegateTask
;
import
org.activiti.engine.delegate.TaskListener
;
public
class
TkListener2
implements
TaskListener
{
@Override
public
void
notify
(
DelegateTask
delegateTask
)
{
System
.
out
.
println
(
"执行人2:"
+
delegateTask
.
getVariable
(
"delegateAssignee"
));
//根据执行人username获取组织机构代码,加工后得到领导是wukong
delegateTask
.
setAssignee
(
"wukong"
);
}
}
src/main/java/com/imooc/activitiweb/mapper/ActivitiMapper.java
浏览文件 @
746b5e9a
...
...
@@ -3,10 +3,10 @@ package com.imooc.activitiweb.mapper;
import
com.imooc.activitiweb.pojo.Act_ru_task
;
import
org.apache.ibatis.annotations.Mapper
;
import
org.apache.ibatis.annotations.Select
;
import
org.apache.ibatis.annotations.*
;
import
org.springframework.stereotype.Component
;
import
java.util.HashMap
;
import
java.util.List
;
...
...
@@ -14,6 +14,42 @@ import java.util.List;
@Component
public
interface
ActivitiMapper
{
//读取表单
@Select
(
"SELECT Control_ID_,Control_VALUE_ from formdata where PROC_INST_ID_ = #{PROC_INST_ID}"
)
List
<
HashMap
<
String
,
Object
>>
selectFormData
(
@Param
(
"PROC_INST_ID"
)
String
PROC_INST_ID
);
//写入表单
@Insert
(
"<script> insert into formdata (PROC_DEF_ID_,PROC_INST_ID_,FORM_KEY_,Control_ID_,Control_VALUE_)"
+
" values"
+
" <foreach collection=\"maps\" item=\"formData\" index=\"index\" separator=\",\">"
+
" (#{formData.PROC_DEF_ID_,jdbcType=VARCHAR},#{formData.PROC_INST_ID_,jdbcType=VARCHAR},"
+
" #{formData.FORM_KEY_,jdbcType=VARCHAR}, #{formData.Control_ID_,jdbcType=VARCHAR},#{formData.Control_VALUE_,jdbcType=VARCHAR})"
+
" </foreach> </script>"
)
int
insertFormData
(
@Param
(
"maps"
)
List
<
HashMap
<
String
,
Object
>>
maps
);
//删除表单
@Delete
(
"DELETE FROM formdata WHERE PROC_DEF_ID_ = #{PROC_DEF_ID}"
)
int
DeleteFormData
(
@Param
(
"PROC_DEF_ID"
)
String
PROC_DEF_ID
);
//获取用户名
@Select
(
"SELECT name,username from user"
)
List
<
HashMap
<
String
,
Object
>>
selectUser
();
//测试
@Select
(
"select NAME_,TASK_DEF_KEY_ from act_ru_task"
)
List
<
Act_ru_task
>
selectName
();
//流程定义数
//SELECT COUNT(ID_) from ACT_RE_PROCDEF
//进行中的流程实例
//SELECT COUNT(DISTINCT PROC_INST_ID_) from act_ru_execution
//查询流程定义产生的流程实例数
/* SELECT p.NAME_,COUNT(DISTINCT e.PROC_INST_ID_) as PiNUM from act_ru_execution AS e
RIGHT JOIN ACT_RE_PROCDEF AS p on e.PROC_DEF_ID_ = p.ID_
WHERE p.NAME_ IS NOT NULL GROUP BY p.NAME_*/
}
src/main/java/com/imooc/activitiweb/security/
Browser
SecurityConfig.java
→
src/main/java/com/imooc/activitiweb/security/
Activiti
SecurityConfig.java
浏览文件 @
746b5e9a
...
...
@@ -6,7 +6,7 @@ import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import
org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter
;
@Configuration
public
class
Browser
SecurityConfig
extends
WebSecurityConfigurerAdapter
{
public
class
Activiti
SecurityConfig
extends
WebSecurityConfigurerAdapter
{
@Autowired
private
LoginSuccessHandler
loginSuccessHandler
;
...
...
src/main/java/com/imooc/activitiweb/security/
Browser
SecurityController.java
→
src/main/java/com/imooc/activitiweb/security/
Activiti
SecurityController.java
浏览文件 @
746b5e9a
...
...
@@ -15,7 +15,7 @@ import javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse
;
@RestController
public
class
Browser
SecurityController
{
public
class
Activiti
SecurityController
{
private
Logger
logger
=
LoggerFactory
.
getLogger
(
getClass
());
private
RequestCache
requestCache
=
new
HttpSessionRequestCache
();
private
RedirectStrategy
redirectStrategy
=
new
DefaultRedirectStrategy
();
...
...
src/main/java/com/imooc/activitiweb/security/MyUserDetailsService.java
浏览文件 @
746b5e9a
package
com.imooc.activitiweb.security
;
import
com.imooc.activitiweb.pojo.UserInfoBean
;
import
com.imooc.activitiweb.mapper.UserInfoBeanMapper
;
import
com.imooc.activitiweb.pojo.UserInfoBean
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
src/main/java/com/imooc/activitiweb/security/SimpleResponse.java
浏览文件 @
746b5e9a
...
...
@@ -15,7 +15,7 @@ public class SimpleResponse {
this
.
content
=
content
;
}
private
Object
content
;
private
Object
content
;
}
src/main/resources/application.yml
浏览文件 @
746b5e9a
...
...
@@ -2,11 +2,13 @@ server:
port
:
8080
servlet
:
context-path
:
/
session
:
timeout
:
9000
spring
:
datasource
:
username
:
root
password
:
YourPassWord_NiDeMiMa
url
:
jdbc:mysql://1
27.0.0.1:3306/activiti?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC&nullCatalogMeansCurrent=true
password
:
666666
url
:
jdbc:mysql://1
92.168.1.196:3306/activiti?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
driver-class-name
:
com.mysql.cj.jdbc.Driver
#日志的相关配置
logging
:
...
...
@@ -17,5 +19,4 @@ spring.activiti.history-level: full
spring.activiti.db-history-used
:
true
# spring-activiti
# 自动部署验证设置:true-开启(默认)、false-关闭
spring.activiti.check-process-definitions
:
false
spring.activiti.check-process-definitions
:
false
\ No newline at end of file
src/main/resources/resources/bpmnjs/.gitignore
浏览文件 @
746b5e9a
node_modules/
tmp/
\ No newline at end of file
tmp/
dist/
\ No newline at end of file
src/main/resources/resources/bpmnjs/app/index.html
浏览文件 @
746b5e9a
...
...
@@ -12,6 +12,7 @@
<style>
.item
{
display
:
none
;
cursor
:
pointer
;
}
.bjs-powered-by
{
display
:
none
;
...
...
@@ -78,28 +79,29 @@
<li
class=
"item upload"
>
<form
id=
"form1"
name=
"myForm"
onsubmit=
"return false"
method=
"post"
enctype=
"multipart/form-data"
title=
"上传文件"
>
<input
type=
"file"
name=
"uploadFile"
id=
"uploadFile"
accept=
".bpmn"
style=
"display: none"
>
<label
class=
"label"
for=
"uploadFile"
>
打开
</label>
<label
class=
"label"
for=
"uploadFile"
>
导入
</label>
</form>
</li>
<li
class=
"item download"
>
<a
class=
"btn"
href
id=
"downloadBpmn"
>
导出
</a>
</li>
<li
class=
"item submit"
>
<a
class=
"btn"
id=
"js-download-diagram"
>
提交
部署
</a>
</li>
<li
class=
"item download"
>
<a
class=
"btn"
href
id=
"saveBpmn"
>
下载
</a>
</li>
</ul>
<div
class=
"sy-alert sy-alert-model animated"
sy-enter=
"zoomIn"
sy-leave=
"zoomOut"
sy-type=
"confirm"
sy-mask=
"true"
id=
"alert"
>
<div
class=
"sy-title"
>
新增
流程
</div>
<div
class=
"sy-title"
>
部署
流程
</div>
<div
class=
"sy-content"
>
<div
class=
"form"
>
<p
class=
"input-item"
><input
id=
"deploymentName"
type=
"text"
placeholder=
"请输入流程名称"
></p>
</div>
确认是否部署该流程
<!-- <div class="form">-->
<!-- <p class="input-item"><input id="deploymentName" type="text" placeholder="请输入流程名称"></p>-->
<!-- </div>-->
</div>
<div
class=
"sy-btn"
>
<button
class=
"cancel"
>
取消
</button>
<button
id=
"sure"
>
确定
</button>
<button
class=
"cancel"
>
取消
</button>
</div>
</div>
<div
class=
"sy-mask cancel"
></div>
...
...
src/main/resources/resources/bpmnjs/app/index.js
浏览文件 @
746b5e9a
...
...
@@ -18,16 +18,7 @@ const publicurl = proHost + key;
var
customTranslateModule
=
{
translate
:
[
'
value
'
,
customTranslate
]
};
var
ColorJson
=
[{
'
name
'
:
'
test1
'
,
'
stroke
'
:
'
green
'
,
'
fill
'
:
'
yellow
'
},
{
'
name
'
:
'
test2
'
,
'
stroke
'
:
'
blue
'
,
'
fill
'
:
'
red
'
}]
debugger
var
container
=
$
(
'
#js-drop-zone
'
);
var
canvas
=
$
(
'
#js-canvas
'
);
var
bpmnModeler
=
new
BpmnModeler
({
...
...
@@ -61,34 +52,69 @@ $(function () {
if
(
param
.
type
===
'
addBpmn
'
)
{
tools
.
createDiagram
(
diagramXML
,
bpmnModeler
,
container
);
}
else
if
(
param
.
type
===
'
lookBpmn
'
)
{
//编辑bpmn
debugger
$
(
'
.item
'
).
hide
()
$
(
'
.download
'
).
show
()
const
Id
=
param
.
deploymentFileUUID
||
'
6d4af2dc-bab0-11ea-b584-3cf011eaafca
'
const
Name
=
param
.
deploymentName
||
'
String.bpmn
'
//加载后台方法获取xml
const
instanceId
=
param
.
instanceId
var
param
=
{
"
deploymentId
"
:
Id
,
"
resourceName
"
:
Name
"
resourceName
"
:
decodeURI
(
Name
)
}
$
.
ajax
({
url
:
publicurl
+
'
processDefinition/getDefinitionXML
'
,
type
:
'
GET
'
,
data
:
param
,
dataType
:
'
text
'
,
success
:
function
(
result
)
{
var
newXmlData
=
result
tools
.
createDiagram
(
newXmlData
,
bpmnModeler
,
container
);
setTimeout
(
function
()
{
for
(
var
i
in
ColorJson
)
{
tools
.
setColor
(
ColorJson
[
i
],
bpmnModeler
)
}
},
200
)
},
error
:
function
(
err
)
{
console
.
log
(
err
)
if
(
instanceId
){
var
param1
=
{
instanceId
}
});
$
.
ajax
({
url
:
publicurl
+
'
activitiHistory/gethighLine
'
,
type
:
'
GET
'
,
data
:
param1
,
dataType
:
'
json
'
,
success
:
function
(
result
)
{
var
ColorJson
=
tools
.
getByColor
(
result
.
obj
)
$
.
ajax
({
url
:
publicurl
+
'
processDefinition/getDefinitionXML
'
,
type
:
'
GET
'
,
data
:
param
,
dataType
:
'
text
'
,
success
:
function
(
result
)
{
var
newXmlData
=
result
tools
.
createDiagram
(
newXmlData
,
bpmnModeler
,
container
);
setTimeout
(
function
()
{
for
(
var
i
in
ColorJson
)
{
tools
.
setColor
(
ColorJson
[
i
],
bpmnModeler
)
}
},
200
)
},
error
:
function
(
err
)
{
console
.
log
(
err
)
}
});
},
error
:
function
(
err
)
{
console
.
log
(
err
)
}
});
}
else
{
//加载后台方法获取xml
$
.
ajax
({
url
:
publicurl
+
'
processDefinition/getDefinitionXML
'
,
type
:
'
GET
'
,
data
:
param
,
dataType
:
'
text
'
,
success
:
function
(
result
)
{
var
newXmlData
=
result
tools
.
createDiagram
(
newXmlData
,
bpmnModeler
,
container
);
},
error
:
function
(
err
)
{
console
.
log
(
err
)
}
});
}
}
else
if
(
param
.
type
===
"
historyBpmn
"
)
{
// bpmn历史
$
(
'
.item
'
).
hide
()
$
(
'
.download
'
).
show
()
}
// 点击新增
$
(
'
#js-download-diagram
'
).
on
(
"
click
"
,
function
()
{
...
...
@@ -101,14 +127,14 @@ $(function () {
})
// 点击确定
$
(
'
#sure
'
).
on
(
'
click
'
,
function
(){
const
text
=
$
(
"
#deploymentName
"
).
val
()
tools
.
saveBpmn
(
bpmnModeler
,
text
)
//
const text=$("#deploymentName").val()
tools
.
saveBpmn
(
bpmnModeler
)
})
// 点击下载
$
(
"
#
save
Bpmn
"
).
on
(
"
click
"
,
function
()
{
$
(
"
#
download
Bpmn
"
).
on
(
"
click
"
,
function
()
{
tools
.
downLoad
(
bpmnModeler
)
})
// 点击上传
...
...
src/main/resources/resources/bpmnjs/dist/index.html
浏览文件 @
746b5e9a
...
...
@@ -12,6 +12,7 @@
<style>
.item
{
display
:
none
;
cursor
:
pointer
;
}
.bjs-powered-by
{
display
:
none
;
...
...
@@ -78,28 +79,29 @@
<li
class=
"item upload"
>
<form
id=
"form1"
name=
"myForm"
onsubmit=
"return false"
method=
"post"
enctype=
"multipart/form-data"
title=
"上传文件"
>
<input
type=
"file"
name=
"uploadFile"
id=
"uploadFile"
accept=
".bpmn"
style=
"display: none"
>
<label
class=
"label"
for=
"uploadFile"
>
打开
</label>
<label
class=
"label"
for=
"uploadFile"
>
导入
</label>
</form>
</li>
<li
class=
"item download"
>
<a
class=
"btn"
href
id=
"downloadBpmn"
>
导出
</a>
</li>
<li
class=
"item submit"
>
<a
class=
"btn"
id=
"js-download-diagram"
>
提交
部署
</a>
</li>
<li
class=
"item download"
>
<a
class=
"btn"
href
id=
"saveBpmn"
>
下载
</a>
</li>
</ul>
<div
class=
"sy-alert sy-alert-model animated"
sy-enter=
"zoomIn"
sy-leave=
"zoomOut"
sy-type=
"confirm"
sy-mask=
"true"
id=
"alert"
>
<div
class=
"sy-title"
>
新增
流程
</div>
<div
class=
"sy-title"
>
部署
流程
</div>
<div
class=
"sy-content"
>
<div
class=
"form"
>
<p
class=
"input-item"
><input
id=
"deploymentName"
type=
"text"
placeholder=
"请输入流程名称"
></p>
</div>
确认是否部署该流程
<!-- <div class="form">-->
<!-- <p class="input-item"><input id="deploymentName" type="text" placeholder="请输入流程名称"></p>-->
<!-- </div>-->
</div>
<div
class=
"sy-btn"
>
<button
class=
"cancel"
>
取消
</button>
<button
id=
"sure"
>
确定
</button>
<button
class=
"cancel"
>
取消
</button>
</div>
</div>
<div
class=
"sy-mask cancel"
></div>
...
...
src/main/resources/resources/bpmnjs/dist/index.js
浏览文件 @
746b5e9a
此差异已折叠。
点击以展开。
src/main/resources/resources/bpmnjs/resources/activiti.json
浏览文件 @
746b5e9a
...
...
@@ -267,7 +267,7 @@
],
"properties"
:
[
{
"name"
:
"candidateStarter
Groups
"
,
"name"
:
"candidateStarter
Configuration
"
,
"isAttr"
:
true
,
"type"
:
"String"
},
...
...
@@ -291,6 +291,12 @@
"isAttr"
:
true
,
"type"
:
"Boolean"
,
"default"
:
true
},
{
"name"
:
"process-is-executable"
,
"isAttr"
:
true
,
"type"
:
"Boolean"
,
"default"
:
true
}
]
},
...
...
src/main/resources/resources/bpmnjs/resources/newDiagram.bpmn
浏览文件 @
746b5e9a
<?xml version="1.0" encoding="UTF-8"?>
<bpmn2:definitions
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xmlns:bpmn2=
"http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:bpmndi=
"http://www.omg.org/spec/BPMN/20100524/DI"
xmlns:dc=
"http://www.omg.org/spec/DD/20100524/DC"
xmlns:di=
"http://www.omg.org/spec/DD/20100524/DI"
xsi:schemaLocation=
"http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd"
id=
"sample-diagram"
targetNamespace=
"http://activiti.org/bpmn"
>
<bpmn2:process
id=
"Process_1"
isExecutable=
"
fals
e"
>
<bpmn2:process
id=
"Process_1"
isExecutable=
"
tru
e"
>
<bpmn2:startEvent
id=
"StartEvent_1"
/>
</bpmn2:process>
<bpmndi:BPMNDiagram
id=
"BPMNDiagram_1"
>
...
...
src/main/resources/resources/bpmnjs/resources/tools.js
浏览文件 @
746b5e9a
...
...
@@ -91,10 +91,6 @@ const tools = {
return
console
.
error
(
'
保存失败,请重试
'
,
err
);
}
console
.
log
(
xml
)
// const jsonObj = $x2j.xml2js(xml);
// console.log(jsonObj)
// let newXml = tools.camundaChangeActiviti(xml);
// console.log(newXml)
var
param
=
{
"
deploymentName
"
:
text
,
"
stringBPMN
"
:
xml
...
...
@@ -242,27 +238,6 @@ const tools = {
camundaChangeActiviti
(
xmlfile
){
const
objXML
=
xmlfile
.
replace
(
/camunda/gi
,
"
activiti
"
);
return
objXML
;
// for(let e in json){
// if(e=='extensionElements'&&json.extensionElements.formData&&json.extensionElements.formData.formField){
// json.extensionElements._businessKey=json.extensionElements.formData._businessKey
// let formProperty = JSON.parse(JSON.stringify(json.extensionElements.formData.formField))
// if(tools.isArrayFn(formProperty)){
// formProperty.forEach(x=>{
// x.__prefix='activiti'
// })
// } else {
// formProperty.__prefix='activiti'
// }
// json.extensionElements.formProperty = formProperty
// delete json.extensionElements.formData
// } else if(e.includes('camunda')){
// let str = e.replace('camunda','activiti')
// json[str] = json[e]
// delete json[e]
// } else if(typeof json[e] == 'object'){
// tools.camundaChangeActiviti(json[e])
// }
// }
},
/**
* 修改activiti为camunda
...
...
@@ -271,26 +246,6 @@ const tools = {
acitvitiChangeCamunda
(
xmlfile
){
const
objXML
=
xmlfile
.
replace
(
/activiti/gi
,
"
camunda
"
);
return
objXML
;
// for(let e in json){
// if(e=='extensionElements'&&json.extensionElements.formProperty){
// let formField = JSON.parse(JSON.stringify(json.extensionElements.formProperty))
// if(tools.isArrayFn(formField)){
// formField.forEach(x=>{
// x.__prefix='camunda'
// })
// } else {
// formField.__prefix='camunda'
// }
// json.extensionElements.formData = {
// formField,
// _businessKey:json.extensionElements._businessKey,
// __prefix:"camunda"
// }
// delete json.extensionElements.formProperty
// } else if(typeof json[e] == 'object'){
// tools.acitvitiChangeCamunda(json[e])
// }
// }
},
/**
...
...
@@ -304,6 +259,60 @@ const tools = {
}
else
{
return
Object
.
prototype
.
toString
.
call
(
value
)
===
"
[object Array]
"
;
}
},
/**
* 根据数据设置颜色
* @param data
* @returns {Array}
*/
getByColor
(
data
){
var
ColorJson
=
[]
for
(
var
i
in
data
){
switch
(
i
)
{
case
"
waitingToDo
"
:
for
(
var
k
in
data
[
i
]){
var
par
=
{
"
name
"
:
data
[
i
][
k
],
"
stroke
"
:
"
green
"
,
"
fill
"
:
"
yellow
"
}
ColorJson
.
push
(
par
)
}
break
case
"
highPoint
"
:
for
(
var
k
in
data
[
i
]){
var
par
=
{
"
name
"
:
data
[
i
][
k
],
"
stroke
"
:
"
gray
"
,
"
fill
"
:
"
#eae9e9
"
}
ColorJson
.
push
(
par
)
}
break
case
"
iDo
"
:
for
(
var
k
in
data
[
i
]){
var
par
=
{
"
name
"
:
data
[
i
][
k
],
"
stroke
"
:
"
green
"
,
"
fill
"
:
"
#a3d68e
"
}
ColorJson
.
push
(
par
)
}
break
case
"
highLine
"
:
for
(
var
k
in
data
[
i
]){
var
par
=
{
"
name
"
:
data
[
i
][
k
],
"
stroke
"
:
"
green
"
,
"
fill
"
:
"
green
"
}
ColorJson
.
push
(
par
)
}
break
}
}
return
ColorJson
}
}
...
...
src/main/resources/resources/layuimini/api/init.json
浏览文件 @
746b5e9a
...
...
@@ -4,7 +4,7 @@
"href"
:
"page/welcome-2.html?t=1"
},
"logoInfo"
:
{
"title"
:
"
慕课
工作流"
,
"title"
:
"工作流"
,
"image"
:
"images/logo.png"
,
"href"
:
""
},
...
...
@@ -23,13 +23,13 @@
},
{
"title"
:
"流程部署列表"
,
"href"
:
"page/ProcessDe
ployments
.html"
,
"href"
:
"page/ProcessDe
finition
.html"
,
"icon"
:
"fa fa-calendar"
,
"target"
:
"_self"
},
{
"title"
:
"流程实例列表"
,
"href"
:
"page/Process
Definition
.html"
,
"href"
:
"page/Process
Instance
.html"
,
"icon"
:
"fa fa-calendar"
,
"target"
:
"_self"
},
...
...
src/main/resources/resources/layuimini/css/public.css
浏览文件 @
746b5e9a
...
...
@@ -75,6 +75,9 @@ body {
.layui-table-tool-temp
{
padding-right
:
0
;
}
.layui-table
{
width
:
100%
!important
;
}
.floatR
{
float
:
right
;
}
...
...
src/main/resources/resources/layuimini/index.html
浏览文件 @
746b5e9a
...
...
@@ -2,9 +2,9 @@
<html>
<head>
<meta
charset=
"utf-8"
>
<title>
慕课
工作流
</title>
<meta
name=
"keywords"
content=
"
慕课
工作流"
>
<meta
name=
"description"
content=
"
慕课
工作流"
>
<title>
工作流
</title>
<meta
name=
"keywords"
content=
" 工作流"
>
<meta
name=
"description"
content=
" 工作流"
>
<meta
name=
"renderer"
content=
"webkit"
>
<meta
http-equiv=
"X-UA-Compatible"
content=
"IE=edge,chrome=1"
>
<meta
http-equiv=
"Access-Control-Allow-Origin"
content=
"*"
>
...
...
src/main/resources/resources/layuimini/page/HistoryTasks.html
浏览文件 @
746b5e9a
...
...
@@ -60,7 +60,7 @@
}
}
return
{
"
code
"
:
res
.
status
===
1
?
0
:
res
.
status
,
//解析接口状态,默认成功是0
"
code
"
:
res
.
status
,
//解析接口状态,默认成功是0
"
msg
"
:
res
.
msg
,
//解析提示文本
"
count
"
:
res
.
obj
.
length
,
//解析数据长度
"
data
"
:
res
.
obj
//解析数据列表
...
...
@@ -75,7 +75,6 @@
{
field
:
'
createTime
'
,
title
:
'
创建时间
'
,
minWidth
:
170
,
align
:
"
center
"
},
{
field
:
'
startTime
'
,
title
:
'
开始时间
'
,
minWidth
:
170
,
align
:
"
center
"
},
{
field
:
'
assignee
'
,
title
:
'
办理人
'
,
minWidth
:
90
,
align
:
"
center
"
},
{
title
:
'
操作
'
,
minWidth
:
200
,
toolbar
:
'
#currentTableBar
'
,
align
:
"
center
"
}
]],
limits
:
[
10
,
15
,
20
,
25
,
50
,
100
],
limit
:
10
,
...
...
@@ -83,6 +82,12 @@
skin
:
'
line
'
,
// id:'HistoryTasksTableId',
done
:
function
(
res
,
curr
,
count
)
{
if
(
res
.
code
==
1
){
layer
.
alert
(
res
.
msg
+
'
<br>
'
+
res
.
data
,
{
icon
:
2
,
title
:
"
提示
"
});
}
if
(
count
>
0
){
goPage
(
1
);
}
...
...
src/main/resources/resources/layuimini/page/ProcessDefinition.html
浏览文件 @
746b5e9a
...
...
@@ -7,59 +7,117 @@
<meta
http-equiv=
"X-UA-Compatible"
content=
"IE=edge,chrome=1"
>
<meta
name=
"viewport"
content=
"width=device-width, initial-scale=1, maximum-scale=1"
>
<link
rel=
"stylesheet"
href=
"../lib/layui-v2.5.5/css/layui.css"
media=
"all"
>
<link
rel=
"stylesheet"
href=
"../css/admins.css"
media=
"all"
>
<link
rel=
"stylesheet"
href=
"../css/public.css"
media=
"all"
>
</head>
<style>
.layui-upload-file
{
display
:
block
!important
;
position
:
absolute
;
left
:
52%
;
top
:
0
;
width
:
103px
;
height
:
38px
;
z-index
:
99
;
}
</style>
<body>
<div
class=
"layuimini-container"
>
<div
class=
"layuimini-main"
>
<script
type=
"text/html"
id=
"toolbarDemo"
>
<
div
class
=
"
layui-btn-container
"
>
<
span
class
=
"
layui-card-header
"
><
i
class
=
"
layui-icon layui-icon-form
"
><
/i> 流程实例列表</
span
>
<
span
class
=
"
layui-card-header
"
><
i
class
=
"
layui-icon layui-icon-form
"
><
/i> 流程部署列表</
span
>
<
button
class
=
"
layui-btn layui-btn-normal layui-btn-sm data-add-btn floatR
"
lay
-
event
=
"
draw
"
>
在线绘制流程
<
/button
>
<
button
class
=
"
layui-btn layui-btn-normal layui-btn-sm data-add-btn floatR
"
lay
-
event
=
"
add
"
>
上传流程文件
<
/button
>
<
/div
>
</script>
<table
class=
"layui-hide"
id=
"ProcessDe
finition
TableId"
lay-filter=
"currentTableFilter"
></table>
<table
class=
"layui-hide"
id=
"ProcessDe
ployments
TableId"
lay-filter=
"currentTableFilter"
></table>
<!--分页-->
<div
class=
"layui-table-page layui-border-box"
>
<div
id=
"barcon"
class=
"page_div"
name=
"barcon"
></div>
</div>
<script
type=
"text/html"
id=
"currentTableBar"
>
{{
#
if
(
d
.
status
==
'
RUNNING
'
){
}}
<
a
class
=
"
layui-btn layui-btn-normal layui-btn-xs data-count-hangUp
"
lay
-
event
=
"
hangUp
"
>
挂起
<
/a
>
{{
#
}
else
{
}}
<
a
class
=
"
layui-btn layui-btn-success layui-btn-xs data-count-active
"
lay
-
event
=
"
active
"
>
激活
<
/a
>
{{
#
}
}}
<
a
class
=
"
layui-btn layui-btn-xs layui-btn-danger data-count-delete
"
lay
-
event
=
"
delete
"
>
删除
<
/a
>
<
a
class
=
"
layui-btn layui-btn-normal layui-btn-xs data-count-start
"
lay
-
event
=
"
start
"
>
启动实例
<
/a
>
<
a
class
=
"
layui-btn layui-btn-normal layui-btn-xs data-count-look
"
lay
-
event
=
"
look
"
>
查看
<
/a
>
<
a
class
=
"
layui-btn layui-btn-xs layui-btn-danger data-count-delete
"
lay
-
event
=
"
delete
"
>
删除部署
<
/a
>
</script>
</div>
</div>
<!-- 表单添加bpmn弹窗 -->
<script
type=
"text/html"
id=
"ProcessDepEditDialog"
>
<
form
id
=
"
ProcessDepForm
"
lay
-
filter
=
"
ProcessDepForm
"
class
=
"
layui-form model-form
"
enctype
=
"
multipart/form-data
"
>
<
div
class
=
"
layui-form-item
"
>
<
label
class
=
"
layui-form-label layui-form-required
"
>
上传文件
:
<
/label
>
<
div
class
=
"
layui-input-block
"
>
<
input
id
=
"
fileName
"
placeholder
=
""
class
=
"
layui-input DialogInput
"
lay
-
verType
=
"
tips
"
disabled
/>
<
button
type
=
"
button
"
class
=
"
layui-btn DialogBtn
"
id
=
"
uploadBpmn
"
><
i
class
=
"
layui-icon
"
>
<
/i>上传BPMN</
button
>
<
input
class
=
"
layui-upload-file
"
type
=
"
file
"
accept
=
""
name
=
"
processFile
"
id
=
"
uploadFile
"
>
<
/div
>
<
/div
>
<!--
<
div
class
=
"
layui-form-item
"
>-->
<!--
<
label
class
=
"
layui-form-label layui-form-required
"
>
流程名称
:
<
/label>--
>
<!--
<
div
class
=
"
layui-input-block
"
>-->
<!--
<
input
name
=
"
deploymentName
"
id
=
"
deploymentName
"
placeholder
=
"
请输入流程名称
"
class
=
"
layui-input
"
-->
<!--
lay
-
verType
=
"
tips
"
lay
-
verify
=
"
required
"
required
/>-->
<!--
<
/div>--
>
<!--
<
/div>--
>
<
div
class
=
"
layui-form-item text-center
"
>
<
button
class
=
"
layui-btn
"
lay
-
filter
=
"
ProcessDepEditSubmit
"
lay
-
submit
id
=
"
submit
"
>
提交
<
/button
>
<
button
class
=
"
layui-btn layui-btn-primary
"
type
=
"
button
"
ew
-
event
=
"
closeDialog
"
>
返回
<
/button
>
<
/div
>
<
/form
>
</script>
<!--启动实例弹窗-->
<script
type=
"text/html"
id=
"stratProcessDepEditDialog"
>
<
form
id
=
"
strarProcessDepForm
"
lay
-
filter
=
"
strarProcessDepForm
"
class
=
"
layui-form model-form
"
>
<
div
class
=
"
layui-form-item
"
>
<
label
class
=
"
layui-form-label layui-form-required
"
>
实例名称
:
<
/label
>
<
div
class
=
"
layui-input-block
"
>
<
input
name
=
"
deploymentName
"
id
=
"
instanceName
"
placeholder
=
"
请输入实例名称
"
class
=
"
layui-input
"
lay
-
verType
=
"
tips
"
lay
-
verify
=
"
required
"
required
/>
<
/div
>
<
/div
>
<
div
class
=
"
layui-form-item
"
>
<
label
class
=
"
layui-form-label layui-form-required
"
>
实例描述
:
<
/label
>
<
div
class
=
"
layui-input-block
"
>
<
input
name
=
"
deploymentName
"
id
=
"
instanceVariable
"
placeholder
=
"
请输入实例描述
"
class
=
"
layui-input
"
lay
-
verType
=
"
tips
"
lay
-
verify
=
"
required
"
required
/>
<
/div
>
<
/div
>
<
div
class
=
"
layui-form-item text-center
"
>
<
button
class
=
"
layui-btn
"
lay
-
filter
=
"
startProcessDepEditSubmit
"
lay
-
submit
id
=
"
submit2
"
>
提交
<
/button
>
<
button
class
=
"
layui-btn layui-btn-primary
"
type
=
"
button
"
ew
-
event
=
"
closeDialog
"
>
返回
<
/button
>
<
/div
>
<
/form
>
</script>
<script
src=
"../lib/layui-v2.5.5/layui.js"
charset=
"utf-8"
></script>
<script
src=
"../lib/jquery-3.4.1/jquery-3.4.1.min.js"
></script>
<script
src=
"../js/lay-config.js?v=1.0.4"
charset=
"utf-8"
></script>
<script
src=
"../js/ManualPaging.js"
></script>
<script>
layui
.
use
([
'
form
'
,
'
tabl
e
'
],
function
()
{
layui
.
use
([
'
form
'
,
'
table
'
,
'
admin
'
,
'
upload
'
,
'
laypag
e
'
],
function
()
{
var
$
=
layui
.
jquery
,
form
=
layui
.
form
,
table
=
layui
.
table
;
table
=
layui
.
table
,
upload
=
layui
.
upload
,
laypage
=
layui
.
laypage
,
admin
=
layui
.
admin
;
/*渲染列表*/
var
limitcount
=
10
;
var
curnum
=
1
;
var
insTb
=
table
.
render
({
elem
:
'
#ProcessDe
finition
TableId
'
,
elem
:
'
#ProcessDe
ployments
TableId
'
,
toolbar
:
'
#toolbarDemo
'
,
defaultToolbar
:
[
''
],
url
:
''
+
publicurl
+
'
process
Instance/getInstance
s
'
,
defaultToolbar
:
[],
url
:
''
+
publicurl
+
'
process
Definition/getDefinition
s
'
,
parseData
:
function
(
res
){
//res 即为原始返回的数据
// console.log(res.obj.length,"数据长度")
//处理时间
for
(
var
i
=
0
;
i
<
res
.
obj
.
length
;
i
++
){
for
(
k
in
res
.
obj
[
i
])
{
res
.
obj
[
i
][
"
startDate
"
]
=
renderTime
(
res
.
obj
[
i
].
startDate
)
}
}
return
{
"
code
"
:
res
.
status
===
1
?
0
:
res
.
status
,
//解析接口状态,默认成功是0
"
code
"
:
res
.
status
,
//解析接口状态,默认成功是0
"
msg
"
:
res
.
msg
,
//解析提示文本
"
count
"
:
res
.
obj
.
length
,
//解析数据长度
"
data
"
:
res
.
obj
//解析数据列表
...
...
@@ -67,100 +125,129 @@
},
cols
:
[[
{
type
:
"
checkbox
"
,
width
:
'
5%
'
,
align
:
"
center
"
},
{
field
:
'
id
'
,
width
:
'
22%
'
,
title
:
'
ID
'
,
align
:
"
center
"
},
{
field
:
'
processDefinitionKey
'
,
width
:
'
12%
'
,
title
:
'
实例名称
'
,
align
:
"
center
"
},
{
field
:
'
startDate
'
,
title
:
'
实例创建时间
'
,
width
:
'
15%
'
,
align
:
"
center
"
},
{
field
:
'
initiator
'
,
width
:
'
8%
'
,
title
:
'
创建人
'
,
align
:
"
center
"
},
{
field
:
'
processDefinitionId
'
,
title
:
'
流程定义编号
'
,
width
:
'
20%
'
,
align
:
"
center
"
},
{
field
:
'
processDefinitionVersion
'
,
width
:
'
6%
'
,
title
:
'
版本
'
,
align
:
"
center
"
},
{
title
:
'
操作
'
,
width
:
'
12
%
'
,
toolbar
:
'
#currentTableBar
'
,
align
:
"
center
"
}
{
field
:
'
processDefinitionID
'
,
width
:
'
12%
'
,
title
:
'
流程定义ID
'
,
sort
:
true
,
align
:
"
center
"
},
{
field
:
'
deploymentID
'
,
width
:
'
10%
'
,
title
:
'
部署ID
'
,
sort
:
true
,
align
:
"
center
"
},
{
field
:
'
name
'
,
width
:
'
15%
'
,
title
:
'
流程定义名称
'
,
align
:
"
center
"
},
{
field
:
'
resourceName
'
,
width
:
'
15%
'
,
title
:
'
流程文件名称
'
,
align
:
"
center
"
},
{
field
:
'
key
'
,
width
:
'
14%
'
,
title
:
'
KEY
'
,
align
:
"
center
"
},
{
field
:
'
version
'
,
width
:
'
9%
'
,
title
:
'
部署
版本
'
,
align
:
"
center
"
},
{
title
:
'
操作
'
,
width
:
'
20
%
'
,
toolbar
:
'
#currentTableBar
'
,
align
:
"
center
"
}
]],
limits
:
[
10
,
15
,
20
,
25
,
50
,
100
],
limit
:
10
,
page
:
false
,
skin
:
'
line
'
,
// id:'ProcessDe
finition
TableId',
// id:'ProcessDe
ployments
TableId',
done
:
function
(
res
,
curr
,
count
)
{
if
(
res
.
code
==
1
){
layer
.
alert
(
res
.
msg
+
'
<br>
'
+
res
.
data
,
{
icon
:
2
,
title
:
"
提示
"
});
}
if
(
count
>
0
){
goPage
(
1
);
}
}
});
insTb
.
reload
();
/**
* toolbar监听事件
* toolbar添加bpmn事件
* 新增 ?type=addBpmn
编辑 ?type=editBpmn&id=xxx
*/
table
.
on
(
'
toolbar(currentTableFilter)
'
,
function
(
obj
)
{
if
(
obj
.
event
===
'
add
'
)
{
// 监听添加操作
showEditModel
();
}
else
if
(
obj
.
event
===
'
draw
'
){
window
.
open
(
''
+
publicurl
+
'
bpmnjs/dist/index.html?type=addBpmn
'
);
}
});
/*表格启动 删除事件*/
table
.
on
(
'
tool(currentTableFilter)
'
,
function
(
obj
)
{
if
(
obj
.
event
===
'
hangUp
'
)
{
// 监听挂起操作
doHangUp
(
obj
);
}
else
if
(
obj
.
event
===
'
active
'
){
// 监听激活操作
doActive
(
obj
);
}
else
if
(
obj
.
event
===
'
delete
'
)
{
// 监听删除操作
var
data
=
obj
.
data
;
var
editData
=
JSON
.
stringify
(
data
);
if
(
obj
.
event
===
'
start
'
)
{
stratProcessDepEditDialog
(
obj
);
}
else
if
(
obj
.
event
===
'
delete
'
)
{
doDel
(
obj
);
}
else
if
(
obj
.
event
===
'
look
'
){
window
.
open
(
''
+
publicurl
+
'
bpmnjs/dist/index.html?type=lookBpmn&deploymentFileUUID=
'
+
data
.
deploymentID
+
'
&deploymentName=
'
+
encodeURI
(
data
.
resourceName
)
+
''
);
}
});
function
renderTime
(
date
)
{
var
dateee
=
new
Date
(
date
).
toJSON
();
return
new
Date
(
+
new
Date
(
dateee
)
+
8
*
3600
*
1000
).
toISOString
().
replace
(
/T/g
,
'
'
).
replace
(
/
\.[\d]{3}
Z/
,
''
)
}
//监听表格复选框选择
table
.
on
(
'
checkbox(currentTableFilter)
'
,
function
(
obj
)
{
console
.
log
(
obj
)
});
/* 挂起流程定义 */
function
doHangUp
(
obj
)
{
console
.
log
(
obj
,
"
单条数据
"
);
layer
.
confirm
(
'
确定要挂起该流程吗?
'
,
{
skin
:
'
layui-layer-admin
'
,
shade
:
.
1
},
function
(
i
)
{
layer
.
close
(
i
);
var
loadIndex
=
layer
.
load
(
2
);
$
.
get
(
''
+
publicurl
+
'
processInstance/suspendInstance
'
,
{
instanceID
:
obj
.
data
?
obj
.
data
.
id
:
''
,
},
function
(
res
)
{
layer
.
close
(
loadIndex
);
if
(
res
.
status
===
0
)
{
layer
.
msg
(
res
.
msg
,
{
icon
:
1
});
insTb
.
reload
();
}
else
{
layer
.
alert
(
res
.
msg
+
'
<br>
'
+
res
.
obj
,
{
icon
:
2
});
}
},
'
json
'
);
});
};
/* 激活流程定义 */
function
doActive
(
obj
)
{
layer
.
confirm
(
'
确定要激活该流程吗?
'
,
{
skin
:
'
layui-layer-admin
'
,
shade
:
.
1
},
function
(
i
)
{
layer
.
close
(
i
);
var
loadIndex
=
layer
.
load
(
2
);
$
.
get
(
''
+
publicurl
+
'
processInstance/resumeInstance
'
,
{
instanceID
:
obj
.
data
?
obj
.
data
.
id
:
''
,
},
function
(
res
)
{
layer
.
close
(
loadIndex
);
if
(
res
.
status
===
0
)
{
layer
.
msg
(
res
.
msg
,
{
icon
:
1
});
insTb
.
reload
();
}
else
{
layer
.
alert
(
res
.
msg
+
'
<br>
'
+
res
.
obj
,
{
icon
:
2
});
}
},
'
json
'
);
/* 上传流程文件 */
function
showEditModel
(
mData
)
{
admin
.
open
({
type
:
1
,
title
:
(
mData
?
'
修改
'
:
'
添加
'
)
+
'
信息
'
,
content
:
$
(
'
#ProcessDepEditDialog
'
).
html
(),
success
:
function
(
layero
,
dIndex
)
{
//上传BPMN-输入框赋值
var
$fileName
=
$
(
"
#fileName
"
);
$fileName
.
val
(
""
);
$
(
"
#uploadFile
"
).
on
(
"
change
"
,
function
(
e
)
{
var
e
=
e
||
window
.
event
;
var
files
=
e
.
target
.
files
;
if
(
files
.
length
>
0
){
// 获取文件名 并显示文件名
var
fileName
=
files
[
0
].
name
;
$fileName
.
val
(
fileName
);
}
else
{
//清空文件名
$fileName
.
val
(
""
);
}
});
// 表单提交事件
form
.
on
(
'
submit(ProcessDepEditSubmit)
'
,
function
(
data
)
{
layer
.
close
(
dIndex
);
var
fileObj
=
document
.
getElementById
(
"
uploadFile
"
).
files
[
0
];
if
(
typeof
(
fileObj
)
==
"
undefined
"
||
fileObj
.
size
<=
0
)
{
layer
.
msg
(
'
请选择文件
'
);
return
;
};
var
formFile
=
new
FormData
();
formFile
.
append
(
'
processFile
'
,
fileObj
);
// formFile.append('deploymentName',$('input[name="deploymentName"]').val());
// var data = formFile;
var
loadIndex
=
layer
.
load
(
2
);
$
.
ajax
({
cache
:
true
,
type
:
"
post
"
,
url
:
''
+
publicurl
+
'
processDefinition/uploadStreamAndDeployment
'
,
async
:
false
,
data
:
formFile
,
contentType
:
false
,
processData
:
false
,
success
:
function
(
res
)
{
layer
.
close
(
loadIndex
);
layer
.
msg
(
res
.
msg
,
{
icon
:
1
});
insTb
.
reload
();
},
error
:
function
(
res
)
{
layer
.
close
(
dIndex
);
layer
.
alert
(
res
.
msg
+
'
<br>
'
+
res
.
obj
,
{
icon
:
2
,
title
:
"
提示
"
});
}
});
return
false
;
});
// 禁止弹窗出现滚动条
$
(
layero
).
children
(
'
.layui-layer-content
'
).
css
(
'
overflow
'
,
'
visible
'
);
}
});
}
;
/* 删除
流程定义
*/
}
/* 删除
部署
*/
function
doDel
(
obj
)
{
layer
.
confirm
(
'
确定要删除
该流程
吗?
'
,
{
layer
.
confirm
(
'
确定要删除
选中数据
吗?
'
,
{
skin
:
'
layui-layer-admin
'
,
shade
:
.
1
},
function
(
i
)
{
layer
.
close
(
i
);
var
loadIndex
=
layer
.
load
(
2
);
$
.
get
(
''
+
publicurl
+
'
processDefinition/delDefinition
'
,
{
pdID
:
obj
.
data
?
obj
.
data
.
id
:
''
,
depID
:
obj
.
data
?
obj
.
data
.
deploymentID
:
''
,
pdID
:
obj
.
data
?
obj
.
data
.
processDefinitionID
:
''
},
function
(
res
)
{
layer
.
close
(
loadIndex
);
if
(
res
.
status
===
0
)
{
...
...
@@ -174,6 +261,39 @@
},
'
json
'
);
});
};
/* 启动实例*/
function
stratProcessDepEditDialog
(
obj
)
{
admin
.
open
({
type
:
1
,
title
:
'
启动流程部署信息
'
,
content
:
$
(
'
#stratProcessDepEditDialog
'
).
html
(),
success
:
function
(
layero
,
dIndex
){
form
.
on
(
'
submit(strarProcessDepForm)
'
,
function
(
data
)
{
var
loadIndex
=
layer
.
load
(
2
);
$
.
get
(
''
+
publicurl
+
'
processInstance/startProcess
'
,
{
processDefinitionKey
:
obj
.
data
.
key
,
instanceName
:
$
(
"
#instanceName
"
).
val
(),
instanceVariable
:
$
(
"
#instanceVariable
"
).
val
()
},
function
(
res
)
{
layer
.
close
(
loadIndex
);
if
(
res
.
status
===
0
)
{
layer
.
close
(
dIndex
);
layer
.
msg
(
res
.
msg
,
{
icon
:
1
});
insTb
.
reload
();
}
else
{
layer
.
close
(
dIndex
);
layer
.
alert
(
res
.
msg
+
'
<br>
'
+
res
.
obj
,
{
icon
:
2
});
}
},
'
json
'
);
layer
.
close
(
loadIndex
);
return
false
;
})
}
})
}
});
</script>
...
...
src/main/resources/resources/layuimini/page/ProcessInstance.html
0 → 100644
浏览文件 @
746b5e9a
<!DOCTYPE html>
<html>
<head>
<meta
charset=
"utf-8"
>
<title>
layui
</title>
<meta
name=
"renderer"
content=
"webkit"
>
<meta
http-equiv=
"X-UA-Compatible"
content=
"IE=edge,chrome=1"
>
<meta
name=
"viewport"
content=
"width=device-width, initial-scale=1, maximum-scale=1"
>
<link
rel=
"stylesheet"
href=
"../lib/layui-v2.5.5/css/layui.css"
media=
"all"
>
<link
rel=
"stylesheet"
href=
"../css/public.css"
media=
"all"
>
</head>
<body>
<div
class=
"layuimini-container"
>
<div
class=
"layuimini-main"
>
<script
type=
"text/html"
id=
"toolbarDemo"
>
<
div
class
=
"
layui-btn-container
"
>
<
span
class
=
"
layui-card-header
"
><
i
class
=
"
layui-icon layui-icon-form
"
><
/i> 流程实例列表</
span
>
<
/div
>
</script>
<table
class=
"layui-hide"
id=
"ProcessDefinitionTableId"
lay-filter=
"currentTableFilter"
></table>
<!--分页-->
<div
class=
"layui-table-page layui-border-box"
>
<div
id=
"barcon"
class=
"page_div"
name=
"barcon"
></div>
</div>
<script
type=
"text/html"
id=
"currentTableBar"
>
{{
#
if
(
d
.
status
==
'
RUNNING
'
){
}}
<
a
class
=
"
layui-btn layui-btn-normal layui-btn-xs data-count-hangUp
"
lay
-
event
=
"
hangUp
"
>
挂起
<
/a
>
{{
#
}
else
{
}}
<
a
class
=
"
layui-btn layui-btn-success layui-btn-xs data-count-active
"
lay
-
event
=
"
active
"
>
激活
<
/a
>
{{
#
}
}}
<
a
class
=
"
layui-btn layui-btn-xs layui-btn-info data-count-look
"
lay
-
event
=
"
look
"
>
历史
<
/a
>
<
a
class
=
"
layui-btn layui-btn-xs layui-btn-danger data-count-delete
"
lay
-
event
=
"
delete
"
>
删除
<
/a
>
</script>
</div>
</div>
<script
src=
"../lib/layui-v2.5.5/layui.js"
charset=
"utf-8"
></script>
<script
src=
"../lib/jquery-3.4.1/jquery-3.4.1.min.js"
></script>
<script
src=
"../js/lay-config.js?v=1.0.4"
charset=
"utf-8"
></script>
<script
src=
"../js/ManualPaging.js"
></script>
<script>
layui
.
use
([
'
form
'
,
'
table
'
],
function
()
{
var
$
=
layui
.
jquery
,
form
=
layui
.
form
,
table
=
layui
.
table
;
var
insTb
=
table
.
render
({
elem
:
'
#ProcessDefinitionTableId
'
,
toolbar
:
'
#toolbarDemo
'
,
defaultToolbar
:
[
''
],
url
:
''
+
publicurl
+
'
processInstance/getInstances
'
,
parseData
:
function
(
res
){
//res 即为原始返回的数据
// console.log(res.obj.length,"数据长度")
//处理时间
for
(
var
i
=
0
;
i
<
res
.
obj
.
length
;
i
++
){
for
(
k
in
res
.
obj
[
i
])
{
res
.
obj
[
i
][
"
startDate
"
]
=
renderTime
(
res
.
obj
[
i
].
startDate
)
}
}
return
{
"
code
"
:
res
.
status
,
//解析接口状态,默认成功是0
"
msg
"
:
res
.
msg
,
//解析提示文本
"
count
"
:
res
.
obj
.
length
,
//解析数据长度
"
data
"
:
res
.
obj
//解析数据列表
};
},
cols
:
[[
{
type
:
"
checkbox
"
,
width
:
'
5%
'
,
align
:
"
center
"
},
{
field
:
'
id
'
,
width
:
'
10%
'
,
title
:
'
ID
'
,
align
:
"
center
"
},
{
field
:
'
name
'
,
width
:
'
18%
'
,
title
:
'
实例名称
'
,
align
:
"
center
"
},
{
field
:
'
startDate
'
,
title
:
'
实例创建时间
'
,
width
:
'
15%
'
,
align
:
"
center
"
},
{
field
:
'
processDefinitionId
'
,
title
:
'
流程定义编号
'
,
width
:
'
18%
'
,
align
:
"
center
"
},
{
field
:
'
processDefinitionKey
'
,
width
:
'
12%
'
,
title
:
'
流程定义KEY
'
,
align
:
"
center
"
},
{
field
:
'
processDefinitionVersion
'
,
width
:
'
5%
'
,
title
:
'
版本
'
,
align
:
"
center
"
},
{
title
:
'
操作
'
,
width
:
'
16%
'
,
toolbar
:
'
#currentTableBar
'
,
align
:
"
center
"
}
]],
limits
:
[
10
,
15
,
20
,
25
,
50
,
100
],
limit
:
10
,
page
:
false
,
skin
:
'
line
'
,
// id:'ProcessDefinitionTableId',
done
:
function
(
res
,
curr
,
count
)
{
if
(
res
.
code
==
1
){
layer
.
alert
(
res
.
msg
+
'
<br>
'
+
res
.
data
,
{
icon
:
2
,
title
:
"
提示
"
});
}
if
(
count
>
0
){
goPage
(
1
);
}
}
});
insTb
.
reload
();
/**
* toolbar监听事件
*/
table
.
on
(
'
tool(currentTableFilter)
'
,
function
(
obj
)
{
var
data
=
obj
.
data
;
if
(
obj
.
event
===
'
hangUp
'
)
{
// 监听挂起操作
doHangUp
(
obj
);
}
else
if
(
obj
.
event
===
'
active
'
){
// 监听激活操作
doActive
(
obj
);
}
else
if
(
obj
.
event
===
'
delete
'
)
{
// 监听删除操作
doDel
(
obj
);
}
else
if
(
obj
.
event
===
'
look
'
){
window
.
open
(
''
+
publicurl
+
'
bpmnjs/dist/index.html?type=lookBpmn&instanceId=
'
+
data
.
id
+
'
&deploymentFileUUID=
'
+
data
.
deploymentId
+
'
&deploymentName=
'
+
encodeURI
(
data
.
resourceName
)
+
''
);
}
});
function
renderTime
(
date
)
{
var
dateee
=
new
Date
(
date
).
toJSON
();
return
new
Date
(
+
new
Date
(
dateee
)
+
8
*
3600
*
1000
).
toISOString
().
replace
(
/T/g
,
'
'
).
replace
(
/
\.[\d]{3}
Z/
,
''
)
}
//监听表格复选框选择
table
.
on
(
'
checkbox(currentTableFilter)
'
,
function
(
obj
)
{
console
.
log
(
obj
)
});
/* 挂起流程定义 */
function
doHangUp
(
obj
)
{
console
.
log
(
obj
,
"
单条数据
"
);
layer
.
confirm
(
'
确定要挂起该流程吗?
'
,
{
skin
:
'
layui-layer-admin
'
,
shade
:
.
1
},
function
(
i
)
{
layer
.
close
(
i
);
var
loadIndex
=
layer
.
load
(
2
);
$
.
get
(
''
+
publicurl
+
'
processInstance/suspendInstance
'
,
{
instanceID
:
obj
.
data
?
obj
.
data
.
id
:
''
,
},
function
(
res
)
{
layer
.
close
(
loadIndex
);
if
(
res
.
status
===
0
)
{
layer
.
msg
(
res
.
msg
,
{
icon
:
1
});
insTb
.
reload
();
}
else
{
layer
.
alert
(
res
.
msg
+
'
<br>
'
+
res
.
obj
,
{
icon
:
2
});
}
},
'
json
'
);
});
};
/* 激活流程定义 */
function
doActive
(
obj
)
{
layer
.
confirm
(
'
确定要激活该流程吗?
'
,
{
skin
:
'
layui-layer-admin
'
,
shade
:
.
1
},
function
(
i
)
{
layer
.
close
(
i
);
var
loadIndex
=
layer
.
load
(
2
);
$
.
get
(
''
+
publicurl
+
'
processInstance/resumeInstance
'
,
{
instanceID
:
obj
.
data
?
obj
.
data
.
id
:
''
,
},
function
(
res
)
{
layer
.
close
(
loadIndex
);
if
(
res
.
status
===
0
)
{
layer
.
msg
(
res
.
msg
,
{
icon
:
1
});
insTb
.
reload
();
}
else
{
layer
.
alert
(
res
.
msg
+
'
<br>
'
+
res
.
obj
,
{
icon
:
2
});
}
},
'
json
'
);
});
};
/* 删除流程定义 */
function
doDel
(
obj
)
{
layer
.
confirm
(
'
确定要删除该流程吗?
'
,
{
skin
:
'
layui-layer-admin
'
,
shade
:
.
1
},
function
(
i
)
{
layer
.
close
(
i
);
var
loadIndex
=
layer
.
load
(
2
);
$
.
get
(
''
+
publicurl
+
'
processInstance/deleteInstance
'
,
{
instanceID
:
obj
.
data
?
obj
.
data
.
id
:
''
,
},
function
(
res
)
{
layer
.
close
(
loadIndex
);
if
(
res
.
status
===
0
)
{
layer
.
msg
(
res
.
msg
,
{
icon
:
1
});
obj
.
del
();
console
.
log
(
obj
,
"
删除数据
"
);
insTb
.
reload
();
}
else
{
layer
.
alert
(
res
.
msg
+
'
<br>
'
+
res
.
obj
,
{
icon
:
2
});
}
},
'
json
'
);
});
};
});
</script>
</body>
</html>
\ No newline at end of file
src/main/resources/resources/layuimini/page/ToDoTasks.html
浏览文件 @
746b5e9a
...
...
@@ -49,11 +49,12 @@
//处理时间
for
(
var
i
=
0
;
i
<
res
.
obj
.
length
;
i
++
){
for
(
k
in
res
.
obj
[
i
])
{
res
.
obj
[
i
][
"
CreatedDate
"
]
=
renderTime
(
res
.
obj
[
i
].
CreatedDate
)
res
.
obj
[
i
][
"
createdDate
"
]
=
renderTime
(
res
.
obj
[
i
].
createdDate
);
res
.
obj
[
i
][
'
status
'
]
=
judgeState
(
res
.
obj
[
i
].
status
)
}
}
return
{
"
code
"
:
res
.
status
===
1
?
0
:
res
.
status
,
//解析接口状态,默认成功是0
"
code
"
:
res
.
status
,
//解析接口状态,默认成功是0
"
msg
"
:
res
.
msg
,
//解析提示文本
"
count
"
:
res
.
obj
.
length
,
//解析数据长度
"
data
"
:
res
.
obj
//解析数据列表
...
...
@@ -61,11 +62,13 @@
},
cols
:
[[
{
type
:
"
checkbox
"
,
width
:
'
5%
'
,
align
:
"
center
"
},
{
field
:
'
ID
'
,
width
:
'
25%
'
,
title
:
'
ID
'
,
align
:
"
center
"
},
{
field
:
'
InstanceName
'
,
width
:
'
25%
'
,
title
:
'
流程名称
'
,
align
:
"
center
"
},
{
field
:
'
Assignee
'
,
width
:
'
15%
'
,
title
:
'
办理人
'
,
align
:
"
center
"
},
{
field
:
'
CreatedDate
'
,
title
:
'
创建时间
'
,
width
:
'
15%
'
,
align
:
"
center
"
},
{
title
:
'
操作
'
,
width
:
'
15%
'
,
toolbar
:
'
#currentTableBar
'
,
align
:
"
center
"
}
{
field
:
'
id
'
,
width
:
'
13%
'
,
title
:
'
ID
'
,
align
:
"
center
"
},
{
field
:
'
instanceName
'
,
width
:
'
22%
'
,
title
:
'
流程名称
'
,
align
:
"
center
"
},
{
field
:
'
name
'
,
width
:
'
15%
'
,
title
:
'
任务节点名称
'
,
align
:
"
center
"
},
{
field
:
'
status
'
,
width
:
'
12%
'
,
title
:
'
任务状态
'
,
align
:
"
center
"
},
{
field
:
'
assignee
'
,
width
:
'
8%
'
,
title
:
'
办理人
'
,
align
:
"
center
"
},
{
field
:
'
createdDate
'
,
title
:
'
创建时间
'
,
width
:
'
15%
'
,
align
:
"
center
"
},
{
title
:
'
操作
'
,
width
:
'
10%
'
,
toolbar
:
'
#currentTableBar
'
,
align
:
"
center
"
}
]],
limits
:
[
10
,
15
,
20
,
25
,
50
,
100
],
limit
:
10
,
...
...
@@ -73,6 +76,13 @@
skin
:
'
line
'
,
// id:'ToDoTasksTableId',
done
:
function
(
res
,
curr
,
count
)
{
if
(
res
.
code
==
1
){
layer
.
alert
(
res
.
msg
+
'
<br>
'
+
res
.
data
,
{
icon
:
2
,
title
:
"
提示
"
});
}
if
(
count
>
0
){
goPage
(
1
);
}
...
...
@@ -84,7 +94,8 @@
*/
table
.
on
(
'
tool(currentTableFilter)
'
,
function
(
obj
)
{
if
(
obj
.
event
===
'
handle
'
)
{
// 监听办理操作
doHandle
(
obj
);
// console.log(obj);
creatFormTable
(
obj
);
}
});
...
...
@@ -92,10 +103,58 @@
var
dateee
=
new
Date
(
date
).
toJSON
();
return
new
Date
(
+
new
Date
(
dateee
)
+
8
*
3600
*
1000
).
toISOString
().
replace
(
/T/g
,
'
'
).
replace
(
/
\.[\d]{3}
Z/
,
''
)
}
function
judgeState
(
state
)
{
var
stateText
=
''
;
if
(
state
==
'
ASSIGNED
'
){
stateText
=
'
执行中
'
;
}
else
{
stateText
=
state
}
return
stateText
}
//监听表格复选框选择
table
.
on
(
'
checkbox(currentTableFilter)
'
,
function
(
obj
)
{
console
.
log
(
obj
)
});
//动态生成表单
function
creatFormTable
(
obj
)
{
var
loadIndex
=
layer
.
load
(
2
);
$
.
get
(
''
+
publicurl
+
'
task/formDataShow
'
,
{
taskID
:
obj
.
data
?
obj
.
data
.
id
:
''
,
},
function
(
res
)
{
layer
.
close
(
loadIndex
);
if
(
res
.
obj
!=
'
无表单
'
&&
res
.
status
==
0
)
{
var
index
=
layer
.
open
({
title
:
'
办理任务
'
,
type
:
2
,
shade
:
0.2
,
maxmin
:
true
,
shadeClose
:
true
,
area
:
[
'
100%
'
,
'
100%
'
],
content
:
'
../page/table/FormDataShow.html
'
,
success
:
function
(
layero
,
index
)
{
var
iframe
=
window
[
'
layui-layer-iframe
'
+
index
];
iframe
.
child
(
JSON
.
stringify
(
res
.
obj
),
obj
.
data
.
id
)
localStorage
.
setItem
(
"
ID
"
,
obj
.
data
.
id
);
},
end
:
function
(){
insTb
.
reload
();
}
});
$
(
window
).
on
(
"
resize
"
,
function
()
{
layer
.
full
(
index
);
});
}
else
if
(
res
.
status
==
1
){
parent
.
layer
.
msg
(
res
.
obj
,
{
icon
:
0
,
time
:
2000
});
}
else
{
doHandle
(
obj
);
}
},
'
json
'
);
}
/* 挂起流程定义 */
function
doHandle
(
obj
)
{
console
.
log
(
obj
,
"
单条数据
"
);
...
...
@@ -106,7 +165,7 @@
layer
.
close
(
i
);
var
loadIndex
=
layer
.
load
(
2
);
$
.
get
(
''
+
publicurl
+
'
task/completeTask
'
,
{
taskID
:
obj
.
data
?
obj
.
data
.
ID
:
''
,
taskID
:
obj
.
data
?
obj
.
data
.
id
:
''
,
},
function
(
res
)
{
layer
.
close
(
loadIndex
);
if
(
res
.
status
===
0
)
{
...
...
src/main/resources/resources/layuimini/page/login-1.html
浏览文件 @
746b5e9a
...
...
@@ -37,7 +37,7 @@
<div
class=
"layui-form login-form"
>
<form
class=
"layui-form"
action=
""
>
<div
class=
"layui-form-item logo-title"
>
<h1>
慕课
工作流后台登录
</h1>
<h1>
工作流后台登录
</h1>
</div>
<div
class=
"layui-form-item"
>
<label
class=
"layui-icon layui-icon-username"
for=
"username"
></label>
...
...
src/main/resources/resources/layuimini/page/login-2.html
浏览文件 @
746b5e9a
...
...
@@ -39,7 +39,7 @@
<div></div>
<div
class=
"admin-login-background"
>
<div
class=
"admin-header"
>
<span>
慕课
工作流后台登录
</span>
<span>
工作流后台登录
</span>
</div>
<form
class=
"layui-form"
action=
""
>
<div>
...
...
src/main/resources/resources/layuimini/page/table/FormDataShow.html
0 → 100644
浏览文件 @
746b5e9a
<!DOCTYPE html>
<html>
<head>
<meta
charset=
"utf-8"
>
<title>
layui
</title>
<meta
name=
"renderer"
content=
"webkit"
>
<meta
http-equiv=
"X-UA-Compatible"
content=
"IE=edge,chrome=1"
>
<meta
name=
"viewport"
content=
"width=device-width, initial-scale=1, maximum-scale=1"
>
<link
rel=
"stylesheet"
href=
"../../lib/layui-v2.5.5/css/layui.css"
media=
"all"
>
<link
rel=
"stylesheet"
href=
"../../css/public.css"
media=
"all"
>
<style>
body
{
background-color
:
#ffffff
;
}
.layui-input
,
.layui-textarea
{
width
:
45%
!important
;
}
.layui-unselect
,
.layui-form-select
{
width
:
45%
!important
;
}
.layui-select-title
input
{
width
:
100%
!important
;
}
.layui-form-select
.layui-input
{
padding-right
:
30px
;
cursor
:
pointer
;
}
.yellowBg
{
background
:
#faffbd
;
}
#cancelBtn
{
z-index
:
99
;
}
</style>
</head>
<body>
<div
class=
"layui-form layuimini-form"
id=
"defineForm"
>
</div>
<script
src=
"../../lib/layui-v2.5.5/layui.js"
charset=
"utf-8"
></script>
<script
src=
"../../lib/jquery-3.4.1/jquery-3.4.1.min.js"
></script>
<script
src=
"../../js/lay-config.js?v=1.0.4"
charset=
"utf-8"
></script>
<script>
var
ids
;
function
child
(
obj
,
id
){
var
dataObj
=
JSON
.
parse
(
obj
);
ids
=
id
;
// console.log(dataObj,ids);//获取父界面的传值
layui
.
use
([
'
form
'
],
function
(
id
)
{
var
form
=
layui
.
form
,
layer
=
layui
.
layer
,
$
=
layui
.
$
,
param
=
''
;
formTable
(
dataObj
);
form
.
render
();
//监听提交
form
.
on
(
'
submit(saveBtn)
'
,
function
()
{
var
index
=
layer
.
confirm
(
'
确定要提交吗?
'
,
{
skin
:
'
layui-layer-admin
'
,
shade
:
.
1
},
function
(
i
)
{
layer
.
close
(
i
);
var
loadIndex
=
layer
.
load
(
2
);
param
=
''
;
$
(
"
.js_val
"
).
each
(
function
()
{
var
isParm
=
$
(
this
).
attr
(
"
isParm
"
);
var
id
=
$
(
this
).
attr
(
"
name
"
);
var
val
=
$
(
this
).
val
();
var
str
=
id
+
'
-_!
'
+
val
+
'
-_!
'
+
isParm
;
param
+=
str
+
'
!_!
'
});
var
params
=
param
.
slice
(
0
,
param
.
length
-
3
);
console
.
log
(
params
,
"
传参
"
);
$
.
post
(
''
+
publicurl
+
'
task/formDataSave
'
,
{
taskID
:
localStorage
.
getItem
(
"
ID
"
),
formData
:
params
},
function
(
res
)
{
layer
.
close
(
loadIndex
);
if
(
res
.
status
===
0
)
{
layer
.
msg
(
res
.
msg
,
{
icon
:
1
});
// 关闭弹出层
layer
.
close
(
index
);
var
iframeIndex
=
parent
.
layer
.
getFrameIndex
(
window
.
name
);
setTimeout
(
function
()
{
parent
.
layer
.
close
(
iframeIndex
);
},
1500
);
}
else
{
layer
.
alert
(
res
.
msg
+
'
<br>
'
+
res
.
obj
,
{
icon
:
2
});
}
});
});
return
false
;
});
//渲染动态表单
function
formTable
(
res
){
for
(
var
i
=
0
;
i
<
res
.
length
;
i
++
)
{
var
formItem
;
var
input
;
switch
(
res
[
i
].
controlType
){
case
'
long
'
:
if
(
res
[
i
].
controlDefValue
==
'
无
'
){
input
=
'
<input lay-verify="required|number" type="text" isParm="
'
+
res
[
i
].
controlIsParam
+
'
" name="
'
+
res
[
i
].
id
+
'
" placeholder="" value="" class="layui-input yellowBg js_val" onkeyup="this.value=this.value.replace(/
\\
D|^0/g,
\'\'
)" onafterpaste="this.value=this.value.replace(/
\\
D|^0/g,
\'\'
)">
'
;
}
else
{
input
=
'
<input lay-verify="required|number" type="text" isParm="
'
+
res
[
i
].
controlIsParam
+
'
" name="
'
+
res
[
i
].
id
+
'
" value="
'
+
res
[
i
].
controlDefValue
+
'
" class="layui-input yellowBg js_val" onkeyup="this.value=this.value.replace(/
\\
D|^0/g,
\'\'
)" onafterpaste="this.value=this.value.replace(/
\\
D|^0/g,
\'\'
)">
'
;
}
break
;
case
'
cUser
'
:
input
=
'
<select name="
'
+
res
[
i
].
id
+
'
" isParm="
'
+
res
[
i
].
controlIsParam
+
'
" lay-filter="aihao" id="
'
+
res
[
i
].
id
+
'
" type="cUser" class="js_val js_select"></select>
'
break
;
case
'
string
'
:
if
(
res
[
i
].
controlDefValue
==
'
无
'
){
input
=
'
<input lay-verify="required" type="text" isParm="
'
+
res
[
i
].
controlIsParam
+
'
" name="
'
+
res
[
i
].
id
+
'
" placeholder="" value="" class="layui-input js_val">
'
;
}
else
{
input
=
'
<input lay-verify="required" type="text" isParm="
'
+
res
[
i
].
controlIsParam
+
'
" name="
'
+
res
[
i
].
id
+
'
" value="
'
+
res
[
i
].
controlDefValue
+
'
" placeholder="" class="layui-input js_val">
'
;
}
break
;
}
formItem
=
'
<div class="layui-form-item">
'
+
'
<label class="layui-form-label required">
'
+
res
[
i
].
controlLable
+
'
:</label>
'
+
'
<div class="layui-input-block">
'
+
input
+
'
</div>
'
+
'
</div>
'
;
$
(
"
#defineForm
"
).
append
(
formItem
);
}
$
(
"
#defineForm
"
).
append
(
'
<div class="layui-form-item">
\n
'
+
'
<div class="layui-input-block">
\n
'
+
'
<button class="layui-btn layui-btn-normal" lay-submit lay-filter="saveBtn">提交任务</button>
'
+
'
</div>
'
+
'
</div>
'
);
$
(
"
.js_select
"
).
each
(
function
()
{
var
id
=
$
(
this
).
attr
(
"
id
"
);
creatSelect
(
id
);
});
};
//生成下拉框接口
function
creatSelect
(
id
)
{
var
loadIndex
=
layer
.
load
(
2
);
$
.
get
(
''
+
publicurl
+
'
user/getUsers
'
,
{},
function
(
res
)
{
layer
.
close
(
loadIndex
);
if
(
res
.
status
===
0
)
{
// layer.msg(res.msg, {icon: 1});
CreateDropdown
(
id
,
res
.
obj
);
form
.
render
();
}
else
{
layer
.
alert
(
res
.
msg
+
'
<br>
'
+
res
.
obj
,
{
icon
:
2
});
}
});
};
//动态生成下拉框
function
CreateDropdown
(
id
,
data
)
{
// $("#" + id).html("").append('
<
option
value
=
""
>-
请选择
-<
/option>'
)
;
for
(
var
key
in
data
)
{
var
publicOption
=
'
<option value="
'
+
data
[
key
].
username
+
'
">
'
+
data
[
key
].
name
+
'
</option>
'
;
$
(
"
#
"
+
id
).
append
(
publicOption
);
}
}
});
}
</script>
</body>
</html>
\ No newline at end of file
user.sql
浏览文件 @
746b5e9a
...
...
@@ -27,3 +27,15 @@ INSERT INTO `user` VALUES ('4', 'salaboycn', 'beijing', 'salaboy', '$2a$10$gw46p
-- ----------------------------
alter
table
ACT_RE_DEPLOYMENT
add
column
PROJECT_RELEASE_VERSION_
varchar
(
255
)
DEFAULT
NULL
;
alter
table
ACT_RE_DEPLOYMENT
add
column
VERSION_
varchar
(
255
)
DEFAULT
NULL
;
-- ----------------------------
-- 动态表单数据存储
-- ----------------------------
DROP
TABLE
IF
EXISTS
`formdata`
;
CREATE
TABLE
`formdata`
(
`PROC_DEF_ID_`
varchar
(
64
)
DEFAULT
NULL
,
`PROC_INST_ID_`
varchar
(
64
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
DEFAULT
NULL
,
`FORM_KEY_`
varchar
(
255
)
DEFAULT
NULL
,
`Control_ID_`
varchar
(
100
)
DEFAULT
NULL
,
`Control_VALUE_`
varchar
(
2000
)
DEFAULT
NULL
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8
;
数据字典activiti7.pdm
浏览文件 @
746b5e9a
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录