From 578b6d26e4b5929acdda24a624fd034281afb32c Mon Sep 17 00:00:00 2001 From: YuePeng Date: Wed, 3 Jul 2024 14:38:06 +0800 Subject: [PATCH 01/28] update erupt-log.html --- erupt-upms/src/main/resources/tpl/erupt-log.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/erupt-upms/src/main/resources/tpl/erupt-log.html b/erupt-upms/src/main/resources/tpl/erupt-log.html index e7f766301..669a373c9 100644 --- a/erupt-upms/src/main/resources/tpl/erupt-log.html +++ b/erupt-upms/src/main/resources/tpl/erupt-log.html @@ -79,6 +79,8 @@ window.parent.location.reload(); } else if (error.response.status === 403) { window.location.href = "${base}/error/403.html" + } else if (error.response.status === 404) { + window.location.href = "${base}/error/404.html" } else { xterm.writeln("status: " + error.response.status + " → " + error.response.data.message); } From 20ef259aba13f0dcccb45752369d31d5e6a5343b Mon Sep 17 00:00:00 2001 From: YuePeng Date: Tue, 9 Jul 2024 09:35:31 +0800 Subject: [PATCH 02/28] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../erupt/upms/handler/UpmsPowerHandler.java | 24 +++++-------------- 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/erupt-upms/src/main/java/xyz/erupt/upms/handler/UpmsPowerHandler.java b/erupt-upms/src/main/java/xyz/erupt/upms/handler/UpmsPowerHandler.java index f636193ab..3d260ca71 100644 --- a/erupt-upms/src/main/java/xyz/erupt/upms/handler/UpmsPowerHandler.java +++ b/erupt-upms/src/main/java/xyz/erupt/upms/handler/UpmsPowerHandler.java @@ -31,24 +31,12 @@ public class UpmsPowerHandler implements PowerHandler { @Override public void handler(PowerObject power) { Map permissionMap = eruptUserService.getEruptMenuValuesMap(); - if (power.isAdd()) { - power.setAdd(powerOff(EruptFunPermissions.ADD, permissionMap)); - } - if (power.isDelete()) { - power.setDelete(powerOff(EruptFunPermissions.DELETE, permissionMap)); - } - if (power.isEdit()) { - power.setEdit(powerOff(EruptFunPermissions.EDIT, permissionMap)); - } - if (power.isViewDetails()) { - power.setViewDetails(powerOff(EruptFunPermissions.VIEW_DETAIL, permissionMap)); - } - if (power.isExport()) { - power.setExport(powerOff(EruptFunPermissions.EXPORT, permissionMap)); - } - if (power.isImportable()) { - power.setImportable(powerOff(EruptFunPermissions.IMPORTABLE, permissionMap)); - } + if (power.isAdd()) power.setAdd(powerOff(EruptFunPermissions.ADD, permissionMap)); + if (power.isDelete()) power.setDelete(powerOff(EruptFunPermissions.DELETE, permissionMap)); + if (power.isEdit()) power.setEdit(powerOff(EruptFunPermissions.EDIT, permissionMap)); + if (power.isViewDetails()) power.setViewDetails(powerOff(EruptFunPermissions.VIEW_DETAIL, permissionMap)); + if (power.isExport()) power.setExport(powerOff(EruptFunPermissions.EXPORT, permissionMap)); + if (power.isImportable()) power.setImportable(powerOff(EruptFunPermissions.IMPORTABLE, permissionMap)); } private boolean powerOff(EruptFunPermissions eruptFunPermissions, Map permissionMap) { From e8a582f7415bcb9a28e6990b8c61e02a452e45fa Mon Sep 17 00:00:00 2001 From: YuePeng Date: Thu, 11 Jul 2024 10:35:00 +0800 Subject: [PATCH 03/28] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F,=E5=A2=9E=E5=8A=A0=20JUL=20=E7=9A=84?= =?UTF-8?q?=E6=97=A5=E5=BF=97appender?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xyz/erupt/core/log/EruptJULAppender.java | 41 +++++++++++++++++++ .../java/xyz/erupt/core/log/Formatter.java | 2 +- .../toolkit/notify/RedisNotifyDataProxy.java | 5 +-- 3 files changed, 43 insertions(+), 5 deletions(-) create mode 100644 erupt-core/src/main/java/xyz/erupt/core/log/EruptJULAppender.java diff --git a/erupt-core/src/main/java/xyz/erupt/core/log/EruptJULAppender.java b/erupt-core/src/main/java/xyz/erupt/core/log/EruptJULAppender.java new file mode 100644 index 000000000..1beb71e23 --- /dev/null +++ b/erupt-core/src/main/java/xyz/erupt/core/log/EruptJULAppender.java @@ -0,0 +1,41 @@ +package xyz.erupt.core.log; + +import java.util.logging.Handler; +import java.util.logging.LogRecord; + +public class EruptJULAppender extends Handler implements EruptAppender { + + @Override + public void publish(LogRecord record) { + EruptLogManager.log(new Formatter() + .timestamp(record.getMillis()) + .space() + .level(record.getLevel().toString()) + .value(" --- [") + .thread(Thread.currentThread().getName()) + .value("] ") + .name(record.getLoggerName()) + .value("(" + record.getSourceMethodName() + ":" + record.getSequenceNumber() + ")") + .value(" : ") + .value(record.getMessage()) + .throwable(record.getThrown()) + .toString() + ); + } + + @Override + public void flush() { + + } + + @Override + public void close() throws SecurityException { + + } + + @Override + public void init() { + + } + +} diff --git a/erupt-core/src/main/java/xyz/erupt/core/log/Formatter.java b/erupt-core/src/main/java/xyz/erupt/core/log/Formatter.java index 3d7d95dd5..acf91e343 100644 --- a/erupt-core/src/main/java/xyz/erupt/core/log/Formatter.java +++ b/erupt-core/src/main/java/xyz/erupt/core/log/Formatter.java @@ -40,7 +40,7 @@ public Formatter level(String level) { } else if (Level.ERROR.name().equals(level)) { ansi = ansi().fg(Ansi.Color.RED); } else { - ansi = ansi().fg(Ansi.Color.CYAN); + ansi = ansi().fg(Ansi.Color.MAGENTA); } buf.append(ansi); this.alignment(level, 5); diff --git a/erupt-toolkit/src/main/java/xyz/erupt/toolkit/notify/RedisNotifyDataProxy.java b/erupt-toolkit/src/main/java/xyz/erupt/toolkit/notify/RedisNotifyDataProxy.java index 7d83ebf80..aaa68df5a 100644 --- a/erupt-toolkit/src/main/java/xyz/erupt/toolkit/notify/RedisNotifyDataProxy.java +++ b/erupt-toolkit/src/main/java/xyz/erupt/toolkit/notify/RedisNotifyDataProxy.java @@ -1,6 +1,5 @@ package xyz.erupt.toolkit.notify; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Component; import xyz.erupt.annotation.fun.DataProxy; @@ -42,9 +41,7 @@ public void afterDelete(Object o) { private void publish(DataAction action, Object data) { if (eruptProp.isRedisSession()) { - if (null == DataProxyContext.params()[0]) { - throw new EruptWebApiRuntimeException("DataProxy params[0] not found → redis channel"); - } + if (DataProxyContext.params().length == 0 || null == DataProxyContext.params()[0]) throw new EruptWebApiRuntimeException("DataProxy params[0] not found → redis channel"); stringRedisTemplate.convertAndSend(DataProxyContext.params()[0], GsonFactory.getGson().toJson(new NotifyData<>(action, data))); } } From 664246443b0238b14e4e65ec631e797f4dd0597c Mon Sep 17 00:00:00 2001 From: YuePeng Date: Thu, 11 Jul 2024 10:48:00 +0800 Subject: [PATCH 04/28] name alignment use leftPad --- .../src/main/java/xyz/erupt/core/log/Formatter.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/erupt-core/src/main/java/xyz/erupt/core/log/Formatter.java b/erupt-core/src/main/java/xyz/erupt/core/log/Formatter.java index acf91e343..9806f57dc 100644 --- a/erupt-core/src/main/java/xyz/erupt/core/log/Formatter.java +++ b/erupt-core/src/main/java/xyz/erupt/core/log/Formatter.java @@ -43,7 +43,7 @@ public Formatter level(String level) { ansi = ansi().fg(Ansi.Color.MAGENTA); } buf.append(ansi); - this.alignment(level, 5); + this.alignment(true, level, 5); buf.append(ansi().fg(Ansi.Color.DEFAULT)); return this; } @@ -54,13 +54,13 @@ public Formatter value(String value) { } public Formatter thread(String value) { - this.alignment(value, 15); + this.alignment(true, value, 15); return this; } public Formatter name(String name) { buf.append(ansi().fg(Ansi.Color.CYAN)); - this.alignment(name, 40); + this.alignment(false, name, 40); buf.append(ansi().fg(Ansi.Color.DEFAULT)); return this; } @@ -83,12 +83,11 @@ public Formatter throwable(Throwable throwable) { return this; } - public void alignment(String text, int size) { + public void alignment(boolean leftPad, String text, int size) { if (text.length() < size) { - for (int i = size - text.length(); i > 0; i--) { - buf.append(" "); - } + if (leftPad) for (int i = size - text.length(); i > 0; i--) buf.append(" "); buf.append(text); + if (!leftPad) for (int i = size - text.length(); i > 0; i--) buf.append(" "); } else { buf.append(text.substring(text.length() - size)); } From b9d2d2df9cf86ddace937f5239c15d638ae7d04a Mon Sep 17 00:00:00 2001 From: YuePeng Date: Thu, 11 Jul 2024 11:00:11 +0800 Subject: [PATCH 05/28] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=AF=B9=E9=BD=90?= =?UTF-8?q?=E7=9A=84=E7=AE=97=E6=B3=95=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/xyz/erupt/core/log/Formatter.java | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/erupt-core/src/main/java/xyz/erupt/core/log/Formatter.java b/erupt-core/src/main/java/xyz/erupt/core/log/Formatter.java index 9806f57dc..4f2b9f3c4 100644 --- a/erupt-core/src/main/java/xyz/erupt/core/log/Formatter.java +++ b/erupt-core/src/main/java/xyz/erupt/core/log/Formatter.java @@ -12,6 +12,7 @@ /** * @author YuePeng * date 2024/6/27 21:58 + * ref magic-api mdx */ public class Formatter { @@ -19,6 +20,15 @@ public class Formatter { private final StringBuilder buf = new StringBuilder(); + private final static String[] SPACES = { + " ", // 1 + " ", // 2 + " ", // 4 + " ", // 8 + " ", // 16 + " " // 32 + }; + public Formatter timestamp(Long timestamp) { synchronized (DATE_FORMAT) { buf.append(DATE_FORMAT.format(timestamp)); @@ -85,14 +95,26 @@ public Formatter throwable(Throwable throwable) { public void alignment(boolean leftPad, String text, int size) { if (text.length() < size) { - if (leftPad) for (int i = size - text.length(); i > 0; i--) buf.append(" "); + if (leftPad) this.spacePad(size - text.length()); buf.append(text); - if (!leftPad) for (int i = size - text.length(); i > 0; i--) buf.append(" "); + if (!leftPad) this.spacePad(size - text.length()); } else { buf.append(text.substring(text.length() - size)); } } + private void spacePad(int length) { + while (length >= 32) { + buf.append(SPACES[5]); + length -= 32; + } + for (int i = 4; i >= 0; i--) { + if ((length & (1 << i)) != 0) { + buf.append(SPACES[i]); + } + } + } + @Override public String toString() { From 3f448793710fa14b86885cc0186171b38db85bc3 Mon Sep 17 00:00:00 2001 From: yuepeng Date: Tue, 16 Jul 2024 21:01:31 +0800 Subject: [PATCH 06/28] update log html --- erupt-upms/src/main/resources/tpl/erupt-log.html | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/erupt-upms/src/main/resources/tpl/erupt-log.html b/erupt-upms/src/main/resources/tpl/erupt-log.html index 669a373c9..2c6c2ca8c 100644 --- a/erupt-upms/src/main/resources/tpl/erupt-log.html +++ b/erupt-upms/src/main/resources/tpl/erupt-log.html @@ -79,10 +79,8 @@ window.parent.location.reload(); } else if (error.response.status === 403) { window.location.href = "${base}/error/403.html" - } else if (error.response.status === 404) { - window.location.href = "${base}/error/404.html" } else { - xterm.writeln("status: " + error.response.status + " → " + error.response.data.message); + xterm.writeln("status: " + error.response.status + (error.response.data && (" → " + error.response.data.message))); } } else { xterm.writeln(error.message); From 15de51665c261c34b980d0a69ecba55c50ad3834 Mon Sep 17 00:00:00 2001 From: YuePeng Date: Wed, 17 Jul 2024 09:34:38 +0800 Subject: [PATCH 07/28] =?UTF-8?q?=E9=87=8D=E5=86=99=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?=E6=B5=81=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/xyz/erupt/core/prop/EruptProp.java | 2 +- .../xyz/erupt/core/servlet/EruptCookie.java | 10 + .../core/servlet/EruptHttpServletRequest.java | 48 +++ .../servlet/EruptHttpServletResponse.java | 26 ++ .../erupt/core/servlet/EruptHttpSession.java | 10 + .../servlet/EruptRequestContextHolder.java | 23 ++ .../src/main/java/xyz/erupt/core/view/R.java | 12 +- .../main/java/xyz/erupt/jpa/dao/EruptDao.java | 6 +- .../xyz/erupt/jpa/dao/EruptLambdaQuery.java | 21 +- erupt-extra/erupt-flow/pom.xml | 31 +- .../erupt-flow/src/console/.env.development | 2 +- erupt-extra/erupt-flow/src/console/LICENSE | 201 ------------ erupt-extra/erupt-flow/src/console/README.md | 288 +----------------- erupt-extra/erupt-flow/src/console/image.png | Bin 73961 -> 0 bytes .../erupt-flow/src/console/package.json | 2 +- .../erupt-flow/src/console/public/favicon.ico | Bin 28394 -> 0 bytes .../erupt-flow/src/console/public/index.html | 17 +- .../erupt-flow/src/console/src/api/auth.js | 14 +- .../erupt-flow/src/console/src/api/request.js | 10 +- .../src/console/src/assets/image/code.png | Bin 7245 -> 0 bytes .../src/components/common/OrgPickerBack.vue | 45 +-- .../src/console/src/views/Index.vue | 37 +-- .../console/src/views/admin/FormsPanel.vue | 14 +- .../console/src/views/admin/LayoutHeader.vue | 2 +- .../console/src/views/workspace/MyTask.vue | 1 + .../erupt-flow/src/console/vue.config.js | 3 - .../flow/EruptFlowAutoConfiguration.java | 4 - .../erupt/flow/bean/entity/OaFormGroups.java | 24 +- .../xyz/erupt/flow/bean/entity/OaForms.java | 16 +- .../flow/bean/entity/OaProcessActivity.java | 27 +- .../bean/entity/OaProcessActivityHistory.java | 26 +- .../flow/bean/entity/OaProcessDefinition.java | 26 +- .../flow/bean/entity/OaProcessExecution.java | 30 +- .../flow/bean/entity/OaProcessInstance.java | 55 ++-- .../bean/entity/OaProcessInstanceHistory.java | 30 +- .../xyz/erupt/flow/bean/entity/OaTask.java | 37 +-- .../erupt/flow/bean/entity/OaTaskHistory.java | 37 +-- .../flow/bean/entity/OaTaskOperation.java | 27 +- .../flow/bean/entity/OaTaskUserLink.java | 31 +- .../flow/bean/entity/erupt/EruptUserRole.java | 22 -- .../bean/entity/erupt/EruptUserRoleId.java | 13 - .../flow/bean/entity/node/OaProcessNode.java | 5 +- .../bean/entity/node/OaProcessNodeAssign.java | 5 +- .../entity/node/OaProcessNodeCondition.java | 5 +- .../entity/node/OaProcessNodeFormPerms.java | 5 +- .../bean/entity/node/OaProcessNodeGroup.java | 5 +- .../entity/node/OaProcessNodeLeaderTop.java | 5 +- .../bean/entity/node/OaProcessNodeNobody.java | 5 +- .../bean/entity/node/OaProcessNodeProps.java | 8 +- .../bean/entity/node/OaProcessNodeRefuse.java | 5 +- .../erupt/flow/bean/vo/FileUploadResult.java | 16 + .../xyz/erupt/flow/bean/vo/OrgTreeVo.java | 8 +- .../xyz/erupt/flow/bean/vo/TaskDetailVo.java | 5 +- .../xyz/erupt/flow/conf/ListenerRegister.java | 8 +- .../controller/EruptFlowFileController.java | 37 ++- .../flow/controller/FormGroupController.java | 41 +-- .../flow/controller/FormsController.java | 55 ++-- .../ProcessDefinitionController.java | 28 +- .../controller/ProcessInstanceController.java | 24 +- .../erupt/flow/controller/TaskController.java | 33 +- .../flow/controller/UserLinkController.java | 18 +- .../controller/EruptFlowFormController.java | 12 +- .../erupt/flow/mapper/OaFormGroupsMapper.java | 13 - .../xyz/erupt/flow/mapper/OaFormsMapper.java | 13 - .../OaProcessActivityHistoryMapper.java | 9 - .../flow/mapper/OaProcessActivityMapper.java | 9 - .../mapper/OaProcessDefinitionMapper.java | 9 - .../flow/mapper/OaProcessExecutionMapper.java | 9 - .../OaProcessInstanceHistoryMapper.java | 9 - .../flow/mapper/OaProcessInstanceMapper.java | 9 - .../flow/mapper/OaTaskHistoryMapper.java | 7 - .../xyz/erupt/flow/mapper/OaTaskMapper.java | 25 -- .../flow/mapper/OaTaskOperationMapper.java | 9 - .../flow/mapper/OaTaskUserLinkMapper.java | 9 - .../flow/process/builder/TaskBuilder.java | 12 +- .../flow/process/engine/ProcessHelper.java | 22 +- .../process/engine/condition/DeptChecker.java | 37 +-- .../process/engine/condition/UserChecker.java | 84 +++-- .../listener/impl/AfterActiveTaskImpl.java | 2 +- .../listener/impl/NewTaskListener.java | 7 +- .../process/userlink/UserLinkService.java | 16 +- .../impl/DefaultUserLinkServiceImpl.java | 142 ++++----- .../userlink/impl/UserLinkServiceHolder.java | 21 +- .../flow/repository/EruptOrgRepository.java | 22 -- .../flow/repository/EruptRoleRepository.java | 7 - .../flow/repository/EruptUserRepository.java | 58 ---- .../erupt/flow/service/FormGroupService.java | 3 +- .../xyz/erupt/flow/service/FormsService.java | 8 +- .../ProcessActivityHistoryService.java | 10 +- .../flow/service/ProcessActivityService.java | 12 +- .../service/ProcessDefinitionService.java | 7 +- .../flow/service/ProcessExecutionService.java | 12 +- .../ProcessInstanceHistoryService.java | 4 +- .../flow/service/ProcessInstanceService.java | 12 +- .../erupt/flow/service/ProcessNodeEngine.java | 4 - .../flow/service/TaskHistoryService.java | 6 +- .../xyz/erupt/flow/service/TaskService.java | 23 +- .../flow/service/TaskUserLinkService.java | 2 - .../xyz/erupt/flow/service/WithListener.java | 1 + .../service/impl/FormGroupServiceImpl.java | 61 ++-- .../flow/service/impl/FormsServiceImpl.java | 58 ++-- .../ProcessActivityHistoryServiceImpl.java | 37 ++- .../impl/ProcessActivityServiceImpl.java | 118 +++---- .../impl/ProcessDefinitionServiceImpl.java | 134 ++++---- .../impl/ProcessExecutionServiceImpl.java | 111 +++---- .../ProcessInstanceHistoryServiceImpl.java | 17 +- .../impl/ProcessInstanceServiceImpl.java | 115 +++---- .../service/impl/ProcessNodeEngineImpl.java | 8 - .../service/impl/TaskHistoryServiceImpl.java | 68 ++--- .../impl/TaskOperationServiceImpl.java | 29 +- .../flow/service/impl/TaskServiceImpl.java | 241 +++++++-------- .../service/impl/TaskUserLinkServiceImpl.java | 66 ++-- .../xyz/erupt/flow/web/EruptApiPageModel.java | 54 ---- .../public/erupt-flow/img/code.09fdd434.png | Bin 7245 -> 0 bytes erupt-sample/pom.xml | 5 + 115 files changed, 1280 insertions(+), 2069 deletions(-) create mode 100644 erupt-core/src/main/java/xyz/erupt/core/servlet/EruptCookie.java create mode 100644 erupt-core/src/main/java/xyz/erupt/core/servlet/EruptHttpServletRequest.java create mode 100644 erupt-core/src/main/java/xyz/erupt/core/servlet/EruptHttpServletResponse.java create mode 100644 erupt-core/src/main/java/xyz/erupt/core/servlet/EruptHttpSession.java create mode 100644 erupt-core/src/main/java/xyz/erupt/core/servlet/EruptRequestContextHolder.java delete mode 100644 erupt-extra/erupt-flow/src/console/LICENSE delete mode 100644 erupt-extra/erupt-flow/src/console/image.png delete mode 100644 erupt-extra/erupt-flow/src/console/public/favicon.ico delete mode 100644 erupt-extra/erupt-flow/src/console/src/assets/image/code.png delete mode 100644 erupt-extra/erupt-flow/src/main/java/xyz/erupt/flow/bean/entity/erupt/EruptUserRole.java delete mode 100644 erupt-extra/erupt-flow/src/main/java/xyz/erupt/flow/bean/entity/erupt/EruptUserRoleId.java create mode 100644 erupt-extra/erupt-flow/src/main/java/xyz/erupt/flow/bean/vo/FileUploadResult.java delete mode 100644 erupt-extra/erupt-flow/src/main/java/xyz/erupt/flow/mapper/OaFormGroupsMapper.java delete mode 100644 erupt-extra/erupt-flow/src/main/java/xyz/erupt/flow/mapper/OaFormsMapper.java delete mode 100644 erupt-extra/erupt-flow/src/main/java/xyz/erupt/flow/mapper/OaProcessActivityHistoryMapper.java delete mode 100644 erupt-extra/erupt-flow/src/main/java/xyz/erupt/flow/mapper/OaProcessActivityMapper.java delete mode 100644 erupt-extra/erupt-flow/src/main/java/xyz/erupt/flow/mapper/OaProcessDefinitionMapper.java delete mode 100644 erupt-extra/erupt-flow/src/main/java/xyz/erupt/flow/mapper/OaProcessExecutionMapper.java delete mode 100644 erupt-extra/erupt-flow/src/main/java/xyz/erupt/flow/mapper/OaProcessInstanceHistoryMapper.java delete mode 100644 erupt-extra/erupt-flow/src/main/java/xyz/erupt/flow/mapper/OaProcessInstanceMapper.java delete mode 100644 erupt-extra/erupt-flow/src/main/java/xyz/erupt/flow/mapper/OaTaskHistoryMapper.java delete mode 100644 erupt-extra/erupt-flow/src/main/java/xyz/erupt/flow/mapper/OaTaskMapper.java delete mode 100644 erupt-extra/erupt-flow/src/main/java/xyz/erupt/flow/mapper/OaTaskOperationMapper.java delete mode 100644 erupt-extra/erupt-flow/src/main/java/xyz/erupt/flow/mapper/OaTaskUserLinkMapper.java delete mode 100644 erupt-extra/erupt-flow/src/main/java/xyz/erupt/flow/repository/EruptOrgRepository.java delete mode 100644 erupt-extra/erupt-flow/src/main/java/xyz/erupt/flow/repository/EruptRoleRepository.java delete mode 100644 erupt-extra/erupt-flow/src/main/java/xyz/erupt/flow/repository/EruptUserRepository.java delete mode 100644 erupt-extra/erupt-flow/src/main/java/xyz/erupt/flow/service/ProcessNodeEngine.java delete mode 100644 erupt-extra/erupt-flow/src/main/java/xyz/erupt/flow/service/impl/ProcessNodeEngineImpl.java delete mode 100644 erupt-extra/erupt-flow/src/main/java/xyz/erupt/flow/web/EruptApiPageModel.java delete mode 100644 erupt-extra/erupt-flow/src/main/resources/public/erupt-flow/img/code.09fdd434.png diff --git a/erupt-core/src/main/java/xyz/erupt/core/prop/EruptProp.java b/erupt-core/src/main/java/xyz/erupt/core/prop/EruptProp.java index 9c667f5e0..7fa10e755 100644 --- a/erupt-core/src/main/java/xyz/erupt/core/prop/EruptProp.java +++ b/erupt-core/src/main/java/xyz/erupt/core/prop/EruptProp.java @@ -46,6 +46,6 @@ public class EruptProp { private boolean logTrack = true; //日志采集暂存行数 - private Integer logTrackCacheSize = 2000; + private Integer logTrackCacheSize = 1000; } diff --git a/erupt-core/src/main/java/xyz/erupt/core/servlet/EruptCookie.java b/erupt-core/src/main/java/xyz/erupt/core/servlet/EruptCookie.java new file mode 100644 index 000000000..d45570159 --- /dev/null +++ b/erupt-core/src/main/java/xyz/erupt/core/servlet/EruptCookie.java @@ -0,0 +1,10 @@ +package xyz.erupt.core.servlet; + +public interface EruptCookie { + + String getName(); + + String getValue(); + + T getCookie(); +} diff --git a/erupt-core/src/main/java/xyz/erupt/core/servlet/EruptHttpServletRequest.java b/erupt-core/src/main/java/xyz/erupt/core/servlet/EruptHttpServletRequest.java new file mode 100644 index 000000000..ad0a433c3 --- /dev/null +++ b/erupt-core/src/main/java/xyz/erupt/core/servlet/EruptHttpServletRequest.java @@ -0,0 +1,48 @@ +package xyz.erupt.core.servlet; + +import org.springframework.http.HttpInputMessage; +import org.springframework.web.multipart.MultipartRequest; + +import java.io.IOException; +import java.io.InputStream; +import java.security.Principal; +import java.util.Enumeration; + +public interface EruptHttpServletRequest { + + String getHeader(String name); + + Enumeration getHeaders(String name); + + String getRequestURI(); + + String getMethod(); + + void setAttribute(String key, Object value); + + String[] getParameterValues(String name); + + Object getAttribute(String name); + + HttpInputMessage getHttpInputMessage(); + + String getContentType(); + + EruptHttpSession getSession(); + + EruptCookie[] getCookies(); + + InputStream getInputStream() throws IOException; + + boolean isMultipart(); + + String getRemoteAddr(); + + MultipartRequest resolveMultipart(); + + Principal getUserPrincipal(); + + T getRequest(); +} + + diff --git a/erupt-core/src/main/java/xyz/erupt/core/servlet/EruptHttpServletResponse.java b/erupt-core/src/main/java/xyz/erupt/core/servlet/EruptHttpServletResponse.java new file mode 100644 index 000000000..c377502b4 --- /dev/null +++ b/erupt-core/src/main/java/xyz/erupt/core/servlet/EruptHttpServletResponse.java @@ -0,0 +1,26 @@ +package xyz.erupt.core.servlet; + +import java.io.IOException; +import java.io.OutputStream; +import java.util.Collection; + +public interface EruptHttpServletResponse { + + public void setHeader(String name, String value); + + public void addHeader(String name, String value); + + public void sendRedirect(String location) throws IOException; + + public void addCookie(EruptCookie cookie); + + public void setContentType(String contentType); + + public void setCharacterEncoding(String characterEncoding); + + public OutputStream getOutputStream() throws IOException; + + public Collection getHeaderNames(); + + public T getResponse(); +} diff --git a/erupt-core/src/main/java/xyz/erupt/core/servlet/EruptHttpSession.java b/erupt-core/src/main/java/xyz/erupt/core/servlet/EruptHttpSession.java new file mode 100644 index 000000000..b766d2837 --- /dev/null +++ b/erupt-core/src/main/java/xyz/erupt/core/servlet/EruptHttpSession.java @@ -0,0 +1,10 @@ +package xyz.erupt.core.servlet; + +public interface EruptHttpSession { + + Object getAttribute(String key); + + void setAttribute(String key, Object value); + + T getSession(); +} diff --git a/erupt-core/src/main/java/xyz/erupt/core/servlet/EruptRequestContextHolder.java b/erupt-core/src/main/java/xyz/erupt/core/servlet/EruptRequestContextHolder.java new file mode 100644 index 000000000..58d3e3eac --- /dev/null +++ b/erupt-core/src/main/java/xyz/erupt/core/servlet/EruptRequestContextHolder.java @@ -0,0 +1,23 @@ +package xyz.erupt.core.servlet; + +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import java.util.function.Function; + +public interface EruptRequestContextHolder { + + default R convert(Function function){ + RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); + if (requestAttributes instanceof ServletRequestAttributes) { + ServletRequestAttributes servletRequestAttributes = ((ServletRequestAttributes) requestAttributes); + return function.apply(servletRequestAttributes); + } + return null; + } + + EruptHttpServletRequest getRequest(); + + EruptHttpServletResponse getResponse(); +} diff --git a/erupt-core/src/main/java/xyz/erupt/core/view/R.java b/erupt-core/src/main/java/xyz/erupt/core/view/R.java index 4868ec9f1..cd54ad4b5 100644 --- a/erupt-core/src/main/java/xyz/erupt/core/view/R.java +++ b/erupt-core/src/main/java/xyz/erupt/core/view/R.java @@ -35,8 +35,16 @@ public static R ok(T data) { }}; } - public static R error(String msg) { - return new R() {{ + + public static R ok() { + return new R() {{ + this.setSuccess(true); + this.setStatus(EruptApiModel.Status.SUCCESS); + }}; + } + + public static R error(String msg) { + return new R() {{ this.setSuccess(false); this.setMsg(msg); this.setStatus(EruptApiModel.Status.ERROR); diff --git a/erupt-data/erupt-jpa/src/main/java/xyz/erupt/jpa/dao/EruptDao.java b/erupt-data/erupt-jpa/src/main/java/xyz/erupt/jpa/dao/EruptDao.java index efc2c5c1e..3bac83586 100644 --- a/erupt-data/erupt-jpa/src/main/java/xyz/erupt/jpa/dao/EruptDao.java +++ b/erupt-data/erupt-jpa/src/main/java/xyz/erupt/jpa/dao/EruptDao.java @@ -84,7 +84,11 @@ public T mergeAndFlush(T t) { //删除 public void delete(Object obj) { - entityManager.remove(obj); + if (entityManager.contains(obj)) { + entityManager.remove(obj); + } else { + entityManager.remove(entityManager.merge(obj)); + } } @Transactional diff --git a/erupt-data/erupt-jpa/src/main/java/xyz/erupt/jpa/dao/EruptLambdaQuery.java b/erupt-data/erupt-jpa/src/main/java/xyz/erupt/jpa/dao/EruptLambdaQuery.java index e5ea64bbe..78f8ee7f8 100644 --- a/erupt-data/erupt-jpa/src/main/java/xyz/erupt/jpa/dao/EruptLambdaQuery.java +++ b/erupt-data/erupt-jpa/src/main/java/xyz/erupt/jpa/dao/EruptLambdaQuery.java @@ -137,14 +137,14 @@ public EruptLambdaQuery between(boolean condition, SFunction field, return this; } - public EruptLambdaQuery in(SFunction field, List val) { + public EruptLambdaQuery in(SFunction field, Collection val) { String placeholder = this.genePlaceholder(); querySchema.getWheres().add(LambdaSee.field(field) + " in (:" + placeholder + ")"); - querySchema.getParams().put(placeholder, val); + querySchema.getParams().put(placeholder, new ArrayList<>(val)); return this; } - public EruptLambdaQuery in(boolean condition, SFunction field, List val) { + public EruptLambdaQuery in(boolean condition, SFunction field, Collection val) { if (condition) return this.in(field, val); return this; } @@ -215,6 +215,15 @@ public EruptLambdaQuery orderBy(boolean condition, SFunction field) { return this; } + public EruptLambdaQuery orderByAsc(SFunction field) { + return orderBy(field); + } + + public EruptLambdaQuery orderByAsc(boolean condition, SFunction field) { + return orderBy(condition, field); + } + + public EruptLambdaQuery orderByDesc(SFunction field) { querySchema.getOrders().add(LambdaSee.field(field) + " desc"); return this; @@ -316,8 +325,10 @@ private Query geneQuery() { select.deleteCharAt(select.length() - 1).append(" "); } StringBuilder expr = new StringBuilder(select + SqlLang.FROM + eruptClass.getSimpleName() + SqlLang.AS + eruptClass.getSimpleName()); - if (!querySchema.getWheres().isEmpty()) expr.append(SqlLang.WHERE).append(String.join(SqlLang.AND, querySchema.getWheres())); - if (!querySchema.getOrders().isEmpty()) expr.append(SqlLang.ORDER_BY).append(String.join(SqlLang.COMMA, querySchema.getOrders())); + if (!querySchema.getWheres().isEmpty()) + expr.append(SqlLang.WHERE).append(String.join(SqlLang.AND, querySchema.getWheres())); + if (!querySchema.getOrders().isEmpty()) + expr.append(SqlLang.ORDER_BY).append(String.join(SqlLang.COMMA, querySchema.getOrders())); Query query = entityManager.createQuery(expr.toString()); querySchema.getParams().forEach(query::setParameter); Optional.ofNullable(querySchema.getLimit()).ifPresent(query::setMaxResults); diff --git a/erupt-extra/erupt-flow/pom.xml b/erupt-extra/erupt-flow/pom.xml index f535da23b..aea452851 100644 --- a/erupt-extra/erupt-flow/pom.xml +++ b/erupt-extra/erupt-flow/pom.xml @@ -13,46 +13,17 @@ erupt-flow flow erupt code - - 1.2.83 - 3.4.1 - 1.4.6 - 1.2.1 - - xyz.erupt erupt-upms ${project.parent.version} - com.alibaba fastjson - ${fastjson.version} - - - - - com.baomidou - mybatis-plus-boot-starter - ${mybatis-plus.version} - - - - - com.github.pagehelper - pagehelper-spring-boot-starter - ${pagehelper.version} - - - - - com.github.yulichang - mybatis-plus-join - ${mybatis-plus-join.version} + 1.2.83 diff --git a/erupt-extra/erupt-flow/src/console/.env.development b/erupt-extra/erupt-flow/src/console/.env.development index ebb866436..b4d8fab81 100644 --- a/erupt-extra/erupt-flow/src/console/.env.development +++ b/erupt-extra/erupt-flow/src/console/.env.development @@ -5,7 +5,7 @@ ENV = 'development' VUE_APP_BASE_API = '/erupt-flow' # 后端真实地址 -baseUrl = 'http://127.0.0.1:9999' +baseUrl = 'http://127.0.0.1:8080' # 前端端口 port = '82' diff --git a/erupt-extra/erupt-flow/src/console/LICENSE b/erupt-extra/erupt-flow/src/console/LICENSE deleted file mode 100644 index 261eeb9e9..000000000 --- a/erupt-extra/erupt-flow/src/console/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/erupt-extra/erupt-flow/src/console/README.md b/erupt-extra/erupt-flow/src/console/README.md index 4e0e41b5d..22d80532d 100644 --- a/erupt-extra/erupt-flow/src/console/README.md +++ b/erupt-extra/erupt-flow/src/console/README.md @@ -1,284 +1,14 @@ -

- -

- - -

wflow 工作流

- -[![star](https://gitee.com/willianfu/jw-workflow-engine/badge/star.svg?theme=dark)](https://gitee.com/willianfu/jw-workflow-engine/stargazers) [![fork](https://gitee.com/willianfu/jw-workflow-engine/badge/fork.svg?theme=dark)](https://gitee.com/willianfu/jw-workflow-engine/members) - - -## 📋 简介 - -`wflow-web` 是 `wflow工作流` 项目的前端设计器,免费且开源,本设计器包含表单设计,审批流程设计。 - -> 区别于传统Bpmn自带流程设计器,传统设计器晦涩难懂,对于普通企业用户使用门槛偏高,没有经过专业培训根本无从下手,需要相关专业人员辅助来创建流程。而本设计器界面简单,符合普通大众的思维逻辑,易于理解和上手使用。 - -**注意:** 这是前端设计器部分,配套的工作流后端目前只有pro版本支持 - - - -### 👩‍👦‍👦加入交流群 -![加群](http://106.13.16.28:83/wechatgroup.png) - -| 微信 | QQ | -| :----------------------------------------------------------: | :------------: | -| 扫码或搜索 `willianfu_` 加我微信,备注 `wflow`拉入群 | 加群 156972829 | - - - - - -开源不易,用爱发电,觉得不错的话可以给个 ⭐ star 鼓励一下 - - 😋 [github地址](https://github.com/willianfu/wflow) | [码云gitee](https://gitee.com/willianfu/jw-workflow-engine) - - 👉 在线体验地址: [戳我打开演示页面](http://150.158.162.224:82) 👈 - - 📃 详细文档请访问 : [wflow文档](https://willianfu.github.io/wflow/) - - - ------- - -### 🚀 wflow-pro - -`wflow` pro版(💰付费) 已经发布,完整的前后端支持功能更强,感兴趣的同学可以访问演示链接进行体验 - -- 🎈 [wflow-pro 功能清单、售价及后续功能开发计划](https://docs.qq.com/doc/DY054VWlVTklJUm5Q) -- 👉 [pro版在线演示](http://106.13.16.28:83) -- 📃 [pro版移动端表单体验,建议手机访问]([wflow-pro | 表单流程设计](http://106.13.16.28:83/#/admin/design?code=wf636b21ade4b06655ea5a3640&mobilePreview=true)) - -#### pro版新增功能 - -- 组件库全面支持`PC + 移动端 (ElementUI + Vant)`,一次表单设计,分别渲染成两种效果,即时预览 -- 表单支持权限控制,每个节点可以看到不一样的表单,且支持动态设置表单内容字段只读、可编辑、隐藏,审批时能动态修改表单,改变后续流程走向 -- 组件库新增组件 - - 省市区选择 - - 手写签字板 - - 单行及多行输入框,支持摄像头扫码录入信息 - - 时间、时间范围选择器 - - 评分 - - 地理位置选择,高德地图选位置 - - 流程关联,可在表单内关联以往发起过的流程 - - 计算公式,配置一个计算公式,根据其他字段值自动计算本字段结果 - - Vue容器,能够在线编写Vue代码,生成自定义的组件 - - Iframe容器,嵌入一个URL页面 - - 新增几十种常用图标 - - 更多组件后续增加。。。 - -- 审批流程回显执行过程,支持附件及评论,流程处理支持评论、同意、驳回、退回、撤销、转交、动态加签 - - -**全新工作台面板** - -![image-20220813002851111](https://pic.rmb.bdstatic.com/bjh/75bb79771bf78d273917df9495bf35b7.png) - - **流程管理** - -![image-20220917085336806](https://dd-static.jd.com/ddimg/jfs/t1/88709/15/33072/150832/63251a92E5e6fda69/47495b56b1080b9e.png) - - -发起审批,左侧表单,右侧显示执行流程步骤 - -![image-20221110153638526.png](http://150.158.162.224/assets/img/image-20221110153638526.01748e11.png) - - - -👇 表单设计器即时预览,根据设备自动适配 - -image-20221110153702877.png - - - **预览审批进度** - -![image-20220917085045176](https://dd-static.jd.com/ddimg/jfs/t1/112699/19/29490/422145/632519e9Ee06ee0b0/dfe1943c51fc447a.png) - ------- - - - -**支持流程打印** - - - - - -## 👀开源版界面一览 - -### **工作区面板** - -输入图片说明 - -输入图片说明 - - - -### 表单管理 - - **工作流表单管理,支持分组和单组表单拖拽排序** - -输入图片说明 - -输入图片说明 - - ---------- - -#### **表单基本设置** - -输入图片说明 - - - - --------- - -#### **表单设计器** - -> 支持分栏布局、明细表格、以及多种基础组件,支持自定义开发组件 - -![image-20220724220114724](https://pic.rmb.bdstatic.com/bjh/b0f1ed22d61ea86b4222b89dbea6ecd1.png) - -![image-20220724221040780](https://pic.rmb.bdstatic.com/bjh/73e71e1323812a57802a76beffe27906.png) - - - - - - ---------- - - #### 流程设计器 - -> 任意条件层级审批流程设计, 审批节点支持多种业务类型设置,支持流程校验 - -![image-20220711111351476](https://pic.rmb.bdstatic.com/bjh/3300dbc60218a8376b45ed6ed46e8162.png) - - - -**自定义审批条件** - -![image-20220722182318650](https://pic.rmb.bdstatic.com/bjh/4599e414142004f3b0445e478018b8be.png) - - ---------- - -**自定义复杂流转条件** - -> 可视化流程逻辑分支条件 - -![image-20220722182622661](https://pic.rmb.bdstatic.com/bjh/299989bb8b256beae152a29ea611b790.png) - ---------- - - - - **支持多种类型业务节点,支持配置校验,灵活配置** - -image-20220722182427315 - -**支持无限层级嵌套** - -![image-20220711111911427](https://pic.rmb.bdstatic.com/bjh/02cd8936e081bdd053bfa695826817ba.png) - -**自动校验设置项,列出所有错误提示** - -image-20220731215022817 - -**条件节点优先级动态拖拽,实时刷新** - -输入图片说明 - - - -## ✍开发 - - - -📃 详细文档请访问 : [wflow文档](https://willianfu.github.io/wflow/) - - - -### 项目结构 +# erupt-flow前端源码 +### 安装 +```shell +npm install ``` -├─api 接口 -├─assets -│ └─image -├─components 通用组件 -│ └─common -├─router 路由 -├─store vuex,设计器数据存储 -├─utils -└─views 主要页面及视图 - ├─admin - │ └─layout - │ ├─form 表单设计 - │ └─process 流程设计 - ├─common - │ ├─form 表单 - │ │ ├─components 表单组件 - │ │ ├─config 表单组件配置 - │ │ ├─expand 扩展组件 - │ │ └─settings 设置 - │ └─process 流程 - │ ├─config 流程节点设置 - │ └─nodes 流程节点 - └─workspace 工作区 -``` - - -### 设计器数据 - -> 设计器的数据都存在Vuex中,需要传递到后端时,直接取出提交到接口 - -```json -{ - "formId":"37289743892", //表单ID,由后端生成 - "formName":"补卡申请", //表单名称 - "logo":{ //图标 - "icon":"图标/图片base64", - "background":"#FEFEFE" //如果是图片则不生效 - }, - //表单权限及其他属性设置 - "settings":{ - "commiter": [], //哪些人可以提交发起表单 - "admin":[], //表单管理员,可以编辑及导出数据 - "singn": false, //全局设置审批时是否需要签字 - "notify":{ - "type": "APP", //通知类型 APP QQ WX DING EMAIL - "title": "消息通知标题" - } - }, - "group":20, //所在分组 - "formItems":[],//表单设计数据 - "process":{}, //流程数据 - "remark":"备注说明" -} +### 启动 +```shell +npm run serve --NODE_ENV=development ``` - - -## 💗打赏列表 - -感谢以下朋友的支持,也感谢关注本项目及提出宝贵建议的各位。 - -| 昵称 (按时间排序) | 金额 | -| ------------------------------------------------------------ | ---- | -| * 晓龙 | 400 | -| * HF | 188 | -| * 晓龙 | 500 | -| * 基 | 9.9 | -| * 学龙 | 30 | -| * 辉 | 50 | -| * ncert | 50 | -| 。 | 30 | - - - -## 💪支持作者 - -**开源不易,需要鼓励,如果觉得这个项目有帮助到了你请我喝杯咖啡吧😋** -支持作者 +### 定义后端地址 +[.env.development](.env.development) diff --git a/erupt-extra/erupt-flow/src/console/image.png b/erupt-extra/erupt-flow/src/console/image.png deleted file mode 100644 index 32d89f3924c3e8872818c2e4fecc8f6fccaa192e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73961 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 VUS&v{@<0v9JyU*)dSdeCe*h&*$LIh6 diff --git a/erupt-extra/erupt-flow/src/console/package.json b/erupt-extra/erupt-flow/src/console/package.json index 34c0b4dc2..eda5a8a9f 100644 --- a/erupt-extra/erupt-flow/src/console/package.json +++ b/erupt-extra/erupt-flow/src/console/package.json @@ -12,7 +12,7 @@ "clipboard": "^2.0.6", "codemirror": "^6.0.0", "core-js": "^3.6.5", - "element-ui": "^2.15.8", + "element-ui": "^2.15.14", "less": "^3.12.2", "less-loader": "^7.0.1", "moment": "^2.29.4", diff --git a/erupt-extra/erupt-flow/src/console/public/favicon.ico b/erupt-extra/erupt-flow/src/console/public/favicon.ico deleted file mode 100644 index 40db4b4b0ce4181ebaa6a09812fe25bf46346dd4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28394 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 NjP%TPtF+HW{~s&KisS$Q diff --git a/erupt-extra/erupt-flow/src/console/public/index.html b/erupt-extra/erupt-flow/src/console/public/index.html index 412352865..b0f2e4d78 100644 --- a/erupt-extra/erupt-flow/src/console/public/index.html +++ b/erupt-extra/erupt-flow/src/console/public/index.html @@ -1,17 +1,12 @@ - + - - <%= htmlWebpackPlugin.options.title %> - - - -
- - + erupt-flow + + +
+ diff --git a/erupt-extra/erupt-flow/src/console/src/api/auth.js b/erupt-extra/erupt-flow/src/console/src/api/auth.js index dd5434d31..507a0460c 100644 --- a/erupt-extra/erupt-flow/src/console/src/api/auth.js +++ b/erupt-extra/erupt-flow/src/console/src/api/auth.js @@ -4,16 +4,16 @@ export function getToken() { export function getQueryVariable(fieldName) { let url = window.location.hash; - let querys = url.substring(url.indexOf('?') + 1).split('&'); - for(let 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 B#+3j7 diff --git a/erupt-extra/erupt-flow/src/console/src/components/common/OrgPickerBack.vue b/erupt-extra/erupt-flow/src/console/src/components/common/OrgPickerBack.vue index 53f84dcc6..708957524 100644 --- a/erupt-extra/erupt-flow/src/console/src/components/common/OrgPickerBack.vue +++ b/erupt-extra/erupt-flow/src/console/src/components/common/OrgPickerBack.vue @@ -31,7 +31,7 @@
- {{getShortName(org.name)}} + {{ getShortName(org.name) }} {{ org.name }}
@@ -48,14 +48,14 @@
-
+
{{ org.name }}
- {{getShortName(org.name)}} + {{ getShortName(org.name) }} {{ org.name }}
@@ -112,13 +112,13 @@ export default { }, computed: { _title() { - if(this.type==='user') { - return "请选择用户" + (this.multiple?"[多选]":"[单选]") - }else if(this.type==='dept') { - return "请选择部门" + (this.multiple?"[多选]":"[单选]") - }else if(this.type==='role') { - return "请选择角色" + (this.multiple?"[多选]":"[单选]") - }else { + if (this.type === 'user') { + return "请选择用户" + (this.multiple ? "[多选]" : "[单选]") + } else if (this.type === 'dept') { + return "请选择部门" + (this.multiple ? "[多选]" : "[单选]") + } else if (this.type === 'role') { + return "请选择角色" + (this.multiple ? "[多选]" : "[单选]") + } else { return "-" } }, @@ -128,7 +128,7 @@ export default { orgs() { return !this.search || this.search.trim() === '' ? this.nodes : this.searchUsers }, - showUsers(){ + showUsers() { return this.search || this.search.trim() !== '' }, }, @@ -142,7 +142,7 @@ export default { //只有类型和组件类型符合才可以多选 return this.type === node.type; }, - orgItemClass(org){ + orgItemClass(org) { return { 'org-item': true, 'org-dept-item': org.type === 'dept', @@ -155,20 +155,20 @@ export default { }, getDataList() { this.loading = true - if(this.type==='user') { + if (this.type === 'user') { getOrgTreeUser({deptId: this.nowDeptId, keywords: this.search}).then(rsp => { this.loading = false this.nodes = rsp.data this.selectToLeft() }) return "请选择用户" - }else if(this.type==='dept') { + } else if (this.type === 'dept') { getOrgTree({deptId: this.nowDeptId, keywords: this.search}).then(rsp => { this.loading = false this.nodes = rsp.data this.selectToLeft() }) - }else if(this.type==='role') { + } else if (this.type === 'role') { getRole({deptId: this.nowDeptId, keywords: this.search}).then(rsp => { this.loading = false this.nodes = rsp.data @@ -304,7 +304,7 @@ export default { this.visible = false this.recover() }, - clearSelected(){ + clearSelected() { this.$confirm('您确定要清空已选中的项?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', @@ -345,21 +345,23 @@ export default { height: 402px; position: relative; text-align: left; + .candidate { left: 0; top: 0; - .role-header{ + .role-header { padding: 10px !important; margin-bottom: 5px; border-bottom: 1px solid #e8e8e8; } - .top-dept{ + .top-dept { margin-left: 20px; cursor: pointer; - color:#38adff; + color: #38adff; } + .next-dept { float: right; color: @theme-primary; @@ -393,6 +395,7 @@ export default { cursor: pointer; font-size: larger; } + .org-dept-item { padding: 10px 5px; @@ -436,6 +439,7 @@ export default { border-radius: 5px; position: relative; cursor: pointer; + .el-checkbox { margin-right: 10px; } @@ -460,6 +464,7 @@ export default { display: inline-block; border-bottom: 1px solid #e8e8e8; margin-bottom: 5px; + & > span:nth-child(2) { float: right; color: #c75450; @@ -472,7 +477,7 @@ export default { padding: 10px 20px; } -.disabled{ +.disabled { cursor: not-allowed !important; color: #8c8c8c !important; } diff --git a/erupt-extra/erupt-flow/src/console/src/views/Index.vue b/erupt-extra/erupt-flow/src/console/src/views/Index.vue index c28986a84..77a92c2f1 100644 --- a/erupt-extra/erupt-flow/src/console/src/views/Index.vue +++ b/erupt-extra/erupt-flow/src/console/src/views/Index.vue @@ -1,6 +1,6 @@