diff --git a/src/api/bpm/task/index.ts b/src/api/bpm/task/index.ts
index f6763720f6c3f48b252af634293fcaa0353f79bf..126f01ebc96ba4c679225e0773aabafa2ee049b9 100644
--- a/src/api/bpm/task/index.ts
+++ b/src/api/bpm/task/index.ts
@@ -41,3 +41,19 @@ export const getTaskListByProcessInstanceId = async (processInstanceId) => {
export const exportTask = async (params) => {
return await request.download({ url: '/bpm/task/export', params })
}
+
+/**
+ * 获取所有可回退的节点
+ * @param params
+ */
+export const getReturnList = async (params) => {
+ return await request.get({ url: '/bpm/task/get-return-list', params })
+}
+
+/**
+ * 确认回退
+ * @param params
+ */
+export const okRollback = async (data) => {
+ return await request.put({ url: '/bpm/task/rollback', data })
+}
diff --git a/src/components/bpmnProcessDesigner/package/designer/ProcessViewer.vue b/src/components/bpmnProcessDesigner/package/designer/ProcessViewer.vue
index 856fb2d70d3edb4069f44b1e36fc8490497a03ac..dd4c84562a7b77851e80715d1a8c32b74d43271b 100644
--- a/src/components/bpmnProcessDesigner/package/designer/ProcessViewer.vue
+++ b/src/components/bpmnProcessDesigner/package/designer/ProcessViewer.vue
@@ -229,6 +229,9 @@ const getResultCss = (result) => {
} else if (result === 4) {
// 已取消
return 'highlight-cancel'
+ } else if (result === 5) {
+ // 退回
+ return 'highlight-rollback'
}
return ''
}
@@ -564,6 +567,45 @@ watch(
stroke: grey !important;
}
+/** 回退 */
+.highlight-rollback.djs-shape .djs-visual > :nth-child(1) {
+ fill: #e6a23c !important;
+ stroke: #e6a23c !important;
+ fill-opacity: 0.2 !important;
+}
+.highlight-rollback.djs-shape .djs-visual > :nth-child(2) {
+ fill: #e6a23c !important;
+}
+.highlight-rollback.djs-shape .djs-visual > path {
+ fill: #e6a23c !important;
+ fill-opacity: 0.2 !important;
+ stroke: #e6a23c !important;
+}
+.highlight-rollback.djs-connection > .djs-visual > path {
+ stroke: #e6a23c !important;
+}
+
+.highlight-rollback:not(.djs-connection) .djs-visual > :nth-child(1) {
+ fill: #e6a23c !important; /* color elements as green */
+}
+
+:deep(.highlight-rollback.djs-shape .djs-visual > :nth-child(1)) {
+ fill: #e6a23c !important;
+ stroke: #e6a23c !important;
+ fill-opacity: 0.2 !important;
+}
+:deep(.highlight-rollback.djs-shape .djs-visual > :nth-child(2)) {
+ fill: #e6a23c !important;
+}
+:deep(.highlight-rollback.djs-shape .djs-visual > path) {
+ fill: #e6a23c !important;
+ fill-opacity: 0.2 !important;
+ stroke: #e6a23c !important;
+}
+:deep(.highlight-rollback.djs-connection > .djs-visual > path) {
+ stroke: #e6a23c !important;
+}
+
.element-overlays {
width: 200px;
padding: 8px;
diff --git a/src/views/bpm/processInstance/detail/ProcessInstanceTaskList.vue b/src/views/bpm/processInstance/detail/ProcessInstanceTaskList.vue
index f45846d9f466e7c28252edd45d4f216aee5b8504..ec87104dc85e5ba85c98e13ba4b01678dd358f9a 100644
--- a/src/views/bpm/processInstance/detail/ProcessInstanceTaskList.vue
+++ b/src/views/bpm/processInstance/detail/ProcessInstanceTaskList.vue
@@ -69,6 +69,9 @@ const getTimelineItemIcon = (item) => {
if (item.result === 4) {
return 'el-icon-remove-outline'
}
+ if (item.result === 5) {
+ return 'el-icon-back'
+ }
return ''
}
@@ -86,6 +89,9 @@ const getTimelineItemType = (item) => {
if (item.result === 4) {
return 'info'
}
+ if (item.result === 5) {
+ return 'warning'
+ }
return ''
}
diff --git a/src/views/bpm/processInstance/detail/TaskRollbackDialogForm.vue b/src/views/bpm/processInstance/detail/TaskRollbackDialogForm.vue
new file mode 100644
index 0000000000000000000000000000000000000000..168fd1a868b9fc0d70e486fc955c5dceb4c8e6e6
--- /dev/null
+++ b/src/views/bpm/processInstance/detail/TaskRollbackDialogForm.vue
@@ -0,0 +1,90 @@
+
+
+
+
diff --git a/src/views/bpm/processInstance/detail/index.vue b/src/views/bpm/processInstance/detail/index.vue
index 64369181e9e121ac98c15a7b52b384e00b1f20ca..6b57242dd94c7d57db899d1d64faca9ee008b72d 100644
--- a/src/views/bpm/processInstance/detail/index.vue
+++ b/src/views/bpm/processInstance/detail/index.vue
@@ -91,6 +91,8 @@
+
+