Ver código fonte

承接合同流程里增加可以选择分包合同,修改布局

余思翰 9 meses atrás
pai
commit
49f9957134

+ 135
- 76
oa-ui/src/views/flowable/form/business/contractForm.vue Ver arquivo

@@ -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>

+ 2
- 2
oa-ui/src/views/oa/contract/index.vue Ver arquivo

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-06-21 18:52:00
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-09-02 15:11:08
5
+ * @LastEditTime: 2024-09-03 16:01:56
6 6
 -->
7 7
 <!--
8 8
  * @Author: ysh
@@ -104,7 +104,7 @@
104 104
       <contract-edit :form="form" @cancel="open = false"></contract-edit>
105 105
     </el-dialog>
106 106
     <!-- 查看详情 -->
107
-    <el-dialog :title="title" :visible.sync="openInfo" width="70%" append-to-body>
107
+    <el-dialog :title="title" :visible.sync="openInfo" width="60%" append-to-body>
108 108
       <contract-form :taskForm="taskForm" :taskName="''" :flowDisabled="false"></contract-form>
109 109
     </el-dialog>
110 110
   </div>

Carregando…
Cancelar
Salvar