Procházet zdrojové kódy

修改移动端借款申请

余思翰 před 3 měsíci
rodič
revize
9bf99f7f63

+ 7
- 1
oa-ui-app/api/oa/borrow/borrowDetail.js Zobrazit soubor

@@ -1,3 +1,9 @@
1
+/*
2
+ * @Author: ysh
3
+ * @Date: 2025-02-10 14:50:24
4
+ * @LastEditors: 
5
+ * @LastEditTime: 2025-03-03 09:23:16
6
+ */
1 7
 import request from '@/utils/request'
2 8
 
3 9
 // 查询cmc借款明细列表
@@ -46,7 +52,7 @@ export function delBorrowDetail(borrowId) {
46 52
 // 删除cmc借款明细根据每一项Id
47 53
 export function delBorrowDetailByDetailId(borrowDetailId) {
48 54
   return request({
49
-    url: '/oa/borrowDetail/id' + borrowDetailId,
55
+    url: '/oa/borrowDetail/id/' + borrowDetailId,
50 56
     method: 'delete'
51 57
   })
52 58
 }

+ 83
- 7
oa-ui-app/pages/form/borrow/borrow.vue Zobrazit soubor

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2025-02-20 10:20:22
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2025-02-27 10:49:10
5
+ * @LastEditTime: 2025-03-03 11:02:06
6 6
 -->
7 7
 <template>
8 8
   <view class="form-container">
@@ -33,25 +33,42 @@
33 33
         <uni-data-checkbox v-model="form.borrowUsage" :localdata="borrowUsageOptions"></uni-data-checkbox>
34 34
       </uni-forms-item>
35 35
 
36
-      <!-- 借款类型 -->
36
+      <!-- 借款事由 -->
37 37
       <uni-forms-item label="借款事由" required class="form-item" name="applyReason" v-if="form.borrowUsage != 0">
38 38
         <uv-textarea v-model="form.applyReason" placeholder="请输入借款事由"></uv-textarea>
39 39
       </uni-forms-item>
40 40
 
41 41
       <!-- 选择项目 -->
42 42
       <uni-forms-item label="选择项目" required class="form-item" v-if="form.borrowUsage == 0" name="projectId">
43
-        <u-button type="primary" @click="openProject = true" v-if="taskName == '借款申请'">选择项目</u-button>
43
+        <u-button type="primary" @click="openProject = true" v-if="taskName == '借款申请'">+ 选择项目</u-button>
44 44
         <ProjectPicker :visible.sync="openProject" :selected.sync="selectedProject" @confirm="handleConfirm" />
45 45
         <ProjectInfo :project="projectObj"></ProjectInfo>
46 46
       </uni-forms-item>
47 47
 
48 48
       <!-- 借款明细 -->
49 49
       <uni-forms-item label="借款明细" required class="form-item">
50
-        <BorrowDetail :borrowId="form.borrowId"></BorrowDetail>
50
+        <BorrowDetail :borrowId="form.borrowId" :taskName="taskName" @getApplyAmount="setApplyAmount"></BorrowDetail>
51 51
       </uni-forms-item>
52 52
 
53
-    </uni-forms>
53
+      <uni-forms-item label="申请金额" class="form-item">
54
+        <view>{{ (this.form.applyAmount).toFixed(2) }}</view>
55
+        <view style="color:#E74C3C" v-if="exceed && form.borrowUsage == '0'">
56
+          超过预算金额:{{ getMoreAmount('0') }}</view>
57
+      </uni-forms-item>
54 58
 
59
+      <uni-forms-item label="最大借款金额" class="form-item">
60
+        {{ totalBudget.toFixed(2) }}
61
+      </uni-forms-item>
62
+      <uni-forms-item label="已申请借款" class="form-item">
63
+        {{ hasBorrow.toFixed(2) }}
64
+      </uni-forms-item>
65
+      <uni-forms-item label="可用借款" class="form-item">
66
+        {{ (totalBudget - hasBorrow).toFixed(2) }}
67
+      </uni-forms-item>
68
+      <view>
69
+        <u-button type="primary" size="normal" @click="submit">提交申请</u-button>
70
+      </view>
71
+    </uni-forms>
55 72
 
56 73
   </view>
57 74
 </template>
@@ -62,6 +79,7 @@ import ProjectInfo from '@/pages/components/ProjectInfo.vue';
62 79
 import { parseTime } from "@/utils/common.js"
63 80
 import { listBorrow, getBorrow, delBorrow, addBorrow, updateBorrow } from "@/api/oa/borrow/borrow";
64 81
 import { listProject, getProject } from "@/api/oa/project/project";
82
+import { listBudget } from "@/api/oa/budget/budget";
65 83
 import BorrowDetail from './borrowDetail.vue';
66 84
 export default {
67 85
   components: {
@@ -85,6 +103,7 @@ export default {
85 103
       form: {
86 104
         submitTime: '',
87 105
         borrowUsage: '0',
106
+        applyAmount: 0,
88 107
       },
89 108
       rules: {},
90 109
       borrowUsageOptions: [{
@@ -113,11 +132,14 @@ export default {
113 132
       selectedProject: null, //选中的项目
114 133
       projectObj: {}, //项目信息的项目
115 134
       fromTotal: 0,
135
+      totalBudget: 0, //预结算额
136
+      exceed: false, //是否超预算
137
+      hasBorrow: 0, //已申请借款
116 138
     }
117 139
   },
118 140
   methods: {
119
-    initForm() {
120
-      getBorrow(this.taskForm.formId).then(res => {
141
+    async initForm() {
142
+      getBorrow(this.taskForm.formId).then(async res => {
121 143
         if (res.data) {
122 144
           this.fromTotal = 1;
123 145
           this.form = res.data;
@@ -129,6 +151,37 @@ export default {
129 151
                 this.projectObj = res.data;
130 152
               }
131 153
             })
154
+            let budgetData = await listBudget({ projectId: this.form.projectId })
155
+            if (budgetData.total == 1) {
156
+              let budget = budgetData.rows[0];
157
+              this.totalBudget = budget.settleExpense
158
+            } else if (budgetData.total == 0) {
159
+              this.totalBudget = 0
160
+            }
161
+            if (this.form.borrowUsage == '0') {
162
+              if ((this.totalBudget - this.form.applyAmount) < 0) {
163
+                this.exceed = true;
164
+              } else {
165
+                this.exceed = false;
166
+              }
167
+            } else {
168
+              this.exceed = false;
169
+            }
170
+            let borrow = await listBorrow({ projectId: this.form.projectId })
171
+            if (borrow.total != 0) {
172
+              let borrowList = borrow.rows;
173
+              let hasBorrow = 0;
174
+              borrowList = borrowList.filter(item => item.borrowId != this.taskForm.formId)
175
+              borrowList.forEach(element => {
176
+                if (element.managerAmount) {
177
+                  hasBorrow = hasBorrow + element.managerAmount
178
+                }
179
+                if (!element.managerAmount && element.applyAmount) {
180
+                  hasBorrow = hasBorrow + element.applyAmount
181
+                }
182
+              });
183
+              this.hasBorrow = hasBorrow
184
+            }
132 185
           }
133 186
         } else {
134 187
           this.fromTotal = 0;
@@ -136,12 +189,35 @@ export default {
136 189
           this.form.applyDate = parseTime(new Date(), "{y}-{m}-{d}");
137 190
         }
138 191
       })
192
+
193
+    },
194
+    // 计算超过预算的金额
195
+    getMoreAmount(type) {
196
+      let result;
197
+      if (type == '0') {
198
+        result = this.form.applyAmount - (this.totalBudget - this.hasBorrow);
199
+      } else {
200
+        result = this.form.managerAmount - (this.totalBudget - this.hasBorrow);
201
+      }
202
+      return result.toFixed(2)
203
+    },
204
+    setApplyAmount(val) {
205
+      console.log(val);
206
+      console.log(this.from);
207
+      this.form.applyAmount = val
139 208
     },
140 209
     handleConfirm(project) {
141 210
       console.log('选中的项目:', project);
142 211
       this.selectedProject = project;
143 212
       this.projectObj = project;
144 213
     },
214
+    submit() {
215
+      this.$refs.form.validate().then(res => {
216
+        console.log('表单数据信息:', res);
217
+      }).catch(err => {
218
+        console.log('表单错误信息:', err);
219
+      })
220
+    }
145 221
   },
146 222
 }
147 223
 </script>

+ 43
- 22
oa-ui-app/pages/form/borrow/borrowDetail.vue Zobrazit soubor

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2025-02-27 10:43:04
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2025-02-28 16:27:00
5
+ * @LastEditTime: 2025-03-03 10:41:01
6 6
 -->
7 7
 <template>
8 8
   <view class="container">
@@ -29,22 +29,15 @@
29 29
           <text class="total-amount">¥{{ item.applyAmount }}</text>
30 30
         </view>
31 31
       </view>
32
-      <!-- <view class="fg-amount">
33
-        <text>分管领导审核金额</text>
34
-        <uni-easyinput v-model="item.managerAmount" placeholder="请输入审核金额" />
35
-      </view> -->
36
-      <view class="box-button">
32
+      <view class="box-button" v-if="taskName == '借款申请'">
37 33
         <u-button size="normal" icon="edit-pen">修改</u-button>
38 34
         <u-button size="normal" icon="trash" @click="deleteItem(item)">删除</u-button>
39 35
       </view>
40 36
     </view>
41
-
42 37
     <!-- 借款弹窗 -->
43 38
     <view v-if="showAddPopup" class="add-popup">
44
-
45 39
       <view class="popup-content">
46 40
         <text class="popup-title">新增借款项</text>
47
-
48 41
         <uni-forms ref="form" :modelValue="newItem" :rules="rules" label-position="top" label-width="150"
49 42
           class="custom-form">
50 43
           <uni-forms-item label="开支项目" name="borrowItem" required class="form-item">
@@ -78,7 +71,8 @@ import uButton from '../../../uni_modules/uview-ui/components/u-button/u-button.
78 71
 export default {
79 72
   components: { uButton },
80 73
   props: {
81
-    borrowId: String
74
+    borrowId: String,
75
+    taskName: String,
82 76
   },
83 77
   data() {
84 78
     return {
@@ -91,7 +85,32 @@ export default {
91 85
         quantity: '',
92 86
         applyAmount: 0
93 87
       },
94
-      rules: {},
88
+      rules: {
89
+        borrowItem: {
90
+          rules: [{
91
+            required: true,
92
+            errorMessage: '请填写开支项目',
93
+          },]
94
+        },
95
+        unit: {
96
+          rules: [{
97
+            required: true,
98
+            errorMessage: '请填写单位',
99
+          },]
100
+        },
101
+        price: {
102
+          rules: [{
103
+            required: true,
104
+            errorMessage: '请填写单价',
105
+          },]
106
+        },
107
+        quantity: {
108
+          rules: [{
109
+            required: true,
110
+            errorMessage: '请填写数量',
111
+          },]
112
+        },
113
+      },
95 114
       errorMessage: '',
96 115
     }
97 116
   },
@@ -100,6 +119,10 @@ export default {
100 119
   watch: {
101 120
     borrowId() {
102 121
       this.initList();
122
+    },
123
+    detailList(newval) {
124
+      let sum = newval.reduce((sum, item) => sum + Number(item.applyAmount), 0);
125
+      this.$emit('getApplyAmount', sum)
103 126
     }
104 127
   },
105 128
   methods: {
@@ -118,18 +141,11 @@ export default {
118 141
         res.borrowId = this.borrowId;
119 142
         res.applyAmount = this.getTotal();
120 143
         addBorrowDetail(res);
121
-        // this.detailList.unshift({
122
-        //   borrowId: this.borrowId,
123
-        //   borrowItem: this.newItem.borrowItem,
124
-        //   unit: this.newItem.unit,
125
-        //   price: Number(this.newItem.price),
126
-        //   quantity: Number(this.newItem.quantity),
127
-        //   applyAmount: Number(this.newItem.price) * Number(this.newItem.quantity)
128
-        // })
129
-        // console.log(this.detailList);
130 144
         this.clearForm()
131 145
         this.showAddPopup = false
132 146
         this.initList();
147
+      }).catch(err => {
148
+        console.log('表单错误信息:', err);
133 149
       })
134 150
 
135 151
     },
@@ -154,9 +170,10 @@ export default {
154 170
       return (Number(this.newItem.price) * Number(this.newItem.quantity)).toFixed(2)
155 171
     },
156 172
     deleteItem(item) {
157
-      this.$modal.confirm('是否删除开支项目为'+item.borrowItem+'的项?').then(() => {
173
+      this.$modal.confirm('是否删除开支项目为' + item.borrowItem + '的项?').then(() => {
158 174
         delBorrowDetailByDetailId(item.borrowDetailId).then(res => {
159
-          this.$message.success(res.msg)
175
+          this.$modal.msgSuccess(res.msg);
176
+          this.initList();
160 177
         })
161 178
       })
162 179
 
@@ -294,4 +311,8 @@ export default {
294 311
   display: block;
295 312
   margin-bottom: 40rpx;
296 313
 }
314
+
315
+.popup-buttons {
316
+  display: flex;
317
+}
297 318
 </style>

Loading…
Zrušit
Uložit