1
1
<template >
2
- <div ref =" container" class =" containers" @mousemove = " focusOut " >
2
+ <div ref =" container" class =" containers" >
3
3
<div ref =" canvas" class =" canvas" ></div >
4
+ <div id =" properties-panel-parent" class =" properties-panel-parent" ></div >
4
5
</div >
5
6
</template >
6
7
7
8
<script >
8
9
import BpmnModeler from " ../../CustomModeler" ;
9
10
import CustomTranslate from " ../../CustomTranslate" ;
10
- import camundaModdleDescriptor from " camunda-bpmn-moddle/resources/camunda" ;
11
+ import camundaModdleDescriptor from " camunda-bpmn-moddle/resources/camunda.json" ;
12
+ import propertiesPanelModule from ' bpmn-js-properties-panel' ;
13
+ import propertiesProviderModule from ' bpmn-js-properties-panel/lib/provider/camunda' ;
11
14
import minimapModule from " diagram-js-minimap" ;
12
15
import CliModule from ' bpmn-js-cli' ;
13
16
import { debounce } from " min-dash" ;
@@ -17,50 +20,65 @@ let customTranslateModule = {
17
20
export default {
18
21
name: " BpmnModeler" ,
19
22
props: {
20
- diagramXML: String
23
+ diagramXML: String ,
24
+ propertiesPanel: null
21
25
},
22
26
data () {
23
27
return {
24
28
modeler: {},
25
29
xmlData: " " ,
26
30
svgImage: " " ,
27
- isSvg: false
31
+ isSvg: false ,
28
32
};
29
33
},
30
34
watch: {
31
35
diagramXML (val ) {
32
36
this .openDiagram (val)
33
37
}
34
38
},
35
- mounted () {
39
+ async mounted () {
40
+ console .log (this .propertiesPanel === ' ' )
36
41
let canvas = this .$refs [" canvas" ];
42
+ let additionalModules = [
43
+ customTranslateModule,
44
+ minimapModule,
45
+ CliModule
46
+ ]
47
+ if (this .propertiesPanel === ' ' || this .propertiesPanel ) {
48
+ additionalModules = additionalModules .concat ([
49
+ propertiesPanelModule,
50
+ propertiesProviderModule
51
+ ])
52
+ }
37
53
this .modeler = new BpmnModeler ({
38
54
container: canvas,
39
- additionalModules: [
40
- customTranslateModule,
41
- minimapModule,
42
- CliModule
43
- ],
55
+ additionalModules: additionalModules,
44
56
cli: {
45
57
bindTo: ' cli'
46
58
},
47
59
moddleExtensions: {
48
60
camunda: camundaModdleDescriptor
61
+ },
62
+ propertiesPanel: {
63
+ parent: ' #properties-panel-parent'
49
64
}
50
65
});
51
- this .$nextTick (() => {
52
- this .openDiagram (this .diagramXML );
66
+ await this .openDiagram (this .diagramXML ).then (() => {
53
67
// 自动保存当前模型设计
54
68
let _self = this ;
55
- let exportArtifacts = debounce (function () {
56
-
57
- _self .saveSVG (function (err , svg ) {
58
- _self .svgImage = svg;
59
- });
60
-
61
- _self .saveDiagram (function (err , xml ) {
62
- _self .xmlData = xml;
63
- });
69
+ let exportArtifacts = debounce (async () => {
70
+ try {
71
+ const { svg } = await _self .modeler .saveSVG ();
72
+ _self .svgImage = svg;
73
+ } catch (err) {
74
+ console .log (` saveSVG error ${ err} ` )
75
+ }
76
+ try {
77
+ const { xml } = await _self .modeler .saveXML ({ format: true })
78
+ _self .xmlData = xml;
79
+ } catch (error) {
80
+ console .log (` saveXML error ${ err} ` )
81
+ }
64
82
let modelInfo = {
65
83
xmlData: _self .xmlData ,
66
84
svgImage: _self .svgImage
@@ -69,7 +87,7 @@ export default {
69
87
}, 10 );
70
88
this .modeler .on (" commandStack.changed" , exportArtifacts);
71
89
exportArtifacts ()
72
- })
90
+ });
73
91
},
74
92
methods: {
75
93
async replace (data ) {
@@ -121,15 +139,15 @@ export default {
121
139
})
122
140
},
123
141
openDiagram (xml ) {
124
- return new Promise ((resolve , reject ) => {
142
+ return new Promise (async (resolve , reject ) => {
125
143
if (xml) {
126
- this . modeler . importXML (xml, function ( err ) {
127
- if (err) {
128
- reject (err );
129
- } else {
130
- resolve ()
131
- }
132
- });
144
+ try {
145
+ const result = await this . modeler . importXML (xml);
146
+ console . log ( ' rendered ' );
147
+ resolve ()
148
+ } catch (err) {
149
+ reject (err);
150
+ }
133
151
this .xmlData = xml;
134
152
} else {
135
153
this .modeler .createDiagram ();
@@ -164,11 +182,7 @@ export default {
164
182
saveSVG (done ) {
165
183
this .modeler .saveSVG (done);
166
184
},
167
- saveDiagram (done ) {
168
- this .modeler .saveXML ({ format: true }, function (err , xml ) {
169
- done (err, xml);
170
- });
171
- },
185
+ // todo
172
186
focusOut (event ) {
173
187
let layerBase = document .querySelector (' .layer-base' )
174
188
let zoom = layerBase .parentNode .getBoundingClientRect ();
@@ -184,19 +198,70 @@ export default {
184
198
};
185
199
</script >
186
200
<style lang="less" scoped>
201
+ // @import "../../styles/app.less";
187
202
@import " ~bpmn-js/dist/assets/diagram-js.css" ;
188
203
@import " ~bpmn-js/dist/assets/bpmn-font/css/bpmn.css" ;
189
204
@import " ~diagram-js-minimap/assets/diagram-js-minimap.css" ;
205
+ @import ' ~bpmn-js-properties-panel/dist/assets/bpmn-js-properties-panel.css' ;
190
206
.containers {
191
207
position : absolute ;
192
208
background-color : #ffffff ;
193
209
top :0 ;
194
210
left : 0 ;
195
211
width : 100% ;
196
212
height : 100% ;
213
+ // position: relative;
214
+ // width: 100%;
215
+ // height: 100%;
197
216
}
198
217
.canvas {
218
+ // position: absolute;
219
+ // top: 0;
220
+ // left: 0;
221
+ // right: 0;
222
+ // bottom: 0;
199
223
width : 100% ;
200
224
height : 100% ;
201
225
}
226
+ .properties-panel-parent {
227
+ font-family : " Helvetica Neue" , Helvetica , Arial , sans-serif ;
228
+ font-size : 12px ;
229
+ position : absolute ;
230
+ top : 0 ;
231
+ bottom : 0 ;
232
+ right : 0 ;
233
+ // width: 20%;
234
+ width : 260px ;
235
+ z-index : 10 ;
236
+ border-left : 1px solid #ccc ;
237
+ overflow : auto ;
238
+ & :empty {
239
+ display : none ;
240
+ }
241
+ > .djs-properties-panel {
242
+ padding-bottom : 70px ;
243
+ min-height :100% ;
244
+ }
245
+ / deep/ .bpp-textfield input {
246
+ padding-right : 0 ;
247
+ }
248
+ / deep/ .bpp-properties-panel {
249
+ .bpp-properties {
250
+ .bpp-properties-header {
251
+ .label {
252
+ word-wrap : break-word ;
253
+ }
254
+ }
255
+ }
256
+ }
257
+ / deep/ .bpp-properties-panel [type= text ], / deep/ .bpp-properties-panel textarea {
258
+ width : calc (100% - 6px )
259
+ }
260
+ / deep/ .bpp-properties-panel [contenteditable] {
261
+ width : calc (100% - 12px )
262
+ }
263
+ / deep/ .bpp-table-row > label .bpp-table-row-columns-2.bpp-table-row-removable , / deep/ .bpp-table-row > input .bpp-table-row-columns-2.bpp-table-row-removable {
264
+ width : calc (50% - 12px );
265
+ }
266
+ }
202
267
</style >
0 commit comments