Browse Source

update

main
wangshaoping 1 year ago
parent
commit
e89484e8b2
  1. 4
      gradle.properties
  2. 4
      io.sc.engine.mv.frontend/package.json
  3. 2
      io.sc.platform.core.frontend/package.json
  4. 30
      io.sc.platform.core.frontend/src/platform/components-ext/options/BooleanOptions.ts
  5. 5
      io.sc.platform.core.frontend/src/platform/components-ext/options/EnumOptions.ts
  6. 4
      io.sc.platform.core.frontend/template-project/package.json
  7. 1
      io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words.properties
  8. 1
      io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words_tw_CN.properties
  9. 1
      io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words_zh_CN.properties
  10. 4
      io.sc.platform.developer.frontend/package.json
  11. 30
      io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/controller/ProcessOperationWebController.java
  12. 38
      io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/controller/ProcessQueryWebController.java
  13. 7
      io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/service/ProcessOperationService.java
  14. 3
      io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/service/ProcessQueryService.java
  15. 6
      io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/service/impl/ProcessOperationServiceImpl.java
  16. 6
      io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/service/impl/ProcessQueryServiceImpl.java
  17. 2
      io.sc.platform.gradle/templates/pgp/app/build-jetty.gradle
  18. 2
      io.sc.platform.gradle/templates/pgp/app/build-undertow.gradle
  19. 8
      io.sc.platform.gradle/templates/pgp/app/build.gradle
  20. 2
      io.sc.platform.gradle/templates/pgp/setup/build-version.gradle
  21. 2
      io.sc.platform.gradle/templates/pgp/setup/build.gradle.txt
  22. 4
      io.sc.platform.gradle/templates/pgp/setup/gradle.properties
  23. 4
      io.sc.platform.lcdp.frontend/package.json
  24. 71
      io.sc.platform.lcdp.frontend/src/i18n/messages.json
  25. 71
      io.sc.platform.lcdp.frontend/src/i18n/messages_tw_CN.json
  26. 73
      io.sc.platform.lcdp.frontend/src/i18n/messages_zh_CN.json
  27. 300
      io.sc.platform.lcdp.frontend/src/views/bpm/Bpm.vue
  28. 55
      io.sc.platform.lcdp.frontend/src/views/bpm/CreateProcessInstanceDialog.vue
  29. 87
      io.sc.platform.lcdp.frontend/src/views/bpm/JumpTaskDialog.vue
  30. 98
      io.sc.platform.lcdp.frontend/src/views/bpm/VariableDialog.vue
  31. 4
      io.sc.platform.mvc.frontend/package.json
  32. 7
      io.sc.platform.mvc.frontend/webpack.env.serve.cjs
  33. 11
      io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/support/QueryParameter.java
  34. 4
      io.sc.platform.security.frontend/package.json
  35. 4
      io.sc.platform.system.frontend/package.json

4
gradle.properties

@ -36,9 +36,9 @@ application_version=1.0.0
# platform
###########################################################
platform_group=io.sc
platform_version=8.1.22
platform_version=8.1.23
platform_plugin_version=8.1.13
platform_core_frontend_version=8.1.114
platform_core_frontend_version=8.1.119
###########################################################
# dependencies version

4
io.sc.engine.mv.frontend/package.json

@ -1,6 +1,6 @@
{
"name": "io.sc.engine.mv.frontend",
"version": "8.1.22",
"version": "8.1.23",
"description": "",
"private": false,
"keywords": [
@ -80,7 +80,7 @@
"luckyexcel": "1.0.1",
"mockjs": "1.1.0",
"pinia": "2.1.7",
"platform-core": "8.1.118",
"platform-core": "8.1.119",
"quasar": "2.14.2",
"tailwindcss": "3.4.0",
"vue": "3.4.3",

2
io.sc.platform.core.frontend/package.json

@ -1,6 +1,6 @@
{
"name": "platform-core",
"version": "8.1.118",
"version": "8.1.119",
"description": "前端核心包,用于快速构建前端的脚手架",
"//main": "库的主文件",
"main": "dist/platform-core.js",

30
io.sc.platform.core.frontend/src/platform/components-ext/options/BooleanOptions.ts

@ -1,48 +1,24 @@
import { i18n } from '@/platform/plugin';
const yesNo = (includeEmpty: boolean = true) => {
if (includeEmpty) {
const yesNo = () => {
return [
{ value: null, label: '' },
{ value: true, label: i18n.global.t('yes') },
{ value: false, label: i18n.global.t('no') },
];
} else {
return [
{ value: true, label: i18n.global.t('yes') },
{ value: false, label: i18n.global.t('no') },
];
}
};
const trueFalse = (includeEmpty: boolean = true) => {
if (includeEmpty) {
return [
{ value: null, label: '' },
{ value: true, label: i18n.global.t('true') },
{ value: false, label: i18n.global.t('false') },
];
} else {
const trueFalse = () => {
return [
{ value: true, label: i18n.global.t('true') },
{ value: false, label: i18n.global.t('false') },
];
}
};
const successFailed = (includeEmpty: boolean = true) => {
if (includeEmpty) {
return [
{ value: null, label: '' },
{ value: 'success', label: i18n.global.t('success') },
{ value: 'failed', label: i18n.global.t('failed') },
];
} else {
const successFailed = () => {
return [
{ value: 'success', label: i18n.global.t('success') },
{ value: 'failed', label: i18n.global.t('failed') },
];
}
};
export { yesNo, trueFalse, successFailed };

5
io.sc.platform.core.frontend/src/platform/components-ext/options/EnumOptions.ts

@ -8,12 +8,9 @@ class EnumOptions {
this.#options = options;
}
public options(includeEmpty: boolean = true) {
public options() {
if (this.#options) {
const result = [];
if (includeEmpty) {
result.push({ value: null, label: '' });
}
for (const option of this.#options) {
result.push({
value: option.value,

4
io.sc.platform.core.frontend/template-project/package.json

@ -1,6 +1,6 @@
{
"name": "platform-core",
"version": "8.1.118",
"version": "8.1.119",
"description": "前端核心包,用于快速构建前端的脚手架",
"private": false,
"keywords": [],
@ -92,7 +92,7 @@
"luckyexcel": "1.0.1",
"mockjs": "1.1.0",
"pinia": "2.1.7",
"platform-core": "8.1.118",
"platform-core": "8.1.119",
"quasar": "2.14.2",
"tailwindcss": "3.4.0",
"vue": "3.4.3",

1
io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words.properties

@ -99,6 +99,7 @@ nextPage=Next Page
no=No
normal=Normal
oldValue=Old Value
operation=Operation
operationSuccess=Operation Sucess
order=Order
org=Organization

1
io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words_tw_CN.properties

@ -99,6 +99,7 @@ nextPage=\u4E0B\u4E00\u9801
no=\u5426
normal=\u6B63\u5E38
oldValue=\u539F\u503C
operation=\u64CD\u4F5C
operationSuccess=\u64CD\u4F5C\u6210\u529F
order=\u9806\u5E8F
org=\u6A5F\u69CB

1
io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words_zh_CN.properties

@ -99,6 +99,7 @@ nextPage=\u4E0B\u4E00\u9875
no=\u5426
normal=\u6B63\u5E38
oldValue=\u539F\u503C
operation=\u64CD\u4F5C
operationSuccess=\u64CD\u4F5C\u6210\u529F
order=\u987A\u5E8F
org=\u673A\u6784

4
io.sc.platform.developer.frontend/package.json

@ -1,6 +1,6 @@
{
"name": "io.sc.platform.developer.frontend",
"version": "8.1.22",
"version": "8.1.23",
"description": "",
"private": false,
"keywords": [
@ -80,7 +80,7 @@
"luckyexcel": "1.0.1",
"mockjs": "1.1.0",
"pinia": "2.1.7",
"platform-core": "8.1.114",
"platform-core": "8.1.119",
"quasar": "2.14.2",
"tailwindcss": "3.4.0",
"vue": "3.4.3",

30
io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/controller/ProcessOperationWebController.java

@ -16,8 +16,7 @@ import java.util.Map;
public class ProcessOperationWebController {
@Autowired private ProcessOperationService processOperationService;
@RequestMapping(value="start/{processDefinitionKey}",method=RequestMethod.POST)
@ResponseBody
@PostMapping("start/{processDefinitionKey}")
public CompleteTaskResponse start(
@PathVariable(name="processDefinitionKey") String processDefinitionKey,
@RequestBody(required=false) ProcessProperties properties
@ -36,8 +35,7 @@ public class ProcessOperationWebController {
}
}
@RequestMapping(value="complete/{taskId}",method=RequestMethod.POST)
@ResponseBody
@PostMapping("complete/{taskId}")
public CompleteTaskResponse completeTask(@PathVariable("taskId") String taskId,@RequestBody(required=false) ProcessProperties properties) throws Exception{
try{
if(properties!=null){
@ -53,44 +51,32 @@ public class ProcessOperationWebController {
}
}
@RequestMapping(value="claim/{taskId}",method=RequestMethod.POST)
@ResponseBody
@PostMapping("claim/{taskId}")
public void claimTask(@PathVariable("taskId") String taskId) throws Exception{
processOperationService.claimTask(taskId);
}
@RequestMapping(value="unClaim/{taskId}",method=RequestMethod.POST)
@ResponseBody
@PostMapping("unClaim/{taskId}")
public void unClaimTask(@PathVariable("taskId") String taskId) throws Exception{
processOperationService.unClaimTask(taskId);
}
@RequestMapping(value="terminateProcessInstance/{taskId}",method=RequestMethod.POST)
@ResponseBody
@PostMapping("terminateProcessInstance/{taskId}")
public void terminateProcessInstance(@PathVariable("taskId") String taskId) throws Exception{
processOperationService.terminateProcessInstance(taskId,null);
}
@RequestMapping(value="terminate/{taskId}",method=RequestMethod.POST)
@ResponseBody
public void terminateTask(@PathVariable("taskId") String taskId) throws Exception{
processOperationService.terminateTask(taskId);
}
@RequestMapping(value="getGobacks/{taskId}",method=RequestMethod.GET)
@ResponseBody
@GetMapping("getGobacks/{taskId}")
public List<Goback> getGobacks(@PathVariable("taskId") String taskId) throws Exception{
return processOperationService.getGobacks(taskId);
}
@RequestMapping(value="goback/{taskId}",method=RequestMethod.POST)
@ResponseBody
@PostMapping("goback/{taskId}")
public CompleteTaskResponse goback(@PathVariable("taskId") String taskId,@RequestBody(required=false) ProcessProperties properties) throws Exception{
return completeTask(taskId,properties);
}
@RequestMapping(value="jump",method=RequestMethod.POST)
@ResponseBody
@PostMapping("jump")
public void terminateTask(@RequestBody Map<String,String> parameters) throws Exception{
String taskId =parameters.get("taskId");
String targetActivityId =parameters.get("targetActivityId");

38
io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/controller/ProcessQueryWebController.java

@ -4,6 +4,9 @@ import io.sc.platform.flowable.service.ProcessQueryService;
import io.sc.platform.flowable.support.*;
import io.sc.platform.mvc.support.FileDownloader;
import io.sc.platform.orm.service.support.QueryParameter;
import io.sc.platform.orm.service.support.QueryResult;
import io.sc.platform.orm.service.support.criteria.Criteria;
import io.sc.platform.orm.service.support.criteria.impl.Equals;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.*;
@ -11,6 +14,7 @@ import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.util.Collections;
import java.util.List;
@RestController
@ -18,7 +22,7 @@ import java.util.List;
public class ProcessQueryWebController {
@Autowired private ProcessQueryService service;
@RequestMapping(value="showProcessDiagramByInstanceId/{processInstanceId}",method=RequestMethod.GET)
@GetMapping("showProcessDiagramByInstanceId/{processInstanceId}")
public void showProcessDiagramByInstanceId(@PathVariable("processInstanceId") String processInstanceId,HttpServletRequest request,HttpServletResponse response) throws Exception{
InputStream inputStream =service.showProcessDiagramByInstanceId(processInstanceId);
if(inputStream!=null){
@ -28,7 +32,7 @@ public class ProcessQueryWebController {
}
}
@RequestMapping(value="showProcessDiagramByTaskId/{taskId}",method=RequestMethod.GET)
@GetMapping("showProcessDiagramByTaskId/{taskId}")
public void showProcessDiagramByTaskId(@PathVariable("taskId") String taskId,HttpServletRequest request,HttpServletResponse response) throws Exception{
InputStream inputStream =service.showProcessDiagramByTaskId(taskId);
if(inputStream!=null){
@ -38,32 +42,32 @@ public class ProcessQueryWebController {
}
}
@RequestMapping(value="instance/isc/fetch", method=RequestMethod.GET)
@ResponseBody
public Page<ProcessInstanceWrapper> processInstanceQuery(@RequestParam(name="businessKey",required=false)String businessKey, QueryParameter queryParameter) throws Exception{
return service.queryProcessInstances(businessKey,queryParameter);
@GetMapping("instance")
public Page<ProcessInstanceWrapper> processInstanceQuery(QueryParameter queryParameter) throws Exception{
return service.queryProcessInstances(queryParameter);
}
@RequestMapping(value="task/isc/fetch", method=RequestMethod.GET)
@ResponseBody
public List<ProcessTaskWrapper> taskQuery(@RequestParam(name="processInstanceId",required=false) String processInstanceId, QueryParameter queryParameter) throws Exception{
return service.queryProcessTasks(processInstanceId,queryParameter);
@GetMapping("task")
public List<ProcessTaskWrapper> taskQuery(QueryParameter queryParameter) throws Exception{
Criteria criteria =queryParameter.getCriteriaByFieldName("processInstanceId");
if(criteria!=null && criteria instanceof Equals){
Equals equals =(Equals)criteria;
return service.queryProcessTasks(equals.getValue(),queryParameter);
}
return Collections.emptyList();
}
@RequestMapping(value="variable/isc/fetch", method=RequestMethod.GET)
@ResponseBody
@GetMapping("variable")
public List<VariableWrapper> variableQuery(@RequestParam(name="procInstId",required=false) String procInstId) throws Exception{
return service.queryVariables(procInstId);
}
@RequestMapping(value="activity/isc/fetch", method=RequestMethod.GET)
@ResponseBody
public List<UserTaskDefinitionWrapper> activityQuery(@RequestParam(name="taskId",required=false) String taskId) throws Exception{
@GetMapping("activity/{taskId}")
public List<UserTaskDefinitionWrapper> activityQuery(@PathVariable(name="taskId",required=false) String taskId) throws Exception{
return service.queryUserTaskDefinition(taskId);
}
@RequestMapping(value="candidate/isc/fetch", method=RequestMethod.GET)
@ResponseBody
@GetMapping("candidate")
public List<Assignee> candidateQuery(
@RequestParam(name="taskId",required=false) String taskId,
@RequestParam(name="activityId",required=false) String activityId

7
io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/service/ProcessOperationService.java

@ -99,13 +99,6 @@ public interface ProcessOperationService {
*/
public void terminateProcessInstance(String taskId,String deleteReason) throws Exception;
/**
* 终止任务
* @param taskId 任务ID
* @throws Exception 违例
*/
public void terminateTask(String taskId) throws Exception;
/**
* 获取某个任务定义节点的所有回退操作列表
* @param taskId 任务ID

3
io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/service/ProcessQueryService.java

@ -35,12 +35,11 @@ public interface ProcessQueryService {
/**
* 查询流程实例
* @param businessKey 业务主键
* @param queryParameter 查询参数
* @return 流程实例
* @throws Exception 违例
*/
public Page<ProcessInstanceWrapper> queryProcessInstances(String businessKey, QueryParameter queryParameter) throws Exception;
public Page<ProcessInstanceWrapper> queryProcessInstances(QueryParameter queryParameter) throws Exception;
/**
* 查询任务

6
io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/service/impl/ProcessOperationServiceImpl.java

@ -327,6 +327,7 @@ public class ProcessOperationServiceImpl implements ProcessOperationService {
}
@Override
@Transactional
public void terminateProcessInstance(String taskId,String deleteReason) throws Exception {
Task task =taskService.createTaskQuery().taskId(taskId).singleResult();
if(task!=null) {
@ -336,11 +337,6 @@ public class ProcessOperationServiceImpl implements ProcessOperationService {
@Override
@Transactional
public void terminateTask(String taskId) throws Exception {
managementService.executeCommand(new JumpTaskCommand(taskId));
}
@Override
public List<Goback> getGobacks(String taskId) throws Exception {
if(!StringUtils.hasText(taskId)){
return null;

6
io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/service/impl/ProcessQueryServiceImpl.java

@ -8,6 +8,7 @@ import io.sc.platform.flowable.service.ProcessQueryService;
import io.sc.platform.flowable.support.*;
import io.sc.platform.jdbc.sql.dialect.Dialect;
import io.sc.platform.orm.service.support.QueryParameter;
import io.sc.platform.orm.service.support.QueryResult;
import org.flowable.bpmn.model.BpmnModel;
import org.flowable.bpmn.model.EndEvent;
import org.flowable.bpmn.model.FlowElement;
@ -114,7 +115,8 @@ public class ProcessQueryServiceImpl implements ProcessQueryService {
}
@Override
public Page<ProcessInstanceWrapper> queryProcessInstances(String businessKey, QueryParameter queryParameter) throws Exception {
public Page<ProcessInstanceWrapper> queryProcessInstances(QueryParameter queryParameter) throws Exception {
String businessKey ="";
List<ProcessEntity> entities =processEntityService.list(queryParameter);
if(entities!=null && entities.size()>0){
Set<String> deployedIds =new HashSet<String>();
@ -194,7 +196,7 @@ public class ProcessQueryServiceImpl implements ProcessQueryService {
}
return new PageImpl<ProcessInstanceWrapper>(wrappers,pageable,totalCount);
}
return null;
return QueryResult.emptyPage();
}
private String getOrderSql(Pageable pageable){

2
io.sc.platform.gradle/templates/pgp/app/build-jetty.gradle

@ -2,7 +2,7 @@ println "[Jetty] 环境 ......"
configurations {
all*.exclude group: "org.springframework.boot", module: "spring-boot-starter-tomcat"
all*.exclude group: "org.apache.tomcat.embed", module: "tomcat-embed-coe"
all*.exclude group: "org.apache.tomcat.embed", module: "tomcat-embed-core"
all*.exclude group: "org.apache.tomcat.embed", module: "tomcat-embed-websocket"
}

2
io.sc.platform.gradle/templates/pgp/app/build-undertow.gradle

@ -2,7 +2,7 @@ println "[Undertow] 环境 ......"
configurations {
all*.exclude group: "org.springframework.boot", module: "spring-boot-starter-tomcat"
all*.exclude group: "org.apache.tomcat.embed", module: "tomcat-embed-coe"
all*.exclude group: "org.apache.tomcat.embed", module: "tomcat-embed-core"
all*.exclude group: "org.apache.tomcat.embed", module: "tomcat-embed-websocket"
}

8
io.sc.platform.gradle/templates/pgp/app/build.gradle

@ -13,11 +13,11 @@ dependencies {
implementation (
project(":io.sc.platform.app"),
project(":io.sc.platform.developer"),
project(":io.sc.platform.security.loginform"),
//project(":io.sc.platform.job.coe"),
//project(":io.sc.platform.job.executor"),
//project(":io.sc.platform.job.manager"),
project(":io.sc.engine.mv"),
project(":io.sc.engine.mv.frontend"),
project(":io.sc.engine.mv.sample"),
)
}

2
io.sc.platform.gradle/templates/pgp/setup/build-version.gradle

@ -194,7 +194,7 @@ subprojects {
// ext['undertow.version'] =
// ext['versions-maven-plugin.version'] =
// ext['webjars-hal-browser.version'] =
// ext['webjars-locator-coe.version'] =
// ext['webjars-locator-core.version'] =
// ext['wsdl4j.version'] =
// ext['xml-maven-plugin.version'] =
// ext['xmlunit2.version'] =

2
io.sc.platform.gradle/templates/pgp/setup/build.gradle.txt

@ -643,7 +643,7 @@ subprojects {
// gradle bootwar -Dfrontend=dev # 采用 pnpm build 构建前端
// gradle bootwar -Dfrontend=prod # 采用 pnpm prod 构建前端
// gradle bootwar -Dfrontend # 不构建前端, 仅生成后端需要的文件
def isFrontend =System.getProperty("frontend")?:"dev";
def isFrontend =System.getProperty("frontend")?:"prod";
if(isFrontend=="dev"){
frontendGenerateThymeleafTemplate.dependsOn(frontendNpmBuild);
}else if(isFrontend=="prod"){

4
io.sc.platform.gradle/templates/pgp/setup/gradle.properties

@ -36,9 +36,9 @@ application_version=1.0.0
# platform
###########################################################
platform_group=io.sc
platform_version=8.1.22
platform_version=8.1.23
platform_plugin_version=8.1.13
platform_core_frontend_version=8.1.88
platform_core_frontend_version=8.1.119
###########################################################
# dependencies version

4
io.sc.platform.lcdp.frontend/package.json

@ -1,6 +1,6 @@
{
"name": "io.sc.platform.lcdp.frontend",
"version": "8.1.22",
"version": "8.1.23",
"description": "",
"private": false,
"keywords": [
@ -93,7 +93,7 @@
"luckyexcel": "1.0.1",
"mockjs": "1.1.0",
"pinia": "2.1.7",
"platform-core": "8.1.118",
"platform-core": "8.1.119",
"quasar": "2.14.2",
"tailwindcss": "3.4.0",
"vue": "3.4.3",

71
io.sc.platform.lcdp.frontend/src/i18n/messages.json

@ -140,12 +140,75 @@
"theme.grid.stickyBgColor":"Sticky Column's Background Color",
"theme.grid.borderColor":"Border Color",
"lcdp.bpm.deployId":"Deploy ID ",
"lcdp.bpm.canClaimTask":"Claim Task",
"lcdp.frontend.export":"Export Frontend Package",
"lcdp.frontend.export.frontendWebContextPath":"Frontend Web Context Path",
"lcdp.frontend.export.backendApiWebContextPath":"Backend API Web Context Path"
"lcdp.frontend.export.backendApiWebContextPath":"Backend API Web Context Path",
"lcdp.bpm.tabs.processDefine": "Process Define",
"lcdp.bpm.tabs.processInstance": "Process Instance",
"lcdp.bpm.tabs.task": "Process Task",
"lcdp.bpm.processDefine.grid.title": "Process Define List",
"lcdp.bpm.processDefine.grid.toolbar.design": "Design",
"lcdp.bpm.processDefine.grid.toolbar.deployment": "Deployment",
"lcdp.bpm.processDefine.grid.toolbar.deployment.tip": "Are you sure to deploy the process?",
"lcdp.bpm.processDefine.grid.toolbar.createProcessInstance": "Create Process Instance",
"lcdp.bpm.processDefine.grid.toolbar.queryProcessInstance": "Query Process Instance",
"lcdp.bpm.processDefine.grid.entity.deployId": "Deploy ID",
"lcdp.bpm.processDefine.grid.entity.canClaimTask": "Claim Task",
"lcdp.bpm.designer.dialog.title.prefix": "Process Designer",
"lcdp.bpm.createProcessInstance.dialog.title": "Create Process Instance",
"lcdp.bpm.processInstance.grid.title": "Process Instance List",
"lcdp.bpm.processInstance.grid.toolbar.queryTask": "Query Task",
"lcdp.bpm.processInstance.grid.entity.bussinessKey": "Bussiness Key",
"lcdp.bpm.processInstance.grid.entity.startTime": "Start Date",
"lcdp.bpm.processInstance.grid.entity.startUserId": "Start User",
"lcdp.bpm.processInstance.grid.entity.suspended": "Suspended",
"lcdp.bpm.processInstance.grid.entity.processDefinitionKey": "Process Define Code",
"lcdp.bpm.processInstance.grid.entity.processDefinitionName": "Process Define Name",
"lcdp.bpm.processInstance.grid.entity.processDefinitionId": "Process Define Deploy ID",
"lcdp.bpm.processInstance.grid.entity.variables": "Variables(persistent)",
"lcdp.bpm.processInstance.grid.entity.transientVariables": "Variables(transient)",
"lcdp.bpm.processInstance.grid.entity.autoCompleteFirstTask": "Auto Complete First Task",
"lcdp.bpm.task.grid.title": "Task List",
"lcdp.bpm.task.grid.toolbar.complete": "Complete",
"lcdp.bpm.task.grid.toolbar.complete.tip": "Are you sure to complete the Task?",
"lcdp.bpm.task.grid.toolbar.claim": "Claim",
"lcdp.bpm.task.grid.toolbar.claim.tip": "Are you sure to claim the Task?",
"lcdp.bpm.task.grid.toolbar.unclaim": "Unclaim",
"lcdp.bpm.task.grid.toolbar.unclaim.tip": "Are you sure to unclaim the Task?",
"lcdp.bpm.task.grid.toolbar.jump": "Jump",
"lcdp.bpm.task.grid.toolbar.terminate": "Terminate",
"lcdp.bpm.task.grid.toolbar.terminate.tip": "Are you sure to terminate the Task?",
"lcdp.bpm.task.grid.toolbar.variables": "Variables",
"lcdp.bpm.task.grid.entity.owner": "owner",
"lcdp.bpm.task.grid.entity.assignee": "assignee",
"lcdp.bpm.task.grid.entity.createTime": "Create Date",
"lcdp.bpm.task.grid.entity.claimTime": "Claim Date",
"lcdp.bpm.task.grid.entity.processInstanceId": "Process Instance ID",
"lcdp.bpm.variables.grid.title": "Variable List",
"lcdp.bpm.variables.grid.entity.doubleValue":"Double Value",
"lcdp.bpm.variables.grid.entity.longValue":"Long Value",
"lcdp.bpm.variables.grid.entity.rev":"Rev.",
"lcdp.bpm.variables.grid.entity.executionId":"Execution ID",
"lcdp.bpm.variables.grid.entity.procInstId":"Process Instance ID",
"lcdp.bpm.variables.grid.entity.taskId":"Task ID",
"lcdp.bpm.variables.grid.entity.scopeId":"Scope ID",
"lcdp.bpm.variables.grid.entity.subScopeId":"Sub Scope ID",
"lcdp.bpm.variables.grid.entity.scopeType":"Scope Type",
"lcdp.bpm.variables.grid.entity.byteArrayId":"Byte Array ID",
"lcdp.bpm.variables.grid.entity.text":"Text",
"lcdp.bpm.variables.grid.entity.text2":"Text2",
"lcdp.bpm.jumpTask.dialog.title": "Task Jump",
"lcdp.bpm.jumpTask.form.entity.taskId": "Task ID",
"lcdp.bpm.jumpTask.form.entity.targetActivityId": "Target Activity Node",
"lcdp.bpm.jumpTask.form.entity.targetAssignee": "Assignee"
}

71
io.sc.platform.lcdp.frontend/src/i18n/messages_tw_CN.json

@ -140,10 +140,73 @@
"theme.grid.stickyBgColor":"鎖定列背景顏色",
"theme.grid.borderColor":"表格邊框顏色",
"lcdp.bpm.deployId":"發佈ID",
"lcdp.bpm.canClaimTask":"領取任務",
"lcdp.frontend.export":"一鍵導出前端包",
"lcdp.frontend.export.frontendWebContextPath":"前端應用上下文路徑",
"lcdp.frontend.export.backendApiWebContextPath":"後端應用上下文路徑"
"lcdp.frontend.export.backendApiWebContextPath":"後端應用上下文路徑",
"lcdp.bpm.tabs.processDefine": "流程定義",
"lcdp.bpm.tabs.processInstance": "流程實例",
"lcdp.bpm.tabs.task": "工作任務",
"lcdp.bpm.processDefine.grid.title": "流程定義列表",
"lcdp.bpm.processDefine.grid.toolbar.design": "設計",
"lcdp.bpm.processDefine.grid.toolbar.deployment": "發佈",
"lcdp.bpm.processDefine.grid.toolbar.deployment.tip": "您確定要發佈流程嗎?",
"lcdp.bpm.processDefine.grid.toolbar.createProcessInstance": "創建流程實例",
"lcdp.bpm.processDefine.grid.toolbar.queryProcessInstance": "查詢流程實例",
"lcdp.bpm.processDefine.grid.entity.deployId": "發佈 ID",
"lcdp.bpm.processDefine.grid.entity.canClaimTask": "領取任務",
"lcdp.bpm.designer.dialog.title.prefix": "流程設計器",
"lcdp.bpm.createProcessInstance.dialog.title": "創建流程實例",
"lcdp.bpm.processInstance.grid.title": "流程實例列表",
"lcdp.bpm.processInstance.grid.toolbar.queryTask": "查詢任務",
"lcdp.bpm.processInstance.grid.entity.bussinessKey": "業務鍵",
"lcdp.bpm.processInstance.grid.entity.startTime": "發起時間",
"lcdp.bpm.processInstance.grid.entity.startUserId": "發起者",
"lcdp.bpm.processInstance.grid.entity.suspended": "是否掛起",
"lcdp.bpm.processInstance.grid.entity.processDefinitionKey": "流程定義代码",
"lcdp.bpm.processInstance.grid.entity.processDefinitionName": "流程定義名稱",
"lcdp.bpm.processInstance.grid.entity.processDefinitionId": "流程定義发布ID",
"lcdp.bpm.processInstance.grid.entity.variables": "流程變量(持久化)",
"lcdp.bpm.processInstance.grid.entity.transientVariables": "流程變量(臨時)",
"lcdp.bpm.processInstance.grid.entity.autoCompleteFirstTask": "是否自動完成第一個任務",
"lcdp.bpm.task.grid.title": "任務列表",
"lcdp.bpm.task.grid.toolbar.complete": "完成",
"lcdp.bpm.task.grid.toolbar.complete.tip": "您確定要完成工作任務嗎?",
"lcdp.bpm.task.grid.toolbar.claim": "領取",
"lcdp.bpm.task.grid.toolbar.claim.tip": "您確定要領取工作任務嗎?",
"lcdp.bpm.task.grid.toolbar.unclaim": "歸還",
"lcdp.bpm.task.grid.toolbar.unclaim.tip": "您確定要歸還工作任務嗎?",
"lcdp.bpm.task.grid.toolbar.jump": "跳轉",
"lcdp.bpm.task.grid.toolbar.terminate": "終止",
"lcdp.bpm.task.grid.toolbar.terminate.tip": "您確定要終止工作任務嗎?",
"lcdp.bpm.task.grid.toolbar.variables": "变量",
"lcdp.bpm.task.grid.entity.owner": "所有者",
"lcdp.bpm.task.grid.entity.assignee": "處理人",
"lcdp.bpm.task.grid.entity.createTime": "創建日期",
"lcdp.bpm.task.grid.entity.claimTime": "領取日期",
"lcdp.bpm.task.grid.entity.processInstanceId": "流程實例 ID",
"lcdp.bpm.variables.grid.title": "變量列表",
"lcdp.bpm.variables.grid.entity.doubleValue":"雙精度數值",
"lcdp.bpm.variables.grid.entity.longValue":"長整數值",
"lcdp.bpm.variables.grid.entity.rev":"修訂",
"lcdp.bpm.variables.grid.entity.executionId":"執行 ID",
"lcdp.bpm.variables.grid.entity.procInstId":"流程實例 ID",
"lcdp.bpm.variables.grid.entity.taskId":"任務 ID",
"lcdp.bpm.variables.grid.entity.scopeId":"範圍 ID",
"lcdp.bpm.variables.grid.entity.subScopeId":"子範圍 ID",
"lcdp.bpm.variables.grid.entity.scopeType":"範圍類型",
"lcdp.bpm.variables.grid.entity.byteArrayId":"字節數組 ID",
"lcdp.bpm.variables.grid.entity.text":"文本",
"lcdp.bpm.variables.grid.entity.text2":"文本2",
"lcdp.bpm.jumpTask.dialog.title": "任務跳轉",
"lcdp.bpm.jumpTask.form.entity.taskId": "任務ID",
"lcdp.bpm.jumpTask.form.entity.targetActivityId": "目標節點",
"lcdp.bpm.jumpTask.form.entity.targetAssignee": "處理人"
}

73
io.sc.platform.lcdp.frontend/src/i18n/messages_zh_CN.json

@ -140,11 +140,74 @@
"theme.grid.stickyBgColor":"锁定列背景颜色",
"theme.grid.borderColor":"表格边框颜色",
"lcdp.bpm.deployId":"发布ID",
"lcdp.bpm.canClaimTask":"领取任务",
"lcdp.frontend.export":"一键导出前端包",
"lcdp.frontend.export.frontendWebContextPath":"前端应用上下文路径",
"lcdp.frontend.export.backendApiWebContextPath":"后端应用上下文路径"
"lcdp.frontend.export.backendApiWebContextPath":"后端应用上下文路径",
"lcdp.bpm.tabs.processDefine": "流程定义",
"lcdp.bpm.tabs.processInstance": "流程实例",
"lcdp.bpm.tabs.task": "工作任务",
"lcdp.bpm.processDefine.grid.title": "流程定义列表",
"lcdp.bpm.processDefine.grid.toolbar.design": "设计",
"lcdp.bpm.processDefine.grid.toolbar.deployment": "发布",
"lcdp.bpm.processDefine.grid.toolbar.deployment.tip": "您确定要发布流程吗?",
"lcdp.bpm.processDefine.grid.toolbar.createProcessInstance": "创建流程实例",
"lcdp.bpm.processDefine.grid.toolbar.queryProcessInstance": "查询流程实例",
"lcdp.bpm.processDefine.grid.entity.deployId": "发布 ID",
"lcdp.bpm.processDefine.grid.entity.canClaimTask": "领取任务",
"lcdp.bpm.designer.dialog.title.prefix": "流程设计器",
"lcdp.bpm.createProcessInstance.dialog.title": "创建流程实例",
"lcdp.bpm.processInstance.grid.title": "流程实例列表",
"lcdp.bpm.processInstance.grid.toolbar.queryTask": "查询任务",
"lcdp.bpm.processInstance.grid.entity.bussinessKey": "业务键",
"lcdp.bpm.processInstance.grid.entity.startTime": "发起日期",
"lcdp.bpm.processInstance.grid.entity.startUserId": "发起者",
"lcdp.bpm.processInstance.grid.entity.suspended": "是否挂起",
"lcdp.bpm.processInstance.grid.entity.processDefinitionKey": "流程定义代码",
"lcdp.bpm.processInstance.grid.entity.processDefinitionName": "流程定义名称",
"lcdp.bpm.processInstance.grid.entity.processDefinitionId": "流程定义发布ID",
"lcdp.bpm.processInstance.grid.entity.variables": "流程变量(持久化)",
"lcdp.bpm.processInstance.grid.entity.transientVariables": "流程变量(临时)",
"lcdp.bpm.processInstance.grid.entity.autoCompleteFirstTask": "是否自动完成第一个任务",
"lcdp.bpm.task.grid.title": "任务列表",
"lcdp.bpm.task.grid.toolbar.complete": "完成",
"lcdp.bpm.task.grid.toolbar.complete.tip": "您确定要完成工作任务吗?",
"lcdp.bpm.task.grid.toolbar.claim": "领取",
"lcdp.bpm.task.grid.toolbar.claim.tip": "您确定要领取工作任务吗?",
"lcdp.bpm.task.grid.toolbar.unclaim": "归还",
"lcdp.bpm.task.grid.toolbar.unclaim.tip": "您确定要归还工作任务吗?",
"lcdp.bpm.task.grid.toolbar.jump": "跳转",
"lcdp.bpm.task.grid.toolbar.terminate": "终止",
"lcdp.bpm.task.grid.toolbar.terminate.tip": "您确定要终止工作任务吗?",
"lcdp.bpm.task.grid.toolbar.variables": "变量",
"lcdp.bpm.task.grid.entity.owner": "所有者",
"lcdp.bpm.task.grid.entity.assignee": "处理人",
"lcdp.bpm.task.grid.entity.createTime": "创建日期",
"lcdp.bpm.task.grid.entity.claimTime": "领取日期",
"lcdp.bpm.task.grid.entity.processInstanceId": "流程实例 ID",
"lcdp.bpm.variables.grid.title": "变量列表",
"lcdp.bpm.variables.grid.entity.doubleValue":"双精度数值",
"lcdp.bpm.variables.grid.entity.longValue":"长整数值",
"lcdp.bpm.variables.grid.entity.rev":"修订",
"lcdp.bpm.variables.grid.entity.executionId":"执行 ID",
"lcdp.bpm.variables.grid.entity.procInstId":"流程实例 ID",
"lcdp.bpm.variables.grid.entity.taskId":"任务 ID",
"lcdp.bpm.variables.grid.entity.scopeId":"范围 ID",
"lcdp.bpm.variables.grid.entity.subScopeId":"子范围 ID",
"lcdp.bpm.variables.grid.entity.scopeType":"范围类型",
"lcdp.bpm.variables.grid.entity.byteArrayId":"字节数据组 ID",
"lcdp.bpm.variables.grid.entity.text":"文本",
"lcdp.bpm.variables.grid.entity.text2":"文本2",
"lcdp.bpm.jumpTask.dialog.title": "任务跳转",
"lcdp.bpm.jumpTask.form.entity.taskId": "任务ID",
"lcdp.bpm.jumpTask.form.entity.targetActivityId": "目标节点",
"lcdp.bpm.jumpTask.form.entity.targetAssignee": "处理人"
}

300
io.sc.platform.lcdp.frontend/src/views/bpm/Bpm.vue

@ -3,22 +3,22 @@
<q-splitter :model-value="100" unit="px" class="w-full h-full">
<template #before>
<q-tabs v-model="selectedTabRef" vertical>
<q-tab name="processDefine" icon="mail" label="流程定义" />
<q-tab name="processInstance" icon="mail" label="流程实例" />
<q-tab name="task" icon="mail" label="工作任务" />
<q-tab name="processDefine" icon="mail" :label="$t('lcdp.bpm.tabs.processDefine')" />
<q-tab name="processInstance" icon="mail" :label="$t('lcdp.bpm.tabs.processInstance')" />
<q-tab name="task" icon="mail" :label="$t('lcdp.bpm.tabs.task')" />
</q-tabs>
</template>
<template #after>
<q-tab-panels v-model="selectedTabRef" animated swipeable vertical transition-prev="jump-up" transition-next="jump-up">
<q-tab-panels v-model="selectedTabRef" animated swipeable vertical transition-prev="jump-up" transition-next="jump-up" keep-alive>
<q-tab-panel name="processDefine">
<w-grid
ref="processDefineGridRef"
title="流程定义列表"
:title="$t('lcdp.bpm.processDefine.grid.title')"
:checkbox-selection="true"
:data-url="Environment.apiContextPath('/api/flowable/process')"
:pageable="true"
:pagination="{ sortBy: 'lastModifyDate', descending: true }"
:query-form-cols-num="3"
:query-form-cols-num="4"
:query-form-fields="[
{ name: 'key', label: $t('code'), type: 'text' },
{ name: 'name', label: $t('name'), type: 'text' },
@ -58,7 +58,7 @@
'separator',
{
name: 'design',
label: '设计',
label: $t('lcdp.bpm.processDefine.grid.toolbar.design'),
icon: 'bi-brush',
enableIf: (selecteds) => {
if (selecteds && selecteds.length > 0) {
@ -72,14 +72,16 @@
click: (selecteds: object[]) => {
if (selecteds && selecteds.length > 0) {
const selected = selecteds[0];
const title = '流程设计器 - ' + selected.name + (selected.version ? ' (' + selected.version + ')' : '');
let title = $t('lcdp.bpm.designer.dialog.title.prefix');
title += ' - ' + selected.name;
title += selected.version ? ' (' + selected.version + ')' : '';
processDesignerDialogRef.open(title, selected.id);
}
},
},
{
name: 'deployment',
label: '发布',
label: $t('lcdp.bpm.processDefine.grid.toolbar.deployment'),
icon: 'bi-arrow-up-circle',
enableIf: (selecteds) => {
if (selecteds && selecteds.length > 0) {
@ -91,7 +93,7 @@
return false;
},
click: (selecteds: object[]) => {
DialogManager.confirm('您确定要发布流程吗?', () => {
DialogManager.confirm($t('lcdp.bpm.processDefine.grid.toolbar.deployment.tip'), () => {
axios.post(Environment.apiContextPath('api/flowable/process/deploy/') + selecteds[0].id).then(() => {
processDefineGridRef.refresh();
NotifyManager.success();
@ -99,34 +101,49 @@
});
},
},
'separator',
{
name: 'queryProcessInstance',
label: '查询流程实例',
name: 'createProcessInstance',
label: $t('lcdp.bpm.processDefine.grid.toolbar.createProcessInstance'),
icon: 'bi-file-plus',
enableIf: (selecteds) => {
if (selecteds && selecteds.length > 0) {
const selected = selecteds[0];
if ('SKETCH' != selected.status) {
if ('RELEASE' === selected.status) {
return true;
}
}
return false;
},
click: (selecteds: object[]) => {},
click: (selecteds) => {
if (selecteds && selecteds.length > 0) {
const selected = selecteds[0];
createProcessInstanceDialogRef.open(selected.key, selected.name);
}
},
},
{
name: 'createProcessInstance',
label: '创建流程实例',
name: 'queryProcessInstance',
label: $t('lcdp.bpm.processDefine.grid.toolbar.queryProcessInstance'),
icon: 'bi-list-ul',
enableIf: (selecteds) => {
if (selecteds && selecteds.length > 0) {
const selected = selecteds[0];
if ('RELEASE' === selected.status) {
if ('SKETCH' != selected.status) {
return true;
}
}
return false;
},
click: (selecteds) => {
createProcessInstanceDialogRef.open();
click: (selecteds: object[]) => {
if (selecteds && selecteds.length > 0) {
const selected = selecteds[0];
selectedTabRef = 'processInstance';
nextTick(() => {
processInstanceGridRef.getQueryForm().setFieldValue('deployedId', selected.deployedId);
processInstanceGridRef.refresh();
});
}
},
},
'separator',
@ -146,15 +163,15 @@
},
{ width: 60, name: 'version', label: $t('version') },
{ width: 60, name: 'status', label: $t('status'), format: Formater.enum(ProcessStatusEnum) },
{ width: 300, name: 'deployedId', label: $t('lcdp.bpm.deployId') },
{ width: 250, name: 'deployedId', label: $t('lcdp.bpm.processDefine.grid.entity.deployId') },
{
width: 80,
width: 90,
name: 'canClaimTask',
label: $t('lcdp.bpm.canClaimTask'),
label: $t('lcdp.bpm.processDefine.grid.entity.canClaimTask'),
format: Formater.yesNo(),
},
{ width: 80, name: 'lastModifier', label: $t('lastModifier') },
{ width: 100, name: 'lastModifyDate', label: $t('lastModifyDate'), format: Formater.dateOnly() },
{ width: 100, name: 'lastModifier', label: $t('lastModifier') },
{ width: 110, name: 'lastModifyDate', label: $t('lastModifyDate'), format: Formater.dateOnly() },
]"
:editor="{
dialog: {
@ -206,8 +223,11 @@
panel: {
columnNum: 1,
fields: [
{ name: 'id', label: $t('id') },
{ name: 'category', label: $t('category') },
{ name: 'key', label: $t('code') },
{ name: 'name', label: $t('name'), format: Formater.none() },
{ name: 'description', label: $t('description') },
{ name: 'version', label: $t('version') },
{ name: 'status', label: $t('status'), format: Formater.enum(ProcessStatusEnum) },
{ name: 'deployedId', label: $t('lcdp.bpm.deployId') },
@ -222,15 +242,219 @@
<q-tab-panel name="processInstance">
<w-grid
ref="processInstanceGridRef"
title="流程实例列表"
:checkbox-selection="true"
:data-url="Environment.apiContextPath('/api/flowable/process')"
:title="$t('lcdp.bpm.processInstance.grid.title')"
:checkbox-selection="false"
:data-url="Environment.apiContextPath('/api/flowable/process/query/instance')"
:auto-fetch-data="false"
:pageable="true"
:pagination="{ sortBy: 'lastModifyDate', descending: true }"
:pagination="{}"
:query-form-cols-num="3"
:query-form-fields="[]"
:toolbar-actions="['query', 'separator', 'refresh', 'separator', 'add', 'clone', 'separator', 'view', 'separator', 'export']"
:columns="[]"
:query-form-fields="[
{ name: 'key', label: $t('lcdp.bpm.processInstance.grid.entity.processDefinitionKey'), type: 'text' },
{ name: 'name', label: $t('lcdp.bpm.processInstance.grid.entity.processDefinitionName'), type: 'text' },
{ name: 'deployedId', label: $t('lcdp.bpm.processInstance.grid.entity.processDefinitionId'), type: 'text' },
]"
:toolbar-actions="[
'query',
'separator',
'refresh',
'separator',
{
name: 'queryTask',
label: $t('lcdp.bpm.processInstance.grid.toolbar.queryTask'),
icon: 'bi-list-ul',
enableIf: (selecteds) => {
return selecteds && selecteds.length > 0;
},
click: (selecteds: object[]) => {
if (selecteds && selecteds.length > 0) {
const selected = selecteds[0];
selectedTabRef = 'task';
nextTick(() => {
taskGridRef.getQueryForm().setFieldValue('processInstanceId', selected.id);
taskGridRef.refresh();
});
}
},
},
{
name: 'variables',
label: $t('lcdp.bpm.task.grid.toolbar.variables'),
icon: 'bi-record',
enableIf: function (selecteds) {
return selecteds && selecteds.length > 0;
},
click: (selecteds) => {
if (selecteds && selecteds.length > 0) {
const selected = selecteds[0];
variableDialogRef.open(selected.id);
}
},
},
'separator',
'view',
'separator',
'export',
]"
:columns="[
{ name: 'id', label: $t('id') },
{ name: 'businessKey', label: $t('lcdp.bpm.processInstance.grid.entity.bussinessKey') },
{ name: 'startTime', label: $t('lcdp.bpm.processInstance.grid.entity.startTime'), format: Formater.dateOnly() },
{ name: 'startUserId', label: $t('lcdp.bpm.processInstance.grid.entity.startUserId') },
{ name: 'suspended', label: $t('lcdp.bpm.processInstance.grid.entity.suspended') },
{ name: 'processDefinitionKey', label: $t('lcdp.bpm.processInstance.grid.entity.processDefinitionKey') },
{ name: 'processDefinitionName', label: $t('lcdp.bpm.processInstance.grid.entity.processDefinitionName') },
{ name: 'processDefinitionId', label: $t('lcdp.bpm.processInstance.grid.entity.processDefinitionId') },
]"
:editor="{
dialog: {
width: '600px',
height: '610px',
},
form: {
colsNum: 1,
fields: [],
},
}"
:viewer="{
panel: {
columnNum: 1,
fields: [],
},
}"
></w-grid>
</q-tab-panel>
<q-tab-panel name="task">
<w-grid
ref="taskGridRef"
:title="$t('lcdp.bpm.task.grid.title')"
:checkbox-selection="false"
:data-url="Environment.apiContextPath('/api/flowable/process/query/task')"
:auto-fetch-data="false"
:pageable="true"
:pagination="{ sortBy: 'createTime', descending: true }"
:query-form-cols-num="3"
:query-form-fields="[
{ name: 'processInstanceId', label: $t('lcdp.bpm.task.grid.entity.processInstanceId'), type: 'text', queryOperator: 'equals' },
]"
:toolbar-actions="[
'query',
'separator',
'refresh',
'separator',
[
{
label: $t('operation'),
},
{
name: 'complete',
label: $t('lcdp.bpm.task.grid.toolbar.complete'),
enableIf: function (selecteds) {
return selecteds && selecteds.length > 0;
},
click: (selecteds) => {
if (selecteds && selecteds.length > 0) {
DialogManager.confirm($t('lcdp.bpm.task.grid.toolbar.complete.tip'), () => {
axios.post(Environment.apiContextPath('/api/flowable/process/operation/complete/') + selecteds[0].id).then(() => {
taskGridRef.refresh();
NotifyManager.success();
});
});
}
},
},
{
name: 'claim',
label: $t('lcdp.bpm.task.grid.toolbar.claim'),
enableIf: function (selecteds) {
return selecteds && selecteds.length > 0 && !selecteds[0].assignee;
},
click: (selecteds) => {
if (selecteds && selecteds.length > 0) {
DialogManager.confirm($t('lcdp.bpm.task.grid.toolbar.claim.tip'), () => {
axios.post(Environment.apiContextPath('/api/flowable/process/operation/claim/') + selecteds[0].id).then(() => {
taskGridRef.refresh();
NotifyManager.success();
});
});
}
},
},
{
name: 'unclaim',
label: $t('lcdp.bpm.task.grid.toolbar.unclaim'),
enableIf: function (selecteds) {
return selecteds && selecteds.length > 0 && selecteds[0].assignee;
},
click: (selecteds) => {
if (selecteds && selecteds.length > 0) {
DialogManager.confirm($t('lcdp.bpm.task.grid.toolbar.unclaim.tip'), () => {
axios.post(Environment.apiContextPath('/api/flowable/process/operation/unClaim/') + selecteds[0].id).then(() => {
taskGridRef.refresh();
NotifyManager.success();
});
});
}
},
},
{
name: 'jump',
label: $t('lcdp.bpm.task.grid.toolbar.jump'),
enableIf: function (selecteds) {
return selecteds && selecteds.length > 0;
},
click: (selecteds) => {
if (selecteds && selecteds.length > 0) {
jumpTaskDialogRef.open(selecteds[0].id);
}
},
},
{
name: 'terminate',
label: $t('lcdp.bpm.task.grid.toolbar.terminate'),
enableIf: function (selecteds) {
return selecteds && selecteds.length > 0;
},
click: (selecteds) => {
if (selecteds && selecteds.length > 0) {
DialogManager.confirm($t('lcdp.bpm.task.grid.toolbar.terminate.tip'), () => {
axios.post(Environment.apiContextPath('/api/flowable/process/operation/terminateProcessInstance/') + selecteds[0].id).then(() => {
taskGridRef.refresh();
NotifyManager.success();
});
});
}
},
},
],
{
name: 'variables',
label: $t('lcdp.bpm.task.grid.toolbar.variables'),
icon: 'bi-record',
enableIf: function (selecteds) {
return selecteds && selecteds.length > 0;
},
click: (selecteds) => {
if (selecteds && selecteds.length > 0) {
const selected = selecteds[0];
variableDialogRef.open(selected.processInstanceId);
}
},
},
'separator',
'view',
'separator',
'export',
]"
:columns="[
{ name: 'id', label: $t('id') },
{ name: 'name', label: $t('name') },
{ name: 'owner', label: $t('lcdp.bpm.task.grid.entity.owner') },
{ name: 'assignee', label: $t('lcdp.bpm.task.grid.entity.assignee') },
{ name: 'createTime', label: $t('lcdp.bpm.task.grid.entity.createTime') },
{ name: 'claimTime', label: $t('lcdp.bpm.task.grid.entity.claimTime') },
{ name: 'processInstanceId', label: $t('lcdp.bpm.task.grid.entity.processInstanceId') },
]"
:editor="{
dialog: {
width: '600px',
@ -249,7 +473,6 @@
}"
></w-grid>
</q-tab-panel>
<q-tab-panel name="task"></q-tab-panel>
</q-tab-panels>
</template>
</q-splitter>
@ -259,20 +482,29 @@
</ProcessDesigner>
<CreateProcessInstanceDialog ref="createProcessInstanceDialogRef"></CreateProcessInstanceDialog>
<VariableDialog ref="variableDialogRef"></VariableDialog>
<JumpTaskDialog ref="jumpTaskDialogRef"></JumpTaskDialog>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import { ref, nextTick } from 'vue';
import { Environment, DialogManager, NotifyManager, axios, EnumTools, DictionaryTools, Formater, Options } from 'platform-core';
import ProcessDesigner from './ProcessDesigner.vue';
import CreateProcessInstanceDialog from './CreateProcessInstanceDialog.vue';
import VariableDialog from './VariableDialog.vue';
import JumpTaskDialog from './JumpTaskDialog.vue';
const selectedTabRef = ref('processDefine');
const processDefineGridRef = ref();
const processInstanceGridRef = ref();
const taskGridRef = ref();
const variableDialogRef = ref();
const jumpTaskDialogRef = ref();
const processDesignerDialogRef = ref();
const processDesignerIframeRef = ref();
const createProcessInstanceDialogRef = ref();
const show = ref(true);
const ProcessStatusEnum = await EnumTools.fetch('io.sc.platform.flowable.enums.ProcessStatus');
const ProcessCategoryDictionaries = await DictionaryTools.fetch('WORK_FLOW');

55
io.sc.platform.lcdp.frontend/src/views/bpm/CreateProcessInstanceDialog.vue

@ -1,13 +1,64 @@
<template>
<q-dialog ref="dialogRef" title="ok" allow-focus-outside width="500px" height="230px" :can-maximize="false"> </q-dialog>
<w-dialog
ref="dialogRef"
:title="$t('lcdp.bpm.createProcessInstance.dialog.title') + ' - ' + processDefineNameRef"
width="500px"
height="450px"
:can-maximize="false"
:buttons="[
{
label: $t('submit'),
noCaps: true,
click: () => {
const data = formRef.getData();
axios
.post(Environment.apiContextPath('/api/flowable/process/operation/start/' + processDefineKeyRef), {
bussinessKey: data.bussinessKey,
variables: Tools.json2Object(data.variables),
transientVariables: Tools.json2Object(data.transientVariables),
autoCompleteFirstTask: data.autoCompleteFirstTask,
})
.then(() => {
NotifyManager.success();
close();
});
},
},
]"
>
<w-form
ref="formRef"
:cols-num="1"
:fields="[
{
name: 'processDefinitionKey',
label: $t('lcdp.bpm.processDefine.grid.entity.deployId'),
type: 'text',
defaultValue: processDefineKeyRef,
hidden: true,
},
{ name: 'bussinessKey', label: $t('lcdp.bpm.processInstance.grid.entity.bussinessKey'), type: 'text' },
{ name: 'variables', label: $t('lcdp.bpm.processInstance.grid.entity.variables'), type: 'textarea', rows: 5 },
{ name: 'transientVariables', label: $t('lcdp.bpm.processInstance.grid.entity.transientVariables'), type: 'textarea', rows: 5 },
{ name: 'autoCompleteFirstTask', label: $t('lcdp.bpm.processInstance.grid.entity.autoCompleteFirstTask'), type: 'checkbox' },
]"
class="p-2"
></w-form>
</w-dialog>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import { axios, Environment, NotifyManager, Tools } from 'platform-core';
const dialogRef = ref();
const formRef = ref();
const processDefineKeyRef = ref('');
const processDefineNameRef = ref('');
const open = () => {
const open = (key: string, name: string) => {
processDefineKeyRef.value = key;
processDefineNameRef.value = name;
dialogRef.value.show();
};

87
io.sc.platform.lcdp.frontend/src/views/bpm/JumpTaskDialog.vue

@ -0,0 +1,87 @@
<template>
<w-dialog
ref="dialogRef"
:title="$t('lcdp.bpm.jumpTask.dialog.title')"
width="400px"
height="250px"
:can-maximize="false"
:buttons="[
{
label: $t('submit'),
noCaps: true,
click: () => {
const data = formRef.getData();
axios
.post(Environment.apiContextPath('/api/flowable/process/operation/jump'), {
taskId: data.taskId,
targetActivityId: data.targetActivityId,
targetAssignee: data.targetAssignee,
})
.then(() => {
NotifyManager.success();
close();
});
},
},
]"
>
<w-form
ref="formRef"
:cols-num="1"
:fields="[
{ name: 'taskId', label: $t('lcdp.bpm.jumpTask.form.entity.taskId'), type: 'text', defaultValue: taskIdRef, hidden: true },
{
name: 'targetActivityId',
label: $t('lcdp.bpm.jumpTask.form.entity.targetActivityId'),
type: 'select',
required: true,
options: activityListRef,
'onUpdate:modelValue': (value) => {
axios.get(Environment.apiContextPath('/api/flowable/process/query/candidate?taskId=' + taskIdRef + '&activityId=' + value)).then((response) => {
candidateListRef.splice(0, candidateListRef.length);
for (const item of response.data) {
candidateListRef.push({ label: item.userName + '(' + item.loginName + ')', value: item.loginName });
}
});
},
},
{ name: 'targetAssignee', label: $t('lcdp.bpm.jumpTask.form.entity.targetAssignee'), type: 'select', options: candidateListRef },
]"
class="p-2"
></w-form>
</w-dialog>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import { axios, Environment, NotifyManager, Tools } from 'platform-core';
const dialogRef = ref();
const formRef = ref();
const taskIdRef = ref();
const activityListRef = ref();
const candidateListRef = ref<any[]>([]);
const open = (taskId: string) => {
if (taskId) {
taskIdRef.value = taskId;
axios.get(Environment.apiContextPath('/api/flowable/process/query/activity/' + taskId)).then((response) => {
const activityList: any[] = [];
for (const item of response.data) {
activityList.push({ label: item.name, value: item.id });
}
activityListRef.value = activityList;
});
}
dialogRef.value.show();
};
const close = () => {
dialogRef.value.hide();
};
defineExpose({
open,
close,
});
</script>

98
io.sc.platform.lcdp.frontend/src/views/bpm/VariableDialog.vue

@ -0,0 +1,98 @@
<template>
<w-dialog ref="dialogRef" :title="$t('lcdp.bpm.variables.grid.title')" width="1024px" height="750px" :can-maximize="false">
<w-grid
ref="gridRef"
class="px-1"
:title="$t('lcdp.bpm.task.grid.title')"
:checkbox-selection="false"
:fetch-data-url="Environment.apiContextPath('/api/flowable/process/query/variable?procInstId=' + procInstIdRef)"
:pageable="true"
:pagination="{ sortBy: 'createTime', descending: true }"
:toolbar-actions="['refresh', 'separator', 'view', 'separator', 'export']"
:columns="[
{ width: 200, name: 'name', label: $t('name') },
{ width: 100, name: 'type', label: $t('type') },
{
width: 500,
name: 'value',
label: $t('value'),
format: (value, record) => {
if (record.type == 'boolean') {
if (record.longValue == 1) {
return 'true';
} else {
return 'false';
}
} else if (record.type == 'integer') {
return record.longValue;
} else if (record.type == 'double') {
return record.doubleValue;
} else if (record.type == 'string') {
return record.text;
} else {
return value;
}
},
},
{ width: 100, name: 'doubleValue', label: $t('lcdp.bpm.variables.grid.entity.doubleValue') },
{ width: 100, name: 'longValue', label: $t('lcdp.bpm.variables.grid.entity.longValue') },
{ width: 100, name: 'rev', label: $t('lcdp.bpm.variables.grid.entity.rev') },
{ width: 100, name: 'executionId', label: $t('lcdp.bpm.variables.grid.entity.executionId') },
{ width: 100, name: 'procInstId', label: $t('lcdp.bpm.variables.grid.entity.procInstId') },
{ width: 100, name: 'taskId', label: $t('lcdp.bpm.variables.grid.entity.taskId') },
{ width: 100, name: 'scopeId', label: $t('lcdp.bpm.variables.grid.entity.scopeId') },
{ width: 100, name: 'subScopeId', label: $t('lcdp.bpm.variables.grid.entity.subScopeId') },
{ width: 100, name: 'scopeType', label: $t('lcdp.bpm.variables.grid.entity.scopeType') },
{ width: 100, name: 'byteArrayId', label: $t('lcdp.bpm.variables.grid.entity.byteArrayId') },
{ width: 100, name: 'text', label: $t('lcdp.bpm.variables.grid.entity.text') },
{ width: 100, name: 'text2', label: $t('lcdp.bpm.variables.grid.entity.text2') },
]"
:viewer="{
panel: {
columnNum: 1,
fields: [
{ name: 'id', label: $t('id') },
{ name: 'name', label: $t('name') },
{ name: 'type', label: $t('type') },
{ name: 'value', label: $t('value') },
{ name: 'doubleValue', label: $t('lcdp.bpm.variables.grid.entity.doubleValue') },
{ name: 'longValue', label: $t('lcdp.bpm.variables.grid.entity.longValue') },
{ name: 'rev', label: $t('lcdp.bpm.variables.grid.entity.rev') },
{ name: 'executionId', label: $t('lcdp.bpm.variables.grid.entity.executionId') },
{ name: 'procInstId', label: $t('lcdp.bpm.variables.grid.entity.procInstId') },
{ name: 'taskId', label: $t('lcdp.bpm.variables.grid.entity.taskId') },
{ name: 'scopeId', label: $t('lcdp.bpm.variables.grid.entity.scopeId') },
{ name: 'subScopeId', label: $t('lcdp.bpm.variables.grid.entity.subScopeId') },
{ name: 'scopeType', label: $t('lcdp.bpm.variables.grid.entity.scopeType') },
{ name: 'byteArrayId', label: $t('lcdp.bpm.variables.grid.entity.byteArrayId') },
{ name: 'text', label: $t('lcdp.bpm.variables.grid.entity.text') },
{ name: 'text2', label: $t('lcdp.bpm.variables.grid.entity.text2') },
],
},
}"
></w-grid>
</w-dialog>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import { Environment } from 'platform-core';
const dialogRef = ref();
const gridRef = ref();
const procInstIdRef = ref('');
const open = (procInstId: string, name: string) => {
procInstIdRef.value = procInstId;
dialogRef.value.show();
};
const close = () => {
dialogRef.value.hide();
};
defineExpose({
open,
close,
});
</script>

4
io.sc.platform.mvc.frontend/package.json

@ -1,6 +1,6 @@
{
"name": "io.sc.platform.mvc.frontend",
"version": "8.1.22",
"version": "8.1.23",
"description": "",
"private": false,
"keywords": [
@ -80,7 +80,7 @@
"luckyexcel": "1.0.1",
"mockjs": "1.1.0",
"pinia": "2.1.7",
"platform-core": "8.1.114",
"platform-core": "8.1.119",
"quasar": "2.14.2",
"tailwindcss": "3.4.0",
"vue": "3.4.3",

7
io.sc.platform.mvc.frontend/webpack.env.serve.cjs

@ -6,6 +6,7 @@ const { merge } = require('webpack-merge');
const common = require('./webpack.config.common.cjs'); // webpack 通用配置
const mf = require('./webpack.config.mf.cjs'); // webpack 模块联邦配置
const { RemoteFrontEndModuleRegister } = require('./util-frontend-register.cjs'); // 远程模块注册器
const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer');
module.exports = (env)=> merge(common, mf,{
mode: 'development',
@ -32,4 +33,10 @@ module.exports = (env)=> merge(common, mf,{
return middlewares;
}
},
plugins:[
new BundleAnalyzerPlugin({
analyzerPort: 4000, // 指定端口号
openAnalyzer: false,
}),
]
});

11
io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/support/QueryParameter.java

@ -23,6 +23,17 @@ public class QueryParameter {
protected List<Criteria> criterias =new ArrayList<Criteria>(); //criteria 对象列表(将 json 串转成对象后的列表)
protected String exportFilename; //导出文件名
public Criteria getCriteriaByFieldName(String fieldName){
if(StringUtils.hasText(fieldName)){
for(Criteria criteria : criterias){
if(fieldName.equals(criteria.getFieldName())){
return criteria;
}
}
}
return null;
}
public Pageable getJpaPageable(){
page =page<0? 0 : page; // 最小设置为 0
if(firstPage==1){

4
io.sc.platform.security.frontend/package.json

@ -1,6 +1,6 @@
{
"name": "io.sc.platform.security.frontend",
"version": "8.1.22",
"version": "8.1.23",
"description": "",
"private": false,
"keywords": [
@ -99,6 +99,6 @@
"vue-dompurify-html": "5.0.1",
"vue-i18n": "9.8.0",
"vue-router": "4.2.5",
"platform-core": "8.1.114"
"platform-core": "8.1.119"
}
}

4
io.sc.platform.system.frontend/package.json

@ -1,6 +1,6 @@
{
"name": "io.sc.platform.system.frontend",
"version": "8.1.22",
"version": "8.1.23",
"description": "",
"private": false,
"keywords": [
@ -80,7 +80,7 @@
"luckyexcel": "1.0.1",
"mockjs": "1.1.0",
"pinia": "2.1.7",
"platform-core": "8.1.114",
"platform-core": "8.1.119",
"quasar": "2.14.2",
"tailwindcss": "3.4.0",
"vue": "3.4.3",

Loading…
Cancel
Save