@lambo-design-mobile/workflow-approve 1.0.0-beta.14 → 1.0.0-beta.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/package.json +3 -3
- package/src/ApprovalNodeCell.vue +0 -1
- package/src/FlowBaseList.vue +59 -16
- package/src/FlowNodeCell.vue +116 -0
- package/src/WorkflowDiagram.vue +5 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
|
+
## [1.0.0-beta.16](http://git.inspur.com/ecbh/lambo-design/lambo-design/-/compare/@lambo-design-mobile/workflow-approve@1.0.0-beta.15...@lambo-design-mobile/workflow-approve@1.0.0-beta.16) (2025-04-11)
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
### ✨ Features | 新功能
|
|
6
|
+
|
|
7
|
+
* **workflow-approve:** 优化批量审批功能 ([95989fc](http://git.inspur.com/ecbh/lambo-design/lambo-design/-/commit/95989fc8652a210321251f7191786e59fbbba966))
|
|
8
|
+
|
|
9
|
+
## [1.0.0-beta.15](http://git.inspur.com/ecbh/lambo-design/lambo-design/-/compare/@lambo-design-mobile/workflow-approve@1.0.0-beta.14...@lambo-design-mobile/workflow-approve@1.0.0-beta.15) (2025-03-19)
|
|
10
|
+
|
|
2
11
|
## [1.0.0-beta.14](http://git.inspur.com/ecbh/lambo-design/lambo-design/-/compare/@lambo-design-mobile/workflow-approve@1.0.0-beta.13...@lambo-design-mobile/workflow-approve@1.0.0-beta.14) (2025-03-18)
|
|
3
12
|
|
|
4
13
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lambo-design-mobile/workflow-approve",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.16",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"author": "lambo",
|
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
},
|
|
15
15
|
"devDependencies": {
|
|
16
16
|
"@lambo-design-mobile/lambo-scan-code": "^1.0.0-beta.1",
|
|
17
|
-
"@lambo-design-mobile/
|
|
18
|
-
"@lambo-design-mobile/
|
|
17
|
+
"@lambo-design-mobile/shared": "^1.0.0-beta.18",
|
|
18
|
+
"@lambo-design-mobile/upload-file": "^1.0.0-beta.13"
|
|
19
19
|
},
|
|
20
20
|
"scripts": {
|
|
21
21
|
"release": "pnpm release-beta && git push --follow-tags && pnpm re-publish",
|
package/src/ApprovalNodeCell.vue
CHANGED
|
@@ -17,7 +17,6 @@
|
|
|
17
17
|
style="font-size: 16px;font-weight: bold;padding:5px 0;">
|
|
18
18
|
{{ Array.isArray(item.auditName) ? item.auditName[0] : item.auditName }}
|
|
19
19
|
</div>
|
|
20
|
-
<div>{{ item.taskName }}</div>
|
|
21
20
|
<div>
|
|
22
21
|
<div v-if="foldingApprovalComments">
|
|
23
22
|
<span v-if="item.auditComment" @click="showAuditDetail(item.auditComment)">
|
package/src/FlowBaseList.vue
CHANGED
|
@@ -58,10 +58,10 @@
|
|
|
58
58
|
icon-size="18px">全选
|
|
59
59
|
</van-checkbox>
|
|
60
60
|
</div>
|
|
61
|
-
<div class="bar-item" @click="batchApproval(1)">批量驳回</div>
|
|
62
|
-
<div class="bar-item approve" @click="batchApproval(0)">批量通过</div>
|
|
61
|
+
<div v-if="showBatchReject" class="bar-item" @click="batchApproval(1)">批量驳回</div>
|
|
62
|
+
<div class="bar-item approve" :style="approveButtonStyle" @click="batchApproval(0)">批量通过</div>
|
|
63
63
|
</div>
|
|
64
|
-
<van-dialog v-model="batchApprovalDialog" :before-close="handleBeforeClose"
|
|
64
|
+
<van-dialog v-model="batchApprovalDialog" :before-close="handleBeforeClose"
|
|
65
65
|
:title="this.batchApprovalForm.approvalStatus===0 ?'批量通过':'批量驳回'"
|
|
66
66
|
show-cancel-button>
|
|
67
67
|
<van-field ref="auditOpinionField" v-model="batchApprovalForm.auditOpinion"
|
|
@@ -70,8 +70,9 @@
|
|
|
70
70
|
label="审批意见"
|
|
71
71
|
type="textarea"
|
|
72
72
|
maxlength="50"
|
|
73
|
-
placeholder="
|
|
73
|
+
:placeholder="this.batchApprovalForm.approvalStatus===0 ? '请输入审批意见(选填)' : '请输入审批意见(必填)'"
|
|
74
74
|
show-word-limit
|
|
75
|
+
:class="{'required-field': this.batchApprovalForm.approvalStatus===1}"
|
|
75
76
|
/>
|
|
76
77
|
</van-dialog>
|
|
77
78
|
<van-popup v-model="searchFilterShow" ref="searchPopup" position="top"
|
|
@@ -145,6 +146,11 @@ export default {
|
|
|
145
146
|
type: String,
|
|
146
147
|
default: ''
|
|
147
148
|
},
|
|
149
|
+
// 控制批量驳回按钮是否显示
|
|
150
|
+
showBatchReject: {
|
|
151
|
+
type: Boolean,
|
|
152
|
+
default: false
|
|
153
|
+
},
|
|
148
154
|
// 新增 4 个路由 name 参数
|
|
149
155
|
businessDetailsRouterName: {
|
|
150
156
|
type: String,
|
|
@@ -202,6 +208,16 @@ export default {
|
|
|
202
208
|
return {
|
|
203
209
|
backgroundImage: this.headerBackground ? `url(${this.headerBackground})` : `url(${this.todoBackImage})`
|
|
204
210
|
}
|
|
211
|
+
},
|
|
212
|
+
// 根据是否显示批量驳回按钮动态调整批量通过按钮样式
|
|
213
|
+
approveButtonStyle() {
|
|
214
|
+
if (!this.showBatchReject) {
|
|
215
|
+
return {
|
|
216
|
+
'flex': '2',
|
|
217
|
+
'margin': '0 20px 0 60px'
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
return {}
|
|
205
221
|
}
|
|
206
222
|
},
|
|
207
223
|
methods: {
|
|
@@ -282,6 +298,11 @@ export default {
|
|
|
282
298
|
Toast.fail(msg);
|
|
283
299
|
},
|
|
284
300
|
batchApproval(status) {
|
|
301
|
+
// 如果是驳回操作,但驳回按钮被禁用,则不执行操作
|
|
302
|
+
if (status === 1 && !this.showBatchReject) {
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
305
|
+
|
|
285
306
|
if (this.checkResult.length > 10) {
|
|
286
307
|
Toast.fail("最多同时审批十条记录");
|
|
287
308
|
return;
|
|
@@ -300,6 +321,22 @@ export default {
|
|
|
300
321
|
this.batchApprovalForm.approvalStatus = status;
|
|
301
322
|
this.batchApprovalDialog = true;
|
|
302
323
|
},
|
|
324
|
+
handleBeforeClose(action, done) {
|
|
325
|
+
if (action === 'confirm') {
|
|
326
|
+
// 驳回(status=1)时审批意见必填,通过(status=0)时审批意见可选
|
|
327
|
+
if (this.batchApprovalForm.approvalStatus === 1 && !this.batchApprovalForm.auditOpinion) {
|
|
328
|
+
Toast("驳回操作必须填写审批意见");
|
|
329
|
+
return done(false);
|
|
330
|
+
}
|
|
331
|
+
// 校验通过,关闭对话框,然后提交审批
|
|
332
|
+
done();
|
|
333
|
+
this.batchApprovalSubmit();
|
|
334
|
+
} else {
|
|
335
|
+
// 取消操作,直接关闭对话框
|
|
336
|
+
done();
|
|
337
|
+
this.batchApprovalForm.auditOpinion = '';
|
|
338
|
+
}
|
|
339
|
+
},
|
|
303
340
|
async batchApprovalSubmit() {
|
|
304
341
|
const flowIds = this.checkResult.join(",");
|
|
305
342
|
const status = this.batchApprovalForm.approvalStatus;
|
|
@@ -311,23 +348,16 @@ export default {
|
|
|
311
348
|
this.checkResult = [];
|
|
312
349
|
this.onSearch();
|
|
313
350
|
Toast.success("审批成功");
|
|
351
|
+
// 成功后清空审批意见
|
|
352
|
+
this.batchApprovalForm.auditOpinion = '';
|
|
353
|
+
} else {
|
|
354
|
+
Toast.fail(res.data.message || "审批失败");
|
|
314
355
|
}
|
|
315
356
|
} catch (error) {
|
|
316
357
|
console.error('Error submitting batch approval:', error);
|
|
317
358
|
Toast.fail("审批失败");
|
|
318
359
|
}
|
|
319
360
|
},
|
|
320
|
-
handleBeforeClose(action, done) {
|
|
321
|
-
if (action === 'confirm' && !this.batchApprovalForm.auditOpinion) {
|
|
322
|
-
Toast("审批信息不能为空");
|
|
323
|
-
return done(false);
|
|
324
|
-
}
|
|
325
|
-
if (action === 'confirm') {
|
|
326
|
-
this.batchApprovalSubmit();
|
|
327
|
-
}
|
|
328
|
-
done();
|
|
329
|
-
this.batchApprovalForm.auditOpinion = '';
|
|
330
|
-
},
|
|
331
361
|
batchSelect(checked) {
|
|
332
362
|
if (checked) {
|
|
333
363
|
this.$refs.todoListCard.checkAll();
|
|
@@ -518,4 +548,17 @@ export default {
|
|
|
518
548
|
background: linear-gradient(90deg, rgba(0, 150, 255, 0.8), rgba(22, 119, 255, 0.79));
|
|
519
549
|
}
|
|
520
550
|
|
|
521
|
-
|
|
551
|
+
.required-field {
|
|
552
|
+
border-color: red;
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
.required-field ::v-deep .van-field__label {
|
|
556
|
+
color: #f44;
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
.required-field ::v-deep .van-field__label::before {
|
|
560
|
+
content: '* ';
|
|
561
|
+
color: #f44;
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
</style>
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<van-cell center>
|
|
3
|
+
<template v-slot:icon>
|
|
4
|
+
<div
|
|
5
|
+
v-if="['通过','流程发起','跳转指定节点'].includes(getAuditStatus(item.auditResult).text)"
|
|
6
|
+
class="completed-icon">
|
|
7
|
+
<van-icon class="iconfont" class-prefix='icon' :name=getAuditStatus(item.auditResult).icon
|
|
8
|
+
size="28px" color="#fff"/>
|
|
9
|
+
</div>
|
|
10
|
+
<div v-else class="pending-icon">
|
|
11
|
+
<van-icon class="iconfont" class-prefix='icon' :name=getAuditStatus(item.auditResult).icon
|
|
12
|
+
size="28px" color="#fff"/>
|
|
13
|
+
</div>
|
|
14
|
+
</template>
|
|
15
|
+
<template v-slot:title>
|
|
16
|
+
<div :style="{ color: getAuditStatus(item.auditResult).color }"
|
|
17
|
+
style="font-size: 16px;font-weight: bold;padding:5px 0;">
|
|
18
|
+
{{ Array.isArray(item.auditName) ? item.auditName[0] : item.auditName }}
|
|
19
|
+
</div>
|
|
20
|
+
<div>{{ item.taskName }}</div>
|
|
21
|
+
<div>
|
|
22
|
+
<div v-if="foldingApprovalComments">
|
|
23
|
+
<span v-if="item.auditComment" @click="showAuditDetail(item.auditComment)">
|
|
24
|
+
审批意见 <van-icon name="comment-circle-o"/>
|
|
25
|
+
</span>
|
|
26
|
+
</div>
|
|
27
|
+
<div v-else >
|
|
28
|
+
<div v-if="item.auditComment">
|
|
29
|
+
意见: {{ item.auditComment }}
|
|
30
|
+
</div>
|
|
31
|
+
</div>
|
|
32
|
+
</div>
|
|
33
|
+
</template>
|
|
34
|
+
<template v-slot:label>
|
|
35
|
+
<div>{{ item.auditDate || item.createTime }}</div>
|
|
36
|
+
</template>
|
|
37
|
+
<template v-slot:default>
|
|
38
|
+
<span :style="{ color: getAuditStatus(item.auditResult).color }">{{
|
|
39
|
+
getAuditStatus(item.auditResult).text
|
|
40
|
+
}}</span>
|
|
41
|
+
</template>
|
|
42
|
+
</van-cell>
|
|
43
|
+
</template>
|
|
44
|
+
|
|
45
|
+
<script>
|
|
46
|
+
import {Dialog} from "vant";
|
|
47
|
+
import {getAuditStatus} from "./js/global";
|
|
48
|
+
|
|
49
|
+
export default {
|
|
50
|
+
name: "FlowNodeCell",
|
|
51
|
+
props: {
|
|
52
|
+
nodeDetail: {
|
|
53
|
+
type: Object,
|
|
54
|
+
required: true
|
|
55
|
+
},
|
|
56
|
+
foldingApprovalComments: {
|
|
57
|
+
type: Boolean,
|
|
58
|
+
default: false
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
data() {
|
|
62
|
+
return {
|
|
63
|
+
item: this.nodeDetail
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
methods: {
|
|
67
|
+
getAuditStatus,
|
|
68
|
+
showAuditDetail(auditComment) {
|
|
69
|
+
Dialog.alert({
|
|
70
|
+
title: '审批意见',
|
|
71
|
+
message: auditComment,
|
|
72
|
+
}).then(() => {
|
|
73
|
+
// on close
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
</script>
|
|
79
|
+
|
|
80
|
+
<style scoped>
|
|
81
|
+
.completed-icon {
|
|
82
|
+
width: 50px;
|
|
83
|
+
height: 50px;
|
|
84
|
+
background-clip: padding-box; /* 使背景不填充边框 */
|
|
85
|
+
|
|
86
|
+
border-radius: 50%;
|
|
87
|
+
margin-right: 1rem;
|
|
88
|
+
|
|
89
|
+
display: flex;
|
|
90
|
+
align-items: center;
|
|
91
|
+
justify-content: center;
|
|
92
|
+
|
|
93
|
+
background: linear-gradient(90deg, #0096FF, #1677FF);
|
|
94
|
+
border: 0.3rem solid rgb(229, 244, 255); /* 半透明边框,颜色和背景色相同 */
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.pending-icon {
|
|
98
|
+
width: 50px;
|
|
99
|
+
height: 50px;
|
|
100
|
+
background-clip: padding-box; /* 使背景不填充边框 */
|
|
101
|
+
|
|
102
|
+
border-radius: 50%;
|
|
103
|
+
margin-right: 1rem;
|
|
104
|
+
|
|
105
|
+
display: flex;
|
|
106
|
+
align-items: center;
|
|
107
|
+
justify-content: center;
|
|
108
|
+
|
|
109
|
+
background: linear-gradient(90deg, #FF7E00, #FFA200);
|
|
110
|
+
border: 0.4rem solid rgb(255, 245, 229); /* 半透明边框,颜色和背景色相同 */
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
::v-deep .van-cell__value {
|
|
114
|
+
flex: 0 auto;
|
|
115
|
+
}
|
|
116
|
+
</style>
|
package/src/WorkflowDiagram.vue
CHANGED
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
</div>
|
|
19
19
|
<div v-if="auditData.length > 0">
|
|
20
20
|
<div v-for="(item,index) in auditData" :key="index" class="record-item">
|
|
21
|
-
<
|
|
21
|
+
<flow-node-cell :node-detail="item"/>
|
|
22
22
|
</div>
|
|
23
23
|
</div>
|
|
24
24
|
<div v-else>
|
|
@@ -51,10 +51,11 @@
|
|
|
51
51
|
import Viewer from "bpmn-js/lib/Viewer";
|
|
52
52
|
import {getHisAudit, getPrintData, printData} from "../api";
|
|
53
53
|
import ApprovalNodeCell from "./ApprovalNodeCell.vue";
|
|
54
|
-
import { getAuditStatus } from './js/global';
|
|
54
|
+
import { getAuditStatus } from './js/global';
|
|
55
|
+
import FlowNodeCell from "./FlowNodeCell.vue"; // 根据路径修改
|
|
55
56
|
|
|
56
57
|
export default {
|
|
57
|
-
components: {ApprovalNodeCell},
|
|
58
|
+
components: {FlowNodeCell, ApprovalNodeCell},
|
|
58
59
|
props: {
|
|
59
60
|
procId: {
|
|
60
61
|
type: String,
|
|
@@ -319,4 +320,4 @@ export default {
|
|
|
319
320
|
flex: 0 auto;
|
|
320
321
|
}
|
|
321
322
|
|
|
322
|
-
</style>
|
|
323
|
+
</style>
|