Переглянути джерело

修改承接合同、分包合同的修改事件

余思翰 9 місяці тому
джерело
коміт
2c75100c67

+ 10
- 1
oa-ui/src/views/flowable/form/business/components/paymentTable.vue Переглянути файл

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-08-29 15:21:42
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-08-30 17:23:40
5
+ * @LastEditTime: 2024-09-02 10:09:25
6 6
 -->
7 7
 <template>
8 8
   <div style="width:100%">
@@ -103,6 +103,15 @@ export default {
103 103
       listContractPayment({ pageNum: 1, pageSize: 100, contractId: this.contractId }).then(res => {
104 104
         if (res.rows.length > 0)
105 105
           this.paymentList = res.rows;
106
+        else {
107
+          this.paymentList = [{
108
+            paymentCondition: "",
109
+            paymentPercentage: "",
110
+            paymentAmount: "",
111
+            paymentTime: undefined,
112
+            remark: "",
113
+          }]
114
+        }
106 115
       });
107 116
     },
108 117
     deletPaymentItem(index) {

+ 14
- 4
oa-ui/src/views/flowable/form/business/components/workTable.vue Переглянути файл

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-08-29 15:21:42
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-08-29 16:01:51
5
+ * @LastEditTime: 2024-09-02 14:12:47
6 6
 -->
7 7
 <template>
8 8
   <div style="width:100%">
@@ -16,7 +16,7 @@
16 16
         <td style="width:150px">等级或比例尺</td>
17 17
         <td style="width:100px">单位</td>
18 18
         <td style="width:100px">工作量</td>
19
-        <td>要求完成时间</td>
19
+        <td style="width:150px">要求完成时间</td>
20 20
         <td>备注</td>
21 21
       </tr>
22 22
       <tr v-for="(work, index) in workList" :key="index">
@@ -39,11 +39,11 @@
39 39
           </el-select>
40 40
         </td>
41 41
         <td>
42
-          <el-input-number :controls="false" style="width: 60px" v-model="work.workload" clearable
42
+          <el-input-number :controls="false" style="width:100%;" v-model="work.workload" clearable
43 43
             :disabled="taskName != '合同拟稿'"></el-input-number>
44 44
         </td>
45 45
         <td>
46
-          <el-date-picker style="width: 140px" v-model="work.deadline" value-format="yyyy-MM-dd" type="date"
46
+          <el-date-picker style="width: 100%" v-model="work.deadline" value-format="yyyy-MM-dd" type="date"
47 47
             placeholder="选择日期" :disabled="taskName != '合同拟稿'">
48 48
           </el-date-picker>
49 49
         </td>
@@ -104,6 +104,16 @@ export default {
104 104
       listContractWork({ pageNum: 1, pageSize: 100, contractId: this.contractId }).then(res => {
105 105
         if (res.rows.length > 0)
106 106
           this.workList = res.rows;
107
+        else{
108
+          this.workList = [{
109
+        content: "",
110
+        scale: "",
111
+        unit: "",
112
+        workload: "",
113
+        deadline: undefined,
114
+        remark: "",
115
+      }]
116
+        }
107 117
       });
108 118
     },
109 119
     deletWorkItem(index) {

+ 2
- 2
oa-ui/src/views/flowable/form/business/contractForm.vue Переглянути файл

@@ -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-08-30 14:37:25
5
+ * @LastEditTime: 2024-09-02 11:31:23
6 6
 -->
7 7
 <template>
8 8
   <div class="app-container">
@@ -168,7 +168,7 @@
168 168
                 </td>
169 169
                 <td @click="clickFile(comment)">
170 170
                   <FileUpload v-if="comment.document == '' || comment.document == null" ref="hs" :limit="1"
171
-                    :filePathName="'承接合同/线上会审意见'"
171
+                    :filePathName="'承接合同/线上会审意见'" :isShowTip="false"
172 172
                     :disabled="taskName != '线上会审' || (taskName == '线上会审' && comment.userId != userId)"
173 173
                     :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf', 'rar', 'zip']" @input="setCommentDocument">
174 174
                   </FileUpload>

+ 38
- 183
oa-ui/src/views/flowable/form/business/subContract.vue Переглянути файл

@@ -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-08-28 15:51:59
5
+ * @LastEditTime: 2024-09-02 11:24:50
6 6
 -->
7 7
 <template>
8 8
   <div class="app-container">
@@ -10,20 +10,6 @@
10 10
       <el-col :span="flowDisabled ? 18 : 24" :xs="24">
11 11
         <h2 class="text-center">分包合同评审表</h2>
12 12
         <el-form ref="form" :model="form" :rules="rules" label-width="130px" :formDisabled="formDisabled">
13
-          <el-divider></el-divider>
14
-          <el-form-item label="关联项目:" prop="projectId">
15
-            <el-button type="primary" size="mini" @click="open = true" v-if="taskName == '合同拟稿'">选择项目</el-button>
16
-            <el-table :data="chooseProjectList" border v-if="isSelect">
17
-              <el-table-column type="index" width="50" label="序号" />
18
-              <el-table-column label="项目编号" align="center" key="projectNumber" prop="projectNumber" />
19
-              <el-table-column label="项目名称" align="center" key="projectName" prop="projectName" />
20
-              <el-table-column label="项目负责人" align="center" key="projectLeaderName" prop="projectLeaderUser.nickName" />
21
-              <el-table-column label="主合同编码" align="center" key="contractCode" prop="contractCode" />
22
-              <el-table-column label="主合同编号" align="center" key="contractNumber" prop="contractNumber" />
23
-              <el-table-column label="主合同金额" align="center" key="amount" prop="amount" />
24
-            </el-table>
25
-          </el-form-item>
26
-
27 13
           <el-divider></el-divider>
28 14
           <el-row :gutter="20">
29 15
             <el-col :span="16" :xs="24">
@@ -43,7 +29,7 @@
43 29
             <el-col :span="16" :xs="24">
44 30
               <el-form-item label="承接单位" prop="partnerId">
45 31
                 <el-select allow-create v-model="form.partnerId" multiple filterable placeholder="请选择"
46
-                  :style="taskName == '合同拟稿' ? {width: '84%' }: {width: '100%' }" disabled clearable>
32
+                  :style="taskName == '合同拟稿' ? { width: '84%' } : { width: '100%' }" disabled clearable>
47 33
                   <el-option v-for="item in partnerList" :key="item.value" :label="item.partnerName"
48 34
                     :value="item.partnerId">
49 35
                   </el-option>
@@ -83,112 +69,33 @@
83 69
               </el-form-item>
84 70
             </el-col>
85 71
           </el-row>
86
-          <table border="1" style="width:100%">
87
-            <tr>
88
-              <td :colspan="8" style="background-color: #f8f8f9;line-height:40px"><strong>表1:合同计划工作量</strong></td>
89
-            </tr>
90
-            <tr>
91
-              <td style="width: 50px;">序号</td>
92
-              <td style="min-width:250px">工作内容</td>
93
-              <td style="width:150px">等级或比例尺</td>
94
-              <td style="width:100px">单位</td>
95
-              <td style="width:100px">工作量</td>
96
-              <td>要求完成时间</td>
97
-              <td>备注</td>
98
-            </tr>
99
-            <tr v-for="(work, index) in workList" :key="index">
100
-              <td>
101
-                {{ index + 1 }}
102
-              </td>
103
-              <td>
104
-                <el-input v-model="work.content" type="textarea" clearable :autosize="{ minRows: 4 }"
105
-                  :disabled="taskName != '合同拟稿'"></el-input>
106
-              </td>
107
-              <td>
108
-                <el-select v-model="work.scale" placeholder="请选择" clearable :disabled="taskName != '合同拟稿'">
109
-                  <el-option v-for="dict in dict.type.cmc_scale_grade" :key="dict.value" :label="dict.label"
110
-                    :value="dict.label" />
111
-                </el-select>
112
-              </td>
113
-              <td>
114
-                <el-select v-model="work.unit" placeholder="请选择" clearable :disabled="taskName != '合同拟稿'">
115
-                  <el-option v-for="dict in dict.type.cmc_unit" :key="dict.value" :label="dict.label"
116
-                    :value="dict.label" />
117
-                </el-select>
118
-              </td>
119
-              <td>
120
-                <el-input v-model="work.workload" clearable :disabled="taskName != '合同拟稿'"></el-input>
121
-              </td>
122
-              <td>
123
-                <el-date-picker style="width: 140px" v-model="work.deadline" value-format="yyyy-MM-dd" type="date"
124
-                  placeholder="选择日期" :disabled="taskName != '合同拟稿'">
125
-                </el-date-picker>
126
-              </td>
127
-              <td>
128
-                <el-input v-model="work.remark" type="textarea" clearable :autosize="{ minRows: 4 }"
129
-                  :disabled="taskName != '合同拟稿'"></el-input>
130
-              </td>
131
-              <td v-show="taskName == '合同拟稿'">
132
-                <div class="delete-btn" @click="deletWorkItem(index)">
133
-                  <i class="el-icon-circle-close"></i>
134
-                </div>
135
-              </td>
136
-            </tr>
137
-          </table>
138
-          <el-button icon="el-icon-plus" size="mini" @click="addWorkList()" type="primary" plain
139
-            :disabled="taskName != '合同拟稿'"></el-button>
72
+          <el-form-item label="关联项目" prop="projectId">
73
+            <el-button type="primary" size="mini" @click="open = true" v-if="taskName == '合同拟稿'">选择项目</el-button>
74
+            <el-table :data="chooseProjectList" border v-if="isSelect">
75
+              <el-table-column type="index" width="50" label="序号" />
76
+              <el-table-column label="项目编号" align="center" key="projectNumber" prop="projectNumber" />
77
+              <el-table-column label="项目名称" align="center" key="projectName" prop="projectName" />
78
+              <el-table-column label="项目负责人" align="center" key="projectLeaderName" prop="projectLeaderUser.nickName" />
79
+              <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" /> -->
83
+            </el-table>
84
+          </el-form-item>
85
+
86
+          <el-divider></el-divider>
87
+          <!-- 表1:合同计划工作量 -->
88
+          <work-table ref="workTableRef" :contractId="taskForm.formId" :taskName="taskName"></work-table>
140 89
 
141 90
           <p class="mb20 mt20"></p>
142 91
 
143 92
           <!-- 表2:合同回款计划  -->
144
-          <table border="1" style="width:100%">
145
-            <tr>
146
-              <td :colspan="8" style="background-color: #f8f8f9;line-height:40px"><strong>表2:合同回款计划</strong></td>
147
-            </tr>
148
-            <tr>
149
-              <td style="width: 50px;">序号</td>
150
-              <td style="min-width:350px">回款条件</td>
151
-              <td>回款比例(%)</td>
152
-              <td>回款金额(元)</td>
153
-              <td>预计时间</td>
154
-              <td>备注</td>
155
-            </tr>
156
-            <tr v-for="(payment, index) in paymentList" :key="index">
157
-              <td>
158
-                {{ index + 1 }}
159
-              </td>
160
-              <td>
161
-                <el-input v-model="payment.paymentCondition" type="textarea" clearable
162
-                  :autosize="{ minRows: 4 }" :disabled="taskName != '合同拟稿'"></el-input>
163
-              </td>
164
-              <td>
165
-                <el-input-number :controls="false" style="width:100%" v-model="payment.paymentPercentage" clearable
166
-                  @change="calculatePaymentAmount(payment)" :disabled="taskName != '合同拟稿'"></el-input-number>
167
-              </td>
168
-              <td>
169
-                <el-input-number :controls="false" style="width:100%" v-model="payment.paymentAmount" clearable
170
-                  :disabled="taskName != '合同拟稿'"></el-input-number>
171
-              </td>
172
-              <td>
173
-                <el-date-picker style="width: 140px" v-model="payment.paymentTime" value-format="yyyy-MM-dd" type="date"
174
-                  placeholder="选择日期" :disabled="taskName != '合同拟稿'">
175
-                </el-date-picker>
176
-              </td>
177
-              <td>
178
-                <el-input v-model="payment.remark" type="textarea" clearable :autosize="{ minRows: 4 }"
179
-                  :disabled="taskName != '合同拟稿'"></el-input>
180
-              </td>
181
-              <td v-show="taskName == '合同拟稿'">
182
-                <div class="delete-btn" @click="deletPaymentItem(index)">
183
-                  <i class="el-icon-circle-close"></i>
184
-                </div>
185
-              </td>
186
-            </tr>
187
-          </table>
188
-          <el-button icon="el-icon-plus" size="mini" @click="addPaymentList()" type="primary" plain
189
-            :disabled="taskName != '合同拟稿'"></el-button>
93
+          <payment-table ref="paymentRef" :contractId="taskForm.formId" :amount="form.subAmount"
94
+            :taskName="taskName"></payment-table>
95
+
190 96
           <el-form-item label="合同备注" prop="remark">
191
-            <el-input type="textarea" v-model="form.remark" :autosize="{ minRows: 4 }" placeholder="请输入合同备注" :disabled="taskName != '合同拟稿'" />
97
+            <el-input type="textarea" v-model="form.remark" :autosize="{ minRows: 4 }" placeholder="请输入合同备注"
98
+              :disabled="taskName != '合同拟稿'" />
192 99
           </el-form-item>
193 100
           <el-row>
194 101
             <el-col :span="6" :xs="24" :offset="11">
@@ -247,7 +154,7 @@
247 154
                 <!-- 线上会审附件 -->
248 155
                 <td @click="clickFile(comment)">
249 156
                   <FileUpload v-if="comment.document == '' || comment.document == null" ref="hs" :limit="1"
250
-                    :filePathName="'分包合同/线上会审意见'"
157
+                    :filePathName="'分包合同/线上会审意见'" :isShowTip="false"
251 158
                     :disabled="taskName != '线上会审' || (taskName == '线上会审' && comment.userId != userId)"
252 159
                     :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf', 'rar', 'zip']" @input="setCommentDocument">
253 160
                   </FileUpload>
@@ -461,13 +368,17 @@ import projectChoose from '../components/chooseProject.vue';
461 368
 import FileItem from './fileItem.vue';
462 369
 import { mapGetters } from "vuex";
463 370
 import ChoosePartner from '../components/choosePartner.vue';
371
+import workTable from './components/workTable.vue';
372
+import paymentTable from './components/paymentTable.vue';
464 373
 export default {
465 374
   dicts: ['cmc_scale_grade', 'cmc_unit'],
466 375
   components: {
467 376
     flow,
468 377
     projectChoose,
469 378
     FileItem,
470
-    ChoosePartner
379
+    ChoosePartner,
380
+    workTable,
381
+    paymentTable
471 382
   },
472 383
   props: {
473 384
     taskName: {
@@ -568,21 +479,8 @@ export default {
568 479
       deptList: [],
569 480
       userList: [],
570 481
       users: undefined,
571
-      workList: [{
572
-        content: "",
573
-        scale: "",
574
-        unit: "",
575
-        workload: "",
576
-        deadline: undefined,
577
-        remark: "",
578
-      }],
579
-      paymentList: [{
580
-        paymentCondition: "",
581
-        paymentPercentage: "",
582
-        paymentAmount: "",
583
-        paymentTime: undefined,
584
-        remark: "",
585
-      }],
482
+      workList: [],
483
+      paymentList: [],
586 484
       placeList: [{ id: '0', name: '301会议室' }, { id: '1', name: '216会议室' }],
587 485
       commentList: [
588 486
         {
@@ -711,14 +609,6 @@ export default {
711 609
               })
712 610
             }
713 611
           })
714
-          listContractWork({ pageNum: 1, pageSize: 100, contractId: this.taskForm.formId }).then(res => {
715
-            if (res.rows)
716
-              this.workList = res.rows;
717
-          });
718
-          listContractPayment({ pageNum: 1, pageSize: 100, contractId: this.taskForm.formId }).then(res => {
719
-            if (res.rows)
720
-              this.paymentList = res.rows;
721
-          });
722 612
           listContractComment({ contractId: this.taskForm.formId }).then(res => {
723 613
             if (res.rows && res.rows.length != 0) {
724 614
               this.commentList = res.rows;
@@ -837,25 +727,6 @@ export default {
837 727
       }
838 728
       return true;
839 729
     },
840
-    addWorkList() {
841
-      this.workList.push({
842
-        content: "",
843
-        scale: "",
844
-        unit: "",
845
-        workload: "",
846
-        deadline: undefined,
847
-        remark: "",
848
-      });
849
-    },
850
-    addPaymentList() {
851
-      this.paymentList.push({
852
-        paymentCondition: "",
853
-        paymentPercentage: "",
854
-        paymentAmount: "",
855
-        paymentTime: undefined,
856
-        remark: "",
857
-      });
858
-    },
859 730
     addCommentList() {
860 731
       this.commentList.push({
861 732
         deptId: "",
@@ -865,24 +736,6 @@ export default {
865 736
         commentTime: undefined,
866 737
       });
867 738
     },
868
-    deletWorkItem(index) {
869
-      let arr = this.workList;
870
-      if (arr.length == 1) {
871
-        return;
872
-      }
873
-      if (index >= 0 && index < arr.length) {
874
-        arr.splice(index, 1);
875
-      }
876
-    },
877
-    deletPaymentItem(index) {
878
-      let arr = this.paymentList;
879
-      if (arr.length == 1) {
880
-        return;
881
-      }
882
-      if (index >= 0 && index < arr.length) {
883
-        arr.splice(index, 1);
884
-      }
885
-    },
886 739
     deletCommentItem(index) {
887 740
       let arr = this.commentList;
888 741
       if (arr.length == 1) {
@@ -930,6 +783,8 @@ export default {
930 783
     },
931 784
     // 保存信息
932 785
     saves() {
786
+      this.workList = this.$refs.workTableRef.workList;
787
+      this.paymentList = this.$refs.paymentRef.paymentList;
933 788
       if (this.formTotal != 0) {
934 789
         if (this.form.partnerId)
935 790
           this.form.partnerId = this.form.partnerId.join(',')
@@ -968,6 +823,8 @@ export default {
968 823
     },
969 824
     /** 提交按钮 */
970 825
     submitForm() {
826
+      this.workList = this.$refs.workTableRef.workList;
827
+      this.paymentList = this.$refs.paymentRef.paymentList;
971 828
       // let isProjectValid = this.validateManual(this.chooseProjectList);
972 829
       let isDocValid = this.validateDocument(this.form.contractDocument)
973 830
       if (!isDocValid) {
@@ -1099,6 +956,8 @@ export default {
1099 956
       }
1100 957
     },
1101 958
     updateChooseProjectList() {
959
+      this.workList = this.$refs.workTableRef.workList;
960
+      this.paymentList = this.$refs.paymentRef.paymentList;
1102 961
       const subContractId = this.taskForm.formId
1103 962
       delProjectSubcontract(subContractId).then(() => {
1104 963
         this.chooseProjectList.forEach(item => {
@@ -1258,10 +1117,6 @@ export default {
1258 1117
       }
1259 1118
       return true;
1260 1119
     },
1261
-    calculatePaymentAmount(payment) {
1262
-      let amount = (payment.paymentPercentage / 100) * this.form.subAmount
1263
-      this.$set(payment, 'paymentAmount', Number(amount).toFixed(2))
1264
-    },
1265 1120
   }
1266 1121
 };
1267 1122
 </script>

+ 1
- 1
oa-ui/src/views/flowable/form/components/chooseContract.vue Переглянути файл

@@ -37,7 +37,7 @@
37 37
       </el-pagination>
38 38
     </div>
39 39
     <div>
40
-      已选项目:<el-tag>{{ choosePContract.tender.projectName }}</el-tag>
40
+      已选合同:<el-tag>{{ choosePContract.tender.projectName }}</el-tag>
41 41
     </div>
42 42
     <div style="text-align: center;margin-top: 20px;">
43 43
       <el-button type="primary" @click="confirmChoose">确认选择</el-button>

+ 128
- 0
oa-ui/src/views/flowable/form/components/chooseSubcontract.vue Переглянути файл

@@ -0,0 +1,128 @@
1
+<template>
2
+  <div class="app-container">
3
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="68px">
4
+      <el-form-item label="合同名称" prop="subContractName">
5
+        <el-input v-model="queryParams.subContractName" placeholder="请输入合同名称" clearable
6
+          @keyup.enter.native="handleQuery" />
7
+      </el-form-item>
8
+      <el-form-item label="承接单位" prop="partnerId">
9
+        <el-select v-model="queryParams.partnerId" clearable filterable remote reserve-keyword placeholder="请输入承接单位"
10
+          :remote-method="remoteMethod" :loading="loading" style="width: 400px;" @change="handleQuery">
11
+          <el-option v-for="partner in partnerList" :key="partner.partnerId" :label="partner.partnerName"
12
+            :value="partner.partnerId">
13
+          </el-option>
14
+        </el-select>
15
+      </el-form-item>
16
+      <el-form-item>
17
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
18
+      </el-form-item>
19
+    </el-form>
20
+
21
+    <el-table ref="chooseRef" v-loading="loading" border :data="subContractList" :row-key="getRowKeys"
22
+      @selection-change="handleSelectionChange">
23
+      <el-table-column type="selection" width="55" align="center" :reserve-selection="true" />
24
+      <el-table-column type="index" label="序号" width="55" align="center" />
25
+      <el-table-column label="合同名称" align="center" prop="subContractName" />
26
+      <el-table-column label="承接单位" align="center" prop="partner.partnerName" />
27
+      <el-table-column label="分包合同金额" align="center" prop="subAmount" width="120" />
28
+    </el-table>
29
+    <div style="text-align: right;" class="mt20 mr20">
30
+      <el-pagination @current-change="getList" :current-page.sync="queryParams.pageNum"
31
+        :page-size="queryParams.pageSize" layout="total, prev, pager, next" :total="total">
32
+      </el-pagination>
33
+    </div>
34
+    <el-divider></el-divider>
35
+    <div>
36
+      已选合同:
37
+      <el-tag v-for="item in chooseList" style="margin: 5px;" :key="item.subContractId">
38
+        {{ item.subContractName }}
39
+      </el-tag>
40
+    </div>
41
+    <div style="text-align: center;margin-top: 20px;">
42
+      <el-button type="primary" @click="confirmChoose">确认选择</el-button>
43
+      <el-button @click="clearChoose">清空选择</el-button>
44
+    </div>
45
+  </div>
46
+</template>
47
+
48
+<script>
49
+import { listSubContract, getSubContract, delSubContract, addSubContract, updateSubContract } from "@/api/oa/contract/subContract";
50
+import { listPartner } from "@/api/oa/partner/partner";
51
+export default {
52
+  data() {
53
+    return {
54
+      loading: false,
55
+      total: 0,
56
+      queryParams: {
57
+        pageNum: 1,
58
+        pageSize: 10,
59
+        contractId: null,
60
+        subContractName: null,
61
+        subAmount: null,
62
+        partnerId: null,
63
+        contactPerson: null,
64
+        drafter: null,
65
+        draftTime: null,
66
+        signDate: null,
67
+        signRemark: null,
68
+        signScan: null,
69
+        commentType: null
70
+      },
71
+      subContractList: [],
72
+      chooseList: [],
73
+      partnerList: [],
74
+    }
75
+  },
76
+  created() {
77
+    this.getList();
78
+  },
79
+  methods: {
80
+    /** 查询cmc分包合同评审列表 */
81
+    getList() {
82
+      this.loading = true;
83
+      listSubContract(this.queryParams).then(response => {
84
+        this.subContractList = response.rows;
85
+        this.total = response.total;
86
+        this.loading = false;
87
+      });
88
+    },
89
+    /** 搜索按钮操作 */
90
+    handleQuery() {
91
+      this.queryParams.pageNum = 1;
92
+      this.getList();
93
+    },
94
+    remoteMethod(val) {
95
+      listPartner({
96
+        pageNum: 1,
97
+        pageSize: 20,
98
+        partnerName: val
99
+      }).then(res => {
100
+        this.partnerList = res.rows;
101
+      })
102
+    },
103
+    handleSelectionChange(val) {
104
+      this.chooseList = val
105
+    },
106
+    setCommentType(commentType) {
107
+      if (commentType == '2') {
108
+        return '线上评审'
109
+      } else if (commentType == '0') {
110
+        return '无须评审'
111
+      } else {
112
+        return '会议评审'
113
+      }
114
+    },
115
+    getRowKeys(row) {
116
+      return row.subContractId;
117
+    },
118
+    confirmChoose() {
119
+      this.$emit('choose', this.chooseList)
120
+    },
121
+    clearChoose() {
122
+      this.$refs.chooseRef.clearSelection();
123
+    }
124
+  },
125
+}
126
+</script>
127
+
128
+<style lang="scss" scoped></style>

+ 83
- 11
oa-ui/src/views/oa/contract/components/edit.vue Переглянути файл

@@ -3,7 +3,8 @@
3 3
     <el-form ref="form" :model="form" :rules="rules" label-width="130px">
4 4
       <el-form-item label="投标项目名称" prop="tenderId">
5 5
         <el-button type="primary" size="mini" @click="tbOpen = true">选择投标项目</el-button>
6
-        <el-button type="danger" size="mini" @click="form.tenderId = null" v-if="form.tenderId != null">删除投标项目</el-button>
6
+        <el-button type="danger" size="mini" @click="form.tenderId = null"
7
+          v-if="form.tenderId != null">删除投标项目</el-button>
7 8
         <el-descriptions border v-if="form.tenderId" style="margin-top: 10px;" :column="1">
8 9
           <el-descriptions-item label="投标项目名称" label-class-name="my-label" :span="3">
9 10
             {{ chooseTender.projectName }}
@@ -61,7 +62,7 @@
61 62
       </el-form-item>
62 63
       <el-form-item label="关联项目:" prop="projectIds">
63 64
         <el-button type="primary" size="mini" @click="open = true" icon="el-icon-plus">新增关联项目</el-button>
64
-        <el-table v-loading="projectloading" :data="connectProjectList">
65
+        <el-table v-loading="projectloading" border :data="connectProjectList">
65 66
           <el-table-column label="序号" type="index" width="50px"></el-table-column>
66 67
           <el-table-column label="项目编号" align="center" prop="projectNumber"></el-table-column>
67 68
           <el-table-column label="项目名称" align="center" prop="projectName"></el-table-column>
@@ -71,13 +72,26 @@
71 72
             <template slot-scope="scope">
72 73
               <el-button type="text" icon="el-icon-view" @click="clickProjectFn(scope.row)">查看</el-button>
73 74
               <el-button type="text" style="color:#F56C6C;" icon="el-icon-delete"
74
-                @click="handleDelete(scope.$index,scope.row)">删除</el-button>
75
+                @click="handleDelete(scope.$index, scope.row)">删除</el-button>
75 76
             </template>
76 77
           </el-table-column>
77 78
         </el-table>
78 79
       </el-form-item>
79 80
       <el-form-item label="关联分包合同:">
80
-
81
+        <el-button type="primary" size="mini" @click="subOpen = true" icon="el-icon-plus">新增分包合同</el-button>
82
+        <el-table v-loading="subloading" border :data="connectSubContractList">
83
+          <el-table-column type="index" label="序号" width="55" align="center" />
84
+          <el-table-column label="合同名称" align="center" prop="subContractName" />
85
+          <el-table-column label="承接单位" align="center" prop="partner.partnerName" />
86
+          <el-table-column label="分包合同金额" align="center" prop="subAmount" width="120" />
87
+          <el-table-column label="操作" align="center">
88
+            <template slot-scope="scope">
89
+              <el-button type="text" icon="el-icon-view" @click="clickSubFn(scope.row)">查看</el-button>
90
+              <el-button type="text" style="color:#F56C6C;" icon="el-icon-delete"
91
+                @click="handleDeleteSub(scope.$index, scope.row)">删除</el-button>
92
+            </template>
93
+          </el-table-column>
94
+        </el-table>
81 95
       </el-form-item>
82 96
       <!-- 表1:工作量计划-->
83 97
       <work-table ref="workTableRef" :contractId="form.contractId" :taskName="'合同拟稿'"></work-table>
@@ -91,8 +105,8 @@
91 105
         <el-input v-model="form.remark" :autosize="{ minRows: 4 }" type="textarea" placeholder="请输入合同备注" />
92 106
       </el-form-item>
93 107
 
94
-
95 108
       <el-divider></el-divider>
109
+
96 110
       <el-form-item label="拟稿日期" prop="draftTime">
97 111
         <el-date-picker clearable v-model="form.draftTime" type="date" value-format="yyyy-MM-dd" placeholder="请选择拟稿日期">
98 112
         </el-date-picker>
@@ -161,6 +175,9 @@
161 175
     <el-dialog title="选择投标项目" :visible.sync="tbOpen" width="60%" append-to-body>
162 176
       <choose-tender @choose="confirmTender"></choose-tender>
163 177
     </el-dialog>
178
+    <el-dialog :visible.sync="subOpen" title="选择分包合同" :size="'70%'" append-to-body>
179
+      <choose-subcontract @choose="confirmSubContract"></choose-subcontract>
180
+    </el-dialog>
164 181
     <el-drawer :visible.sync="partyAOpen" title="选择甲方单位" :size="'40%'" append-to-body>
165 182
       <div class="app-container">
166 183
         <choose-party-a @confirm="confirmPartyA"></choose-party-a>
@@ -169,6 +186,9 @@
169 186
     <el-drawer :visible.sync="drawerOpen" title="" :size="'70%'" append-to-body>
170 187
       <projectInfo :needReturn="false"></projectInfo>
171 188
     </el-drawer>
189
+    <el-drawer :visible.sync="subInfoOpen" title="" :size="'55%'" append-to-body>
190
+      <sub-contract :taskForm="taskForm" :taskName="''" :formDisabled="true" :flowDisabled="false"></sub-contract>
191
+    </el-drawer>
172 192
   </div>
173 193
 
174 194
 </template>
@@ -178,7 +198,9 @@ import { listContractWork, addContractWork, delContractWork } from "@/api/oa/con
178 198
 import { listContractPayment, addContractPayment, delContractPayment } from "@/api/oa/contract/contractPayment";
179 199
 import { listContractComment, addContractComment, updateContractComment } from "@/api/oa/contract/contractComment";
180 200
 import { listContract, getContract, delContract, addContract, updateContract } from "@/api/oa/contract/contract";
201
+import { listSubContract, getSubContract, delSubContract, addSubContract, updateSubContract } from "@/api/oa/contract/subContract";
181 202
 import { listProjectContract, addProjectContract, delProjectContract } from "@/api/oa/contract/projectContract";
203
+import { listContractSubcontract, delContractSubcontract, addContractSubcontract } from "@/api/oa/contract/contractSubcontract"
182 204
 import { listProject, getProject } from "@/api/oa/project/project";
183 205
 import { listPartyA } from "@/api/oa/partyA/partyA";
184 206
 import chooseProject from "@/views/flowable/form/components/chooseProject.vue";
@@ -187,8 +209,10 @@ import ChoosePartyA from '@/views/flowable/form/components/choosePartyA.vue';
187 209
 import WorkTable from '@/views/flowable/form/business/components/workTable.vue';
188 210
 import paymentTable from '@/views/flowable/form/business/components/paymentTable.vue';
189 211
 import projectInfo from '@/views/oa/project/info'
212
+import ChooseSubcontract from '@/views/flowable/form/components/chooseSubcontract.vue';
213
+import SubContract from '@/views/flowable/form/business/subContract.vue';
190 214
 export default {
191
-  components: { chooseProject, chooseTender, ChoosePartyA, WorkTable, paymentTable, projectInfo },
215
+  components: { chooseProject, chooseTender, ChoosePartyA, WorkTable, paymentTable, projectInfo, ChooseSubcontract, SubContract },
192 216
   props: {
193 217
     form: {
194 218
       type: Object
@@ -201,6 +225,8 @@ export default {
201 225
       tbOpen: false,
202 226
       partyAOpen: false,
203 227
       drawerOpen: false,
228
+      subInfoOpen: false,
229
+      subOpen: false,
204 230
       commentList: [],
205 231
       workList: [],
206 232
       paymentList: [],
@@ -215,10 +241,16 @@ export default {
215 241
         ],
216 242
       },
217 243
       projectloading: false,
244
+      subloading: false,
218 245
       connectProjectList: [],
246
+      connectSubContractList: [],
247
+      deleteSubList: [],
219 248
       projectContractForm: {
220 249
         projectIds: [],
221 250
       },
251
+      taskForm: {
252
+        formId: ''
253
+      }
222 254
     }
223 255
   },
224 256
   watch: {
@@ -235,23 +267,34 @@ export default {
235 267
       const contractId = this.form.contractId;
236 268
       this.chooseTender = this.form.tender;
237 269
       const tenderId = this.form.tenderId;
270
+      this.connectProjectList = [];
271
+      this.connectSubContractList = [];
272
+      this.deleteSubList = [];
273
+      this.projectloading = true;
274
+      this.subloading = true;
238 275
       listContractComment({ pageNum: 1, pageSize: 100, contractId: contractId }).then(res => {
239 276
         if (res.rows && res.rows.length != 0) {
240 277
           this.commentList = res.rows;
241 278
         }
242 279
       })
243
-      listProjectContract({ contractId: contractId }).then(res => {
280
+      listProjectContract({ contractId: contractId }).then(async res => {
244 281
         if (res.rows) {
245 282
           let list = []
246 283
           for (let row of res.rows) {
247
-            getProject(row.projectId).then(response => {
248
-              list.push(response.data)
249
-            })
284
+            let response = await getProject(row.projectId)
285
+            list.push(response.data)
250 286
           }
251 287
           this.connectProjectList = list;
252 288
           this.projectloading = false;
253 289
         }
254 290
       })
291
+      listContractSubcontract({ contractId: contractId }).then(async res => {
292
+        for (let r of res.rows) {
293
+          let obj = await getSubContract(r.subContractId)
294
+          this.connectSubContractList.push(obj.data)
295
+        }
296
+        this.subloading = false;
297
+      })
255 298
     },
256 299
     /** 提交按钮 */
257 300
     submitForm() {
@@ -263,6 +306,7 @@ export default {
263 306
             }
264 307
             this.updateContractData();
265 308
             this.updateRelatedProject();
309
+            this.updateRelatedSub();
266 310
             this.$emit('cancel')
267 311
           }
268 312
         }
@@ -321,6 +365,12 @@ export default {
321 365
         this.$set(this.form, 'partyAId', val[0].partyAId)
322 366
       }
323 367
     },
368
+    confirmSubContract(val) {
369
+      this.subOpen = false
370
+      for (let v of val) {
371
+        this.connectSubContractList.push(v)
372
+      }
373
+    },
324 374
     getContractPath(val) {
325 375
       let arr = val.split('/upload')
326 376
       this.form.contractDocument = arr[1]
@@ -355,6 +405,20 @@ export default {
355 405
         }
356 406
       })
357 407
     },
408
+    updateRelatedSub() {
409
+      let subIds = this.deleteSubList.map(item => item.subContractId);
410
+      console.log(subIds);
411
+      delContractSubcontract(subIds).then(() => {
412
+        this.connectSubContractList.forEach(item => {
413
+          item.contractId = this.form.contractId;
414
+          let obj = {
415
+            contractId: this.form.contractId,
416
+            subContractId: item.subContractId
417
+          }
418
+          addContractSubcontract(obj)
419
+        })
420
+      })
421
+    },
358 422
     clickProjectFn(row) {
359 423
       this.$router.replace({ query: { ...this.$route.query, projectId: row.projectId } });
360 424
       this.drawerOpen = true;
@@ -362,7 +426,15 @@ export default {
362 426
     handleDelete(index, row) {
363 427
       this.connectProjectList.splice(index, 1)
364 428
       this.projectContractForm.projectIds.splice(row.contractId)
365
-    }
429
+    },
430
+    clickSubFn(row) {
431
+      this.taskForm.formId = row.subContractId
432
+      this.subInfoOpen = true
433
+    },
434
+    handleDeleteSub(index, row) {
435
+      this.deleteSubList.push(row)
436
+      this.connectSubContractList.splice(index, 1)
437
+    },
366 438
   },
367 439
 }
368 440
 </script>

+ 401
- 0
oa-ui/src/views/oa/contract/components/subEdit.vue Переглянути файл

@@ -0,0 +1,401 @@
1
+<template>
2
+  <div class="app-container">
3
+    <el-form ref="form" :model="form" :rules="rules" label-width="130px">
4
+      <el-form-item label="合同名称" prop="subContractName">
5
+        <el-input style="width: 100%;" v-model="form.subContractName" placeholder="请输入合同名称"></el-input>
6
+      </el-form-item>
7
+      <el-form-item label="承接单位" prop="partnerId">
8
+        <el-select style="width:84%;" v-model="form.partnerId" multiple filterable placeholder="请选择" disabled clearable>
9
+          <el-option v-for="item in partnerList" :key="item.value" :label="item.partnerName" :value="item.partnerId">
10
+          </el-option>
11
+        </el-select>
12
+        <el-button type="primary" @click="partnerOpen = true" size="mini">选择单位</el-button>
13
+      </el-form-item>
14
+      <el-form-item label="联系人" prop="contactPerson">
15
+        <el-input v-model="form.contactPerson" placeholder="请输入联系人" />
16
+      </el-form-item>
17
+      <el-form-item label="联系电话" prop="telephone">
18
+        <el-input v-model="form.telephone" placeholder="请输入联系电话" />
19
+      </el-form-item>
20
+      <el-form-item label="分包合同金额" prop="subAmount">
21
+        <el-input-number :controls="false" v-model="form.subAmount" placeholder="请输入分包合同金额" />(元)
22
+      </el-form-item>
23
+      <el-form-item label="合同文件" prop="contractDocument">
24
+        <FileUpload ref="contractFile" :limit="1" :filePathName="'承接合同/合同文件'" :isModify="true" :isShowTip="false"
25
+          :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf', 'rar', 'zip']" @input="getContractPath">
26
+        </FileUpload>
27
+        <div>
28
+          <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + form.contractDocument}`)">
29
+            {{ getFileName(form.contractDocument) }}
30
+          </el-link>
31
+          <el-link class="ml20" type="warning" :href="`${baseUrl}${'/profile/upload' + form.contractDocument}`"
32
+            :underline="false" target="_blank">
33
+            <span class="el-icon-download">下载文件</span>
34
+          </el-link>
35
+        </div>
36
+      </el-form-item>
37
+      <el-form-item label="关联项目:" prop="projectId">
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">
40
+          <el-table-column type="index" width="50" label="序号" />
41
+          <el-table-column label="项目编号" align="center" key="projectNumber" prop="projectNumber" />
42
+          <el-table-column label="项目名称" align="center" key="projectName" prop="projectName" />
43
+          <el-table-column label="项目负责人" align="center" key="projectLeaderName" prop="projectLeaderUser.nickName" />
44
+          <el-table-column label="承担部门" align="center" prop="undertakingDeptName"></el-table-column>
45
+          <el-table-column label="操作" align="center">
46
+            <template slot-scope="scope">
47
+              <el-button type="text" icon="el-icon-view" @click="clickProjectFn(scope.row)">查看</el-button>
48
+              <el-button type="text" style="color:#F56C6C;" icon="el-icon-delete"
49
+                @click="handleDelete(scope.$index, scope.row)">删除</el-button>
50
+            </template>
51
+          </el-table-column>
52
+        </el-table>
53
+      </el-form-item>
54
+      <!-- 表1:工作量计划-->
55
+      <work-table ref="workTableRef" :contractId="form.subContractId" :taskName="'合同拟稿'"></work-table>
56
+
57
+      <p class="mb20 mt20"></p>
58
+      <!-- 表2:回款计划 -->
59
+      <payment-table ref="paymentRef" :contractId="form.subContractId" :amount="form.subAmount"
60
+        :taskName="'合同拟稿'"></payment-table>
61
+
62
+      <el-form-item label="合同备注" prop="remark">
63
+        <el-input v-model="form.remark" :autosize="{ minRows: 4 }" type="textarea" placeholder="请输入合同备注" />
64
+      </el-form-item>
65
+
66
+
67
+      <el-divider></el-divider>
68
+      <el-form-item label="拟稿日期" prop="draftTime">
69
+        <el-date-picker clearable v-model="form.draftTime" type="date" value-format="yyyy-MM-dd" placeholder="请选择拟稿日期">
70
+        </el-date-picker>
71
+      </el-form-item>
72
+      <el-form-item label="分管审批日期" prop="managerTime">
73
+        <el-date-picker clearable v-model="form.managerTime" type="date" value-format="yyyy-MM-dd"
74
+          placeholder="请选择分管审批日期">
75
+        </el-date-picker>
76
+      </el-form-item>
77
+      <el-form-item label="总经理审批日期" prop="gmTime">
78
+        <el-date-picker clearable v-model="form.gmTime" type="date" value-format="yyyy-MM-dd" placeholder="请选择总经理审批日期">
79
+        </el-date-picker>
80
+      </el-form-item>
81
+      <el-form-item label="签订日期" prop="signDate">
82
+        <el-date-picker clearable v-model="form.signDate" type="date" value-format="yyyy-MM-dd" placeholder="请选择签订日期">
83
+        </el-date-picker>
84
+      </el-form-item>
85
+      <el-form-item label="评审方式">
86
+        <el-tag :type="form.commentType == '2' ? 'success' : 'warning'">
87
+          {{ getCommentType(form.commentType) }}</el-tag>
88
+      </el-form-item>
89
+      <el-form-item label="" label-width="0" v-if="form.commentType == '2'">
90
+        <table border="1" style="width:100%;">
91
+          <tr>
92
+            <td style="width: 50px;">序号</td>
93
+            <td>会审部门</td>
94
+            <td>会审人</td>
95
+            <td>会审意见</td>
96
+            <td style="width: 200px;">会审附件</td>
97
+            <td style="width: 100px;">日期</td>
98
+          </tr>
99
+          <tr v-for="(comment, index) in commentList" :key="index">
100
+            <td>
101
+              {{ index + 1 }}
102
+            </td>
103
+            <td>
104
+              {{ getDeptName(comment.deptId) }}
105
+            </td>
106
+            <td>
107
+              {{ getUserName(comment.userId) }}
108
+            </td>
109
+            <td>
110
+              {{ comment.comment }}
111
+            </td>
112
+            <td>
113
+              <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + comment.document}`)">
114
+                {{ getFileName(comment.document) }}
115
+              </el-link>
116
+            </td>
117
+            <td>
118
+              <el-date-picker v-model="comment.commentTime" type="date" value-format="yyyy-MM-dd" style="width:140px;"
119
+                placeholder="选择日期"></el-date-picker>
120
+            </td>
121
+          </tr>
122
+        </table>
123
+      </el-form-item>
124
+    </el-form>
125
+    <div slot="footer" class="dialog-footer text-center">
126
+      <el-button type="primary" @click="submitForm">修 改</el-button>
127
+      <el-button @click="$emit('cancel')">取 消</el-button>
128
+    </div>
129
+
130
+    <el-dialog title="选择项目" :visible.sync="open" width="60%" append-to-body>
131
+      <choose-project @chooseProject="confirmProject"></choose-project>
132
+    </el-dialog>
133
+    <el-dialog title="选择合作单位" :visible.sync="partnerOpen" width="70%" append-to-body>
134
+      <choose-partner @confirm="confirmPartners"></choose-partner>
135
+    </el-dialog>
136
+    <el-drawer :visible.sync="partyAOpen" title="选择甲方单位" :size="'40%'" append-to-body>
137
+      <div class="app-container">
138
+        <choose-party-a @confirm="confirmPartyA"></choose-party-a>
139
+      </div>
140
+    </el-drawer>
141
+    <el-drawer :visible.sync="drawerOpen" title="" :size="'70%'" append-to-body>
142
+      <projectInfo :needReturn="false"></projectInfo>
143
+    </el-drawer>
144
+  </div>
145
+
146
+</template>
147
+
148
+<script>
149
+import { listContractWork, addContractWork, delContractWork } from "@/api/oa/contract/contractWork";
150
+import { listContractPayment, addContractPayment, delContractPayment } from "@/api/oa/contract/contractPayment";
151
+import { listContractComment, addContractComment, updateContractComment } from "@/api/oa/contract/contractComment";
152
+import { listContract, getContract, delContract, addContract, updateContract } from "@/api/oa/contract/contract";
153
+import { listProjectContract, addProjectContract, delProjectContract } from "@/api/oa/contract/projectContract";
154
+import { listSubContract, getSubContract, delSubContract, addSubContract, updateSubContract } from "@/api/oa/contract/subContract";
155
+import { listProjectSubcontract, addProjectSubcontract, delProjectSubcontract } from '@/api/oa/contract/projectSubcontract'
156
+import { listPartner, getPartner } from "@/api/oa/partner/partner";
157
+import { listProject, getProject } from "@/api/oa/project/project";
158
+import { listPartyA } from "@/api/oa/partyA/partyA";
159
+import chooseProject from "@/views/flowable/form/components/chooseProject.vue";
160
+import chooseTender from "@/views/flowable/form/components/chooseTender.vue";
161
+import ChoosePartyA from '@/views/flowable/form/components/choosePartyA.vue';
162
+import WorkTable from '@/views/flowable/form/business/components/workTable.vue';
163
+import paymentTable from '@/views/flowable/form/business/components/paymentTable.vue';
164
+import projectInfo from '@/views/oa/project/info'
165
+import ChoosePartner from '@/views/flowable/form/components/choosePartner.vue';
166
+export default {
167
+  components: {
168
+    chooseProject, chooseTender, ChoosePartyA, WorkTable, paymentTable, projectInfo,
169
+    ChoosePartner
170
+  },
171
+  props: {
172
+    form: {
173
+      type: Object
174
+    },
175
+  },
176
+  data() {
177
+    return {
178
+      baseUrl: process.env.VUE_APP_BASE_API,
179
+      open: false,
180
+      tbOpen: false,
181
+      partyAOpen: false,
182
+      drawerOpen: false,
183
+      partnerOpen: false,
184
+      commentList: [],
185
+      workList: [],
186
+      paymentList: [],
187
+      partyAList: [],
188
+      partnerList: [],
189
+      chooseTender: {},
190
+      rules: {
191
+        subContractName: [
192
+          { required: true, message: '请输入合同名称', trigger: 'blur' },
193
+        ],
194
+        subAmount: [
195
+          { required: true, message: '请输入合同金额', trigger: 'blur' },
196
+        ],
197
+      },
198
+      projectloading: false,
199
+      connectProjectList: [],
200
+      projectContractForm: {
201
+        projectIds: [],
202
+      },
203
+    }
204
+  },
205
+  watch: {
206
+    'form.contractId'() {
207
+      this.init();
208
+    }
209
+  },
210
+  created() {
211
+    this.getPartyAList();
212
+    this.init();
213
+  },
214
+  methods: {
215
+    init() {
216
+      this.getPartnerList();
217
+      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;
232
+          }
233
+        })
234
+    },
235
+    // 查询承接单位列表
236
+    getPartnerList() {
237
+      listPartner({
238
+        pageNum: 1,
239
+        pageSize: 99999999
240
+      }).then(response => {
241
+        this.partnerList = response.rows;
242
+      })
243
+    },
244
+    /** 提交按钮 */
245
+    submitForm() {
246
+      this.$refs["form"].validate(valid => {
247
+        if (valid) {
248
+          if (this.form.subContractId != null) {
249
+            for (let comment of this.commentList) {
250
+              updateContractComment(comment);
251
+            }
252
+            if (this.form.partnerId)
253
+              this.form.partnerId = this.form.partnerId.join(',')
254
+            this.updateSubContractFn()
255
+            this.$emit('cancel')
256
+          }
257
+        }
258
+      });
259
+    },
260
+    // 查询业主单位列表
261
+    getPartyAList() {
262
+      listPartyA({
263
+        pageNum: 1,
264
+        pageSize: 99999999
265
+      }).then(response => {
266
+        this.partyAList = response.rows;
267
+      })
268
+    },
269
+    getCommentType(row) {
270
+      let name = '';
271
+      if (row == '0') {
272
+        name = '无须评审'
273
+      } else if (row == '1') {
274
+        name = '会议评审'
275
+      } else {
276
+        name = '线上评审'
277
+      }
278
+      return name
279
+    },
280
+    getProjectSource(chooseTender) {
281
+      const TARGET_COMPANY = '中国电建集团成都勘测设计研究院有限公司';
282
+      if (!chooseTender || !chooseTender.partyA || !chooseTender.partyA.partyAName) {
283
+        return '';
284
+      }
285
+      return chooseTender.partyA.partyAName.includes(TARGET_COMPANY) ? '院内' : '院外';
286
+    },
287
+    confirmProject(val) {
288
+      this.open = false
289
+      for (let v of val) {
290
+        this.projectContractForm.projectIds.push(v.projectId);
291
+        this.connectProjectList.push(v)
292
+      }
293
+    },
294
+    // 确定合作单位
295
+    confirmPartners(val) {
296
+      this.partnerOpen = false
297
+      if (val) {
298
+        let ids = []
299
+        let contactPerson = []
300
+        let telephone = []
301
+        val.map(item => {
302
+          ids.push(item.partnerId)
303
+          if (item.contactPerson)
304
+            contactPerson.push(item.contactPerson)
305
+          if (item.telephone)
306
+            telephone.push(item.telephone)
307
+        })
308
+        this.$set(this.form, 'contactPerson', contactPerson.join(','));
309
+        this.$set(this.form, 'telephone', telephone.join(','));
310
+        this.form.partnerId = ids
311
+      }
312
+    },
313
+    confirmPartyA(val) {
314
+      this.partyAOpen = false
315
+      if (val && val.length > 1) {
316
+        return this.$message.error('请选择一个甲方单位')
317
+      }
318
+      if (val) {
319
+        this.getPartyAList();
320
+        this.$set(this.form, 'partyAId', val[0].partyAId)
321
+      }
322
+    },
323
+    getContractPath(val) {
324
+      let arr = val.split('/upload')
325
+      this.form.contractDocument = arr[1]
326
+      if (val == "") {
327
+        this.form.contractDocument = ""
328
+      }
329
+    },
330
+    updateSubContractFn() {
331
+      const subContractId = this.form.subContractId
332
+      this.workList = this.$refs.workTableRef.workList;
333
+      this.paymentList = this.$refs.paymentRef.paymentList;
334
+      updateSubContract(this.form).then(() => {
335
+        this.$modal.msgSuccess("修改成功");
336
+        delProjectSubcontract(subContractId).then(() => {
337
+          this.connectProjectList.forEach(item => {
338
+            addProjectSubcontract({ subContractId: subContractId, projectId: item.projectId })
339
+          })
340
+        })
341
+        delContractWork(subContractId).then(() => {
342
+          for (let work of this.workList) {
343
+            work.contractId = subContractId;
344
+            addContractWork(work);
345
+          }
346
+        })
347
+        delContractPayment(subContractId).then(() => {
348
+          for (let payment of this.paymentList) {
349
+            payment.contractId = subContractId;
350
+            addContractPayment(payment);
351
+          }
352
+        })
353
+      })
354
+
355
+    },
356
+    updateRelatedProject() {
357
+      delProjectContract(this.form.contractId).then(() => {
358
+        for (let projectId of this.projectContractForm.projectIds) {
359
+          addProjectContract({ projectId: projectId, contractId: this.form.contractId });
360
+        }
361
+      })
362
+    },
363
+    clickProjectFn(row) {
364
+      this.$router.replace({ query: { ...this.$route.query, projectId: row.projectId } });
365
+      this.drawerOpen = true;
366
+    },
367
+    handleDelete(index, row) {
368
+      this.connectProjectList.splice(index, 1)
369
+      this.projectContractForm.projectIds.splice(row.contractId)
370
+    }
371
+  },
372
+}
373
+</script>
374
+
375
+<style lang="scss" scoped>
376
+@import "@/assets/styles/element-reset.scss";
377
+
378
+table {
379
+  /*边框*/
380
+  /* border: 1px solid black; */
381
+  text-align: center;
382
+  border-collapse: collapse;
383
+
384
+  /*设置背景颜色*/
385
+  /* background-color: #bfa; */
386
+  td {
387
+    padding: 5px;
388
+  }
389
+}
390
+
391
+::v-deep .el-descriptions-item__label.is-bordered-label {
392
+  color: #5a5757;
393
+  background: rgba($color: #a9adb3, $alpha: 0.1);
394
+  width: 150px;
395
+  min-width: 150px;
396
+}
397
+
398
+::v-deep .el-descriptions .is-bordered .el-descriptions-item__cell {
399
+  border: 1px solid #cdd0d3;
400
+}
401
+</style>

+ 1
- 11
oa-ui/src/views/oa/contract/index.vue Переглянути файл

@@ -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-08-28 17:30:44
5
+ * @LastEditTime: 2024-09-02 15:11:08
6 6
 -->
7 7
 <!--
8 8
  * @Author: ysh
@@ -356,16 +356,6 @@ export default {
356 356
         }
357 357
       });
358 358
     },
359
-    /** 删除按钮操作 */
360
-    handleDelete(row) {
361
-      const contractIds = row.contractId || this.ids;
362
-      this.$modal.confirm('是否确认删除cmc合同评审编号为"' + contractIds + '"的数据项?').then(function () {
363
-        return delContract(contractIds);
364
-      }).then(() => {
365
-        this.getList();
366
-        this.$modal.msgSuccess("删除成功");
367
-      }).catch(() => { });
368
-    },
369 359
     /** 导出按钮操作 */
370 360
     handleExport() {
371 361
       this.download('oa/contract/export', {

+ 14
- 82
oa-ui/src/views/oa/contract/subContract.vue Переглянути файл

@@ -1,3 +1,9 @@
1
+<!--
2
+ * @Author: ysh
3
+ * @Date: 2024-06-21 18:52:00
4
+ * @LastEditors: 
5
+ * @LastEditTime: 2024-09-02 15:20:37
6
+-->
1 7
 <template>
2 8
   <div class="app-container">
3 9
     <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="128px">
@@ -97,74 +103,8 @@
97 103
       @pagination="getList" />
98 104
 
99 105
     <!-- 添加或修改cmc分包合同评审对话框 -->
100
-    <el-dialog :title="title" :visible.sync="open" width="50%" append-to-body>
101
-      <el-form ref="form" :model="form" :rules="rules" label-width="130px">
102
-        <el-form-item label="合同名称" prop="subContractName">
103
-          {{ form.subContractName }}
104
-        </el-form-item>
105
-        <el-form-item label="拟稿日期" prop="draftTime">
106
-          <el-date-picker clearable v-model="form.draftTime" type="date" value-format="yyyy-MM-dd"
107
-            placeholder="请选择拟稿日期">
108
-          </el-date-picker>
109
-        </el-form-item>
110
-        <el-form-item label="分管审批日期" prop="managerTime">
111
-          <el-date-picker clearable v-model="form.managerTime" type="date" value-format="yyyy-MM-dd"
112
-            placeholder="请选择分管审批日期">
113
-          </el-date-picker>
114
-        </el-form-item>
115
-        <el-form-item label="总经理审批日期" prop="gmTime">
116
-          <el-date-picker clearable v-model="form.gmTime" type="date" value-format="yyyy-MM-dd"
117
-            placeholder="请选择总经理审批日期">
118
-          </el-date-picker>
119
-        </el-form-item>
120
-        <el-form-item label="签订日期" prop="signDate">
121
-          <el-date-picker clearable v-model="form.signDate" type="date" value-format="yyyy-MM-dd" placeholder="请选择签订日期">
122
-          </el-date-picker>
123
-        </el-form-item>
124
-        <el-form-item label="评审方式">
125
-          <el-tag :type="form.commentType == '2' ? 'success' : 'warning'">
126
-            {{ setCommentType(form.commentType) }}</el-tag>
127
-        </el-form-item>
128
-        <el-form-item label="" label-width="0" v-if="form.commentType == '2'">
129
-          <table border="1" style="width:100%;">
130
-            <tr>
131
-              <td style="width: 50px;">序号</td>
132
-              <td>会审部门</td>
133
-              <td>会审人</td>
134
-              <td>会审意见</td>
135
-              <td style="width: 200px;">会审附件</td>
136
-              <td style="width: 100px;">日期</td>
137
-            </tr>
138
-            <tr v-for="(comment, index) in commentList" :key="index">
139
-              <td>
140
-                {{ index + 1 }}
141
-              </td>
142
-              <td>
143
-                {{ getDeptName(comment.deptId) }}
144
-              </td>
145
-              <td>
146
-                {{ getUserName(comment.userId) }}
147
-              </td>
148
-              <td>
149
-                {{ comment.comment }}
150
-              </td>
151
-              <td>
152
-                <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + comment.document}`)">
153
-                  {{ getFileName(comment.document) }}
154
-                </el-link>
155
-              </td>
156
-              <td>
157
-                <el-date-picker v-model="comment.commentTime" type="date" value-format="yyyy-MM-dd" style="width:140px;"
158
-                  placeholder="选择日期"></el-date-picker>
159
-              </td>
160
-            </tr>
161
-          </table>
162
-        </el-form-item>
163
-      </el-form>
164
-      <div slot="footer" class="dialog-footer">
165
-        <el-button type="primary" @click="submitForm">确 定</el-button>
166
-        <el-button @click="cancel">取 消</el-button>
167
-      </div>
106
+    <el-dialog :title="title" :visible.sync="open" width="60%" append-to-body>
107
+      <sub-edit :form="form" @cancel="cancel()"></sub-edit>
168 108
     </el-dialog>
169 109
 
170 110
     <el-dialog :title="title" :visible.sync="openInfo" append-to-body width="70%">
@@ -182,9 +122,10 @@ import { definitionStart, flowXmlAndNode } from "@/api/flowable/definition";
182 122
 import { todoList, getNextFlowNodeByStart } from "@/api/flowable/todo";
183 123
 import { Snowflake } from '@/utils/snowFlake.js'
184 124
 import { listContractComment, addContractComment, updateContractComment, delContractComment } from "@/api/oa/contract/contractComment";
125
+import SubEdit from './components/subEdit.vue';
185 126
 
186 127
 export default {
187
-  components: { subContract },
128
+  components: { subContract, SubEdit },
188 129
   name: "SubContract",
189 130
   data() {
190 131
     return {
@@ -229,6 +170,7 @@ export default {
229 170
       form: {},
230 171
       // 表单校验
231 172
       rules: {
173
+        
232 174
       },
233 175
       taskForm: {
234 176
         formId: ''
@@ -268,7 +210,7 @@ export default {
268 210
     // 取消按钮
269 211
     cancel() {
270 212
       this.open = false;
271
-      this.reset();
213
+      this.getList()
272 214
     },
273 215
     // 表单重置
274 216
     reset() {
@@ -309,7 +251,7 @@ export default {
309 251
     handleAdd() {
310 252
       this.reset();
311 253
       this.open = true;
312
-      this.title = "新增分包合同评审_日期";
254
+      this.title = "新增分包合同评审";
313 255
     },
314 256
     /** 修改按钮操作 */
315 257
     handleUpdate(row) {
@@ -318,7 +260,7 @@ export default {
318 260
       getSubContract(subContractId).then(response => {
319 261
         this.form = response.data;
320 262
         this.open = true;
321
-        this.title = "修改分包合同评审_日期";
263
+        this.title = "修改分包合同评审";
322 264
         listContractComment({ pageNum: 1, pageSize: 100, contractId: subContractId }).then(res => {
323 265
           if (res.rows && res.rows.length != 0) {
324 266
             this.commentList = res.rows;
@@ -420,16 +362,6 @@ export default {
420 362
       }
421 363
       return path
422 364
     },
423
-    /** 删除按钮操作 */
424
-    handleDelete(row) {
425
-      const subContractIds = row.subContractId || this.ids;
426
-      this.$modal.confirm('是否确认删除cmc分包合同评审编号为"' + subContractIds + '"的数据项?').then(function () {
427
-        return delSubContract(subContractIds);
428
-      }).then(() => {
429
-        this.getList();
430
-        this.$modal.msgSuccess("删除成功");
431
-      }).catch(() => { });
432
-    },
433 365
     /** 导出按钮操作 */
434 366
     handleExport() {
435 367
       this.download('oa/subContract/export', {

+ 2
- 2
oa-ui/src/views/oa/project/info.vue Переглянути файл

@@ -503,12 +503,12 @@
503 503
       <project-print :project="project" :workList="workList" :projectComment="projectComment"
504 504
         @cancel="printOpen = false"></project-print>
505 505
     </el-dialog>
506
-    <el-drawer title="流程图" :visible.sync="drawerOpen" direction="rtl">
506
+    <el-drawer title="流程图" :visible.sync="drawerOpen" direction="rtl" append-to-body>
507 507
       <div class="app-container">
508 508
         <flow :flowData="flowData" />
509 509
       </div>
510 510
     </el-drawer>
511
-    <el-drawer title="办理进度" :visible.sync="recordOpen" direction="rtl">
511
+    <el-drawer title="办理进度" :visible.sync="recordOpen" direction="rtl" append-to-body>
512 512
       <div class="app-container">
513 513
         <row-detail :rows="clickRow"></row-detail>
514 514
       </div>

Завантаження…
Відмінити
Зберегти