Browse Source

修改项目结算表单

余思翰 1 year ago
parent
commit
949a2d140d

+ 5
- 2
oa-back/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/CmcSettleSummaryController.java View File

@@ -2,6 +2,8 @@ package com.ruoyi.web.controller.oa;
2 2
 
3 3
 import java.util.List;
4 4
 import javax.servlet.http.HttpServletResponse;
5
+
6
+import com.ruoyi.common.utils.SnowFlake;
5 7
 import org.springframework.beans.factory.annotation.Autowired;
6 8
 import org.springframework.web.bind.annotation.GetMapping;
7 9
 import org.springframework.web.bind.annotation.PostMapping;
@@ -70,8 +72,9 @@ public class CmcSettleSummaryController extends BaseController
70 72
      */
71 73
     @Log(title = "cmc结算汇总", businessType = BusinessType.INSERT)
72 74
     @PostMapping
73
-    public AjaxResult add(@RequestBody CmcSettleSummary cmcSettleSummary)
74
-    {
75
+    public AjaxResult add(@RequestBody CmcSettleSummary cmcSettleSummary) throws InterruptedException {
76
+        Thread.sleep(2);
77
+        cmcSettleSummary.setSummaryId(new SnowFlake().generateId());
75 78
         return toAjax(cmcSettleSummaryService.insertCmcSettleSummary(cmcSettleSummary));
76 79
     }
77 80
 

+ 5
- 2
oa-back/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/CmcSettleWorkController.java View File

@@ -2,6 +2,8 @@ package com.ruoyi.web.controller.oa;
2 2
 
3 3
 import java.util.List;
4 4
 import javax.servlet.http.HttpServletResponse;
5
+
6
+import com.ruoyi.common.utils.SnowFlake;
5 7
 import org.springframework.beans.factory.annotation.Autowired;
6 8
 import org.springframework.web.bind.annotation.GetMapping;
7 9
 import org.springframework.web.bind.annotation.PostMapping;
@@ -70,8 +72,9 @@ public class CmcSettleWorkController extends BaseController
70 72
      */
71 73
     @Log(title = "cmc经费计算", businessType = BusinessType.INSERT)
72 74
     @PostMapping
73
-    public AjaxResult add(@RequestBody CmcSettleWork cmcSettleWork)
74
-    {
75
+    public AjaxResult add(@RequestBody CmcSettleWork cmcSettleWork) throws InterruptedException {
76
+        Thread.sleep(2);
77
+        cmcSettleWork.setWorkId(new SnowFlake().generateId());
75 78
         return toAjax(cmcSettleWorkService.insertCmcSettleWork(cmcSettleWork));
76 79
     }
77 80
 

+ 7279
- 0
oa-back/sql/cmc_oa(小余测试数据).sql
File diff suppressed because it is too large
View File


+ 599
- 114
oa-ui/src/views/flowable/form/settleForm.vue View File

@@ -2,13 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-04-30 09:03:14
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-04-30 17:23:24
6
--->
7
-<!--
8
- * @Author: ysh
9
- * @Date: 2024-04-30 09:03:14
10
- * @LastEditors: Please set LastEditors
11
- * @LastEditTime: 2024-04-30 14:15:59
5
+ * @LastEditTime: 2024-05-06 17:48:28
12 6
 -->
13 7
 <template>
14 8
   <div class="app-container">
@@ -21,13 +15,24 @@
21 15
         </div>
22 16
         <el-form ref="form" :model="form" :rules="rules" label-width="160px">
23 17
           <el-form-item label="项目编号" prop="projectId">
24
-            <el-select v-model="form.projectId" filterable placeholder="请选择" @change="handleSelectProject"
25
-              :disabled="taskName != '结算发起'" clearable style="width: 100%;">
26
-              <el-option v-for="item in projectList" :key="item.value"
27
-                :label="item.projectNumber + '-' + item.projectName" :value="item.projectId">
18
+            <el-select
19
+              v-model="form.projectId"
20
+              filterable
21
+              placeholder="请选择"
22
+              @change="handleSelectProject"
23
+              :disabled="taskName != '结算发起'"
24
+              clearable
25
+              style="width: 100%"
26
+            >
27
+              <el-option
28
+                v-for="item in projectList"
29
+                :key="item.value"
30
+                :label="item.projectNumber + '-' + item.projectName"
31
+                :value="item.projectId"
32
+              >
28 33
               </el-option>
29 34
             </el-select>
30
-            <el-descriptions border v-if="isSelect" style="margin-top: 10px;" :column="2">
35
+            <el-descriptions border v-if="isSelect" style="margin-top: 10px" :column="2">
31 36
               <el-descriptions-item label="项目编号" label-class-name="my-label">
32 37
                 {{ chooseProject.projectNumber }}
33 38
               </el-descriptions-item>
@@ -41,7 +46,11 @@
41 46
                 {{ chooseProject.contractNumber }}
42 47
               </el-descriptions-item>
43 48
               <el-descriptions-item label="项目负责人" label-class-name="my-label">
44
-                {{ chooseProject.projectLeaderUser ? chooseProject.projectLeaderUser.nickName : '' }}
49
+                {{
50
+                  chooseProject.projectLeaderUser
51
+                    ? chooseProject.projectLeaderUser.nickName
52
+                    : ""
53
+                }}
45 54
               </el-descriptions-item>
46 55
               <el-descriptions-item label="甲方单位" label-class-name="my-label">
47 56
                 {{ chooseProject.partyA }}
@@ -67,13 +76,17 @@
67 76
             </el-descriptions>
68 77
           </el-form-item>
69 78
           <el-form-item label="工作量上报说明" prop="workloadReport">
70
-            <el-input v-model="form.workloadReport" type="textarea" placeholder="请输入工作量上报说明" />
79
+            <el-input
80
+              v-model="form.workloadReport"
81
+              type="textarea"
82
+              placeholder="请输入工作量上报说明"
83
+            />
71 84
           </el-form-item>
72 85
           <el-row>
73 86
             <el-col :span="6" :xs="24" :offset="12">
74
-              <el-form-item label="工作上报人:" prop="reporter">
87
+              <el-form-item label="工作上报人:" prop="reporterName">
75 88
                 <span class="auditor">
76
-                  {{ form.reporter }}
89
+                  {{ form.reporterName }}
77 90
                 </span>
78 91
               </el-form-item>
79 92
             </el-col>
@@ -84,27 +97,73 @@
84 97
             </el-col>
85 98
           </el-row>
86 99
           <el-form-item label="原始上报数据" prop="">
87
-            <el-upload class="upload-demo" ref="upload" :file-list="fileList" :auto-upload="false" action="">
88
-              <el-button slot="trigger" size="mini" type="primary" icon="el-icon-upload"
89
-                :disabled="taskName != '结算发起'">选取文件</el-button>
90
-              <div slot="tip" class="el-upload__tip">只能上传docx/doc文件,且不超过500kb</div>
100
+            <el-upload
101
+              class="upload-demo"
102
+              ref="upload"
103
+              :file-list="fileList"
104
+              :auto-upload="false"
105
+              action=""
106
+            >
107
+              <el-button
108
+                slot="trigger"
109
+                size="mini"
110
+                type="primary"
111
+                icon="el-icon-upload"
112
+                :disabled="taskName != '结算发起'"
113
+                >选取文件</el-button
114
+              >
115
+              <div slot="tip" class="el-upload__tip">
116
+                只能上传docx/doc文件,且不超过500kb
117
+              </div>
91 118
             </el-upload>
92 119
           </el-form-item>
93 120
           <el-form-item label="项目管理部审核结算单" prop="">
94
-            <el-upload class="upload-demo" ref="upload" :file-list="fileList" action="" :auto-upload="false">
95
-              <el-button slot="trigger" size="mini" type="primary" icon="el-icon-upload"
96
-                :disabled="taskName != '项目管理部结算'">选取文件</el-button>
97
-              <div slot="tip" class="el-upload__tip">只能上传docx/doc文件,且不超过500kb</div>
121
+            <el-upload
122
+              class="upload-demo"
123
+              ref="upload"
124
+              :file-list="fileList"
125
+              action=""
126
+              :auto-upload="false"
127
+            >
128
+              <el-button
129
+                slot="trigger"
130
+                size="mini"
131
+                type="primary"
132
+                icon="el-icon-upload"
133
+                :disabled="taskName != '项目管理部结算'"
134
+                >选取文件</el-button
135
+              >
136
+              <div slot="tip" class="el-upload__tip">
137
+                只能上传docx/doc文件,且不超过500kb
138
+              </div>
98 139
             </el-upload>
99 140
           </el-form-item>
100 141
           <el-form-item label="分管领导审核结算单" prop="">
101
-            <el-upload class="upload-demo" ref="upload" :file-list="fileList" action="" :auto-upload="false">
102
-              <el-button slot="trigger" size="mini" type="primary" icon="el-icon-upload"
103
-                :disabled="taskName != '分管审核'">选取文件</el-button>
104
-              <div slot="tip" class="el-upload__tip">只能上传docx/doc文件,且不超过500kb</div>
142
+            <el-upload
143
+              class="upload-demo"
144
+              ref="upload"
145
+              :file-list="fileList"
146
+              action=""
147
+              :auto-upload="false"
148
+            >
149
+              <el-button
150
+                slot="trigger"
151
+                size="mini"
152
+                type="primary"
153
+                icon="el-icon-upload"
154
+                :disabled="taskName != '分管审核'"
155
+                >选取文件</el-button
156
+              >
157
+              <div slot="tip" class="el-upload__tip">
158
+                只能上传docx/doc文件,且不超过500kb
159
+              </div>
105 160
             </el-upload>
106 161
           </el-form-item>
107
-          <el-form-item label="项目完成工作量及经费计算">
162
+          <div class="headers">
163
+            项目完成工作量及经费计算
164
+            <div class="line"></div>
165
+          </div>
166
+          <el-form-item label-width="60px">
108 167
             <table border="1">
109 168
               <tr>
110 169
                 <td style="width: 50px">序号</td>
@@ -124,55 +183,333 @@
124 183
                   {{ index + 1 }}
125 184
                 </td>
126 185
                 <td>
127
-                  <el-input v-model="work.content" type="textarea" clearable
128
-                    :autosize="{ minRows: 4, maxRows: 10 }"></el-input>
186
+                  <el-input
187
+                    v-model="work.content"
188
+                    type="textarea"
189
+                    clearable
190
+                    :autosize="{ minRows: 4, maxRows: 10 }"
191
+                  ></el-input>
129 192
                 </td>
130 193
                 <td>
131
-                  {{ work.scale == '' ? '无' : work.scale }}
194
+                  {{ work.scale == "" ? "无" : work.scale }}
132 195
                 </td>
133 196
                 <td>
134 197
                   {{ work.unit }}
135 198
                 </td>
136 199
                 <td>
137
-                  {{ work.groundType == '0' ? '一般地类' : '复杂地类' }}
200
+                  {{ work.groundType == "0" ? "一般地类" : "复杂地类" }}
138 201
                 </td>
139 202
                 <td>
140 203
                   {{ work.price }}
141 204
                 </td>
142 205
                 <td>
143
-                  <el-input-number style="width:100px" v-model="work.workload" clearable @blur="calculateSettle(work)"
144
-                    :controls="false"></el-input-number>
206
+                  <el-input-number
207
+                    style="width: 100px"
208
+                    v-model="work.workload"
209
+                    clearable
210
+                    @blur="calculateSettle(work)"
211
+                    :controls="false"
212
+                  ></el-input-number>
145 213
                 </td>
146 214
                 <td>
147
-                  <el-input-number style="width:100px" v-model="work.coefficient" clearable
148
-                    @blur="calculateSettle(work)" :controls="false"></el-input-number>
215
+                  <el-input-number
216
+                    style="width: 100px"
217
+                    v-model="work.coefficient"
218
+                    clearable
219
+                    @blur="calculateSettle(work)"
220
+                    :controls="false"
221
+                  ></el-input-number>
149 222
                 </td>
150 223
                 <td>
151 224
                   <!-- <el-input-number style="width:100px" v-model="work.settle" clearable :controls="false"></el-input-number> -->
152 225
                   {{ work.settle }}
153 226
                 </td>
154 227
                 <td>
155
-                  <el-input v-model="work.remark" type="textarea" clearable
156
-                    :autosize="{ minRows: 4, maxRows: 10 }"></el-input>
228
+                  <el-input
229
+                    v-model="work.remark"
230
+                    type="textarea"
231
+                    clearable
232
+                    :autosize="{ minRows: 4, maxRows: 10 }"
233
+                  ></el-input>
234
+                </td>
235
+                <td>
236
+                  <el-button
237
+                    size="mini"
238
+                    type="text"
239
+                    @click="handleChoosePrice(work, index)"
240
+                    >选择单价</el-button
241
+                  >
242
+                  <el-button
243
+                    type="text"
244
+                    size="mini"
245
+                    style="color: #f56c6c"
246
+                    @click="deletWorkItem(index, settleWorkList)"
247
+                    >删除行</el-button
248
+                  >
157 249
                 </td>
250
+              </tr>
251
+              <tr>
252
+                <td :colspan="8">结算费用合计</td>
253
+                <td>{{ settleSumTr.amount }}</td>
158 254
                 <td>
159
-                  <el-button size="mini" type="text" @click="handleChoosePrice(work, index)">选择单价</el-button>
160
-                  <el-button type="text" size="mini" style="color: #F56C6C;"
161
-                    @click="deletWorkItem(index)">删除行</el-button>
255
+                  <el-input
256
+                    v-model="settleSumTr.remark"
257
+                    type="textarea"
258
+                    clearable
259
+                    :autosize="{ minRows: 2, maxRows: 10 }"
260
+                  ></el-input>
162 261
                 </td>
163 262
               </tr>
164 263
             </table>
165
-            <el-button icon="el-icon-plus" size="mini" @click="addWorkList"></el-button>
264
+            <el-button
265
+              icon="el-icon-plus"
266
+              type="primary"
267
+              plain
268
+              size="mini"
269
+              @click="addWorkList"
270
+            ></el-button>
166 271
           </el-form-item>
167
-          <el-form-item label="结算汇总">
168 272
 
273
+          <!-- 结算汇总 -->
274
+          <div class="headers">
275
+            结算汇总
276
+            <div class="line"></div>
277
+          </div>
278
+          <el-form-item label-width="60px">
279
+            <table border="1">
280
+              <tr>
281
+                <td style="width: 50px">序号</td>
282
+                <td style="width: 280px">结算内容</td>
283
+                <td style="width: 200px">结算金额(元)</td>
284
+                <td style="width: 280px">备注</td>
285
+                <td style="width: 100px">操作</td>
286
+              </tr>
287
+              <tr v-for="(work, index) in settleSumList" :key="index">
288
+                <td>
289
+                  {{ index + 1 }}
290
+                </td>
291
+                <td>
292
+                  <el-input
293
+                    v-model="work.content"
294
+                    type="textarea"
295
+                    clearable
296
+                    :autosize="{ minRows: 2, maxRows: 10 }"
297
+                  >
298
+                  </el-input>
299
+                </td>
300
+                <td>
301
+                  <el-input-number
302
+                    style="width: 200px"
303
+                    v-model="work.amount"
304
+                    clearable
305
+                    :controls="false"
306
+                    @blur="calculateActualSumSettle()"
307
+                  ></el-input-number>
308
+                  <!-- {{ work.amount }} -->
309
+                </td>
310
+                <td>
311
+                  <el-input
312
+                    v-model="work.remark"
313
+                    type="textarea"
314
+                    clearable
315
+                    :autosize="{ minRows: 2, maxRows: 10 }"
316
+                  >
317
+                  </el-input>
318
+                </td>
319
+                <td>
320
+                  <el-button
321
+                    type="text"
322
+                    size="mini"
323
+                    style="color: #f56c6c"
324
+                    @click="deletWorkItem(index, settleSumList)"
325
+                    >删除行</el-button
326
+                  >
327
+                </td>
328
+              </tr>
329
+              <tr>
330
+                <td :colspan="2">实际结算总金额</td>
331
+                <td :colspan="3">
332
+                  <el-input-number
333
+                    style="width: 100%"
334
+                    v-model="actualSumSettle"
335
+                    clearable
336
+                    :controls="false"
337
+                  ></el-input-number>
338
+                </td>
339
+              </tr>
340
+            </table>
341
+            <el-button
342
+              icon="el-icon-plus"
343
+              type="primary"
344
+              plain
345
+              size="mini"
346
+              @click="addSumWorkList"
347
+            ></el-button>
169 348
           </el-form-item>
170 349
 
350
+          <!-- 结算审核情况 -->
351
+          <div v-if="taskName != '结算发起'">
352
+            <div class="headers">
353
+              结算审核情况
354
+              <div class="line"></div>
355
+            </div>
356
+            <el-form-item label="综合事务部(设备领用情况)">
357
+              <el-input
358
+                v-model="form.zhComment"
359
+                type="textarea"
360
+                clearable
361
+                :autosize="{ minRows: 4, maxRows: 10 }"
362
+              >
363
+              </el-input>
364
+            </el-form-item>
365
+            <el-row>
366
+              <el-col :span="6" :xs="24" :offset="12">
367
+                <el-form-item label="签名:" label-width="120px">
368
+                  <span class="auditor"> {{}} </span>
369
+                </el-form-item>
370
+              </el-col>
371
+              <el-col :span="6">
372
+                <el-form-item label="日期:" label-width="120px">
373
+                  <span> {{}} </span>
374
+                </el-form-item>
375
+              </el-col>
376
+            </el-row>
377
+            <el-form-item label="技术质量部(质量及工作量)">
378
+              <el-input
379
+                v-model="form.remark"
380
+                type="textarea"
381
+                clearable
382
+                :autosize="{ minRows: 4, maxRows: 10 }"
383
+              >
384
+              </el-input>
385
+            </el-form-item>
386
+            <el-row>
387
+              <el-col :span="6" :xs="24" :offset="12">
388
+                <el-form-item label="签名:" label-width="120px">
389
+                  <span class="auditor"> {{}} </span>
390
+                </el-form-item>
391
+              </el-col>
392
+              <el-col :span="6">
393
+                <el-form-item label="日期:" label-width="120px">
394
+                  <span> {{}} </span>
395
+                </el-form-item>
396
+              </el-col>
397
+            </el-row>
398
+            <el-form-item label="项目管理部(结算)">
399
+              <el-input
400
+                v-model="form.remark"
401
+                type="textarea"
402
+                clearable
403
+                :autosize="{ minRows: 4, maxRows: 10 }"
404
+              >
405
+              </el-input>
406
+            </el-form-item>
407
+            <el-row>
408
+              <el-col :span="6" :xs="24" :offset="12">
409
+                <el-form-item label="签名:" label-width="120px">
410
+                  <span class="auditor"> {{}} </span>
411
+                </el-form-item>
412
+              </el-col>
413
+              <el-col :span="6">
414
+                <el-form-item label="日期:" label-width="120px">
415
+                  <span> {{}} </span>
416
+                </el-form-item>
417
+              </el-col>
418
+            </el-row>
419
+            <el-form-item label="项目承担部门(确认)">
420
+              <el-input
421
+                v-model="form.remark"
422
+                type="textarea"
423
+                clearable
424
+                :autosize="{ minRows: 4, maxRows: 10 }"
425
+              >
426
+              </el-input>
427
+            </el-form-item>
428
+            <el-row>
429
+              <el-col :span="6" :xs="24" :offset="12">
430
+                <el-form-item label="签名:" label-width="120px">
431
+                  <span class="auditor"> {{}} </span>
432
+                </el-form-item>
433
+              </el-col>
434
+              <el-col :span="6">
435
+                <el-form-item label="日期:" label-width="120px">
436
+                  <span> {{}} </span>
437
+                </el-form-item>
438
+              </el-col>
439
+            </el-row>
440
+            <el-form-item label="经营发展部(校核)">
441
+              <el-input
442
+                v-model="form.remark"
443
+                type="textarea"
444
+                clearable
445
+                :autosize="{ minRows: 4, maxRows: 10 }"
446
+              >
447
+              </el-input>
448
+            </el-form-item>
449
+            <el-row>
450
+              <el-col :span="6" :xs="24" :offset="12">
451
+                <el-form-item label="签名:" label-width="120px">
452
+                  <span class="auditor"> {{}} </span>
453
+                </el-form-item>
454
+              </el-col>
455
+              <el-col :span="6">
456
+                <el-form-item label="日期:" label-width="120px">
457
+                  <span> {{}} </span>
458
+                </el-form-item>
459
+              </el-col>
460
+            </el-row>
461
+            <el-form-item label="分管领导(审核)">
462
+              <el-input
463
+                v-model="form.remark"
464
+                type="textarea"
465
+                clearable
466
+                :autosize="{ minRows: 4, maxRows: 10 }"
467
+              >
468
+              </el-input>
469
+            </el-form-item>
470
+            <el-row>
471
+              <el-col :span="6" :xs="24" :offset="12">
472
+                <el-form-item label="签名:" label-width="120px">
473
+                  <span class="auditor"> {{}} </span>
474
+                </el-form-item>
475
+              </el-col>
476
+              <el-col :span="6">
477
+                <el-form-item label="日期:" label-width="120px">
478
+                  <span> {{}} </span>
479
+                </el-form-item>
480
+              </el-col>
481
+            </el-row>
482
+            <el-form-item label="总经理(审批)">
483
+              <el-input
484
+                v-model="form.remark"
485
+                type="textarea"
486
+                clearable
487
+                :autosize="{ minRows: 4, maxRows: 10 }"
488
+              >
489
+              </el-input>
490
+            </el-form-item>
491
+            <el-row>
492
+              <el-col :span="6" :xs="24" :offset="12">
493
+                <el-form-item label="签名:" label-width="120px">
494
+                  <span class="auditor"> {{}} </span>
495
+                </el-form-item>
496
+              </el-col>
497
+              <el-col :span="6">
498
+                <el-form-item label="日期:" label-width="120px">
499
+                  <span> {{}} </span>
500
+                </el-form-item>
501
+              </el-col>
502
+            </el-row>
503
+          </div>
171 504
         </el-form>
505
+        <div style="text-align: center">
506
+          <el-button type="warning" @click="preserve">保存</el-button>
507
+          <el-button type="primary">提交下一个流程</el-button>
508
+        </div>
172 509
       </el-col>
173 510
       <el-col :span="5" :xs="24">
174 511
         <el-card>
175
-          <h2 style="text-align: center;">流程进度</h2>
512
+          <h2 style="text-align: center">流程进度</h2>
176 513
           <div>
177 514
             <flow :flowData="flowData" />
178 515
           </div>
@@ -181,37 +518,66 @@
181 518
     </el-row>
182 519
 
183 520
     <el-drawer title="选择单价" :visible.sync="drawer" direction="rtl">
184
-      <choose-price :row="clickWork" @getPrice="getPrice" @cancel="drawer = false"></choose-price>
521
+      <choose-price
522
+        :row="clickWork"
523
+        @getPrice="getPrice"
524
+        @cancel="drawer = false"
525
+      ></choose-price>
185 526
     </el-drawer>
186 527
   </div>
187 528
 </template>
188 529
 
189 530
 <script>
190
-import flow from '@/views/flowable/task/todo/detail/flow'
531
+import flow from "@/views/flowable/task/todo/detail/flow";
191 532
 import { flowXmlAndNode } from "@/api/flowable/definition";
192 533
 import { parseTime } from "@/utils/ruoyi";
193 534
 import { listProject, getProject } from "@/api/oa/project/project";
194
-import { listSettle, getSettle, delSettle, addSettle, updateSettle } from "@/api/oa/settle/settle";
195
-import { listProjectContract, addProjectContract } from "@/api/oa/contract/projectContract";
196
-import ChoosePrice from './components/choosePrice.vue';
535
+import {
536
+  listSettle,
537
+  getSettle,
538
+  delSettle,
539
+  addSettle,
540
+  updateSettle,
541
+} from "@/api/oa/settle/settle";
542
+import {
543
+  listSettleSummary,
544
+  getSettleSummary,
545
+  addSettleSummary,
546
+  delSettleSummary,
547
+  updateSettleSummary,
548
+} from "@/api/oa/settle/settleSummary";
549
+import {
550
+  listSettleWork,
551
+  getSettleWork,
552
+  addSettleWork,
553
+  updateSettleWork,
554
+  delSettleWork,
555
+} from "@/api/oa/settle/settleWork";
556
+import {
557
+  listProjectContract,
558
+  addProjectContract,
559
+} from "@/api/oa/contract/projectContract";
560
+import { getPrice } from "@/api/oa/price/price";
561
+import ChoosePrice from "./components/choosePrice.vue";
197 562
 export default {
198 563
   components: {
199 564
     flow,
200
-    ChoosePrice
565
+    ChoosePrice,
201 566
   },
202 567
   props: {
203 568
     taskName: {
204 569
       type: String,
205
-      required: true
570
+      required: true,
206 571
     },
207 572
     taskForm: {
208 573
       type: Object,
209
-      required: true
210
-    }
574
+      required: true,
575
+    },
211 576
   },
212 577
   data() {
213 578
     return {
214 579
       drawer: false,
580
+      flag: false,
215 581
       flowData: {},
216 582
       form: {},
217 583
       rules: {},
@@ -221,67 +587,86 @@ export default {
221 587
       fileList: [],
222 588
       settleWorkList: [
223 589
         {
224
-          content: '',
225
-          priceId: '',
226
-          scale: '无',
227
-          unit: '',
228
-          groundType: '0',
229
-          price: '',
590
+          content: "",
591
+          priceId: "",
592
+          scale: "无",
593
+          unit: "",
594
+          groundType: "0",
595
+          price: "",
230 596
           workload: 0,
231 597
           coefficient: 1,
232 598
           settle: 0,
233
-          remark: ''
234
-        }
599
+          remark: "",
600
+        },
235 601
       ],
236
-      clickWork: {}
237
-    }
602
+      settleSumTr: {
603
+        content: "结算费用合计",
604
+        amount: 0,
605
+        remark: "",
606
+      },
607
+      settleSumList: [
608
+        {
609
+          content: "",
610
+          amount: 0,
611
+          remark: "",
612
+        },
613
+      ],
614
+      actualSumSettle: "",
615
+      clickWork: {},
616
+    };
238 617
   },
239 618
   created() {
240 619
     this.getProjectList(); //获取项目列表
241 620
     this.getContractDataList(); //获取合同编码和编号
242 621
     this.initForm();
243 622
     if (this.$route.query.projectId) {
244
-
245 623
     }
246
-    flowXmlAndNode({ procInsId: this.taskForm.procInsId, deployId: this.taskForm.deployId }).then(res => {
624
+    flowXmlAndNode({
625
+      procInsId: this.taskForm.procInsId,
626
+      deployId: this.taskForm.deployId,
627
+    }).then(res => {
247 628
       this.flowData = res.data;
248
-    })
249
-  },
250
-  mounted() {
251
-
629
+    });
252 630
   },
631
+  mounted() {},
253 632
   methods: {
254 633
     initForm() {
255
-      listSettle({ projectId: this.taskForm.formId }).then(res => {
634
+      listSettle({ settleId: this.taskForm.formId }).then(res => {
256 635
         console.log(res);
257 636
         if (res.total == 1) {
258
-          this.form = res.rows[0]
259
-        } else {
260
-          if (this.taskName == '结算发起') {
261
-            this.form.reporter = this.$store.state.user.name
262
-            this.form.reportTime = parseTime(new Date(), '{y}-{m}-{d}')
637
+          this.form = res.rows[0];
638
+          this.flag = true;
639
+          this.handleSelectProject(res.rows[0].projectId);
640
+          this.listSettleWorkFn();
641
+          this.listSettleSummaryFn();
642
+        } else if (res.total == 0) {
643
+          this.flag = false;
644
+          if (this.taskName == "结算发起") {
645
+            this.form.reporter = this.$store.state.user.id;
646
+            this.form.reporterName = this.$store.state.user.name;
647
+            this.form.reportTime = parseTime(new Date(), "{y}-{m}-{d}");
263 648
           }
264 649
         }
265
-      })
650
+      });
266 651
     },
267 652
     // 查询项目列表
268 653
     getProjectList() {
269 654
       listProject({
270 655
         pageNum: 1,
271
-        pageSize: 99999999
656
+        pageSize: 99999999,
272 657
       }).then(response => {
273 658
         this.projectList = response.rows;
274
-      })
659
+      });
275 660
     },
276
-    // 选择项目.data
661
+    // 选择项目
277 662
     handleSelectProject(val) {
278 663
       if (val != "" && val != undefined && val != null) {
279 664
         getProject(val).then(res => {
280 665
           this.chooseProject = res.data;
281 666
           this.isSelect = true;
282
-        })
667
+        });
283 668
       } else {
284
-        this.isSelect = false
669
+        this.isSelect = false;
285 670
       }
286 671
     },
287 672
     isEmptyObject(obj) {
@@ -298,38 +683,47 @@ export default {
298 683
           for (let row of res.rows) {
299 684
             getContract(row.contractId).then(res => {
300 685
               if (res.data) {
301
-                if (this.form.contractCode != '') {
302
-                  this.form.contractCode = this.form.contractCode + '、' + res.data.contractCode;
686
+                if (this.form.contractCode != "") {
687
+                  this.form.contractCode =
688
+                    this.form.contractCode + "、" + res.data.contractCode;
303 689
                 } else {
304 690
                   this.form.contractCode = res.data.contractCode;
305 691
                 }
306
-                if (this.form.contractNumber != '') {
307
-                  this.form.contractNumber = this.form.contractNumber + '、' + res.data.contractNumber;
692
+                if (this.form.contractNumber != "") {
693
+                  this.form.contractNumber =
694
+                    this.form.contractNumber + "、" + res.data.contractNumber;
308 695
                 } else {
309 696
                   this.form.contractNumber = res.data.contractNumber;
310 697
                 }
311 698
               }
312
-            })
699
+            });
313 700
           }
314 701
         }
315
-      })
702
+      });
316 703
     },
317 704
     addWorkList() {
318 705
       this.settleWorkList.push({
319
-        content: '',
320
-        priceId: '',
321
-        scale: '',
322
-        unit: '',
323
-        groundType: '0',
324
-        price: '',
706
+        content: "",
707
+        priceId: "",
708
+        scale: "",
709
+        unit: "",
710
+        groundType: "0",
711
+        price: "",
325 712
         workload: 0,
326 713
         coefficient: 1,
327 714
         settle: 0,
328
-        remark: ''
715
+        remark: "",
329 716
       });
330 717
     },
331
-    deletWorkItem(index) {
332
-      let arr = this.settleWorkList;
718
+    addSumWorkList() {
719
+      this.settleSumList.push({
720
+        content: "",
721
+        amount: 0,
722
+        remark: "",
723
+      });
724
+    },
725
+    deletWorkItem(index, arr) {
726
+      // let arr = this.settleWorkList;
333 727
       if (arr.length == 1) {
334 728
         return;
335 729
       }
@@ -338,30 +732,121 @@ export default {
338 732
       }
339 733
     },
340 734
     calculateSettle(work) {
341
-      let sum = (work.workload * work.coefficient).toFixed(2)
342
-      work.settle = sum * Number(work.price)
735
+      let sum = work.workload * work.coefficient * work.price;
736
+      work.settle = Number(sum).toFixed(2);
737
+      this.calculateSumSettle();
738
+    },
739
+    calculateSumSettle() {
740
+      debugger;
741
+      let sum = 0;
742
+      let arr = this.settleWorkList;
743
+      for (let a of arr) {
744
+        sum = sum + Number(a.settle);
745
+      }
746
+      this.settleSumTr.amount = sum;
747
+    },
748
+    calculateActualSumSettle() {
749
+      let sum = 0;
750
+      let arr = this.settleSumList;
751
+      for (let a of arr) {
752
+        sum = sum + Number(a.amount);
753
+      }
754
+      this.actualSumSettle = sum;
343 755
     },
344 756
     handleChoosePrice(work, index) {
345
-      this.clickWork = work
346
-      this.clickWork.index = index
347
-      this.drawer = true
348
-
757
+      this.clickWork = work;
758
+      this.clickWork.index = index;
759
+      this.drawer = true;
349 760
     },
350 761
     getPrice(val) {
351
-      let index = this.clickWork.index
352
-      this.setValue(this.settleWorkList[index], 'scale', val.scaleGrade)
353
-      this.setValue(this.settleWorkList[index], 'unit', val.unit)
354
-      this.setValue(this.settleWorkList[index], 'groundType', val.groundType)
355
-      this.setValue(this.settleWorkList[index], 'price', val.price)
356
-      this.setValue(this.settleWorkList[index], 'priceId', val.priceId)
357
-      this.calculateSettle(this.settleWorkList[index])
358
-      this.drawer = false
762
+      let index = this.clickWork.index;
763
+      this.setValue(this.settleWorkList[index], "scale", val.scaleGrade);
764
+      this.setValue(this.settleWorkList[index], "unit", val.unit);
765
+      this.setValue(this.settleWorkList[index], "groundType", val.groundType);
766
+      this.setValue(this.settleWorkList[index], "price", val.price);
767
+      this.setValue(this.settleWorkList[index], "priceId", val.priceId);
768
+      this.calculateSettle(this.settleWorkList[index]);
769
+      this.drawer = false;
359 770
     },
360 771
     setValue(key, name, val) {
361
-      this.$set(key, name, val)
772
+      this.$set(key, name, val);
773
+    },
774
+    // 保存按钮
775
+    preserve() {
776
+      if (this.flag) {
777
+      } else {
778
+        console.log(this.form);
779
+        console.log(this.settleWorkList);
780
+        console.log(this.settleSumList);
781
+        this.addSettleFn();
782
+      }
783
+    },
784
+    addSettleFn() {
785
+      let settleId = this.taskForm.formId;
786
+      this.form.settleId = settleId;
787
+      addSettle(this.form).then(res => {
788
+        this.addSettleWorkFn(settleId);
789
+        this.addSettleSummaryFn(settleId);
790
+      });
362 791
     },
792
+    addSettleWorkFn(settleId) {
793
+      for (let work of this.settleWorkList) {
794
+        work.settleId = settleId;
795
+        addSettleWork(work);
796
+      }
797
+    },
798
+    addSettleSummaryFn(settleId) {
799
+      addSettleSummary(this.settleSumTr);
800
+      for (let item of this.settleSumList) {
801
+        item.settleId = settleId;
802
+        addSettleSummary(item);
803
+      }
804
+    },
805
+    listSettleWorkFn() {
806
+      listSettleWork({ settleId: this.taskForm.formId }).then(res => {
807
+        this.settleWorkList = res.rows;
808
+        for (let work of this.settleWorkList) {
809
+          getPrice(work.priceId).then(res => {
810
+            if (res.data) {
811
+              this.setValue(work, "scale", res.data.scaleGrade);
812
+              this.setValue(work, "unit", res.data.unit);
813
+              if (work.groundType == "0") {
814
+                work.price = res.data.commonPrice;
815
+              } else {
816
+                work.price = res.data.complexPrice;
817
+              }
818
+            }
819
+          });
820
+        }
821
+      });
822
+    },
823
+    listSettleSummaryFn() {
824
+      listSettleSummary({ settleId: this.taskForm.formId }).then(res => {
825
+        console.log(res);
826
+        this.settleSumList = res.rows;
827
+        for (let s of this.settleSumList) {
828
+          if (s.content == "结算费用合计") {
829
+            this.settleSumTr = s;
830
+            break;
831
+          }
832
+        }
833
+        this.settleSumList = this.settleSumList.filter(
834
+          item => item.content !== "结算费用合计"
835
+        );
836
+        this.calculateActualSumSettle();
837
+      });
838
+    },
839
+    updateSettleFn(){
840
+
841
+    },
842
+    updateSettleWorkFn(){
843
+
844
+    },
845
+    updateSettleSummaryFn(){
846
+
847
+},
363 848
   },
364
-}
849
+};
365 850
 </script>
366 851
 
367 852
 <style lang="scss" scoped>
@@ -393,4 +878,4 @@ table {
393 878
   /*设置背景颜色*/
394 879
   /* background-color: #bfa; */
395 880
 }
396
-</style>
881
+</style>

Loading…
Cancel
Save