Skip to content

Commit 9160b3a

Browse files
committed
add propertiesPanel, upgrade dependencies
1 parent 194b6f9 commit 9160b3a

File tree

7 files changed

+1738
-1002
lines changed

7 files changed

+1738
-1002
lines changed

examples/App.vue

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<template>
22
<div id="app">
3-
<BpmnModeler ref='modeler' v-model="modeler" :diagramXML="propXmlData"></BpmnModeler>
3+
<BpmnModeler ref='modeler' v-model="modeler" :diagramXML="propXmlData" propertiesPanel></BpmnModeler>
44
<!-- <BpmnViewer :xmlData="viewData" :taskData="propTaskList"></BpmnViewer> -->
5-
<button @click="addTask" v-if="$refs.modeler">add task</button>
5+
<button @click="addTask" class="button" v-if="$refs.modeler">add task</button>
66
</div>
77
</template>
88
<script>
@@ -81,7 +81,7 @@ export default {
8181
}
8282
</script>
8383
<style lang="less">
84-
button {
84+
.button {
8585
position: absolute;
8686
right:15px;
8787
bottom:100px;

examples/view.bpmn

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@
100100
<bpmn:completionCondition xsi:type="bpmn:tFormalExpression" id="completionCondition_5afbd373-1e87-4f21-950e-58cc1a3edc28">${nrOfCompletedInstances/nrOfInstances &gt;= 1.0}</bpmn:completionCondition>
101101
</bpmn:multiInstanceLoopCharacteristics>
102102
</bpmn:userTask>
103-
<bpmn:sequenceFlow id="SequenceFlow_0ss8ypj" sourceRef="UserTask_0hkfnx2" targetRef="UserTask_1pvvtgn" />
103+
<bpmn:sequenceFlow id="SequenceFlow_0ss8ypj" sourceRef="UserTask_0hkfnx2" targetRef="UserTask_1pvvtgn"/>
104104
<bpmn:endEvent id="EndEvent_1xgys24" name="结束">
105105
<bpmn:incoming>SequenceFlow_0jm0ers</bpmn:incoming>
106106
</bpmn:endEvent>
@@ -175,7 +175,7 @@
175175
<bpmndi:BPMNShape id="UserTask_1pvvtgn_di" bpmnElement="UserTask_1pvvtgn">
176176
<dc:Bounds x="1000" y="80" width="100" height="80" />
177177
</bpmndi:BPMNShape>
178-
<bpmndi:BPMNEdge id="SequenceFlow_0ss8ypj_di" bpmnElement="SequenceFlow_0ss8ypj">
178+
<bpmndi:BPMNEdge id="SequenceFlow_0ss8ypj_di" bpmnElement="SequenceFlow_0ss8ypj" >
179179
<di:waypoint x="940" y="120" />
180180
<di:waypoint x="1000" y="120" />
181181
</bpmndi:BPMNEdge>

package.json

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,29 +11,30 @@
1111
},
1212
"main": "lib/vue-bpmn-modeler.umd.min.js",
1313
"dependencies": {
14-
"bpmn-js": "^6.3.4",
15-
"bpmn-js-cli": "^1.2.0",
14+
"bpmn-js": "^7.3.1",
15+
"bpmn-js-cli": "^2.0.0",
16+
"bpmn-js-properties-panel": "^0.37.2",
1617
"camunda-bpmn-moddle": "^4.4.0",
17-
"core-js": "^3.6.4",
18+
"core-js": "^3.6.5",
1819
"diagram-js-minimap": "^2.0.3",
1920
"inherits": "^2.0.4",
20-
"vue": "^2.6.11"
21+
"vue": "^2.6.12"
2122
},
2223
"devDependencies": {
23-
"@vue/cli-plugin-babel": "~4.2.3",
24-
"@vue/cli-plugin-eslint": "~4.2.3",
25-
"@vue/cli-service": "~4.2.3",
26-
"@vue/eslint-config-prettier": "^5.0.0",
27-
"babel-eslint": "^10.0.1",
28-
"eslint": "^5.16.0",
29-
"eslint-plugin-prettier": "^3.1.0",
30-
"eslint-plugin-vue": "^5.0.0",
24+
"@vue/cli-plugin-babel": "^4.5.8",
25+
"@vue/cli-plugin-eslint": "^4.5.8",
26+
"@vue/cli-service": "^4.5.8",
27+
"@vue/eslint-config-prettier": "^6.0.0",
28+
"babel-eslint": "^10.1.0",
29+
"eslint": "^6.7.2",
30+
"eslint-plugin-prettier": "^3.1.3",
31+
"eslint-plugin-vue": "^6.2.2",
3132
"execa": "^4.0.0",
3233
"less": "^3.0.4",
3334
"less-loader": "^5.0.0",
34-
"prettier": "^1.18.2",
35+
"prettier": "^1.19.1",
3536
"raw-loader": "^3.1.0",
36-
"vue-template-compiler": "^2.6.11"
37+
"vue-template-compiler": "^2.6.12"
3738
},
3839
"eslintConfig": {
3940
"root": true,

packages/BpmnModeler/src/BpmnModeler.vue

Lines changed: 100 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
<template>
2-
<div ref="container" class="containers" @mousemove="focusOut">
2+
<div ref="container" class="containers">
33
<div ref="canvas" class="canvas"></div>
4+
<div id="properties-panel-parent" class="properties-panel-parent"></div>
45
</div>
56
</template>
67

78
<script>
89
import BpmnModeler from "../../CustomModeler";
910
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';
1114
import minimapModule from "diagram-js-minimap";
1215
import CliModule from 'bpmn-js-cli';
1316
import { debounce } from "min-dash";
@@ -17,50 +20,65 @@ let customTranslateModule = {
1720
export default {
1821
name: "BpmnModeler",
1922
props: {
20-
diagramXML: String
23+
diagramXML: String,
24+
propertiesPanel: null
2125
},
2226
data() {
2327
return {
2428
modeler: {},
2529
xmlData: "",
2630
svgImage: "",
27-
isSvg: false
31+
isSvg: false,
2832
};
2933
},
3034
watch: {
3135
diagramXML(val) {
3236
this.openDiagram(val)
3337
}
3438
},
35-
mounted() {
39+
async mounted() {
40+
console.log(this.propertiesPanel === '')
3641
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+
}
3753
this.modeler = new BpmnModeler({
3854
container: canvas,
39-
additionalModules: [
40-
customTranslateModule,
41-
minimapModule,
42-
CliModule
43-
],
55+
additionalModules: additionalModules,
4456
cli: {
4557
bindTo: 'cli'
4658
},
4759
moddleExtensions: {
4860
camunda: camundaModdleDescriptor
61+
},
62+
propertiesPanel: {
63+
parent: '#properties-panel-parent'
4964
}
5065
});
51-
this.$nextTick(() => {
52-
this.openDiagram(this.diagramXML);
66+
await this.openDiagram(this.diagramXML).then(() => {
5367
// 自动保存当前模型设计
5468
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+
}
6482
let modelInfo = {
6583
xmlData: _self.xmlData,
6684
svgImage: _self.svgImage
@@ -69,7 +87,7 @@ export default {
6987
}, 10);
7088
this.modeler.on("commandStack.changed", exportArtifacts);
7189
exportArtifacts()
72-
})
90+
});
7391
},
7492
methods: {
7593
async replace(data) {
@@ -121,15 +139,15 @@ export default {
121139
})
122140
},
123141
openDiagram(xml) {
124-
return new Promise((resolve, reject) => {
142+
return new Promise(async (resolve, reject) => {
125143
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+
}
133151
this.xmlData = xml;
134152
} else {
135153
this.modeler.createDiagram();
@@ -164,11 +182,7 @@ export default {
164182
saveSVG(done) {
165183
this.modeler.saveSVG(done);
166184
},
167-
saveDiagram(done) {
168-
this.modeler.saveXML({ format: true }, function(err, xml) {
169-
done(err, xml);
170-
});
171-
},
185+
// todo
172186
focusOut(event) {
173187
let layerBase = document.querySelector('.layer-base')
174188
let zoom = layerBase.parentNode.getBoundingClientRect();
@@ -184,19 +198,70 @@ export default {
184198
};
185199
</script>
186200
<style lang="less" scoped>
201+
// @import "../../styles/app.less";
187202
@import "~bpmn-js/dist/assets/diagram-js.css";
188203
@import "~bpmn-js/dist/assets/bpmn-font/css/bpmn.css";
189204
@import "~diagram-js-minimap/assets/diagram-js-minimap.css";
205+
@import '~bpmn-js-properties-panel/dist/assets/bpmn-js-properties-panel.css';
190206
.containers {
191207
position: absolute;
192208
background-color: #ffffff;
193209
top:0;
194210
left: 0;
195211
width: 100%;
196212
height: 100%;
213+
// position: relative;
214+
// width: 100%;
215+
// height: 100%;
197216
}
198217
.canvas {
218+
// position: absolute;
219+
// top: 0;
220+
// left: 0;
221+
// right: 0;
222+
// bottom: 0;
199223
width: 100%;
200224
height: 100%;
201225
}
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+
}
202267
</style>

0 commit comments

Comments
 (0)