apply-clients 3.5.4-86 → 3.5.4-88

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/application.properties +4 -0
  2. package/build/dev-server.js +6 -11
  3. package/conf/context.xml +9 -0
  4. package/conf/server-node1.xml +69 -0
  5. package/conf/server-node2.xml +69 -0
  6. package/conf/server.xml +32 -0
  7. package/nginx.conf +21 -0
  8. package/package.json +1 -1
  9. package/pom.xml +18 -0
  10. package/src/App.vue +25 -25
  11. package/src/apply.js +137 -137
  12. package/src/assets/fugou.png +0 -0
  13. package/src/components/android/AppCheckTakePic.vue +168 -168
  14. package/src/components/android/AppTakePic.vue +182 -182
  15. package/src/components/android/Process/AppServiceControl.vue +1755 -1755
  16. package/src/components/product/Material/MaterialDetailed.vue +268 -268
  17. package/src/components/product/PcZhihuanManagement.vue +160 -160
  18. package/src/filiale/fugou/android/AppAddMaterialScience.vue +440 -448
  19. package/src/filiale/fugou/android/AppAddReplacement.vue +341 -341
  20. package/src/filiale/fugou/android/AppChargeManagement.vue +739 -739
  21. package/src/filiale/fugou/android/AppDevicesManagement.vue +519 -519
  22. package/src/filiale/fugou/android/AppInstallationDetails.vue +541 -541
  23. package/src/filiale/fugou/android/AppServiceControl.vue +1845 -1845
  24. package/src/filiale/fugou/android/AppZhihuanManagement.vue +197 -197
  25. package/src/filiale/fugou/android/printCharge.vue +162 -162
  26. package/src/filiale/fugou/android.js +16 -16
  27. package/src/filiale/fugou/pc/AddReplacement.vue +340 -340
  28. package/src/filiale/fugou/pc/ExplorationSelect.vue +525 -525
  29. package/src/filiale/fugou/pc/ServiceControl.vue +1705 -1705
  30. package/src/filiale/fugou/pc/ServiceView.vue +941 -941
  31. package/src/filiale/fugou/pc/addMaterialScience.vue +481 -481
  32. package/src/filiale/fugou/pc/addressAndUserinfoManagement.vue +216 -216
  33. package/src/filiale/fugou/pc/chargeReport.vue +143 -0
  34. package/src/filiale/fugou/pc/devicesManagement.vue +483 -483
  35. package/src/filiale/fugou/pc/printChargepc.vue +148 -148
  36. package/src/filiale/fugou/pc.js +1 -0
  37. package/src/filiale/gongyi/android/AppAddMaterialScience.vue +493 -493
  38. package/src/filiale/qianneng/android/AppChargeManagement.vue +686 -686
  39. package/src/filiale/qianneng/android.js +15 -15
  40. package/src/filiale/qianneng/pc/ApplyMaterialDetailed.vue +261 -261
  41. package/src/filiale/qianneng/pc/Applydetail.vue +378 -378
  42. package/src/filiale/qianneng/pc/InstallFunction.vue +188 -188
  43. package/src/filiale/qianneng/pc.js +29 -29
  44. package/src/filiale/yangchunboneng/android/AppChargeManagement.vue +527 -527
  45. package/src/filiale/yangchunboneng/android/AppDevicesManagement.vue +639 -639
  46. package/src/filiale/yangchunboneng/android/AppServiceControl.vue +1681 -1681
  47. package/src/filiale/yangchunboneng/pc/ExplorationSelect.vue +548 -548
  48. package/src/filiale/yangchunboneng/pc/ServiceControl.vue +2075 -2075
  49. package/src/filiale/yangchunboneng/pc/chargeManagement.vue +1059 -1059
  50. package/src/main.js +22 -23
  51. package/src/test/SessionTestServlet.java +69 -0
  52. package/webapp/WEB-INF/web.xml +52 -0
  53. package/webapp/session-test.jsp +59 -0
@@ -1,527 +1,527 @@
1
- <template>
2
- <div>
3
- <div class="col-sm-12 col-xs-12 form-group app-btn">
4
- <button class="btn btn-info" @click.prevent="showCharge = true">收费</button>
5
- </div>
6
- <div class="col-sm-12 col-xs-12">
7
- <list :model="model" partial='list'>
8
- <div partial class="auto app-text panel">
9
- <div class="panel-body panel-self">
10
- <div class="row">
11
- <p class="col-xs-4 text-left font"><b>收费金额</b></p>
12
- <p class="col-xs-8 text-left input-font">{{ row.f_charge_money }}</p>
13
- </div>
14
- <div class="row">
15
- <p class="col-xs-4 text-left font"><b>收费项目</b></p>
16
- <p class="col-xs-8 text-left input-font">{{ row.f_payment_term }}</p>
17
- </div>
18
- <div class="row">
19
- <p class="col-xs-4 text-left font"><b>付款方式</b></p>
20
- <p class="col-xs-8 text-left input-font">{{ row.f_payment_method }}</p>
21
- </div>
22
- <div class="row">
23
- <p class="col-xs-4 text-left font"><b>收费人员</b></p>
24
- <p class="col-xs-8 text-left input-font">{{ row.f_charge_collectors }}</p>
25
- </div>
26
- <div class="row">
27
- <p class="col-xs-4 text-left font"><b>实际收款日期</b></p>
28
- <p class="col-xs-8 text-left input-font">{{row.f_actual_date}}</p>
29
- </div>
30
- <div class="row">
31
- <p class="col-xs-4 text-left font"><b>收费日期</b></p>
32
- <p class="col-xs-8 text-left input-font">{{ row.f_charge_date }}</p>
33
- </div>
34
- <div class="row">
35
- <p class="col-xs-4 text-left font"><b>收费状态</b></p>
36
- <p class="col-xs-8 text-left input-font">{{ row.f_charge_status }}</p>
37
- </div>
38
- <div class="row">
39
- <p class="col-xs-4 text-left font"><b>确认人</b></p>
40
- <p class="col-xs-8 text-left input-font">{{ row.f_confirm_person }}</p>
41
- </div>
42
- <div class="row">
43
- <p class="col-xs-4 text-left font"><b>确认时间</b></p>
44
- <p class="col-xs-8 text-left input-font">{{ row.f_confirm_date }}</p>
45
- </div>
46
- <div class="row">
47
- <button v-if="row.f_charge_status !== '退款'&& row.f_charge_status !== '作废' && $parent.$parent.isEmpty1(row.f_confirm_person)" style="background-color:#499edf;float: right" class="btn btn-info" @click="$parent.$parent.showConfirmModal(row)">确认收款</button>
48
- </div>
49
- </div>
50
- </div>
51
- </list>
52
- </div>
53
- <modal v-if="showCharge" :show.sync="showCharge" v-ref:modal :large="true" :backdrop="false" title="收费明细">
54
- <header slot="modal-header" class="modal-header">
55
- <button type="button" class="close" @click="closeModal"><span>&times;</span></button>
56
- <h4 class="modal-title">收费明细</h4>
57
- </header>
58
- <article slot="modal-body" class="modal-body clearfix">
59
- <div v-for="(i, item) in charge.charges" class="form-group col-sm-12 panel panel-info">
60
- <div class="panel-heading head col-sm-12" style="background-color: #e8f4ff;margin-bottom: 10px">
61
- <div class="col-sm-6 text-left">收费项目{{$index+1}}信息</div>
62
- <div class="col-sm-6 text-right"><button
63
- class="button_delete button_spacing"
64
- v-if="!item.f_userfiles_id"
65
- @click.prevent="deleteUserFile(i)"
66
- >删除</button></div>
67
- </div>
68
- <div class="form-group col-sm-12">
69
- <label class="col-sm-2 control-label">收费项目:</label>
70
- <div class="col-sm-10">
71
- <input-select width="100%" class="select select_list" placeholder='请选择'
72
- v-model="item.f_payment_term"
73
- :value.sync="item.f_payment_term"
74
- :options='paymentTerm'
75
- :value-single="true"
76
- close-on-select ></input-select>
77
- </div>
78
- </div>
79
- <div class="form-group col-sm-12">
80
- <label class="col-sm-2 control-label">收费金额:</label>
81
- <div class="col-sm-10">
82
- <input type="text"
83
- class="form-control input_view"
84
- style="width: 100%"
85
- placeholder="0.00"
86
- @change="moneyChange(i)"
87
- v-model="item.f_charge_money" />
88
- </div>
89
- </div>
90
- <div class="form-group col-sm-12" >
91
- <label class="col-sm-2 control-label">付款方式:</label>
92
- <div class="col-sm-10">
93
- <input-select
94
- placeholder='请选择' width="100%"
95
- v-model="item.f_payment_method"
96
- :value.sync="item.f_payment_method"
97
- :options='paymentMethod'
98
- class="select select_list"
99
- :value-single="true"
100
- close-on-select ></input-select>
101
- </div>
102
- </div>
103
- <div class="form-group col-sm-12">
104
- <label class="col-sm-2 control-label">金额大写:</label>
105
- <div class="col-sm-10">
106
- <input type="text"
107
- class="form-control input_view"
108
- style="width: 100%"
109
- :value="smalltoBIG(0)"
110
- readonly
111
- v-model.sync="item.f_amount_words" />
112
- </div>
113
- </div>
114
- <div class="form-group col-sm-12">
115
- <label class="col-sm-2 control-label">备注:</label>
116
- <div class="col-sm-10">
117
- <input type="text"
118
- class="form-control input_view"
119
- style="width: 100%"
120
- v-model="item.f_charge_remarks" />
121
- </div>
122
- </div>
123
- <div class="form-group col-sm-12">
124
- <label class="col-sm-2 control-label">实际收款时间:</label>
125
- <div class="col-sm-10">
126
- <datepicker id="startDate" placeholder="实际收款时间"
127
- style="width: 100%!important;"
128
- v-model="item.f_actual_date"
129
- :value.sync="item.f_actual_date"
130
- :format="'yyyy-MM-dd HH:mm:ss'"
131
- :show-reset-button="true"
132
- >
133
- </datepicker>
134
- </div>
135
- </div>
136
- </div>
137
- <div class="form-group col-sm-12">
138
- <label class="col-sm-2 control-label">应交总金额:</label>
139
- <div class="col-sm-10">
140
- <input type="text"
141
- class="form-control input_view"
142
- style="width: 100%"
143
- readonly
144
- v-model="selectdata.f_due_money" />
145
- </div>
146
- </div>
147
- <div class="form-group col-sm-12">
148
- <label class="col-sm-2 control-label">累计缴费总金额:</label>
149
- <div class="col-sm-10">
150
- <input type="text"
151
- class="form-control input_view"
152
- style="width: 100%"
153
- readonly
154
- v-model="selectdata.f_cumulative_payment_money" />
155
- </div>
156
- </div>
157
- <div class="form-group col-sm-12">
158
- <label class="col-sm-2 control-label">未结总金额:</label>
159
- <div class="col-sm-10">
160
- <input type="text"
161
- class="form-control input_view"
162
- style="width: 100%"
163
- readonly
164
- v-model="selectdata.f_surplus_money" />
165
- </div>
166
- </div>
167
- <div class="form-group col-sm-12">
168
- <label class="col-sm-2 control-label">收费环节:</label>
169
- <div class="col-sm-10">
170
- <input-select width="100%" class="select select_list" placeholder='请选择'
171
- v-model="charge.defname"
172
- :value.sync="charge.defname"
173
- :options='defnames'
174
- :value-single="true"
175
- close-on-select ></input-select>
176
- </div>
177
- </div>
178
-
179
- </article>
180
- <footer slot="modal-footer" class="modal-footer">
181
- <button type="button" class="btn btn-primary" @click="addcharges" >添加收费项目</button>
182
- <button type="button" class="btn btn-primary" @click="saveCharge()">新增收费</button>
183
- </footer>
184
- </modal>
185
- <modal v-if="showConfirm" :show.sync="showConfirm" v-ref:modal :backdrop="false" title="确认收款">
186
- <header slot="modal-header" class="modal-header">
187
- <button type="button" class="close" @click="closeModal"><span>&times;</span></button>
188
- <h4 class="modal-title">确认收款</h4>
189
- </header>
190
- <article slot="modal-body" class="modal-body clearfix">
191
- <div class="form-group col-sm-12">
192
- <label class="col-sm-2 control-label">收费金额:</label>
193
- <div class="col-sm-10">
194
- <input type="text"
195
- class="form-control input_view"
196
- style="width: 100%"
197
- readonly
198
- v-model="charge.f_charge_money" />
199
- </div>
200
- </div>
201
- <div class="form-group col-sm-12">
202
- <label class="col-sm-2 control-label">付款方式:</label>
203
- <div class="col-sm-10">
204
- <input type="text"
205
- class="form-control input_view"
206
- style="width: 100%"
207
- readonly
208
- v-model="charge.f_payment_method" />
209
- </div>
210
- </div>
211
- <div class="form-group col-sm-12">
212
- <label class="col-sm-2 control-label">金额大写:</label>
213
- <div class="col-sm-10">
214
- <input type="text"
215
- class="form-control input_view"
216
- style="width: 100%"
217
- readonly
218
- v-model="charge.f_amount_words" />
219
- </div>
220
- </div>
221
- <div class="form-group col-sm-12">
222
- <label class="col-sm-2 control-label">收费人员:</label>
223
- <div class="col-sm-10">
224
- <input type="text"
225
- class="form-control input_view"
226
- style="width: 100%"
227
- readonly
228
- v-model="charge.f_charge_collectors" />
229
- </div>
230
- </div>
231
- <div class="form-group col-sm-12">
232
- <label class="col-sm-2 control-label">确认人:</label>
233
- <div class="col-sm-10">
234
- <input type="text"
235
- class="form-control input_view"
236
- style="width: 100%"
237
- v-model="charge.f_confirm_person" />
238
- </div>
239
- </div>
240
- <div class="form-group col-sm-12">
241
- <label class="col-sm-2 control-label">确认时间:</label>
242
- <div class="col-sm-10">
243
- <datepicker id="startDate" placeholder="确认时间"
244
- style="width: 100%!important;"
245
- v-model="charge.f_confirm_date"
246
- :value.sync="charge.f_confirm_date"
247
- :default="true"
248
- :format="'yyyy-MM-dd HH:mm:ss'"
249
- :show-reset-button="true"
250
- >
251
- </datepicker>
252
- </div>
253
- </div>
254
- <div class="form-group col-sm-12">
255
- <label class="col-sm-2 control-label">备注:</label>
256
- <div class="col-sm-10">
257
- <input type="text"
258
- class="form-control input_view"
259
- style="width: 100%"
260
- v-model="charge.f_charge_remarks" />
261
- </div>
262
- </div>
263
- </article>
264
- <footer slot="modal-footer" class="modal-footer">
265
- <button type="button" class="btn btn-primary" @click="ConfirmPayment()">确认收款</button>
266
- </footer>
267
- </modal>
268
- </div>
269
- </template>
270
- <script>
271
- import {getNowDate,isEmpty} from '../../../components/Util'
272
- import {PagedList} from 'vue-client'
273
- import {HttpResetClass} from 'vue-client'
274
- import Vue from "vue";
275
-
276
- export default {
277
- title: '收费管理',
278
- props: {
279
- selectdata: {
280
- type: Object
281
- },
282
- mark: {
283
- type: Number,
284
- default: 0
285
- }
286
- },
287
- data () {
288
- return {
289
- model: {
290
- rows: null
291
- },
292
- showCharge:false,
293
- showConfirm:false,
294
- charge: {
295
- charges:[]
296
- },
297
- defnames: this.$appdata.getParam(this.selectdata.f_apply_type + '付款预设')
298
- }
299
- },
300
- ready () {
301
- this.search()
302
- },
303
- methods: {
304
- isEmpty1 (str) {
305
- return str === undefined || str === null || str.toString().trim() === ''
306
- },
307
- // 关闭对话框
308
- closeModal() {
309
- this.showCharge = false
310
- this.showConfirm = false
311
- this.charge = {
312
- charges:[]
313
- }
314
- this.search()
315
- },
316
- addcharges(){
317
- this.charge.charges.push({})
318
- },
319
- deleteUserFile (index) {
320
- this.charge.charges.splice(index, 1)
321
- },
322
- moneyChange (i) {
323
- if (isEmpty(this.charge.charges[i].f_charge_money) || Number(this.charge.charges[i].f_charge_money) === 0) {
324
- this.$showAlert('单笔收费不能为0元!!!', 'warning', 3000)
325
- this.charge.charges[i].f_charge_money = null
326
- return
327
- }
328
- if (this.selectdata.f_apply_type === '散户集体报建' && Number(this.charge.charges[i].f_charge_money) > Number(this.charge.charges[i].f_outstanding_amount)) {
329
- this.$showAlert('单笔收费不能超过未交金额!!!', 'warning', 3000)
330
- this.charge.charges[i].f_charge_money = null
331
- return
332
- }
333
- if (Number(this.charge.charges[i].f_charge_money) > Number(this.selectdata.f_surplus_money)) {
334
- this.$showAlert('单笔收费不能超过未交总金额!!!', 'warning', 3000)
335
- this.charge.charges[i].f_charge_money = null
336
- return
337
- }
338
- this.charge.charges[i].f_charge_money = (this.charge.charges[i].f_charge_money.match(/^\d*(\.?\d{0,2})/g)[0]) || null
339
- this.charge.charges[i].f_amount_words = this.smalltoBIG(this.charge.charges[i].f_charge_money)
340
- },
341
- // 金额转大写
342
- smalltoBIG(n) {
343
- let fraction = ['角', '分'];
344
- let digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
345
- let unit = [['元', '万', '亿'], ['', '拾', '佰', '仟']];
346
- let head = n < 0 ? '欠' : '';
347
- n = Math.abs(n);
348
-
349
- let s = '';
350
-
351
- for (var i = 0; i < fraction.length; i++) {
352
- s += (digit[Math.floor(n * 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, '');
353
- }
354
- s = s || '整';
355
- n = Math.floor(n);
356
-
357
- for (var i = 0; i < unit[0].length && n > 0; i++) {
358
- let p = '';
359
- for (var j = 0; j < unit[1].length && n > 0; j++) {
360
- p = digit[n % 10] + unit[1][j] + p;
361
- n = Math.floor(n / 10);
362
- }
363
- s = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][i] + s;
364
- }
365
- return head + s.replace(/(零.)*零元/, '元').replace(/(零.)+/g, '零').replace(/^整$/, '零元整')
366
- },
367
- // 新增收费
368
- async saveCharge() {
369
- if(this.charge.charges.length <= 0){
370
- return this.$showMessage('收费项目不能为空,请添加收费项目!!')
371
- }
372
- if(isEmpty(this.charge.defname )){
373
- return this.$showMessage('收费环节不能为空!!')
374
- }
375
- let http = new HttpResetClass()
376
- let data = {
377
- apply: this.selectdata,
378
- user: Vue.user,
379
- charge: this.charge
380
- }
381
-
382
- let res = await http.load('POST', `${this.$androidUtil.getProxyUrl()}/rs/logic/addApplyChargeRecord`, {data:data}, {
383
- resolveMsg: null,
384
- rejectMsg: '缴费失败!!!'
385
- })
386
- this.selectdata = res.data
387
-
388
- this.$dispatch('breakControl', this.selectdata)
389
- },
390
- showConfirmModal(row){
391
- this.charge = row
392
- this.charge.f_confirm_person = Vue.user.name
393
- this.showConfirm= true
394
- },
395
- async ConfirmPayment() {
396
- let http = new HttpResetClass()
397
- let data = {
398
- apply: this.selectdata,
399
- user: Vue.user,
400
- charge: this.charge
401
- }
402
- let res = await http.load('POST', this.$androidUtil.getProxyUrl()+'/rs/logic/confirmCharge', {data: data}, {
403
- resolveMsg: null,
404
- rejectMsg: '提交失败!!!'
405
- })
406
- if(res.data==200){
407
- this.$showAlert('提交成功!!!', 'success', 3000)
408
- //延时1s
409
- setTimeout(() => {
410
- this.showConfirm= false
411
- this.showauditor= false
412
- }, 1000)
413
- }
414
- //重新查询
415
- this.search()
416
- if (
417
- (this.selectdata.defname == '合同审批' && !isEmpty(this.selectdata.f_is_have) ) ||
418
- (this.selectdata.defname == '方案设计' && !isEmpty(this.selectdata.f_designer_people) ) ||
419
- (this.selectdata.defname == '方案审批' && !isEmpty(this.selectdata.f_position)) ||
420
- (this.selectdata.defname == '工程审批' && !isEmpty(this.selectdata.f_survey_opinion)) ||
421
- (this.selectdata.defname == '工程派工' && !isEmpty(this.selectdata.f_budget_peoples)) ||
422
- (this.selectdata.defname == '工程验收' && !isEmpty(this.selectdata.f_acceptor)) ||
423
- (this.selectdata.defname == '验收审批' && !isEmpty(this.selectdata.f_prospecting_result)) ||
424
- (this.selectdata.defname == '工程决算' && !isEmpty(this.selectdata.f_price_other)) ||
425
- (this.selectdata.defname == '收费确认' )
426
- ){
427
- this.getbutton()
428
- }
429
- },
430
- async getbutton(){
431
- var defname = this.selectdata.defname
432
- var processId = this.selectdata.f_process_id
433
- let data = {
434
- condition: `tc.f_process_id = '${processId}' and tc.defname = '${defname}'`
435
- }
436
- let http = new HttpResetClass()
437
- let res = await http.load(
438
- 'POST',
439
- `${this.$androidUtil.getProxyUrl()}/rs/sql/getPaymentRatio`,
440
- {data: data},
441
- {resolveMsg: null, rejectMsg: '查询失败!!!'}
442
- )
443
- if(res.data.length!==0){
444
- var f_due_money= res.data[0].f_due_money
445
- var cumulative= res.data[0].f_charge_money
446
- if (Number(f_due_money) == Number(cumulative)) {
447
- let flag = true
448
- let res1 = await http.load(
449
- 'POST',
450
- `${this.$androidUtil.getProxyUrl()}/rs/sql/getfeeconfirmation`,
451
- {data: data},
452
- {resolveMsg: null, rejectMsg: '查询失败!!!'}
453
- )
454
- for (let i =0;i<res1.data.length;i++){
455
- if (isEmpty(res1.data[i].f_confirm_person)){
456
- flag = false
457
- }
458
- }
459
- if (flag){
460
- let show_data = this.selectdata
461
- show_data.user = Vue.user
462
- show_data.start_activity ='报装申请'
463
- show_data.xmlfilename =this.selectdata.f_apply_type
464
- show_data.button = {button_name:'提交'}
465
- await this.$resetpost(
466
- `${this.$androidUtil.getProxyUrl()}/rs/logic/ApplyProductService`,
467
- {data: show_data},
468
- {resolveMsg: null, rejectMsg: '数据保存失败'}
469
- )
470
- }
471
- }
472
- }
473
- },
474
- async search () {
475
- let http = new HttpResetClass()
476
- let data = {
477
- f_process_id: this.selectdata.f_process_id
478
- }
479
- if (this.selectdata.f_apply_type === '启封通气' && this.selectdata.f_apply_type !== '线下发起'){
480
- data = {
481
- f_process_id: this.selectdata.f_parent_process_id
482
- }
483
- }
484
- let res = await http.load('POST', `${this.$androidUtil.getProxyUrl()}/rs/sql/getApplyChargeRecord`, {data:data}, {
485
- resolveMsg: null,
486
- rejectMsg: '收费记录查询失败!!!'
487
- })
488
- this.model.rows = res.data
489
- },
490
- },
491
- events: {
492
- },
493
- computed: {
494
- paymentMethod() {
495
- return this.$appdata.getParam("付款方式")
496
- },
497
- paymentTerm() {
498
- return this.$appdata.getParam("收费项目")
499
- }
500
- },
501
- watch: {
502
- }
503
- }
504
- </script>
505
- <style scoped lang="less">
506
- .qrcode {
507
- display: inline-block !important;
508
- margin: 10px 0px;
509
- }
510
- .panel-self{
511
- border-radius: 10px;
512
- border:1px solid #499EDF;
513
- background-color: #F8F8F8;
514
- }
515
- .vertical-center {
516
- display: flex;
517
- align-items: center;
518
- text-align: center;
519
- }
520
- /*清除model中的浮动*/
521
- .clearfix:after,.clearfix:before{
522
- display: table;
523
- }
524
- .clearfix:after{
525
- clear: both;
526
- }
527
- </style>
1
+ <template>
2
+ <div>
3
+ <div class="col-sm-12 col-xs-12 form-group app-btn">
4
+ <button class="btn btn-info" @click.prevent="showCharge = true">收费</button>
5
+ </div>
6
+ <div class="col-sm-12 col-xs-12">
7
+ <list :model="model" partial='list'>
8
+ <div partial class="auto app-text panel">
9
+ <div class="panel-body panel-self">
10
+ <div class="row">
11
+ <p class="col-xs-4 text-left font"><b>收费金额</b></p>
12
+ <p class="col-xs-8 text-left input-font">{{ row.f_charge_money }}</p>
13
+ </div>
14
+ <div class="row">
15
+ <p class="col-xs-4 text-left font"><b>收费项目</b></p>
16
+ <p class="col-xs-8 text-left input-font">{{ row.f_payment_term }}</p>
17
+ </div>
18
+ <div class="row">
19
+ <p class="col-xs-4 text-left font"><b>付款方式</b></p>
20
+ <p class="col-xs-8 text-left input-font">{{ row.f_payment_method }}</p>
21
+ </div>
22
+ <div class="row">
23
+ <p class="col-xs-4 text-left font"><b>收费人员</b></p>
24
+ <p class="col-xs-8 text-left input-font">{{ row.f_charge_collectors }}</p>
25
+ </div>
26
+ <div class="row">
27
+ <p class="col-xs-4 text-left font"><b>实际收款日期</b></p>
28
+ <p class="col-xs-8 text-left input-font">{{row.f_actual_date}}</p>
29
+ </div>
30
+ <div class="row">
31
+ <p class="col-xs-4 text-left font"><b>收费日期</b></p>
32
+ <p class="col-xs-8 text-left input-font">{{ row.f_charge_date }}</p>
33
+ </div>
34
+ <div class="row">
35
+ <p class="col-xs-4 text-left font"><b>收费状态</b></p>
36
+ <p class="col-xs-8 text-left input-font">{{ row.f_charge_status }}</p>
37
+ </div>
38
+ <div class="row">
39
+ <p class="col-xs-4 text-left font"><b>确认人</b></p>
40
+ <p class="col-xs-8 text-left input-font">{{ row.f_confirm_person }}</p>
41
+ </div>
42
+ <div class="row">
43
+ <p class="col-xs-4 text-left font"><b>确认时间</b></p>
44
+ <p class="col-xs-8 text-left input-font">{{ row.f_confirm_date }}</p>
45
+ </div>
46
+ <div class="row">
47
+ <button v-if="row.f_charge_status !== '退款'&& row.f_charge_status !== '作废' && $parent.$parent.isEmpty1(row.f_confirm_person)" style="background-color:#499edf;float: right" class="btn btn-info" @click="$parent.$parent.showConfirmModal(row)">确认收款</button>
48
+ </div>
49
+ </div>
50
+ </div>
51
+ </list>
52
+ </div>
53
+ <modal v-if="showCharge" :show.sync="showCharge" v-ref:modal :large="true" :backdrop="false" title="收费明细">
54
+ <header slot="modal-header" class="modal-header">
55
+ <button type="button" class="close" @click="closeModal"><span>&times;</span></button>
56
+ <h4 class="modal-title">收费明细</h4>
57
+ </header>
58
+ <article slot="modal-body" class="modal-body clearfix">
59
+ <div v-for="(i, item) in charge.charges" class="form-group col-sm-12 panel panel-info">
60
+ <div class="panel-heading head col-sm-12" style="background-color: #e8f4ff;margin-bottom: 10px">
61
+ <div class="col-sm-6 text-left">收费项目{{$index+1}}信息</div>
62
+ <div class="col-sm-6 text-right"><button
63
+ class="button_delete button_spacing"
64
+ v-if="!item.f_userfiles_id"
65
+ @click.prevent="deleteUserFile(i)"
66
+ >删除</button></div>
67
+ </div>
68
+ <div class="form-group col-sm-12">
69
+ <label class="col-sm-2 control-label">收费项目:</label>
70
+ <div class="col-sm-10">
71
+ <input-select width="100%" class="select select_list" placeholder='请选择'
72
+ v-model="item.f_payment_term"
73
+ :value.sync="item.f_payment_term"
74
+ :options='paymentTerm'
75
+ :value-single="true"
76
+ close-on-select ></input-select>
77
+ </div>
78
+ </div>
79
+ <div class="form-group col-sm-12">
80
+ <label class="col-sm-2 control-label">收费金额:</label>
81
+ <div class="col-sm-10">
82
+ <input type="text"
83
+ class="form-control input_view"
84
+ style="width: 100%"
85
+ placeholder="0.00"
86
+ @change="moneyChange(i)"
87
+ v-model="item.f_charge_money" />
88
+ </div>
89
+ </div>
90
+ <div class="form-group col-sm-12" >
91
+ <label class="col-sm-2 control-label">付款方式:</label>
92
+ <div class="col-sm-10">
93
+ <input-select
94
+ placeholder='请选择' width="100%"
95
+ v-model="item.f_payment_method"
96
+ :value.sync="item.f_payment_method"
97
+ :options='paymentMethod'
98
+ class="select select_list"
99
+ :value-single="true"
100
+ close-on-select ></input-select>
101
+ </div>
102
+ </div>
103
+ <div class="form-group col-sm-12">
104
+ <label class="col-sm-2 control-label">金额大写:</label>
105
+ <div class="col-sm-10">
106
+ <input type="text"
107
+ class="form-control input_view"
108
+ style="width: 100%"
109
+ :value="smalltoBIG(0)"
110
+ readonly
111
+ v-model.sync="item.f_amount_words" />
112
+ </div>
113
+ </div>
114
+ <div class="form-group col-sm-12">
115
+ <label class="col-sm-2 control-label">备注:</label>
116
+ <div class="col-sm-10">
117
+ <input type="text"
118
+ class="form-control input_view"
119
+ style="width: 100%"
120
+ v-model="item.f_charge_remarks" />
121
+ </div>
122
+ </div>
123
+ <div class="form-group col-sm-12">
124
+ <label class="col-sm-2 control-label">实际收款时间:</label>
125
+ <div class="col-sm-10">
126
+ <datepicker id="startDate" placeholder="实际收款时间"
127
+ style="width: 100%!important;"
128
+ v-model="item.f_actual_date"
129
+ :value.sync="item.f_actual_date"
130
+ :format="'yyyy-MM-dd HH:mm:ss'"
131
+ :show-reset-button="true"
132
+ >
133
+ </datepicker>
134
+ </div>
135
+ </div>
136
+ </div>
137
+ <div class="form-group col-sm-12">
138
+ <label class="col-sm-2 control-label">应交总金额:</label>
139
+ <div class="col-sm-10">
140
+ <input type="text"
141
+ class="form-control input_view"
142
+ style="width: 100%"
143
+ readonly
144
+ v-model="selectdata.f_due_money" />
145
+ </div>
146
+ </div>
147
+ <div class="form-group col-sm-12">
148
+ <label class="col-sm-2 control-label">累计缴费总金额:</label>
149
+ <div class="col-sm-10">
150
+ <input type="text"
151
+ class="form-control input_view"
152
+ style="width: 100%"
153
+ readonly
154
+ v-model="selectdata.f_cumulative_payment_money" />
155
+ </div>
156
+ </div>
157
+ <div class="form-group col-sm-12">
158
+ <label class="col-sm-2 control-label">未结总金额:</label>
159
+ <div class="col-sm-10">
160
+ <input type="text"
161
+ class="form-control input_view"
162
+ style="width: 100%"
163
+ readonly
164
+ v-model="selectdata.f_surplus_money" />
165
+ </div>
166
+ </div>
167
+ <div class="form-group col-sm-12">
168
+ <label class="col-sm-2 control-label">收费环节:</label>
169
+ <div class="col-sm-10">
170
+ <input-select width="100%" class="select select_list" placeholder='请选择'
171
+ v-model="charge.defname"
172
+ :value.sync="charge.defname"
173
+ :options='defnames'
174
+ :value-single="true"
175
+ close-on-select ></input-select>
176
+ </div>
177
+ </div>
178
+
179
+ </article>
180
+ <footer slot="modal-footer" class="modal-footer">
181
+ <button type="button" class="btn btn-primary" @click="addcharges" >添加收费项目</button>
182
+ <button type="button" class="btn btn-primary" @click="saveCharge()">新增收费</button>
183
+ </footer>
184
+ </modal>
185
+ <modal v-if="showConfirm" :show.sync="showConfirm" v-ref:modal :backdrop="false" title="确认收款">
186
+ <header slot="modal-header" class="modal-header">
187
+ <button type="button" class="close" @click="closeModal"><span>&times;</span></button>
188
+ <h4 class="modal-title">确认收款</h4>
189
+ </header>
190
+ <article slot="modal-body" class="modal-body clearfix">
191
+ <div class="form-group col-sm-12">
192
+ <label class="col-sm-2 control-label">收费金额:</label>
193
+ <div class="col-sm-10">
194
+ <input type="text"
195
+ class="form-control input_view"
196
+ style="width: 100%"
197
+ readonly
198
+ v-model="charge.f_charge_money" />
199
+ </div>
200
+ </div>
201
+ <div class="form-group col-sm-12">
202
+ <label class="col-sm-2 control-label">付款方式:</label>
203
+ <div class="col-sm-10">
204
+ <input type="text"
205
+ class="form-control input_view"
206
+ style="width: 100%"
207
+ readonly
208
+ v-model="charge.f_payment_method" />
209
+ </div>
210
+ </div>
211
+ <div class="form-group col-sm-12">
212
+ <label class="col-sm-2 control-label">金额大写:</label>
213
+ <div class="col-sm-10">
214
+ <input type="text"
215
+ class="form-control input_view"
216
+ style="width: 100%"
217
+ readonly
218
+ v-model="charge.f_amount_words" />
219
+ </div>
220
+ </div>
221
+ <div class="form-group col-sm-12">
222
+ <label class="col-sm-2 control-label">收费人员:</label>
223
+ <div class="col-sm-10">
224
+ <input type="text"
225
+ class="form-control input_view"
226
+ style="width: 100%"
227
+ readonly
228
+ v-model="charge.f_charge_collectors" />
229
+ </div>
230
+ </div>
231
+ <div class="form-group col-sm-12">
232
+ <label class="col-sm-2 control-label">确认人:</label>
233
+ <div class="col-sm-10">
234
+ <input type="text"
235
+ class="form-control input_view"
236
+ style="width: 100%"
237
+ v-model="charge.f_confirm_person" />
238
+ </div>
239
+ </div>
240
+ <div class="form-group col-sm-12">
241
+ <label class="col-sm-2 control-label">确认时间:</label>
242
+ <div class="col-sm-10">
243
+ <datepicker id="startDate" placeholder="确认时间"
244
+ style="width: 100%!important;"
245
+ v-model="charge.f_confirm_date"
246
+ :value.sync="charge.f_confirm_date"
247
+ :default="true"
248
+ :format="'yyyy-MM-dd HH:mm:ss'"
249
+ :show-reset-button="true"
250
+ >
251
+ </datepicker>
252
+ </div>
253
+ </div>
254
+ <div class="form-group col-sm-12">
255
+ <label class="col-sm-2 control-label">备注:</label>
256
+ <div class="col-sm-10">
257
+ <input type="text"
258
+ class="form-control input_view"
259
+ style="width: 100%"
260
+ v-model="charge.f_charge_remarks" />
261
+ </div>
262
+ </div>
263
+ </article>
264
+ <footer slot="modal-footer" class="modal-footer">
265
+ <button type="button" class="btn btn-primary" @click="ConfirmPayment()">确认收款</button>
266
+ </footer>
267
+ </modal>
268
+ </div>
269
+ </template>
270
+ <script>
271
+ import {getNowDate,isEmpty} from '../../../components/Util'
272
+ import {PagedList} from 'vue-client'
273
+ import {HttpResetClass} from 'vue-client'
274
+ import Vue from "vue";
275
+
276
+ export default {
277
+ title: '收费管理',
278
+ props: {
279
+ selectdata: {
280
+ type: Object
281
+ },
282
+ mark: {
283
+ type: Number,
284
+ default: 0
285
+ }
286
+ },
287
+ data () {
288
+ return {
289
+ model: {
290
+ rows: null
291
+ },
292
+ showCharge:false,
293
+ showConfirm:false,
294
+ charge: {
295
+ charges:[]
296
+ },
297
+ defnames: this.$appdata.getParam(this.selectdata.f_apply_type + '付款预设')
298
+ }
299
+ },
300
+ ready () {
301
+ this.search()
302
+ },
303
+ methods: {
304
+ isEmpty1 (str) {
305
+ return str === undefined || str === null || str.toString().trim() === ''
306
+ },
307
+ // 关闭对话框
308
+ closeModal() {
309
+ this.showCharge = false
310
+ this.showConfirm = false
311
+ this.charge = {
312
+ charges:[]
313
+ }
314
+ this.search()
315
+ },
316
+ addcharges(){
317
+ this.charge.charges.push({})
318
+ },
319
+ deleteUserFile (index) {
320
+ this.charge.charges.splice(index, 1)
321
+ },
322
+ moneyChange (i) {
323
+ if (isEmpty(this.charge.charges[i].f_charge_money) || Number(this.charge.charges[i].f_charge_money) === 0) {
324
+ this.$showAlert('单笔收费不能为0元!!!', 'warning', 3000)
325
+ this.charge.charges[i].f_charge_money = null
326
+ return
327
+ }
328
+ if (this.selectdata.f_apply_type === '散户集体报建' && Number(this.charge.charges[i].f_charge_money) > Number(this.charge.charges[i].f_outstanding_amount)) {
329
+ this.$showAlert('单笔收费不能超过未交金额!!!', 'warning', 3000)
330
+ this.charge.charges[i].f_charge_money = null
331
+ return
332
+ }
333
+ if (Number(this.charge.charges[i].f_charge_money) > Number(this.selectdata.f_surplus_money)) {
334
+ this.$showAlert('单笔收费不能超过未交总金额!!!', 'warning', 3000)
335
+ this.charge.charges[i].f_charge_money = null
336
+ return
337
+ }
338
+ this.charge.charges[i].f_charge_money = (this.charge.charges[i].f_charge_money.match(/^\d*(\.?\d{0,2})/g)[0]) || null
339
+ this.charge.charges[i].f_amount_words = this.smalltoBIG(this.charge.charges[i].f_charge_money)
340
+ },
341
+ // 金额转大写
342
+ smalltoBIG(n) {
343
+ let fraction = ['角', '分'];
344
+ let digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
345
+ let unit = [['元', '万', '亿'], ['', '拾', '佰', '仟']];
346
+ let head = n < 0 ? '欠' : '';
347
+ n = Math.abs(n);
348
+
349
+ let s = '';
350
+
351
+ for (var i = 0; i < fraction.length; i++) {
352
+ s += (digit[Math.floor(n * 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, '');
353
+ }
354
+ s = s || '整';
355
+ n = Math.floor(n);
356
+
357
+ for (var i = 0; i < unit[0].length && n > 0; i++) {
358
+ let p = '';
359
+ for (var j = 0; j < unit[1].length && n > 0; j++) {
360
+ p = digit[n % 10] + unit[1][j] + p;
361
+ n = Math.floor(n / 10);
362
+ }
363
+ s = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][i] + s;
364
+ }
365
+ return head + s.replace(/(零.)*零元/, '元').replace(/(零.)+/g, '零').replace(/^整$/, '零元整')
366
+ },
367
+ // 新增收费
368
+ async saveCharge() {
369
+ if(this.charge.charges.length <= 0){
370
+ return this.$showMessage('收费项目不能为空,请添加收费项目!!')
371
+ }
372
+ if(isEmpty(this.charge.defname )){
373
+ return this.$showMessage('收费环节不能为空!!')
374
+ }
375
+ let http = new HttpResetClass()
376
+ let data = {
377
+ apply: this.selectdata,
378
+ user: Vue.user,
379
+ charge: this.charge
380
+ }
381
+
382
+ let res = await http.load('POST', `${this.$androidUtil.getProxyUrl()}/rs/logic/addApplyChargeRecord`, {data:data}, {
383
+ resolveMsg: null,
384
+ rejectMsg: '缴费失败!!!'
385
+ })
386
+ this.selectdata = res.data
387
+
388
+ this.$dispatch('breakControl', this.selectdata)
389
+ },
390
+ showConfirmModal(row){
391
+ this.charge = row
392
+ this.charge.f_confirm_person = Vue.user.name
393
+ this.showConfirm= true
394
+ },
395
+ async ConfirmPayment() {
396
+ let http = new HttpResetClass()
397
+ let data = {
398
+ apply: this.selectdata,
399
+ user: Vue.user,
400
+ charge: this.charge
401
+ }
402
+ let res = await http.load('POST', this.$androidUtil.getProxyUrl()+'/rs/logic/confirmCharge', {data: data}, {
403
+ resolveMsg: null,
404
+ rejectMsg: '提交失败!!!'
405
+ })
406
+ if(res.data==200){
407
+ this.$showAlert('提交成功!!!', 'success', 3000)
408
+ //延时1s
409
+ setTimeout(() => {
410
+ this.showConfirm= false
411
+ this.showauditor= false
412
+ }, 1000)
413
+ }
414
+ //重新查询
415
+ this.search()
416
+ if (
417
+ (this.selectdata.defname == '合同审批' && !isEmpty(this.selectdata.f_is_have) ) ||
418
+ (this.selectdata.defname == '方案设计' && !isEmpty(this.selectdata.f_designer_people) ) ||
419
+ (this.selectdata.defname == '方案审批' && !isEmpty(this.selectdata.f_position)) ||
420
+ (this.selectdata.defname == '工程审批' && !isEmpty(this.selectdata.f_survey_opinion)) ||
421
+ (this.selectdata.defname == '工程派工' && !isEmpty(this.selectdata.f_budget_peoples)) ||
422
+ (this.selectdata.defname == '工程验收' && !isEmpty(this.selectdata.f_acceptor)) ||
423
+ (this.selectdata.defname == '验收审批' && !isEmpty(this.selectdata.f_prospecting_result)) ||
424
+ (this.selectdata.defname == '工程决算' && !isEmpty(this.selectdata.f_price_other)) ||
425
+ (this.selectdata.defname == '收费确认' )
426
+ ){
427
+ this.getbutton()
428
+ }
429
+ },
430
+ async getbutton(){
431
+ var defname = this.selectdata.defname
432
+ var processId = this.selectdata.f_process_id
433
+ let data = {
434
+ condition: `tc.f_process_id = '${processId}' and tc.defname = '${defname}'`
435
+ }
436
+ let http = new HttpResetClass()
437
+ let res = await http.load(
438
+ 'POST',
439
+ `${this.$androidUtil.getProxyUrl()}/rs/sql/getPaymentRatio`,
440
+ {data: data},
441
+ {resolveMsg: null, rejectMsg: '查询失败!!!'}
442
+ )
443
+ if(res.data.length!==0){
444
+ var f_due_money= res.data[0].f_due_money
445
+ var cumulative= res.data[0].f_charge_money
446
+ if (Number(f_due_money) == Number(cumulative)) {
447
+ let flag = true
448
+ let res1 = await http.load(
449
+ 'POST',
450
+ `${this.$androidUtil.getProxyUrl()}/rs/sql/getfeeconfirmation`,
451
+ {data: data},
452
+ {resolveMsg: null, rejectMsg: '查询失败!!!'}
453
+ )
454
+ for (let i =0;i<res1.data.length;i++){
455
+ if (isEmpty(res1.data[i].f_confirm_person)){
456
+ flag = false
457
+ }
458
+ }
459
+ if (flag){
460
+ let show_data = this.selectdata
461
+ show_data.user = Vue.user
462
+ show_data.start_activity ='报装申请'
463
+ show_data.xmlfilename =this.selectdata.f_apply_type
464
+ show_data.button = {button_name:'提交'}
465
+ await this.$resetpost(
466
+ `${this.$androidUtil.getProxyUrl()}/rs/logic/ApplyProductService`,
467
+ {data: show_data},
468
+ {resolveMsg: null, rejectMsg: '数据保存失败'}
469
+ )
470
+ }
471
+ }
472
+ }
473
+ },
474
+ async search () {
475
+ let http = new HttpResetClass()
476
+ let data = {
477
+ f_process_id: this.selectdata.f_process_id
478
+ }
479
+ if (this.selectdata.f_apply_type === '启封通气' && this.selectdata.f_apply_type !== '线下发起'){
480
+ data = {
481
+ f_process_id: this.selectdata.f_parent_process_id
482
+ }
483
+ }
484
+ let res = await http.load('POST', `${this.$androidUtil.getProxyUrl()}/rs/sql/getApplyChargeRecord`, {data:data}, {
485
+ resolveMsg: null,
486
+ rejectMsg: '收费记录查询失败!!!'
487
+ })
488
+ this.model.rows = res.data
489
+ },
490
+ },
491
+ events: {
492
+ },
493
+ computed: {
494
+ paymentMethod() {
495
+ return this.$appdata.getParam("付款方式")
496
+ },
497
+ paymentTerm() {
498
+ return this.$appdata.getParam("收费项目")
499
+ }
500
+ },
501
+ watch: {
502
+ }
503
+ }
504
+ </script>
505
+ <style scoped lang="less">
506
+ .qrcode {
507
+ display: inline-block !important;
508
+ margin: 10px 0px;
509
+ }
510
+ .panel-self{
511
+ border-radius: 10px;
512
+ border:1px solid #499EDF;
513
+ background-color: #F8F8F8;
514
+ }
515
+ .vertical-center {
516
+ display: flex;
517
+ align-items: center;
518
+ text-align: center;
519
+ }
520
+ /*清除model中的浮动*/
521
+ .clearfix:after,.clearfix:before{
522
+ display: table;
523
+ }
524
+ .clearfix:after{
525
+ clear: both;
526
+ }
527
+ </style>