|
@@ -2,7 +2,13 @@
|
2
|
2
|
* @Author: ysh
|
3
|
3
|
* @Date: 2024-05-10 15:31:57
|
4
|
4
|
* @LastEditors: Please set LastEditors
|
5
|
|
- * @LastEditTime: 2024-06-18 18:41:01
|
|
5
|
+ * @LastEditTime: 2024-06-19 16:18:08
|
|
6
|
+-->
|
|
7
|
+<!--
|
|
8
|
+ * @Author: ysh
|
|
9
|
+ * @Date: 2024-05-10 15:31:57
|
|
10
|
+ * @LastEditors: Please set LastEditors
|
|
11
|
+ * @LastEditTime: 2024-06-19 10:26:51
|
6
|
12
|
-->
|
7
|
13
|
<template>
|
8
|
14
|
<div class="app-container">
|
|
@@ -13,7 +19,7 @@
|
13
|
19
|
<el-divider></el-divider>
|
14
|
20
|
<el-form-item label="项目编号:" prop="projectId">
|
15
|
21
|
<el-button type="primary" size="mini" @click="open = true" v-if="taskName == '合同拟稿'">选择项目</el-button>
|
16
|
|
- <el-descriptions border v-if="isSelect" style="margin-top: 10px;" :column="1">
|
|
22
|
+ <!-- <el-descriptions border v-if="isSelect" style="margin-top: 10px;" :column="1">
|
17
|
23
|
<el-descriptions-item label="项目编号" label-class-name="my-label">
|
18
|
24
|
{{ chooseProject.projectNumber }}</el-descriptions-item>
|
19
|
25
|
<el-descriptions-item label="项目名称" label-class-name="my-label">{{ chooseProject.projectName
|
|
@@ -25,25 +31,18 @@
|
25
|
31
|
</el-descriptions-item>
|
26
|
32
|
<el-descriptions-item label="项目类型" label-class-name="my-label">{{ chooseProject.projectType
|
27
|
33
|
}}</el-descriptions-item>
|
28
|
|
- </el-descriptions>
|
|
34
|
+ </el-descriptions> -->
|
|
35
|
+ <el-table :data="chooseProjectList" border v-if="isSelect">
|
|
36
|
+ <el-table-column type="index" width="50" label="序号" />
|
|
37
|
+ <el-table-column label="项目编号" align="center" key="projectNumber" prop="projectNumber" />
|
|
38
|
+ <el-table-column label="项目名称" align="center" key="projectName" prop="projectName" />
|
|
39
|
+ <el-table-column label="项目负责人" align="center" key="projectLeaderName" prop="projectLeaderUser.nickName" />
|
|
40
|
+ <el-table-column label="主合同编码" align="center" key="contractCode" prop="contractCode" />
|
|
41
|
+ <el-table-column label="主合同编号" align="center" key="contractNumber" prop="contractNumber" />
|
|
42
|
+ <el-table-column label="主合同金额" align="center" key="amount" prop="amount" />
|
|
43
|
+ </el-table>
|
29
|
44
|
</el-form-item>
|
30
|
|
- <el-row :gutter="20">
|
31
|
|
- <el-col :span="8" :xs="24">
|
32
|
|
- <el-form-item label="主合同金额" prop="amount">
|
33
|
|
- <el-input v-model="amount" :disabled="true" />
|
34
|
|
- </el-form-item>
|
35
|
|
- </el-col>
|
36
|
|
- <el-col :span="8" :xs="24">
|
37
|
|
- <el-form-item label="合同编码" prop="contractCode">
|
38
|
|
- <el-input v-model="contractCode" :disabled="true" />
|
39
|
|
- </el-form-item>
|
40
|
|
- </el-col>
|
41
|
|
- <el-col :span="8" :xs="24">
|
42
|
|
- <el-form-item label="合同编号" prop="contractNumber">
|
43
|
|
- <el-input v-model="contractNumber" :disabled="true" />
|
44
|
|
- </el-form-item>
|
45
|
|
- </el-col>
|
46
|
|
- </el-row>
|
|
45
|
+
|
47
|
46
|
<el-divider></el-divider>
|
48
|
47
|
<el-row :gutter="20">
|
49
|
48
|
<el-col :span="16" :xs="24">
|
|
@@ -67,7 +66,8 @@
|
67
|
66
|
:value="item.partnerId">
|
68
|
67
|
</el-option>
|
69
|
68
|
</el-select>
|
70
|
|
- <el-button type="primary" @click="partnerOpen = true" size="mini" v-if="taskName == '合同拟稿'">选择单位</el-button>
|
|
69
|
+ <el-button type="primary" @click="partnerOpen = true" size="mini"
|
|
70
|
+ v-if="taskName == '合同拟稿'">选择单位</el-button>
|
71
|
71
|
</el-form-item>
|
72
|
72
|
</el-col>
|
73
|
73
|
<el-col :span="8" :xs="24">
|
|
@@ -426,13 +426,14 @@ import { listProject, getProject } from "@/api/oa/project/project";
|
426
|
426
|
import { listDept } from '@/api/system/dept'
|
427
|
427
|
import { listUser } from '@/api/system/user'
|
428
|
428
|
import { listPartner, getPartner } from "@/api/oa/partner/partner";
|
429
|
|
-import { listContractWork, addContractWork } from "@/api/oa/contract/contractWork";
|
430
|
|
-import { listContractPayment, addContractPayment } from "@/api/oa/contract/contractPayment";
|
431
|
|
-import { listContractComment, addContractComment, updateContractComment } from "@/api/oa/contract/contractComment";
|
432
|
|
-import { getContractMeeting, addContractMeeting, updateContractMeeting } from "@/api/oa/contract/contractMeeting";
|
|
429
|
+import { listContractWork, addContractWork, delContractWork } from "@/api/oa/contract/contractWork";
|
|
430
|
+import { listContractPayment, addContractPayment, delContractPayment } from "@/api/oa/contract/contractPayment";
|
|
431
|
+import { listContractComment, addContractComment, updateContractComment, delContractComment } from "@/api/oa/contract/contractComment";
|
|
432
|
+import { getContractMeeting, addContractMeeting, updateContractMeeting, delContractMeeting } from "@/api/oa/contract/contractMeeting";
|
433
|
433
|
import { listProjectContract } from "@/api/oa/contract/projectContract";
|
434
|
434
|
import { getContract } from "@/api/oa/contract/contract";
|
435
|
435
|
import { listSubContract, getSubContract, delSubContract, addSubContract, updateSubContract } from "@/api/oa/contract/subContract";
|
|
436
|
+import { listProjectSubcontract, addProjectSubcontract, delProjectSubcontract } from '@/api/oa/contract/projectSubcontract'
|
436
|
437
|
import { getUsersDeptLeader, getUsersManageLeader, getUsersDeptLeaderByDept } from '@/api/system/post.js'
|
437
|
438
|
import flow from '@/views/flowable/task/todo/detail/flow'
|
438
|
439
|
import { flowXmlAndNode } from "@/api/flowable/definition";
|
|
@@ -523,6 +524,7 @@ export default {
|
523
|
524
|
projectList: [],
|
524
|
525
|
partnerList: [],
|
525
|
526
|
chooseProject: {},
|
|
527
|
+ chooseProjectList: [],
|
526
|
528
|
chooseContract: {
|
527
|
529
|
contractCode: [],
|
528
|
530
|
contractNumber: [],
|
|
@@ -660,28 +662,18 @@ export default {
|
660
|
662
|
this.commentOpen = true;
|
661
|
663
|
this.meetingOpen = false;
|
662
|
664
|
}
|
663
|
|
- if (res.data.projectId) {
|
664
|
|
- getProject(res.data.projectId).then(res => {
|
665
|
|
- this.chooseProject = res.data;
|
666
|
|
- this.isSelect = true
|
667
|
|
- listProjectContract({ projectId: this.chooseProject.projectId }).then(response => {
|
668
|
|
- if (response.rows) {
|
669
|
|
- for (let row of response.rows) {
|
670
|
|
- getContract(row.contractId).then(r => {
|
671
|
|
- this.chooseContract.amount.push(r.data.amount);
|
672
|
|
- this.chooseContract.contractCode.push(r.data.contractCode);
|
673
|
|
- this.chooseContract.contractNumber.push(r.data.contractNumber);
|
674
|
|
- this.amount = this.chooseContract.amount.join('、');
|
675
|
|
- this.contractCode = this.chooseContract.contractCode.join('、');
|
676
|
|
- this.contractNumber = this.chooseContract.contractNumber.join('、');
|
677
|
|
- });
|
|
665
|
+ listProjectSubcontract({ subContractId: res.data.subContractId }).then(res => {
|
|
666
|
+ if (res.rows) {
|
|
667
|
+ res.rows.forEach(project => {
|
|
668
|
+ getProject(project.projectId).then(res => {
|
|
669
|
+ if (res.data) {
|
|
670
|
+ this.chooseProjectList.push(res.data);
|
|
671
|
+ this.confirmProject(this.chooseProjectList)
|
678
|
672
|
}
|
679
|
|
- }
|
680
|
|
- else
|
681
|
|
- this.chooseContract = {};
|
|
673
|
+ })
|
682
|
674
|
})
|
683
|
|
- })
|
684
|
|
- }
|
|
675
|
+ }
|
|
676
|
+ })
|
685
|
677
|
listContractWork({ contractId: this.taskForm.formId }).then(res => {
|
686
|
678
|
if (res.rows)
|
687
|
679
|
this.workList = res.rows;
|
|
@@ -863,7 +855,7 @@ export default {
|
863
|
855
|
},
|
864
|
856
|
/** 提交按钮 */
|
865
|
857
|
submitForm() {
|
866
|
|
- let isProjectValid = this.validateManual(this.form.projectId);
|
|
858
|
+ let isProjectValid = this.validateManual(this.chooseProjectList);
|
867
|
859
|
let isDocValid = this.validateDocument(this.form.contractDocument)
|
868
|
860
|
if (!(isProjectValid || isDocValid)) {
|
869
|
861
|
// 无效,阻止提交
|
|
@@ -878,16 +870,22 @@ export default {
|
878
|
870
|
})
|
879
|
871
|
};
|
880
|
872
|
if (this.formTotal != 0) {
|
|
873
|
+ if (this.form.partnerId)
|
|
874
|
+ this.form.partnerId = this.form.partnerId.join(',')
|
881
|
875
|
updateSubContract(this.form).then(response => {
|
882
|
876
|
this.$modal.msgSuccess("修改成功");
|
883
|
877
|
this.open = false;
|
884
|
878
|
this.getList();
|
|
879
|
+ this.updateChooseProjectList()
|
885
|
880
|
});
|
886
|
881
|
const params = { taskId: this.taskForm.taskId };
|
887
|
882
|
getNextFlowNode(params).then(res => {
|
888
|
883
|
if (this.taskName == '分管审核') {
|
889
|
884
|
handleComplete(this.taskForm);
|
890
|
885
|
}
|
|
886
|
+ else if (this.taskName == '合同拟稿') {
|
|
887
|
+ this.contractDraftSubmit(handleComplete)
|
|
888
|
+ }
|
891
|
889
|
else if (this.taskName == '线上会审') {
|
892
|
890
|
for (let comment of this.commentList) {
|
893
|
891
|
updateContractComment(comment);
|
|
@@ -924,6 +922,9 @@ export default {
|
924
|
922
|
this.getList();
|
925
|
923
|
});
|
926
|
924
|
const subContractId = this.form.subContractId;
|
|
925
|
+ this.chooseProjectList.forEach(item => {
|
|
926
|
+ addProjectSubcontract({ subContractId: subContractId, projectId: item.projectId })
|
|
927
|
+ })
|
927
|
928
|
for (let work of this.workList) {
|
928
|
929
|
work.contractId = subContractId;
|
929
|
930
|
addContractWork(work);
|
|
@@ -934,62 +935,65 @@ export default {
|
934
|
935
|
}
|
935
|
936
|
const params = { taskId: this.taskForm.taskId };
|
936
|
937
|
getNextFlowNode(params).then(res => {
|
937
|
|
- if (this.commentOpen == false && this.meetingOpen == false) {
|
938
|
|
- getUsersManageLeader({ userId: this.$store.getters.userId }).then(res => {
|
939
|
|
- let userId = res.data.userId;
|
940
|
|
- this.$set(this.taskForm.variables, "approval", userId);
|
941
|
|
- this.$set(this.taskForm.variables, "commentType", '0');
|
942
|
|
- handleComplete(this.taskForm);
|
943
|
|
- })
|
944
|
|
- }
|
945
|
|
- else if (this.commentOpen == true && this.meetingOpen == false) {
|
946
|
|
- let approvalList = [];
|
947
|
|
- for (let comment of this.commentList) {
|
948
|
|
- comment.contractId = this.form.subContractId
|
949
|
|
- addContractComment(comment);
|
950
|
|
- approvalList.push(comment.userId)
|
951
|
|
- }
|
952
|
|
- this.$set(this.taskForm.variables, "approvalList", approvalList);
|
953
|
|
- this.$set(this.taskForm.variables, "commentType", '2');
|
954
|
|
- handleComplete(this.taskForm);
|
955
|
|
- }
|
956
|
|
- else if (this.commentOpen == false && this.meetingOpen == true) {
|
957
|
|
- this.meetingForm.contractId = this.form.subContractId;
|
958
|
|
- let formData = new FormData();
|
959
|
|
- let jsonForm = JSON.stringify(this.meetingForm);
|
960
|
|
- formData.append("form", jsonForm);
|
961
|
|
- addContractMeeting(formData);
|
962
|
|
- this.$set(this.taskForm.variables, "approval", this.meetingForm.hostId);
|
963
|
|
- this.$set(this.taskForm.variables, "commentType", '1');
|
964
|
|
- handleComplete(this.taskForm);
|
965
|
|
- }
|
|
938
|
+ this.contractDraftSubmit(handleComplete)
|
966
|
939
|
})
|
|
940
|
+
|
967
|
941
|
}
|
968
|
942
|
}
|
969
|
943
|
});
|
970
|
944
|
},
|
971
|
|
- confirmProject(val) {
|
972
|
|
- this.open = false
|
973
|
|
- if (val.length > 1) {
|
974
|
|
- this.$message.error('请选择一个项目');
|
975
|
|
- return;
|
|
945
|
+ // 合同拟稿提交事件
|
|
946
|
+ contractDraftSubmit(handleComplete) {
|
|
947
|
+ if (this.commentOpen == false && this.meetingOpen == false) {
|
|
948
|
+ getUsersManageLeader({ userId: this.$store.getters.userId }).then(res => {
|
|
949
|
+ let userId = res.data.userId;
|
|
950
|
+ this.$set(this.taskForm.variables, "approval", userId);
|
|
951
|
+ this.$set(this.taskForm.variables, "commentType", '0');
|
|
952
|
+ handleComplete(this.taskForm);
|
|
953
|
+ })
|
976
|
954
|
}
|
977
|
|
-
|
978
|
|
- if (val.length === 1) {
|
979
|
|
- this.chooseProject = val[0];
|
980
|
|
- this.isSelect = true;
|
981
|
|
- this.form.projectId = val[0].projectId;
|
982
|
|
-
|
983
|
|
- this.fetchContracts(this.form.projectId)
|
984
|
|
- .then(contractData => {
|
985
|
|
- this.processContractData(contractData);
|
986
|
|
- })
|
987
|
|
- .catch(error => {
|
988
|
|
- console.error('获取合同列表时出错:', error);
|
989
|
|
- this.$message.error('获取合同列表时出错');
|
990
|
|
- });
|
|
955
|
+ else if (this.commentOpen == true && this.meetingOpen == false) {
|
|
956
|
+ let approvalList = [];
|
|
957
|
+ for (let comment of this.commentList) {
|
|
958
|
+ comment.contractId = this.form.subContractId
|
|
959
|
+ addContractComment(comment);
|
|
960
|
+ approvalList.push(comment.userId)
|
|
961
|
+ }
|
|
962
|
+ this.$set(this.taskForm.variables, "approvalList", approvalList);
|
|
963
|
+ this.$set(this.taskForm.variables, "commentType", '2');
|
|
964
|
+ handleComplete(this.taskForm);
|
|
965
|
+ }
|
|
966
|
+ else if (this.commentOpen == false && this.meetingOpen == true) {
|
|
967
|
+ this.meetingForm.contractId = this.form.subContractId;
|
|
968
|
+ let formData = new FormData();
|
|
969
|
+ let jsonForm = JSON.stringify(this.meetingForm);
|
|
970
|
+ formData.append("form", jsonForm);
|
|
971
|
+ addContractMeeting(formData);
|
|
972
|
+ this.$set(this.taskForm.variables, "approval", this.meetingForm.hostId);
|
|
973
|
+ this.$set(this.taskForm.variables, "commentType", '1');
|
|
974
|
+ handleComplete(this.taskForm);
|
991
|
975
|
}
|
992
|
976
|
},
|
|
977
|
+ updateChooseProjectList() {
|
|
978
|
+ const subContractId = this.taskForm.formId
|
|
979
|
+ delProjectSubcontract(subContractId).then(() => {
|
|
980
|
+ this.chooseProjectList.forEach(item => {
|
|
981
|
+ addProjectSubcontract({ subContractId: subContractId, projectId: item.projectId })
|
|
982
|
+ })
|
|
983
|
+ })
|
|
984
|
+ delContractWork(subContractId).then(() => {
|
|
985
|
+ for (let work of this.workList) {
|
|
986
|
+ work.contractId = subContractId;
|
|
987
|
+ addContractWork(work);
|
|
988
|
+ }
|
|
989
|
+ })
|
|
990
|
+ delContractPayment(subContractId).then(() => {
|
|
991
|
+ for (let payment of this.paymentList) {
|
|
992
|
+ payment.contractId = subContractId;
|
|
993
|
+ addContractPayment(payment);
|
|
994
|
+ }
|
|
995
|
+ })
|
|
996
|
+ },
|
993
|
997
|
// 确定合作单位
|
994
|
998
|
confirmPartners(val) {
|
995
|
999
|
this.partnerOpen = false
|
|
@@ -1009,6 +1013,40 @@ export default {
|
1009
|
1013
|
this.form.partnerId = ids
|
1010
|
1014
|
}
|
1011
|
1015
|
},
|
|
1016
|
+ confirmProject(val) {
|
|
1017
|
+ this.open = false
|
|
1018
|
+ // if (val.length > 1) {
|
|
1019
|
+ // this.$message.error('请选择一个项目');
|
|
1020
|
+ // return;
|
|
1021
|
+ // }
|
|
1022
|
+ // if (val.length === 1) {
|
|
1023
|
+ // this.chooseProject = val[0];
|
|
1024
|
+ // this.isSelect = true;
|
|
1025
|
+ // this.form.projectId = val[0].projectId;
|
|
1026
|
+
|
|
1027
|
+ // this.fetchContracts(this.form.projectId)
|
|
1028
|
+ // .then(contractData => {
|
|
1029
|
+ // this.processContractData(contractData);
|
|
1030
|
+ // })
|
|
1031
|
+ // .catch(error => {
|
|
1032
|
+ // console.error('获取合同列表时出错:', error);
|
|
1033
|
+ // this.$message.error('获取合同列表时出错');
|
|
1034
|
+ // });
|
|
1035
|
+ // }
|
|
1036
|
+ if (val) {
|
|
1037
|
+ this.chooseProjectList = val;
|
|
1038
|
+ this.isSelect = true
|
|
1039
|
+ val.map(item => {
|
|
1040
|
+ this.fetchContracts(item.projectId)
|
|
1041
|
+ .then(contractData => {
|
|
1042
|
+ let [contractCode, contractNumber, amount] = this.processContractData(contractData);
|
|
1043
|
+ this.$set(item, 'contractCode', contractCode)
|
|
1044
|
+ this.$set(item, 'contractNumber', contractNumber)
|
|
1045
|
+ this.$set(item, 'amount', amount)
|
|
1046
|
+ })
|
|
1047
|
+ })
|
|
1048
|
+ }
|
|
1049
|
+ },
|
1012
|
1050
|
// 获取合同详情
|
1013
|
1051
|
fetchContracts(projectId) {
|
1014
|
1052
|
return new Promise((resolve, reject) => {
|
|
@@ -1032,22 +1070,22 @@ export default {
|
1032
|
1070
|
},
|
1033
|
1071
|
// 处理合同编码、合同编号的格式
|
1034
|
1072
|
processContractData(contractData) {
|
1035
|
|
- this.chooseContract = {
|
|
1073
|
+ let chooseContract = {
|
1036
|
1074
|
amount: [],
|
1037
|
1075
|
contractCode: [],
|
1038
|
1076
|
contractNumber: []
|
1039
|
|
- };
|
|
1077
|
+ }
|
1040
|
1078
|
contractData.forEach(contract => {
|
1041
|
1079
|
if (contract.data) {
|
1042
|
|
- this.chooseContract.amount.push(contract.data.amount);
|
1043
|
|
- this.chooseContract.contractCode.push(contract.data.contractCode);
|
1044
|
|
- this.chooseContract.contractNumber.push(contract.data.contractNumber);
|
|
1080
|
+ chooseContract.amount.push(contract.data.amount);
|
|
1081
|
+ chooseContract.contractCode.push(contract.data.contractCode);
|
|
1082
|
+ chooseContract.contractNumber.push(contract.data.contractNumber);
|
1045
|
1083
|
}
|
1046
|
1084
|
});
|
1047
|
|
-
|
1048
|
|
- this.amount = this.chooseContract.amount.join('、');
|
1049
|
|
- this.contractCode = this.chooseContract.contractCode.join('、');
|
1050
|
|
- this.contractNumber = this.chooseContract.contractNumber.join('、');
|
|
1085
|
+ let amount = chooseContract.amount.join('、');
|
|
1086
|
+ let contractCode = chooseContract.contractCode.join('、');
|
|
1087
|
+ let contractNumber = chooseContract.contractNumber.join('、');
|
|
1088
|
+ return [contractCode, contractNumber, amount]
|
1051
|
1089
|
},
|
1052
|
1090
|
getFileName(name) {
|
1053
|
1091
|
if (name) {
|
|
@@ -1090,15 +1128,15 @@ export default {
|
1090
|
1128
|
validateManual(name) {
|
1091
|
1129
|
// 这里添加你的验证逻辑
|
1092
|
1130
|
// 例如,检查tenderId是否为空或者是否符合其他规则
|
1093
|
|
- if (!name || name.trim() === '') {
|
1094
|
|
- this.$message.error('请选择一个有效项目');
|
|
1131
|
+ if (name && name.length == 0) {
|
|
1132
|
+ this.$message.error('请选择至少一个有效项目');
|
1095
|
1133
|
return false;
|
1096
|
1134
|
}
|
1097
|
1135
|
return true;
|
1098
|
1136
|
},
|
1099
|
1137
|
calculatePaymentAmount(payment) {
|
1100
|
1138
|
let amount = (payment.paymentPercentage / 100) * this.form.subAmount
|
1101
|
|
- this.$set(payment, 'paymentAmount', Number(amount))
|
|
1139
|
+ this.$set(payment, 'paymentAmount', Number(amount).toFixed(2))
|
1102
|
1140
|
},
|
1103
|
1141
|
}
|
1104
|
1142
|
};
|