Browse Source

修改项目结算

余思翰 1 year ago
parent
commit
2fcb6cee53

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


+ 28
- 8
oa-ui/src/views/flowable/form/budget/budgetInfo.vue View File

2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-04-03 16:28:09
3
  * @Date: 2024-04-03 16:28:09
4
  * @LastEditors: Please set LastEditors
4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-07-10 19:15:14
5
+ * @LastEditTime: 2024-07-11 18:17:52
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div class="main">
8
   <div class="main">
62
         </el-descriptions-item>
62
         </el-descriptions-item>
63
         <el-descriptions-item label="直接成本" :span="3">
63
         <el-descriptions-item label="直接成本" :span="3">
64
           <table border="1" style="width:100%">
64
           <table border="1" style="width:100%">
65
-            <tr style="background-color:#f8f8f9">
66
-              <td :rowspan="workLen + 2">直接成本</td>
65
+            <tr style="background-color:#f8f8f9" v-if="workList.length != 0">
67
               <td>工作简述</td>
66
               <td>工作简述</td>
68
               <td>工作内容</td>
67
               <td>工作内容</td>
69
               <td>数量</td>
68
               <td>数量</td>
191
             </tr>
190
             </tr>
192
           </table>
191
           </table>
193
         </el-descriptions-item>
192
         </el-descriptions-item>
194
-        <el-descriptions-item label="外协费用" :span="3">
193
+        <el-descriptions-item label="外协费用" :span="2">
195
           <div v-if="taskName == '分管审核' || taskName == '总经理审核'">
194
           <div v-if="taskName == '分管审核' || taskName == '总经理审核'">
196
             <el-input-number :controls="false" style="width:100%;" v-model="budgetForm.outExpense"
195
             <el-input-number :controls="false" style="width:100%;" v-model="budgetForm.outExpense"
197
               @blur="computedDirectExpense()"></el-input-number>
196
               @blur="computedDirectExpense()"></el-input-number>
200
             {{ budgetForm.outExpense }}
199
             {{ budgetForm.outExpense }}
201
           </div>
200
           </div>
202
         </el-descriptions-item>
201
         </el-descriptions-item>
203
-        <el-descriptions-item label="车船租赁" :span="3">
202
+        <el-descriptions-item label="备注" :span="1">
203
+          {{ budgetForm.outRemark }}
204
+        </el-descriptions-item>
205
+        <el-descriptions-item label="车船租赁" :span="2">
204
           <div v-if="taskName == '分管审核' || taskName == '总经理审核'">
206
           <div v-if="taskName == '分管审核' || taskName == '总经理审核'">
205
             <el-input-number :controls="false" style="width:100%;" v-model="budgetForm.rentExpense"
207
             <el-input-number :controls="false" style="width:100%;" v-model="budgetForm.rentExpense"
206
               @blur="computedDirectExpense()"></el-input-number>
208
               @blur="computedDirectExpense()"></el-input-number>
209
             {{ budgetForm.rentExpense }}
211
             {{ budgetForm.rentExpense }}
210
           </div>
212
           </div>
211
         </el-descriptions-item>
213
         </el-descriptions-item>
212
-        <el-descriptions-item label="其他费用" :span="3">
214
+        <el-descriptions-item label="备注" :span="1">
215
+          {{ budgetForm.rentRemark }}
216
+        </el-descriptions-item>
217
+        <el-descriptions-item label="其他费用" :span="2">
213
           <div v-if="taskName == '分管审核' || taskName == '总经理审核'">
218
           <div v-if="taskName == '分管审核' || taskName == '总经理审核'">
214
             <el-input-number :controls="false" style="width:100%;" v-model="budgetForm.otherExpense"
219
             <el-input-number :controls="false" style="width:100%;" v-model="budgetForm.otherExpense"
215
               @blur="computedDirectExpense()"></el-input-number>
220
               @blur="computedDirectExpense()"></el-input-number>
218
             {{ budgetForm.otherExpense }}
223
             {{ budgetForm.otherExpense }}
219
           </div>
224
           </div>
220
         </el-descriptions-item>
225
         </el-descriptions-item>
221
-        <el-descriptions-item label="税费成本" :span="3">
226
+        <el-descriptions-item label="备注" :span="1">
227
+          {{ budgetForm.otherRemark }}
228
+        </el-descriptions-item>
229
+        <el-descriptions-item label="税费成本" :span="2">
222
           <div v-if="taskName == '分管审核' || taskName == '总经理审核'">
230
           <div v-if="taskName == '分管审核' || taskName == '总经理审核'">
223
             <el-input-number :controls="false" style="width:100%;" v-model="budgetForm.taxExpense"
231
             <el-input-number :controls="false" style="width:100%;" v-model="budgetForm.taxExpense"
224
               @blur="computedDirectExpense()"></el-input-number>
232
               @blur="computedDirectExpense()"></el-input-number>
227
             {{ budgetForm.taxExpense }}
235
             {{ budgetForm.taxExpense }}
228
           </div>
236
           </div>
229
         </el-descriptions-item>
237
         </el-descriptions-item>
230
-        <el-descriptions-item label="经营管理费用" :span="3">
238
+        <el-descriptions-item label="备注" :span="1">
239
+          {{ budgetForm.taxRemark }}
240
+        </el-descriptions-item>
241
+        <el-descriptions-item label="经营管理费用" :span="2">
231
           <div v-if="taskName == '分管审核' || taskName == '总经理审核'">
242
           <div v-if="taskName == '分管审核' || taskName == '总经理审核'">
232
             <el-input-number :controls="false" style="width:100%;" v-model="budgetForm.businessExpense"
243
             <el-input-number :controls="false" style="width:100%;" v-model="budgetForm.businessExpense"
233
               @blur="computedDirectExpense()"></el-input-number>
244
               @blur="computedDirectExpense()"></el-input-number>
236
             {{ budgetForm.businessExpense }}
247
             {{ budgetForm.businessExpense }}
237
           </div>
248
           </div>
238
         </el-descriptions-item>
249
         </el-descriptions-item>
250
+        <el-descriptions-item label="备注" :span="1">
251
+          {{ budgetForm.businessRemark }}
252
+        </el-descriptions-item>
239
         <el-descriptions-item label="预算成本合计" :span="3">
253
         <el-descriptions-item label="预算成本合计" :span="3">
240
           <div class="text-center" style="font-weight:bold;font-size:18px;color:orange">
254
           <div class="text-center" style="font-weight:bold;font-size:18px;color:orange">
241
             {{ budgetForm.totalBudget }}
255
             {{ budgetForm.totalBudget }}
333
       type: String,
347
       type: String,
334
     }
348
     }
335
   },
349
   },
350
+  watch: {
351
+    'taskForm.formId'() {
352
+      this.initBudgetForm();
353
+    }
354
+  },
336
   data() {
355
   data() {
337
     return {
356
     return {
338
       projectId: '',
357
       projectId: '',
608
 
627
 
609
 <style lang="scss" scoped>
628
 <style lang="scss" scoped>
610
 @import "@/assets/styles/element-reset.scss";
629
 @import "@/assets/styles/element-reset.scss";
630
+
611
 .main {
631
 .main {
612
   width: 100%;
632
   width: 100%;
613
   margin: 0 auto;
633
   margin: 0 auto;

+ 7
- 12
oa-ui/src/views/flowable/form/components/settlePrint.vue View File

101
           <td :colspan="2" style="text-align:left;">签名:<span class="auditor">{{ form.jsUserName }}</span></td>
101
           <td :colspan="2" style="text-align:left;">签名:<span class="auditor">{{ form.jsUserName }}</span></td>
102
           <td :colspan="2" style="text-align:left;">日期:{{ form.jsTime }}</td>
102
           <td :colspan="2" style="text-align:left;">日期:{{ form.jsTime }}</td>
103
         </tr>
103
         </tr>
104
-        <tr>
105
-          <td :colspan="2" class="fontbold">项目管理部(结算)</td>
106
-          <td :colspan="4" class="conment-width">{{ form.xmComment }}</td>
107
-          <td :colspan="2" style="text-align:left;">签名:<span class="auditor">{{ form.xmUserName }}</span></td>
108
-          <td :colspan="2" style="text-align:left;">日期:{{ form.xmTime }}</td>
109
-        </tr>
110
-        <tr>
111
-          <td :colspan="2" class="fontbold">项目承担部门(确认)</td>
112
-          <td :colspan="4" class="conment-width">{{ form.deptComment }}</td>
113
-          <td :colspan="2" style="text-align:left;">签名:<span class="auditor">{{ form.deptUserName }}</span></td>
114
-          <td :colspan="2" style="text-align:left;">日期:{{ form.deptTime }}</td>
115
-        </tr>
116
         <tr>
104
         <tr>
117
           <td :colspan="2" class="fontbold">经营发展部(校核)</td>
105
           <td :colspan="2" class="fontbold">经营发展部(校核)</td>
118
           <td :colspan="4" class="conment-width">{{ form.jyComment }}</td>
106
           <td :colspan="4" class="conment-width">{{ form.jyComment }}</td>
131
           <td :colspan="2" style="text-align:left;">签名:<span class="auditor">{{ form.gmUserName }}</span></td>
119
           <td :colspan="2" style="text-align:left;">签名:<span class="auditor">{{ form.gmUserName }}</span></td>
132
           <td :colspan="2" style="text-align:left;">日期:{{ form.gmTime }}</td>
120
           <td :colspan="2" style="text-align:left;">日期:{{ form.gmTime }}</td>
133
         </tr>
121
         </tr>
122
+        <tr v-if="form.dszTime">
123
+          <td :colspan="2" class="fontbold">董事长(批准)</td>
124
+          <td :colspan="4" class="conment-width">{{ form.dszComment }}</td>
125
+          <td :colspan="2" style="text-align:left;">签名:<span class="auditor">{{ form.dszUserName }}</span></td>
126
+          <td :colspan="2" style="text-align:left;">日期:{{ form.dszTime }}</td>
127
+        </tr>
134
       </table>
128
       </table>
135
     </div>
129
     </div>
136
     <div class="text-center mt20">
130
     <div class="text-center mt20">
192
   },
186
   },
193
   methods: {
187
   methods: {
194
     initTable() {
188
     initTable() {
189
+      console.log(this.settleList);
195
       this.deductionsList = []
190
       this.deductionsList = []
196
       this.deptSettleList = []
191
       this.deptSettleList = []
197
       for (let s of this.settleList) {
192
       for (let s of this.settleList) {

+ 242
- 224
oa-ui/src/views/flowable/form/settleForm.vue View File

1
 <!--
1
 <!--
2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-04-30 09:03:14
3
  * @Date: 2024-04-30 09:03:14
4
- * @LastEditors: wrh
5
- * @LastEditTime: 2024-07-10 17:20:43
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2024-07-11 17:44:18
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div class="app-container" v-loading="loading">
8
   <div class="app-container" v-loading="loading">
9
     <el-row :gutter="20">
9
     <el-row :gutter="20">
10
       <el-col :span="flowDisabled ? 19 : 24" :xs="24">
10
       <el-col :span="flowDisabled ? 19 : 24" :xs="24">
11
+        <el-button type="success" icon="el-icon-printer" @click="printOpen = true">打印</el-button>
11
         <h2 class="text-center">项目结算表</h2>
12
         <h2 class="text-center">项目结算表</h2>
12
         <div class="headers">
13
         <div class="headers">
13
           项目信息
14
           项目信息
15
         </div>
16
         </div>
16
         <el-form ref="settleForm" :model="form" :rules="rules" label-width="160px" :disabled="disabled">
17
         <el-form ref="settleForm" :model="form" :rules="rules" label-width="160px" :disabled="disabled">
17
           <el-form-item label="项目编号" prop="projectId">
18
           <el-form-item label="项目编号" prop="projectId">
18
-            <el-button icon="el-icon-plus" size="mini" type="primary" @click="prOpen = true">选择项目</el-button>
19
+            <el-button icon="el-icon-plus" size="mini" type="primary" @click="prOpen = true"
20
+              :disabled="taskName != '结算发起'">选择项目</el-button>
19
             <el-descriptions border v-if="isSelect" style="margin-top: 10px" :column="2">
21
             <el-descriptions border v-if="isSelect" style="margin-top: 10px" :column="2">
20
               <el-descriptions-item label="项目编号" label-class-name="my-label">
22
               <el-descriptions-item label="项目编号" label-class-name="my-label">
21
                 {{ chooseProject.projectNumber }}
23
                 {{ chooseProject.projectNumber }}
30
                 {{ chooseProject.contractNumber }}
32
                 {{ chooseProject.contractNumber }}
31
               </el-descriptions-item>
33
               </el-descriptions-item>
32
               <el-descriptions-item label="项目负责人" label-class-name="my-label">
34
               <el-descriptions-item label="项目负责人" label-class-name="my-label">
33
-                {{ chooseProject.projectLeaderUser ? chooseProject.projectLeaderUser.nickName : "" }}
35
+                {{ getUserName(chooseProject.projectLeader) }}
34
               </el-descriptions-item>
36
               </el-descriptions-item>
35
               <el-descriptions-item label="甲方单位" label-class-name="my-label">
37
               <el-descriptions-item label="甲方单位" label-class-name="my-label">
36
-                {{ chooseProject.partyA.partyAName }}
38
+                {{ chooseProject.partyA ? chooseProject.partyA.partyAName : '' }}
37
               </el-descriptions-item>
39
               </el-descriptions-item>
38
               <el-descriptions-item label="联系人" label-class-name="my-label">
40
               <el-descriptions-item label="联系人" label-class-name="my-label">
39
                 {{ chooseProject.contactPerson }}
41
                 {{ chooseProject.contactPerson }}
79
             <FileUpload v-if="taskName == '结算发起'" :limit="1" :filePathName="'项目结算/原始数据'"
81
             <FileUpload v-if="taskName == '结算发起'" :limit="1" :filePathName="'项目结算/原始数据'"
80
               :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']" @input="setSettleDocument">
82
               :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']" @input="setSettleDocument">
81
             </FileUpload>
83
             </FileUpload>
82
-            <div v-if="form.settleDocument && taskName != '结算发起'" class="upload-list">
83
-              <!-- <el-link :href="`${baseUrl}${'/profile/upload' + form.settleDocument}`" :underline="false"
84
-                target="_blank">
85
-                <span class="el-icon-document" style="color: #00f">
86
-                  {{ getFileName(form.settleDocument) }}
87
-                </span>
88
-              </el-link> -->
84
+            <div v-if="form.settleDocument" class="upload-list">
89
               <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + form.settleDocument}`)">
85
               <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + form.settleDocument}`)">
90
                 {{ getFileName(form.settleDocument) }}
86
                 {{ getFileName(form.settleDocument) }}
91
               </el-link>
87
               </el-link>
95
               </el-link>
91
               </el-link>
96
             </div>
92
             </div>
97
           </el-form-item>
93
           </el-form-item>
98
-          <!-- <el-form-item label="项目管理部审核结算单" prop="">
99
-            <FileUpload v-if="taskName == '项目管理部结算'" :limit="1" :filePathName="'项目结算/项目管理部审核结算单'"
94
+          <el-form-item label="经营发展部审核结算单" prop="">
95
+            <FileUpload v-if="taskName == '经营发展部校核'" :limit="1" :filePathName="'项目结算/经营发展部审核结算单'"
100
               :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']" @input="setModifyDocument">
96
               :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']" @input="setModifyDocument">
101
             </FileUpload>
97
             </FileUpload>
102
-            <div v-if="taskName != '项目管理部结算' && form.modifyDocument" class="upload-list">
103
-              <el-link :href="`${baseUrl}${'/profile/upload' + form.modifyDocument}`" :underline="false"
104
-                target="_blank">
105
-                <span class="el-icon-document" style="color: #00f">
106
-                  {{ getFileName(form.modifyDocument) }}
107
-                </span>
98
+            <div v-if="form.modifyDocument" class="upload-list">
99
+              <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + form.modifyDocument}`)">
100
+                {{ getFileName(form.modifyDocument) }}
101
+              </el-link>
102
+              <el-link class="ml20" type="warning" :href="`${baseUrl}${'/profile/upload' + form.modifyDocument}`"
103
+                :underline="false" target="_blank">
104
+                <span class="el-icon-download">下载文件</span>
108
               </el-link>
105
               </el-link>
109
             </div>
106
             </div>
110
-          </el-form-item> -->
107
+          </el-form-item>
111
           <el-form-item label="分管领导审核结算单" prop="">
108
           <el-form-item label="分管领导审核结算单" prop="">
112
             <FileUpload v-if="taskName == '分管审核'" :limit="1" :filePathName="'项目结算/分管领导审核结算单'"
109
             <FileUpload v-if="taskName == '分管审核'" :limit="1" :filePathName="'项目结算/分管领导审核结算单'"
113
               :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']" @input="setFinalDocument">
110
               :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']" @input="setFinalDocument">
114
             </FileUpload>
111
             </FileUpload>
115
-            <div v-if="taskName != '分管审核' && form.finalDocument" class="upload-list">
116
-              <el-link :href="`${baseUrl}${'/profile/upload' + form.finalDocument}`" :underline="false" target="_blank">
117
-                <span class="el-icon-document" style="color: #00f">
118
-                  {{ getFileName(form.finalDocument) }}
119
-                </span>
112
+            <div v-if="form.finalDocument" class="upload-list">
113
+              <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + form.finalDocument}`)">
114
+                {{ getFileName(form.finalDocument) }}
115
+              </el-link>
116
+              <el-link class="ml20" type="warning" :href="`${baseUrl}${'/profile/upload' + form.finalDocument}`"
117
+                :underline="false" target="_blank">
118
+                <span class="el-icon-download">下载文件</span>
120
               </el-link>
119
               </el-link>
121
             </div>
120
             </div>
122
           </el-form-item>
121
           </el-form-item>
180
                 <td>
179
                 <td>
181
               <tr>
180
               <tr>
182
                 <td>
181
                 <td>
183
-                  <el-button size="mini" type="primary" icon="el-icon-plus"
182
+                  <el-button size="mini" type="primary" icon="el-icon-plus" :disabled="isModify"
184
                     @click="handleChoosePrice(work, index)">选择工作内容</el-button>
183
                     @click="handleChoosePrice(work, index)">选择工作内容</el-button>
185
                 </td>
184
                 </td>
186
               </tr>
185
               </tr>
187
               <tr>
186
               <tr>
188
                 <td>
187
                 <td>
189
-                  <el-input v-model="work.content" type="textarea" clearable
190
-                    :autosize="{ minRows: 4, maxRows: 10 }"></el-input>
188
+                  <el-input v-model="work.content" type="textarea" clearable :autosize="{ minRows: 4, maxRows: 10 }"
189
+                    :disabled="isModify"></el-input>
191
                 </td>
190
                 </td>
192
               </tr>
191
               </tr>
193
               </td>
192
               </td>
205
               </td>
204
               </td>
206
               <td>
205
               <td>
207
                 <el-input-number :precision="2" style="width: 100px" v-model="work.workload" clearable
206
                 <el-input-number :precision="2" style="width: 100px" v-model="work.workload" clearable
208
-                  @blur="calculateSettle(work)" :controls="false"></el-input-number>
207
+                  :disabled="isModify" @blur="calculateSettle(work)" :controls="false"></el-input-number>
209
               </td>
208
               </td>
210
               <td>
209
               <td>
211
                 <div style="display: flex">
210
                 <div style="display: flex">
212
                   <el-input-number :precision="2" style="width: 100px" v-model="work.coefficient" clearable
211
                   <el-input-number :precision="2" style="width: 100px" v-model="work.coefficient" clearable
213
-                    @blur="calculateSettle(work)" :controls="false"></el-input-number>
212
+                    :disabled="isModify" @blur="calculateSettle(work)" :controls="false"></el-input-number>
214
                   <el-popover placement="top-start" title="系数备注" width="200" trigger="click">
213
                   <el-popover placement="top-start" title="系数备注" width="200" trigger="click">
215
                     <div v-html="work.noteTip"></div>
214
                     <div v-html="work.noteTip"></div>
216
                     <i class="el-icon-info" slot="reference" @click="getCoefficientRemark(work, work.workType)"></i>
215
                     <i class="el-icon-info" slot="reference" @click="getCoefficientRemark(work, work.workType)"></i>
222
                 {{ work.settle }}
221
                 {{ work.settle }}
223
               </td>
222
               </td>
224
               <td>
223
               <td>
225
-                <el-input v-model="work.remark" type="textarea" clearable
224
+                <el-input v-model="work.remark" type="textarea" clearable :disabled="isModify"
226
                   :autosize="{ minRows: 4, maxRows: 10 }"></el-input>
225
                   :autosize="{ minRows: 4, maxRows: 10 }"></el-input>
227
               </td>
226
               </td>
228
               <td>
227
               <td>
234
                 <td :colspan="8">结算费用合计</td>
233
                 <td :colspan="8">结算费用合计</td>
235
                 <td>{{ settleSumTr.amount }}</td>
234
                 <td>{{ settleSumTr.amount }}</td>
236
                 <td>
235
                 <td>
237
-                  <el-input v-model="settleSumTr.remark" type="textarea" clearable
236
+                  <el-input v-model="settleSumTr.remark" type="textarea" clearable :disabled="isModify"
238
                     :autosize="{ minRows: 2, maxRows: 10 }"></el-input>
237
                     :autosize="{ minRows: 2, maxRows: 10 }"></el-input>
239
                 </td>
238
                 </td>
240
               </tr>
239
               </tr>
241
             </table>
240
             </table>
242
             <el-button icon="el-icon-plus" type="primary" plain size="mini" @click="addWorkList"></el-button>
241
             <el-button icon="el-icon-plus" type="primary" plain size="mini" @click="addWorkList"></el-button>
242
+            <div v-if="exceed">
243
+              <el-alert :title="'超过预算金额:' + exceedAmount" type="error">
244
+              </el-alert>
245
+            </div>
243
           </el-form-item>
246
           </el-form-item>
244
 
247
 
245
           <!-- 结算汇总 -->
248
           <!-- 结算汇总 -->
257
                 <td style="width: 280px">备注</td>
260
                 <td style="width: 280px">备注</td>
258
                 <td style="width: 100px">操作</td>
261
                 <td style="width: 100px">操作</td>
259
               </tr>
262
               </tr>
260
-              <tr v-for="(work, index) in settleSumList" :key="index">
263
+              <tr v-for="(  work, index  ) in   settleSumList  " :key="index">
261
                 <td>
264
                 <td>
262
                   {{ index + 1 }}
265
                   {{ index + 1 }}
263
                 </td>
266
                 </td>
264
                 <td>
267
                 <td>
265
-                  <el-input v-model="work.content" type="textarea" clearable :autosize="{ minRows: 2, maxRows: 10 }">
268
+                  <el-input v-model="work.content" type="textarea" clearable :autosize="{ minRows: 2, maxRows: 10 }"
269
+                    :disabled="isModify">
266
                   </el-input>
270
                   </el-input>
267
                 </td>
271
                 </td>
268
                 <td>
272
                 <td>
269
                   <el-input-number :min="0" :precision="2" style="width: 200px" v-model="work.amount" clearable
273
                   <el-input-number :min="0" :precision="2" style="width: 200px" v-model="work.amount" clearable
270
-                    :controls="false" @blur="calculateActualSumSettle()"></el-input-number>
274
+                    :disabled="isModify" :controls="false" @blur="calculateActualSumSettle()"></el-input-number>
271
                   <!-- {{ work.amount }} -->
275
                   <!-- {{ work.amount }} -->
272
                 </td>
276
                 </td>
273
                 <td>
277
                 <td>
274
-                  <el-input v-model="work.remark" type="textarea" clearable :autosize="{ minRows: 2, maxRows: 10 }">
278
+                  <el-input v-model="work.remark" type="textarea" clearable :autosize="{ minRows: 2, maxRows: 10 }"
279
+                    :disabled="isModify">
275
                   </el-input>
280
                   </el-input>
276
                 </td>
281
                 </td>
277
                 <td>
282
                 <td>
291
                 <td style="width: 280px">备注</td>
296
                 <td style="width: 280px">备注</td>
292
                 <td style="width: 100px">操作</td>
297
                 <td style="width: 100px">操作</td>
293
               </tr>
298
               </tr>
294
-              <tr v-for="(dept, index) in deptSettleList" :key="index">
299
+              <tr v-for="(  dept, index  ) in   deptSettleList  " :key="index">
295
                 <td :rowspan="deptSettleList.length" v-if="index == 0">
300
                 <td :rowspan="deptSettleList.length" v-if="index == 0">
296
                   {{ Number(actualSumSettle).toFixed(2) }}
301
                   {{ Number(actualSumSettle).toFixed(2) }}
297
                 </td>
302
                 </td>
301
                 <td>
306
                 <td>
302
                   <!-- <el-input v-model="dept.content" type="textarea" clearable :autosize="{ minRows: 2, maxRows: 10 }">
307
                   <!-- <el-input v-model="dept.content" type="textarea" clearable :autosize="{ minRows: 2, maxRows: 10 }">
303
                   </el-input> -->
308
                   </el-input> -->
304
-                  <el-select v-model="dept.content" placeholder="请选择" filterable clearable style="width:100%;">
305
-                    <el-option v-for="item in deptList" :key="item.deptId" :label="item.deptName"
309
+                  <el-select v-model="dept.content" placeholder="请选择" filterable clearable style="width:100%;"
310
+                    :disabled="isModify">
311
+                    <el-option v-for="  item   in   deptList  " :key="item.deptId" :label="item.deptName"
306
                       :value="item.deptName">
312
                       :value="item.deptName">
307
                     </el-option>
313
                     </el-option>
308
                   </el-select>
314
                   </el-select>
309
                 </td>
315
                 </td>
310
                 <td>
316
                 <td>
311
                   <el-input-number :precision="2" style="width: 200px" v-model="dept.amount" clearable :controls="false"
317
                   <el-input-number :precision="2" style="width: 200px" v-model="dept.amount" clearable :controls="false"
312
-                    @blur="calculateDeptAmount(index)"></el-input-number>
318
+                    :disabled="isModify" @blur="calculateDeptAmount(index)"></el-input-number>
313
                 </td>
319
                 </td>
314
                 <td>
320
                 <td>
315
-                  <el-input v-model="dept.remark" type="textarea" clearable :autosize="{ minRows: 2, maxRows: 10 }">
321
+                  <el-input v-model="dept.remark" type="textarea" clearable :autosize="{ minRows: 2, maxRows: 10 }"
322
+                    :disabled="isModify">
316
                   </el-input>
323
                   </el-input>
317
                 </td>
324
                 </td>
318
                 <td>
325
                 <td>
324
                 <td :colspan="2">结算说明</td>
331
                 <td :colspan="2">结算说明</td>
325
                 <td :colspan="3">
332
                 <td :colspan="3">
326
                   <el-input v-model="form.settleComment" type="textarea" clearable placeholder="请输入说明"
333
                   <el-input v-model="form.settleComment" type="textarea" clearable placeholder="请输入说明"
327
-                    :autosize="{ minRows: 2, maxRows: 10 }">
334
+                    :autosize="{ minRows: 2, maxRows: 10 }" :disabled="isModify">
328
                   </el-input>
335
                   </el-input>
329
                 </td>
336
                 </td>
330
               </tr>
337
               </tr>
372
                 </el-form-item>
379
                 </el-form-item>
373
               </el-col>
380
               </el-col>
374
             </el-row>
381
             </el-row>
375
-            <!-- <el-form-item label="项目管理部(结算)">
376
-              <el-input v-model="form.xmComment" type="textarea" :disabled="taskName != '项目管理部结算'" clearable
377
-                :autosize="{ minRows: 4, maxRows: 10 }">
378
-              </el-input>
379
-            </el-form-item>
380
-            <el-row>
381
-              <el-col :span="6" :xs="24" :offset="12">
382
-                <el-form-item label="签名:" label-width="120px">
383
-                  <span class="auditor"> {{ form.xmUserName }} </span>
384
-                </el-form-item>
385
-              </el-col>
386
-              <el-col :span="6">
387
-                <el-form-item label="日期:" label-width="120px">
388
-                  <span> {{ form.xmTime }} </span>
389
-                </el-form-item>
390
-              </el-col>
391
-            </el-row>
392
-            <el-form-item label="项目承担部门(确认)">
393
-              <el-input v-model="form.deptComment" type="textarea" :disabled="taskName != '结算发起人确认'" clearable
394
-                :autosize="{ minRows: 4, maxRows: 10 }">
395
-              </el-input>
396
-            </el-form-item>
397
-            <el-row>
398
-              <el-col :span="6" :xs="24" :offset="12">
399
-                <el-form-item label="签名:" label-width="120px">
400
-                  <span class="auditor"> {{ form.deptUserName }} </span>
401
-                </el-form-item>
402
-              </el-col>
403
-              <el-col :span="6">
404
-                <el-form-item label="日期:" label-width="120px">
405
-                  <span> {{ form.deptTime }} </span>
406
-                </el-form-item>
407
-              </el-col>
408
-            </el-row> -->
409
             <el-form-item label="经营发展部(校核)">
382
             <el-form-item label="经营发展部(校核)">
410
               <el-input v-model="form.jyComment" type="textarea" :disabled="taskName != '经营发展部校核'" clearable
383
               <el-input v-model="form.jyComment" type="textarea" :disabled="taskName != '经营发展部校核'" clearable
411
                 :autosize="{ minRows: 4, maxRows: 10 }">
384
                 :autosize="{ minRows: 4, maxRows: 10 }">
457
                 </el-form-item>
430
                 </el-form-item>
458
               </el-col>
431
               </el-col>
459
             </el-row>
432
             </el-row>
433
+
434
+            <el-form-item label="董事长(批准)" v-if="exceed">
435
+              <el-input v-model="form.dszComment" type="textarea" :disabled="taskName != '董事长批准'" clearable
436
+                :autosize="{ minRows: 4, maxRows: 10 }">
437
+              </el-input>
438
+            </el-form-item>
439
+            <el-row v-if="exceed">
440
+              <el-col :span="6" :xs="24" :offset="12">
441
+                <el-form-item label="签名:" label-width="120px">
442
+                  <span class="auditor"> {{ form.dszUserName }} </span>
443
+                </el-form-item>
444
+              </el-col>
445
+              <el-col :span="6">
446
+                <el-form-item label="日期:" label-width="120px">
447
+                  <span> {{ form.dszTime }} </span>
448
+                </el-form-item>
449
+              </el-col>
450
+            </el-row>
460
           </div>
451
           </div>
461
         </el-form>
452
         </el-form>
453
+        <el-button type="success" icon="el-icon-printer" @click="printOpen = true">打印</el-button>
462
         <div style="text-align: center" v-if="!disabled">
454
         <div style="text-align: center" v-if="!disabled">
463
-          <el-button type="success" icon="el-icon-printer" @click="printOpen = true">打印</el-button>
464
           <el-button type="warning" @click="preserve">保存</el-button>
455
           <el-button type="warning" @click="preserve">保存</el-button>
465
-          <el-button type="primary" @click="submitNextFlow">提交下一个流程</el-button>
456
+          <el-button type="primary" @click="submitNextFlow" v-if="taskName != '董事长批准'">提交下一个流程</el-button>
457
+          <el-button type="primary" @click="submitNextFlow" v-else>结算批准</el-button>
466
         </div>
458
         </div>
467
       </el-col>
459
       </el-col>
468
       <el-col :span="5" :xs="24" v-if="flowDisabled">
460
       <el-col :span="5" :xs="24" v-if="flowDisabled">
606
       clickWork: {},
598
       clickWork: {},
607
       deptId: undefined,
599
       deptId: undefined,
608
       deptList: [],
600
       deptList: [],
609
-      isCorrect: true,
601
+      exceed: false, //是否超预算
602
+      exceedAmount: 0,
603
+      isModify: false, //是否可以修改结算工作量
610
     };
604
     };
611
   },
605
   },
606
+  watch: {
607
+    'chooseProject.projectId'(val) {
608
+      this.getBudgetSettle();
609
+    }
610
+  },
612
   created() {
611
   created() {
613
     this.getProjectList(); //获取项目列表
612
     this.getProjectList(); //获取项目列表
614
     this.getContractDataList(); //获取合同编码和编号
613
     this.getContractDataList(); //获取合同编码和编号
631
       });
630
       });
632
     } else {
631
     } else {
633
       this.handleSelectProject(this.form.projectId);
632
       this.handleSelectProject(this.form.projectId);
634
-      this.getBudgetSettle();
635
     }
633
     }
634
+    this.isModify = this.taskName != '结算发起' && this.taskName != '经营发展部校核' && this.taskName != '分管审核'
636
   },
635
   },
637
   methods: {
636
   methods: {
638
     // 初始化表单
637
     // 初始化表单
639
-    initForm() {
640
-      listSettle({ settleId: this.taskForm.formId }).then((res) => {
641
-        if (res.total == 1) {
642
-          this.form = res.rows[0];
643
-          this.flag = true;
644
-          this.handleSelectProject(res.rows[0].projectId);
645
-          this.listSettleWorkFn();
646
-          this.listSettleSummaryFn();
647
-          getUser(this.form.reporter).then((res) => {
648
-            if (res.data) {
649
-              this.form.reporterName = res.data.nickName;
650
-              this.deptId = res.data.deptId;
638
+    async initForm() {
639
+      const res = await listSettle({ settleId: this.taskForm.formId });
640
+      if (res.total === 1) {
641
+        this.form = res.rows[0];
642
+        this.flag = true;
643
+        const settleId = this.taskForm.formId;
644
+        const [
645
+          projectResponse,
646
+          budgetResponse,
647
+          settleWorkResponse,
648
+          settleSummaryResponse
649
+        ] = await Promise.all([
650
+          getProject(res.rows[0].projectId),
651
+          listBudget({ projectId: res.rows[0].projectId }),
652
+          listSettleWork({ settleId }),
653
+          listSettleSummary({ settleId })
654
+        ]);
655
+
656
+        if (projectResponse) {
657
+          this.chooseProject = projectResponse.data;
658
+          this.isSelect = true;
659
+        }
660
+        if (budgetResponse && budgetResponse.total === 1) {
661
+          const budgetId = budgetResponse.rows[0].budgetId;
662
+          const budgetSettleResponse = await listBudgetSettle({ budgetId });
663
+          if (budgetSettleResponse.code === 200) {
664
+            this.budgetList = budgetSettleResponse.rows;
665
+            this.budgetSettle = budgetResponse.rows[0].settleExpense;
666
+          } else {
667
+            this.budgetList = [];
668
+            this.budgetSettle = 0;
669
+          }
670
+        } else {
671
+          this.budgetList = [];
672
+          this.budgetSettle = 0;
673
+        }
674
+        // 获取申请工作量列表
675
+        if (settleWorkResponse) {
676
+          this.settleWorkList = settleWorkResponse.rows;
677
+          for (let work of this.settleWorkList) {
678
+            getPrice(work.priceId).then((settleWorkResponse) => {
679
+              if (settleWorkResponse.data) {
680
+                this.setValue(work, "scale", settleWorkResponse.data.scaleGrade);
681
+                this.setValue(work, "unit", settleWorkResponse.data.unit);
682
+                if (work.groundType == "0") {
683
+                  work.price = settleWorkResponse.data.commonPrice;
684
+                } else {
685
+                  work.price = settleWorkResponse.data.complexPrice;
686
+                }
687
+              }
688
+            });
689
+          }
690
+        }
691
+        // 结算汇总里的扣除明细以及部门结算金额
692
+        if (settleSummaryResponse) {
693
+          this.oldSettleSumList = settleSummaryResponse.rows;
694
+          for (let s of settleSummaryResponse.rows) {
695
+            if (s.content == "结算费用合计") {
696
+              this.settleSumTr = s;
697
+              break;
651
             }
698
             }
652
-          });
653
-          this.getCurrentUser();
654
-        } else if (res.total == 0) {
655
-          this.flag = false;
656
-          if (this.taskName == "结算发起") {
657
-            this.form.reporter = this.$store.state.user.id;
658
-            this.form.reporterName = this.$store.state.user.name;
659
-            this.form.reportTime = parseTime(new Date(), "{y}-{m}-{d}");
660
           }
699
           }
700
+          this.settleSumList = settleSummaryResponse.rows.filter((item) => item.tableNumber == "0");
701
+          this.deptSettleList = settleSummaryResponse.rows.filter(
702
+            (item) => item.tableNumber == "1"
703
+          );
704
+          this.calculateActualSumSettle();
661
         }
705
         }
662
-        setTimeout(() => {
663
-          this.loading = false;
664
-          this.deptList = this.$store.state.user.deptList
665
-        }, 500);
666
-      });
706
+        if (this.settleSumTr.amount > this.budgetSettle) {
707
+          this.exceed = true
708
+        } else {
709
+          this.exceed = false
710
+        }
711
+        this.calcaulatExceed()
712
+
713
+        getUser(this.form.reporter).then((res) => {
714
+          if (res.data) {
715
+            this.form.reporterName = res.data.nickName;
716
+            this.deptId = res.data.deptId;
717
+          }
718
+        });
719
+        this.getCurrentUser();
720
+      } else if (res.total == 0) {
721
+        this.flag = false;
722
+        if (this.taskName == "结算发起") {
723
+          this.form.reporter = this.$store.state.user.id;
724
+          this.form.reporterName = this.$store.state.user.name;
725
+          this.form.reportTime = parseTime(new Date(), "{y}-{m}-{d}");
726
+        }
727
+      }
728
+      this.loading = false;
729
+      this.deptList = this.$store.state.user.deptList
667
     },
730
     },
731
+
668
     async getBudgetSettle() {
732
     async getBudgetSettle() {
669
       let budgetData = await listBudget({ projectId: this.form.projectId })
733
       let budgetData = await listBudget({ projectId: this.form.projectId })
670
       if (budgetData.total == 1) {
734
       if (budgetData.total == 1) {
672
         let datas = await listBudgetSettle({ budgetId })
736
         let datas = await listBudgetSettle({ budgetId })
673
         if (datas.code == 200) {
737
         if (datas.code == 200) {
674
           this.budgetList = datas.rows;
738
           this.budgetList = datas.rows;
675
-          this.budgetList.forEach(item => {
676
-            this.budgetSettle = this.budgetSettle + item.settle
677
-          })
739
+          this.budgetSettle = budgetData.rows[0].settleExpense
678
         }
740
         }
741
+      } else {
742
+        this.budgetList = []
743
+        this.budgetSettle = 0
679
       }
744
       }
680
     },
745
     },
681
     // 获取当前处理人
746
     // 获取当前处理人
688
         this.form.jsUserName = this.$store.state.user.name;
753
         this.form.jsUserName = this.$store.state.user.name;
689
         this.form.jsUserId = this.$store.state.user.id;
754
         this.form.jsUserId = this.$store.state.user.id;
690
         this.form.jsTime = parseTime(new Date(), "{y}-{m}-{d}");
755
         this.form.jsTime = parseTime(new Date(), "{y}-{m}-{d}");
691
-        // } else if (this.taskName == "项目管理部结算") {
692
-        //   this.form.xmUserName = this.$store.state.user.name;
693
-        //   this.form.xmUserId = this.$store.state.user.id;
694
-        //   this.form.xmTime = parseTime(new Date(), "{y}-{m}-{d}");
695
-        // } else if (this.taskName == "结算发起人确认") {
696
-        //   this.form.deptUserName = this.$store.state.user.name;
697
-        //   this.form.deptUserId = this.$store.state.user.id;
698
-        //   this.form.deptTime = parseTime(new Date(), "{y}-{m}-{d}");
699
       } else if (this.taskName == "经营发展部校核") {
756
       } else if (this.taskName == "经营发展部校核") {
700
         this.form.jyUserName = this.$store.state.user.name;
757
         this.form.jyUserName = this.$store.state.user.name;
701
         this.form.jyUserId = this.$store.state.user.id;
758
         this.form.jyUserId = this.$store.state.user.id;
708
         this.form.gmUserName = this.$store.state.user.name;
765
         this.form.gmUserName = this.$store.state.user.name;
709
         this.form.gmUserId = this.$store.state.user.id;
766
         this.form.gmUserId = this.$store.state.user.id;
710
         this.form.gmTime = parseTime(new Date(), "{y}-{m}-{d}");
767
         this.form.gmTime = parseTime(new Date(), "{y}-{m}-{d}");
768
+      } else if (this.taskName == "董事长批准") {
769
+        this.form.dszUserName = this.$store.state.user.name;
770
+        this.form.dszUserId = this.$store.state.user.id;
771
+        this.form.dszTime = parseTime(new Date(), "{y}-{m}-{d}");
711
       }
772
       }
712
       this.getReviewerName();
773
       this.getReviewerName();
713
     },
774
     },
714
     // 获取审核人
775
     // 获取审核人
715
     getReviewerName() {
776
     getReviewerName() {
716
       if (this.form.zhUserId) {
777
       if (this.form.zhUserId) {
717
-        getUser(this.form.zhUserId).then((res) => {
718
-          this.form.zhUserName = res.data.nickName;
719
-        });
778
+        this.form.zhUserName = this.getUserName(this.form.zhUserId)
720
       }
779
       }
721
       if (this.form.jsUserId) {
780
       if (this.form.jsUserId) {
722
-        getUser(this.form.jsUserId).then((res) => {
723
-          this.form.jsUserName = res.data.nickName;
724
-        });
781
+        this.form.jsUserName = this.getUserName(this.form.jsUserId)
725
       }
782
       }
726
-      // if (this.form.xmUserId) {
727
-      //   getUser(this.form.xmUserId).then((res) => {
728
-      //     this.form.xmUserName = res.data.nickName;
729
-      //   });
730
-      // }
731
-      // if (this.form.deptUserId) {
732
-      //   getUser(this.form.deptUserId).then((res) => {
733
-      //     this.form.deptUserName = res.data.nickName;
734
-      //   });
735
-      // }
736
       if (this.form.jyUserId) {
783
       if (this.form.jyUserId) {
737
         getUser(this.form.jyUserId).then((res) => {
784
         getUser(this.form.jyUserId).then((res) => {
738
           this.form.jyUserName = res.data.nickName;
785
           this.form.jyUserName = res.data.nickName;
753
     preserve() {
800
     preserve() {
754
       this.$refs["settleForm"].validate((vaild) => {
801
       this.$refs["settleForm"].validate((vaild) => {
755
         if (vaild) {
802
         if (vaild) {
756
-          if (this.isCorrect) {
757
-            if (this.flag) {
758
-              this.updateSettleFn();
759
-              this.updateSettleSummaryFn();
760
-              this.updateSettleWorkFn();
761
-              this.$message.success("保存成功");
762
-            } else {
763
-              this.addSettleFn();
764
-              this.$message.success("保存成功");
765
-            }
803
+          if (this.flag) {
804
+            this.updateSettleFn();
805
+            this.updateSettleSummaryFn();
806
+            this.updateSettleWorkFn();
807
+            this.$message.success("保存成功");
766
           } else {
808
           } else {
767
-            this.$message.error('结算合计总金额不能大于预算内项目结算总金额!')
809
+            this.addSettleFn();
810
+            this.$message.success("保存成功");
768
           }
811
           }
769
-
770
         } else {
812
         } else {
771
           this.$message.error('请完善表单必填项')
813
           this.$message.error('请完善表单必填项')
772
         }
814
         }
776
       this.$refs["settleForm"].validate((vaild) => {
818
       this.$refs["settleForm"].validate((vaild) => {
777
         if (vaild) {
819
         if (vaild) {
778
           this.preserve();
820
           this.preserve();
779
-          if (this.isCorrect) {
780
-            if (this.taskName == "结算发起") {
781
-              getUserByRole({ roleId: 4 }).then((res) => {
782
-                this.getNextFlowNodeFn(res.data[0]);
783
-              });
784
-            } else if (this.taskName == "综合事务部处理") {
785
-              this.getNextFlowNodeFn(null, 110, false);
786
-            } else if (this.taskName == "技术质量部审核") {
787
-              this.getNextFlowNodeFn(null, 107, false);
788
-              // } else if (this.taskName == "项目管理部结算") {
789
-              //   this.getNextFlowNodeFn();
790
-              // } else if (this.taskName == "结算发起人确认") {
791
-              //   this.getNextFlowNodeFn(null, 105, false);
792
-            } else if (this.taskName == "经营发展部校核") {
793
-              this.getNextFlowNodeFn(null, this.deptId, true);
794
-            } else if (this.taskName == "分管审核") {
795
-              getUserByPost({ postName: "总经理" }).then((res) => {
821
+          if (this.taskName == "结算发起") {
822
+            getUserByRole({ roleId: 4 }).then((res) => {
823
+              this.getNextFlowNodeFn(res.data[0]);
824
+            });
825
+          } else if (this.taskName == "综合事务部处理") {
826
+            this.getNextFlowNodeFn(null, 109, false);
827
+          } else if (this.taskName == "技术质量部审核") {
828
+            this.getNextFlowNodeFn(null, 105, true);
829
+          } else if (this.taskName == "经营发展部校核") {
830
+            this.getNextFlowNodeFn(null, this.deptId, true);
831
+          } else if (this.taskName == "分管审核") {
832
+            getUserByPost({ postName: "总经理" }).then((res) => {
833
+              this.getNextFlowNodeFn(res.data[0].userId);
834
+            });
835
+          } else if (this.taskName == "总经理审批") {
836
+            this.$set(this.taskForm.variables, "exceed", this.exceed);
837
+            if (this.exceed) {
838
+              getUserByPost({ postName: "董事长" }).then((res) => {
796
                 this.getNextFlowNodeFn(res.data[0].userId);
839
                 this.getNextFlowNodeFn(res.data[0].userId);
797
               });
840
               });
798
-            } else if (this.taskName == "总经理审批") {
841
+            } else {
799
               this.getNextFlowNodeFn();
842
               this.getNextFlowNodeFn();
800
             }
843
             }
801
-          } else {
802
-            this.$message.error('结算合计总金额不能大于预算内项目结算总金额!')
844
+          } else if (this.taskName == "董事长批准") {
845
+            this.getNextFlowNodeFn();
803
           }
846
           }
847
+
804
         } else {
848
         } else {
805
           this.$message.error('请完善表单必填项')
849
           this.$message.error('请完善表单必填项')
806
         }
850
         }
812
       getNextFlowNode(params).then((res) => {
856
       getNextFlowNode(params).then((res) => {
813
         if (userId) {
857
         if (userId) {
814
           this.$set(this.taskForm.variables, "approval", userId);
858
           this.$set(this.taskForm.variables, "approval", userId);
815
-          complete(this.taskForm).then((response) => {
816
-            this.$modal.msgSuccess(response.msg);
817
-            this.$emit("goBack");
818
-          });
859
+          this.handleComplete(this.taskForm);
819
         } else {
860
         } else {
820
           if (deptId && isList) {
861
           if (deptId && isList) {
821
             getUsersManageLeaderByDept({ deptId }).then((res) => {
862
             getUsersManageLeaderByDept({ deptId }).then((res) => {
822
-              let id = [];
823
-              id.push(res.data[0].userId);
824
-              // id.push(10);
825
-              this.$set(this.taskForm.variables, "approvalList", id);
826
-              complete(this.taskForm).then((response) => {
827
-                this.$modal.msgSuccess(response.msg);
828
-                this.$emit("goBack");
829
-              });
863
+              let ids = [];
864
+              res.data.forEach(user => {
865
+                ids.push(user.userId)
866
+              })
867
+              this.$set(this.taskForm.variables, "approvalList", ids);
868
+              this.handleComplete(this.taskForm);
830
             });
869
             });
831
           } else if (deptId && !isList) {
870
           } else if (deptId && !isList) {
832
             getUsersDeptLeaderByDept({ deptId }).then((res) => {
871
             getUsersDeptLeaderByDept({ deptId }).then((res) => {
833
               this.$set(this.taskForm.variables, "approval", res.data.userId);
872
               this.$set(this.taskForm.variables, "approval", res.data.userId);
834
-              complete(this.taskForm).then((response) => {
835
-                this.$modal.msgSuccess(response.msg);
836
-                this.$emit("goBack");
837
-              });
873
+              this.handleComplete(this.taskForm);
838
             });
874
             });
839
           } else {
875
           } else {
840
-            complete(this.taskForm).then((response) => {
841
-              this.$modal.msgSuccess(response.msg);
842
-              this.$emit("goBack");
843
-            });
876
+            this.handleComplete(this.taskForm);
844
           }
877
           }
845
         }
878
         }
846
       });
879
       });
847
     },
880
     },
881
+    handleComplete(taskForm) {
882
+      complete(taskForm).then(response => {
883
+        this.$modal.msgSuccess(response.msg);
884
+        this.$emit('goBack');
885
+      })
886
+    },
848
     // 查询项目列表
887
     // 查询项目列表
849
     getProjectList() {
888
     getProjectList() {
850
       listProject({
889
       listProject({
860
         getProject(val).then((res) => {
899
         getProject(val).then((res) => {
861
           this.chooseProject = res.data;
900
           this.chooseProject = res.data;
862
           this.isSelect = true;
901
           this.isSelect = true;
902
+          this.getBudgetSettle();
863
           getUser(this.chooseProject.projectRegistrant).then((res) => {
903
           getUser(this.chooseProject.projectRegistrant).then((res) => {
864
             if (res.data) {
904
             if (res.data) {
865
               this.$set(
905
               this.$set(
970
       }
1010
       }
971
       this.settleSumTr.amount = sum.toFixed(2);
1011
       this.settleSumTr.amount = sum.toFixed(2);
972
       if (sum > this.budgetSettle) {
1012
       if (sum > this.budgetSettle) {
973
-        this.$message.error('结算合计总金额不能大于预算内项目结算总金额!')
974
-        this.settleSumTr.amount = this.budgetSettle.toFixed(2);
975
-        this.isCorrect = false;
1013
+        this.$confirm('结算合计总金额大于了预算内项目结算总金额,将走《超预算或预算外支付(报销)》流程', '提示', {
1014
+          confirmButtonText: '确定',
1015
+          type: 'warning'
1016
+        }).then(() => {
1017
+          this.exceed = true;
1018
+          this.calcaulatExceed();
1019
+          return
1020
+        })
976
       } else {
1021
       } else {
977
-        this.isCorrect = true;
1022
+        this.exceed = false;
978
       }
1023
       }
979
     },
1024
     },
980
     calculateActualSumSettle() {
1025
     calculateActualSumSettle() {
984
         sum = sum + Number(a.amount);
1029
         sum = sum + Number(a.amount);
985
       }
1030
       }
986
       this.actualSumSettle = Number(this.settleSumTr.amount) - sum;
1031
       this.actualSumSettle = Number(this.settleSumTr.amount) - sum;
1032
+      if (this.deptSettleList.length == 1)
1033
+        this.deptSettleList[0].amount = this.actualSumSettle;
987
     },
1034
     },
988
     calculateDeptAmount(index) {
1035
     calculateDeptAmount(index) {
989
       let num = 0;
1036
       let num = 0;
997
         }
1044
         }
998
       }
1045
       }
999
     },
1046
     },
1047
+    calcaulatExceed() {
1048
+      if (Number(this.budgetSettle) - Number(this.settleSumTr.amount) < 0)
1049
+        this.exceedAmount = Number(this.settleSumTr.amount) - Number(this.budgetSettle)
1050
+    },
1000
     handleChoosePrice(work, index) {
1051
     handleChoosePrice(work, index) {
1001
       this.clickWork = work;
1052
       this.clickWork = work;
1002
       this.clickWork.index = index;
1053
       this.clickWork.index = index;
1053
         addSettleSummary(item);
1104
         addSettleSummary(item);
1054
       }
1105
       }
1055
     },
1106
     },
1056
-    // 获取数据
1057
-    listSettleWorkFn() {
1058
-      listSettleWork({ settleId: this.taskForm.formId }).then((res) => {
1059
-        this.settleWorkList = res.rows;
1060
-        for (let work of this.settleWorkList) {
1061
-          getPrice(work.priceId).then((res) => {
1062
-            if (res.data) {
1063
-              this.setValue(work, "scale", res.data.scaleGrade);
1064
-              this.setValue(work, "unit", res.data.unit);
1065
-              if (work.groundType == "0") {
1066
-                work.price = res.data.commonPrice;
1067
-              } else {
1068
-                work.price = res.data.complexPrice;
1069
-              }
1070
-            }
1071
-          });
1072
-        }
1073
-      });
1074
-    },
1075
-    listSettleSummaryFn() {
1076
-      listSettleSummary({ settleId: this.taskForm.formId }).then((res) => {
1077
-        this.oldSettleSumList = res.rows;
1078
-        for (let s of res.rows) {
1079
-          if (s.content == "结算费用合计") {
1080
-            this.settleSumTr = s;
1081
-            break;
1082
-          }
1083
-        }
1084
-        this.settleSumList = res.rows.filter((item) => item.tableNumber == "0");
1085
-        this.deptSettleList = res.rows.filter(
1086
-          (item) => item.tableNumber == "1"
1087
-        );
1088
-        this.calculateActualSumSettle();
1089
-      });
1090
-    },
1107
+
1091
     // 更新数据
1108
     // 更新数据
1092
     updateSettleFn() {
1109
     updateSettleFn() {
1093
       updateSettle(this.form);
1110
       updateSettle(this.form);
1181
   /* border: 1px solid black; */
1198
   /* border: 1px solid black; */
1182
   text-align: center;
1199
   text-align: center;
1183
   border-collapse: collapse;
1200
   border-collapse: collapse;
1201
+  width: 100%;
1184
   /*设置背景颜色*/
1202
   /*设置背景颜色*/
1185
   /* background-color: #bfa; */
1203
   /* background-color: #bfa; */
1186
 }
1204
 }

+ 144
- 0
oa-ui/src/views/oa/budget/formData.vue View File

1
+<template>
2
+  <div>
3
+    <el-form ref="form" :model="form" :rules="rules" label-width="120px">
4
+      <el-form-item label="项目id" prop="projectId">
5
+        <el-select v-model="form.projectId" clearable filterable remote reserve-keyword placeholder="请输入项目编号"
6
+          :remote-method="remoteMethod" :loading="loading" style="width: 400px;">
7
+          <el-option v-for="project in projectList" :key="project.projectId"
8
+            :label="project.projectNumber + '-' + project.projectName" :value="project.projectId">
9
+          </el-option>
10
+        </el-select>
11
+      </el-form-item>
12
+      <el-form-item label="人员成本" prop="staffCost">
13
+        <el-input v-model="form.staffCost" placeholder="请输入人员成本" />
14
+      </el-form-item>
15
+      <el-form-item label="车辆成本" prop="carCost">
16
+        <el-input v-model="form.carCost" placeholder="请输入车辆成本" />
17
+      </el-form-item>
18
+      <el-form-item label="设备成本" prop="deviceCost">
19
+        <el-input v-model="form.deviceCost" placeholder="请输入设备成本" />
20
+      </el-form-item>
21
+      <el-form-item label="固定成本" prop="fixCost">
22
+        <el-input v-model="form.fixCost" placeholder="请输入固定成本" />
23
+      </el-form-item>
24
+      <el-form-item label="预结算额" prop="settleExpense">
25
+        <el-input v-model="form.settleExpense" placeholder="请输入预结算额" />
26
+      </el-form-item>
27
+      <el-form-item label="外协费用" prop="outExpense">
28
+        <el-input v-model="form.outExpense" placeholder="请输入外协费用" />
29
+      </el-form-item>
30
+      <el-form-item label="经营费用" prop="businessExpense">
31
+        <el-input v-model="form.businessExpense" placeholder="请输入经营费用" />
32
+      </el-form-item>
33
+      <el-form-item label="税费成本" prop="taxExpense">
34
+        <el-input v-model="form.taxExpense" placeholder="请输入税费成本" />
35
+      </el-form-item>
36
+      <el-form-item label="车船租赁" prop="rentExpense">
37
+        <el-input v-model="form.rentExpense" placeholder="请输入车船租赁" />
38
+      </el-form-item>
39
+      <el-form-item label="其他费用" prop="otherExpense">
40
+        <el-input v-model="form.otherExpense" placeholder="请输入其他费用" />
41
+      </el-form-item>
42
+      <el-form-item label="外协费用备注" prop="outRemark">
43
+        <el-input v-model="form.outRemark" placeholder="请输入外协费用备注" />
44
+      </el-form-item>
45
+      <el-form-item label="经营管理备注" prop="businessRemark">
46
+        <el-input v-model="form.businessRemark" placeholder="请输入经营管理备注" />
47
+      </el-form-item>
48
+      <el-form-item label="税费成本备注" prop="taxRemark">
49
+        <el-input v-model="form.taxRemark" placeholder="请输入税费成本备注" />
50
+      </el-form-item>
51
+      <el-form-item label="车船租赁备注" prop="rentRemark">
52
+        <el-input v-model="form.rentRemark" placeholder="请输入车船租赁备注" />
53
+      </el-form-item>
54
+      <el-form-item label="其他费用备注" prop="otherRemark">
55
+        <el-input v-model="form.otherRemark" placeholder="请输入其他费用备注" />
56
+      </el-form-item>
57
+      <el-form-item label="直接成本" prop="directExpense">
58
+        <el-input v-model="form.directExpense" placeholder="请输入直接成本" />
59
+      </el-form-item>
60
+      <el-form-item label="预算总额" prop="totalBudget">
61
+        <el-input v-model="form.totalBudget" placeholder="请输入预算总额" />
62
+      </el-form-item>
63
+      <el-form-item label="编制人" prop="compiler">
64
+        <el-input v-model="form.compiler" placeholder="请输入编制人" />
65
+      </el-form-item>
66
+      <el-form-item label="审核人" prop="auditor">
67
+        <el-input v-model="form.auditor" placeholder="请输入审核人" />
68
+      </el-form-item>
69
+    </el-form>
70
+    <el-dialog title="选择项目" :visible.sync="prOpen" width="70%" append-to-body>
71
+      <choose-project @chooseProject="confirmProject"></choose-project>
72
+    </el-dialog>
73
+  </div>
74
+</template>
75
+
76
+<script>
77
+import { listBudget, getBudget, delBudget, addBudget, updateBudget } from "@/api/oa/budget/budget";
78
+import { listProject } from '@/api/oa/project/project';
79
+import ChooseProject from '../../flowable/form/components/chooseProject.vue';
80
+export default {
81
+  components: {
82
+    ChooseProject
83
+  },
84
+  props: {
85
+    form: {
86
+      type: Object
87
+    }
88
+  },
89
+  data() {
90
+    return {
91
+      // 表单校验
92
+      rules: {
93
+      },
94
+      prOpen: false,
95
+      chooseProject: {},
96
+      projectList: []
97
+    }
98
+  },
99
+  methods: {
100
+    /** 提交按钮 */
101
+    submitForm() {
102
+      this.$refs["form"].validate(valid => {
103
+        if (valid) {
104
+          if (this.form.budgetId != null) {
105
+            updateBudget(this.form).then(response => {
106
+              this.$modal.msgSuccess("修改成功");
107
+              this.open = false;
108
+              this.getList();
109
+            });
110
+          } else {
111
+            addBudget(this.form).then(response => {
112
+              this.$modal.msgSuccess("新增成功");
113
+              this.open = false;
114
+              this.getList();
115
+            });
116
+          }
117
+        }
118
+      });
119
+    },
120
+    remoteMethod(val) {
121
+      listProject({
122
+        pageNum: 1,
123
+        pageSize: 20,
124
+        projectNumber: val
125
+      }).then(res => {
126
+        this.projectList = res.rows;
127
+      })
128
+    },
129
+    confirmProject() {
130
+      if (val.length == 1) {
131
+        this.prOpen = false;
132
+        this.chooseProject = val[0];
133
+        this.$set(this.form, 'projectId', val[0].projectId)
134
+        this.isSelect = true;
135
+      } else {
136
+        this.$message.error("项目只能选择一个!");
137
+        return;
138
+      }
139
+    }
140
+  },
141
+}
142
+</script>
143
+
144
+<style lang="scss" scoped></style>

+ 20
- 82
oa-ui/src/views/oa/budget/index.vue View File

21
       </el-form-item>
21
       </el-form-item>
22
     </el-form>
22
     </el-form>
23
 
23
 
24
-    <!-- <el-row :gutter="10" class="mb8">
25
-      <el-col :span="1.5">
24
+    <el-row :gutter="10" class="mb8">
25
+      <!-- <el-col :span="1.5">
26
         <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
26
         <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
27
           v-hasPermi="['oa:budget:add']">新增</el-button>
27
           v-hasPermi="['oa:budget:add']">新增</el-button>
28
-      </el-col>
29
-      <el-col :span="1.5">
28
+      </el-col> -->
29
+      <!-- <el-col :span="1.5">
30
         <el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
30
         <el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
31
           v-hasPermi="['oa:budget:edit']">修改</el-button>
31
           v-hasPermi="['oa:budget:edit']">修改</el-button>
32
-      </el-col>
33
-      <el-col :span="1.5">
32
+      </el-col> -->
33
+      <!-- <el-col :span="1.5">
34
         <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
34
         <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
35
           v-hasPermi="['oa:budget:remove']">删除</el-button>
35
           v-hasPermi="['oa:budget:remove']">删除</el-button>
36
-      </el-col>
37
-      <el-col :span="1.5">
36
+      </el-col> -->
37
+      <!-- <el-col :span="1.5">
38
         <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
38
         <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
39
           v-hasPermi="['oa:budget:export']">导出</el-button>
39
           v-hasPermi="['oa:budget:export']">导出</el-button>
40
       </el-col>
40
       </el-col>
41
-      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
42
-    </el-row> -->
41
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> -->
42
+    </el-row>
43
 
43
 
44
     <el-table v-loading="loading" :data="budgetList" @selection-change="handleSelectionChange">
44
     <el-table v-loading="loading" :data="budgetList" @selection-change="handleSelectionChange">
45
       <el-table-column label="序号" align="center" type="index" />
45
       <el-table-column label="序号" align="center" type="index" />
79
       @pagination="getList" />
79
       @pagination="getList" />
80
 
80
 
81
     <!-- 添加或修改cmc预算管理对话框 -->
81
     <!-- 添加或修改cmc预算管理对话框 -->
82
-    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
83
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
84
-        <el-form-item label="项目id" prop="projectId">
85
-          <el-input v-model="form.projectId" placeholder="请输入项目id" />
86
-        </el-form-item>
87
-        <el-form-item label="人员成本" prop="staffCost">
88
-          <el-input v-model="form.staffCost" placeholder="请输入人员成本" />
89
-        </el-form-item>
90
-        <el-form-item label="车辆成本" prop="carCost">
91
-          <el-input v-model="form.carCost" placeholder="请输入车辆成本" />
92
-        </el-form-item>
93
-        <el-form-item label="设备成本" prop="deviceCost">
94
-          <el-input v-model="form.deviceCost" placeholder="请输入设备成本" />
95
-        </el-form-item>
96
-        <el-form-item label="固定成本" prop="fixCost">
97
-          <el-input v-model="form.fixCost" placeholder="请输入固定成本" />
98
-        </el-form-item>
99
-        <el-form-item label="预结算额" prop="settleExpense">
100
-          <el-input v-model="form.settleExpense" placeholder="请输入预结算额" />
101
-        </el-form-item>
102
-        <el-form-item label="外协费用" prop="outExpense">
103
-          <el-input v-model="form.outExpense" placeholder="请输入外协费用" />
104
-        </el-form-item>
105
-        <el-form-item label="经营费用" prop="businessExpense">
106
-          <el-input v-model="form.businessExpense" placeholder="请输入经营费用" />
107
-        </el-form-item>
108
-        <el-form-item label="税费成本" prop="taxExpense">
109
-          <el-input v-model="form.taxExpense" placeholder="请输入税费成本" />
110
-        </el-form-item>
111
-        <el-form-item label="车船租赁" prop="rentExpense">
112
-          <el-input v-model="form.rentExpense" placeholder="请输入车船租赁" />
113
-        </el-form-item>
114
-        <el-form-item label="其他费用" prop="otherExpense">
115
-          <el-input v-model="form.otherExpense" placeholder="请输入其他费用" />
116
-        </el-form-item>
117
-        <el-form-item label="外协费用备注" prop="outRemark">
118
-          <el-input v-model="form.outRemark" placeholder="请输入外协费用备注" />
119
-        </el-form-item>
120
-        <el-form-item label="经营管理备注" prop="businessRemark">
121
-          <el-input v-model="form.businessRemark" placeholder="请输入经营管理备注" />
122
-        </el-form-item>
123
-        <el-form-item label="税费成本备注" prop="taxRemark">
124
-          <el-input v-model="form.taxRemark" placeholder="请输入税费成本备注" />
125
-        </el-form-item>
126
-        <el-form-item label="车船租赁备注" prop="rentRemark">
127
-          <el-input v-model="form.rentRemark" placeholder="请输入车船租赁备注" />
128
-        </el-form-item>
129
-        <el-form-item label="其他费用备注" prop="otherRemark">
130
-          <el-input v-model="form.otherRemark" placeholder="请输入其他费用备注" />
131
-        </el-form-item>
132
-        <el-form-item label="直接成本" prop="directExpense">
133
-          <el-input v-model="form.directExpense" placeholder="请输入直接成本" />
134
-        </el-form-item>
135
-        <el-form-item label="预算总额" prop="totalBudget">
136
-          <el-input v-model="form.totalBudget" placeholder="请输入预算总额" />
137
-        </el-form-item>
138
-        <el-form-item label="编制人" prop="compiler">
139
-          <el-input v-model="form.compiler" placeholder="请输入编制人" />
140
-        </el-form-item>
141
-        <el-form-item label="审核人" prop="auditor">
142
-          <el-input v-model="form.auditor" placeholder="请输入审核人" />
143
-        </el-form-item>
144
-      </el-form>
145
-      <div slot="footer" class="dialog-footer">
146
-        <el-button type="primary" @click="submitForm">确 定</el-button>
147
-        <el-button @click="cancel">取 消</el-button>
148
-      </div>
82
+    <el-dialog :title="title" :visible.sync="open" width="70%" append-to-body>
83
+      <form-data :form="form" @close="open = false"></form-data>
149
     </el-dialog>
84
     </el-dialog>
150
 
85
 
151
     <el-dialog :title="title" :visible.sync="infoOpen" width="70%" append-to-body>
86
     <el-dialog :title="title" :visible.sync="infoOpen" width="70%" append-to-body>
152
-      <budget-info :taskForm="taskForm" :taskName="''"></budget-info>
87
+      <budget-info :taskForm="taskForm"  :taskName="''"></budget-info>
153
     </el-dialog>
88
     </el-dialog>
154
   </div>
89
   </div>
155
 </template>
90
 </template>
158
 import { listBudget, getBudget, delBudget, addBudget, updateBudget } from "@/api/oa/budget/budget";
93
 import { listBudget, getBudget, delBudget, addBudget, updateBudget } from "@/api/oa/budget/budget";
159
 import { listProject } from '@/api/oa/project/project';
94
 import { listProject } from '@/api/oa/project/project';
160
 import budgetInfo from '../../flowable/form/budget/budgetInfo.vue';
95
 import budgetInfo from '../../flowable/form/budget/budgetInfo.vue';
96
+import FormData from './formData.vue';
161
 export default {
97
 export default {
162
   name: "Budget",
98
   name: "Budget",
163
-  components: { budgetInfo, },
99
+  components: { budgetInfo, FormData, },
164
   data() {
100
   data() {
165
     return {
101
     return {
166
       // 遮罩层
102
       // 遮罩层
212
       // 表单校验
148
       // 表单校验
213
       rules: {
149
       rules: {
214
       },
150
       },
215
-      taskForm: {},
151
+      taskForm: {
152
+        formId:''
153
+      },
216
       projectList: []
154
       projectList: []
217
     };
155
     };
218
   },
156
   },
291
     handleAdd() {
229
     handleAdd() {
292
       this.reset();
230
       this.reset();
293
       this.open = true;
231
       this.open = true;
294
-      this.title = "添加cmc预算管理";
232
+      this.title = "添加预算";
295
     },
233
     },
296
     handleView(row) {
234
     handleView(row) {
297
       this.taskForm.formId = row.projectId;
235
       this.taskForm.formId = row.projectId;
304
       getBudget(budgetId).then(response => {
242
       getBudget(budgetId).then(response => {
305
         this.form = response.data;
243
         this.form = response.data;
306
         this.open = true;
244
         this.open = true;
307
-        this.title = "修改cmc预算管理";
245
+        this.title = "修改预算";
308
       });
246
       });
309
     },
247
     },
310
     /** 提交按钮 */
248
     /** 提交按钮 */

Loading…
Cancel
Save