Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
phsl
/
admin
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
0212ef48
authored
Feb 13, 2025
by
Lemon
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
增加流程图 小手功能
parent
6b6b634f
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
76 additions
and
72 deletions
+76
-72
src/components/SimpleProcessDesignerV2/src/SimpleProcessModel.vue
+74
-16
src/views/bpm/processInstance/detail/ProcessInstanceSimpleViewer.vue
+2
-56
No files found.
src/components/SimpleProcessDesignerV2/src/SimpleProcessModel.vue
View file @
0212ef48
...
@@ -26,7 +26,15 @@
...
@@ -26,7 +26,15 @@
</el-button-group>
</el-button-group>
</el-row>
</el-row>
</div>
</div>
<div
class=
"simple-process-model"
:style=
"`transform: scale($
{scaleValue / 100});`">
<div
class=
"simple-process-model"
:style=
"`transform: translate($
{currentX}px, ${currentY}px) scale(${scaleValue / 100});`"
@mousedown="startDrag"
@mousemove="onDrag"
@mouseup="stopDrag"
@mouseleave="stopDrag"
@mouseenter="setGrabCursor"
>
<ProcessNodeTree
v-if=
"processNodeTree"
v-model:flow-node=
"processNodeTree"
/>
<ProcessNodeTree
v-if=
"processNodeTree"
v-model:flow-node=
"processNodeTree"
/>
</div>
</div>
</div>
</div>
...
@@ -80,24 +88,41 @@ let scaleValue = ref(100)
...
@@ -80,24 +88,41 @@ let scaleValue = ref(100)
const
MAX_SCALE_VALUE
=
200
const
MAX_SCALE_VALUE
=
200
const
MIN_SCALE_VALUE
=
50
const
MIN_SCALE_VALUE
=
50
// 放大
const
isDragging
=
ref
(
false
)
const
zoomIn
=
()
=>
{
const
startX
=
ref
(
0
)
if
(
scaleValue
.
value
==
MAX_SCALE_VALUE
)
{
const
startY
=
ref
(
0
)
return
const
currentX
=
ref
(
0
)
}
const
currentY
=
ref
(
0
)
scaleValue
.
value
+=
10
const
setGrabCursor
=
()
=>
{
document
.
body
.
style
.
cursor
=
'grab'
;
}
}
// 缩小
const
resetCursor
=
()
=>
{
const
zoomOut
=
()
=>
{
document
.
body
.
style
.
cursor
=
'default'
;
if
(
scaleValue
.
value
==
MIN_SCALE_VALUE
)
{
return
}
scaleValue
.
value
-=
10
}
}
const
processReZoom
=
()
=>
{
const
startDrag
=
(
e
:
MouseEvent
)
=>
{
scaleValue
.
value
=
100
isDragging
.
value
=
true
;
startX
.
value
=
e
.
clientX
-
currentX
.
value
;
startY
.
value
=
e
.
clientY
-
currentY
.
value
;
setGrabCursor
();
// 设置小手光标
}
const
onDrag
=
(
e
:
MouseEvent
)
=>
{
if
(
!
isDragging
.
value
)
return
;
e
.
preventDefault
();
// 使用 requestAnimationFrame 优化性能
requestAnimationFrame
(()
=>
{
currentX
.
value
=
e
.
clientX
-
startX
.
value
;
currentY
.
value
=
e
.
clientY
-
startY
.
value
;
});
}
const
stopDrag
=
()
=>
{
isDragging
.
value
=
false
;
resetCursor
();
// 重置光标
}
}
const
errorDialogVisible
=
ref
(
false
)
const
errorDialogVisible
=
ref
(
false
)
...
@@ -193,6 +218,39 @@ const importLocalFile = () => {
...
@@ -193,6 +218,39 @@ const importLocalFile = () => {
}
}
}
}
}
}
// 放大
const
zoomIn
=
()
=>
{
if
(
scaleValue
.
value
==
MAX_SCALE_VALUE
)
{
return
}
scaleValue
.
value
+=
10
}
// 缩小
const
zoomOut
=
()
=>
{
if
(
scaleValue
.
value
==
MIN_SCALE_VALUE
)
{
return
}
scaleValue
.
value
-=
10
}
const
processReZoom
=
()
=>
{
scaleValue
.
value
=
100
}
</
script
>
</
script
>
<
style
lang=
"scss"
scoped
></
style
>
<
style
lang=
"scss"
scoped
>
.simple-process-model-container
{
width
:
100%
;
height
:
100%
;
position
:
relative
;
overflow
:
hidden
;
}
.simple-process-model
{
position
:
relative
;
//
确保相对定位
min-width
:
100%
;
//
确保宽度为100%
min-height
:
100%
;
//
确保高度为100%
}
</
style
>
src/views/bpm/processInstance/detail/ProcessInstanceSimpleViewer.vue
View file @
0212ef48
<
template
>
<
template
>
<div
v-loading=
"loading"
class=
"process-viewer-container"
>
<div
v-loading=
"loading"
class=
"process-viewer-container"
>
<div
ref=
"wrapperRef"
class=
"process-viewer-wrapper"
@
mousedown=
"startDrag"
@
mousemove=
"onDrag"
@
mouseup=
"stopDrag"
@
mouseleave=
"stopDrag"
>
<SimpleProcessViewer
<SimpleProcessViewer
:flow-node=
"simpleModel"
:flow-node=
"simpleModel"
:tasks=
"tasks"
:tasks=
"tasks"
:process-instance=
"processInstance"
:process-instance=
"processInstance"
/>
/>
</div>
</div>
</div>
</
template
>
</
template
>
<
script
lang=
"ts"
setup
>
<
script
lang=
"ts"
setup
>
import
{
propTypes
}
from
'@/utils/propTypes'
import
{
propTypes
}
from
'@/utils/propTypes'
...
@@ -34,32 +25,6 @@ const tasks = ref([])
...
@@ -34,32 +25,6 @@ const tasks = ref([])
// 流程实例
// 流程实例
const
processInstance
=
ref
()
const
processInstance
=
ref
()
const
wrapperRef
=
ref
<
HTMLElement
>
()
const
isDragging
=
ref
(
false
)
const
startX
=
ref
(
0
)
const
startY
=
ref
(
0
)
const
currentX
=
ref
(
0
)
const
currentY
=
ref
(
0
)
const
startDrag
=
(
e
:
MouseEvent
)
=>
{
if
(
!
wrapperRef
.
value
)
return
isDragging
.
value
=
true
startX
.
value
=
e
.
clientX
-
currentX
.
value
startY
.
value
=
e
.
clientY
-
currentY
.
value
}
const
onDrag
=
(
e
:
MouseEvent
)
=>
{
if
(
!
isDragging
.
value
||
!
wrapperRef
.
value
)
return
e
.
preventDefault
()
currentX
.
value
=
e
.
clientX
-
startX
.
value
currentY
.
value
=
e
.
clientY
-
startY
.
value
wrapperRef
.
value
.
style
.
transform
=
`translate(
${
currentX
.
value
}
px,
${
currentY
.
value
}
px)`
}
const
stopDrag
=
()
=>
{
isDragging
.
value
=
false
}
/** 监控模型视图 包括任务列表、进行中的活动节点编号等 */
/** 监控模型视图 包括任务列表、进行中的活动节点编号等 */
watch
(
watch
(
()
=>
props
.
modelView
,
()
=>
props
.
modelView
,
...
@@ -119,7 +84,8 @@ const setSimpleModelNodeTaskStatus = (
...
@@ -119,7 +84,8 @@ const setSimpleModelNodeTaskStatus = (
// 审批节点
// 审批节点
if
(
if
(
simpleModel
.
type
===
NodeType
.
START_USER_NODE
||
simpleModel
.
type
===
NodeType
.
START_USER_NODE
||
simpleModel
.
type
===
NodeType
.
USER_TASK_NODE
simpleModel
.
type
===
NodeType
.
USER_TASK_NODE
||
simpleModel
.
type
===
NodeType
.
TRANSACTOR_NODE
)
{
)
{
simpleModel
.
activityStatus
=
TaskStatusEnum
.
NOT_START
simpleModel
.
activityStatus
=
TaskStatusEnum
.
NOT_START
if
(
rejectedTaskActivityIds
.
includes
(
simpleModel
.
id
))
{
if
(
rejectedTaskActivityIds
.
includes
(
simpleModel
.
id
))
{
...
@@ -205,24 +171,4 @@ const setSimpleModelNodeTaskStatus = (
...
@@ -205,24 +171,4 @@ const setSimpleModelNodeTaskStatus = (
</
script
>
</
script
>
<
style
lang=
"scss"
scoped
>
<
style
lang=
"scss"
scoped
>
.process-viewer-container
{
width
:
100%
;
height
:
100%
;
position
:
relative
;
overflow
:
hidden
;
.process-viewer-wrapper
{
position
:
absolute
;
top
:
0
;
left
:
0
;
min-width
:
100%
;
min-height
:
100%
;
cursor
:
grab
;
user-select
:
none
;
&:active
{
cursor
:
grabbing
;
}
}
}
</
style
>
</
style
>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment