From c9b12c8b39743bb7980122a1f5a4cad0e6657830 Mon Sep 17 00:00:00 2001 From: jason <2667446@qq.com> Date: Tue, 29 Oct 2024 10:52:46 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E5=8A=9F=E8=83=BD=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E3=80=91=E4=BB=BF=E9=92=89=E9=92=89=E6=B5=81=E7=A8=8B=E8=AE=BE?= =?UTF-8?q?=E8=AE=A1=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/svgs/bpm/simple-process-bg.svg | 1 + .../src/ProcessNodeTree.vue | 5 +- .../src/SimpleProcessDesigner.vue | 99 +- .../src/SimpleProcessModel.vue | 141 ++ .../src/SimpleProcessViewer.vue | 56 +- .../SimpleProcessDesignerV2/src/index.ts | 2 +- .../theme/simple-process-designer.scss | 1559 +++++++++++------ src/router/modules/remaining.ts | 6 +- .../bpm/model/CategoryDraggableModel.vue | 6 +- src/views/bpm/model/index_old.vue | 2 +- .../detail/ProcessInstanceSimpleViewer.vue | 28 +- .../bpm/processInstance/detail/index.vue | 9 +- .../SimpleModelDesign.vue} | 13 +- 13 files changed, 1263 insertions(+), 664 deletions(-) create mode 100644 src/assets/svgs/bpm/simple-process-bg.svg create mode 100644 src/components/SimpleProcessDesignerV2/src/SimpleProcessModel.vue rename src/views/bpm/{simpleWorkflow/index.vue => simple/SimpleModelDesign.vue} (50%) diff --git a/src/assets/svgs/bpm/simple-process-bg.svg b/src/assets/svgs/bpm/simple-process-bg.svg new file mode 100644 index 00000000..eb23ab5a --- /dev/null +++ b/src/assets/svgs/bpm/simple-process-bg.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/SimpleProcessDesignerV2/src/ProcessNodeTree.vue b/src/components/SimpleProcessDesignerV2/src/ProcessNodeTree.vue index b1b97e9b..9b1d65aa 100644 --- a/src/components/SimpleProcessDesignerV2/src/ProcessNodeTree.vue +++ b/src/components/SimpleProcessDesignerV2/src/ProcessNodeTree.vue @@ -47,7 +47,10 @@ /> - + + + diff --git a/src/components/SimpleProcessDesignerV2/src/SimpleProcessViewer.vue b/src/components/SimpleProcessDesignerV2/src/SimpleProcessViewer.vue index e3181c40..e83c9e93 100644 --- a/src/components/SimpleProcessDesignerV2/src/SimpleProcessViewer.vue +++ b/src/components/SimpleProcessDesignerV2/src/SimpleProcessViewer.vue @@ -1,63 +1,25 @@ diff --git a/src/components/SimpleProcessDesignerV2/src/index.ts b/src/components/SimpleProcessDesignerV2/src/index.ts index cacfbc12..88de07fb 100644 --- a/src/components/SimpleProcessDesignerV2/src/index.ts +++ b/src/components/SimpleProcessDesignerV2/src/index.ts @@ -2,4 +2,4 @@ import SimpleProcessDesigner from './SimpleProcessDesigner.vue' import SimpleProcessViewer from './SimpleProcessViewer.vue' import '../theme/simple-process-designer.scss' -export { SimpleProcessDesigner, SimpleProcessViewer } +export { SimpleProcessDesigner, SimpleProcessViewer} diff --git a/src/components/SimpleProcessDesignerV2/theme/simple-process-designer.scss b/src/components/SimpleProcessDesignerV2/theme/simple-process-designer.scss index c5b5710c..39c475d5 100644 --- a/src/components/SimpleProcessDesignerV2/theme/simple-process-designer.scss +++ b/src/components/SimpleProcessDesignerV2/theme/simple-process-designer.scss @@ -1,573 +1,573 @@ -.simple-flow-canvas { - z-index: 1; - overflow: auto; - background-color: #fafafa; - // user-select: none; +// .simple-flow-canvas { +// z-index: 1; +// overflow: auto; +// background-color: #fafafa; +// // user-select: none; - .simple-flow-container { - position: relative; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; +// .simple-flow-container { +// position: relative; +// display: flex; +// flex-direction: column; +// justify-content: center; +// align-items: center; - .top-area-container { - position: sticky; - inset: 0; - display: flex; - width: 100%; - height: 42px; - z-index: 1; - // padding: 4px 0; - background-color: #fff; - justify-content: flex-end; - align-items: center; +// .top-area-container { +// position: sticky; +// inset: 0; +// display: flex; +// width: 100%; +// height: 42px; +// z-index: 1; +// // padding: 4px 0; +// background-color: #fff; +// justify-content: flex-end; +// align-items: center; - .top-actions { - display: flex; - margin: 4px; - margin-right: 8px; - align-items: center; +// .top-actions { +// display: flex; +// margin: 4px; +// margin-right: 8px; +// align-items: center; - .canvas-control { - font-size: 16px; +// .canvas-control { +// font-size: 16px; - .control-scale-group { - display: inline-flex; - align-items: center; - margin-right: 8px; +// .control-scale-group { +// display: inline-flex; +// align-items: center; +// margin-right: 8px; - .control-scale-button { - display: inline-flex; - width: 28px; - height: 28px; - padding: 2px; - text-align: center; - cursor: pointer; - justify-content: center; - align-items: center; - } +// .control-scale-button { +// display: inline-flex; +// width: 28px; +// height: 28px; +// padding: 2px; +// text-align: center; +// cursor: pointer; +// justify-content: center; +// align-items: center; +// } - .control-scale-label { - margin: 0 4px; - font-size: 14px; - } - } - } - } - } +// .control-scale-label { +// margin: 0 4px; +// font-size: 14px; +// } +// } +// } +// } +// } - .scale-container { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - margin-top: 16px; - background-color: #fafafa; - transform-origin: 50% 0 0; - transform: scale(1); - transition: transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +// .scale-container { +// display: flex; +// flex-direction: column; +// justify-content: center; +// align-items: center; +// margin-top: 16px; +// background-color: #fafafa; +// transform-origin: 50% 0 0; +// transform: scale(1); +// transition: transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); - // 节点容器 定义节点宽度 - .node-container { - width: 200px; - } - // 节点 - .node-box { - position: relative; - display: flex; - min-height: 70px; - padding: 5px 10px 8px; - cursor: pointer; - background-color: #fff; - flex-direction: column; - border: 2px solid transparent; - border-radius: 8px; - box-shadow: 0 1px 4px 0 rgba(10, 30, 65, 0.16); - transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); +// // 节点容器 定义节点宽度 +// .node-container { +// width: 200px; +// } +// // 节点 +// .node-box { +// position: relative; +// display: flex; +// min-height: 70px; +// padding: 5px 10px 8px; +// cursor: pointer; +// background-color: #fff; +// flex-direction: column; +// border: 2px solid transparent; +// border-radius: 8px; +// box-shadow: 0 1px 4px 0 rgba(10, 30, 65, 0.16); +// transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); - &.status-pass { - border-color: #67c23a; - background-color: #a9da90; - } - &.status-pass:hover { - border-color: #67c23a; - } - &.status-running { - border-color: #5a9cf8; - background-color: #e7f0fe; - } - &.status-running:hover { - border-color: #5a9cf8; - } - &.status-reject { - border-color: #e47470; - background-color: #f6e5e5; - } - &.status-reject:hover { - border-color: #e47470; - } +// &.status-pass { +// border-color: #67c23a; +// background-color: #a9da90; +// } +// &.status-pass:hover { +// border-color: #67c23a; +// } +// &.status-running { +// border-color: #5a9cf8; +// background-color: #e7f0fe; +// } +// &.status-running:hover { +// border-color: #5a9cf8; +// } +// &.status-reject { +// border-color: #e47470; +// background-color: #f6e5e5; +// } +// &.status-reject:hover { +// border-color: #e47470; +// } - &:hover { - border-color: #0089ff; - .node-toolbar { - opacity: 1; - } +// &:hover { +// border-color: #0089ff; +// .node-toolbar { +// opacity: 1; +// } - .branch-node-move { - display: flex; - } - } +// .branch-node-move { +// display: flex; +// } +// } - // 普通节点标题 - .node-title-container { - display: flex; - padding: 4px; - cursor: pointer; - border-radius: 4px 4px 0 0; - align-items: center; +// // 普通节点标题 +// .node-title-container { +// display: flex; +// padding: 4px; +// cursor: pointer; +// border-radius: 4px 4px 0 0; +// align-items: center; - .node-title-icon { - display: flex; - align-items: center; +// .node-title-icon { +// display: flex; +// align-items: center; - &.user-task { - color: #ff943e; - } - &.copy-task { - color: #3296fa; - } - &.start-user { - color: #676565; - } - } +// &.user-task { +// color: #ff943e; +// } +// &.copy-task { +// color: #3296fa; +// } +// &.start-user { +// color: #676565; +// } +// } - .node-title { - margin-left: 4px; - font-size: 14px; - font-weight: 600; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - color: #1f1f1f; - line-height: 18px; - &:hover { - border-bottom: 1px dashed #f60; - } - } - } +// .node-title { +// margin-left: 4px; +// font-size: 14px; +// font-weight: 600; +// white-space: nowrap; +// overflow: hidden; +// text-overflow: ellipsis; +// color: #1f1f1f; +// line-height: 18px; +// &:hover { +// border-bottom: 1px dashed #f60; +// } +// } +// } - // 条件节点标题 - .branch-node-title-container { - display: flex; - padding: 4px 0; - cursor: pointer; - border-radius: 4px 4px 0 0; - align-items: center; - justify-content: space-between; +// // 条件节点标题 +// .branch-node-title-container { +// display: flex; +// padding: 4px 0; +// cursor: pointer; +// border-radius: 4px 4px 0 0; +// align-items: center; +// justify-content: space-between; - .input-max-width { - max-width: 115px !important; - } +// .input-max-width { +// max-width: 115px !important; +// } - .branch-title { - font-size: 13px; - font-weight: 600; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - color: #f60; - &:hover { - border-bottom: 1px dashed #000; - } - } +// .branch-title { +// font-size: 13px; +// font-weight: 600; +// white-space: nowrap; +// overflow: hidden; +// text-overflow: ellipsis; +// color: #f60; +// &:hover { +// border-bottom: 1px dashed #000; +// } +// } - .branch-priority { - min-width: 50px; - font-size: 12px; - } - } +// .branch-priority { +// min-width: 50px; +// font-size: 12px; +// } +// } - .node-content { - display: flex; - min-height: 32px; - padding: 4px 8px; - margin-top: 4px; - line-height: 32px; - justify-content: space-between; - align-items: center; - color: #111f2c; - background: rgba(0, 0, 0, 0.03); - border-radius: 4px; +// .node-content { +// display: flex; +// min-height: 32px; +// padding: 4px 8px; +// margin-top: 4px; +// line-height: 32px; +// justify-content: space-between; +// align-items: center; +// color: #111f2c; +// background: rgba(0, 0, 0, 0.03); +// border-radius: 4px; - .node-text { - display: -webkit-box; - overflow: hidden; - font-size: 14px; - line-height: 24px; - text-overflow: ellipsis; - word-break: break-all; - -webkit-line-clamp: 2; /* 这将限制文本显示为两行 */ - -webkit-box-orient: vertical; - } - } +// .node-text { +// display: -webkit-box; +// overflow: hidden; +// font-size: 14px; +// line-height: 24px; +// text-overflow: ellipsis; +// word-break: break-all; +// -webkit-line-clamp: 2; /* 这将限制文本显示为两行 */ +// -webkit-box-orient: vertical; +// } +// } - //条件节点内容 - .branch-node-content { - display: flex; - min-height: 32px; - padding: 4px 0; - margin-top: 4px; - line-height: 32px; - align-items: center; - color: #111f2c; - border-radius: 4px; +// //条件节点内容 +// .branch-node-content { +// display: flex; +// min-height: 32px; +// padding: 4px 0; +// margin-top: 4px; +// line-height: 32px; +// align-items: center; +// color: #111f2c; +// border-radius: 4px; - .branch-node-text { - overflow: hidden; - font-size: 12px; - line-height: 24px; - text-overflow: ellipsis; - word-break: break-all; - -webkit-line-clamp: 2; /* 这将限制文本显示为两行 */ - -webkit-box-orient: vertical; - } - } +// .branch-node-text { +// overflow: hidden; +// font-size: 12px; +// line-height: 24px; +// text-overflow: ellipsis; +// word-break: break-all; +// -webkit-line-clamp: 2; /* 这将限制文本显示为两行 */ +// -webkit-box-orient: vertical; +// } +// } - // 节点操作 :删除 - .node-toolbar { - opacity: 0; - position: absolute; - top: -20px; - right: 0px; - display: flex; +// // 节点操作 :删除 +// .node-toolbar { +// opacity: 0; +// position: absolute; +// top: -20px; +// right: 0px; +// display: flex; - .toolbar-icon { - text-align: center; - vertical-align: middle; - } - } +// .toolbar-icon { +// text-align: center; +// vertical-align: middle; +// } +// } - // 条件节点左右移动 - .branch-node-move { - position: absolute; - width: 10px; - cursor: pointer; - display: none; - align-items: center; - height: 100%; - justify-content: center; - } +// // 条件节点左右移动 +// .branch-node-move { +// position: absolute; +// width: 10px; +// cursor: pointer; +// display: none; +// align-items: center; +// height: 100%; +// justify-content: center; +// } - .move-node-left { - left: -2px; - top: 0px; - background: rgba(126, 134, 142, 0.08); - border-top-left-radius: 8px; - border-bottom-left-radius: 8px; - } +// .move-node-left { +// left: -2px; +// top: 0px; +// background: rgba(126, 134, 142, 0.08); +// border-top-left-radius: 8px; +// border-bottom-left-radius: 8px; +// } - .move-node-right { - right: -2px; - top: 0px; - background: rgba(126, 134, 142, 0.08); - border-top-right-radius: 6px; - border-bottom-right-radius: 6px; - } - } +// .move-node-right { +// right: -2px; +// top: 0px; +// background: rgba(126, 134, 142, 0.08); +// border-top-right-radius: 6px; +// border-bottom-right-radius: 6px; +// } +// } - .node-config-error { - border-color: #ff5219 !important; - } - // 普通节点包装 - .node-wrapper { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - } - // 节点连线处理 - .node-handler-wrapper { - position: relative; - display: flex; - height: 70px; - align-items: center; - user-select: none; - justify-content: center; - flex-direction: column; +// .node-config-error { +// border-color: #ff5219 !important; +// } +// // 普通节点包装 +// .node-wrapper { +// display: flex; +// flex-direction: column; +// justify-content: center; +// align-items: center; +// } +// // 节点连线处理 +// .node-handler-wrapper { +// position: relative; +// display: flex; +// height: 70px; +// align-items: center; +// user-select: none; +// justify-content: center; +// flex-direction: column; - &::before { - position: absolute; - top:0; - z-index: 0; - width: 2px; - height: 100%; - margin: auto; - background-color: #dedede; - content: ''; - } +// &::before { +// position: absolute; +// top: 0; +// z-index: 0; +// width: 2px; +// height: 100%; +// margin: auto; +// background-color: #dedede; +// content: ''; +// } - .node-handler { - .add-icon { - position: relative; - top: -5px; - display: flex; - align-items: center; - justify-content: center; - cursor: pointer; - width: 25px; - height: 25px; - color: #fff; - background-color: #0089ff; - border-radius: 50%; +// .node-handler { +// .add-icon { +// position: relative; +// top: -5px; +// display: flex; +// align-items: center; +// justify-content: center; +// cursor: pointer; +// width: 25px; +// height: 25px; +// color: #fff; +// background-color: #0089ff; +// border-radius: 50%; - &:hover { - transform: scale(1.1); - } - } - } +// &:hover { +// transform: scale(1.1); +// } +// } +// } - .node-handler-arrow { - position: absolute; - bottom: 0; - left: 50%; - display: flex; - transform: translateX(-50%); - } - } +// .node-handler-arrow { +// position: absolute; +// bottom: 0; +// left: 50%; +// display: flex; +// transform: translateX(-50%); +// } +// } - // 条件节点包装 - .branch-node-wrapper { - position: relative; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - margin-top: 16px; +// // 条件节点包装 +// .branch-node-wrapper { +// position: relative; +// display: flex; +// flex-direction: column; +// justify-content: center; +// align-items: center; +// margin-top: 16px; - .branch-node-container { - position: relative; - display: flex; +// .branch-node-container { +// position: relative; +// display: flex; - &::before { - position: absolute; - height: 100%; - width: 4px; - background-color: #fafafa; - content: ''; - left: 50%; - transform: translate(-50%); - } +// &::before { +// position: absolute; +// height: 100%; +// width: 4px; +// background-color: #fafafa; +// content: ''; +// left: 50%; +// transform: translate(-50%); +// } - .branch-node-add { - position: absolute; - top: -18px; - left: 50%; - z-index: 1; - height: 36px; - padding: 0 10px; - font-size: 12px; - line-height: 36px; - border: 2px solid #dedede; - border-radius: 18px; - transform: translateX(-50%); - transform-origin: center center; - } +// .branch-node-add { +// position: absolute; +// top: -18px; +// left: 50%; +// z-index: 1; +// height: 36px; +// padding: 0 10px; +// font-size: 12px; +// line-height: 36px; +// border: 2px solid #dedede; +// border-radius: 18px; +// transform: translateX(-50%); +// transform-origin: center center; +// } - .branch-node-readonly { - position: absolute; - top: -18px; - left: 50%; - z-index: 1; - width: 36px; - height: 36px; - display: flex; - align-items: center; - justify-content: center; - border: 2px solid #dedede; - background-color: #fff; - border-radius: 50%; - transform: translateX(-50%); - transform-origin: center center; - - &.status-pass { - border-color: #6bb63c; - background-color: #e9f4e2; - } - &.status-pass:hover { - border-color: #6bb63c; - } +// .branch-node-readonly { +// position: absolute; +// top: -18px; +// left: 50%; +// z-index: 1; +// width: 36px; +// height: 36px; +// display: flex; +// align-items: center; +// justify-content: center; +// border: 2px solid #dedede; +// background-color: #fff; +// border-radius: 50%; +// transform: translateX(-50%); +// transform-origin: center center; - .icon-size { - font-size: 22px; - color: #67c23a; - } - } +// &.status-pass { +// border-color: #6bb63c; +// background-color: #e9f4e2; +// } +// &.status-pass:hover { +// border-color: #6bb63c; +// } - .branch-node-item { - position: relative; - display: flex; - flex-direction: column; - align-items: center; - min-width: 280px; - padding: 40px 40px 0; - background: transparent; - border-top: 2px solid #dedede; - border-bottom: 2px solid #dedede; +// .icon-size { +// font-size: 22px; +// color: #67c23a; +// } +// } - &::before { - position: absolute; - width: 2px; - height: 100%; - margin: auto; - inset: 0; - background-color: #dedede; - content: ''; - } - } - // 覆盖条件节点第一个节点左上角的线 - .branch-line-first-top { - position: absolute; - top: -5px; - left: -1px; - width: 50%; - height: 7px; - background-color: #fafafa; - content: ''; - } - // 覆盖条件节点第一个节点左下角的线 - .branch-line-first-bottom { - position: absolute; - bottom: -5px; - left: -1px; - width: 50%; - height: 7px; - background-color: #fafafa; - content: ''; - } - // 覆盖条件节点最后一个节点右上角的线 - .branch-line-last-top { - position: absolute; - top: -5px; - right: -1px; - width: 50%; - height: 7px; - background-color: #fafafa; - content: ''; - } - // 覆盖条件节点最后一个节点右下角的线 - .branch-line-last-bottom { - position: absolute; - right: -1px; - bottom: -5px; - width: 50%; - height: 7px; - background-color: #fafafa; - content: ''; - } - } - } +// .branch-node-item { +// position: relative; +// display: flex; +// flex-direction: column; +// align-items: center; +// min-width: 280px; +// padding: 40px 40px 0; +// background: transparent; +// border-top: 2px solid #dedede; +// border-bottom: 2px solid #dedede; - .node-fixed-name { - display: inline-block; - width: auto; - padding: 0 4px; - overflow: hidden; - text-align: center; - text-overflow: ellipsis; - white-space: nowrap; - } - // 开始节点包装 - .start-node-wrapper { - position: relative; - margin-top: 16px; +// &::before { +// position: absolute; +// width: 2px; +// height: 100%; +// margin: auto; +// inset: 0; +// background-color: #dedede; +// content: ''; +// } +// } +// // 覆盖条件节点第一个节点左上角的线 +// .branch-line-first-top { +// position: absolute; +// top: -5px; +// left: -1px; +// width: 50%; +// height: 7px; +// background-color: #fafafa; +// content: ''; +// } +// // 覆盖条件节点第一个节点左下角的线 +// .branch-line-first-bottom { +// position: absolute; +// bottom: -5px; +// left: -1px; +// width: 50%; +// height: 7px; +// background-color: #fafafa; +// content: ''; +// } +// // 覆盖条件节点最后一个节点右上角的线 +// .branch-line-last-top { +// position: absolute; +// top: -5px; +// right: -1px; +// width: 50%; +// height: 7px; +// background-color: #fafafa; +// content: ''; +// } +// // 覆盖条件节点最后一个节点右下角的线 +// .branch-line-last-bottom { +// position: absolute; +// right: -1px; +// bottom: -5px; +// width: 50%; +// height: 7px; +// background-color: #fafafa; +// content: ''; +// } +// } +// } - .start-node-container { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; +// .node-fixed-name { +// display: inline-block; +// width: auto; +// padding: 0 4px; +// overflow: hidden; +// text-align: center; +// text-overflow: ellipsis; +// white-space: nowrap; +// } +// // 开始节点包装 +// .start-node-wrapper { +// position: relative; +// margin-top: 16px; - .start-node-box { - display: flex; - justify-content: center; - align-items: center; - width: 90px; - height: 36px; - padding: 3px 4px; - color: #212121; - cursor: pointer; - background: #fafafa; - border-radius: 30px; - box-shadow: 0 1px 5px 0 rgba(10, 30, 65, 0.08); - box-sizing: border-box; - } - } - } +// .start-node-container { +// display: flex; +// flex-direction: column; +// justify-content: center; +// align-items: center; - // 结束节点包装 - .end-node-wrapper { - margin-bottom: 16px; +// .start-node-box { +// display: flex; +// justify-content: center; +// align-items: center; +// width: 90px; +// height: 36px; +// padding: 3px 4px; +// color: #212121; +// cursor: pointer; +// background: #fafafa; +// border-radius: 30px; +// box-shadow: 0 1px 5px 0 rgba(10, 30, 65, 0.08); +// box-sizing: border-box; +// } +// } +// } - .end-node-box { - display: flex; - justify-content: center; - align-items: center; - width: 80px; - height: 36px; - border: 2px solid #fafafa; - color: #212121; - border-radius: 30px; - box-shadow: 0 1px 5px 0 rgba(10, 30, 65, 0.08); - box-sizing: border-box; +// // 结束节点包装 +// .end-node-wrapper { +// margin-bottom: 16px; - &.status-pass { - border-color: #6bb63c; - background-color: #a9da90; - } +// .end-node-box { +// display: flex; +// justify-content: center; +// align-items: center; +// width: 80px; +// height: 36px; +// border: 2px solid #fafafa; +// color: #212121; +// border-radius: 30px; +// box-shadow: 0 1px 5px 0 rgba(10, 30, 65, 0.08); +// box-sizing: border-box; - &.status-pass:hover { - border-color: #6bb63c; - } +// &.status-pass { +// border-color: #6bb63c; +// background-color: #a9da90; +// } - &.status-reject { - border-color: #e47470; - background-color: #f6e5e5; - } - &.status-reject:hover { - border-color: #e47470; - } +// &.status-pass:hover { +// border-color: #6bb63c; +// } - &.status-cancel { - border-color: #919398; - background-color: #eaeaeb - } - &.status-cancel:hover { - border-color: #919398; - } - } - } +// &.status-reject { +// border-color: #e47470; +// background-color: #f6e5e5; +// } +// &.status-reject:hover { +// border-color: #e47470; +// } - // 可编辑的 title 输入框 - .editable-title-input { - height: 20px; - max-width: 145px; - line-height: 20px; - font-size: 12px; - margin-left: 4px; - border: 1px solid #d9d9d9; - border-radius: 4px; - transition: all 0.3s; +// &.status-cancel { +// border-color: #919398; +// background-color: #eaeaeb; +// } +// &.status-cancel:hover { +// border-color: #919398; +// } +// } +// } - &:focus { - border-color: #40a9ff; - outline: 0; - box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); - } - } - } - } -} +// // 可编辑的 title 输入框 +// .editable-title-input { +// height: 20px; +// max-width: 145px; +// line-height: 20px; +// font-size: 12px; +// margin-left: 4px; +// border: 1px solid #d9d9d9; +// border-radius: 4px; +// transition: all 0.3s; + +// &:focus { +// border-color: #40a9ff; +// outline: 0; +// box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); +// } +// } +// } +// } +// } // 配置节点头部 .config-header { @@ -740,6 +740,531 @@ } } +.simple-process-model-container { + height: 100%; + overflow: auto; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + padding-top: 16px; + background-color: #fafafa; + transform-origin: 50% 0 0; + transform: scale(1); + transition: transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + background: url(@/assets/svgs/bpm/simple-process-bg.svg) 0 0 repeat; + // 节点容器 定义节点宽度 + .node-container { + width: 200px; + } + // 节点 + .node-box { + position: relative; + display: flex; + min-height: 70px; + padding: 5px 10px 8px; + cursor: pointer; + background-color: #fff; + flex-direction: column; + border: 2px solid transparent; + border-radius: 8px; + box-shadow: 0 1px 4px 0 rgb(10 30 65 / 16%); + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + + &.status-pass { + background-color: #a9da90; + border-color: #67c23a; + } + + &.status-pass:hover { + border-color: #67c23a; + } + + &.status-running { + background-color: #e7f0fe; + border-color: #5a9cf8; + } + + &.status-running:hover { + border-color: #5a9cf8; + } + + &.status-reject { + background-color: #f6e5e5; + border-color: #e47470; + } + + &.status-reject:hover { + border-color: #e47470; + } + + &:hover { + border-color: #0089ff; + + .node-toolbar { + opacity: 1; + } + + .branch-node-move { + display: flex; + } + } + + // 普通节点标题 + .node-title-container { + display: flex; + padding: 4px; + cursor: pointer; + border-radius: 4px 4px 0 0; + align-items: center; + + .node-title-icon { + display: flex; + align-items: center; + + &.user-task { + color: #ff943e; + } + + &.copy-task { + color: #3296fa; + } + + &.start-user { + color: #676565; + } + } + + .node-title { + margin-left: 4px; + overflow: hidden; + font-size: 14px; + font-weight: 600; + line-height: 18px; + color: #1f1f1f; + text-overflow: ellipsis; + white-space: nowrap; + + &:hover { + border-bottom: 1px dashed #f60; + } + } + } + + // 条件节点标题 + .branch-node-title-container { + display: flex; + padding: 4px 0; + cursor: pointer; + border-radius: 4px 4px 0 0; + align-items: center; + justify-content: space-between; + + .input-max-width { + max-width: 115px !important; + } + + .branch-title { + overflow: hidden; + font-size: 13px; + font-weight: 600; + color: #f60; + text-overflow: ellipsis; + white-space: nowrap; + + &:hover { + border-bottom: 1px dashed #000; + } + } + + .branch-priority { + min-width: 50px; + font-size: 12px; + } + } + + .node-content { + display: flex; + min-height: 32px; + padding: 4px 8px; + margin-top: 4px; + line-height: 32px; + justify-content: space-between; + align-items: center; + color: #111f2c; + background: rgb(0 0 0 / 3%); + border-radius: 4px; + + .node-text { + display: -webkit-box; + overflow: hidden; + font-size: 14px; + line-height: 24px; + text-overflow: ellipsis; + word-break: break-all; + -webkit-line-clamp: 2; /* 这将限制文本显示为两行 */ + -webkit-box-orient: vertical; + } + } + + //条件节点内容 + .branch-node-content { + display: flex; + min-height: 32px; + padding: 4px 0; + margin-top: 4px; + line-height: 32px; + align-items: center; + color: #111f2c; + border-radius: 4px; + + .branch-node-text { + overflow: hidden; + font-size: 12px; + line-height: 24px; + text-overflow: ellipsis; + word-break: break-all; + -webkit-line-clamp: 2; /* 这将限制文本显示为两行 */ + -webkit-box-orient: vertical; + } + } + + // 节点操作 :删除 + .node-toolbar { + position: absolute; + top: -20px; + right: 0; + display: flex; + opacity: 0; + + .toolbar-icon { + text-align: center; + vertical-align: middle; + } + } + + // 条件节点左右移动 + .branch-node-move { + position: absolute; + display: none; + width: 10px; + height: 100%; + cursor: pointer; + align-items: center; + justify-content: center; + } + + .move-node-left { + top: 0; + left: -2px; + background: rgb(126 134 142 / 8%); + border-bottom-left-radius: 8px; + border-top-left-radius: 8px; + } + + .move-node-right { + top: 0; + right: -2px; + background: rgb(126 134 142 / 8%); + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; + } + } + + .node-config-error { + border-color: #ff5219 !important; + } + // 普通节点包装 + .node-wrapper { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + } + // 节点连线处理 + .node-handler-wrapper { + position: relative; + display: flex; + height: 70px; + align-items: center; + user-select: none; + justify-content: center; + flex-direction: column; + + &::before { + position: absolute; + top: 0; + z-index: 0; + width: 2px; + height: 100%; + margin: auto; + background-color: #dedede; + content: ''; + } + + .node-handler { + .add-icon { + position: relative; + top: -5px; + display: flex; + width: 25px; + height: 25px; + color: #fff; + cursor: pointer; + background-color: #0089ff; + border-radius: 50%; + align-items: center; + justify-content: center; + + &:hover { + transform: scale(1.1); + } + } + } + + .node-handler-arrow { + position: absolute; + bottom: 0; + left: 50%; + display: flex; + transform: translateX(-50%); + } + } + + // 条件节点包装 + .branch-node-wrapper { + position: relative; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + margin-top: 16px; + + .branch-node-container { + position: relative; + display: flex; + + &::before { + position: absolute; + left: 50%; + width: 4px; + height: 100%; + background-color: #fafafa; + content: ''; + transform: translate(-50%); + } + + .branch-node-add { + position: absolute; + top: -18px; + left: 50%; + z-index: 1; + height: 36px; + padding: 0 10px; + font-size: 12px; + line-height: 36px; + border: 2px solid #dedede; + border-radius: 18px; + transform: translateX(-50%); + transform-origin: center center; + } + + .branch-node-readonly { + position: absolute; + top: -18px; + left: 50%; + z-index: 1; + display: flex; + width: 36px; + height: 36px; + background-color: #fff; + border: 2px solid #dedede; + border-radius: 50%; + transform: translateX(-50%); + align-items: center; + justify-content: center; + transform-origin: center center; + + &.status-pass { + background-color: #e9f4e2; + border-color: #6bb63c; + } + + &.status-pass:hover { + border-color: #6bb63c; + } + + .icon-size { + font-size: 22px; + color: #67c23a; + } + } + + .branch-node-item { + position: relative; + display: flex; + flex-direction: column; + align-items: center; + min-width: 280px; + padding: 40px 40px 0; + background: transparent; + border-top: 2px solid #dedede; + border-bottom: 2px solid #dedede; + + &::before { + position: absolute; + width: 2px; + height: 100%; + margin: auto; + inset: 0; + background-color: #dedede; + content: ''; + } + } + // 覆盖条件节点第一个节点左上角的线 + .branch-line-first-top { + position: absolute; + top: -5px; + left: -1px; + width: 50%; + height: 7px; + background-color: #fafafa; + content: ''; + } + // 覆盖条件节点第一个节点左下角的线 + .branch-line-first-bottom { + position: absolute; + bottom: -5px; + left: -1px; + width: 50%; + height: 7px; + background-color: #fafafa; + content: ''; + } + // 覆盖条件节点最后一个节点右上角的线 + .branch-line-last-top { + position: absolute; + top: -5px; + right: -1px; + width: 50%; + height: 7px; + background-color: #fafafa; + content: ''; + } + // 覆盖条件节点最后一个节点右下角的线 + .branch-line-last-bottom { + position: absolute; + right: -1px; + bottom: -5px; + width: 50%; + height: 7px; + background-color: #fafafa; + content: ''; + } + } + } + + .node-fixed-name { + display: inline-block; + width: auto; + padding: 0 4px; + overflow: hidden; + text-align: center; + text-overflow: ellipsis; + white-space: nowrap; + } + // 开始节点包装 + .start-node-wrapper { + position: relative; + margin-top: 16px; + + .start-node-container { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + + .start-node-box { + display: flex; + justify-content: center; + align-items: center; + width: 90px; + height: 36px; + padding: 3px 4px; + color: #212121; + cursor: pointer; + background: #fafafa; + border-radius: 30px; + box-shadow: 0 1px 5px 0 rgb(10 30 65 / 8%); + box-sizing: border-box; + } + } + } + + // 结束节点包装 + .end-node-wrapper { + margin-bottom: 16px; + + .end-node-box { + display: flex; + width: 80px; + height: 36px; + color: #212121; + border: 2px solid #fafafa; + border-radius: 30px; + box-shadow: 0 1px 5px 0 rgb(10 30 65 / 8%); + box-sizing: border-box; + justify-content: center; + align-items: center; + + &.status-pass { + background-color: #a9da90; + border-color: #6bb63c; + } + + &.status-pass:hover { + border-color: #6bb63c; + } + + &.status-reject { + background-color: #f6e5e5; + border-color: #e47470; + } + + &.status-reject:hover { + border-color: #e47470; + } + + &.status-cancel { + background-color: #eaeaeb; + border-color: #919398; + } + + &.status-cancel:hover { + border-color: #919398; + } + } + } + + // 可编辑的 title 输入框 + .editable-title-input { + height: 20px; + max-width: 145px; + margin-left: 4px; + font-size: 12px; + line-height: 20px; + border: 1px solid #d9d9d9; + border-radius: 4px; + transition: all 0.3s; + + &:focus { + border-color: #40a9ff; + outline: 0; + box-shadow: 0 0 0 2px rgb(24 144 255 / 20%); + } + } +} + // iconfont 样式 @font-face { font-family: 'iconfont'; /* Project id 4495938 */ diff --git a/src/router/modules/remaining.ts b/src/router/modules/remaining.ts index a61fd166..f0ce322e 100644 --- a/src/router/modules/remaining.ts +++ b/src/router/modules/remaining.ts @@ -267,9 +267,9 @@ const remainingRouter: AppRouteRecordRaw[] = [ } }, { - path: 'manager/simple/workflow/model/edit', - component: () => import('@/views/bpm/simpleWorkflow/index.vue'), - name: 'SimpleWorkflowDesignEditor', + path: 'manager/simple/model', + component: () => import('@/views/bpm/simple/SimpleModelDesign.vue'), + name: 'SimpleModelDesign', meta: { noCache: true, hidden: true, diff --git a/src/views/bpm/model/CategoryDraggableModel.vue b/src/views/bpm/model/CategoryDraggableModel.vue index c6c87da5..75a2d55d 100644 --- a/src/views/bpm/model/CategoryDraggableModel.vue +++ b/src/views/bpm/model/CategoryDraggableModel.vue @@ -342,7 +342,7 @@ const handleDesign = (row: any) => { }) } else { push({ - name: 'SimpleWorkflowDesignEditor', + name: 'SimpleModelDesign', query: { modelId: row.id } @@ -492,9 +492,11 @@ watch( diff --git a/src/views/bpm/model/index_old.vue b/src/views/bpm/model/index_old.vue index 4534ec61..8b5f84df 100644 --- a/src/views/bpm/model/index_old.vue +++ b/src/views/bpm/model/index_old.vue @@ -338,7 +338,7 @@ const handleDesign = (row: any) => { }) } else { push({ - name: 'SimpleWorkflowDesignEditor', + name: 'SimpleModelDesign', query: { modelId: row.id } diff --git a/src/views/bpm/processInstance/detail/ProcessInstanceSimpleViewer.vue b/src/views/bpm/processInstance/detail/ProcessInstanceSimpleViewer.vue index 29ea24dd..6ec91a09 100644 --- a/src/views/bpm/processInstance/detail/ProcessInstanceSimpleViewer.vue +++ b/src/views/bpm/processInstance/detail/ProcessInstanceSimpleViewer.vue @@ -1,12 +1,11 @@ - diff --git a/src/views/bpm/processInstance/detail/index.vue b/src/views/bpm/processInstance/detail/index.vue index 6a1d7425..6fe4565e 100644 --- a/src/views/bpm/processInstance/detail/index.vue +++ b/src/views/bpm/processInstance/detail/index.vue @@ -75,11 +75,14 @@
- +
@@ -122,11 +125,13 @@