Pārlūkot izejas kodu

修改承接合同、分包合同的关联合同

余思翰 9 mēnešus atpakaļ
vecāks
revīzija
9769571355

+ 10
- 0
oa-back/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/CmcContractSubContractController.java Parādīt failu

@@ -88,4 +88,14 @@ public class CmcContractSubContractController extends BaseController
88 88
     {
89 89
         return success(cmcContractSubContractService.deleteCmcContractSubContractBySubContractIds(subContractIds));
90 90
     }
91
+
92
+    /**
93
+     * 删除cmc承接分包合同
94
+     */
95
+    @Log(title = "cmc承接分包合同", businessType = BusinessType.DELETE)
96
+    @DeleteMapping("/contractIds/{contractIds}")
97
+    public AjaxResult removeByContractIds(@PathVariable String[] contractIds)
98
+    {
99
+        return success(cmcContractSubContractService.deleteCmcContractSubContractByContractId(contractIds));
100
+    }
91 101
 }

+ 1
- 1
oa-back/ruoyi-system/src/main/java/com/ruoyi/oa/mapper/CmcContractSubContractMapper.java Parādīt failu

@@ -50,7 +50,7 @@ public interface CmcContractSubContractMapper
50 50
      * @param contractId cmc承接分包合同主键
51 51
      * @return 结果
52 52
      */
53
-    public int deleteCmcContractSubContractByContractId(String contractId);
53
+    public int deleteCmcContractSubContractByContractId(String[] contractId);
54 54
 
55 55
     /**
56 56
      * 批量删除cmc承接分包合同

+ 1
- 1
oa-back/ruoyi-system/src/main/java/com/ruoyi/oa/service/ICmcContractSubContractService.java Parādīt failu

@@ -58,5 +58,5 @@ public interface ICmcContractSubContractService
58 58
      * @param contractId cmc承接分包合同主键
59 59
      * @return 结果
60 60
      */
61
-    public int deleteCmcContractSubContractByContractId(String contractId);
61
+    public int deleteCmcContractSubContractByContractId(String[] contractId);
62 62
 }

+ 1
- 1
oa-back/ruoyi-system/src/main/java/com/ruoyi/oa/service/impl/CmcContractSubContractServiceImpl.java Parādīt failu

@@ -87,7 +87,7 @@ public class CmcContractSubContractServiceImpl implements ICmcContractSubContrac
87 87
      * @return 结果
88 88
      */
89 89
     @Override
90
-    public int deleteCmcContractSubContractByContractId(String contractId)
90
+    public int deleteCmcContractSubContractByContractId(String[] contractId)
91 91
     {
92 92
         return cmcContractSubContractMapper.deleteCmcContractSubContractByContractId(contractId);
93 93
     }

+ 4
- 1
oa-back/ruoyi-system/src/main/resources/mapper/oa/CmcContractSubContractMapper.xml Parādīt failu

@@ -47,7 +47,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
47 47
     </update>
48 48
 
49 49
     <delete id="deleteCmcContractSubContractByContractId" parameterType="String">
50
-        delete from cmc_contract_sub_contract where contract_id = #{contractId}
50
+        delete from cmc_contract_sub_contract where contract_id in
51
+        <foreach item="contractId" collection="array" open="(" separator="," close=")">
52
+            #{contractId}
53
+        </foreach>
51 54
     </delete>
52 55
 
53 56
     <delete id="deleteCmcContractSubContractBySubContractIds" parameterType="String">

+ 14
- 4
oa-ui/src/api/oa/contract/contractSubcontract.js Parādīt failu

@@ -1,8 +1,8 @@
1 1
 /*
2 2
  * @Author: wrh
3 3
  * @Date: 2024-09-02 15:06:51
4
- * @LastEditors: wrh
5
- * @LastEditTime: 2024-09-02 15:26:21
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2024-09-04 14:56:38
6 6
  */
7 7
 import request from '@/utils/request'
8 8
 
@@ -42,9 +42,19 @@ export function updateContractSubcontract(data) {
42 42
 }
43 43
 
44 44
 // 删除cmc承接分包合同
45
-export function delContractSubcontract(contractId) {
45
+export function delContractSubcontract(subcontractId) {
46 46
   return request({
47
-    url: '/oa/contractSubcontract/' + contractId,
47
+    url: '/oa/contractSubcontract/' + subcontractId,
48
+    method: 'delete'
49
+  })
50
+}
51
+
52
+// 删除cmc承接分包合同通过承接合同id
53
+export function delContractSubcontractByContractId(contractId) {
54
+  return request({
55
+    url: '/oa/contractSubcontract/contractIds/' + contractId,
48 56
     method: 'delete'
49 57
   })
50 58
 }
59
+
60
+

+ 4
- 8
oa-ui/src/views/flowable/form/budget/components/chooseDevice.vue Parādīt failu

@@ -1,8 +1,8 @@
1 1
 <!--
2 2
  * @Author: ysh
3 3
  * @Date: 2024-06-21 18:51:51
4
- * @LastEditors: wrh
5
- * @LastEditTime: 2024-09-04 09:40:26
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2024-09-04 09:57:21
6 6
 -->
7 7
 <template>
8 8
   <div>
@@ -49,13 +49,9 @@
49 49
       <el-table-column label="规格型号" align="center" prop="series" />
50 50
       <el-table-column label="存放地址" align="center" prop="place" />
51 51
       <!-- <el-table-column label="单日成本" align="center" prop="dayCost" /> -->
52
-      <el-table-column label="检定证书" align="center" width="200" prop="document">
52
+      <el-table-column label="检定证书" align="center" width="200" prop="document" show-overflow-tooltip>
53 53
         <template slot-scope="scope">
54
-          <el-link class="ml20" type="warning" :href="`${baseUrl}${'/profile/upload' + scope.row.document}`" v-if="scope.row.document"
55
-            :underline="false" target="_blank">
56
-            <el-button type="warning" plain icon="el-icon-download" size="mini"></el-button>
57
-          </el-link>
58
-          <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' +  scope.row.document}`)">
54
+          <el-link type="primary" :href="`${baseUrl}${'/profile/upload' + scope.row.document}`">
59 55
             {{ getFileName(scope.row.document) }}
60 56
           </el-link>
61 57
         </template>

+ 8
- 7
oa-ui/src/views/flowable/form/business/contractForm.vue Parādīt failu

@@ -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-03 16:08:11
5
+ * @LastEditTime: 2024-09-04 17:19:17
6 6
 -->
7 7
 <template>
8 8
   <div class="app-container">
@@ -407,7 +407,7 @@ import workTable from './components/workTable.vue';
407 407
 import paymentTable from './components/paymentTable.vue';
408 408
 import projectInfo from '@/views/oa/project/info'
409 409
 import ChooseSubcontract from '@/views/flowable/form/components/chooseSubcontract.vue';
410
-import SubContract from '@/views/flowable/form/business/subContract.vue';
410
+import subContract from '@/views/flowable/form/business/subContract.vue';
411 411
 export default {
412 412
   dicts: ['cmc_scale_grade', 'cmc_unit'],
413 413
   components: {
@@ -417,7 +417,7 @@ export default {
417 417
     FileItem,
418 418
     ChoosePartyA,
419 419
     workTable,
420
-    paymentTable, projectInfo,ChooseSubcontract,SubContract
420
+    paymentTable, projectInfo,ChooseSubcontract,subContract
421 421
   },
422 422
   props: {
423 423
     taskName: {
@@ -888,21 +888,22 @@ export default {
888 888
         this.updateRelatedProject();
889 889
       } else {
890 890
         this.form.contractId = this.taskForm.formId;
891
-        addContract(this.form).then(response => {
891
+        addContract(this.form).then(async response => {
892 892
           if (response.code == 200) {
893 893
             this.$modal.msgSuccess("新增成功");
894 894
             this.open = false;
895 895
             for (let work of this.workList) {
896 896
               work.contractId = this.form.contractId
897
-              addContractWork(work);
897
+              await addContractWork(work);
898 898
             }
899 899
             for (let payment of this.paymentList) {
900 900
               payment.contractId = this.form.contractId
901
-              addContractPayment(payment);
901
+              await addContractPayment(payment);
902 902
             }
903 903
             for (let projectId of this.projectContractForm.projectIds) {
904
-              addProjectContract({ projectId: projectId, contractId: this.form.contractId });
904
+              await addProjectContract({ projectId: projectId, contractId: this.form.contractId });
905 905
             }
906
+            this.initForm();
906 907
           } else {
907 908
             this.$message.error("新增失败,请确认合同编码是否唯一");
908 909
           }

+ 109
- 68
oa-ui/src/views/flowable/form/business/subContract.vue Parādīt failu

@@ -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:24:50
5
+ * @LastEditTime: 2024-09-04 17:29:54
6 6
 -->
7 7
 <template>
8 8
   <div class="app-container">
@@ -11,78 +11,75 @@
11 11
         <h2 class="text-center">分包合同评审表</h2>
12 12
         <el-form ref="form" :model="form" :rules="rules" label-width="130px" :formDisabled="formDisabled">
13 13
           <el-divider></el-divider>
14
-          <el-row :gutter="20">
15
-            <el-col :span="16" :xs="24">
16
-              <el-form-item label="分包合同名称" prop="subContractName">
17
-                <el-input type="textarea" :rows="3" v-model="form.subContractName" placeholder="请输入分包合同名称"
18
-                  :disabled="taskName != '合同拟稿'" />
19
-              </el-form-item>
20
-            </el-col>
21
-            <el-col :span="8" :xs="24">
22
-              <el-form-item label="分包合同金额(元)" prop="subAmount" label-width="160px">
23
-                <el-input-number :controls="false" v-model="form.subAmount" placeholder="请输入分包合同金额"
24
-                  :disabled="taskName != '合同拟稿'" />
25
-              </el-form-item>
26
-            </el-col>
27
-          </el-row>
28
-          <el-row :gutter="20">
29
-            <el-col :span="16" :xs="24">
30
-              <el-form-item label="承接单位" prop="partnerId">
31
-                <el-select allow-create v-model="form.partnerId" multiple filterable placeholder="请选择"
32
-                  :style="taskName == '合同拟稿' ? { width: '84%' } : { width: '100%' }" disabled clearable>
33
-                  <el-option v-for="item in partnerList" :key="item.value" :label="item.partnerName"
34
-                    :value="item.partnerId">
35
-                  </el-option>
36
-                </el-select>
37
-                <el-button type="primary" @click="partnerOpen = true" size="mini"
38
-                  v-if="taskName == '合同拟稿'">选择单位</el-button>
39
-              </el-form-item>
40
-            </el-col>
41
-            <el-col :span="8" :xs="24">
42
-              <el-form-item label="联系人" prop="contactPerson">
43
-                <el-input v-model="form.contactPerson" placeholder="请输入联系人" :disabled="taskName != '合同拟稿'" />
44
-              </el-form-item>
45
-            </el-col>
46
-          </el-row>
47
-
48
-          <el-row :gutter="20">
49
-            <el-col :span="16" :xs="24">
50
-              <el-form-item label="合同文件" prop="contractDocument">
51
-                <FileUpload v-if="taskName == '合同拟稿'" :disabled="taskName != '合同拟稿'" ref="contractFile" :limit="1"
52
-                  :filePathName="'分包合同/合同文件'" :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf', 'rar', 'zip']"
53
-                  @input="getContractPath">
54
-                </FileUpload>
55
-                <div v-if="form.contractDocument">
56
-                  <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + form.contractDocument}`)">
57
-                    {{ getFileName(form.contractDocument) }}
58
-                  </el-link>
59
-                  <el-link class="ml20" type="warning" :href="`${baseUrl}${'/profile/upload' + form.contractDocument}`"
60
-                    :underline="false" target="_blank">
61
-                    <span class="el-icon-download">下载文件</span>
62
-                  </el-link>
63
-                </div>
64
-              </el-form-item>
65
-            </el-col>
66
-            <el-col :span="8" :xs="24">
67
-              <el-form-item label="联系电话" prop="telephone">
68
-                <el-input v-model="form.telephone" placeholder="请输入联系电话" :disabled="taskName != '合同拟稿'" />
69
-              </el-form-item>
70
-            </el-col>
71
-          </el-row>
14
+          <el-form-item label="分包合同名称" prop="subContractName">
15
+            <el-input type="textarea" :rows="3" v-model="form.subContractName" placeholder="请输入分包合同名称"
16
+              :disabled="taskName != '合同拟稿'" />
17
+          </el-form-item>
18
+          <el-form-item label="分包合同金额" prop="subAmount">
19
+            <el-input-number :controls="false" v-model="form.subAmount" placeholder="请输入分包合同金额"
20
+              :disabled="taskName != '合同拟稿'" />(元)
21
+          </el-form-item>
22
+          <el-form-item label="承接单位" prop="partnerId">
23
+            <el-select allow-create v-model="form.partnerId" multiple filterable placeholder="请选择"
24
+              :style="taskName == '合同拟稿' ? { width: '84%' } : { width: '100%' }" disabled clearable>
25
+              <el-option v-for="item in partnerList" :key="item.value" :label="item.partnerName"
26
+                :value="item.partnerId">
27
+              </el-option>
28
+            </el-select>
29
+            <el-button type="primary" @click="partnerOpen = true" size="mini" v-if="taskName == '合同拟稿'">选择单位</el-button>
30
+          </el-form-item>
31
+          <el-form-item label="联系人" prop="contactPerson">
32
+            <el-input v-model="form.contactPerson" placeholder="请输入联系人" :disabled="taskName != '合同拟稿'" />
33
+          </el-form-item>
34
+          <el-form-item label="联系电话" prop="telephone">
35
+            <el-input v-model="form.telephone" placeholder="请输入联系电话" :disabled="taskName != '合同拟稿'" />
36
+          </el-form-item>
37
+          <el-form-item label="合同文件" prop="contractDocument">
38
+            <FileUpload v-if="taskName == '合同拟稿'" :disabled="taskName != '合同拟稿'" ref="contractFile" :limit="1"
39
+              :filePathName="'分包合同/合同文件'" :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf', 'rar', 'zip']"
40
+              @input="getContractPath">
41
+            </FileUpload>
42
+            <div v-if="form.contractDocument">
43
+              <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + form.contractDocument}`)">
44
+                {{ getFileName(form.contractDocument) }}
45
+              </el-link>
46
+              <el-link class="ml20" type="warning" :href="`${baseUrl}${'/profile/upload' + form.contractDocument}`"
47
+                :underline="false" target="_blank">
48
+                <span class="el-icon-download">下载文件</span>
49
+              </el-link>
50
+            </div>
51
+          </el-form-item>
72 52
           <el-form-item label="关联项目" prop="projectId">
73 53
             <el-button type="primary" size="mini" @click="open = true" v-if="taskName == '合同拟稿'">选择项目</el-button>
74
-            <el-table :data="chooseProjectList" border v-if="isSelect">
54
+            <el-table :data="chooseProjectList" border>
75 55
               <el-table-column type="index" width="50" label="序号" />
76 56
               <el-table-column label="项目编号" align="center" key="projectNumber" prop="projectNumber" />
77 57
               <el-table-column label="项目名称" align="center" key="projectName" prop="projectName" />
78 58
               <el-table-column label="项目负责人" align="center" key="projectLeaderName" prop="projectLeaderUser.nickName" />
79 59
               <el-table-column label="承担部门" align="center" prop="undertakingDeptName"></el-table-column>
80
-              <!-- <el-table-column label="主合同编码" align="center" key="contractCode" prop="contractCode" />
81
-              <el-table-column label="主合同编号" align="center" key="contractNumber" prop="contractNumber" />
82
-              <el-table-column label="主合同金额" align="center" key="amount" prop="amount" /> -->
60
+              <el-table-column label="操作" align="center">
61
+                <template slot-scope="scope">
62
+                  <el-button type="text" icon="el-icon-view" @click="clickProjectFn(scope.row)">查看</el-button>
63
+                </template>
64
+              </el-table-column>
65
+            </el-table>
66
+          </el-form-item>
67
+          <el-form-item label="关联主合同:">
68
+            <el-button type="primary" size="mini" @click="contractOpen = true" icon="el-icon-plus"
69
+              v-if="taskName == '合同拟稿'">新增关联主合同</el-button>
70
+            <el-table v-loading="contractloading" :data="connectContractList" border>
71
+              <el-table-column label="合同名称" align="center" prop="contractName" width="220px" />
72
+              <el-table-column label="合同金额" align="center" prop="amount" />
73
+              <el-table-column label="甲方单位" align="center" prop="partyA.partyAName" width="220px" />
74
+              <el-table-column label="合同编码" align="center" prop="contractCode" />
75
+              <el-table-column label="合同编号" align="center" prop="contractNumber" />
76
+              <el-table-column label="操作" align="center">
77
+                <template slot-scope="scope">
78
+                  <el-button type="text" icon="el-icon-view" @click="clickContractFn(scope.row)">查看</el-button>
79
+                </template>
80
+              </el-table-column>
83 81
             </el-table>
84 82
           </el-form-item>
85
-
86 83
           <el-divider></el-divider>
87 84
           <!-- 表1:合同计划工作量 -->
88 85
           <work-table ref="workTableRef" :contractId="taskForm.formId" :taskName="taskName"></work-table>
@@ -343,6 +340,12 @@
343 340
     <el-dialog title="选择合作单位" :visible.sync="partnerOpen" width="70%" append-to-body>
344 341
       <choose-partner @confirm="confirmPartners"></choose-partner>
345 342
     </el-dialog>
343
+    <el-drawer :visible.sync="drawerOpen" title="" :size="'70%'" append-to-body>
344
+      <projectInfo :needReturn="false"></projectInfo>
345
+    </el-drawer>
346
+    <el-drawer :visible.sync="formOpen" title="" :size="'55%'" append-to-body>
347
+      <contract-form :taskForm="contractId" :taskName="''" :formDisabled="true" :flowDisabled="false"></contract-form>
348
+    </el-drawer>
346 349
   </div>
347 350
 </template>
348 351
 
@@ -359,6 +362,7 @@ import { getContractMeeting, addContractMeeting, updateContractMeeting, delContr
359 362
 import { listProjectContract } from "@/api/oa/contract/projectContract";
360 363
 import { getContract } from "@/api/oa/contract/contract";
361 364
 import { listSubContract, getSubContract, delSubContract, addSubContract, updateSubContract } from "@/api/oa/contract/subContract";
365
+import { listContractSubcontract, delContractSubcontract, addContractSubcontract } from "@/api/oa/contract/contractSubcontract"
362 366
 import { listProjectSubcontract, addProjectSubcontract, delProjectSubcontract } from '@/api/oa/contract/projectSubcontract'
363 367
 import { getUsersDeptLeader, getUsersManageLeader, getUsersDeptLeaderByDept, getUsersManageLeaderByDept, getUserByPost } from '@/api/system/post.js'
364 368
 import flow from '@/views/flowable/task/todo/detail/flow'
@@ -370,6 +374,8 @@ import { mapGetters } from "vuex";
370 374
 import ChoosePartner from '../components/choosePartner.vue';
371 375
 import workTable from './components/workTable.vue';
372 376
 import paymentTable from './components/paymentTable.vue';
377
+import contractForm from '@/views/flowable/form/business/contractForm.vue';
378
+import projectInfo from '@/views/oa/project/info'
373 379
 export default {
374 380
   dicts: ['cmc_scale_grade', 'cmc_unit'],
375 381
   components: {
@@ -378,7 +384,9 @@ export default {
378 384
     FileItem,
379 385
     ChoosePartner,
380 386
     workTable,
381
-    paymentTable
387
+    paymentTable,
388
+    contractForm,
389
+    projectInfo,
382 390
   },
383 391
   props: {
384 392
     taskName: {
@@ -515,7 +523,15 @@ export default {
515 523
       isSelect: false,
516 524
       formTotal: 0,
517 525
       flowData: {},
518
-      clickTd: {}
526
+      clickTd: {},
527
+      contractOpen: false,
528
+      connectContractList: [],
529
+      contractloading: true,
530
+      formOpen: false,
531
+      contractId: {
532
+        formId: ''
533
+      },
534
+      drawerOpen: false,
519 535
     };
520 536
   },
521 537
   created() {
@@ -576,6 +592,7 @@ export default {
576 592
     },
577 593
     initForm() {
578 594
       getSubContract(this.taskForm.formId).then(res => {
595
+        this.getContractSubcontractList();
579 596
         if (this.isEmptyObject(res.data)) {
580 597
           this.formTotal = 0;
581 598
           this.form.drafter = this.$store.getters.userId;
@@ -689,6 +706,20 @@ export default {
689 706
         this.loading = false;
690 707
       });
691 708
     },
709
+    // 获取关联承接合同
710
+    getContractSubcontractList() {
711
+      this.contractloading = true;
712
+      const subContractId = this.taskForm.formId;
713
+      listContractSubcontract({ subContractId: subContractId }).then(async res => {
714
+        let list = []
715
+        for (let r of res.rows) {
716
+          let obj = await getContract(r.contractId)
717
+          list.push(obj.data)
718
+        }
719
+        this.connectContractList = list
720
+        this.contractloading = false;
721
+      })
722
+    },
692 723
     // 查询承接单位列表
693 724
     getPartnerList() {
694 725
       this.loading = true
@@ -786,7 +817,8 @@ export default {
786 817
       this.workList = this.$refs.workTableRef.workList;
787 818
       this.paymentList = this.$refs.paymentRef.paymentList;
788 819
       if (this.formTotal != 0) {
789
-        if (this.form.partnerId)
820
+        console.log(this.form.partnerId);
821
+        if (this.form.partnerId && this.form.partnerId instanceof Array)
790 822
           this.form.partnerId = this.form.partnerId.join(',')
791 823
         updateSubContract(this.form).then(response => {
792 824
           this.$modal.msgSuccess("修改成功");
@@ -796,12 +828,13 @@ export default {
796 828
         });
797 829
       } else {
798 830
         this.form.subContractId = this.taskForm.formId;
799
-        if (this.form.partnerId)
831
+        if (this.form.partnerId && this.form.partnerId.length)
800 832
           this.form.partnerId = this.form.partnerId.join(',')
801 833
         addSubContract(this.form).then(response => {
802 834
           this.$modal.msgSuccess("新增成功");
803 835
           this.open = false;
804 836
           this.getList();
837
+          this.initForm();
805 838
         });
806 839
         const subContractId = this.form.subContractId;
807 840
         this.chooseProjectList.forEach(item => {
@@ -1117,6 +1150,14 @@ export default {
1117 1150
       }
1118 1151
       return true;
1119 1152
     },
1153
+    clickContractFn(row) {
1154
+      this.formOpen = true;
1155
+      this.contractId.formId = row.contractId
1156
+    },
1157
+    clickProjectFn(row) {
1158
+      this.$router.replace({ query: { ...this.$route.query, projectId: row.projectId } });
1159
+      this.drawerOpen = true;
1160
+    },
1120 1161
   }
1121 1162
 };
1122 1163
 </script>

+ 130
- 0
oa-ui/src/views/flowable/form/components/actualWork.vue Parādīt failu

@@ -0,0 +1,130 @@
1
+<template>
2
+  <div style="width:100%">
3
+    <table border="1" style="width:100%">
4
+      <tr class="title">
5
+        <td :colspan="8">项目实际完成工作量</td>
6
+      </tr>
7
+      <tr>
8
+        <td>序号</td>
9
+        <td style="width: 180px">工作内容</td>
10
+        <td>等级或比例尺</td>
11
+        <td>单位</td>
12
+        <td>工作量</td>
13
+        <td style="width: 100px">要求完成时间</td>
14
+        <td>备注</td>
15
+        <td>操作</td>
16
+      </tr>
17
+      <tr v-for="work, index in workList">
18
+        <td>{{ index + 1 }}</td>
19
+        <td>
20
+          <el-input v-model="work.content" type="textarea" clearable :autosize="{ minRows: 4, maxRows: 10 }"></el-input>
21
+        </td>
22
+        <td>
23
+          <el-select v-model="work.scale" placeholder="请选择" clearable>
24
+            <el-option v-for="dict in dict.type.cmc_scale_grade" :key="dict.value" :label="dict.label"
25
+              :value="dict.label" />
26
+          </el-select>
27
+        </td>
28
+        <td>
29
+          <el-select v-model="work.unit" placeholder="请选择" clearable>
30
+            <el-option v-for="dict in dict.type.cmc_unit" :key="dict.value" :label="dict.label" :value="dict.label" />
31
+          </el-select>
32
+        </td>
33
+        <td>
34
+          <el-input v-model="work.workload" clearable></el-input>
35
+        </td>
36
+        <td>
37
+          <el-date-picker style="width: 140px" v-model="work.deadline" value-format="yyyy-MM-dd" type="date"
38
+            placeholder="选择日期">
39
+          </el-date-picker>
40
+        </td>
41
+        <td>
42
+          <el-input v-model="work.remark" type="textarea" clearable :autosize="{ minRows: 4, maxRows: 10 }"></el-input>
43
+        </td>
44
+        <td>
45
+          <el-button type="text" style="color:#F56C6C" size="mini" @click="deletWorkItem(index)">删除行</el-button>
46
+        </td>
47
+      </tr>
48
+    </table>
49
+    <el-button icon="el-icon-plus" type="primary" plain size="mini" @click="addWorkList"></el-button>
50
+
51
+  </div>
52
+</template>
53
+
54
+<script>
55
+import { listProjectWorkload, getProjectWorkload, addProjectWorkload, updateProjectWorkload, delProjectWorkload } from '@/api/oa/project/projectWorkload'
56
+export default {
57
+  dicts: ['cmc_scale_grade', 'cmc_unit'],
58
+  props: {
59
+    projectId: {
60
+      type: String,
61
+      require: true
62
+    }
63
+  },
64
+  data() {
65
+    return {
66
+      workList: [{
67
+        content: "",
68
+        scale: "",
69
+        unit: "",
70
+        workload: "",
71
+        deadline: undefined,
72
+        remark: "",
73
+      },]
74
+    }
75
+  },
76
+  created() {
77
+
78
+  },
79
+  methods: {
80
+    getList() {
81
+      let queryParams = {
82
+        pageNum: 1,
83
+        pageSize: 100,
84
+        projectId: this.projectId
85
+      }
86
+      listProjectWorkload(queryParams).then(res => {
87
+
88
+      })
89
+    },
90
+    addWorkList() {
91
+      this.workList.push({
92
+        content: "",
93
+        scale: "",
94
+        unit: "",
95
+        workload: "",
96
+        deadline: undefined,
97
+        remark: "",
98
+      });
99
+    },
100
+    deletWorkItem(index) {
101
+      let arr = this.workList;
102
+      if (arr.length == 1) {
103
+        return;
104
+      }
105
+      if (index >= 0 && index < arr.length) {
106
+        arr.splice(index, 1);
107
+      }
108
+    },
109
+  },
110
+}
111
+</script>
112
+
113
+<style lang="scss" scoped>
114
+table {
115
+  /*边框*/
116
+  /* border: 1px solid black; */
117
+  text-align: center;
118
+  border-collapse: collapse;
119
+
120
+  /*设置背景颜色*/
121
+  /* background-color: #bfa; */
122
+  td {
123
+    padding: 5px;
124
+  }
125
+}
126
+
127
+.title {
128
+  background-color: #f5f7fa;
129
+}
130
+</style>

+ 8
- 7
oa-ui/src/views/flowable/form/components/chooseContract.vue Parādīt failu

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-05-22 11:12:57
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-07-05 09:09:03
5
+ * @LastEditTime: 2024-09-04 11:20:46
6 6
 -->
7 7
 <template>
8 8
   <div>
@@ -22,14 +22,12 @@
22 22
       </el-form>
23 23
     </el-row>
24 24
     <el-table ref="choosePContract" v-loading="loading" :data="contractList" highlight-current-row
25
-      @current-change="handleCurrentChange" :row-key="getRowKeys" @row-dblclick="confirmChoose">
26
-      <el-table-column label="投标项目名称" align="center" key="tender.projectName" prop="tender.projectName"
27
-        min-width="150px" />
25
+      @current-change="handleCurrentChange" :row-key="getRowKeys" @row-dblclick="confirmChoose" @row-click="selectRow">
26
+      <el-table-column label="序号" align="center" type="index" width="55" />
27
+      <el-table-column label="合同名称" align="center" key="contractName" prop="contractName" min-width="100px" />
28 28
       <el-table-column label="合同编码" align="center" key="contractCode" prop="contractCode" />
29 29
       <el-table-column label="合同编号" align="center" prop="contractNumber" min-width="100px" />
30 30
       <el-table-column label="合同金额" align="center" prop="amount" min-width="100px" />
31
-      <el-table-column label="拟稿人" align="center" prop="draftUser.nickName" min-width="100px" />
32
-      <el-table-column label="合同备注" align="center" prop="remark" min-width="250px" />
33 31
     </el-table>
34 32
     <div style="text-align: right;" class="mt20 mr20">
35 33
       <el-pagination @current-change="getList" :current-page.sync="queryParams.pageNum"
@@ -37,7 +35,7 @@
37 35
       </el-pagination>
38 36
     </div>
39 37
     <div>
40
-      已选合同:<el-tag>{{ choosePContract.tender.projectName }}</el-tag>
38
+      已选合同:<el-tag>{{ choosePContract.contractName }}</el-tag>
41 39
     </div>
42 40
     <div style="text-align: center;margin-top: 20px;">
43 41
       <el-button type="primary" @click="confirmChoose">确认选择</el-button>
@@ -89,6 +87,9 @@ export default {
89 87
     getRowKeys(row) {
90 88
       return row.contractId;
91 89
     },
90
+    selectRow(row){
91
+      this.choosePContract = row
92
+    },
92 93
     confirmChoose() {
93 94
       this.$emit('choose', this.choosePContract)
94 95
     },

+ 14
- 5
oa-ui/src/views/flowable/form/projectProcess/inProgress.vue Parādīt failu

@@ -1,8 +1,8 @@
1 1
 <!--
2 2
  * @Author: ysh
3
- * @Date: 2024-04-15 09:35:41
3
+ * @Date: 2024-06-21 18:51:54
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-06-13 14:39:00
5
+ * @LastEditTime: 2024-09-04 17:06:39
6 6
 -->
7 7
 <template>
8 8
   <div>
@@ -41,7 +41,7 @@
41 41
           </el-tooltip>
42 42
         </el-form-item>
43 43
         <el-form-item label="使用设备:">
44
-          <el-tooltip class="item" effect="dark" content="直接获取设备申请中的设备,若无车辆,则需要先提交项目的设备申请" placement="top-end">
44
+          <el-tooltip class="item" effect="dark" content="直接获取设备申请中的设备,若无设备,则需要先提交项目的设备申请" placement="top-end">
45 45
             <el-select v-model="form.devices" multiple disabled style="width:90%">
46 46
               <el-option v-for="item in deviceList" :key="item.deviceId" :label="item.name + '【' + (item.brand != null ? item.brand : '') + (item.series != null ? '-' + item.series + '】' : '')
47 47
         + (item.code != null ? '(设备编号:' + item.code + ')' : '') + '📍' + item.place" :value="item.deviceId">
@@ -64,7 +64,7 @@
64 64
           </el-col>
65 65
         </el-row>
66 66
         <el-form-item label="项目进度:">
67
-          <table border="1">
67
+          <table border="1" style="width:100%">
68 68
             <tr>
69 69
               <td style="width: 80px">序号</td>
70 70
               <td>截至日期</td>
@@ -95,7 +95,10 @@
95 95
           </table>
96 96
           <el-button icon="el-icon-plus" size="mini" @click="addProgressList()" type="primary" plain></el-button>
97 97
         </el-form-item>
98
+        <el-divider></el-divider>
99
+        <actual-work :projectId="taskForm.formId"></actual-work>
98 100
       </el-form>
101
+        <el-divider></el-divider>
99 102
       <div class="headers">
100 103
         项目借款
101 104
         <div class="line"></div>
@@ -150,13 +153,15 @@ import ChoosePeople from '../budget/components/choosePeople.vue';
150 153
 import ChooseCar from '../budget/components/chooseCar.vue';
151 154
 import ChooseDevice from "../budget/components/chooseDevice.vue";
152 155
 import AchiData from '../inProgress/achiData.vue';
156
+import actualWork from '@/views/flowable/form/components/actualWork.vue';
153 157
 export default {
154 158
   components: {
155 159
     borrowData,
156 160
     SettleData,
157 161
     ChoosePeople,
158 162
     ChooseCar,
159
-    AchiData
163
+    AchiData,
164
+    actualWork
160 165
   },
161 166
   computed: {
162 167
     ...mapGetters(["name", "userId"]),
@@ -438,6 +443,10 @@ table {
438 443
   }
439 444
 }
440 445
 
446
+.title {
447
+  background-color: #f5f7fa;
448
+}
449
+
441 450
 ::v-deep .el-textarea.is-disabled .el-textarea__inner {
442 451
   color: #121212 !important;
443 452
 }

+ 108
- 18
oa-ui/src/views/oa/contract/components/subEdit.vue Parādīt failu

@@ -36,7 +36,7 @@
36 36
       </el-form-item>
37 37
       <el-form-item label="关联项目:" prop="projectId">
38 38
         <el-button type="primary" size="mini" @click="open = true" icon="el-icon-plus">新增关联项目</el-button>
39
-        <el-table :data="connectProjectList" border v-if="connectProjectList.length != 0">
39
+        <el-table :data="connectProjectList" border>
40 40
           <el-table-column type="index" width="50" label="序号" />
41 41
           <el-table-column label="项目编号" align="center" key="projectNumber" prop="projectNumber" />
42 42
           <el-table-column label="项目名称" align="center" key="projectName" prop="projectName" />
@@ -51,6 +51,23 @@
51 51
           </el-table-column>
52 52
         </el-table>
53 53
       </el-form-item>
54
+      <el-form-item label="关联主合同:">
55
+        <el-button type="primary" size="mini" @click="contractOpen = true" icon="el-icon-plus">新增关联主合同</el-button>
56
+        <el-table v-loading="contractloading" :data="connectContractList" border>
57
+          <el-table-column label="合同名称" align="center" prop="contractName" width="220px" />
58
+          <el-table-column label="合同金额" align="center" prop="amount" />
59
+          <el-table-column label="甲方单位" align="center" prop="partyA.partyAName" width="220px" />
60
+          <el-table-column label="合同编码" align="center" prop="contractCode" />
61
+          <el-table-column label="合同编号" align="center" prop="contractNumber" />
62
+          <el-table-column label="操作" align="center">
63
+            <template slot-scope="scope">
64
+              <el-button type="text" icon="el-icon-view" @click="clickContractFn(scope.row)">查看</el-button>
65
+              <el-button type="text" style="color:#F56C6C;" icon="el-icon-delete"
66
+                @click="handleDeleteContract(scope.$index, scope.row)">删除</el-button>
67
+            </template>
68
+          </el-table-column>
69
+        </el-table>
70
+      </el-form-item>
54 71
       <!-- 表1:工作量计划-->
55 72
       <work-table ref="workTableRef" :contractId="form.subContractId" :taskName="'合同拟稿'"></work-table>
56 73
 
@@ -133,6 +150,9 @@
133 150
     <el-dialog title="选择合作单位" :visible.sync="partnerOpen" width="70%" append-to-body>
134 151
       <choose-partner @confirm="confirmPartners"></choose-partner>
135 152
     </el-dialog>
153
+    <el-dialog title="选择承接合同" :visible.sync="contractOpen" width="70%" append-to-body>
154
+      <choose-contract @choose="confirmContract"></choose-contract>
155
+    </el-dialog>
136 156
     <el-drawer :visible.sync="partyAOpen" title="选择甲方单位" :size="'40%'" append-to-body>
137 157
       <div class="app-container">
138 158
         <choose-party-a @confirm="confirmPartyA"></choose-party-a>
@@ -141,6 +161,9 @@
141 161
     <el-drawer :visible.sync="drawerOpen" title="" :size="'70%'" append-to-body>
142 162
       <projectInfo :needReturn="false"></projectInfo>
143 163
     </el-drawer>
164
+    <el-drawer :visible.sync="formOpen" title="" :size="'60%'" append-to-body>
165
+      <contract-form :taskForm="taskForm" :taskName="''" :formDisabled="true" :flowDisabled="false"></contract-form>
166
+    </el-drawer>
144 167
   </div>
145 168
 
146 169
 </template>
@@ -153,6 +176,7 @@ import { listContract, getContract, delContract, addContract, updateContract } f
153 176
 import { listProjectContract, addProjectContract, delProjectContract } from "@/api/oa/contract/projectContract";
154 177
 import { listSubContract, getSubContract, delSubContract, addSubContract, updateSubContract } from "@/api/oa/contract/subContract";
155 178
 import { listProjectSubcontract, addProjectSubcontract, delProjectSubcontract } from '@/api/oa/contract/projectSubcontract'
179
+import { listContractSubcontract, delContractSubcontractByContractId, addContractSubcontract } from "@/api/oa/contract/contractSubcontract"
156 180
 import { listPartner, getPartner } from "@/api/oa/partner/partner";
157 181
 import { listProject, getProject } from "@/api/oa/project/project";
158 182
 import { listPartyA } from "@/api/oa/partyA/partyA";
@@ -163,10 +187,14 @@ import WorkTable from '@/views/flowable/form/business/components/workTable.vue';
163 187
 import paymentTable from '@/views/flowable/form/business/components/paymentTable.vue';
164 188
 import projectInfo from '@/views/oa/project/info'
165 189
 import ChoosePartner from '@/views/flowable/form/components/choosePartner.vue';
190
+import ChooseContract from '@/views/flowable/form/components/chooseContract.vue';
191
+import ContractForm from '@/views/flowable/form/business/contractForm.vue';
166 192
 export default {
167 193
   components: {
168 194
     chooseProject, chooseTender, ChoosePartyA, WorkTable, paymentTable, projectInfo,
169
-    ChoosePartner
195
+    ChoosePartner,
196
+    ChooseContract,
197
+    ContractForm,
170 198
   },
171 199
   props: {
172 200
     form: {
@@ -200,11 +228,20 @@ export default {
200 228
       projectContractForm: {
201 229
         projectIds: [],
202 230
       },
231
+      contractOpen: false,
232
+      connectContractList: [],
233
+      contractloading: true,
234
+      formOpen: false,
235
+      taskForm: {
236
+        formId: ''
237
+      }
203 238
     }
204 239
   },
205 240
   watch: {
206 241
     'form.contractId'() {
207
-      this.init();
242
+      // this.init();
243
+      this.getContractSubcontractList();
244
+      this.getProjectSubcontractList();
208 245
     }
209 246
   },
210 247
   created() {
@@ -214,23 +251,48 @@ export default {
214 251
   methods: {
215 252
     init() {
216 253
       this.getPartnerList();
254
+      this.getContractSubcontractList();
255
+      this.form.partnerId = this.form.partnerId ? this.form.partnerId.split(',') : null;
256
+      this.getContractCommentList();
257
+      this.getProjectSubcontractList();
258
+    },
259
+    getContractCommentList(){
217 260
       const subContractId = this.form.subContractId;
218
-      this.form.partnerId = this.form.partnerId ? this.form.partnerId.split(',') : null
219
-      Promise.all([listContractComment({ pageNum: 1, pageSize: 100, contractId: subContractId }), listProjectSubcontract({ subContractId: subContractId })])
220
-        .then(([res1, res2]) => {
221
-          if (res1.rows && res1.rows.length != 0) {
222
-            this.commentList = res1.rows;
223
-          }
224
-          if (res2.rows) {
225
-            let list = []
226
-            for (let row of res2.rows) {
227
-              getProject(row.projectId).then(response => {
228
-                list.push(response.data)
229
-              })
230
-            }
231
-            this.connectProjectList = list;
261
+      listContractComment({ pageNum: 1, pageSize: 100, contractId: subContractId }).then(res => {
262
+        if (res.rows && res.rows.length != 0) {
263
+          this.commentList = res.rows;
264
+        }
265
+      })
266
+    },
267
+    getProjectSubcontractList() {
268
+      const subContractId = this.form.subContractId;
269
+      listProjectSubcontract({ subContractId: subContractId }).then(res => {
270
+        if (res.rows) {
271
+          let list = []
272
+          for (let row of res.rows) {
273
+            getProject(row.projectId).then(response => {
274
+              list.push(response.data)
275
+            })
232 276
           }
233
-        })
277
+          this.connectProjectList = list;
278
+        }
279
+      })
280
+    },
281
+    // 获取关联承接合同
282
+    getContractSubcontractList() {
283
+      this.contractloading = true;
284
+      const subContractId = this.form.subContractId;
285
+      if(!subContractId) return
286
+      listContractSubcontract({ subContractId: subContractId }).then(async res => {
287
+        let list = []
288
+        for (let r of res.rows) {
289
+          let obj = await getContract(r.contractId)
290
+          list.push(obj.data)
291
+        }
292
+        console.log(res,subContractId);
293
+        this.connectContractList = list
294
+        this.contractloading = false;
295
+      })
234 296
     },
235 297
     // 查询承接单位列表
236 298
     getPartnerList() {
@@ -249,6 +311,7 @@ export default {
249 311
             for (let comment of this.commentList) {
250 312
               updateContractComment(comment);
251 313
             }
314
+            debugger
252 315
             if (this.form.partnerId)
253 316
               this.form.partnerId = this.form.partnerId.join(',')
254 317
             this.updateSubContractFn()
@@ -285,6 +348,11 @@ export default {
285 348
       return chooseTender.partyA.partyAName.includes(TARGET_COMPANY) ? '院内' : '院外';
286 349
     },
287 350
     confirmProject(val) {
351
+      let isSame = this.haveSameIds(val, this.connectProjectList, 'projectId');
352
+      if (isSame) {
353
+        this.$message.error('请勿重复添加已有项目')
354
+        return
355
+      }
288 356
       this.open = false
289 357
       for (let v of val) {
290 358
         this.projectContractForm.projectIds.push(v.projectId);
@@ -310,6 +378,20 @@ export default {
310 378
         this.form.partnerId = ids
311 379
       }
312 380
     },
381
+    async confirmContract(val) {
382
+      let isSame = this.haveSameIds([val], this.connectContractList, 'contractId');
383
+      if (isSame) {
384
+        this.$message.error('请勿重复添加已有的合同');
385
+        return
386
+      }
387
+      this.contractOpen = false;
388
+      this.connectContractList.push(val)
389
+      await addContractSubcontract({ contractId: val.contractId, subContractId: this.form.subContractId })
390
+
391
+    },
392
+    haveSameIds(arr1, arr2, key) {
393
+      return arr1.some(obj1 => arr2.some(obj2 => obj1[key] === obj2[key]))
394
+    },
313 395
     confirmPartyA(val) {
314 396
       this.partyAOpen = false
315 397
       if (val && val.length > 1) {
@@ -367,6 +449,14 @@ export default {
367 449
     handleDelete(index, row) {
368 450
       this.connectProjectList.splice(index, 1)
369 451
       this.projectContractForm.projectIds.splice(row.contractId)
452
+    },
453
+    clickContractFn(row) {
454
+      this.formOpen = true;
455
+      this.taskForm.formId = row.contractId
456
+    },
457
+    handleDeleteContract(index, row) {
458
+      this.connectContractList.splice(index, 1)
459
+      delContractSubcontractByContractId(row.contractId)
370 460
     }
371 461
   },
372 462
 }

+ 3
- 3
oa-ui/src/views/oa/contract/subContract.vue Parādīt failu

@@ -1,8 +1,8 @@
1 1
 <!--
2 2
  * @Author: ysh
3 3
  * @Date: 2024-06-21 18:52:00
4
- * @LastEditors: 
5
- * @LastEditTime: 2024-09-02 15:20:37
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2024-09-04 15:47:18
6 6
 -->
7 7
 <template>
8 8
   <div class="app-container">
@@ -107,7 +107,7 @@
107 107
       <sub-edit :form="form" @cancel="cancel()"></sub-edit>
108 108
     </el-dialog>
109 109
 
110
-    <el-dialog :title="title" :visible.sync="openInfo" append-to-body width="70%">
110
+    <el-dialog :title="title" :visible.sync="openInfo" append-to-body width="60%">
111 111
       <sub-contract :taskForm="taskForm" :taskName="''" :flowDisabled="false"></sub-contract>
112 112
     </el-dialog>
113 113
   </div>

Notiek ielāde…
Atcelt
Saglabāt