|
@@ -1,8 +1,8 @@
|
1
|
1
|
<!--
|
2
|
2
|
* @Author: ysh
|
3
|
3
|
* @Date: 2024-05-10 15:31:57
|
4
|
|
- * @LastEditors: wrh
|
5
|
|
- * @LastEditTime: 2024-06-12 17:22:33
|
|
4
|
+ * @LastEditors: Please set LastEditors
|
|
5
|
+ * @LastEditTime: 2024-06-18 18:41:01
|
6
|
6
|
-->
|
7
|
7
|
<template>
|
8
|
8
|
<div class="app-container">
|
|
@@ -13,12 +13,6 @@
|
13
|
13
|
<el-divider></el-divider>
|
14
|
14
|
<el-form-item label="项目编号:" prop="projectId">
|
15
|
15
|
<el-button type="primary" size="mini" @click="open = true" v-if="taskName == '合同拟稿'">选择项目</el-button>
|
16
|
|
- <!-- <el-select v-model="form.projectId" filterable placeholder="请选择" @change="handleSelectProject"
|
17
|
|
- :disabled="taskName != '合同拟稿'" clearable>
|
18
|
|
- <el-option v-for="item in projectList" :key="item.value" :label="item.projectNumber + item.projectName"
|
19
|
|
- :value="item.projectId">
|
20
|
|
- </el-option>
|
21
|
|
- </el-select> -->
|
22
|
16
|
<el-descriptions border v-if="isSelect" style="margin-top: 10px;" :column="1">
|
23
|
17
|
<el-descriptions-item label="项目编号" label-class-name="my-label">
|
24
|
18
|
{{ chooseProject.projectNumber }}</el-descriptions-item>
|
|
@@ -59,19 +53,21 @@
|
59
|
53
|
</el-col>
|
60
|
54
|
<el-col :span="8" :xs="24">
|
61
|
55
|
<el-form-item label="分包合同金额(元)" prop="subAmount" label-width="160px">
|
62
|
|
- <el-input v-model="form.subAmount" placeholder="请输入分包合同金额" :disabled="taskName != '合同拟稿'" />
|
|
56
|
+ <el-input-number :controls="false" v-model="form.subAmount" placeholder="请输入分包合同金额"
|
|
57
|
+ :disabled="taskName != '合同拟稿'" />
|
63
|
58
|
</el-form-item>
|
64
|
59
|
</el-col>
|
65
|
60
|
</el-row>
|
66
|
61
|
<el-row :gutter="20">
|
67
|
62
|
<el-col :span="16" :xs="24">
|
68
|
63
|
<el-form-item label="承接单位" prop="partnerId">
|
69
|
|
- <el-select allow-create v-model="form.partnerId" filterable placeholder="请选择" style="width: 100%;"
|
70
|
|
- :disabled="taskName != '合同拟稿'" clearable @change="handleSelectPartner">
|
|
64
|
+ <el-select allow-create v-model="form.partnerId" multiple filterable placeholder="请选择"
|
|
65
|
+ style="width: 84%;" disabled clearable>
|
71
|
66
|
<el-option v-for="item in partnerList" :key="item.value" :label="item.partnerName"
|
72
|
67
|
:value="item.partnerId">
|
73
|
68
|
</el-option>
|
74
|
69
|
</el-select>
|
|
70
|
+ <el-button type="primary" @click="partnerOpen = true" size="mini" v-if="taskName == '合同拟稿'">选择单位</el-button>
|
75
|
71
|
</el-form-item>
|
76
|
72
|
</el-col>
|
77
|
73
|
<el-col :span="8" :xs="24">
|
|
@@ -83,21 +79,21 @@
|
83
|
79
|
|
84
|
80
|
<el-row :gutter="20">
|
85
|
81
|
<el-col :span="16" :xs="24">
|
86
|
|
- <el-form-item label="合同文件" prop="contractDocument">
|
87
|
|
- <FileUpload v-if="formTotal == 0"
|
88
|
|
- :disabled="taskName != '合同拟稿'" ref="contractFile" :limit="1" :filePathName="'分包合同/合同文件'"
|
89
|
|
- :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']" @input="getContractPath">
|
90
|
|
- </FileUpload>
|
91
|
|
- <div v-if="formTotal == 1">
|
92
|
|
- <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + form.contractDocument}`)">
|
93
|
|
- {{ getFileName(form.contractDocument) }}
|
94
|
|
- </el-link>
|
95
|
|
- <el-link class="ml20" type="warning" :href="`${baseUrl}${'/profile/upload' + form.contractDocument}`"
|
96
|
|
- :underline="false" target="_blank">
|
97
|
|
- <span class="el-icon-download">下载文件</span>
|
98
|
|
- </el-link>
|
99
|
|
- </div>
|
100
|
|
- </el-form-item>
|
|
82
|
+ <el-form-item label="合同文件" prop="contractDocument">
|
|
83
|
+ <FileUpload v-if="formTotal == 0" :disabled="taskName != '合同拟稿'" ref="contractFile" :limit="1"
|
|
84
|
+ :filePathName="'分包合同/合同文件'" :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']"
|
|
85
|
+ @input="getContractPath">
|
|
86
|
+ </FileUpload>
|
|
87
|
+ <div v-if="formTotal == 1">
|
|
88
|
+ <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + form.contractDocument}`)">
|
|
89
|
+ {{ getFileName(form.contractDocument) }}
|
|
90
|
+ </el-link>
|
|
91
|
+ <el-link class="ml20" type="warning" :href="`${baseUrl}${'/profile/upload' + form.contractDocument}`"
|
|
92
|
+ :underline="false" target="_blank">
|
|
93
|
+ <span class="el-icon-download">下载文件</span>
|
|
94
|
+ </el-link>
|
|
95
|
+ </div>
|
|
96
|
+ </el-form-item>
|
101
|
97
|
</el-col>
|
102
|
98
|
<el-col :span="8" :xs="24">
|
103
|
99
|
<el-form-item label="联系电话" prop="telephone">
|
|
@@ -418,6 +414,9 @@
|
418
|
414
|
<el-dialog title="选择项目" :visible.sync="open" width="70%" append-to-body>
|
419
|
415
|
<project-choose @chooseProject="confirmProject"></project-choose>
|
420
|
416
|
</el-dialog>
|
|
417
|
+ <el-dialog title="选择合作单位" :visible.sync="partnerOpen" width="70%" append-to-body>
|
|
418
|
+ <choose-partner @confirm="confirmPartners"></choose-partner>
|
|
419
|
+ </el-dialog>
|
421
|
420
|
</div>
|
422
|
421
|
</template>
|
423
|
422
|
|
|
@@ -441,12 +440,14 @@ import { complete, rejectTask, returnList, returnTask, getNextFlowNode, delegate
|
441
|
440
|
import projectChoose from '../components/chooseProject.vue';
|
442
|
441
|
import FileItem from './fileItem.vue';
|
443
|
442
|
import { mapGetters } from "vuex";
|
|
443
|
+import ChoosePartner from '../components/choosePartner.vue';
|
444
|
444
|
export default {
|
445
|
445
|
dicts: ['cmc_scale_grade', 'cmc_unit'],
|
446
|
446
|
components: {
|
447
|
447
|
flow,
|
448
|
448
|
projectChoose,
|
449
|
|
- FileItem
|
|
449
|
+ FileItem,
|
|
450
|
+ ChoosePartner
|
450
|
451
|
},
|
451
|
452
|
props: {
|
452
|
453
|
taskName: {
|
|
@@ -493,6 +494,7 @@ export default {
|
493
|
494
|
title: "",
|
494
|
495
|
// 是否显示弹出层
|
495
|
496
|
open: false,
|
|
497
|
+ partnerOpen: false,
|
496
|
498
|
// 查询参数
|
497
|
499
|
queryParams: {
|
498
|
500
|
pageNum: 1,
|
|
@@ -645,6 +647,7 @@ export default {
|
645
|
647
|
else {
|
646
|
648
|
this.formTotal = 1;
|
647
|
649
|
this.form = res.data;
|
|
650
|
+ this.form.partnerId = this.form.partnerId ? this.form.partnerId.split(',') : null;
|
648
|
651
|
if (this.form.commentType == '0') {
|
649
|
652
|
this.commentOpen = false;
|
650
|
653
|
this.meetingOpen = false;
|
|
@@ -759,45 +762,6 @@ export default {
|
759
|
762
|
this.deptList = res.data
|
760
|
763
|
})
|
761
|
764
|
},
|
762
|
|
- // 选择单位
|
763
|
|
- handleSelectPartner(val) {
|
764
|
|
- getPartner(val).then(response => {
|
765
|
|
- this.$set(this.form, 'contactPerson', response.data.contactPerson);
|
766
|
|
- this.$set(this.form, 'telephone', response.data.telephone);
|
767
|
|
- })
|
768
|
|
- },
|
769
|
|
- // 选择项目
|
770
|
|
- handleSelectProject(val) {
|
771
|
|
- if (val != "" && val != undefined && val != null) {
|
772
|
|
- getProject(val).then(res => {
|
773
|
|
- this.chooseProject = res.data;
|
774
|
|
- this.isSelect = true;
|
775
|
|
- listProjectContract({ projectId: this.chooseProject.projectId }).then(response => {
|
776
|
|
- if (response.rows) {
|
777
|
|
- for (let row of response.rows) {
|
778
|
|
- getContract(row.contractId).then(r => {
|
779
|
|
- this.chooseContract.amount.push(r.data.amount);
|
780
|
|
- this.chooseContract.contractCode.push(r.data.contractCode);
|
781
|
|
- this.chooseContract.contractNumber.push(r.data.contractNumber);
|
782
|
|
- this.amount = this.chooseContract.amount.join('、');
|
783
|
|
- this.contractCode = this.chooseContract.contractCode.join('、');
|
784
|
|
- this.contractNumber = this.chooseContract.contractNumber.join('、');
|
785
|
|
- });
|
786
|
|
- }
|
787
|
|
- }
|
788
|
|
- else
|
789
|
|
- this.chooseContract = {};
|
790
|
|
- })
|
791
|
|
- })
|
792
|
|
- } else {
|
793
|
|
- this.isSelect = false
|
794
|
|
- }
|
795
|
|
- },
|
796
|
|
- // 取消按钮
|
797
|
|
- cancel() {
|
798
|
|
- this.open = false;
|
799
|
|
- this.reset();
|
800
|
|
- },
|
801
|
765
|
isEmptyObject(obj) {
|
802
|
766
|
for (var key in obj) {
|
803
|
767
|
if (obj.hasOwnProperty(key)) {
|
|
@@ -888,25 +852,6 @@ export default {
|
888
|
852
|
}
|
889
|
853
|
})
|
890
|
854
|
},
|
891
|
|
- // 表单重置
|
892
|
|
- reset() {
|
893
|
|
- this.form = {
|
894
|
|
- subContractId: null,
|
895
|
|
- contractId: null,
|
896
|
|
- subContractName: null,
|
897
|
|
- subAmount: null,
|
898
|
|
- partnerId: null,
|
899
|
|
- contactPerson: null,
|
900
|
|
- drafter: null,
|
901
|
|
- draftTime: null,
|
902
|
|
- remark: null,
|
903
|
|
- signDate: null,
|
904
|
|
- signRemark: null,
|
905
|
|
- signScan: null,
|
906
|
|
- commentType: null
|
907
|
|
- };
|
908
|
|
- this.resetForm("form");
|
909
|
|
- },
|
910
|
855
|
validateDocument(doc) {
|
911
|
856
|
// 这里添加你的验证逻辑
|
912
|
857
|
// 例如,检查tenderId是否为空或者是否符合其他规则
|
|
@@ -926,6 +871,12 @@ export default {
|
926
|
871
|
}
|
927
|
872
|
this.$refs["form"].validate(valid => {
|
928
|
873
|
if (valid) {
|
|
874
|
+ const handleComplete = (taskForm) => {
|
|
875
|
+ complete(taskForm).then(response => {
|
|
876
|
+ this.$modal.msgSuccess(response.msg);
|
|
877
|
+ this.$emit('goBack');
|
|
878
|
+ })
|
|
879
|
+ };
|
929
|
880
|
if (this.formTotal != 0) {
|
930
|
881
|
updateSubContract(this.form).then(response => {
|
931
|
882
|
this.$modal.msgSuccess("修改成功");
|
|
@@ -935,10 +886,7 @@ export default {
|
935
|
886
|
const params = { taskId: this.taskForm.taskId };
|
936
|
887
|
getNextFlowNode(params).then(res => {
|
937
|
888
|
if (this.taskName == '分管审核') {
|
938
|
|
- complete(this.taskForm).then(response => {
|
939
|
|
- this.$modal.msgSuccess(response.msg);
|
940
|
|
- this.$emit('goBack')
|
941
|
|
- });
|
|
889
|
+ handleComplete(this.taskForm);
|
942
|
890
|
}
|
943
|
891
|
else if (this.taskName == '线上会审') {
|
944
|
892
|
for (let comment of this.commentList) {
|
|
@@ -947,10 +895,7 @@ export default {
|
947
|
895
|
getUsersManageLeader({ userId: this.form.drafter }).then(res => {
|
948
|
896
|
let userId = res.data.userId;
|
949
|
897
|
this.$set(this.taskForm.variables, "approval", userId);
|
950
|
|
- complete(this.taskForm).then(response => {
|
951
|
|
- this.$modal.msgSuccess(response.msg);
|
952
|
|
- this.$emit('goBack')
|
953
|
|
- });
|
|
898
|
+ handleComplete(this.taskForm);
|
954
|
899
|
})
|
955
|
900
|
}
|
956
|
901
|
else if (this.taskName == '会议评审') {
|
|
@@ -962,32 +907,29 @@ export default {
|
962
|
907
|
getUsersManageLeader({ userId: this.form.drafter }).then(res => {
|
963
|
908
|
let userId = res.data.userId;
|
964
|
909
|
this.$set(this.taskForm.variables, "approval", userId);
|
965
|
|
- complete(this.taskForm).then(response => {
|
966
|
|
- this.$modal.msgSuccess(response.msg);
|
967
|
|
- this.$emit('goBack')
|
968
|
|
- });
|
|
910
|
+ handleComplete(this.taskForm);
|
969
|
911
|
})
|
970
|
912
|
}
|
971
|
913
|
else if (this.taskName == '合同签订') {
|
972
|
|
- complete(this.taskForm).then(response => {
|
973
|
|
- this.$modal.msgSuccess(response.msg);
|
974
|
|
- this.$emit('goBack')
|
975
|
|
- });
|
|
914
|
+ handleComplete(this.taskForm);
|
976
|
915
|
}
|
977
|
916
|
})
|
978
|
917
|
} else {
|
979
|
918
|
this.form.subContractId = this.taskForm.formId;
|
|
919
|
+ if (this.form.partnerId)
|
|
920
|
+ this.form.partnerId = this.form.partnerId.join(',')
|
980
|
921
|
addSubContract(this.form).then(response => {
|
981
|
922
|
this.$modal.msgSuccess("新增成功");
|
982
|
923
|
this.open = false;
|
983
|
924
|
this.getList();
|
984
|
925
|
});
|
|
926
|
+ const subContractId = this.form.subContractId;
|
985
|
927
|
for (let work of this.workList) {
|
986
|
|
- work.contractId = this.form.subContractId
|
|
928
|
+ work.contractId = subContractId;
|
987
|
929
|
addContractWork(work);
|
988
|
930
|
}
|
989
|
931
|
for (let payment of this.paymentList) {
|
990
|
|
- payment.contractId = this.form.subContractId
|
|
932
|
+ payment.contractId = subContractId;
|
991
|
933
|
addContractPayment(payment);
|
992
|
934
|
}
|
993
|
935
|
const params = { taskId: this.taskForm.taskId };
|
|
@@ -997,10 +939,7 @@ export default {
|
997
|
939
|
let userId = res.data.userId;
|
998
|
940
|
this.$set(this.taskForm.variables, "approval", userId);
|
999
|
941
|
this.$set(this.taskForm.variables, "commentType", '0');
|
1000
|
|
- complete(this.taskForm).then(response => {
|
1001
|
|
- this.$modal.msgSuccess(response.msg);
|
1002
|
|
- this.$emit('goBack')
|
1003
|
|
- });
|
|
942
|
+ handleComplete(this.taskForm);
|
1004
|
943
|
})
|
1005
|
944
|
}
|
1006
|
945
|
else if (this.commentOpen == true && this.meetingOpen == false) {
|
|
@@ -1012,10 +951,7 @@ export default {
|
1012
|
951
|
}
|
1013
|
952
|
this.$set(this.taskForm.variables, "approvalList", approvalList);
|
1014
|
953
|
this.$set(this.taskForm.variables, "commentType", '2');
|
1015
|
|
- complete(this.taskForm).then(response => {
|
1016
|
|
- this.$modal.msgSuccess(response.msg);
|
1017
|
|
- this.$emit('goBack')
|
1018
|
|
- });
|
|
954
|
+ handleComplete(this.taskForm);
|
1019
|
955
|
}
|
1020
|
956
|
else if (this.commentOpen == false && this.meetingOpen == true) {
|
1021
|
957
|
this.meetingForm.contractId = this.form.subContractId;
|
|
@@ -1025,10 +961,7 @@ export default {
|
1025
|
961
|
addContractMeeting(formData);
|
1026
|
962
|
this.$set(this.taskForm.variables, "approval", this.meetingForm.hostId);
|
1027
|
963
|
this.$set(this.taskForm.variables, "commentType", '1');
|
1028
|
|
- complete(this.taskForm).then(response => {
|
1029
|
|
- this.$modal.msgSuccess(response.msg);
|
1030
|
|
- this.$emit('goBack')
|
1031
|
|
- });
|
|
964
|
+ handleComplete(this.taskForm);
|
1032
|
965
|
}
|
1033
|
966
|
})
|
1034
|
967
|
}
|
|
@@ -1039,28 +972,82 @@ export default {
|
1039
|
972
|
this.open = false
|
1040
|
973
|
if (val.length > 1) {
|
1041
|
974
|
this.$message.error('请选择一个项目');
|
1042
|
|
- return
|
1043
|
|
- } else if (val.length == 1) {
|
1044
|
|
- this.chooseProject = val[0]
|
1045
|
|
- this.isSelect = true
|
1046
|
|
- this.form.projectId = val[0].projectId
|
1047
|
|
- listProjectContract({ projectId: this.form.projectId }).then(response => {
|
|
975
|
+ return;
|
|
976
|
+ }
|
|
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
|
+ });
|
|
991
|
+ }
|
|
992
|
+ },
|
|
993
|
+ // 确定合作单位
|
|
994
|
+ confirmPartners(val) {
|
|
995
|
+ this.partnerOpen = false
|
|
996
|
+ if (val) {
|
|
997
|
+ let ids = []
|
|
998
|
+ let contactPerson = []
|
|
999
|
+ let telephone = []
|
|
1000
|
+ val.map(item => {
|
|
1001
|
+ ids.push(item.partnerId)
|
|
1002
|
+ if (item.contactPerson)
|
|
1003
|
+ contactPerson.push(item.contactPerson)
|
|
1004
|
+ if (item.telephone)
|
|
1005
|
+ telephone.push(item.telephone)
|
|
1006
|
+ })
|
|
1007
|
+ this.$set(this.form, 'contactPerson', contactPerson.join(','));
|
|
1008
|
+ this.$set(this.form, 'telephone', telephone.join(','));
|
|
1009
|
+ this.form.partnerId = ids
|
|
1010
|
+ }
|
|
1011
|
+ },
|
|
1012
|
+ // 获取合同详情
|
|
1013
|
+ fetchContracts(projectId) {
|
|
1014
|
+ return new Promise((resolve, reject) => {
|
|
1015
|
+ listProjectContract({ projectId: projectId }).then(response => {
|
1048
|
1016
|
if (response.rows) {
|
1049
|
|
- for (let row of response.rows) {
|
1050
|
|
- getContract(row.contractId).then(r => {
|
1051
|
|
- this.chooseContract.amount.push(r.data.amount);
|
1052
|
|
- this.chooseContract.contractCode.push(r.data.contractCode);
|
1053
|
|
- this.chooseContract.contractNumber.push(r.data.contractNumber);
|
1054
|
|
- this.amount = this.chooseContract.amount.join('、');
|
1055
|
|
- this.contractCode = this.chooseContract.contractCode.join('、');
|
1056
|
|
- this.contractNumber = this.chooseContract.contractNumber.join('、');
|
|
1017
|
+ const contractIds = response.rows.map(row => row.contractId);
|
|
1018
|
+ Promise.all(contractIds.map(contractId => getContract(contractId)))
|
|
1019
|
+ .then(contractData => {
|
|
1020
|
+ resolve(contractData);
|
|
1021
|
+ })
|
|
1022
|
+ .catch(error => {
|
|
1023
|
+ reject(error);
|
1057
|
1024
|
});
|
1058
|
|
- }
|
|
1025
|
+ } else {
|
|
1026
|
+ resolve([]); // 如果没有合同,返回一个空数组
|
1059
|
1027
|
}
|
1060
|
|
- else
|
1061
|
|
- this.chooseContract = {};
|
1062
|
|
- })
|
1063
|
|
- }
|
|
1028
|
+ }).catch(error => {
|
|
1029
|
+ reject(error);
|
|
1030
|
+ });
|
|
1031
|
+ });
|
|
1032
|
+ },
|
|
1033
|
+ // 处理合同编码、合同编号的格式
|
|
1034
|
+ processContractData(contractData) {
|
|
1035
|
+ this.chooseContract = {
|
|
1036
|
+ amount: [],
|
|
1037
|
+ contractCode: [],
|
|
1038
|
+ contractNumber: []
|
|
1039
|
+ };
|
|
1040
|
+ contractData.forEach(contract => {
|
|
1041
|
+ 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);
|
|
1045
|
+ }
|
|
1046
|
+ });
|
|
1047
|
+
|
|
1048
|
+ this.amount = this.chooseContract.amount.join('、');
|
|
1049
|
+ this.contractCode = this.chooseContract.contractCode.join('、');
|
|
1050
|
+ this.contractNumber = this.chooseContract.contractNumber.join('、');
|
1064
|
1051
|
},
|
1065
|
1052
|
getFileName(name) {
|
1066
|
1053
|
if (name) {
|