b796307e by renchao@pashanhoo.com

Merge branch 'dev'

2 parents a8214033 820e4384
...@@ -117,9 +117,9 @@ ...@@ -117,9 +117,9 @@
117 .catch(() => { 117 .catch(() => {
118 this.$message({ 118 this.$message({
119 type: "info", 119 type: "info",
120 message: "已取消删除", 120 message: "已取消删除"
121 }); 121 })
122 }); 122 })
123 } 123 }
124 } 124 }
125 } 125 }
......
1 <!-- 1 <!--
2 * @Description: 2 * @Description:
3 * @Autor: renchao 3 * @Autor: renchao
4 * @LastEditTime: 2023-07-24 14:12:17 4 * @LastEditTime: 2023-07-25 09:27:43
5 --> 5 -->
6 <template> 6 <template>
7 <div class="from-clues"> 7 <div class="from-clues">
...@@ -122,10 +122,10 @@ ...@@ -122,10 +122,10 @@
122 this.$message({ 122 this.$message({
123 type: 'info', 123 type: 'info',
124 message: '已取消删除' 124 message: '已取消删除'
125 }); 125 })
126 }); 126 })
127 }, 127 }
128 }, 128 }
129 }; 129 };
130 </script> 130 </script>
131 <style scoped lang="scss"> 131 <style scoped lang="scss">
......
...@@ -76,7 +76,6 @@ ...@@ -76,7 +76,6 @@
76 * @author: renchao 76 * @author: renchao
77 */ 77 */
78 handleSubmit () { 78 handleSubmit () {
79 debugger
80 this.$refs['ruleForm'].validate((valid) => { 79 this.$refs['ruleForm'].validate((valid) => {
81 if (valid) { 80 if (valid) {
82 this.$parent.addSave(this.ruleForm); 81 this.$parent.addSave(this.ruleForm);
......
1 <!-- 1 <!--
2 * @Description: 页面提供插件下载 2 * @Description: 页面提供插件下载
3 * @Autor: renchao 3 * @Autor: renchao
4 * @LastEditTime: 2023-06-13 15:49:55 4 * @LastEditTime: 2023-07-25 09:25:56
5 --> 5 -->
6 <template> 6 <template>
7 <div class='downLoad'> 7 <div class='downLoad'>
...@@ -21,6 +21,10 @@ ...@@ -21,6 +21,10 @@
21 } 21 }
22 }, 22 },
23 methods: { 23 methods: {
24 /**
25 * @description:
26 * @author: renchao
27 */
24 handleDown () { 28 handleDown () {
25 let a = document.createElement('a') 29 let a = document.createElement('a')
26 a.style.display = 'none' 30 a.style.display = 'none'
......
1 <!-- 1 <!--
2 * @Description: 流程图 2 * @Description: 流程图
3 * @Autor: renchao 3 * @Autor: renchao
4 * @LastEditTime: 2023-07-19 16:04:34 4 * @LastEditTime: 2023-07-25 09:26:01
5 --> 5 -->
6 <template> 6 <template>
7 <div class='flowChart'> 7 <div class='flowChart'>
...@@ -9,7 +9,6 @@ ...@@ -9,7 +9,6 @@
9 </div> 9 </div>
10 </template> 10 </template>
11 <script> 11 <script>
12
13 export default { 12 export default {
14 props: { 13 props: {
15 formData: { 14 formData: {
......
1 <!-- 1 <!--
2 * @Description: 2 * @Description:
3 * @Autor: renchao 3 * @Autor: renchao
4 * @LastEditTime: 2023-07-24 10:15:01 4 * @LastEditTime: 2023-07-25 09:26:10
5 --> 5 -->
6 <template> 6 <template>
7 <div class="from-clues"> 7 <div class="from-clues">
...@@ -79,6 +79,10 @@ ...@@ -79,6 +79,10 @@
79 } 79 }
80 }) 80 })
81 }, 81 },
82 /**
83 * @description:
84 * @author: renchao
85 */
82 zslqClick () { 86 zslqClick () {
83 this.$popupDialog("不动产权证领取", "workflow/components/dialog/zslq", {}, '80%', true) 87 this.$popupDialog("不动产权证领取", "workflow/components/dialog/zslq", {}, '80%', true)
84 } 88 }
......
1 <!-- 1 <!--
2 * @Description: workFrame左侧菜单列表-普通 2 * @Description: workFrame左侧菜单列表-普通
3 * @Autor: renchao 3 * @Autor: renchao
4 * @LastEditTime: 2023-07-24 14:14:01 4 * @LastEditTime: 2023-07-25 14:14:04
5 --> 5 -->
6 <template> 6 <template>
7 <div class="leftmenu" :class="{ 'animation-map-drawer': isShowdrawer }"> 7 <div class="leftmenu" :class="{ 'animation-map-drawer': isShowdrawer }">
...@@ -177,9 +177,8 @@ ...@@ -177,9 +177,8 @@
177 * @author: renchao 177 * @author: renchao
178 */ 178 */
179 batchUnitClick () { 179 batchUnitClick () {
180 debugger
181 this.currentSelectProps.batchOperation = true; 180 this.currentSelectProps.batchOperation = true;
182 // this.activeIndex = "-1"; 181 this.activeIndex = "-1";
183 this.$parent.stepForm(0); 182 this.$parent.stepForm(0);
184 183
185 }, 184 },
...@@ -201,7 +200,7 @@ ...@@ -201,7 +200,7 @@
201 * @author: renchao 200 * @author: renchao
202 */ 201 */
203 unitClick (index) { 202 unitClick (index) {
204 if(this.unitData.length==0) return 203 if (this.unitData.length == 0) return
205 this.currentSelectProps = this.unitData[index]; 204 this.currentSelectProps = this.unitData[index];
206 this.currentSelectProps.batchOperation = false; 205 this.currentSelectProps.batchOperation = false;
207 this.activeIndex = index.toString(); 206 this.activeIndex = index.toString();
......
...@@ -10,8 +10,7 @@ ...@@ -10,8 +10,7 @@
10 v-show="!isLoading" 10 v-show="!isLoading"
11 ref="processCanvas" 11 ref="processCanvas"
12 class="process-canvas" 12 class="process-canvas"
13 style="height: 280px" 13 style="height: 280px" />
14 />
15 <!-- 自定义箭头样式,用于成功状态下流程连线箭头 --> 14 <!-- 自定义箭头样式,用于成功状态下流程连线箭头 -->
16 <defs ref="customSuccessDefs"> 15 <defs ref="customSuccessDefs">
17 <marker 16 <marker
...@@ -21,8 +20,7 @@ ...@@ -21,8 +20,7 @@
21 ref-y="10" 20 ref-y="10"
22 marker-width="10" 21 marker-width="10"
23 marker-height="10" 22 marker-height="10"
24 orient="auto" 23 orient="auto">
25 >
26 <path 24 <path
27 class="success-arrow" 25 class="success-arrow"
28 d="M 1 5 L 11 10 L 1 15 Z" 26 d="M 1 5 L 11 10 L 1 15 Z"
...@@ -30,8 +28,7 @@ ...@@ -30,8 +28,7 @@
30 stroke-width: 1px; 28 stroke-width: 1px;
31 stroke-linecap: round; 29 stroke-linecap: round;
32 stroke-dasharray: 10000, 1; 30 stroke-dasharray: 10000, 1;
33 " 31 " />
34 />
35 </marker> 32 </marker>
36 <marker 33 <marker
37 id="conditional-flow-marker-white-success" 34 id="conditional-flow-marker-white-success"
...@@ -40,8 +37,7 @@ ...@@ -40,8 +37,7 @@
40 ref-y="10" 37 ref-y="10"
41 marker-width="10" 38 marker-width="10"
42 marker-height="10" 39 marker-height="10"
43 orient="auto" 40 orient="auto">
44 >
45 <path 41 <path
46 class="success-conditional" 42 class="success-conditional"
47 d="M 0 10 L 8 6 L 16 10 L 8 14 Z" 43 d="M 0 10 L 8 6 L 16 10 L 8 14 Z"
...@@ -49,8 +45,7 @@ ...@@ -49,8 +45,7 @@
49 stroke-width: 1px; 45 stroke-width: 1px;
50 stroke-linecap: round; 46 stroke-linecap: round;
51 stroke-dasharray: 10000, 1; 47 stroke-dasharray: 10000, 1;
52 " 48 " />
53 />
54 </marker> 49 </marker>
55 </defs> 50 </defs>
56 <!-- 自定义箭头样式,用于失败状态下流程连线箭头 --> 51 <!-- 自定义箭头样式,用于失败状态下流程连线箭头 -->
...@@ -62,8 +57,7 @@ ...@@ -62,8 +57,7 @@
62 ref-y="10" 57 ref-y="10"
63 marker-width="10" 58 marker-width="10"
64 marker-height="10" 59 marker-height="10"
65 orient="auto" 60 orient="auto">
66 >
67 <path 61 <path
68 class="fail-arrow" 62 class="fail-arrow"
69 d="M 1 5 L 11 10 L 1 15 Z" 63 d="M 1 5 L 11 10 L 1 15 Z"
...@@ -71,8 +65,7 @@ ...@@ -71,8 +65,7 @@
71 stroke-width: 1px; 65 stroke-width: 1px;
72 stroke-linecap: round; 66 stroke-linecap: round;
73 stroke-dasharray: 10000, 1; 67 stroke-dasharray: 10000, 1;
74 " 68 " />
75 />
76 </marker> 69 </marker>
77 <marker 70 <marker
78 id="conditional-flow-marker-white-fail" 71 id="conditional-flow-marker-white-fail"
...@@ -81,8 +74,7 @@ ...@@ -81,8 +74,7 @@
81 ref-y="10" 74 ref-y="10"
82 marker-width="10" 75 marker-width="10"
83 marker-height="10" 76 marker-height="10"
84 orient="auto" 77 orient="auto">
85 >
86 <path 78 <path
87 class="fail-conditional" 79 class="fail-conditional"
88 d="M 0 10 L 8 6 L 16 10 L 8 14 Z" 80 d="M 0 10 L 8 6 L 16 10 L 8 14 Z"
...@@ -90,8 +82,7 @@ ...@@ -90,8 +82,7 @@
90 stroke-width: 1px; 82 stroke-width: 1px;
91 stroke-linecap: round; 83 stroke-linecap: round;
92 stroke-dasharray: 10000, 1; 84 stroke-dasharray: 10000, 1;
93 " 85 " />
94 />
95 </marker> 86 </marker>
96 </defs> 87 </defs>
97 88
...@@ -104,8 +95,7 @@ ...@@ -104,8 +95,7 @@
104 :plain="true" 95 :plain="true"
105 :disabled="defaultZoom <= 0.3" 96 :disabled="defaultZoom <= 0.3"
106 icon="el-icon-zoom-out" 97 icon="el-icon-zoom-out"
107 @click="processZoomOut()" 98 @click="processZoomOut()" />
108 />
109 <el-button size="medium" type="default" style="width: 90px">{{ 99 <el-button size="medium" type="default" style="width: 90px">{{
110 Math.floor(this.defaultZoom * 10 * 10) + "%" 100 Math.floor(this.defaultZoom * 10 * 10) + "%"
111 }}</el-button> 101 }}</el-button>
...@@ -115,14 +105,12 @@ ...@@ -115,14 +105,12 @@
115 :plain="true" 105 :plain="true"
116 :disabled="defaultZoom >= 3.9" 106 :disabled="defaultZoom >= 3.9"
117 icon="el-icon-zoom-in" 107 icon="el-icon-zoom-in"
118 @click="processZoomIn()" 108 @click="processZoomIn()" />
119 />
120 <el-button 109 <el-button
121 size="medium" 110 size="medium"
122 type="default" 111 type="default"
123 icon="el-icon-c-scale-to-original" 112 icon="el-icon-c-scale-to-original"
124 @click="processReZoom()" 113 @click="processReZoom()" />
125 />
126 <slot /> 114 <slot />
127 </el-button-group> 115 </el-button-group>
128 </el-row> 116 </el-row>
...@@ -135,8 +123,7 @@ ...@@ -135,8 +123,7 @@
135 v-for="item in selectOptions" 123 v-for="item in selectOptions"
136 :key="item.value" 124 :key="item.value"
137 :label="item.label" 125 :label="item.label"
138 :value="item.value" 126 :value="item.value">
139 >
140 </el-option> 127 </el-option>
141 </el-select> 128 </el-select>
142 <el-table 129 <el-table
...@@ -144,15 +131,13 @@ ...@@ -144,15 +131,13 @@
144 :data="taskCommentList" 131 :data="taskCommentList"
145 size="mini" 132 size="mini"
146 border 133 border
147 header-cell-class-name="table-header-gray" 134 header-cell-class-name="table-header-gray">
148 >
149 <el-table-column 135 <el-table-column
150 label="序号" 136 label="序号"
151 header-align="center" 137 header-align="center"
152 align="center" 138 align="center"
153 type="index" 139 type="index"
154 width="55px" 140 width="55px" />
155 />
156 <el-table-column label="流程状态" header-align="center" align="center"> 141 <el-table-column label="流程状态" header-align="center" align="center">
157 <template slot-scope="scope"> 142 <template slot-scope="scope">
158 <div v-if="scope.row.endTime">已完结</div> 143 <div v-if="scope.row.endTime">已完结</div>
...@@ -163,35 +148,30 @@ ...@@ -163,35 +148,30 @@
163 label="环节名称" 148 label="环节名称"
164 prop="name" 149 prop="name"
165 minWidth="100" 150 minWidth="100"
166 align="center" 151 align="center" />
167 />
168 <el-table-column 152 <el-table-column
169 label="办理人" 153 label="办理人"
170 prop="agent" 154 prop="agent"
171 minWidth="120" 155 minWidth="120"
172 align="center" 156 align="center" />
173 />
174 <el-table-column 157 <el-table-column
175 label="转入时间" 158 label="转入时间"
176 prop="createTime" 159 prop="createTime"
177 :formatter="formatDate" 160 :formatter="formatDate"
178 width="160" 161 width="160"
179 align="center" 162 align="center" />
180 />
181 <el-table-column 163 <el-table-column
182 label="认领时间" 164 label="认领时间"
183 prop="claimTime" 165 prop="claimTime"
184 :formatter="formatDate" 166 :formatter="formatDate"
185 width="160" 167 width="160"
186 align="center" 168 align="center" />
187 />
188 <el-table-column 169 <el-table-column
189 label="转出时间" 170 label="转出时间"
190 prop="endTime" 171 prop="endTime"
191 :formatter="formatDate" 172 :formatter="formatDate"
192 width="160" 173 width="160"
193 align="center" 174 align="center" />
194 />
195 <el-table-column label="操作方式" prop="controls" align="center" /> 175 <el-table-column label="操作方式" prop="controls" align="center" />
196 <el-table-column label="意见" prop="idea" align="center" /> 176 <el-table-column label="意见" prop="idea" align="center" />
197 </el-table> 177 </el-table>
...@@ -199,386 +179,386 @@ ...@@ -199,386 +179,386 @@
199 </div> 179 </div>
200 </template> 180 </template>
201 <script> 181 <script>
202 import "@/styles/package/theme/index.scss"; 182 import "@/styles/package/theme/index.scss";
203 import BpmnViewer from "bpmn-js/lib/Viewer"; 183 import BpmnViewer from "bpmn-js/lib/Viewer";
204 import MoveCanvasModule from "diagram-js/lib/navigation/movecanvas"; 184 import MoveCanvasModule from "diagram-js/lib/navigation/movecanvas";
205 export default { 185 export default {
206 props: { 186 props: {
207 formData: { 187 formData: {
208 type: Object, 188 type: Object,
209 default: {}, 189 default: {},
210 }, 190 },
211 },
212 data() {
213 return {
214 dlgTitle: undefined,
215 defaultZoom: 1,
216 // 是否正在加载流程图
217 isLoading: true,
218 bpmnViewer: undefined,
219 // 已完成流程元素
220 processNodeInfo: undefined,
221 // 当前任务id
222 selectTaskId: undefined,
223 // 任务节点审批记录
224 taskList: [],
225 taskCommentList: [],
226 // 已完成任务悬浮延迟Timer
227 hoverTimer: null,
228 // 下拉
229 selectValue: "",
230 selectOptions: [],
231 };
232 },
233 created() {
234 this.$nextTick(() => {
235 // 获取流程记录
236 this.getCommentList();
237 this.setProcessStatus(this.formData.finishedInfo);
238 this.importXML(this.formData.xml);
239 });
240 },
241 destroyed() {
242 this.clearViewer();
243 },
244 methods: {
245 /**
246 * @description: formatDate
247 * @param {*} row
248 * @param {*} column
249 * @author: renchao
250 */
251 formatDate(row, column) {
252 let data = row[column.property];
253 if (data == null) {
254 return null;
255 }
256 let dt = new Date(data);
257 return (
258 dt.getFullYear() +
259 "-" +
260 (dt.getMonth() + 1) +
261 "-" +
262 dt.getDate() +
263 " " +
264 dt.getHours() +
265 ":" +
266 dt.getMinutes() +
267 ":" +
268 dt.getSeconds()
269 );
270 },
271 /**
272 * @description: processReZoom
273 * @author: renchao
274 */
275 processReZoom() {
276 this.defaultZoom = 1;
277 this.bpmnViewer.get("canvas").zoom("fit-viewport", "auto");
278 },
279 /**
280 * @description: processZoomIn
281 * @param {*} zoomStep
282 * @author: renchao
283 */
284 processZoomIn(zoomStep = 0.1) {
285 const newZoom = Math.floor(this.defaultZoom * 100 + zoomStep * 100) / 100;
286 if (newZoom > 4) {
287 throw new Error(
288 "[Process Designer Warn ]: The zoom ratio cannot be greater than 4"
289 );
290 }
291 this.defaultZoom = newZoom;
292 this.bpmnViewer.get("canvas").zoom(this.defaultZoom);
293 },
294 /**
295 * @description: processZoomOut
296 * @param {*} zoomStep
297 * @author: renchao
298 */
299 processZoomOut(zoomStep = 0.1) {
300 const newZoom = Math.floor(this.defaultZoom * 100 - zoomStep * 100) / 100;
301 if (newZoom < 0.2) {
302 throw new Error(
303 "[Process Designer Warn ]: The zoom ratio cannot be scss than 0.2"
304 );
305 }
306 this.defaultZoom = newZoom;
307 this.bpmnViewer.get("canvas").zoom(this.defaultZoom);
308 },
309 /**
310 * @description: getOperationTagType
311 * @param {*} type
312 * @author: renchao
313 */
314 getOperationTagType(type) {
315 return "success";
316 },
317 // 流程图预览清空
318 /**
319 * @description: 流程图预览清空
320 * @param {*} e
321 * @author: renchao
322 */
323 clearViewer(a) {
324 if (this.$refs.processCanvas) {
325 this.$refs.processCanvas.innerHTML = "";
326 }
327 if (this.bpmnViewer) {
328 this.bpmnViewer.destroy();
329 }
330 this.bpmnViewer = null;
331 }, 191 },
332 // 添加自定义箭头 192 data () {
333 /** 193 return {
334 * @description: 添加自定义箭头 194 dlgTitle: undefined,
335 * @author: renchao 195 defaultZoom: 1,
336 */ 196 // 是否正在加载流程图
337 addCustomDefs() { 197 isLoading: true,
338 const canvas = this.bpmnViewer.get("canvas"); 198 bpmnViewer: undefined,
339 const svg = canvas._svg; 199 // 已完成流程元素
340 const customSuccessDefs = this.$refs.customSuccessDefs; 200 processNodeInfo: undefined,
341 const customFailDefs = this.$refs.customFailDefs; 201 // 当前任务id
342 svg.appendChild(customSuccessDefs); 202 selectTaskId: undefined,
343 svg.appendChild(customFailDefs); 203 // 任务节点审批记录
204 taskList: [],
205 taskCommentList: [],
206 // 已完成任务悬浮延迟Timer
207 hoverTimer: null,
208 // 下拉
209 selectValue: "",
210 selectOptions: [],
211 };
344 }, 212 },
345 // 任务悬浮弹窗 213 created () {
346 /** 214 this.$nextTick(() => {
347 * @description: 任务悬浮弹窗 215 // 获取流程记录
348 * @param {*} element 216 this.getCommentList();
349 * @author: renchao 217 this.setProcessStatus(this.formData.finishedInfo);
350 */ 218 this.importXML(this.formData.xml);
351 onSelectElement(element) {
352 this.selectTaskId = undefined;
353 this.dlgTitle = undefined;
354 let allfinishedTaskSet = [
355 ...this.processNodeInfo.finishedTaskSet,
356 ...this.processNodeInfo.unfinishedTaskSet,
357 ];
358 if (this.processNodeInfo == null || allfinishedTaskSet == null) return;
359 if (element == null || allfinishedTaskSet.indexOf(element.id) === -1) {
360 return;
361 }
362 this.selectTaskId = element.id;
363 this.selectValue = element.id;
364 this.dlgTitle = element.businessObject
365 ? element.businessObject.name
366 : undefined;
367 // 计算当前悬浮任务审批记录,如果记录为空不显示弹窗
368 this.taskCommentList = (this.taskList || []).filter((item) => {
369 return item.taskDefinitionKey === this.selectTaskId;
370 }); 219 });
371 if (this.taskCommentList.length == 0) {
372 this.taskCommentList = this.taskList;
373 }
374 }, 220 },
375 // 下拉列表切换 221 destroyed () {
376 /** 222 this.clearViewer();
377 * @description: 下拉列表切换
378 * @param {*} val
379 * @author: renchao
380 */
381 handleSelect(val) {
382 this.taskCommentList = (this.taskList || []).filter((item) => {
383 return item.taskDefinitionKey === val;
384 });
385 if (this.taskCommentList.length == 0) {
386 this.taskCommentList = this.taskList;
387 }
388 }, 223 },
389 // 显示流程图 224 methods: {
390 /** 225 /**
391 * @description: 显示流程图 226 * @description: formatDate
392 * @param {*} xml 227 * @param {*} row
393 * @author: renchao 228 * @param {*} column
394 */ 229 * @author: renchao
395 async importXML(xml) { 230 */
396 let xmlData = this.$x2js.xml2js(xml).definitions.process; 231 formatDate (row, column) {
397 this.selectOptions = xmlData.userTask.map((item) => { 232 let data = row[column.property];
398 return { value: item._id, label: item._name }; 233 if (data == null) {
399 }); 234 return null;
400 this.selectOptions = [
401 { value: xmlData.startEvent._id, label: "浏览记录" },
402 ...this.selectOptions,
403 ];
404 this.selectOptions = this.selectOptions
405 .map((item) => {
406 if (this.formData.finishedInfo.finishedTaskSet.includes(item.value)) {
407 return item;
408 }
409 if (
410 this.formData.finishedInfo.unfinishedTaskSet.includes(item.value)
411 ) {
412 return item;
413 }
414 })
415 .filter(Boolean);
416 this.selectValue = xmlData.startEvent._id;
417 this.clearViewer("a");
418 if (xml != null && xml !== "") {
419 try {
420 this.bpmnViewer = new BpmnViewer({
421 additionalModules: [
422 // 移动整个画布
423 MoveCanvasModule,
424 ],
425 container: this.$refs.processCanvas,
426 });
427 // 任务节点悬浮事件
428 this.bpmnViewer.on("element.click", ({ element }) => {
429 this.onSelectElement(element);
430 });
431 await this.bpmnViewer.importXML(xml);
432 this.isLoading = true;
433 this.addCustomDefs();
434 } catch (e) {
435 this.clearViewer("b");
436 } finally {
437 this.isLoading = false;
438 this.setProcessStatus(this.processNodeInfo);
439 this.$nextTick(() => {
440 this.processReZoom();
441 });
442 } 235 }
443 } 236 let dt = new Date(data);
444 }, 237 return (
445 // 获取流程记录 238 dt.getFullYear() +
446 /** 239 "-" +
447 * @description: 获取流程记录 240 (dt.getMonth() + 1) +
448 * @author: renchao 241 "-" +
449 */ 242 dt.getDate() +
450 getCommentList() { 243 " " +
451 this.formData.allCommentList.forEach(async (item, index) => { 244 dt.getHours() +
452 // item.comments.forEach(element => { 245 ":" +
453 // if(element.type=="COMPLETE"){ 246 dt.getMinutes() +
454 // this.formData.allCommentList[index].idea=element.message 247 ":" +
455 // this.formData.allCommentList[index].controls="完成" 248 dt.getSeconds()
456 // } 249 );
457 // }); 250 },
458 let type = item.comments[item.comments.length - 1].type; 251 /**
459 this.formData.allCommentList[index].idea = 252 * @description: processReZoom
460 item.comments[item.comments.length - 1].message; 253 * @author: renchao
461 // 操作方式 254 */
462 let controls = ""; 255 processReZoom () {
463 switch (type) { 256 this.defaultZoom = 1;
464 case "COMPLETE": 257 this.bpmnViewer.get("canvas").zoom("fit-viewport", "auto");
465 controls = "完成"; 258 },
466 break; 259 /**
467 case "CLAIM": 260 * @description: processZoomIn
468 controls = "完成"; 261 * @param {*} zoomStep
469 break; 262 * @author: renchao
470 case "ASSIGN": 263 */
471 controls = "转办"; 264 processZoomIn (zoomStep = 0.1) {
472 break; 265 const newZoom = Math.floor(this.defaultZoom * 100 + zoomStep * 100) / 100;
473 case "DELEGATE": 266 if (newZoom > 4) {
474 controls = "委派"; 267 throw new Error(
475 break; 268 "[Process Designer Warn ]: The zoom ratio cannot be greater than 4"
476 case "UNCLAIM": 269 );
477 controls = "取消认领";
478 break;
479 case "STOP":
480 controls = "终止";
481 break;
482 case "BACK":
483 controls = "退回";
484 break;
485 } 270 }
486 this.formData.allCommentList[index].controls = controls; 271 this.defaultZoom = newZoom;
487 this.formData.allCommentList[index].agent = item.assignee.name; 272 this.bpmnViewer.get("canvas").zoom(this.defaultZoom);
488 }); 273 },
489 this.formData.handlinglist.forEach(async (item, index) => { 274 /**
490 if (item.assignee.name) { 275 * @description: processZoomOut
491 this.formData.handlinglist[index].agent = item.assignee.name; 276 * @param {*} zoomStep
492 } else { 277 * @author: renchao
493 let str = ""; 278 */
494 item.countersign.forEach((item) => { 279 processZoomOut (zoomStep = 0.1) {
495 str += item.name + ","; 280 const newZoom = Math.floor(this.defaultZoom * 100 - zoomStep * 100) / 100;
496 }); 281 if (newZoom < 0.2) {
497 str = str.slice(0, -1); 282 throw new Error(
498 this.formData.allCommentList[index].agent = str; 283 "[Process Designer Warn ]: The zoom ratio cannot be scss than 0.2"
284 );
499 } 285 }
500 }); 286 this.defaultZoom = newZoom;
501 this.taskList = [ 287 this.bpmnViewer.get("canvas").zoom(this.defaultZoom);
502 ...this.formData.allCommentList, 288 },
503 ...this.formData.handlinglist, 289 /**
504 ]; 290 * @description: getOperationTagType
505 // this.taskList =this.formData.allCommentList; 291 * @param {*} type
506 // 处理数据之后赋值 292 * @author: renchao
507 this.taskCommentList = this.taskList; 293 */
508 }, 294 getOperationTagType (type) {
509 295 return "success";
510 // 设置流程图元素状态 296 },
511 /** 297 // 流程图预览清空
512 * @description: 设置流程图元素状态 298 /**
513 * @param {*} processNodeInfo 299 * @description: 流程图预览清空
514 * @author: renchao 300 * @param {*} e
515 */ 301 * @author: renchao
516 setProcessStatus(processNodeInfo) { 302 */
517 this.processNodeInfo = processNodeInfo; 303 clearViewer (a) {
518 if ( 304 if (this.$refs.processCanvas) {
519 this.isLoading || 305 this.$refs.processCanvas.innerHTML = "";
520 this.processNodeInfo == null || 306 }
521 this.bpmnViewer == null 307 if (this.bpmnViewer) {
522 ) 308 this.bpmnViewer.destroy();
523 return; 309 }
524 const { 310 this.bpmnViewer = null;
525 finishedTaskSet, 311 },
526 rejectedTaskSet, 312 // 添加自定义箭头
527 unfinishedTaskSet, 313 /**
528 finishedSequenceFlowSet, 314 * @description: 添加自定义箭头
529 } = this.processNodeInfo; 315 * @author: renchao
530 const canvas = this.bpmnViewer.get("canvas"); 316 */
531 const elementRegistry = this.bpmnViewer.get("elementRegistry"); 317 addCustomDefs () {
532 if (Array.isArray(finishedSequenceFlowSet)) { 318 const canvas = this.bpmnViewer.get("canvas");
533 finishedSequenceFlowSet.forEach((item) => { 319 const svg = canvas._svg;
534 if (item != null) { 320 const customSuccessDefs = this.$refs.customSuccessDefs;
535 canvas.addMarker(item, "success"); 321 const customFailDefs = this.$refs.customFailDefs;
536 const element = elementRegistry.get(item); 322 svg.appendChild(customSuccessDefs);
537 const conditionExpression = 323 svg.appendChild(customFailDefs);
538 element.businessObject.conditionExpression; 324 },
539 if (conditionExpression) { 325 // 任务悬浮弹窗
540 canvas.addMarker(item, "condition-expression"); 326 /**
327 * @description: 任务悬浮弹窗
328 * @param {*} element
329 * @author: renchao
330 */
331 onSelectElement (element) {
332 this.selectTaskId = undefined;
333 this.dlgTitle = undefined;
334 let allfinishedTaskSet = [
335 ...this.processNodeInfo.finishedTaskSet,
336 ...this.processNodeInfo.unfinishedTaskSet,
337 ];
338 if (this.processNodeInfo == null || allfinishedTaskSet == null) return;
339 if (element == null || allfinishedTaskSet.indexOf(element.id) === -1) {
340 return;
341 }
342 this.selectTaskId = element.id;
343 this.selectValue = element.id;
344 this.dlgTitle = element.businessObject
345 ? element.businessObject.name
346 : undefined;
347 // 计算当前悬浮任务审批记录,如果记录为空不显示弹窗
348 this.taskCommentList = (this.taskList || []).filter((item) => {
349 return item.taskDefinitionKey === this.selectTaskId;
350 });
351 if (this.taskCommentList.length == 0) {
352 this.taskCommentList = this.taskList;
353 }
354 },
355 // 下拉列表切换
356 /**
357 * @description: 下拉列表切换
358 * @param {*} val
359 * @author: renchao
360 */
361 handleSelect (val) {
362 this.taskCommentList = (this.taskList || []).filter((item) => {
363 return item.taskDefinitionKey === val;
364 });
365 if (this.taskCommentList.length == 0) {
366 this.taskCommentList = this.taskList;
367 }
368 },
369 // 显示流程图
370 /**
371 * @description: 显示流程图
372 * @param {*} xml
373 * @author: renchao
374 */
375 async importXML (xml) {
376 let xmlData = this.$x2js.xml2js(xml).definitions.process;
377 this.selectOptions = xmlData.userTask.map((item) => {
378 return { value: item._id, label: item._name };
379 });
380 this.selectOptions = [
381 { value: xmlData.startEvent._id, label: "浏览记录" },
382 ...this.selectOptions,
383 ];
384 this.selectOptions = this.selectOptions
385 .map((item) => {
386 if (this.formData.finishedInfo.finishedTaskSet.includes(item.value)) {
387 return item;
541 } 388 }
389 if (
390 this.formData.finishedInfo.unfinishedTaskSet.includes(item.value)
391 ) {
392 return item;
393 }
394 })
395 .filter(Boolean);
396 this.selectValue = xmlData.startEvent._id;
397 this.clearViewer("a");
398 if (xml != null && xml !== "") {
399 try {
400 this.bpmnViewer = new BpmnViewer({
401 additionalModules: [
402 // 移动整个画布
403 MoveCanvasModule,
404 ],
405 container: this.$refs.processCanvas,
406 });
407 // 任务节点悬浮事件
408 this.bpmnViewer.on("element.click", ({ element }) => {
409 this.onSelectElement(element);
410 });
411 await this.bpmnViewer.importXML(xml);
412 this.isLoading = true;
413 this.addCustomDefs();
414 } catch (e) {
415 this.clearViewer("b");
416 } finally {
417 this.isLoading = false;
418 this.setProcessStatus(this.processNodeInfo);
419 this.$nextTick(() => {
420 this.processReZoom();
421 });
542 } 422 }
423 }
424 },
425 // 获取流程记录
426 /**
427 * @description: 获取流程记录
428 * @author: renchao
429 */
430 getCommentList () {
431 this.formData.allCommentList.forEach(async (item, index) => {
432 // item.comments.forEach(element => {
433 // if(element.type=="COMPLETE"){
434 // this.formData.allCommentList[index].idea=element.message
435 // this.formData.allCommentList[index].controls="完成"
436 // }
437 // });
438 let type = item.comments[item.comments.length - 1].type;
439 this.formData.allCommentList[index].idea =
440 item.comments[item.comments.length - 1].message;
441 // 操作方式
442 let controls = "";
443 switch (type) {
444 case "COMPLETE":
445 controls = "完成";
446 break;
447 case "CLAIM":
448 controls = "完成";
449 break;
450 case "ASSIGN":
451 controls = "转办";
452 break;
453 case "DELEGATE":
454 controls = "委派";
455 break;
456 case "UNCLAIM":
457 controls = "取消认领";
458 break;
459 case "STOP":
460 controls = "终止";
461 break;
462 case "BACK":
463 controls = "退回";
464 break;
465 }
466 this.formData.allCommentList[index].controls = controls;
467 this.formData.allCommentList[index].agent = item.assignee.name;
543 }); 468 });
544 } 469 this.formData.handlinglist.forEach(async (item, index) => {
545 if (Array.isArray(finishedTaskSet)) { 470 if (item.assignee.name) {
546 finishedTaskSet.forEach((item) => canvas.addMarker(item, "success")); 471 this.formData.handlinglist[index].agent = item.assignee.name;
547 } 472 } else {
548 if (Array.isArray(unfinishedTaskSet)) { 473 let str = "";
549 unfinishedTaskSet.forEach((item) => canvas.addMarker(item, "primary")); 474 item.countersign.forEach((item) => {
550 } 475 str += item.name + ",";
551 if (Array.isArray(rejectedTaskSet)) { 476 });
552 rejectedTaskSet.forEach((item) => { 477 str = str.slice(0, -1);
553 if (item != null) { 478 this.formData.allCommentList[index].agent = str;
554 const element = elementRegistry.get(item);
555 if (element.type.includes("Task")) {
556 canvas.addMarker(item, "danger");
557 } else {
558 canvas.addMarker(item, "warning");
559 }
560 } 479 }
561 }); 480 });
562 } 481 this.taskList = [
482 ...this.formData.allCommentList,
483 ...this.formData.handlinglist,
484 ];
485 // this.taskList =this.formData.allCommentList;
486 // 处理数据之后赋值
487 this.taskCommentList = this.taskList;
488 },
489
490 // 设置流程图元素状态
491 /**
492 * @description: 设置流程图元素状态
493 * @param {*} processNodeInfo
494 * @author: renchao
495 */
496 setProcessStatus (processNodeInfo) {
497 this.processNodeInfo = processNodeInfo;
498 if (
499 this.isLoading ||
500 this.processNodeInfo == null ||
501 this.bpmnViewer == null
502 )
503 return;
504 const {
505 finishedTaskSet,
506 rejectedTaskSet,
507 unfinishedTaskSet,
508 finishedSequenceFlowSet,
509 } = this.processNodeInfo;
510 const canvas = this.bpmnViewer.get("canvas");
511 const elementRegistry = this.bpmnViewer.get("elementRegistry");
512 if (Array.isArray(finishedSequenceFlowSet)) {
513 finishedSequenceFlowSet.forEach((item) => {
514 if (item != null) {
515 canvas.addMarker(item, "success");
516 const element = elementRegistry.get(item);
517 const conditionExpression =
518 element.businessObject.conditionExpression;
519 if (conditionExpression) {
520 canvas.addMarker(item, "condition-expression");
521 }
522 }
523 });
524 }
525 if (Array.isArray(finishedTaskSet)) {
526 finishedTaskSet.forEach((item) => canvas.addMarker(item, "success"));
527 }
528 if (Array.isArray(unfinishedTaskSet)) {
529 unfinishedTaskSet.forEach((item) => canvas.addMarker(item, "primary"));
530 }
531 if (Array.isArray(rejectedTaskSet)) {
532 rejectedTaskSet.forEach((item) => {
533 if (item != null) {
534 const element = elementRegistry.get(item);
535 if (element.type.includes("Task")) {
536 canvas.addMarker(item, "danger");
537 } else {
538 canvas.addMarker(item, "warning");
539 }
540 }
541 });
542 }
543 },
563 }, 544 },
564 }, 545 };
565 };
566 </script> 546 </script>
567 <style scoped lang="scss"> 547 <style scoped lang="scss">
568 .information-list { 548 .information-list {
569 height: 220px; 549 height: 220px;
570 margin-top: 10px; 550 margin-top: 10px;
571 551
572 p { 552 p {
573 font-size: 16px; 553 font-size: 16px;
574 line-height: 24px; 554 line-height: 24px;
555 }
556 }
557 /deep/.bjs-powered-by {
558 display: none;
575 } 559 }
576 } 560 // /deep/.information-list {
577 /deep/.bjs-powered-by { 561 // height: 170px;
578 display: none; 562 // overflow: visible;
579 } 563 // }
580 // /deep/.information-list {
581 // height: 170px;
582 // overflow: visible;
583 // }
584 </style> 564 </style>
......
...@@ -158,6 +158,7 @@ ...@@ -158,6 +158,7 @@
158 this.fresh++; 158 this.fresh++;
159 //获取单元对应的所有表单信息 159 //获取单元对应的所有表单信息
160 this.tabList = res.result; 160 this.tabList = res.result;
161 console.log(res.result, 'res.result');
161 //默认加载第一个表单信息 162 //默认加载第一个表单信息
162 let arr = res.result.filter(item => item.defaultForm) 163 let arr = res.result.filter(item => item.defaultForm)
163 if (arr.length > 0) { 164 if (arr.length > 0) {
......
1 <!-- 1 <!--
2 * @Description: 2 * @Description:
3 * @Autor: renchao 3 * @Autor: renchao
4 * @LastEditTime: 2023-07-24 15:03:20 4 * @LastEditTime: 2023-07-25 09:21:53
5 --> 5 -->
6 <template> 6 <template>
7 <div class="from-clues"> 7 <div class="from-clues">
...@@ -264,10 +264,10 @@ ...@@ -264,10 +264,10 @@
264 } else { 264 } else {
265 this.$message.error("用户任务权限判断失败,请联系管理员"); 265 this.$message.error("用户任务权限判断失败,请联系管理员");
266 } 266 }
267 }); 267 })
268 }, 268 }
269 }, 269 }
270 }; 270 }
271 </script> 271 </script>
272 <style scoped lang="scss"> 272 <style scoped lang="scss">
273 @import "~@/styles/public.scss"; 273 @import "~@/styles/public.scss";
......
1 <!-- 1 <!--
2 * @Description: 受理信息 2 * @Description: 受理信息
3 * @Autor: renchao 3 * @Autor: renchao
4 * @LastEditTime: 2023-07-21 14:27:15 4 * @LastEditTime: 2023-07-25 09:22:40
5 --> 5 -->
6 <template> 6 <template>
7 <div class="slxx"> 7 <div class="slxx">
...@@ -332,7 +332,6 @@ ...@@ -332,7 +332,6 @@
332 upDateYwrxxList (val) { 332 upDateYwrxxList (val) {
333 this.ruleForm.ywrList = _.cloneDeep(val); 333 this.ruleForm.ywrList = _.cloneDeep(val);
334 }, 334 },
335
336 /** 335 /**
337 * @description: onSubmit 336 * @description: onSubmit
338 * @author: renchao 337 * @author: renchao
......
1 <!-- 1 <!--
2 * @Description: 2 * @Description:
3 * @Autor: renchao 3 * @Autor: renchao
4 * @LastEditTime: 2023-07-20 09:32:18 4 * @LastEditTime: 2023-07-25 09:23:05
5 --> 5 -->
6 <template> 6 <template>
7 <!-- 受理信息 --> 7 <!-- 受理信息 -->
...@@ -296,9 +296,9 @@ ...@@ -296,9 +296,9 @@
296 console.log(res); 296 console.log(res);
297 //this.ruleForm = { ...res.result, ...res.result.zdjbxxdatas, ...res.result.qlxxdatas, ...res.result.jsydsyqdatas } 297 //this.ruleForm = { ...res.result, ...res.result.zdjbxxdatas, ...res.result.qlxxdatas, ...res.result.jsydsyqdatas }
298 } 298 }
299 }); 299 })
300 }, 300 }
301 }, 301 }
302 }; 302 };
303 </script> 303 </script>
304 <style scoped lang='scss'> 304 <style scoped lang='scss'>
......
1 <!-- 1 <!--
2 * @Description: 2 * @Description:
3 * @Autor: renchao 3 * @Autor: renchao
4 * @LastEditTime: 2023-07-14 11:09:33 4 * @LastEditTime: 2023-07-25 09:23:20
5 --> 5 -->
6 <template> 6 <template>
7 <!-- 受理信息 --> 7 <!-- 受理信息 -->
...@@ -320,7 +320,10 @@ ...@@ -320,7 +320,10 @@
320 }) 320 })
321 } 321 }
322 } 322 }
323 console.log("this.ruleFormmmmmmmmm", this.ruleForm); 323 /**
324 * @description: saveData
325 * @author: renchao
326 */
324 saveData(this.ruleForm).then((res) => { 327 saveData(this.ruleForm).then((res) => {
325 if (res.code === 200) { 328 if (res.code === 200) {
326 this.$message({ 329 this.$message({
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
2 <!-- 2 <!--
3 * @Description: 3 * @Description:
4 * @Autor: renchao 4 * @Autor: renchao
5 * @LastEditTime: 2023-05-25 08:59:49 5 * @LastEditTime: 2023-07-25 09:23:42
6 --> 6 -->
7 <template> 7 <template>
8 <!-- 受理信息 --> 8 <!-- 受理信息 -->
...@@ -334,10 +334,10 @@ export default { ...@@ -334,10 +334,10 @@ export default {
334 { propsParam: this.propsParam }, 334 { propsParam: this.propsParam },
335 "80%", 335 "80%",
336 true 336 true
337 ); 337 )
338 }, 338 }
339 }, 339 }
340 }; 340 }
341 </script> 341 </script>
342 <style scoped lang="scss"> 342 <style scoped lang="scss">
343 @import "~@/styles/public.scss"; 343 @import "~@/styles/public.scss";
......
...@@ -352,8 +352,8 @@ ...@@ -352,8 +352,8 @@
352 }) 352 })
353 this.ruleForm.nydsyq.ydyhflmc = itemLx.dname; 353 this.ruleForm.nydsyq.ydyhflmc = itemLx.dname;
354 } 354 }
355 }, 355 }
356 }; 356 }
357 </script> 357 </script>
358 <style scoped lang='scss'> 358 <style scoped lang='scss'>
359 @import "~@/styles/public.scss"; 359 @import "~@/styles/public.scss";
......
1 <!-- 1 <!--
2 * @Description: 2 * @Description:
3 * @Autor: renchao 3 * @Autor: renchao
4 * @LastEditTime: 2023-07-20 09:30:51 4 * @LastEditTime: 2023-07-25 09:24:18
5 --> 5 -->
6 <template> 6 <template>
7 <!-- 受理信息 --> 7 <!-- 受理信息 -->
...@@ -472,6 +472,10 @@ ...@@ -472,6 +472,10 @@
472 }); 472 });
473 } 473 }
474 } 474 }
475 /**
476 * @description: saveData
477 * @author: renchao
478 */
475 saveData(this.ruleForm).then((res) => { 479 saveData(this.ruleForm).then((res) => {
476 if (res.code === 200) { 480 if (res.code === 200) {
477 this.$message({ 481 this.$message({
......
...@@ -244,9 +244,9 @@ ...@@ -244,9 +244,9 @@
244 }); 244 });
245 } 245 }
246 }); 246 });
247 }, 247 }
248 }, 248 }
249 }; 249 }
250 </script> 250 </script>
251 <style scoped lang='scss'> 251 <style scoped lang='scss'>
252 @import "~@/styles/public.scss"; 252 @import "~@/styles/public.scss";
......
1 <!-- 1 <!--
2 * @Description: 2 * @Description:
3 * @Autor: renchao 3 * @Autor: renchao
4 * @LastEditTime: 2023-07-24 15:03:46 4 * @LastEditTime: 2023-07-25 09:21:40
5 --> 5 -->
6 <template> 6 <template>
7 <div class="from-clues"> 7 <div class="from-clues">
...@@ -232,11 +232,9 @@ ...@@ -232,11 +232,9 @@
232 ); 232 );
233 window.open(href, `workFrameView${item.bsmSlsq}`); 233 window.open(href, `workFrameView${item.bsmSlsq}`);
234 } 234 }
235 235 }
236 236 }
237 }, 237 }
238 },
239 };
240 </script> 238 </script>
241 <style scoped lang="scss"> 239 <style scoped lang="scss">
242 @import "~@/styles/public.scss"; 240 @import "~@/styles/public.scss";
......
...@@ -391,7 +391,6 @@ ...@@ -391,7 +391,6 @@
391 <style scoped lang='scss'> 391 <style scoped lang='scss'>
392 @import "~@/styles/mixin.scss"; 392 @import "~@/styles/mixin.scss";
393 @import "./ywsq.scss"; 393 @import "./ywsq.scss";
394
395 /deep/.el-collapse-item__content { 394 /deep/.el-collapse-item__content {
396 padding-bottom: 0; 395 padding-bottom: 0;
397 } 396 }
......