Ver código fonte

修改预结算界面

余思翰 1 ano atrás
pai
commit
158e88d920

+ 11
- 7
oa-ui/src/views/oa/budget/addBudget.vue Ver arquivo

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-03-25 15:05:59
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-03-27 17:39:21
5
+ * @LastEditTime: 2024-03-28 17:49:30
6 6
 -->
7 7
 <!--
8 8
  * @Author: ysh
@@ -269,7 +269,7 @@
269 269
           <el-breadcrumb-item>固定成本小计</el-breadcrumb-item>
270 270
           <el-breadcrumb-item>¥ {{ budgetForm.fixCost }}</el-breadcrumb-item>
271 271
         </el-breadcrumb>
272
-        <choose-money :workList="workList"></choose-money>
272
+        <choose-money :workList="workList" @getSettle="getSettle"></choose-money>
273 273
       </div>
274 274
       <el-divider></el-divider>
275 275
       <div class="btn">
@@ -375,7 +375,7 @@ export default {
375 375
         {
376 376
           content: "实景三维制作(影像分辨率优于5cm)",
377 377
           scale: "1:500",
378
-          workload: "81",
378
+          workLoad: "10",
379 379
           unit: "km²",
380 380
           deadline: "2024-01-31",
381 381
           remark: "此为备注此为备注此为备注此为备注此为备注此为备注",
@@ -383,7 +383,7 @@ export default {
383 383
         {
384 384
           content: "XXXXXXXXXXXXXXXXXX",
385 385
           scale: "1:500",
386
-          workload: "81",
386
+          workLoad: "10",
387 387
           unit: "km²",
388 388
           deadline: "2024-01-31",
389 389
           remark: "此为备注此为备注此为备注此为备注此为备注此为备注",
@@ -432,7 +432,7 @@ export default {
432 432
         } else {
433 433
           this.activeStep += 1;
434 434
         }
435
-      } else if (this.activeStep == 1) {
435
+      } else {
436 436
         this.activeStep += 1;
437 437
       }
438 438
     },
@@ -453,9 +453,14 @@ export default {
453 453
         return res.data.salary;
454 454
       });
455 455
     },
456
+    getSettle(val){
457
+      console.log(val);
458
+      console.log(this.budgetForm);
459
+      this.budgetForm.settleExpense = val.settle;
460
+      this.budgetForm.workList = val.workList;
461
+    },
456 462
     // 计算单个人员的成本
457 463
     calculateUserTotal(user) {
458
-      debugger
459 464
       if (user.inOutPrice == undefined) {
460 465
         this.$message.error("请输入进出场单价");
461 466
         return;
@@ -478,7 +483,6 @@ export default {
478 483
     },
479 484
     // 合计
480 485
     calculateTotal(val) {
481
-      debugger
482 486
       const elements = document.querySelectorAll("." + val);
483 487
       let sum = 0;
484 488
       if (elements.length > 0) {

+ 162
- 22
oa-ui/src/views/oa/budget/components/chooseMoney.vue Ver arquivo

@@ -22,7 +22,7 @@
22 22
               {{ work.unit }}
23 23
             </td>
24 24
             <td>
25
-              {{ work.workload }}
25
+              {{ work.workLoad }}
26 26
             </td>
27 27
             <td>
28 28
               {{ work.deadline }}
@@ -39,12 +39,12 @@
39 39
             <td style="width: 100px">工作内容</td>
40 40
             <td>工作类别</td>
41 41
             <td>工作项目</td>
42
-            <td>项目细项</td>
42
+            <!-- <td>项目细项</td> -->
43 43
             <td>比例尺</td>
44 44
             <td>地类类型</td>
45
-            <td>单价</td>
46
-            <td>总工作量</td>
47
-            <td>系数</td>
45
+            <td style="width:90px;">单价</td>
46
+            <td style="width:90px;">总工作量</td>
47
+            <td style="width:70px;">系数</td>
48 48
             <td>总额</td>
49 49
           </tr>
50 50
           <tr v-for="(work, index) in workList" :key="index">
@@ -52,38 +52,64 @@
52 52
               {{ work.content }}
53 53
             </td>
54 54
             <td>
55
-              <el-select v-model="work.workType" :style="{ width: '100%' }" :loading="work.workTypeLoading"
56
-                @change="getWorkItemList(work.workType)">
57
-                <el-option v-for="item in work.workTypeList" :key="item.value" :label="item.label" :value="item.value">
55
+              <el-select v-model="work.workType" :style="{ width: '100%' }" :loading="work.workSelect.workTypeLoading"
56
+                @change="getWorkItemList(work, work.workType)">
57
+                <el-option v-for="item in work.workSelect.workTypeList" :key="item.value" :label="item.label"
58
+                  :value="item.value">
58 59
                 </el-option>
59 60
               </el-select>
60 61
             </td>
61 62
             <td>
62
-              {{ work.scale }}
63
-            </td>
64
-            <td>
65
-              {{ work.unit }}
63
+              <el-select v-model="work.workItem" :style="{ width: '100%' }" :remote="true"
64
+                @change="getScaleGradeList(work, work.workItem)">
65
+                <el-option v-for="item in work.workSelect.workItemList" :key="item.value" :label="item.label"
66
+                  :value="item.value">
67
+                </el-option>
68
+              </el-select>
66 69
             </td>
70
+            <!-- <td>
71
+              <el-select v-model="work.subItem" :style="{ width: '100%' }"
72
+                @change="getUnitPrice(work, work.workItem, work.subItem, work.scaleGrade, work.groundType)">
73
+                <el-option v-for="item in work.workSelect.subItemList" :key="item.value" :label="item.label"
74
+                  :value="item.value">
75
+                </el-option>
76
+              </el-select>
77
+            </td> -->
67 78
             <td>
68
-              {{ work.workload }}
79
+              <el-select v-model="work.scaleGrade" :style="{ width: '100%' }"
80
+                @change="getUnitPrice(work, work.workItem, work.subItem, work.scaleGrade, work.groundType)">
81
+                <el-option v-for="item in work.workSelect.scaleGradeList" :key="item.value" :label="item.label"
82
+                  :value="item.value">
83
+                </el-option>
84
+              </el-select>
69 85
             </td>
70 86
             <td>
71
-              {{ work.deadline }}
87
+              <el-select v-model="work.groundType" :style="{ width: '100%' }"
88
+                @change="getUnitPrice(work, work.workItem, work.subItem, work.scaleGrade, work.groundType)">
89
+                <el-option key="一般地类" label="一般地类" value="一般地类">
90
+                </el-option>
91
+                <el-option key="复杂地类" label="复杂地类" value="复杂地类">
92
+                </el-option>
93
+              </el-select>
72 94
             </td>
73 95
             <td>
74
-              {{ work.remark }}
96
+              {{ work.price }} / {{ work.unit }}
75 97
             </td>
76 98
             <td>
77
-              {{ work.remark }}
99
+              {{ work.workLoad }}
78 100
             </td>
79 101
             <td>
80
-              {{ work.remark }}
102
+              <el-input v-model="work.coefficient" placeholder="请输入系数" @blur="getTotal(work)"></el-input>
81 103
             </td>
82
-            <td>
83
-              {{ work.remark }}
104
+            <td class="workTotal">
105
+              {{ work.total }}
84 106
             </td>
85 107
           </tr>
86 108
         </table>
109
+        <div style="color:red">tips:预结算表中的系数为:困难系统和调整系数相乘的值(1分制)。例如:困难系数1,调整系数0.8,最终系数为0.8</div>
110
+      </el-form-item>
111
+      <el-form-item label="预结算合计:">
112
+        {{ settle }}<el-button @click="getSettle()" type="success" style="margin-left:30px;">计算</el-button>
87 113
       </el-form-item>
88 114
     </el-form>
89 115
   </div>
@@ -91,6 +117,7 @@
91 117
 
92 118
 <script>
93 119
 import { getWorkTypeList, getWorkItemList, getSubItemList, getScaleGradeList, getUnitPrice } from '@/api/oa/price/price'
120
+import { deepClone } from '@/utils'
94 121
 export default {
95 122
   props: {
96 123
     workList: {
@@ -98,19 +125,132 @@ export default {
98 125
       require: true
99 126
     }
100 127
   },
128
+  data() {
129
+    return {
130
+      // 工作选项
131
+      workSelect: {
132
+        // 项目列表
133
+        projectList: [],
134
+        // 工作类别列表
135
+        workTypeList: [],
136
+        // 工作项目
137
+        workItemList: [],
138
+        // 项目细项
139
+        subItemList: [],
140
+        // 比例尺
141
+        scaleGradeList: [],
142
+        workTypeLoading: true,
143
+        workItemLoading: true,
144
+        subItemLoading: true,
145
+        scaleGradeLoading: true,
146
+      },
147
+      settle: 0
148
+    }
149
+  },
101 150
   created() {
102
-    this.getWorkTypeList();
151
+    for (let work of this.workList) {
152
+      this.setValue(work, 'workSelect', deepClone(this.workSelect));
153
+      this.getWorkTypeList(work);
154
+    }
103 155
   },
104 156
   methods: {
105 157
     /* 获取工作类别 */
106 158
     getWorkTypeList(work) {
107 159
       getWorkTypeList().then(res => {
108 160
         if (res) {
109
-          this.setValue(work, 'workTypeList', this.setArray(res));
110
-          this.setValue(work, 'workTypeLoading', false);
161
+          this.setValue(work.workSelect, 'workTypeList', this.setArray(res));
162
+          this.setValue(work.workSelect, 'workTypeLoading', false);
111 163
         }
112 164
       });
113 165
     },
166
+    /* 获取工作项目 */
167
+    getWorkItemList(work, workType) {
168
+      getWorkItemList({ workType: workType }).then(res => {
169
+        if (res) {
170
+          let workItemList = this.setArray(res);
171
+          work.workSelect.workItemLoading = false;
172
+          work.workSelect.workItemList = workItemList;
173
+          work.workItem = workItemList[0].label;
174
+          // this.getSubItemList(work, work.workItem);
175
+          work.subItem = '';
176
+          this.getScaleGradeList(work, work.workItem);
177
+        }
178
+      })
179
+    },
180
+    /* 获取项目细项 */
181
+    getSubItemList(work, workItem) {
182
+      getSubItemList({ workItem }).then(res => {
183
+        if (res) {
184
+          let subItemList = this.setArray(res);
185
+          work.workSelect.subItemLoading = false;
186
+          work.workSelect.subItemList = subItemList;
187
+          work.subItem = subItemList[0].label;
188
+          if (work.scaleGrade == undefined) {
189
+            this.setValue(work, 'scaleGrade', '无');
190
+          }
191
+          if (work.groundType == undefined) {
192
+            this.setValue(work, 'groundType', '一般地类');
193
+          }
194
+          this.getUnitPrice(work, work.workItem, work.subItem, work.scaleGrade, work.groundType);
195
+        }
196
+      })
197
+    },
198
+    /* 获取比例尺 */
199
+    getScaleGradeList(work, workItem) {
200
+      getScaleGradeList({ workItem }).then(res => {
201
+        if (res) {
202
+          let scaleGradeList = this.setArray(res);
203
+          work.workSelect.scaleGradeLoading = false;
204
+          work.workSelect.scaleGradeList = scaleGradeList;
205
+          this.setValue(work, 'scaleGrade', scaleGradeList[0].label)
206
+          // work.scaleGrade = scaleGradeList[0].label;
207
+          if (work.scaleGrade == undefined) {
208
+            this.setValue(work, 'scaleGrade', '无');
209
+          }
210
+          if (work.groundType == undefined) {
211
+            this.setValue(work, 'groundType', '一般地类');
212
+          }
213
+          this.getUnitPrice(work, work.workItem, work.subItem, work.scaleGrade, work.groundType);
214
+        }
215
+      })
216
+    },
217
+    /* 获取单价 */
218
+    getUnitPrice(work, workItem, subItem, scaleGrade, groundType) {
219
+      getUnitPrice({ workItem, subItem, scaleGrade, priceType: groundType }).then(res => {
220
+        if (res.length != 0) {
221
+          work.priceId = res.data.id;
222
+          this.setValue(work, 'price', res.data.price)
223
+          this.setValue(work, 'coefficient', 1)
224
+          if (work.workLoad != undefined || work.workLoad != '') {
225
+            this.getTotal(work);
226
+          }
227
+        }
228
+      })
229
+    },
230
+    /* 获取总额 */
231
+    getTotal(work) {
232
+      let total = this.calculateTotal(work.price, work.coefficient, work.workLoad, 1);
233
+      this.setValue(work, 'total', total)
234
+    },
235
+    /* 计算总额 */
236
+    calculateTotal(price, coefficient, workLoad, percent) {
237
+      return ((parseFloat(price) * parseFloat(coefficient) * parseFloat(workLoad)) * percent).toFixed(2);
238
+    },
239
+    getSettle() {
240
+      const elements = document.querySelectorAll(".workTotal");
241
+      let sum = 0;
242
+      if (elements.length > 0) {
243
+        for (let e of elements) {
244
+          sum = sum + Number(e.innerHTML);
245
+        }
246
+        this.settle = sum.toFixed(2)
247
+      }
248
+      let obj = {}
249
+      obj.workList = this.workList;
250
+      obj.settle = this.settle;
251
+      console.log(this.workList);
252
+      this.$emit('getSettle',obj)
253
+    },
114 254
     //数组去重
115 255
     setArray(arr) {
116 256
       if (arr != [] && arr != undefined) {

Carregando…
Cancelar
Salvar