@@ -12,15 +12,20 @@ import {
12
12
Space ,
13
13
Select ,
14
14
Input ,
15
+ InputNumber ,
16
+ Switch ,
15
17
} from 'antd'
16
18
import ImageNode from './imageNode'
17
- import Uml from './uml '
19
+ import CustomHtml from '../../../components/nodes/custom-html/Html '
18
20
import data from './data'
21
+ import { circle as circleSvgUrl , rect as rectSvgUrl } from './svg'
19
22
20
23
import './index.less'
21
24
import '@logicflow/core/es/index.css'
22
25
import '@logicflow/extension/es/index.css'
23
26
27
+ import type { ToImageOptions } from '@logicflow/extension'
28
+
24
29
const config : Partial < LogicFlow . Options > = {
25
30
style : {
26
31
rect : {
@@ -52,6 +57,7 @@ const config: Partial<LogicFlow.Options> = {
52
57
grid : {
53
58
size : 20 ,
54
59
} ,
60
+ partial : true ,
55
61
}
56
62
57
63
/**
@@ -63,10 +69,11 @@ export default function SnapshotExample() {
63
69
64
70
const [ fileName , setFileName ] = useState < string > ( ) // 文件名
65
71
const [ fileType , setFileType ] = useState < string > ( 'png' ) // 下载的图片类型
66
- const [ width , setWidth ] = useState < string > ( ) // 宽度
67
- const [ height , setHeight ] = useState < string > ( ) // 高度
68
- const [ padding , setPaddding ] = useState < string > ( ) //padding
69
- const [ quality , setQuality ] = useState < string > ( ) // 图片质量
72
+ const [ width , setWidth ] = useState < number > ( ) // 宽度
73
+ const [ height , setHeight ] = useState < number > ( ) // 高度
74
+ const [ padding , setPadding ] = useState < number > ( ) //padding
75
+ const [ quality , setQuality ] = useState < number > ( ) // 图片质量
76
+ const [ partial , setPartial ] = useState < boolean > ( true ) // 导出局部渲染
70
77
71
78
const [ blobData , setBlobData ] = useState ( '' )
72
79
const [ base64Data , setBase64Data ] = useState ( '' )
@@ -80,24 +87,30 @@ export default function SnapshotExample() {
80
87
plugins : [ Snapshot , DndPanel ] ,
81
88
} )
82
89
83
- lf . register ( Uml )
90
+ lf . register ( CustomHtml )
84
91
lf . register ( ImageNode )
85
92
86
93
lf . setPatternItems ( [
87
94
{
88
95
type : 'circle' ,
89
96
text : 'circle' ,
90
97
label : 'circle' ,
91
- icon : 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAAH6ji2bAAAABGdBTUEAALGPC/xhBQAAAnBJREFUOBGdVL1rU1EcPfdGBddmaZLiEhdx1MHZQXApraCzQ7GKLgoRBxMfcRELuihWKcXFRcEWF8HBf0DdDCKYRZpnl7p0svLe9Zzbd29eQhTbC8nv+9zf130AT63jvooOGS8Vf9Nt5zxba7sXQwODfkWpkbjTQfCGUd9gIp3uuPP8bZ946g56dYQvnBg+b1HB8VIQmMFrazKcKSvFW2dQTxJnJdQ77urmXWOMBCmXM2Rke4S7UAW+/8ywwFoewmBps2tu7mbTdp8VMOkIRAkKfrVawalJTtIliclFbaOBqa0M2xImHeVIfd/nKAfVq/LGnPss5Kh00VEdSzfwnBXPUpmykNss4lUI9C1ga+8PNrBD5YeqRY2Zz8PhjooIbfJXjowvQJBqkmEkVnktWhwu2SM7SMx7Cj0N9IC0oQXRo8xwAGzQms+xrB/nNSUWVveI48ayrFGyC2+E2C+aWrZHXvOuz+CiV6iycWe1Rd1Q6+QUG07nb5SbPrL4426d+9E1axKjY3AoRrlEeSQo2Eu0T6BWAAr6COhTcWjRaYfKG5csnvytvUr/WY4rrPMB53Uo7jZRjXaG6/CFfNMaXEu75nG47X+oepU7PKJvvzGDY1YLSKHJrK7vFUwXKkaxwhCW3u+sDFMVrIju54RYYbFKpALZAo7sB6wcKyyrd+aBMryMT2gPyD6GsQoRFkGHr14TthZni9ck0z+Pnmee460mHXbRAypKNy3nuMdrWgVKj8YVV8E7PSzp1BZ9SJnJAsXdryw/h5ctboUVi4AFiCd+lQaYMw5z3LGTBKjLQOeUF35k89f58Vv/tGh+l+PE/wG0rgfIUbZK5AAAAABJRU5ErkJggg==' ,
98
+ icon : circleSvgUrl ,
92
99
} ,
93
100
{
94
101
type : 'rect' ,
95
102
label : 'rect' ,
96
103
text : 'circle' ,
97
- icon : 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAEFVwZaAAAABGdBTUEAALGPC/xhBQAAAqlJREFUOBF9VM9rE0EUfrMJNUKLihGbpLGtaCOIR8VjQMGDePCgCCIiCNqzCAp2MyYUCXhUtF5E0D+g1t48qAd7CCLqQUQKEWkStcEfVGlLdp/fm3aW2QQdyLzf33zz5m2IsAZ9XhDpyaaIZkTS4ASzK41TFao88GuJ3hsr2pAbipHxuSYyKRugagICGANkfFnNh3HeE2N0b3nN2cgnpcictw5veJIzxmDamSlxxQZicq/mflxhbaH8BLRbuRwNtZp0JAhoplVRUdzmCe/vO27wFuuA3S5qXruGdboy5/PRGFsbFGKo/haRtQHIrM83bVeTrOgNhZReWaYGnE4aUQgTJNvijJFF4jQ8BxJE5xfKatZWmZcTQ+BVgh7s8SgPlCkcec4mGTmieTP4xd7PcpIEg1TX6gdeLW8rTVMVLVvb7ctXoH0Cydl2QOPJBG21STE5OsnbweVYzAnD3A7PVILuY0yiiyDwSm2g441r6rMSgp6iK42yqroI2QoXeJVeA+YeZSa47gZdXaZWQKTrG93rukk/l2Al6Kzh5AZEl7dDQy+JjgFahQjRopSxPbrbvK7GRe9ePWBo1wcU7sYrFZtavXALwGw/7Dnc50urrHJuTPSoO2IMV3gUQGNg87IbSOIY9BpiT9HV7FCZ94nPXb3MSnwHn/FFFE1vG6DTby+r31KAkUktB3Qf6ikUPWxW1BkXSPQeMHHiW0+HAd2GelJsZz1OJegCxqzl+CLVHa/IibuHeJ1HAKzhuDR+ymNaRFM+4jU6UWKXorRmbyqkq/D76FffevwdCp+jN3UAN/C9JRVTDuOxC/oh+EdMnqIOrlYteKSfadVRGLJFJPSB/ti/6K8f0CNymg/iH2gO/f0DwE0yjAFO6l8JaR5j0VPwPwfaYHqOqrCI319WzwhwzNW/aQAAAABJRU5ErkJggg==' ,
104
+ icon : rectSvgUrl ,
98
105
} ,
99
106
] )
100
107
108
+ lf . on ( 'custom:button-click' , ( model : any ) => {
109
+ lf . setProperties ( model . id , {
110
+ body : 'LogicFlow' ,
111
+ } )
112
+ } )
113
+
101
114
// 默认开启css样式
102
115
lf . extension . snapshot . useGlobalRules = true
103
116
// 不会覆盖css样式,会叠加,customCssRules优先级高
@@ -118,14 +131,14 @@ export default function SnapshotExample() {
118
131
119
132
// 下载
120
133
const downLoad = ( ) => {
121
- const params = {
134
+ const params : ToImageOptions = {
122
135
fileType,
123
136
backgroundColor : 'yellow' ,
124
- partialElement : true ,
125
- ... ( width ? { width : Number ( width ) } : { } ) ,
126
- ... ( height ? { height : Number ( height ) } : { } ) ,
127
- ... ( padding ? { padding : Number ( padding ) } : { } ) ,
128
- ... ( quality ? { quality : Number ( quality ) } : { } ) ,
137
+ partial ,
138
+ width,
139
+ height,
140
+ padding,
141
+ quality,
129
142
}
130
143
console . log ( params , 'params' )
131
144
lfRef . current && lfRef . current . getSnapshot ( fileName , params )
@@ -177,6 +190,38 @@ export default function SnapshotExample() {
177
190
}
178
191
}
179
192
193
+ const handleWidthChange = ( value : number | null | undefined ) => {
194
+ if ( value === null || value === undefined ) {
195
+ setWidth ( undefined ) // 处理 null 或 undefined 的情况
196
+ } else {
197
+ setWidth ( value ) // 设置有效的数字值
198
+ }
199
+ }
200
+
201
+ const handleHeightChange = ( value : number | null | undefined ) => {
202
+ if ( value === null || value === undefined ) {
203
+ setHeight ( undefined ) // 处理 null 或 undefined 的情况
204
+ } else {
205
+ setHeight ( value ) // 设置有效的数字值
206
+ }
207
+ }
208
+
209
+ const handlePaddingChange = ( value : number | null | undefined ) => {
210
+ if ( value === null || value === undefined ) {
211
+ setPadding ( undefined ) // 处理 null 或 undefined 的情况
212
+ } else {
213
+ setPadding ( value ) // 设置有效的数字值
214
+ }
215
+ }
216
+
217
+ const handleQualityChange = ( value : number | null | undefined ) => {
218
+ if ( value === null || value === undefined ) {
219
+ setQuality ( undefined ) // 处理 null 或 undefined 的情况
220
+ } else {
221
+ setQuality ( value ) // 设置有效的数字值
222
+ }
223
+ }
224
+
180
225
return (
181
226
< Card title = "LogicFlow Extension - Snapshot" >
182
227
< Space >
@@ -198,29 +243,31 @@ export default function SnapshotExample() {
198
243
{ value : 'svg' , label : 'svg' } ,
199
244
] }
200
245
/>
201
- < Input
246
+ < InputNumber
202
247
addonBefore = "宽度:"
203
248
value = { width }
204
- onChange = { ( e ) => setWidth ( e . target . value ) }
249
+ onChange = { handleWidthChange }
205
250
/>
206
- < Input
251
+ < InputNumber
207
252
addonBefore = "高度:"
208
253
value = { height }
209
- onChange = { ( e ) => setHeight ( e . target . value ) }
254
+ onChange = { handleHeightChange }
210
255
/>
211
256
</ Space >
212
257
< p > </ p >
213
258
< Space >
214
- < Input
259
+ < InputNumber
215
260
addonBefore = "padding:"
216
261
value = { padding }
217
- onChange = { ( e ) => setPaddding ( e . target . value ) }
262
+ onChange = { handlePaddingChange }
218
263
/>
219
- < Input
264
+ < InputNumber
220
265
addonBefore = "图片质量:"
221
266
value = { quality }
222
- onChange = { ( e ) => setQuality ( e . target . value ) }
267
+ onChange = { handleQualityChange }
223
268
/>
269
+ < span > 导出局部渲染:</ span >
270
+ < Switch defaultChecked onChange = { ( partial ) => setPartial ( partial ) } />
224
271
</ Space >
225
272
< Divider />
226
273
< Space >
0 commit comments