|
@@ -2,7 +2,7 @@
|
2
|
2
|
* @Author: ysh
|
3
|
3
|
* @Date: 2025-05-07 11:01:39
|
4
|
4
|
* @LastEditors: Please set LastEditors
|
5
|
|
- * @LastEditTime: 2025-05-21 09:17:51
|
|
5
|
+ * @LastEditTime: 2025-05-21 14:10:34
|
6
|
6
|
-->
|
7
|
7
|
<template>
|
8
|
8
|
<div class="main" v-loading="loading">
|
|
@@ -158,6 +158,44 @@
|
158
|
158
|
<el-descriptions-item label="现场开支" :span="3">
|
159
|
159
|
<site-cost :siteList.sync="siteList" :taskName="taskName" @update:siteList="handleSiteChange"></site-cost>
|
160
|
160
|
</el-descriptions-item>
|
|
161
|
+ <el-descriptions-item label="合同总价" :span="3" v-hasRole="['leader', 'finance', 'nfinance', 'admin']">
|
|
162
|
+ <table border="1" style="width:100%;" v-if="contractList.length > 0">
|
|
163
|
+ <tr style="background-color:#f8f8f9">
|
|
164
|
+ <td>序号</td>
|
|
165
|
+ <td>合同名称</td>
|
|
166
|
+ <td>合同总价</td>
|
|
167
|
+ </tr>
|
|
168
|
+ <tr v-for="contract, index in contractList" :key="contract.contractId">
|
|
169
|
+ <td>{{ index + 1 }}</td>
|
|
170
|
+ <td>{{ contract.contractName }}</td>
|
|
171
|
+ <td>{{ contract.amount }}</td>
|
|
172
|
+ </tr>
|
|
173
|
+ </table>
|
|
174
|
+ <div v-else>
|
|
175
|
+ <div class="alert alert-warning">
|
|
176
|
+ 暂无合同信息
|
|
177
|
+ </div>
|
|
178
|
+ </div>
|
|
179
|
+ </el-descriptions-item>
|
|
180
|
+ <el-descriptions-item label="分包合同总价" :span="3" v-hasRole="['leader', 'finance', 'nfinance', 'admin']">
|
|
181
|
+ <table border="1" style="width:100%;" v-if="subContractList.length > 0">
|
|
182
|
+ <tr style="background-color:#f8f8f9">
|
|
183
|
+ <td>序号</td>
|
|
184
|
+ <td>分包合同名称</td>
|
|
185
|
+ <td>分包合同总价</td>
|
|
186
|
+ </tr>
|
|
187
|
+ <tr v-for="subContract, index in subContractList" :key="subContract.subContractId">
|
|
188
|
+ <td>{{ index + 1 }}</td>
|
|
189
|
+ <td>{{ subContract.subContractName }}</td>
|
|
190
|
+ <td>{{ subContract.subAmount }}</td>
|
|
191
|
+ </tr>
|
|
192
|
+ </table>
|
|
193
|
+ <div v-else>
|
|
194
|
+ <div class="alert alert-warning">
|
|
195
|
+ 暂无分包合同信息
|
|
196
|
+ </div>
|
|
197
|
+ </div>
|
|
198
|
+ </el-descriptions-item>
|
161
|
199
|
<el-descriptions-item label="经营相关" :span="3">
|
162
|
200
|
<business-cost :budgetForm.sync="budgetForm" :taskName="taskName"
|
163
|
201
|
@update:budgetForm="handleBusinessChange"></business-cost>
|
|
@@ -223,25 +261,6 @@
|
223
|
261
|
</tr>
|
224
|
262
|
</table>
|
225
|
263
|
</el-descriptions-item>
|
226
|
|
- <el-descriptions-item label="合同总价" :span="3" v-hasRole="['leader', 'finance', 'nfinance', 'admin']">
|
227
|
|
- <table border="1" style="width:100%;" v-if="contractList.length > 0">
|
228
|
|
- <tr style="background-color:#f8f8f9">
|
229
|
|
- <td>序号</td>
|
230
|
|
- <td>合同名称</td>
|
231
|
|
- <td>合同总价</td>
|
232
|
|
- </tr>
|
233
|
|
- <tr v-for="contract, index in contractList" :key="contract.contractId">
|
234
|
|
- <td>{{ index + 1 }}</td>
|
235
|
|
- <td>{{ contract.contractName }}</td>
|
236
|
|
- <td>{{ contract.amount }}</td>
|
237
|
|
- </tr>
|
238
|
|
- </table>
|
239
|
|
- <div v-else>
|
240
|
|
- <div class="alert alert-warning">
|
241
|
|
- 暂无合同信息
|
242
|
|
- </div>
|
243
|
|
- </div>
|
244
|
|
- </el-descriptions-item>
|
245
|
264
|
<el-descriptions-item label="核算说明" :span="3">
|
246
|
265
|
<div v-if="taskName == '核算编制' && !checkForm.checkComment" class="alert alert-warning"
|
247
|
266
|
style="padding: 10px; border: 1px solid #f0ad4e; background-color: #fcf8e3; color: #8a6d3b;">
|
|
@@ -349,7 +368,9 @@ import { getDevice } from "@/api/oa/device/device";
|
349
|
368
|
import { complete, getNextFlowNode } from "@/api/flowable/todo";
|
350
|
369
|
import { getUsersManageLeader, getUserByPost, getUsersViceDeptLeaderByDept } from "@/api/system/post";
|
351
|
370
|
import { listProjectContract } from "@/api/oa/contract/projectContract";
|
|
371
|
+import { listProjectSubcontract } from "@/api/oa/contract/projectSubcontract";
|
352
|
372
|
import { getContract } from "@/api/oa/contract/contract";
|
|
373
|
+import { getSubContract } from "@/api/oa/contract/subContract";
|
353
|
374
|
import InnerStaffCost from './components/InnerStaffCost.vue';
|
354
|
375
|
import OuterStaffCost from './components/OuterStaffCost.vue';
|
355
|
376
|
import CarCost from './components/CarCost.vue';
|
|
@@ -394,11 +415,13 @@ export default {
|
394
|
415
|
this.initBudgetForm();
|
395
|
416
|
this.initCheckForm();
|
396
|
417
|
this.getContractInfo();
|
|
418
|
+ this.getSubContractInfo();
|
397
|
419
|
});
|
398
|
420
|
} else {
|
399
|
421
|
this.initBudgetForm();
|
400
|
422
|
this.initCheckForm();
|
401
|
423
|
this.getContractInfo();
|
|
424
|
+ this.getSubContractInfo();
|
402
|
425
|
}
|
403
|
426
|
|
404
|
427
|
}
|
|
@@ -434,7 +457,7 @@ export default {
|
434
|
457
|
participateList: []
|
435
|
458
|
},
|
436
|
459
|
contractList: [],
|
437
|
|
- contract: {}
|
|
460
|
+ subContractList: [],
|
438
|
461
|
}
|
439
|
462
|
},
|
440
|
463
|
async created() {
|
|
@@ -445,6 +468,7 @@ export default {
|
445
|
468
|
this.initBudgetForm();
|
446
|
469
|
this.initCheckForm();
|
447
|
470
|
this.getContractInfo();
|
|
471
|
+ this.getSubContractInfo();
|
448
|
472
|
},
|
449
|
473
|
methods: {
|
450
|
474
|
initBudgetForm() {
|
|
@@ -642,6 +666,17 @@ export default {
|
642
|
666
|
}
|
643
|
667
|
})
|
644
|
668
|
},
|
|
669
|
+ getSubContractInfo() {
|
|
670
|
+ listProjectSubcontract({ projectId: this.row.projectId }).then(res => {
|
|
671
|
+ let subContractIds = res.rows;
|
|
672
|
+ this.subContractList = [];
|
|
673
|
+ for (let subContract of subContractIds) {
|
|
674
|
+ getSubContract(subContract.subContractId).then(response => {
|
|
675
|
+ this.subContractList.push(response.data);
|
|
676
|
+ })
|
|
677
|
+ }
|
|
678
|
+ })
|
|
679
|
+ },
|
645
|
680
|
async initActualInfo(project) {
|
646
|
681
|
let deviceIds = project.devices.split(',');
|
647
|
682
|
let carIds = project.cars.split(',');
|