@lambo-design-mobile/workflow-approve 1.0.0-beta.26 → 1.0.0-beta.28
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 +15 -0
- package/package.json +3 -3
- package/src/FlowApproval.vue +48 -8
- package/src/FlowBaseList.vue +8 -7
- package/src/SelectHandle.vue +51 -50
- package/src/TodoListCard.vue +140 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
|
+
## [1.0.0-beta.28](http://git.inspur.com/ecbh/lambo-design/lambo-design/-/compare/@lambo-design-mobile/workflow-approve@1.0.0-beta.27...@lambo-design-mobile/workflow-approve@1.0.0-beta.28) (2026-06-30)
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
### ✨ Features | 新功能
|
|
6
|
+
|
|
7
|
+
* **审批组件:** 待办列表增加转办按钮 ([b065d49](http://git.inspur.com/ecbh/lambo-design/lambo-design/-/commit/b065d492c7dbef054dff327d803f179a9b9421d6))
|
|
8
|
+
|
|
9
|
+
## [1.0.0-beta.27](http://git.inspur.com/ecbh/lambo-design/lambo-design/-/compare/@lambo-design-mobile/workflow-approve@1.0.0-beta.26...@lambo-design-mobile/workflow-approve@1.0.0-beta.27) (2026-06-08)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
### ✨ Features | 新功能
|
|
13
|
+
|
|
14
|
+
* **审批组件:** 调整默认审批意见 ([665c68b](http://git.inspur.com/ecbh/lambo-design/lambo-design/-/commit/665c68b120ac122e801ab69bd1fd7aea6b58bb99))
|
|
15
|
+
* **审批组件:** 增加允许驳回至转办人功能 ([064d884](http://git.inspur.com/ecbh/lambo-design/lambo-design/-/commit/064d8840510094c42d499e8f8e322df6b9519081))
|
|
16
|
+
|
|
2
17
|
## [1.0.0-beta.26](http://git.inspur.com/ecbh/lambo-design/lambo-design/-/compare/@lambo-design-mobile/workflow-approve@1.0.0-beta.25...@lambo-design-mobile/workflow-approve@1.0.0-beta.26) (2026-03-30)
|
|
3
18
|
|
|
4
19
|
|
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.28",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"author": "lambo",
|
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
"devDependencies": {
|
|
16
16
|
"standard-version": "^9.5.0",
|
|
17
17
|
"@lambo-design-mobile/lambo-scan-code": "^1.0.0-beta.1",
|
|
18
|
-
"@lambo-design-mobile/shared": "^1.0.0-beta.
|
|
19
|
-
"@lambo-design-mobile/upload-file": "^1.0.0-beta.
|
|
18
|
+
"@lambo-design-mobile/shared": "^1.0.0-beta.22",
|
|
19
|
+
"@lambo-design-mobile/upload-file": "^1.0.0-beta.18"
|
|
20
20
|
},
|
|
21
21
|
"scripts": {
|
|
22
22
|
"release": "pnpm release-beta && git push --follow-tags && pnpm re-publish",
|
package/src/FlowApproval.vue
CHANGED
|
@@ -285,11 +285,18 @@
|
|
|
285
285
|
<van-radio :name='index'/>
|
|
286
286
|
</div>
|
|
287
287
|
</div>
|
|
288
|
+
<div v-if="showRejectOption" class="reject-attribute">
|
|
289
|
+
<div :style="{ width: rejectAttributeTitleWidth }">驳回给:</div>
|
|
290
|
+
<van-radio-group v-model="rejectToTakeOver">
|
|
291
|
+
<van-radio name="original">原办理人</van-radio>
|
|
292
|
+
<van-radio name="actual">实际办理人</van-radio>
|
|
293
|
+
</van-radio-group>
|
|
294
|
+
</div>
|
|
288
295
|
<div v-if="showRejectToSelected" class="table-row">
|
|
289
|
-
<van-field @click="handleSelectRejectUser" label="
|
|
296
|
+
<van-field @click="handleSelectRejectUser" label="选择驳回人员:" :label-width="rejectAttributeTitleWidth" readonly placeholder="点击选择" :value="rejectUsers.name"></van-field>
|
|
290
297
|
</div>
|
|
291
298
|
<div v-if="showProcessControl" class="reject-attribute">
|
|
292
|
-
<div>驳回的节点通过后:</div>
|
|
299
|
+
<div :style="{ width: rejectAttributeTitleWidth }">驳回的节点通过后:</div>
|
|
293
300
|
<van-radio-group v-model="rejectAttribute">
|
|
294
301
|
<van-radio v-for="(item, index) in rejectAttributeList" :key="index" :name="item.type">{{ item.name }}</van-radio>
|
|
295
302
|
</van-radio-group>
|
|
@@ -300,13 +307,20 @@
|
|
|
300
307
|
<van-dialog v-model="rejectAttributesBoxShow" @confirm="processRejectNode()" @close="rejectAttributesDialogShowClose()"
|
|
301
308
|
title="驳回设置" show-cancel-button>
|
|
302
309
|
<div v-if="showProcessControl" class="reject-attribute">
|
|
303
|
-
<div>驳回的节点通过后:</div>
|
|
310
|
+
<div :style="{ width: rejectAttributeTitleWidth }">驳回的节点通过后:</div>
|
|
304
311
|
<van-radio-group v-model="rejectAttribute">
|
|
305
312
|
<van-radio v-for="(item, index) in rejectAttributeList" :key="index" :name="item.type">{{ item.name }}</van-radio>
|
|
306
313
|
</van-radio-group>
|
|
307
314
|
</div>
|
|
315
|
+
<div v-if="showRejectOption" class="reject-attribute">
|
|
316
|
+
<div :style="{ width: rejectAttributeTitleWidth }">驳回给:</div>
|
|
317
|
+
<van-radio-group v-model="rejectToTakeOver">
|
|
318
|
+
<van-radio name="original">原办理人</van-radio>
|
|
319
|
+
<van-radio name="actual">实际办理人</van-radio>
|
|
320
|
+
</van-radio-group>
|
|
321
|
+
</div>
|
|
308
322
|
<div v-if="showRejectToSelected" class="reject-attribute">
|
|
309
|
-
<van-field @click="handleSelectRejectUser" label="
|
|
323
|
+
<van-field @click="handleSelectRejectUser" label="选择驳回人员:" :label-width="rejectAttributeTitleWidth" readonly placeholder="点击选择" :value="rejectUsers.name"></van-field>
|
|
310
324
|
</div>
|
|
311
325
|
</van-dialog>
|
|
312
326
|
<van-popup v-if="selectRejectUserPopupShow" v-model="selectRejectUserPopupShow" closeable round position="bottom"
|
|
@@ -355,6 +369,18 @@ export default {
|
|
|
355
369
|
config() {
|
|
356
370
|
return config
|
|
357
371
|
},
|
|
372
|
+
rejectAttributeTitleWidth(){
|
|
373
|
+
if (this.showProcessControl) {
|
|
374
|
+
return '145px';
|
|
375
|
+
}
|
|
376
|
+
if (this.showRejectToSelected) {
|
|
377
|
+
return '100px';
|
|
378
|
+
}
|
|
379
|
+
if (this.showRejectOption) {
|
|
380
|
+
return '75px';
|
|
381
|
+
}
|
|
382
|
+
return 'auto';
|
|
383
|
+
},
|
|
358
384
|
showAuditOpinion(){
|
|
359
385
|
return this.handleButtons && (this.handleButtons.includes('auditOpinion') || this.handleButtons.includes('appointHandler') || this.handleButtons.includes('attachmentFile'))
|
|
360
386
|
},
|
|
@@ -575,7 +601,12 @@ export default {
|
|
|
575
601
|
foldingApprovalComments: {
|
|
576
602
|
type: Boolean,
|
|
577
603
|
default: false
|
|
578
|
-
}
|
|
604
|
+
},
|
|
605
|
+
//默认是否驳回给转办人
|
|
606
|
+
defaultRejectToTakeOver: {
|
|
607
|
+
type: Boolean,
|
|
608
|
+
default: false
|
|
609
|
+
},
|
|
579
610
|
},
|
|
580
611
|
data() {
|
|
581
612
|
return {
|
|
@@ -677,8 +708,10 @@ export default {
|
|
|
677
708
|
},
|
|
678
709
|
showRejectToSelected: false,
|
|
679
710
|
showProcessControl: false,
|
|
711
|
+
showRejectOption: false,
|
|
680
712
|
rejectAttributesBoxShow: false,
|
|
681
713
|
rejectAttribute: 'inSequence',
|
|
714
|
+
rejectToTakeOver: this.defaultRejectToTakeOver ? 'actual' : 'original',
|
|
682
715
|
rejectAttributeList: [],
|
|
683
716
|
taskAuditUserList: [],
|
|
684
717
|
rejectUserList: [],
|
|
@@ -761,7 +794,7 @@ export default {
|
|
|
761
794
|
this.handleButtons = this.handleButtons ? this.handleButtons : data.handleButtons ? data.handleButtons : ["processTrace", "auditHistory", "auditOpinion", "attachmentFile", "auditTo30", "auditTo70", "auditTo40", "auditTo90", "auditTo80", "auditTo82", "auditTo50"];
|
|
762
795
|
this.coSignVotingTask = this.handleButtons && this.handleButtons.includes('coSignVoting')
|
|
763
796
|
this.nextAssigneeSelectionType = data.nextAssigneeSelectionType;
|
|
764
|
-
this.passName = data.handleName;
|
|
797
|
+
this.passName = data.handleName === '审批' ? '通过' : data.handleName;
|
|
765
798
|
this.rejectName = data.rejectName;
|
|
766
799
|
if (data.hasOwnProperty('isSequential')) {
|
|
767
800
|
this.curNodeType = data.isSequential ? NodeType.SequentialMultiNode : NodeType.MultiNode;
|
|
@@ -1265,7 +1298,8 @@ export default {
|
|
|
1265
1298
|
self.showRejectToSelected = result.data.length === 1 && result.data[0].handleButtons?.includes('rejectToSelected')
|
|
1266
1299
|
self.nodeList = Array.isArray(result.data) ? result.data : []
|
|
1267
1300
|
self.radio = 0
|
|
1268
|
-
|
|
1301
|
+
self.showRejectOption = Array.isArray(result.data) && result.data.some(item => item.taskTakedOver && (item.taskTakedOver === true || item.taskTakedOver === 'true'))
|
|
1302
|
+
if ((self.showRejectToSelected || self.showRejectOption) && !self.handleButtons?.includes('rejectProcessControl')) {
|
|
1269
1303
|
self.rejectAttributesBoxShow = true
|
|
1270
1304
|
} else {
|
|
1271
1305
|
self.handleButtons && self.handleButtons.includes('rejectProcessControl') ? self.getProcessAttributes() : self.auditRequest(self.auditParams)
|
|
@@ -1306,7 +1340,7 @@ export default {
|
|
|
1306
1340
|
getProcessAttributes(self.procId, self.taskNode).then(resp => {
|
|
1307
1341
|
if (resp.data.code === '200') {
|
|
1308
1342
|
if ((self.auditParams.auditResult == '70' && !resp.data.data.jumpFirstNode) || (self.auditParams.auditResult == '40' && (resp.data.data.multiNode || resp.data.data.preNodeGateway))) {
|
|
1309
|
-
if (self.showRejectToSelected && self.nodeList.length > 0) {
|
|
1343
|
+
if ((self.showRejectToSelected && self.nodeList.length > 0) || self.showRejectOption) {
|
|
1310
1344
|
self.rejectAttributesBoxShow = true
|
|
1311
1345
|
return
|
|
1312
1346
|
}
|
|
@@ -1381,6 +1415,7 @@ export default {
|
|
|
1381
1415
|
if (self.rejectUsers.id !== 'all'){
|
|
1382
1416
|
auditParams.rejectUsers = self.rejectUsers.id
|
|
1383
1417
|
}
|
|
1418
|
+
auditParams.rejectToTakeOver = self.rejectToTakeOver && self.rejectToTakeOver != 'original'
|
|
1384
1419
|
self.showToastLoading('处理审批中');
|
|
1385
1420
|
//确认执行审批逻辑
|
|
1386
1421
|
audit(auditParams).then((resp) => { // 使用箭头函数
|
|
@@ -1463,6 +1498,8 @@ export default {
|
|
|
1463
1498
|
this.targetTaskNodeProcessControl = currentRow.processControl
|
|
1464
1499
|
this.rejectUsers = { name: '全部办理人', id: 'all' }
|
|
1465
1500
|
this.showRejectToSelected = currentRow.rejectToSelected
|
|
1501
|
+
this.rejectToTakeOver = this.defaultRejectToTakeOver ? 'actual' : 'original'
|
|
1502
|
+
this.showRejectOption = currentRow.taskTakedOver && (currentRow.taskTakedOver === true || currentRow.taskTakedOver === 'true')
|
|
1466
1503
|
},
|
|
1467
1504
|
processJumpSpecifiedNode() {
|
|
1468
1505
|
const self = this;
|
|
@@ -1511,6 +1548,8 @@ export default {
|
|
|
1511
1548
|
rejectAttributesDialogShowClose(){
|
|
1512
1549
|
//重置
|
|
1513
1550
|
this.showRejectToSelected = false
|
|
1551
|
+
this.showRejectOption = false
|
|
1552
|
+
this.rejectToTakeOver = this.defaultRejectToTakeOver ? 'actual' : 'original'
|
|
1514
1553
|
this.showProcessControl = false
|
|
1515
1554
|
this.rejectAttributesBoxShow = false
|
|
1516
1555
|
this.auditResult = '';
|
|
@@ -1820,6 +1859,7 @@ export default {
|
|
|
1820
1859
|
display: flex;
|
|
1821
1860
|
border-bottom: 1px solid #ebedf0;
|
|
1822
1861
|
font-size: 14px;
|
|
1862
|
+
padding-left: 5px;
|
|
1823
1863
|
}
|
|
1824
1864
|
|
|
1825
1865
|
.table-header > div,
|
package/src/FlowBaseList.vue
CHANGED
|
@@ -45,13 +45,14 @@
|
|
|
45
45
|
:finished="finished"
|
|
46
46
|
finished-text="没有更多了"
|
|
47
47
|
@load="handleLoad">
|
|
48
|
-
<TodoListCard ref="todoListCard" :selected-task="selectedTask" :todo-list="listData.rows" :result.sync="checkResult"
|
|
49
|
-
:business-approval-router-name="businessApprovalRouterName"
|
|
50
|
-
:business-details-router-name="businessDetailsRouterName"
|
|
51
|
-
:process-approval-router-name="processApprovalRouterName"
|
|
52
|
-
:process-details-router-name="processDetailsRouterName"
|
|
53
|
-
|
|
54
|
-
|
|
48
|
+
<TodoListCard ref="todoListCard" :selected-task="selectedTask" :todo-list="listData.rows" :result.sync="checkResult"
|
|
49
|
+
:business-approval-router-name="businessApprovalRouterName"
|
|
50
|
+
:business-details-router-name="businessDetailsRouterName"
|
|
51
|
+
:process-approval-router-name="processApprovalRouterName"
|
|
52
|
+
:process-details-router-name="processDetailsRouterName"
|
|
53
|
+
@refresh="resetAndLoadList"/>
|
|
54
|
+
</van-list>
|
|
55
|
+
</div>
|
|
55
56
|
<div v-if="checkResult.length > 0" class="custom-bottom-bar">
|
|
56
57
|
<div class="bar-item">
|
|
57
58
|
<van-checkbox v-model="batchSelectChecked" @change="batchSelect" style="justify-content: center;"
|
package/src/SelectHandle.vue
CHANGED
|
@@ -143,16 +143,17 @@ export default {
|
|
|
143
143
|
this.userRangeList = this.userList.map(item => { return{...item, organName: item.organName || item.deptName} })
|
|
144
144
|
this.personList.rows = this.userRangeList
|
|
145
145
|
this.personList.total = this.userRangeList.length
|
|
146
|
+
this.finished = true;
|
|
146
147
|
return
|
|
147
|
-
}
|
|
148
|
-
this.useUserTransferRange = false
|
|
149
|
-
this.personList.total = 0;
|
|
150
|
-
this.personList.rows = [];
|
|
151
|
-
this.finished = false;
|
|
152
|
-
this.loading = false;
|
|
153
|
-
if (this.orgList && this.orgList.length > 0){
|
|
154
|
-
this.organizeIdList = this.orgList.map(item => item.orgId)
|
|
155
|
-
this.orgTreeType = this.organTreeType;
|
|
148
|
+
}
|
|
149
|
+
this.useUserTransferRange = false
|
|
150
|
+
this.personList.total = 0;
|
|
151
|
+
this.personList.rows = [];
|
|
152
|
+
this.finished = false;
|
|
153
|
+
this.loading = false;
|
|
154
|
+
if (this.orgList && this.orgList.length > 0){
|
|
155
|
+
this.organizeIdList = this.orgList.map(item => item.orgId)
|
|
156
|
+
this.orgTreeType = this.organTreeType;
|
|
156
157
|
this.searchForm = {
|
|
157
158
|
...this.searchForm,
|
|
158
159
|
orgTreeType: this.organTreeType,
|
|
@@ -184,43 +185,43 @@ export default {
|
|
|
184
185
|
})
|
|
185
186
|
}
|
|
186
187
|
},
|
|
187
|
-
handleLoad() {
|
|
188
|
-
if (this.loading || this.finished) {
|
|
189
|
-
return
|
|
190
|
-
}
|
|
191
|
-
console.log("触发加载")
|
|
192
|
-
this.loading = true;
|
|
193
|
-
if (this.useUserTransferRange){
|
|
194
|
-
this.personList.rows = this.searchForm.userName ? this.userRangeList.
|
|
195
|
-
this.personList.total = this.personList.rows.length;
|
|
196
|
-
this.finished = true;
|
|
197
|
-
this.loading = false;
|
|
198
|
-
return
|
|
199
|
-
}
|
|
188
|
+
handleLoad() {
|
|
189
|
+
if (this.loading || this.finished) {
|
|
190
|
+
return
|
|
191
|
+
}
|
|
192
|
+
console.log("触发加载")
|
|
193
|
+
this.loading = true;
|
|
194
|
+
if (this.useUserTransferRange){
|
|
195
|
+
this.personList.rows = this.searchForm.userName ? this.userRangeList.filter(item => item.userName === this.searchForm.userName) : this.userRangeList
|
|
196
|
+
this.personList.total = this.personList.rows.length;
|
|
197
|
+
this.finished = true;
|
|
198
|
+
this.loading = false;
|
|
199
|
+
return
|
|
200
|
+
}
|
|
200
201
|
const offset = this.personList.rows.length;
|
|
201
202
|
const limit = 10;
|
|
202
203
|
|
|
203
|
-
getUserList(offset, limit, this.searchForm).then(res => {
|
|
204
|
-
const result = res.data;
|
|
205
|
-
if (result.code === "1") {
|
|
206
|
-
//返回的数据添加到 personList 中
|
|
207
|
-
const newRows = Array.isArray(result.data.rows) ? result.data.rows : [];
|
|
208
|
-
this.personList.rows = this.personList.rows.concat(newRows);
|
|
209
|
-
const total = Number(result.data.total);
|
|
210
|
-
if (!Number.isNaN(total)) {
|
|
211
|
-
this.personList.total = total;
|
|
212
|
-
}
|
|
213
|
-
const noMoreByPage = newRows.length < limit;
|
|
214
|
-
const noMoreByTotal = this.personList.total > 0 && this.personList.rows.length >= this.personList.total;
|
|
215
|
-
this.finished = noMoreByPage || noMoreByTotal;
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
this.loading = false;
|
|
219
|
-
|
|
220
|
-
}).catch(error => {
|
|
221
|
-
console.error('Error fetching data:', error);
|
|
222
|
-
this.loading = false;
|
|
223
|
-
});
|
|
204
|
+
getUserList(offset, limit, this.searchForm).then(res => {
|
|
205
|
+
const result = res.data;
|
|
206
|
+
if (result.code === "1") {
|
|
207
|
+
//返回的数据添加到 personList 中
|
|
208
|
+
const newRows = Array.isArray(result.data.rows) ? result.data.rows : [];
|
|
209
|
+
this.personList.rows = this.personList.rows.concat(newRows);
|
|
210
|
+
const total = Number(result.data.total);
|
|
211
|
+
if (!Number.isNaN(total)) {
|
|
212
|
+
this.personList.total = total;
|
|
213
|
+
}
|
|
214
|
+
const noMoreByPage = newRows.length < limit;
|
|
215
|
+
const noMoreByTotal = this.personList.total > 0 && this.personList.rows.length >= this.personList.total;
|
|
216
|
+
this.finished = noMoreByPage || noMoreByTotal;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
this.loading = false;
|
|
220
|
+
|
|
221
|
+
}).catch(error => {
|
|
222
|
+
console.error('Error fetching data:', error);
|
|
223
|
+
this.loading = false;
|
|
224
|
+
});
|
|
224
225
|
},
|
|
225
226
|
|
|
226
227
|
extractUsers(permScope) {
|
|
@@ -254,13 +255,13 @@ export default {
|
|
|
254
255
|
resetSearch() {
|
|
255
256
|
this.initSearch()
|
|
256
257
|
},
|
|
257
|
-
resetAndLoadPersonList() {
|
|
258
|
-
this.personList.total = 0;
|
|
259
|
-
this.personList.rows = [];
|
|
260
|
-
this.finished = false;
|
|
261
|
-
this.loading = false;
|
|
262
|
-
this.handleLoad();
|
|
263
|
-
},
|
|
258
|
+
resetAndLoadPersonList() {
|
|
259
|
+
this.personList.total = 0;
|
|
260
|
+
this.personList.rows = [];
|
|
261
|
+
this.finished = false;
|
|
262
|
+
this.loading = false;
|
|
263
|
+
this.handleLoad();
|
|
264
|
+
},
|
|
264
265
|
handleSelect(handle) {
|
|
265
266
|
if (handle === 'select') {
|
|
266
267
|
// 触发自定义事件 'selectHandle',并传递 this.checkResult
|
package/src/TodoListCard.vue
CHANGED
|
@@ -36,6 +36,9 @@
|
|
|
36
36
|
<van-cell v-if="selectedTask === 'pending'" :key="selectedTask" title=" ">
|
|
37
37
|
<template #right-icon>
|
|
38
38
|
<div class="button-group">
|
|
39
|
+
<van-button class="button" size="small" plain type="info" @click="derive(item)">
|
|
40
|
+
转办
|
|
41
|
+
</van-button>
|
|
39
42
|
<van-button class="button" size="small" plain type="info" @click="handleItem(item)">
|
|
40
43
|
{{ item.handleName || (item.handleType === '20' ? '审批' : '办理') }}
|
|
41
44
|
</van-button>
|
|
@@ -44,14 +47,22 @@
|
|
|
44
47
|
</van-cell>
|
|
45
48
|
</van-cell-group>
|
|
46
49
|
</van-checkbox-group>
|
|
50
|
+
<van-popup v-if="selectUserPopupShow" v-model="selectUserPopupShow" closeable round position="bottom" :style="{ height: '80%' }">
|
|
51
|
+
<div class="select-user-popup-body">
|
|
52
|
+
<select-handle title="指定办理人" :procType="selectUserPopupParams.procType" :organ-tree-type="selectUserPopupParams.organTreeType"
|
|
53
|
+
:org-list="selectUserPopupParams.orgList" :user-list="selectUserPopupParams.userList" @selectHandle="handleSelectResult"></select-handle>
|
|
54
|
+
</div>
|
|
55
|
+
</van-popup>
|
|
47
56
|
</div>
|
|
48
57
|
</template>
|
|
49
58
|
<script>
|
|
50
|
-
import {getNodeData} from "../api";
|
|
51
|
-
import {Notify} from "vant";
|
|
59
|
+
import {getNodeData, audit, getTransferRange} from "../api";
|
|
60
|
+
import {Notify, Toast} from "vant";
|
|
61
|
+
import SelectHandle from "./SelectHandle.vue";
|
|
52
62
|
|
|
53
63
|
export default {
|
|
54
64
|
name: 'TodoListCard',
|
|
65
|
+
components: {SelectHandle},
|
|
55
66
|
props: {
|
|
56
67
|
todoList: {},
|
|
57
68
|
selectedTask: {
|
|
@@ -85,6 +96,19 @@ export default {
|
|
|
85
96
|
localTodoList: this.todoList,
|
|
86
97
|
detailsVisible: {}, // 用于跟踪每个项目的详细内容是否可见
|
|
87
98
|
localResult: this.result, // 使用 localResult 来绑定 van-checkbox-group
|
|
99
|
+
selectUserPopupShow: false, // 转办弹框
|
|
100
|
+
selectUserPopupParams: {
|
|
101
|
+
procType: '',
|
|
102
|
+
class: '',
|
|
103
|
+
userList: [],
|
|
104
|
+
orgList: [],
|
|
105
|
+
organTreeType: '',
|
|
106
|
+
procId: '',
|
|
107
|
+
taskNode: '',
|
|
108
|
+
applyId: '',
|
|
109
|
+
taskId: '',
|
|
110
|
+
instanceId: '',
|
|
111
|
+
},
|
|
88
112
|
}
|
|
89
113
|
},
|
|
90
114
|
watch: {
|
|
@@ -182,10 +206,124 @@ export default {
|
|
|
182
206
|
toggleDetails(index) {
|
|
183
207
|
this.$set(this.detailsVisible, index, !this.detailsVisible[index]);
|
|
184
208
|
},
|
|
209
|
+
// 转办
|
|
210
|
+
async derive(item) {
|
|
211
|
+
this.resetTransferPopupData();
|
|
212
|
+
this.selectUserPopupParams.procType = item.procType
|
|
213
|
+
this.selectUserPopupParams.procId = item.procId
|
|
214
|
+
this.selectUserPopupParams.taskNode = item.taskNode
|
|
215
|
+
this.selectUserPopupParams.applyId = item.applyId
|
|
216
|
+
this.selectUserPopupParams.taskId = item.taskId
|
|
217
|
+
this.selectUserPopupParams.instanceId = item.procInstanceId || item.instanceId
|
|
218
|
+
const success = await this.fetchTransferRange();
|
|
219
|
+
if (success) {
|
|
220
|
+
this.selectUserPopupShow = true;
|
|
221
|
+
}
|
|
222
|
+
},
|
|
223
|
+
resetTransferPopupData() {
|
|
224
|
+
this.selectUserPopupParams = {
|
|
225
|
+
procType: '',
|
|
226
|
+
class: '',
|
|
227
|
+
userList: [],
|
|
228
|
+
orgList: [],
|
|
229
|
+
organTreeType: '',
|
|
230
|
+
procId: '',
|
|
231
|
+
taskNode: '',
|
|
232
|
+
applyId: '',
|
|
233
|
+
taskId: '',
|
|
234
|
+
instanceId: '',
|
|
235
|
+
};
|
|
236
|
+
},
|
|
237
|
+
async fetchTransferRange() {
|
|
238
|
+
try {
|
|
239
|
+
const params = {
|
|
240
|
+
procType: this.selectUserPopupParams.procType,
|
|
241
|
+
procId: this.selectUserPopupParams.procId,
|
|
242
|
+
taskNode: this.selectUserPopupParams.taskNode,
|
|
243
|
+
applyId: this.selectUserPopupParams.applyId,
|
|
244
|
+
taskId: this.selectUserPopupParams.taskId,
|
|
245
|
+
instanceId: this.selectUserPopupParams.instanceId,
|
|
246
|
+
actionType: 'auditTo82',
|
|
247
|
+
};
|
|
248
|
+
const res = await getTransferRange(params);
|
|
249
|
+
const result = res.data;
|
|
250
|
+
if (result.code == 200) {
|
|
251
|
+
this.selectUserPopupParams.organTreeType = result.data.organTreeType;
|
|
252
|
+
this.selectUserPopupParams.userList = result.data.userList;
|
|
253
|
+
this.selectUserPopupParams.orgList = result.data.orgList;
|
|
254
|
+
return true;
|
|
255
|
+
} else {
|
|
256
|
+
console.warn('获取选择人员范围失败,返回码:', result.code);
|
|
257
|
+
return false;
|
|
258
|
+
}
|
|
259
|
+
} catch (err) {
|
|
260
|
+
console.error('获取选择人员范围异常', err);
|
|
261
|
+
return false;
|
|
262
|
+
}
|
|
263
|
+
},
|
|
264
|
+
handleSelectResult(checkResult) {
|
|
265
|
+
const self = this
|
|
266
|
+
console.log('Selected result:', checkResult);
|
|
267
|
+
let auditParams = {
|
|
268
|
+
procId: self.selectUserPopupParams.procId,
|
|
269
|
+
applyId: self.selectUserPopupParams.applyId,
|
|
270
|
+
taskId: self.selectUserPopupParams.taskId,
|
|
271
|
+
auditResult: '82',
|
|
272
|
+
selectedUserId: checkResult[0].userId,
|
|
273
|
+
}
|
|
274
|
+
self.auditRequest(auditParams);
|
|
275
|
+
self.selectUserPopupShow = false;
|
|
276
|
+
},
|
|
277
|
+
auditRequest(auditParams) {
|
|
278
|
+
let self = this
|
|
279
|
+
Toast.loading({
|
|
280
|
+
duration: 0, // 持续展示 toast
|
|
281
|
+
forbidClick: true,
|
|
282
|
+
message: '处理中',
|
|
283
|
+
})
|
|
284
|
+
//确认执行审批逻辑
|
|
285
|
+
audit(auditParams).then((resp) => { // 使用箭头函数
|
|
286
|
+
let result = resp.data
|
|
287
|
+
if (result.code === '200') {
|
|
288
|
+
Toast.success(result.message);
|
|
289
|
+
} else {
|
|
290
|
+
Toast.fail(result.message);
|
|
291
|
+
}
|
|
292
|
+
this.selectUserPopupShow = false;
|
|
293
|
+
this.$emit('refresh');
|
|
294
|
+
})
|
|
295
|
+
},
|
|
185
296
|
}
|
|
186
297
|
}
|
|
187
298
|
</script>
|
|
188
299
|
<style scoped>
|
|
300
|
+
.select-user-popup-body {
|
|
301
|
+
height: 100%;
|
|
302
|
+
overflow: hidden;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
::v-deep .select-user-popup-body > * {
|
|
306
|
+
height: 100%;
|
|
307
|
+
display: flex;
|
|
308
|
+
flex-direction: column;
|
|
309
|
+
overflow: hidden;
|
|
310
|
+
min-height: 0;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
::v-deep .select-user-popup-body #headTitle {
|
|
314
|
+
flex: 0 0 auto;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
::v-deep .select-user-popup-body #listContent {
|
|
318
|
+
flex: 1;
|
|
319
|
+
min-height: 0;
|
|
320
|
+
overflow-y: auto;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
::v-deep .select-user-popup-body .custom-bottom-bar {
|
|
324
|
+
position: relative;
|
|
325
|
+
flex-shrink: 0;
|
|
326
|
+
}
|
|
189
327
|
|
|
190
328
|
.button-group {
|
|
191
329
|
display: flex;
|