|
@@ -2,7 +2,7 @@
|
2
|
2
|
* @Author: ysh
|
3
|
3
|
* @Date: 2024-05-10 15:31:57
|
4
|
4
|
* @LastEditors: Please set LastEditors
|
5
|
|
- * @LastEditTime: 2024-09-02 11:31:23
|
|
5
|
+ * @LastEditTime: 2024-09-03 16:08:11
|
6
|
6
|
-->
|
7
|
7
|
<template>
|
8
|
8
|
<div class="app-container">
|
|
@@ -11,78 +11,49 @@
|
11
|
11
|
<h2 class="text-center"><b>承接合同评审表</b></h2>
|
12
|
12
|
<el-divider></el-divider>
|
13
|
13
|
<el-form ref="form" :model="form" :rules="rules" label-width="130px" :disabled="formDisabled">
|
14
|
|
- <el-row :gutter="20">
|
15
|
|
- <el-col :span="12" :xs="24">
|
16
|
|
- <el-form-item label="投标项目名称:" prop="tenderId">
|
17
|
|
- <el-button type="primary" size="mini" @click="tbOpen = true"
|
18
|
|
- v-if="taskName == '合同拟稿'">选择投标项目</el-button>
|
19
|
|
- <el-descriptions border v-if="isSelect" style="margin-top: 10px;" :column="3" direction="vertical">
|
20
|
|
- <el-descriptions-item label="投标项目名称" label-class-name="my-label" :span="3">{{ chooseTender.projectName
|
21
|
|
- }}</el-descriptions-item>
|
22
|
|
- <el-descriptions-item label="项目来源" label-class-name="my-label">{{ getProjectSource(chooseTender)
|
23
|
|
- }}</el-descriptions-item>
|
24
|
|
- <el-descriptions-item label="联系人" label-class-name="my-label">{{ chooseTender.aPerson
|
25
|
|
- }}</el-descriptions-item>
|
26
|
|
- <el-descriptions-item label="联系电话" label-class-name="my-label">{{ chooseTender.aPhone
|
27
|
|
- }}</el-descriptions-item>
|
28
|
|
- </el-descriptions>
|
29
|
|
- </el-form-item>
|
30
|
|
- <el-form-item label="合同名称" prop="contractName">
|
31
|
|
- <el-input type="textarea" :rows="3" style="width: 100%;" v-model="form.contractName"
|
32
|
|
- placeholder="请输入合同名称" :disabled="taskName != '合同拟稿'"></el-input>
|
33
|
|
- </el-form-item>
|
34
|
|
- <el-form-item label="甲方单位" prop="partyAId">
|
35
|
|
- <el-select v-model="form.partyAId" filterable placeholder="请选择" disabled style="width: 100%;">
|
36
|
|
- <el-option v-for="item in partyAList" :key="item.value" :label="item.partyAName"
|
37
|
|
- :value="item.partyAId" :disabled="taskName != '合同拟稿'">
|
38
|
|
- </el-option>
|
39
|
|
- </el-select>
|
40
|
|
- <el-button type="primary" @click="partyAOpen = true" size="mini"
|
41
|
|
- v-if="taskName == '合同拟稿'">选择单位</el-button>
|
42
|
|
- </el-form-item>
|
43
|
|
- <el-form-item label="合同编码" prop="contractCode">
|
44
|
|
- <el-input style="width: 100%;" v-model="form.contractCode" placeholder="请输入合同编码"
|
45
|
|
- :disabled="taskName != '合同拟稿'"></el-input>
|
46
|
|
- </el-form-item>
|
47
|
|
- <el-form-item label="合同编号" prop="contractNumber">
|
48
|
|
- <el-input style="width: 100%;" v-model="form.contractNumber" placeholder="请输入合同编号"
|
49
|
|
- :disabled="taskName != '合同拟稿'"></el-input>
|
50
|
|
- </el-form-item>
|
51
|
|
- <el-form-item label="合同金额" prop="amount">
|
52
|
|
- <el-input style="width:100%;" v-model="form.amount" placeholder="请输入合同金额"
|
53
|
|
- :disabled="taskName != '合同拟稿'">
|
54
|
|
- <template slot="append">元</template>
|
55
|
|
- </el-input>
|
56
|
|
- </el-form-item>
|
57
|
|
- <el-form-item style="text-align: left;" label="履约保证金" prop="deposit">
|
58
|
|
- <el-input style="width:100%;" v-model="form.deposit" placeholder="请输入履约保证金"
|
59
|
|
- :disabled="taskName != '合同拟稿'">
|
60
|
|
- <template slot="append">元</template>
|
61
|
|
- </el-input>
|
62
|
|
- </el-form-item>
|
63
|
|
- </el-col>
|
64
|
|
-
|
65
|
|
- <el-col :span="12" :xs="24">
|
66
|
|
- <el-alert v-show="taskName == '合同拟稿'" title="后签合同的项目,必须选择关联项目;先签合同的项目不选关联项目" type="error">
|
67
|
|
- </el-alert>
|
68
|
|
- <el-form-item label="关联项目:" prop="projectIds">
|
69
|
|
- <el-button type="primary" size="mini" @click="open = true" v-if="taskName == '合同拟稿'">选择项目</el-button>
|
70
|
|
- </el-form-item>
|
71
|
|
- <el-table v-loading="projectloading" :data="chooseProjectList">
|
72
|
|
- <el-table-column label="序号" type="index" width="50px"></el-table-column>
|
73
|
|
- <el-table-column label="项目编号" align="center" prop="projectNumber"></el-table-column>
|
74
|
|
- <el-table-column label="项目名称" align="center" prop="projectName"></el-table-column>
|
75
|
|
- <el-table-column label="项目负责人" align="center" prop="projectLeaderUser.nickName"></el-table-column>
|
76
|
|
- <el-table-column label="承担部门" align="center" prop="undertakingDeptName"></el-table-column>
|
77
|
|
- <el-table-column label="操作" align="center">
|
78
|
|
- <template slot-scope="scope">
|
79
|
|
- <el-button type="text" icon="el-icon-view" @click="clickProjectFn(scope.row)">查看</el-button>
|
80
|
|
- </template>
|
81
|
|
- </el-table-column>
|
82
|
|
- </el-table>
|
83
|
|
- </el-col>
|
84
|
|
-
|
85
|
|
- </el-row>
|
|
14
|
+ <el-form-item label="投标项目名称:" prop="tenderId">
|
|
15
|
+ <el-button type="primary" size="mini" @click="tbOpen = true" v-if="taskName == '合同拟稿'">选择投标项目</el-button>
|
|
16
|
+ <el-descriptions border v-if="isSelect" style="margin-top: 10px;" :column="3" direction="vertical">
|
|
17
|
+ <el-descriptions-item label="投标项目名称" label-class-name="my-label" :span="3">{{ chooseTender.projectName
|
|
18
|
+ }}</el-descriptions-item>
|
|
19
|
+ <el-descriptions-item label="项目来源" label-class-name="my-label">{{ getProjectSource(chooseTender)
|
|
20
|
+ }}</el-descriptions-item>
|
|
21
|
+ <el-descriptions-item label="联系人" label-class-name="my-label">{{ chooseTender.aPerson
|
|
22
|
+ }}</el-descriptions-item>
|
|
23
|
+ <el-descriptions-item label="联系电话" label-class-name="my-label">{{ chooseTender.aPhone
|
|
24
|
+ }}</el-descriptions-item>
|
|
25
|
+ </el-descriptions>
|
|
26
|
+ </el-form-item>
|
|
27
|
+ <el-form-item label="合同名称" prop="contractName">
|
|
28
|
+ <el-input type="textarea" :rows="3" style="width: 100%;" v-model="form.contractName" placeholder="请输入合同名称"
|
|
29
|
+ :disabled="taskName != '合同拟稿'"></el-input>
|
|
30
|
+ </el-form-item>
|
|
31
|
+ <el-form-item label="甲方单位" prop="partyAId">
|
|
32
|
+ <el-select v-model="form.partyAId" filterable placeholder="请选择" disabled style="width: 100%;">
|
|
33
|
+ <el-option v-for="item in partyAList" :key="item.value" :label="item.partyAName" :value="item.partyAId"
|
|
34
|
+ :disabled="taskName != '合同拟稿'">
|
|
35
|
+ </el-option>
|
|
36
|
+ </el-select>
|
|
37
|
+ <el-button type="primary" @click="partyAOpen = true" size="mini" v-if="taskName == '合同拟稿'">选择单位</el-button>
|
|
38
|
+ </el-form-item>
|
|
39
|
+ <el-form-item label="合同编码" prop="contractCode">
|
|
40
|
+ <el-input style="width: 100%;" v-model="form.contractCode" placeholder="请输入合同编码"
|
|
41
|
+ :disabled="taskName != '合同拟稿'"></el-input>
|
|
42
|
+ </el-form-item>
|
|
43
|
+ <el-form-item label="合同编号" prop="contractNumber">
|
|
44
|
+ <el-input style="width: 100%;" v-model="form.contractNumber" placeholder="请输入合同编号"
|
|
45
|
+ :disabled="taskName != '合同拟稿'"></el-input>
|
|
46
|
+ </el-form-item>
|
|
47
|
+ <el-form-item label="合同金额" prop="amount">
|
|
48
|
+ <el-input style="width:100%;" v-model="form.amount" placeholder="请输入合同金额" :disabled="taskName != '合同拟稿'">
|
|
49
|
+ <template slot="append">元</template>
|
|
50
|
+ </el-input>
|
|
51
|
+ </el-form-item>
|
|
52
|
+ <el-form-item style="text-align: left;" label="履约保证金" prop="deposit">
|
|
53
|
+ <el-input style="width:100%;" v-model="form.deposit" placeholder="请输入履约保证金" :disabled="taskName != '合同拟稿'">
|
|
54
|
+ <template slot="append">元</template>
|
|
55
|
+ </el-input>
|
|
56
|
+ </el-form-item>
|
86
|
57
|
<el-form-item label="合同文件" prop="contractDocument">
|
87
|
58
|
<FileUpload v-if="taskName == '合同拟稿'" :disabled="taskName != '合同拟稿'" ref="contractFile" :limit="1"
|
88
|
59
|
:filePathName="'承接合同/合同文件'" :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf', 'rar', 'zip']"
|
|
@@ -98,6 +69,39 @@
|
98
|
69
|
</el-link>
|
99
|
70
|
</div>
|
100
|
71
|
</el-form-item>
|
|
72
|
+ <el-row>
|
|
73
|
+ <el-form-item label="关联项目" prop="projectIds">
|
|
74
|
+ <el-button type="primary" size="mini" @click="open = true" v-if="taskName == '合同拟稿'">选择项目</el-button>
|
|
75
|
+ <el-table v-loading="projectloading" border :data="chooseProjectList">
|
|
76
|
+ <el-table-column label="序号" type="index" width="50px"></el-table-column>
|
|
77
|
+ <el-table-column label="项目编号" align="center" prop="projectNumber"></el-table-column>
|
|
78
|
+ <el-table-column label="项目名称" align="center" prop="projectName"></el-table-column>
|
|
79
|
+ <el-table-column label="项目负责人" align="center" prop="projectLeaderUser.nickName"></el-table-column>
|
|
80
|
+ <el-table-column label="承担部门" align="center" prop="undertakingDeptName"></el-table-column>
|
|
81
|
+ <el-table-column label="操作" align="center">
|
|
82
|
+ <template slot-scope="scope">
|
|
83
|
+ <el-button type="text" icon="el-icon-view" @click="clickProjectFn(scope.row)">查看</el-button>
|
|
84
|
+ </template>
|
|
85
|
+ </el-table-column>
|
|
86
|
+ </el-table>
|
|
87
|
+ </el-form-item>
|
|
88
|
+ </el-row>
|
|
89
|
+ <el-form-item label="关联分包合同">
|
|
90
|
+ <el-button type="primary" size="mini" @click="subOpen = true" icon="el-icon-plus" v-if="taskName == '合同拟稿'">新增分包合同</el-button>
|
|
91
|
+ <el-table v-loading="subloading" border :data="connectSubContractList">
|
|
92
|
+ <el-table-column type="index" label="序号" width="55" align="center" />
|
|
93
|
+ <el-table-column label="合同名称" align="center" prop="subContractName" />
|
|
94
|
+ <el-table-column label="承接单位" align="center" prop="partner.partnerName" />
|
|
95
|
+ <el-table-column label="分包合同金额" align="center" prop="subAmount" width="120" />
|
|
96
|
+ <el-table-column label="操作" align="center">
|
|
97
|
+ <template slot-scope="scope">
|
|
98
|
+ <el-button type="text" icon="el-icon-view" @click="clickSubFn(scope.row)">查看</el-button>
|
|
99
|
+ <el-button type="text" style="color:#F56C6C;" icon="el-icon-delete" v-if="taskName == '合同拟稿'"
|
|
100
|
+ @click="handleDeleteSub(scope.$index, scope.row)">删除</el-button>
|
|
101
|
+ </template>
|
|
102
|
+ </el-table-column>
|
|
103
|
+ </el-table>
|
|
104
|
+ </el-form-item>
|
101
|
105
|
<!-- 表1:合同计划工作量 -->
|
102
|
106
|
<work-table ref="workTableRef" :contractId="taskForm.formId" :taskName="taskName"></work-table>
|
103
|
107
|
|
|
@@ -119,7 +123,6 @@
|
119
|
123
|
</el-col>
|
120
|
124
|
<el-col :span="6">
|
121
|
125
|
<el-form-item label="日期:" label-width="120px">
|
122
|
|
- <!-- <span> {{ form.draftTime ? form.draftTime : draftTime }} </span> -->
|
123
|
126
|
<el-date-picker v-model="form.draftTime" :disabled="taskName != '合同拟稿'" type="date"
|
124
|
127
|
value-format="yyyy-MM-dd" placeholder="选择日期">
|
125
|
128
|
</el-date-picker>
|
|
@@ -364,9 +367,15 @@
|
364
|
367
|
<el-dialog title="选择甲方单位" :visible.sync="partyAOpen" width="60%" append-to-body>
|
365
|
368
|
<choose-party-a @confirm="confirmPartyA"></choose-party-a>
|
366
|
369
|
</el-dialog>
|
|
370
|
+ <el-dialog :visible.sync="subOpen" title="选择分包合同" :size="'70%'" append-to-body>
|
|
371
|
+ <choose-subcontract @choose="confirmSubContract"></choose-subcontract>
|
|
372
|
+ </el-dialog>
|
367
|
373
|
<el-drawer :visible.sync="drawerOpen" title="" :size="'70%'" append-to-body>
|
368
|
374
|
<projectInfo :needReturn="false"></projectInfo>
|
369
|
375
|
</el-drawer>
|
|
376
|
+ <el-drawer :visible.sync="subInfoOpen" title="" :size="'55%'" append-to-body>
|
|
377
|
+ <sub-contract :taskForm="subContractId" :taskName="''" :formDisabled="true" :flowDisabled="false"></sub-contract>
|
|
378
|
+ </el-drawer>
|
370
|
379
|
</div>
|
371
|
380
|
</template>
|
372
|
381
|
|
|
@@ -384,6 +393,8 @@ import { listProjectContract, addProjectContract, delProjectContract } from "@/a
|
384
|
393
|
import { complete, rejectTask, returnList, returnTask, getNextFlowNode, delegate, flowTaskForm, } from "@/api/flowable/todo";
|
385
|
394
|
import { listTender, getTender } from "@/api/oa/tender/tender";
|
386
|
395
|
import { getUsersDeptLeader, getUsersManageLeader, getUsersDeptLeaderByDept, getUsersManageLeaderByDept, getUserByPost } from '@/api/system/post.js'
|
|
396
|
+import { listSubContract, getSubContract, delSubContract, addSubContract, updateSubContract } from "@/api/oa/contract/subContract";
|
|
397
|
+import { listContractSubcontract, delContractSubcontract, addContractSubcontract } from "@/api/oa/contract/contractSubcontract"
|
387
|
398
|
import flow from '@/views/flowable/task/todo/detail/flow'
|
388
|
399
|
import { flowXmlAndNode } from "@/api/flowable/definition";
|
389
|
400
|
import ChooseProject from '../components/chooseProject.vue';
|
|
@@ -395,6 +406,8 @@ import ChoosePartyA from '@/views/flowable/form/components/choosePartyA.vue';
|
395
|
406
|
import workTable from './components/workTable.vue';
|
396
|
407
|
import paymentTable from './components/paymentTable.vue';
|
397
|
408
|
import projectInfo from '@/views/oa/project/info'
|
|
409
|
+import ChooseSubcontract from '@/views/flowable/form/components/chooseSubcontract.vue';
|
|
410
|
+import SubContract from '@/views/flowable/form/business/subContract.vue';
|
398
|
411
|
export default {
|
399
|
412
|
dicts: ['cmc_scale_grade', 'cmc_unit'],
|
400
|
413
|
components: {
|
|
@@ -404,7 +417,7 @@ export default {
|
404
|
417
|
FileItem,
|
405
|
418
|
ChoosePartyA,
|
406
|
419
|
workTable,
|
407
|
|
- paymentTable,projectInfo
|
|
420
|
+ paymentTable, projectInfo,ChooseSubcontract,SubContract
|
408
|
421
|
},
|
409
|
422
|
props: {
|
410
|
423
|
taskName: {
|
|
@@ -454,10 +467,12 @@ export default {
|
454
|
467
|
// 遮罩层
|
455
|
468
|
loading: true,
|
456
|
469
|
projectloading: true,
|
|
470
|
+ subloading:true,
|
457
|
471
|
// 弹出层标题
|
458
|
472
|
title: "",
|
459
|
473
|
// 是否显示弹出层
|
460
|
474
|
open: false,
|
|
475
|
+ subOpen:false,
|
461
|
476
|
tbOpen: false,
|
462
|
477
|
partyAOpen: false,
|
463
|
478
|
// 表单参数
|
|
@@ -476,7 +491,9 @@ export default {
|
476
|
491
|
meetingOpen: false,
|
477
|
492
|
commentOpen: false,
|
478
|
493
|
drawerOpen: false,
|
|
494
|
+ subInfoOpen:false,
|
479
|
495
|
chooseProjectList: [],
|
|
496
|
+ connectSubContractList:[],
|
480
|
497
|
partyAList: [],
|
481
|
498
|
projectList: [],
|
482
|
499
|
deptList: [],
|
|
@@ -521,6 +538,9 @@ export default {
|
521
|
538
|
formTotal: 0,
|
522
|
539
|
flowData: {},
|
523
|
540
|
clickTd: {},
|
|
541
|
+ subContractId:{
|
|
542
|
+ formId:''
|
|
543
|
+ }
|
524
|
544
|
};
|
525
|
545
|
},
|
526
|
546
|
created() {
|
|
@@ -576,6 +596,7 @@ export default {
|
576
|
596
|
},
|
577
|
597
|
initForm() {
|
578
|
598
|
getContract(this.taskForm.formId).then(res => {
|
|
599
|
+ this.getContractSubcontractList()
|
579
|
600
|
if (this.isEmptyObject(res.data)) {
|
580
|
601
|
this.formTotal = 0;
|
581
|
602
|
this.form.drafter = this.$store.getters.userId;
|
|
@@ -679,6 +700,20 @@ export default {
|
679
|
700
|
}
|
680
|
701
|
})
|
681
|
702
|
},
|
|
703
|
+ // 获取关联分包合同
|
|
704
|
+ getContractSubcontractList() {
|
|
705
|
+ this.subloading = true;
|
|
706
|
+ const contractId = this.taskForm.formId;
|
|
707
|
+ listContractSubcontract({ contractId: contractId }).then(async res => {
|
|
708
|
+ let list = []
|
|
709
|
+ for (let r of res.rows) {
|
|
710
|
+ let obj = await getSubContract(r.subContractId)
|
|
711
|
+ list.push(obj.data)
|
|
712
|
+ }
|
|
713
|
+ this.connectSubContractList = list
|
|
714
|
+ this.subloading = false;
|
|
715
|
+ })
|
|
716
|
+ },
|
682
|
717
|
// 查询业主单位列表
|
683
|
718
|
getPartyAList() {
|
684
|
719
|
this.loading = true
|
|
@@ -1094,6 +1129,22 @@ export default {
|
1094
|
1129
|
this.$set(this.form, 'partyAId', val[0].partyAId)
|
1095
|
1130
|
}
|
1096
|
1131
|
},
|
|
1132
|
+ async confirmSubContract(val){
|
|
1133
|
+ let isSame = this.haveSameIds(val, this.connectSubContractList, 'subContractId');
|
|
1134
|
+ if (isSame) {
|
|
1135
|
+ this.$message.error('请勿重复添加已有的分包合同')
|
|
1136
|
+ return
|
|
1137
|
+ }
|
|
1138
|
+ this.subOpen = false
|
|
1139
|
+ for (let v of val) {
|
|
1140
|
+ this.connectSubContractList.push(v)
|
|
1141
|
+ await addContractSubcontract({ contractId: this.taskForm.formId, subContractId: v.subContractId })
|
|
1142
|
+ }
|
|
1143
|
+ this.getContractSubcontractList()
|
|
1144
|
+ },
|
|
1145
|
+ haveSameIds(arr1, arr2, key) {
|
|
1146
|
+ return arr1.some(obj1 => arr2.some(obj2 => obj1[key] === obj2[key]))
|
|
1147
|
+ },
|
1097
|
1148
|
reviewWord(url) {
|
1098
|
1149
|
this.$router.push({
|
1099
|
1150
|
path: '/preview',
|
|
@@ -1105,7 +1156,15 @@ export default {
|
1105
|
1156
|
clickProjectFn(row) {
|
1106
|
1157
|
this.$router.replace({ query: { ...this.$route.query, projectId: row.projectId } });
|
1107
|
1158
|
this.drawerOpen = true;
|
1108
|
|
- }
|
|
1159
|
+ },
|
|
1160
|
+ clickSubFn(row) {
|
|
1161
|
+ this.subContractId.formId = row.subContractId
|
|
1162
|
+ this.subInfoOpen = true
|
|
1163
|
+ },
|
|
1164
|
+ handleDeleteSub(index, row) {
|
|
1165
|
+ delContractSubcontract(row.subContractId)
|
|
1166
|
+ this.connectSubContractList.splice(index, 1)
|
|
1167
|
+ },
|
1109
|
1168
|
}
|
1110
|
1169
|
}
|
1111
|
1170
|
</script>
|