|
@@ -1,3 +1,9 @@
|
|
1
|
+<!--
|
|
2
|
+ * @Author: ysh
|
|
3
|
+ * @Date: 2024-05-10 15:31:57
|
|
4
|
+ * @LastEditors: Please set LastEditors
|
|
5
|
+ * @LastEditTime: 2024-05-13 18:58:07
|
|
6
|
+-->
|
1
|
7
|
<template>
|
2
|
8
|
<div class="app-container">
|
3
|
9
|
<el-row :gutter="20">
|
|
@@ -8,30 +14,32 @@
|
8
|
14
|
<el-row :gutter="20">
|
9
|
15
|
<el-col :span="12" :xs="24">
|
10
|
16
|
<el-form-item label="投标项目名称:" prop="tenderId">
|
11
|
|
- <el-select v-model="form.tenderId" filterable placeholder="请选择" @change="handleSelectTender"
|
|
17
|
+ <el-button type="primary" size="mini" @click="tbOpen = true">选择投标项目</el-button>
|
|
18
|
+ <!-- <el-select v-model="form.tenderId" filterable placeholder="请选择" @change="handleSelectTender"
|
12
|
19
|
:disabled="taskName != '合同拟稿'" clearable>
|
13
|
20
|
<el-option v-for="item in tenderList" :key="item.value" :label="item.projectName"
|
14
|
21
|
:value="item.tenderId">
|
15
|
22
|
</el-option>
|
16
|
|
- </el-select>
|
|
23
|
+ </el-select> -->
|
17
|
24
|
<el-descriptions border v-if="isSelect" style="margin-top: 10px;" :column="2" direction="vertical">
|
18
|
|
- <el-descriptions-item label="项目名称" label-class-name="my-label" :span="2">{{ chooseTender.projectName
|
19
|
|
- }}</el-descriptions-item>
|
|
25
|
+ <el-descriptions-item label="投标项目名称" label-class-name="my-label" :span="2">{{ chooseTender.projectName
|
|
26
|
+ }}</el-descriptions-item>
|
20
|
27
|
<el-descriptions-item label="项目来源" label-class-name="my-label">{{ getProjectSource(chooseTender)
|
21
|
|
- }}</el-descriptions-item>
|
22
|
|
- <el-descriptions-item label="甲方单位" label-class-name="my-label">{{ chooseTender.partyA
|
23
|
|
- }}</el-descriptions-item>
|
|
28
|
+ }}</el-descriptions-item>
|
|
29
|
+ <el-descriptions-item label="招标业主" label-class-name="my-label">{{ chooseTender.partyA
|
|
30
|
+ }}</el-descriptions-item>
|
24
|
31
|
<el-descriptions-item label="联系人" label-class-name="my-label">{{ chooseTender.aPerson
|
25
|
|
- }}</el-descriptions-item>
|
|
32
|
+ }}</el-descriptions-item>
|
26
|
33
|
<el-descriptions-item label="联系电话" label-class-name="my-label">{{ chooseTender.aPhone
|
27
|
|
- }}</el-descriptions-item>
|
|
34
|
+ }}</el-descriptions-item>
|
28
|
35
|
</el-descriptions>
|
29
|
36
|
</el-form-item>
|
30
|
37
|
|
31
|
38
|
<el-row :gutter="20">
|
32
|
39
|
<el-col :span="12" :xs="24">
|
33
|
40
|
<el-form-item label="合同编码" prop="contractCode">
|
34
|
|
- <el-input v-model="form.contractCode" placeholder="请输入合同编码" :disabled="taskName != '合同拟稿'"></el-input>
|
|
41
|
+ <el-input v-model="form.contractCode" placeholder="请输入合同编码"
|
|
42
|
+ :disabled="taskName != '合同拟稿'"></el-input>
|
35
|
43
|
</el-form-item>
|
36
|
44
|
</el-col>
|
37
|
45
|
<el-col :span="12" :xs="24">
|
|
@@ -57,12 +65,13 @@
|
57
|
65
|
|
58
|
66
|
<el-col :span="12" :xs="24">
|
59
|
67
|
<el-form-item label="关联项目编号:" prop="projectIds">
|
60
|
|
- <el-select v-model="projectContractForm.projectIds" multiple filterable placeholder="请选择"
|
|
68
|
+ <!-- <el-select v-model="projectContractForm.projectIds" multiple filterable placeholder="请选择"
|
61
|
69
|
@change="handleSelectProject" :disabled="taskName != '合同拟稿'" clearable>
|
62
|
|
- <el-option v-for="item in projectList" :key="item.value" :label="item.projectNumber + item.projectName"
|
63
|
|
- :value="item.projectId">
|
|
70
|
+ <el-option v-for="item in projectList" :key="item.value"
|
|
71
|
+ :label="item.projectNumber + item.projectName" :value="item.projectId">
|
64
|
72
|
</el-option>
|
65
|
|
- </el-select>
|
|
73
|
+ </el-select> -->
|
|
74
|
+ <el-button type="primary" size="mini" @click="open = true">选择项目</el-button>
|
66
|
75
|
</el-form-item>
|
67
|
76
|
<el-table v-loading="loading" :data="chooseProjectList">
|
68
|
77
|
<el-table-column label="项目编号" align="center" prop="projectNumber"></el-table-column>
|
|
@@ -74,7 +83,20 @@
|
74
|
83
|
|
75
|
84
|
</el-row>
|
76
|
85
|
<el-form-item label="合同文件" prop="contractDocument">
|
77
|
|
- <el-input v-model="form.contractDocument" placeholder="请输入合同文件" :disabled="taskName != '合同拟稿'" />
|
|
86
|
+ <FileUpload v-if="form.tenderId == null" ref="contractFile" :limit="1" :filePathName="'合同文件'"
|
|
87
|
+ :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']" @input="getContractPath"></FileUpload>
|
|
88
|
+ <div v-if="form.tenderId != null">
|
|
89
|
+ <transition-group class="upload-file-list el-upload-list el-upload-list--text" name="el-fade-in-linear"
|
|
90
|
+ tag="ul">
|
|
91
|
+ <li key="li01" class="el-upload-list__item ele-upload-list__item-content">
|
|
92
|
+ <el-link :href="`${baseUrl}${'/profile/upload' + form.contractDocument}`" :underline="false"
|
|
93
|
+ target="_blank">
|
|
94
|
+ <span class="el-icon-document" style="color:#0011ff;text-decoration: underline;"> {{
|
|
95
|
+ getFileName(form.contractDocument) }} </span>
|
|
96
|
+ </el-link>
|
|
97
|
+ </li>
|
|
98
|
+ </transition-group>
|
|
99
|
+ </div>
|
78
|
100
|
</el-form-item>
|
79
|
101
|
<el-divider></el-divider>
|
80
|
102
|
<el-form-item label="合同计划工作量:">
|
|
@@ -115,12 +137,13 @@
|
115
|
137
|
:disabled="taskName != '合同拟稿'"></el-input>
|
116
|
138
|
</td>
|
117
|
139
|
<td>
|
118
|
|
- <el-button type="danger" icon="el-icon-minus" size="mini" circle
|
119
|
|
- @click="deletWorkItem(index)" :disabled="taskName != '合同拟稿'"></el-button>
|
|
140
|
+ <el-button type="danger" icon="el-icon-minus" size="mini" circle @click="deletWorkItem(index)"
|
|
141
|
+ :disabled="taskName != '合同拟稿'"></el-button>
|
120
|
142
|
</td>
|
121
|
143
|
</tr>
|
122
|
144
|
</table>
|
123
|
|
- <el-button icon="el-icon-plus" size="mini" @click="addWorkList()" type="primary" plain :disabled="taskName != '合同拟稿'"></el-button>
|
|
145
|
+ <el-button icon="el-icon-plus" size="mini" @click="addWorkList()" type="primary" plain
|
|
146
|
+ :disabled="taskName != '合同拟稿'"></el-button>
|
124
|
147
|
</el-form-item>
|
125
|
148
|
<el-form-item label="合同回款计划:">
|
126
|
149
|
<table border="1">
|
|
@@ -147,8 +170,8 @@
|
147
|
170
|
<el-input v-model="payment.paymentAmount" clearable :disabled="taskName != '合同拟稿'"></el-input>
|
148
|
171
|
</td>
|
149
|
172
|
<td>
|
150
|
|
- <el-date-picker style="width: 140px" v-model="payment.paymentTime" value-format="yyyy-MM-dd" type="date"
|
151
|
|
- placeholder="选择日期" :disabled="taskName != '合同拟稿'">
|
|
173
|
+ <el-date-picker style="width: 140px" v-model="payment.paymentTime" value-format="yyyy-MM-dd"
|
|
174
|
+ type="date" placeholder="选择日期" :disabled="taskName != '合同拟稿'">
|
152
|
175
|
</el-date-picker>
|
153
|
176
|
</td>
|
154
|
177
|
<td>
|
|
@@ -156,12 +179,13 @@
|
156
|
179
|
:disabled="taskName != '合同拟稿'"></el-input>
|
157
|
180
|
</td>
|
158
|
181
|
<td>
|
159
|
|
- <el-button type="danger" icon="el-icon-minus" size="mini" circle
|
160
|
|
- @click="deletPaymentItem(index)" :disabled="taskName != '合同拟稿'"></el-button>
|
|
182
|
+ <el-button type="danger" icon="el-icon-minus" size="mini" circle @click="deletPaymentItem(index)"
|
|
183
|
+ :disabled="taskName != '合同拟稿'"></el-button>
|
161
|
184
|
</td>
|
162
|
185
|
</tr>
|
163
|
186
|
</table>
|
164
|
|
- <el-button icon="el-icon-plus" size="mini" @click="addPaymentList()" type="primary" plain :disabled="taskName != '合同拟稿'"></el-button>
|
|
187
|
+ <el-button icon="el-icon-plus" size="mini" @click="addPaymentList()" type="primary" plain
|
|
188
|
+ :disabled="taskName != '合同拟稿'"></el-button>
|
165
|
189
|
</el-form-item>
|
166
|
190
|
<el-form-item label="合同备注" prop="remark">
|
167
|
191
|
<el-input v-model="form.remark" placeholder="请输入合同备注" :disabled="taskName != '合同拟稿'" />
|
|
@@ -189,12 +213,12 @@
|
189
|
213
|
<el-form-item label="线上会审:" v-if="commentOpen">
|
190
|
214
|
<table border="1">
|
191
|
215
|
<tr>
|
192
|
|
- <td>序号</td>
|
|
216
|
+ <td style="width: 50px;">序号</td>
|
193
|
217
|
<td>会审部门</td>
|
194
|
218
|
<td>会审人</td>
|
195
|
219
|
<td>会审意见</td>
|
196
|
220
|
<td>会审附件</td>
|
197
|
|
- <td>签名</td>
|
|
221
|
+ <td style="width: 90px;">签名</td>
|
198
|
222
|
<td>日期</td>
|
199
|
223
|
</tr>
|
200
|
224
|
<tr v-for="(comment, index) in commentList" :key="index">
|
|
@@ -219,9 +243,12 @@
|
219
|
243
|
<el-input v-model="comment.comment" type="textarea" clearable :autosize="{ minRows: 4, maxRows: 10 }"
|
220
|
244
|
:disabled="taskName != '线上会审' || (taskName == '线上会审' && !comment.commentUser)"></el-input>
|
221
|
245
|
</td>
|
222
|
|
- <td>
|
223
|
|
- <el-input v-model="comment.document" clearable
|
224
|
|
- :disabled="taskName != '线上会审' || (taskName == '线上会审' && !comment.commentUser)"></el-input>
|
|
246
|
+ <td style="text-align:left;">
|
|
247
|
+ <FileUpload :limit="1" :filePathName="'合同文件'"
|
|
248
|
+ :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']" @input=""></FileUpload>
|
|
249
|
+ <!-- <el-input v-model="comment.document" clearable
|
|
250
|
+ :disabled="taskName != '线上会审' || (taskName == '线上会审' && !comment.commentUser)"></el-input> -->
|
|
251
|
+
|
225
|
252
|
</td>
|
226
|
253
|
<td>
|
227
|
254
|
<span class="auditor"> {{ comment.commentUser ? comment.commentUser.nickName : '' }} </span>
|
|
@@ -230,12 +257,13 @@
|
230
|
257
|
<span> {{ comment.commentTime }} </span>
|
231
|
258
|
</td>
|
232
|
259
|
<td>
|
233
|
|
- <el-button type="danger" icon="el-icon-minus" size="mini" circle
|
234
|
|
- @click="deletCommentItem(index)" :disabled="taskName != '合同拟稿'"></el-button>
|
|
260
|
+ <el-button type="danger" icon="el-icon-minus" size="mini" circle @click="deletCommentItem(index)"
|
|
261
|
+ :disabled="taskName != '合同拟稿'"></el-button>
|
235
|
262
|
</td>
|
236
|
263
|
</tr>
|
237
|
264
|
</table>
|
238
|
|
- <el-button icon="el-icon-plus" size="mini" @click="addCommentList()" type="primary" plain :disabled="taskName != '合同拟稿'"></el-button>
|
|
265
|
+ <el-button icon="el-icon-plus" size="mini" @click="addCommentList()" type="primary" plain
|
|
266
|
+ :disabled="taskName != '合同拟稿'"></el-button>
|
239
|
267
|
</el-form-item>
|
240
|
268
|
<el-form-item label="会议评审:" v-if="meetingOpen">
|
241
|
269
|
<table border="1">
|
|
@@ -314,8 +342,8 @@
|
314
|
342
|
</el-row>
|
315
|
343
|
<el-divider></el-divider>
|
316
|
344
|
<el-form-item label="签订日期" prop="signDate">
|
317
|
|
- <el-date-picker clearable v-model="form.signDate" type="date" value-format="yyyy-MM-dd" placeholder="请选择签订日期"
|
318
|
|
- :disabled="taskName != '合同签订'">
|
|
345
|
+ <el-date-picker clearable v-model="form.signDate" type="date" value-format="yyyy-MM-dd"
|
|
346
|
+ placeholder="请选择签订日期" :disabled="taskName != '合同签订'">
|
319
|
347
|
</el-date-picker>
|
320
|
348
|
</el-form-item>
|
321
|
349
|
<el-form-item label="签订备注" prop="signRemark">
|
|
@@ -329,7 +357,7 @@
|
329
|
357
|
<el-button type="primary" @click="submitForm">确 定</el-button>
|
330
|
358
|
<el-button @click="cancel">取 消</el-button>
|
331
|
359
|
</div>
|
332
|
|
- </el-col>
|
|
360
|
+ </el-col>` `
|
333
|
361
|
<el-col :span="6" :xs="24">
|
334
|
362
|
<el-card>
|
335
|
363
|
<h2 style="text-align: center;">流程进度</h2>
|
|
@@ -339,6 +367,13 @@
|
339
|
367
|
</el-card>
|
340
|
368
|
</el-col>
|
341
|
369
|
</el-row>
|
|
370
|
+
|
|
371
|
+ <el-dialog title="选择项目" :visible.sync="open" width="70%" append-to-body>
|
|
372
|
+ <choose-project @chooseProject="confirmProject" :chooseList="chooseProjectList"></choose-project>
|
|
373
|
+ </el-dialog>
|
|
374
|
+ <el-dialog title="选择投标项目" :visible.sync="tbOpen" width="70%" append-to-body>
|
|
375
|
+ <choose-tender @choose="confirmTender"></choose-tender>
|
|
376
|
+ </el-dialog>
|
342
|
377
|
</div>
|
343
|
378
|
</template>
|
344
|
379
|
|
|
@@ -358,9 +393,13 @@ import { listTender, getTender } from "@/api/oa/tender/tender";
|
358
|
393
|
import { getUsersDeptLeader, getUsersManageLeader, getUsersDeptLeaderByDept } from '@/api/system/post.js'
|
359
|
394
|
import flow from '@/views/flowable/task/todo/detail/flow'
|
360
|
395
|
import { flowXmlAndNode } from "@/api/flowable/definition";
|
|
396
|
+import ChooseProject from '../components/chooseProject.vue';
|
|
397
|
+import ChooseTender from '../components/chooseTender.vue';
|
361
|
398
|
export default {
|
362
|
399
|
components: {
|
363
|
|
- flow
|
|
400
|
+ flow,
|
|
401
|
+ ChooseProject,
|
|
402
|
+ ChooseTender
|
364
|
403
|
},
|
365
|
404
|
props: {
|
366
|
405
|
taskName: {
|
|
@@ -375,6 +414,7 @@ export default {
|
375
|
414
|
name: "Contract",
|
376
|
415
|
data() {
|
377
|
416
|
return {
|
|
417
|
+ baseUrl: process.env.VUE_APP_BASE_API,
|
378
|
418
|
draftUser: '',
|
379
|
419
|
draftTime: undefined,
|
380
|
420
|
managerUser: '',
|
|
@@ -399,6 +439,7 @@ export default {
|
399
|
439
|
title: "",
|
400
|
440
|
// 是否显示弹出层
|
401
|
441
|
open: false,
|
|
442
|
+ tbOpen: false,
|
402
|
443
|
// 查询参数
|
403
|
444
|
queryParams: {
|
404
|
445
|
pageNum: 1,
|
|
@@ -548,15 +589,15 @@ export default {
|
548
|
589
|
this.isSelect = true
|
549
|
590
|
})
|
550
|
591
|
}
|
551
|
|
- listContractWork({contractId: this.taskForm.formId}).then(res => {
|
|
592
|
+ listContractWork({ contractId: this.taskForm.formId }).then(res => {
|
552
|
593
|
if (res.rows)
|
553
|
594
|
this.workList = res.rows;
|
554
|
595
|
});
|
555
|
|
- listContractPayment({contractId: this.taskForm.formId}).then(res => {
|
|
596
|
+ listContractPayment({ contractId: this.taskForm.formId }).then(res => {
|
556
|
597
|
if (res.rows)
|
557
|
598
|
this.paymentList = res.rows;
|
558
|
599
|
});
|
559
|
|
- listContractComment({contractId: this.taskForm.formId}).then(res => {
|
|
600
|
+ listContractComment({ contractId: this.taskForm.formId }).then(res => {
|
560
|
601
|
if (res.rows)
|
561
|
602
|
this.commentList = res.rows;
|
562
|
603
|
for (let comment of this.commentList) {
|
|
@@ -774,38 +815,6 @@ export default {
|
774
|
815
|
};
|
775
|
816
|
this.resetForm("form");
|
776
|
817
|
},
|
777
|
|
- /** 搜索按钮操作 */
|
778
|
|
- handleQuery() {
|
779
|
|
- this.queryParams.pageNum = 1;
|
780
|
|
- this.getList();
|
781
|
|
- },
|
782
|
|
- /** 重置按钮操作 */
|
783
|
|
- resetQuery() {
|
784
|
|
- this.resetForm("queryForm");
|
785
|
|
- this.handleQuery();
|
786
|
|
- },
|
787
|
|
- // 多选框选中数据
|
788
|
|
- handleSelectionChange(selection) {
|
789
|
|
- this.ids = selection.map(item => item.contractId)
|
790
|
|
- this.single = selection.length !== 1
|
791
|
|
- this.multiple = !selection.length
|
792
|
|
- },
|
793
|
|
- /** 新增按钮操作 */
|
794
|
|
- handleAdd() {
|
795
|
|
- this.reset();
|
796
|
|
- this.open = true;
|
797
|
|
- this.title = "添加cmc合同评审";
|
798
|
|
- },
|
799
|
|
- /** 修改按钮操作 */
|
800
|
|
- handleUpdate(row) {
|
801
|
|
- this.reset();
|
802
|
|
- const contractId = row.contractId || this.ids
|
803
|
|
- getContract(contractId).then(response => {
|
804
|
|
- this.form = response.data;
|
805
|
|
- this.open = true;
|
806
|
|
- this.title = "修改cmc合同评审";
|
807
|
|
- });
|
808
|
|
- },
|
809
|
818
|
/** 提交按钮 */
|
810
|
819
|
submitForm() {
|
811
|
820
|
this.$refs["form"].validate(valid => {
|
|
@@ -875,7 +884,7 @@ export default {
|
875
|
884
|
addContractPayment(payment);
|
876
|
885
|
}
|
877
|
886
|
for (let projectId of this.projectContractForm.projectIds) {
|
878
|
|
- addProjectContract({projectId: projectId, contractId: this.form.contractId});
|
|
887
|
+ addProjectContract({ projectId: projectId, contractId: this.form.contractId });
|
879
|
888
|
}
|
880
|
889
|
const params = { taskId: this.taskForm.taskId };
|
881
|
890
|
getNextFlowNode(params).then(res => {
|
|
@@ -922,35 +931,47 @@ export default {
|
922
|
931
|
}
|
923
|
932
|
});
|
924
|
933
|
},
|
925
|
|
- /** 删除按钮操作 */
|
926
|
|
- handleDelete(row) {
|
927
|
|
- const contractIds = row.contractId || this.ids;
|
928
|
|
- this.$modal.confirm('是否确认删除cmc合同评审编号为"' + contractIds + '"的数据项?').then(function () {
|
929
|
|
- return delContract(contractIds);
|
930
|
|
- }).then(() => {
|
931
|
|
- this.getList();
|
932
|
|
- this.$modal.msgSuccess("删除成功");
|
933
|
|
- }).catch(() => { });
|
|
934
|
+ getContractPath(val) {
|
|
935
|
+ let arr = val.split('/upload')
|
|
936
|
+ this.form.contractDocument = arr[1]
|
|
937
|
+ if (val == "") {
|
|
938
|
+ this.form.contractDocument = ""
|
|
939
|
+ }
|
|
940
|
+ },
|
|
941
|
+ getFileName(name) {
|
|
942
|
+ let arr = name.split('/')
|
|
943
|
+ return arr[arr.length - 1];
|
934
|
944
|
},
|
935
|
|
- /** 导出按钮操作 */
|
936
|
|
- handleExport() {
|
937
|
|
- this.download('oa/contract/export', {
|
938
|
|
- ...this.queryParams
|
939
|
|
- }, `contract_${new Date().getTime()}.xlsx`)
|
|
945
|
+ confirmProject(val) {
|
|
946
|
+ this.open = false
|
|
947
|
+ for (let v of val) {
|
|
948
|
+ this.projectContractForm.projectIds.push(v.projectId);
|
|
949
|
+ }
|
|
950
|
+ this.chooseProjectList = val
|
|
951
|
+ },
|
|
952
|
+ confirmTender(val) {
|
|
953
|
+ this.tbOpen = false
|
|
954
|
+ this.form.tenderId = val.tenderId
|
|
955
|
+ this.chooseTender = val
|
|
956
|
+ this.isSelect = true
|
940
|
957
|
}
|
941
|
958
|
}
|
942
|
959
|
}
|
943
|
960
|
</script>
|
944
|
961
|
|
945
|
962
|
<style lang="scss" scoped>
|
|
963
|
+@import "@/assets/styles/element-reset.scss";
|
|
964
|
+
|
946
|
965
|
table {
|
947
|
|
- /*居中*/
|
948
|
|
- margin: 0 auto;
|
949
|
966
|
/*边框*/
|
950
|
967
|
/* border: 1px solid black; */
|
951
|
968
|
text-align: center;
|
952
|
969
|
border-collapse: collapse;
|
|
970
|
+
|
953
|
971
|
/*设置背景颜色*/
|
954
|
972
|
/* background-color: #bfa; */
|
|
973
|
+ td {
|
|
974
|
+ padding: 5px;
|
|
975
|
+ }
|
955
|
976
|
}
|
956
|
977
|
</style>
|