sale-client 4.2.9 → 4.2.10

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 (51) hide show
  1. package/.gradle/5.2.1/fileHashes/fileHashes.lock +0 -0
  2. package/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  3. package/.gradle/buildOutputCleanup/cache.properties +1 -1
  4. package/build/dev-server.js +1 -4
  5. package/package.json +1 -1
  6. package/src/filiale/jinhuang/WebHand.vue +1026 -1026
  7. package/src/filiale/yuncheng/UploadIdCard.vue +59 -62
  8. package/src/main.js +1 -1
  9. package/src/components/FilesManage/addressts/FileUserFilests.vue +0 -671
  10. package/src/components/FilesManage/ncUserinfoList.vue +0 -315
  11. package/src/components/SellGasCharge/MeterCharge/CardDataRewrite.vue +0 -107
  12. package/src/components/SendCard/SendCardData.vue +0 -208
  13. package/src/components/accounts/accountAdd.vue +0 -276
  14. package/src/components/accounts/accountsList.vue +0 -183
  15. package/src/components/accounts/accountsManage.vue +0 -87
  16. package/src/components/common/chargeinfo/chargeinfo.vue +0 -55
  17. package/src/components/common/userinfo_detail/config/exportConfig.js +0 -85
  18. package/src/components/ncarchives/ncArchivesAdd.vue +0 -468
  19. package/src/components/ncarchives/ncArchivesList.vue +0 -159
  20. package/src/components/ncarchives/ncUserfilesList.vue +0 -373
  21. package/src/components/ncarchives/ncarchivesmanage.vue +0 -80
  22. package/src/components/revenue/IOTArrears/arrears.vue +0 -323
  23. package/src/components/revenue/IOTArrears/iotRechargeAudit.vue +0 -369
  24. package/src/components/revenue/base/rightview/carddetail/cardiotfeeChangeDetail.vue +0 -59
  25. package/src/components/revenue/base/rightview/carddetail/reduceChangeDetail.vue +0 -59
  26. package/src/components/revenue/comprehen/ComprehenOperation/BatchChange/BatchCancellationts.vue +0 -73
  27. package/src/components/revenue/comprehen/ComprehenOperation/BatchChange/BatchEnablets.vue +0 -73
  28. package/src/components/revenue/comprehen/ComprehenOperation/IcFeeDeduction/ReduceAddGas.vue +0 -199
  29. package/src/components/revenue/comprehen/ComprehenOperation/IcFeeDeduction/icdeductionManage.vue +0 -24
  30. package/src/components/revenue/comprehen/ComprehenOperation/IcFeeDeduction/icdeductionYSManage.vue +0 -24
  31. package/src/components/revenue/comprehen/ComprehenOperation/IcFeeDeduction/icfeeDeduction.vue +0 -185
  32. package/src/components/revenue/comprehen/ComprehenOperation/IcFeeDeduction/icfeeYSDeduction.vue +0 -185
  33. package/src/components/revenue/comprehen/ComprehenOperation/newchangemeter/ChangeFlowMeter.vue +0 -356
  34. package/src/components/revenue/comprehen/ComprehenOperation/newchangemeter/CorrectionMeter.vue +0 -148
  35. package/src/components/revenue/comprehen/SpecialUser/BlackList/BlackUserList.vue +0 -136
  36. package/src/components/revenue/recordMainten/sellinggas/AddWarehousemain.vue +0 -65
  37. package/src/components/revenue/recordMainten/sellinggas/MeterOperateAdd.vue +0 -483
  38. package/src/components/revenue/recordMainten/sellinggas/MeterOperatemain.vue +0 -279
  39. package/src/components/revenue/recordMainten/sellinggas/MeterOperatemainImport.vue +0 -265
  40. package/src/components/thirdapply/thirdAdd.vue +0 -289
  41. package/src/components/thirdapply/thirdList.vue +0 -162
  42. package/src/components/thirdapply/thirdManage.vue +0 -74
  43. package/src/components/webMeter/InstructQuery.vue +0 -414
  44. package/src/components/webMeter/ParamSet/ParamSet.vue +0 -556
  45. package/src/components/webMeter/ParamSet/ParamSetForm.vue +0 -296
  46. package/src/components/webMeter/WebUserHand.vue +0 -483
  47. package/src/components/webMeter/instructionView/NewQueryInstruct.vue +0 -509
  48. package/src/components/webMeter/instructionView/NewQueryInstructMain.vue +0 -48
  49. package/src/components/webMeter/webManage/NewMeterList.vue +0 -461
  50. package/src/plugins/FileManageServicets.js +0 -214
  51. package/src/plugins/GetImg.js +0 -53
@@ -1,1026 +1,1026 @@
1
- <template>
2
- <div class="flex-row" id="machineHandManager">
3
- <div class="basic-main">
4
- <criteria-paged :model="model" v-ref:paged @sort="sort">
5
- <criteria partial='criteria' v-ref:criteria @condition-changed="$parent.selfSearch">
6
- <div novalidate class="form-horizontal select-overspread container-fluid auto" partial>
7
- <div class="row">
8
- <div class="col-sm-2 form-group">
9
- <label class="font_normal_body color-red">归属起始</label>
10
- <datepicker placeholder="开始日期"
11
- style="width:60%"
12
- class="datepicker"
13
- v-model="model.startDate"
14
- condition="f_hand_date >='{} 00:00:00'"
15
- :value.sync="model.startDate"
16
- :format="'yyyy-MM-dd'"
17
- ></datepicker>
18
- </div>
19
- <div class="col-sm-2 form-group">
20
- <label class="font_normal_body color-red">归属结束</label>
21
- <datepicker placeholder="结束日期"
22
- style="width:60%"
23
- v-model="model.endDate"
24
- :value.sync="model.endDate"
25
- condition="f_hand_date <='{} 23:59:59'"
26
- :format="'yyyy-MM-dd'"
27
- ></datepicker>
28
- </div>
29
- <div class="col-sm-2 form-group">
30
- <label class="font_normal_body">客户编号</label>
31
- <input type="text" style="width:60%" class="input_search" v-model="model.f_userinfo_code"
32
- condition="f_userinfo_code='{}'" placeholder='客户编号'>
33
- </div>
34
- <div class="span" style="float:right;">
35
- <button
36
- class="button_search button_spacing" style="width:90px" @click="$parent.$parent.danhuShow()">
37
- 单户抄表
38
- </button>
39
- <button class="button_search button_spacing" @click="$parent.$parent.search()">查询</button>
40
- <button class="button_clear button_spacing" @click="$parent.$parent.clear()">清空</button>
41
- <export-excel
42
- :data="$parent.$parent.getCondition"
43
- :field="$parent.$parent.getfield"
44
- sqlurl="api/af-revenue/logic/saleExport" sql-name="sale_getWebHand" template-name='物联网抄表导出'
45
- :choose-col="true">
46
- </export-excel>
47
- <div
48
- :class="{'button_shrink_top':$parent.$parent.criteriaShow,'button_shrink_bottom':!$parent.$parent.criteriaShow}"
49
- @click="$parent.$parent.hidden()" class="button_spacing" style="float: right">
50
- </div>
51
- </div>
52
- </div>
53
- <div class="row" v-show="$parent.$parent.criteriaShow">
54
- <div class="col-sm-2 form-group">
55
- <label class="font_normal_body">表&emsp;&emsp;号</label>
56
- <input type="text" style="width:60%" class="input_search" v-model="model.f_meternumber"
57
- condition="f_meternumber like '%{}%'" placeholder='表号'>
58
- </div>
59
- <div class="col-sm-2 form-group">
60
- <label class="font_normal_body">客户姓名</label>
61
- <input type="text" style="width:60%" class="input_search" v-model="model.f_user_name"
62
- placeholder='客户姓名'
63
- condition="f_user_name = '{}'">
64
- </div>
65
- <div class="col-sm-2 form-group">
66
- <label class="font_normal_body">小&ensp;&ensp;&ensp;&ensp;区</label>
67
- <v-select :value.sync="model.f_residential_area"
68
- class="select_list select"
69
- enter-push
70
- v-model="model.f_residential_area"
71
- style="width: 60%"
72
- multiple="true"
73
- :options='$parent.$parent.residentialArea' placeholder='选择小区'
74
- close-on-select v-el:cc>
75
- </v-select>
76
- </div>
77
- <div class="col-sm-2 form-group">
78
- <label class="font_normal_body">楼&emsp;&emsp;栋</label>
79
- <input type="text" style="width:60%" class="input_search" v-model="model.f_building"
80
- condition="f_building = '{}'" placeholder='楼栋'>
81
- </div>
82
- <div class="col-sm-2 form-group">
83
- <label class="font_normal_body">单&emsp;&emsp;元</label>
84
- <input type="text" style="width:60%" class="input_search" v-model="model.f_unit"
85
- condition="f_unit = '{}'" placeholder='单元'>
86
- </div>
87
- <div class="col-sm-2 form-group">
88
- <label class="font_normal_body">楼&emsp;&emsp;层</label>
89
- <input type="text" style="width:60%" class="input_search" v-model="model.f_floor"
90
- condition="f_floor = '{}'" placeholder='楼层'>
91
- </div>
92
- <div class="col-sm-2 form-group">
93
- <label class="font_normal_body">门&ensp;牌&ensp;号</label>
94
- <input type="text" style="width:60%" class="input_search" v-model="model.f_room"
95
- condition="f_room like '%{}%'" placeholder='门牌号'>
96
- </div>
97
- <div class="col-sm-2 form-group">
98
- <label class="font_normal_body">客户地址</label>
99
- <input type="text" style="width:60%" class="input_search" v-model="model.f_address"
100
- condition="f_address like '%{}%'" placeholder='客户地址'>
101
- </div>
102
- <div class="col-sm-2 form-group">
103
- <label class="font_normal_body">抄&ensp;表&ensp;员</label>
104
- <v-select :value.sync="model.f_inputtor" v-model='model.f_inputtor'
105
- style="width:60%"
106
- multiple="true"
107
- :options='$parent.$parent.inputtores' placeholder='抄表员'
108
- close-on-select
109
- v-el:cc></v-select>
110
- </div>
111
- <div class="col-sm-2 form-group">
112
- <label class="font_normal_body">抄表单状态</label>
113
- <v-select :value.sync="model.f_meter_state"
114
- v-model='model.f_meter_state'
115
- style="width:60%"
116
- :options='$parent.$parent.meterstates'
117
- placeholder='抄表单状态'
118
- close-on-select
119
- condition="f_meter_state = '{}'"></v-select>
120
- </div>
121
-
122
- <div class="col-sm-2 form-group">
123
- <label class="font_normal_body">客户类型</label>
124
- <v-select :value.sync="model.f_user_type" v-model="model.f_user_type"
125
- :options='$parent.$parent.usertypes' placeholder='客户类型'
126
- style="width:60%"
127
- close-on-select
128
- condition="f_user_type = '{}'"></v-select>
129
- </div>
130
-
131
- <div class="col-sm-2 form-group" style="white-space: nowrap">
132
- <label class="font_normal_body">用&ensp;气&ensp;量</label>
133
- <div class="row">
134
- <input type="text" style="width:30%" class="input_search" v-model="model.oughtamountmin"
135
- condition="f_oughtamount >= {} " placeholder="">
136
- <label class="font_normal_body"> ≤ x ≤ </label>
137
- <input type="text" style="width:30%" class="input_search" v-model="model.oughtamountmax"
138
- condition="f_oughtamount <= {} " placeholder="">
139
- </div>
140
- </div>
141
- <res-select-group :initres="$parent.$parent.initres"
142
- @re-res="$parent.$parent.getRes"
143
- :show-component="['company']"
144
- v-ref:sel>
145
- </res-select-group>
146
- </div>
147
- </div>
148
- </criteria>
149
- <data-grid :model="model" partial='list' class="list_area table_sy" v-ref:grid id="hand_manager_grid">
150
- <template partial='head'>
151
- <tr>
152
- <th>
153
- <nobr>序号</nobr>
154
- </th>
155
- <th>
156
- <nobr>
157
- <data-order field="f_userinfo_code" name="客户编号"
158
- :order.sync="$parent.$parent.$parent.orderFields.f_userinfo_code"></data-order>
159
- </nobr>
160
- </th>
161
- <th>
162
- <nobr>
163
- <data-order field="f_address" name="基本信息"
164
- :order.sync="$parent.$parent.$parent.orderFields.f_address"></data-order>
165
- </nobr>
166
- </th>
167
- <th>
168
- <nobr>所属年月</nobr>
169
- </th>
170
- <th>
171
- <nobr>表号</nobr>
172
- </th>
173
- <th>
174
- <nobr>用户电话</nobr>
175
- </th>
176
- <th>
177
- <nobr>上期底数</nobr>
178
- </th>
179
- <th>
180
- <nobr>本期底数</nobr>
181
- </th>
182
- <th>
183
- <nobr>用气量</nobr>
184
- </th>
185
- <th>
186
- <nobr>
187
- <data-order field="f_last_input_date" name="上次抄表录入日期"
188
- :order.sync="$parent.$parent.$parent.orderFields.f_last_input_date"></data-order>
189
- </nobr>
190
- </th>
191
- <th>
192
- <nobr>
193
- <data-order field="f_hand_date" name="下发日期"
194
- :order.sync="$parent.$parent.$parent.orderFields.f_hand_date"></data-order>
195
- </nobr>
196
- </th>
197
- <th>
198
- <nobr>
199
- <data-order field="f_input_date" name="抄表录入日期"
200
- :order.sync="$parent.$parent.$parent.orderFields.f_input_date"></data-order>
201
- </nobr>
202
- </th>
203
- <th>
204
- <nobr>抄表员</nobr>
205
- </th>
206
- <th>
207
- <nobr>录入人员</nobr>
208
- </th>
209
- <th>
210
- <nobr>下发人员</nobr>
211
- </th>
212
- <th>
213
- <nobr>备注</nobr>
214
- </th>
215
- <th>
216
- <nobr>附件</nobr>
217
- </th>
218
- <th>
219
- <nobr>操作</nobr>
220
- </th>
221
- <!-- f_oughtfee-->
222
- </tr>
223
- </template>
224
- <template partial='body'>
225
- <td style="text-align: center;">{{ $index + 1 }}</td>
226
- <td style="text-align: center;">{{ row.f_userinfo_code }}</td>
227
- <td style="text-align: center;">{{ row.f_user_name }}&nbsp;&nbsp;{{ row.f_address }}</td>
228
- <td style="text-align: center;">{{ row.belongmonth }}</td>
229
- <td style="text-align: center;">{{ row.f_meternumber }}</td>
230
- <td style="text-align: center;">{{ row.f_user_phone }}</td>
231
- <td style="text-align: center;">{{ row.f_last_tablebase }}</td>
232
- <td id="hand-creat" v-if="row.f_meter_state === '未抄表'" style="text-align: center;">
233
- <div class="form-group" style="margin-bottom:0px;display: contents;" :class="{
234
- 'has-success has-feedback': !row.error,
235
- 'has-error has-feedback': row.error}">
236
- <input title="可录入小数点后三位"
237
- type="text" class="input_search"
238
- v-model="row.f_tablebase"
239
- @blur="$parent.$parent.$parent.beforenter($index, row)"
240
- v-next-el="{id: $index+2}"
241
- :id="$index+1"
242
- style="width: 100px;padding: 6px;"
243
- @focus="$parent.$parent.$parent.clearError(row)"
244
- :disabled="row.state === '开始'">
245
- </div>
246
- <span v-if="row.error && row.error !== ''" style="color: #ff0000;">{{ row.error }}</span>
247
- </td>
248
- <td id="hand-creat" v-if="row.f_meter_state !== '未抄表' " style="text-align: center;">
249
- {{ row.f_tablebase }}
250
- </td>
251
- <td style="text-align: center;">{{ $parent.$parent.$parent.calculationBase(row) }}</td>
252
- <td style="text-align: center;">{{ row.f_last_input_date }}</td>
253
- <td style="text-align: center;">{{ row.f_hand_date }}</td>
254
- <td style="text-align: center;">
255
- <div class="form-group" style="margin-bottom:0px;display: contents;" :class="{
256
- 'has-success has-feedback': !row.error,
257
- 'has-error has-feedback': row.error}"
258
- v-if="row.f_meter_state === '未抄表' && $parent.$parent.$parent.jurisdiction.includes('录入日期修正')">
259
- <datepicker id="endDate" placeholder="抄表时间"
260
- v-model="row.f_input_date"
261
- :value.sync="row.f_input_date"
262
- :format="'yyyy-MM-dd HH:mm:ss'"
263
- :show-reset-button="true">
264
- </datepicker>
265
- </div>
266
- <div v-else>
267
- {{ row.f_input_date }}
268
- </div>
269
- </td>
270
- <td style="text-align: center;">{{ row.f_inputtor }}</td>
271
- <td style="text-align: center;">{{ row.f_input_person }}</td>
272
- <td style="text-align: center;">{{ row.f_operator }}</td>
273
- <td style="text-align: center;">{{ row.f_comments }}</td>
274
- <td style="text-align: center;"><nobr>
275
- <button v-if="row.f_notified_path" class="btn btn-link" @click.stop="$parent.$parent.$parent.imgShow(row.f_notified_path)">图像识别</button>
276
- <button v-if="row.f_notified2_path" class="btn btn-link" @click.stop="$parent.$parent.$parent.imgShow(row.f_notified2_path)">图像识别2</button>
277
- <button v-if="row.f_notified_paths" class="btn btn-link"
278
- @click.stop="$parent.$parent.$parent.handImgListShow(row.f_notified_paths)">图像展示</button>
279
- </nobr></td>
280
- <td style="text-align: center;">
281
- <nobr>
282
- <button type="button" name="button" class="button_search button_spacing width-60"
283
- v-if="row.f_meter_state === '已抄表' && (row.id == row.maxid || !row.maxid)"
284
- @click.stop="$parent.$parent.$parent.cancelAuditHand(row)">撤销
285
- </button>
286
- <button type="button" name="button" class="btn btn-danger"
287
- v-if="row.f_meter_state === '未抄表'"
288
- @click.stop="$parent.$parent.$parent.delectHand(row)">
289
- 删除
290
- </button>
291
- </nobr>
292
- </td>
293
- </template>
294
- </data-grid>
295
- </criteria-paged>
296
- <table class="table-hover">
297
- <tr style="position: relative" class="table-bordered">
298
- <td
299
- style="display: inline-block;width: auto;border-right: 1px solid #F2F6FA;padding: 0px 10px 0px 10px;color: #5CB95C;font-weight: bold">
300
- 汇总信息
301
- </td>
302
- <td
303
- style="display: inline-block;width: auto;border-right: 1px solid #F2F6FA;padding: 0px 10px 0px 10px;font-weight: bold">
304
- 用气量:&emsp;{{ sumsmodel.f_oughtamount }}
305
- </td>
306
- </tr>
307
- </table>
308
- </div>
309
- <modal :show.sync="danhu.show" :title='danhutitle' backdrop="false" coverstyle="danhumodal">
310
- <article slot="modal-body" class="modal-body">
311
- <div class="panel panel-primary datapanel">
312
- <div class="row">
313
- <label class="control-label col-sm-6 flex-row" style="transform: translate(0,8px)">客户姓名:{{danhu.info.f_user_name}}</label>
314
- <label class="control-label col-sm-6 flex-row" style="transform: translate(0,8px)">客户编号:{{danhu.info.f_userinfo_code}}</label>
315
- <label class="control-label col-sm-6 flex-row" style="transform: translate(0,8px)">用户证号:{{danhu.info.f_book_no}}</label>
316
- <label class="control-label col-sm-12 flex-row" style="transform: translate(0,8px)">客户地址:{{danhu.info.f_address}}</label>
317
- <label class="control-label col-sm-6 flex-row" style="transform: translate(0,8px)">上次抄表日期:{{danhu.info.f_input_date}}</label>
318
- <label class="control-label col-sm-6 flex-row" style="transform: translate(0,8px)">上期底数:{{danhu.info.f_last_tablebase}}</label>
319
- <label class="control-label col-sm-6 flex-row" style="transform: translate(0,8px)">本期用量:{{f_current_usage}}</label>
320
- </div>
321
- </div>
322
- <div class="panel panel-primary datapanel">
323
- <div class="row">
324
- <div class="col-sm-6 flex-row" style="margin-top: 2px">
325
- <label for="danhucode" class="control-label" style="transform: translate(0,8px)">客户编号</label>
326
- <input id="danhucode" type="text" class="input_search " style="width: 60% !important;"
327
- v-model="danhu.f_userinfo_code" v-ref:danhucode @keyup.enter.stop="danhuCodeSearch"
328
- placeholder='客户编号'/>
329
- </div>
330
- <div class="col-sm-6 flex-row" style="margin-top: 2px">
331
- <label for="danhubase" class="control-label" style="transform: translate(0,8px)">本期底数</label>
332
- <input id="danhubase" type="number" class="input_search " style="width: 60% !important;"
333
- v-model="danhu.f_new_tablebase" @keyup.enter.stop="downAndHand"
334
- @blur="tableBaseBlur"
335
- placeholder='本期底数'/>
336
- </div>
337
- </div>
338
- </div>
339
- <upload :blodid="row.f_userinfo_id" v-if="config.showupload" isremark="true" fusetype="物联网表收费"></upload>
340
- </article>
341
- <footer slot="modal-footer">
342
- </footer>
343
- </modal>
344
- <modal :show.sync="imgshow" v-ref:modal backdrop="true" coverstyle="modalContentRight">
345
- <header slot="modal-header" class="modal-header">
346
- 抄表图像识别照片
347
- </header>
348
- <article slot="modal-body" class="modal-body">
349
- <div class="from-group">
350
- <img-self :src="imgfilename" :width="750" :height="750"></img-self>
351
- </div>
352
- </article>
353
- <footer slot="modal-footer" class="modal-footer">
354
- <button type="button" class="btn btn-success" @click='imgclose'>关闭</button>
355
- </footer>
356
- </modal>
357
- <modal :show.sync="imgListShow" v-ref:modal backdrop="true" coverstyle="modalContentRight">
358
- <header slot="modal-header" class="modal-header">
359
- 抄表图像识别照片
360
- </header>
361
- <article slot="modal-body" class="modal-body">
362
- <div class="from-group" v-for="img in images">
363
- <img-self :src="`/singlepage/rs/image/file/` + img" :width="250" :height="250"></img-self>
364
- </div>
365
- </article>
366
- <footer slot="modal-footer" class="modal-footer">
367
- <button type="button" class="btn btn-success" @click='imgListClose'>关闭</button>
368
- </footer>
369
- </modal>
370
- </div>
371
- </template>
372
- <script>
373
- import {PagedList, HttpResetClass} from 'vue-client'
374
- import Vue from 'vue'
375
-
376
- let readyGen = async function (self) {
377
- self.getfield = self.config.excelHeaders
378
- self.sumsmodel = self.$refs.paged.$refs.grid.model.sums
379
- self.reflash()
380
- }
381
-
382
- export default {
383
- title: '物联网表抄表',
384
- data () {
385
- return {
386
- priceModel: false,
387
- initres: {
388
- org: [this.$login.f.orgid],
389
- dep: [],
390
- user: []
391
- },
392
- sumsmodel: [],
393
- orgCondtionStr: '',
394
- deletestate: false,
395
- criteriaShow: false,
396
- imgshow: false,
397
- imgListShow: false,
398
- images: [],
399
- imgfilename: '',
400
- model: new PagedList('api/af-revenue/sql/sale_getWebHand', 50, {orderitem: this.orderDefault ? '"' + this.orderDefault + ' "' : `'f_hand_date desc'`}, {
401
- f_oughtamount: 0
402
- }),
403
- config: {
404
- // 导出列要和查询列相同
405
- excelHeaders: {
406
- 'f_user_id': '表编号',
407
- 'f_meternumber': '表号',
408
- 'f_inputtor': '抄表员',
409
- 'f_last_input_date': '上次抄表时间',
410
- 'f_input_date': '抄表日期',
411
- 'f_userinfo_code': '客户编号',
412
- 'f_address': '客户地址',
413
- 'f_residential_area': '小区名称',
414
- 'f_user_name': '客户姓名',
415
- 'f_last_tablebase': '上期底数',
416
- 'f_tablebase': '本期指数',
417
- 'f_oughtamount': '应交气量',
418
- 'f_input_person': '录入人员',
419
- 'f_meter_classify': '气表分类',
420
- 'f_meter_style': '气表型号',
421
- 'f_user_phone': '客户电话',
422
- 'f_comments': '备注'
423
- },
424
- examine: true,
425
- customCal: false
426
- },
427
- meter_state: false, // 是否显示计划下发按钮
428
- downModel: {
429
- downDate: Vue.$login.toStandardTimeString(),
430
- downWay: 'downWithUserfiles',
431
- downInputtor: []
432
- },
433
- inputtorModel: {
434
- inputtor: [],
435
- reason: ''
436
- },
437
- f_current_usage: '',
438
- auditState: [{label: '全部', value: ''}, {label: '未抄表', value: '未抄表'}, {
439
- label: '待审核',
440
- value: '待审核'
441
- }, {label: '已抄表', value: '已抄表'}],
442
-
443
- plans: [], // 记录当前行是否被勾选
444
- all: false, // 是否全选
445
- show: false, // 下发日期模态框显示
446
- unhandplan: [], // 之前是否有未抄表记录
447
- downConfirm: false, // 下发若有未抄记录,确认框
448
- uploadshow: false,
449
- // 小区
450
- residentialArea: [],
451
-
452
- // downDate: this.$login.toStandardYearMonth().replace("-", ""),
453
- msg: '',
454
- condition: '',
455
- orderDefault: 'f_hand_date',
456
- orderFields: {
457
- f_userinfo_id: 'no'
458
- },
459
- getfield: {},
460
- outlet: '',
461
- filiale: '',
462
- condition2: '',
463
- area: [],
464
- inputtouPerson: [],
465
- meters: [{label: '全部', value: ''}, {label: '机表', value: '机表'}, {label: '物联网表', value: '物联网表'}],
466
- resultstate: this.$appdata.getParam('抄表结果状态'),
467
- meterstates: [{label: '全部', value: ''}, {label: '未抄表', value: '未抄表'}, {label: '已抄表', value: '已抄表'}],
468
- usertypes: this.$appdata.getParam('客户类型') ? [{
469
- label: '全部',
470
- value: ''
471
- }, ...this.$appdata.getParam('客户类型')] : [],
472
- splitdata: '',
473
- f_filialeid: this.$login.f.orgid,
474
- meterbooks: [],
475
- upshow: false,
476
- inputid: 0,
477
- examineshow: false,
478
- examinerow: null,
479
- showfiles: false,
480
- uploadText: '抄表',
481
- examinetype: false,
482
- danhu: {
483
- show: false,
484
- f_userinfo_code: '',
485
- f_new_tablebase: '',
486
- info: {}
487
- },
488
- showerr: false,
489
- err: '',
490
- // 请求对象(批量导入,查询进度使用)
491
- HttpReset: new HttpResetClass(),
492
- row: null,
493
- // 应抄底数
494
- should_base: 0,
495
- // 计算公式
496
- designFormulas: null
497
- }
498
- },
499
- ready () {
500
- this.getaddress()
501
- readyGen(this)
502
- },
503
- mounted () {
504
- console.log(this.inputid)
505
- document.getElementById(this.inputid).focus()
506
- },
507
- methods: {
508
- tableBaseBlur () {
509
- if (this.danhu.f_new_tablebase) {
510
- this.f_current_usage = (this.danhu.f_new_tablebase - 0) - (this.danhu.info.f_last_tablebase - 0)
511
- }
512
- },
513
- handImgListShow (images) {
514
- this.imgListShow = true
515
- this.images = JSON.parse(images)
516
- },
517
- imgListClose () {
518
- this.imgListShow = false
519
- },
520
- imgclose () {
521
- this.imgshow = false
522
- },
523
- getFileName(fullPath) {
524
- if (!fullPath) return '';
525
- let url = fullPath.split('?')[0]; // 去除?后参数
526
- return url.substring(url.lastIndexOf('/') + 1); // 截取最后一段
527
- },
528
- imgShow (val) {
529
- this.imgfilename = `/rs/image/file/` + val
530
- this.imgshow = true
531
- },
532
- async danhuCodeSearch () {
533
- this.danhu.f_userinfo_code = this.danhu.f_userinfo_code.replace(/(^\s*)|(\s*$)/g, '')
534
- await this.$resetpost('api/af-revenue/sql/sale_getWebHandDanHu', {
535
- data: {
536
- f_userinfo_code: this.danhu.f_userinfo_code,
537
- f_orgid: this.f_filialeid
538
- }
539
- },
540
- {resolveMsg: null, rejectMsg: '查询用户信息失败,网络错误'}).then(res => {
541
- if (res.data.length !== 1) {
542
- this.$showAlert(res.data.length === 0 ? '没有查询到用户' : '查询到多条用户信息', 'warning', 3000)
543
- return
544
- }
545
- if (res.data[0].f_meter_state === '未抄表') {
546
- this.$showAlert('该用户有未抄表记录', 'warning', 3000)
547
- return
548
- }
549
- this.danhu.info = res.data[0]
550
- document.getElementById('danhubase').focus()
551
- })
552
- },
553
- calculationBase (row) {
554
- let oughtamount = null
555
- if (row.f_tablebase) {
556
- if (row.f_share_gas) {
557
- oughtamount = (row.f_tablebase - 0 - (row.f_last_tablebase - 0)).toFixed(4) + (row.f_share_gas > 0 ? '+' : '') + row.f_share_gas.toFixed(3)
558
- } else {
559
- if (row.f_capacity && row.f_capacity > 0 && row.f_tablebase < row.f_last_tablebase) {
560
- oughtamount = (row.f_tablebase - 0 + (row.f_capacity - row.f_last_tablebase)).toFixed(3)
561
- } else {
562
- oughtamount = (row.f_tablebase - 0 - (row.f_last_tablebase - 0)).toFixed(3)
563
- }
564
- }
565
- } else {
566
- oughtamount = 0
567
- }
568
- row.f_oughtamount = oughtamount
569
- return oughtamount
570
- },
571
- cancelHand (row) {
572
- if (this.config.examine) {
573
- let handdate = new Date(row.f_hand_date)
574
- let ima = new Date()
575
- if (handdate.getMonth() == ima.getMonth()) {
576
- this.cancelHand3(row)
577
- } else {
578
- if (!this.$login.r.find(value => value == '抄表隔月冲正')) {
579
- this.$showMessage('当前登录用户没有【抄表隔月冲正】权限, 请联系管理员!')
580
- } else {
581
- this.cancelHand3(row)
582
- }
583
- }
584
- } else {
585
- this.cancelHand3(row)
586
- }
587
- },
588
- cancelAuditHand (row) {
589
- let param = {
590
- f_hand_id: row.id,
591
- operInfo: {
592
- f_operator: this.$login.f.name,
593
- f_operatorid: this.$login.f.id,
594
- f_orgid: this.$login.f.orgid,
595
- f_orgname: this.$login.f.orgs,
596
- f_depid: this.$login.f.depids,
597
- f_depname: this.$login.f.deps
598
- }
599
- }
600
- let url = 'api/af-revenue/logic/sale_webHandCancel'
601
- this.$resetpost(url, {data: param}, {warnMsg: '确定对这条记录进行撤销吗?'}).then(() => {
602
- this.search()
603
- this.close()
604
- })
605
- },
606
- // 单户抄表
607
- async downAndHand () {
608
- if (!this.danhu.info.f_userinfo_code || this.danhu.info.f_userinfo_code === '') {
609
- this.$showAlert(`请先查询用户信息`, 'warning', 2000)
610
- return
611
- }
612
- if (this.danhu.f_new_tablebase < 0) {
613
- this.$showAlert(`底数不能小于0,请注意!`, 'warning', 2000)
614
- return
615
- } else if (this.danhu.f_new_tablebase.toString().split('.').length > 1 && this.danhu.f_new_tablebase.toString().split('.')[1].length > 3) {
616
- this.$showAlert(`底数最多只能输入小数点后3位,请注意!`, 'warning', 2000)
617
- return
618
- } else if (this.danhu.f_new_tablebase < this.danhu.info.f_tablebase && !this.danhu.info.f_capacity) {
619
- this.$showAlert(`本期表底数不能低于上期表底数`, 'warning', 2000)
620
- return
621
- }
622
- this.danhu.info.f_hand_date = this.$login.toStandardTimeString()
623
- this.danhu.info.f_meter_source = '单户抄表'
624
- this.danhu.info.f_operatorid = this.$login.f.id
625
- this.danhu.info.f_operator = this.$login.f.name
626
- this.danhu.info.f_inputtor = this.$login.f.name
627
- this.danhu.info.f_orgid = this.$login.f.orgid
628
- this.danhu.info.f_orgname = this.$login.f.orgs
629
- this.danhu.info.f_depid = this.$login.f.depids
630
- this.danhu.info.f_depname = this.$login.f.deps
631
- this.danhu.info.f_input_person = this.$login.f.name
632
- this.danhu.info.f_new_tablebase = this.danhu.f_new_tablebase
633
- this.$resetpost('api/af-revenue/logic/sale_webHandEnter', {data: this.danhu.info}, {
634
- resolveMsg: null,
635
- rejectMsg: null
636
- }).then((res) => {
637
- this.$showAlert(`单户抄表成功!`, 'success', 2000)
638
- this.danhuShow()
639
- }).catch((error) => {
640
- this.danhu.show = false
641
- this.$showAlert(`抄表失败,请注意查看,失败原因:` + JSON.toString(error), 'danger', 2000)
642
- })
643
- },
644
- danhuShow () {
645
- this.model.params.startDate = this.$refs.paged.$refs.criteria.model.startDate
646
- this.model.params.endDate = this.$refs.paged.$refs.criteria.model.endDate
647
- this.downModel.downDate = this.$login.toStandardTimeString()
648
- this.danhu = {
649
- show: true,
650
- f_userinfo_code: '',
651
- f_new_tablebase: '',
652
- info: {}
653
- }
654
- this.f_current_usage = ''
655
- setTimeout(() => {
656
- document.getElementById('danhucode').focus()
657
- this.$refs.paged.$refs.criteria.search()
658
- }, 100)
659
- },
660
- paycodefocus () {
661
- this.$nextTick(() => {
662
- this.$els.paycode.focus()
663
- })
664
- },
665
- getRes (obj) {
666
- this.orgCondtionStr = obj
667
- },
668
- async getaddress () {
669
- console.log('开始获取小区')
670
- let HttpReset = new HttpResetClass()
671
- var data = await HttpReset.load('POST', 'api/af-revenue/sql/manage_getarealist', {
672
- data: {
673
- condition: `1=1 and s.f_filialeid = '${this.$login.f.orgid}'`
674
- }
675
- }, {resolveMsg: null, rejectMsg: '获取小区失败!'})
676
- console.log('小区', data)
677
- let house = []
678
- house.push()
679
- for (let row of data.data) {
680
- console.log('开始保存小区')
681
- house.push({label: row.f_residential_area, value: row.f_residential_area})
682
- }
683
- this.residentialArea = house
684
- },
685
- hidden () {
686
- this.criteriaShow = !this.criteriaShow
687
- },
688
- clear () {
689
- Object.keys(this.$refs.paged.$refs.criteria.model).forEach((key) => {
690
- this.$refs.paged.$refs.criteria.model[key] = []
691
- })
692
- },
693
- search () {
694
- // 查询前清空选择项
695
- this.plans = []
696
- this.$refs.paged.$refs.criteria.search()
697
- },
698
- selfSearch (args) {
699
- this.meter_state = args.condition.includes('未下发')
700
- this.inputtor_change = args.condition.includes('未抄表')
701
- console.log('=====抄表1====', args.condition.includes('未抄表'))
702
- console.log('=====抄表1====', this.deletestate)
703
- if (args.condition.includes('未抄表')) {
704
- this.deletestate = true
705
- } else {
706
- this.deletestate = false
707
- }
708
- console.log('=====抄表1====', this.deletestate)
709
- if (!this.orgCondtionStr) {
710
- args.condition = `${args.condition}` + ' and f_orgid = ' + this.$login.f.orgid
711
- } else {
712
- args.condition = `${args.condition}` + this.orgCondtionStr
713
- }
714
-
715
- // 抄表员查询条件
716
- this.inputtouPerson = this.$refs.paged.$refs.criteria.model.f_inputtor
717
- if (this.inputtouPerson.length !== 0) {
718
- let str = JSON.stringify(this.inputtouPerson)
719
- str = str.replace(/"/g, `'`)
720
- str = str.replace(/\[/g, ``)
721
- str = str.replace(/\]/g, ``)
722
- console.log('=====抄表员model22222222222绑定====', str)
723
- // 查询多个抄表员时条件
724
- args.condition += ` and f_inputtor in ( ${str} )`
725
- }
726
- // 小区查询条件
727
- this.area = this.$refs.paged.$refs.criteria.model.f_residential_area
728
- console.log('=====小区model绑定====', this.area)
729
- if (this.area.length !== 0) {
730
- let str = JSON.stringify(this.area)
731
- str = str.replace(/"/g, `'`)
732
- str = str.replace(/\[/g, ``)
733
- str = str.replace(/\]/g, ``)
734
- console.log('=====小区model22222222222绑定====', str)
735
- // 查询多个小区时条件
736
- args.condition += ` and f_residential_area in ( ${str} )`
737
- }
738
-
739
- if (args.model.f_meter_brand && args.model.f_meter_brand.length > 0) {
740
- if (args.model.f_meter_brand[0].f_meter_brand) {
741
- args.condition = `${args.condition} and f_meter_brand = '${args.model.f_meter_brand[0].f_meter_brand}'`
742
- }
743
- }
744
- this.model.params.startDate = this.$refs.paged.$refs.criteria.model.startDate
745
- this.model.params.endDate = this.$refs.paged.$refs.criteria.model.endDate
746
- this.condition2 = args.condition
747
- console.log('selfsearch..', args.condition, this.model)
748
- this.model.search(args.condition, this.model)
749
- },
750
- reflash () {
751
- this.$refs.paged.$refs.criteria.model.f_orgid = `${Vue.$login.f.orgid}`
752
- this.$refs.paged.$refs.criteria.model.startDate = this.$login.toStartAndEndDateString()[0]
753
- this.$refs.paged.$refs.criteria.model.endDate = this.$login.toStartAndEndDateString()[1]
754
- this.search()
755
- },
756
- beforenter (index, row) {
757
- this.inputid = index + 1
758
- // 限制本次抄表不能低于上次
759
- if (row.f_tablebase) {
760
- if (row.f_tablebase < 0) {
761
- row.state = '失败'
762
- Vue.set(row, 'error', '底数不能小于0')
763
- this.speckText('底数不能小于0,请注意!')
764
- } else if (this.danhu.f_new_tablebase.toString().split('.').length > 1 && this.danhu.f_new_tablebase.toString().split('.')[1].length > 3) {
765
- row.state = '失败'
766
- Vue.set(row, 'error', '底数最多只能输入小数点后3位')
767
- this.speckText('底数最多只能输入小数点后3位,请注意!')
768
- } else if (row.f_tablebase < row.f_last_tablebase && !row.f_capacity) {
769
- row.state = '失败'
770
- Vue.set(row, 'error', '本期表底数不能低于上期表底数')
771
- this.speckText('本期表底数不能低于上期表底数,请注意!')
772
- } else {
773
- if (row.f_tablebase < row.f_last_tablebase) {
774
- this.$showMessage('本次抄表已超越最大量程, 请熟知!')
775
- }
776
- // 抄表结果状态没选默认给正常
777
- row.f_result_state = row.f_result_state ? row.f_result_state : '正常'
778
- this.enter(index, row)
779
- }
780
- }
781
- },
782
- enter (index, row) {
783
- console.log('录入数据。..', row)
784
- let f_input_date = Vue.$login.toStandardTimeString()
785
- let handplan = {
786
- id: row.id,
787
- f_oughtamount: row.f_oughtamount,
788
- f_tablebase: row.f_tablebase,
789
- f_hand_date: f_input_date,
790
- f_input_date: f_input_date,
791
- f_input_person: Vue.$login.f.name,
792
- f_meter_state: '已抄表',
793
- f_meter_source: '手动录入',
794
- f_operator: Vue.$login.f.name,
795
- f_operatorid: Vue.$login.f.id,
796
- f_orgid: Vue.$login.f.orgid,
797
- f_orgname: Vue.$login.f.orgs,
798
- f_depid: Vue.$login.f.depids,
799
- f_depname: Vue.$login.f.deps
800
- }
801
- console.log('抄表负数。。0', handplan)
802
- this.$resetpost('api/af-revenue/entity/save/t_web_hand_plan_record', handplan, {
803
- resolveMsg: null,
804
- rejectMsg: '抄表数据保存出错!!!'
805
- }).then((res) => {
806
- row.f_meter_state = '已抄表'
807
- row.f_input_date = f_input_date
808
- let sql = `update t_userfiles set f_web_meter_base = ${row.f_tablebase},version = version + 1 where f_userfiles_id = '${row.f_userfiles_id}' `
809
- this.$resetpost('api/af-revenue/logic/runSQL', { sql: sql })
810
- }).catch((error) => {
811
- row.state = '失败'
812
- Vue.set(row, 'error', JSON.stringify(error))
813
- this.speckText('抄表录入出错,请注意!')
814
- })
815
- },
816
- clearError (row) {
817
- if (row.f_tablebase === 0) {
818
- row.f_tablebase = ''
819
- }
820
- Vue.set(row, 'error', null)
821
- },
822
- async speckText (str) {
823
- var url = 'http://tts.baidu.com/text2audio?lan=zh&ie=UTF-8&spd=6&text=' + encodeURI(str)
824
- await new Audio(url).play()
825
- this.err = str
826
- this.showerr = true
827
- this.paycodefocus()
828
- },
829
- closeerr () {
830
- this.showerr = false
831
- },
832
- // 删除这条计划
833
- delectHand (row) {
834
- let sql = `update t_web_hand_plan_record set f_hand_state = '无效' where id = '${row.id}' `
835
- this.$resetpost('api/af-revenue/logic/runSQL', { sql: sql }).then((res) => {
836
- this.search()
837
- })
838
- },
839
- cancelHand3 (row) {
840
- // 抄表加入权限
841
- if (!this.$login.r.find(value => value == '机表抄表冲正')) {
842
- this.$showMessage('当前登录用户没有冲正权限, 请联系管理员!')
843
- return
844
- }
845
- // console.log('抄表冲正。、。。、', row)
846
- let param = {
847
- f_hand_id: row.id,
848
- operInfo: {
849
- f_operator: this.$login.f.name,
850
- f_operatorid: this.$login.f.id,
851
- f_orgid: this.$login.f.orgid,
852
- f_orgname: this.$login.f.orgs,
853
- f_depid: this.$login.f.depids,
854
- f_depname: this.$login.f.deps
855
- }
856
- }
857
- let url = 'api/af-revenue/logic/sale_commonEnterCancel'
858
- this.$resetpost(url, {data: param}, {warnMsg: '确定对这条记录进行撤销吗?'}).then(() => {
859
- this.search()
860
- this.close()
861
- })
862
- },
863
- // 关闭下发计划得弹出框
864
- close () {
865
- this.show = false
866
- this.inputtor_show = false
867
- this.downConfirm = false
868
- this.examineshow = false
869
- this.examinetype = false
870
- this.detailsShow = false
871
- this.priceModel = false
872
- // 初始化模态框数据
873
- this.initModal()
874
- if (this.uploadshow) {
875
- this.uploadshow = false
876
- // 讲选的文件清空
877
- this.$refs.file.$el.querySelector('input').value = ''
878
- }
879
- },
880
- initModal () {
881
- this.downModel = {
882
- downDate: Vue.$login.toStandardDateString(),
883
- downWay: 'downWithUserfiles',
884
- downInputtor: []
885
- }
886
- this.inputtorModel = {
887
- inputtor: [],
888
- reason: ''
889
- }
890
- },
891
- // 判断当前登陆人是不是子公司的人员
892
- isHead () {
893
- return this.$login.f.parent.parent.name.includes('统一资源管理')
894
- },
895
- sort (field, rule) {
896
- // 将所有排序方式设为不排序,实现相互排斥
897
- for (let key in this.orderFields) {
898
- if (key === field) {
899
- this.orderFields[key] = rule
900
- } else {
901
- this.orderFields[key] = 'no'
902
- }
903
- }
904
- // 如果新规则不排序,还原为默认排序
905
- if (rule === 'no') {
906
- this.model.paramSource.orderitem = `'${this.orderDefault}'`
907
- } else {
908
- this.model.paramSource.orderitem = `'${field} ${rule}'`
909
- }
910
- this.search()
911
- }
912
- },
913
- watch: {
914
- 'detailsShow' (val) {
915
- if (!val) {
916
- this.should_base = 0
917
- this.designFormulas = null
918
- }
919
- }
920
- },
921
- computed: {
922
- danhutitle () {
923
- return '单户抄表 当前计划年月:' + this.downModel.downDate
924
- },
925
- getCondition () {
926
- return {
927
- startDate: this.$refs.paged.$refs.criteria.model.startDate,
928
- endDate: this.$refs.paged.$refs.criteria.model.endDate,
929
- orderitem: this.orderDefault ? this.orderDefault : 'id',
930
- condition: this.condition2
931
- }
932
- },
933
- inputtores () {
934
- // 获取抄表员
935
- console.log('获取抄表员', this.$login.f)
936
- let rs = []
937
- if (this.$login.f.f_gasman.length > 0) {
938
- for (let i = 0; i < this.$login.f.f_gasman.length; i++) {
939
- let temp = {
940
- label: this.$login.f.f_gasman[i].name,
941
- value: this.$login.f.f_gasman[i].name
942
- }
943
- rs.push(temp)
944
- }
945
- }
946
- this.inputtores2 = rs
947
- return [...rs]
948
- },
949
- // 界面细节权限
950
- jurisdiction () {
951
- console.log('抄表界面细节', this.$login.r)
952
- return this.$login.r ? this.$login.r : []
953
- }
954
- },
955
- events: {
956
- dblclick: function (row, index) {
957
- this.row = row
958
- this.detailsShow = true
959
- },
960
- // 删除Resid数组元素
961
- 'delResid' (val) {
962
- this.resid.$remove({id: val, f_biobid: ''})
963
- },
964
- // 增加Resid数组元素
965
- 'resid' (val) {
966
- console.log('-=', val)
967
- this.resid.push({id: val, f_biobid: ''})
968
- }
969
- }
970
- }
971
- </script>
972
- <style lang="less">
973
- #handManager {
974
- display: flex;
975
- justify-content: space-around;
976
- align-items: center;
977
-
978
- .btn {
979
- margin: 0px;
980
- }
981
-
982
- .hand-loading {
983
- border: 3px solid #ccc;
984
- border-right-color: #337ab7;
985
- border-radius: 50%;
986
- animation: spin 0.6s linear;
987
- position: absolute;
988
- animation-iteration-count: infinite;
989
- top: 0;
990
- right: 50%;
991
- z-index: 2;
992
- display: block;
993
- width: 28px;
994
- height: 28px;
995
- line-height: 28px;
996
- text-align: center;
997
- pointer-events: none;
998
- }
999
-
1000
- @keyframes spin {
1001
- 100% {
1002
- transform: rotate(360deg);
1003
- }
1004
- }
1005
-
1006
- .detail-panel {
1007
- text-align: center;
1008
- color: #31708f;
1009
- background-color: #e8f1f9;
1010
- border-color: #F2F6FA;
1011
- }
1012
- }
1013
-
1014
- #hand_manager_grid {
1015
- thead {
1016
- position: relative;
1017
- z-index: 2;
1018
- }
1019
- }
1020
-
1021
- #machineHandManager {
1022
- .color-red {
1023
- color: red;
1024
- }
1025
- }
1026
- </style>
1
+ <template>
2
+ <div class="flex-row" id="machineHandManager">
3
+ <div class="basic-main">
4
+ <criteria-paged :model="model" v-ref:paged @sort="sort">
5
+ <criteria partial='criteria' v-ref:criteria @condition-changed="$parent.selfSearch">
6
+ <div novalidate class="form-horizontal select-overspread container-fluid auto" partial>
7
+ <div class="row">
8
+ <div class="col-sm-2 form-group">
9
+ <label class="font_normal_body color-red">归属起始</label>
10
+ <datepicker placeholder="开始日期"
11
+ style="width:60%"
12
+ class="datepicker"
13
+ v-model="model.startDate"
14
+ condition="f_hand_date >='{} 00:00:00'"
15
+ :value.sync="model.startDate"
16
+ :format="'yyyy-MM-dd'"
17
+ ></datepicker>
18
+ </div>
19
+ <div class="col-sm-2 form-group">
20
+ <label class="font_normal_body color-red">归属结束</label>
21
+ <datepicker placeholder="结束日期"
22
+ style="width:60%"
23
+ v-model="model.endDate"
24
+ :value.sync="model.endDate"
25
+ condition="f_hand_date <='{} 23:59:59'"
26
+ :format="'yyyy-MM-dd'"
27
+ ></datepicker>
28
+ </div>
29
+ <div class="col-sm-2 form-group">
30
+ <label class="font_normal_body">客户编号</label>
31
+ <input type="text" style="width:60%" class="input_search" v-model="model.f_userinfo_code"
32
+ condition="f_userinfo_code='{}'" placeholder='客户编号'>
33
+ </div>
34
+ <div class="span" style="float:right;">
35
+ <button
36
+ class="button_search button_spacing" style="width:90px" @click="$parent.$parent.danhuShow()">
37
+ 单户抄表
38
+ </button>
39
+ <button class="button_search button_spacing" @click="$parent.$parent.search()">查询</button>
40
+ <button class="button_clear button_spacing" @click="$parent.$parent.clear()">清空</button>
41
+ <export-excel
42
+ :data="$parent.$parent.getCondition"
43
+ :field="$parent.$parent.getfield"
44
+ sqlurl="api/af-revenue/logic/saleExport" sql-name="sale_getWebHand" template-name='物联网抄表导出'
45
+ :choose-col="true">
46
+ </export-excel>
47
+ <div
48
+ :class="{'button_shrink_top':$parent.$parent.criteriaShow,'button_shrink_bottom':!$parent.$parent.criteriaShow}"
49
+ @click="$parent.$parent.hidden()" class="button_spacing" style="float: right">
50
+ </div>
51
+ </div>
52
+ </div>
53
+ <div class="row" v-show="$parent.$parent.criteriaShow">
54
+ <div class="col-sm-2 form-group">
55
+ <label class="font_normal_body">表&emsp;&emsp;号</label>
56
+ <input type="text" style="width:60%" class="input_search" v-model="model.f_meternumber"
57
+ condition="f_meternumber like '%{}%'" placeholder='表号'>
58
+ </div>
59
+ <div class="col-sm-2 form-group">
60
+ <label class="font_normal_body">客户姓名</label>
61
+ <input type="text" style="width:60%" class="input_search" v-model="model.f_user_name"
62
+ placeholder='客户姓名'
63
+ condition="f_user_name = '{}'">
64
+ </div>
65
+ <div class="col-sm-2 form-group">
66
+ <label class="font_normal_body">小&ensp;&ensp;&ensp;&ensp;区</label>
67
+ <v-select :value.sync="model.f_residential_area"
68
+ class="select_list select"
69
+ enter-push
70
+ v-model="model.f_residential_area"
71
+ style="width: 60%"
72
+ multiple="true"
73
+ :options='$parent.$parent.residentialArea' placeholder='选择小区'
74
+ close-on-select v-el:cc>
75
+ </v-select>
76
+ </div>
77
+ <div class="col-sm-2 form-group">
78
+ <label class="font_normal_body">楼&emsp;&emsp;栋</label>
79
+ <input type="text" style="width:60%" class="input_search" v-model="model.f_building"
80
+ condition="f_building = '{}'" placeholder='楼栋'>
81
+ </div>
82
+ <div class="col-sm-2 form-group">
83
+ <label class="font_normal_body">单&emsp;&emsp;元</label>
84
+ <input type="text" style="width:60%" class="input_search" v-model="model.f_unit"
85
+ condition="f_unit = '{}'" placeholder='单元'>
86
+ </div>
87
+ <div class="col-sm-2 form-group">
88
+ <label class="font_normal_body">楼&emsp;&emsp;层</label>
89
+ <input type="text" style="width:60%" class="input_search" v-model="model.f_floor"
90
+ condition="f_floor = '{}'" placeholder='楼层'>
91
+ </div>
92
+ <div class="col-sm-2 form-group">
93
+ <label class="font_normal_body">门&ensp;牌&ensp;号</label>
94
+ <input type="text" style="width:60%" class="input_search" v-model="model.f_room"
95
+ condition="f_room like '%{}%'" placeholder='门牌号'>
96
+ </div>
97
+ <div class="col-sm-2 form-group">
98
+ <label class="font_normal_body">客户地址</label>
99
+ <input type="text" style="width:60%" class="input_search" v-model="model.f_address"
100
+ condition="f_address like '%{}%'" placeholder='客户地址'>
101
+ </div>
102
+ <div class="col-sm-2 form-group">
103
+ <label class="font_normal_body">抄&ensp;表&ensp;员</label>
104
+ <v-select :value.sync="model.f_inputtor" v-model='model.f_inputtor'
105
+ style="width:60%"
106
+ multiple="true"
107
+ :options='$parent.$parent.inputtores' placeholder='抄表员'
108
+ close-on-select
109
+ v-el:cc></v-select>
110
+ </div>
111
+ <div class="col-sm-2 form-group">
112
+ <label class="font_normal_body">抄表单状态</label>
113
+ <v-select :value.sync="model.f_meter_state"
114
+ v-model='model.f_meter_state'
115
+ style="width:60%"
116
+ :options='$parent.$parent.meterstates'
117
+ placeholder='抄表单状态'
118
+ close-on-select
119
+ condition="f_meter_state = '{}'"></v-select>
120
+ </div>
121
+
122
+ <div class="col-sm-2 form-group">
123
+ <label class="font_normal_body">客户类型</label>
124
+ <v-select :value.sync="model.f_user_type" v-model="model.f_user_type"
125
+ :options='$parent.$parent.usertypes' placeholder='客户类型'
126
+ style="width:60%"
127
+ close-on-select
128
+ condition="f_user_type = '{}'"></v-select>
129
+ </div>
130
+
131
+ <div class="col-sm-2 form-group" style="white-space: nowrap">
132
+ <label class="font_normal_body">用&ensp;气&ensp;量</label>
133
+ <div class="row">
134
+ <input type="text" style="width:30%" class="input_search" v-model="model.oughtamountmin"
135
+ condition="f_oughtamount >= {} " placeholder="">
136
+ <label class="font_normal_body"> ≤ x ≤ </label>
137
+ <input type="text" style="width:30%" class="input_search" v-model="model.oughtamountmax"
138
+ condition="f_oughtamount <= {} " placeholder="">
139
+ </div>
140
+ </div>
141
+ <res-select-group :initres="$parent.$parent.initres"
142
+ @re-res="$parent.$parent.getRes"
143
+ :show-component="['company']"
144
+ v-ref:sel>
145
+ </res-select-group>
146
+ </div>
147
+ </div>
148
+ </criteria>
149
+ <data-grid :model="model" partial='list' class="list_area table_sy" v-ref:grid id="hand_manager_grid">
150
+ <template partial='head'>
151
+ <tr>
152
+ <th>
153
+ <nobr>序号</nobr>
154
+ </th>
155
+ <th>
156
+ <nobr>
157
+ <data-order field="f_userinfo_code" name="客户编号"
158
+ :order.sync="$parent.$parent.$parent.orderFields.f_userinfo_code"></data-order>
159
+ </nobr>
160
+ </th>
161
+ <th>
162
+ <nobr>
163
+ <data-order field="f_address" name="基本信息"
164
+ :order.sync="$parent.$parent.$parent.orderFields.f_address"></data-order>
165
+ </nobr>
166
+ </th>
167
+ <th>
168
+ <nobr>所属年月</nobr>
169
+ </th>
170
+ <th>
171
+ <nobr>表号</nobr>
172
+ </th>
173
+ <th>
174
+ <nobr>用户电话</nobr>
175
+ </th>
176
+ <th>
177
+ <nobr>上期底数</nobr>
178
+ </th>
179
+ <th>
180
+ <nobr>本期底数</nobr>
181
+ </th>
182
+ <th>
183
+ <nobr>用气量</nobr>
184
+ </th>
185
+ <th>
186
+ <nobr>
187
+ <data-order field="f_last_input_date" name="上次抄表录入日期"
188
+ :order.sync="$parent.$parent.$parent.orderFields.f_last_input_date"></data-order>
189
+ </nobr>
190
+ </th>
191
+ <th>
192
+ <nobr>
193
+ <data-order field="f_hand_date" name="下发日期"
194
+ :order.sync="$parent.$parent.$parent.orderFields.f_hand_date"></data-order>
195
+ </nobr>
196
+ </th>
197
+ <th>
198
+ <nobr>
199
+ <data-order field="f_input_date" name="抄表录入日期"
200
+ :order.sync="$parent.$parent.$parent.orderFields.f_input_date"></data-order>
201
+ </nobr>
202
+ </th>
203
+ <th>
204
+ <nobr>抄表员</nobr>
205
+ </th>
206
+ <th>
207
+ <nobr>录入人员</nobr>
208
+ </th>
209
+ <th>
210
+ <nobr>下发人员</nobr>
211
+ </th>
212
+ <th>
213
+ <nobr>备注</nobr>
214
+ </th>
215
+ <th>
216
+ <nobr>附件</nobr>
217
+ </th>
218
+ <th>
219
+ <nobr>操作</nobr>
220
+ </th>
221
+ <!-- f_oughtfee-->
222
+ </tr>
223
+ </template>
224
+ <template partial='body'>
225
+ <td style="text-align: center;">{{ $index + 1 }}</td>
226
+ <td style="text-align: center;">{{ row.f_userinfo_code }}</td>
227
+ <td style="text-align: center;">{{ row.f_user_name }}&nbsp;&nbsp;{{ row.f_address }}</td>
228
+ <td style="text-align: center;">{{ row.belongmonth }}</td>
229
+ <td style="text-align: center;">{{ row.f_meternumber }}</td>
230
+ <td style="text-align: center;">{{ row.f_user_phone }}</td>
231
+ <td style="text-align: center;">{{ row.f_last_tablebase }}</td>
232
+ <td id="hand-creat" v-if="row.f_meter_state === '未抄表'" style="text-align: center;">
233
+ <div class="form-group" style="margin-bottom:0px;display: contents;" :class="{
234
+ 'has-success has-feedback': !row.error,
235
+ 'has-error has-feedback': row.error}">
236
+ <input title="可录入小数点后三位"
237
+ type="text" class="input_search"
238
+ v-model="row.f_tablebase"
239
+ @blur="$parent.$parent.$parent.beforenter($index, row)"
240
+ v-next-el="{id: $index+2}"
241
+ :id="$index+1"
242
+ style="width: 100px;padding: 6px;"
243
+ @focus="$parent.$parent.$parent.clearError(row)"
244
+ :disabled="row.state === '开始'">
245
+ </div>
246
+ <span v-if="row.error && row.error !== ''" style="color: #ff0000;">{{ row.error }}</span>
247
+ </td>
248
+ <td id="hand-creat" v-if="row.f_meter_state !== '未抄表' " style="text-align: center;">
249
+ {{ row.f_tablebase }}
250
+ </td>
251
+ <td style="text-align: center;">{{ $parent.$parent.$parent.calculationBase(row) }}</td>
252
+ <td style="text-align: center;">{{ row.f_last_input_date }}</td>
253
+ <td style="text-align: center;">{{ row.f_hand_date }}</td>
254
+ <td style="text-align: center;">
255
+ <div class="form-group" style="margin-bottom:0px;display: contents;" :class="{
256
+ 'has-success has-feedback': !row.error,
257
+ 'has-error has-feedback': row.error}"
258
+ v-if="row.f_meter_state === '未抄表' && $parent.$parent.$parent.jurisdiction.includes('录入日期修正')">
259
+ <datepicker id="endDate" placeholder="抄表时间"
260
+ v-model="row.f_input_date"
261
+ :value.sync="row.f_input_date"
262
+ :format="'yyyy-MM-dd HH:mm:ss'"
263
+ :show-reset-button="true">
264
+ </datepicker>
265
+ </div>
266
+ <div v-else>
267
+ {{ row.f_input_date }}
268
+ </div>
269
+ </td>
270
+ <td style="text-align: center;">{{ row.f_inputtor }}</td>
271
+ <td style="text-align: center;">{{ row.f_input_person }}</td>
272
+ <td style="text-align: center;">{{ row.f_operator }}</td>
273
+ <td style="text-align: center;">{{ row.f_comments }}</td>
274
+ <td style="text-align: center;"><nobr>
275
+ <button v-if="row.f_notified_path" class="btn btn-link" @click.stop="$parent.$parent.$parent.imgShow(row.f_notified_path)">图像识别</button>
276
+ <button v-if="row.f_notified2_path" class="btn btn-link" @click.stop="$parent.$parent.$parent.imgShow(row.f_notified2_path)">图像识别2</button>
277
+ <button v-if="row.f_notified_paths" class="btn btn-link"
278
+ @click.stop="$parent.$parent.$parent.handImgListShow(row.f_notified_paths)">图像展示</button>
279
+ </nobr></td>
280
+ <td style="text-align: center;">
281
+ <nobr>
282
+ <button type="button" name="button" class="button_search button_spacing width-60"
283
+ v-if="row.f_meter_state === '已抄表' && (row.id == row.maxid || !row.maxid)"
284
+ @click.stop="$parent.$parent.$parent.cancelAuditHand(row)">撤销
285
+ </button>
286
+ <button type="button" name="button" class="btn btn-danger"
287
+ v-if="row.f_meter_state === '未抄表'"
288
+ @click.stop="$parent.$parent.$parent.delectHand(row)">
289
+ 删除
290
+ </button>
291
+ </nobr>
292
+ </td>
293
+ </template>
294
+ </data-grid>
295
+ </criteria-paged>
296
+ <table class="table-hover">
297
+ <tr style="position: relative" class="table-bordered">
298
+ <td
299
+ style="display: inline-block;width: auto;border-right: 1px solid #F2F6FA;padding: 0px 10px 0px 10px;color: #5CB95C;font-weight: bold">
300
+ 汇总信息
301
+ </td>
302
+ <td
303
+ style="display: inline-block;width: auto;border-right: 1px solid #F2F6FA;padding: 0px 10px 0px 10px;font-weight: bold">
304
+ 用气量:&emsp;{{ sumsmodel.f_oughtamount }}
305
+ </td>
306
+ </tr>
307
+ </table>
308
+ </div>
309
+ <modal :show.sync="danhu.show" :title='danhutitle' backdrop="false" coverstyle="danhumodal">
310
+ <article slot="modal-body" class="modal-body">
311
+ <div class="panel panel-primary datapanel">
312
+ <div class="row">
313
+ <label class="control-label col-sm-6 flex-row" style="transform: translate(0,8px)">客户姓名:{{danhu.info.f_user_name}}</label>
314
+ <label class="control-label col-sm-6 flex-row" style="transform: translate(0,8px)">客户编号:{{danhu.info.f_userinfo_code}}</label>
315
+ <label class="control-label col-sm-6 flex-row" style="transform: translate(0,8px)">用户证号:{{danhu.info.f_book_no}}</label>
316
+ <label class="control-label col-sm-12 flex-row" style="transform: translate(0,8px)">客户地址:{{danhu.info.f_address}}</label>
317
+ <label class="control-label col-sm-6 flex-row" style="transform: translate(0,8px)">上次抄表日期:{{danhu.info.f_input_date}}</label>
318
+ <label class="control-label col-sm-6 flex-row" style="transform: translate(0,8px)">上期底数:{{danhu.info.f_last_tablebase}}</label>
319
+ <label class="control-label col-sm-6 flex-row" style="transform: translate(0,8px)">本期用量:{{f_current_usage}}</label>
320
+ </div>
321
+ </div>
322
+ <div class="panel panel-primary datapanel">
323
+ <div class="row">
324
+ <div class="col-sm-6 flex-row" style="margin-top: 2px">
325
+ <label for="danhucode" class="control-label" style="transform: translate(0,8px)">客户编号</label>
326
+ <input id="danhucode" type="text" class="input_search " style="width: 60% !important;"
327
+ v-model="danhu.f_userinfo_code" v-ref:danhucode @keyup.enter.stop="danhuCodeSearch"
328
+ placeholder='客户编号'/>
329
+ </div>
330
+ <div class="col-sm-6 flex-row" style="margin-top: 2px">
331
+ <label for="danhubase" class="control-label" style="transform: translate(0,8px)">本期底数</label>
332
+ <input id="danhubase" type="number" class="input_search " style="width: 60% !important;"
333
+ v-model="danhu.f_new_tablebase" @keyup.enter.stop="downAndHand"
334
+ @blur="tableBaseBlur"
335
+ placeholder='本期底数'/>
336
+ </div>
337
+ </div>
338
+ </div>
339
+ <upload :blodid="row.f_userinfo_id" v-if="config.showupload" isremark="true" fusetype="物联网表收费"></upload>
340
+ </article>
341
+ <footer slot="modal-footer">
342
+ </footer>
343
+ </modal>
344
+ <modal :show.sync="imgshow" v-ref:modal backdrop="true" coverstyle="modalContentRight">
345
+ <header slot="modal-header" class="modal-header">
346
+ 抄表图像识别照片
347
+ </header>
348
+ <article slot="modal-body" class="modal-body">
349
+ <div class="from-group">
350
+ <img-self :src="imgfilename" :width="750" :height="750"></img-self>
351
+ </div>
352
+ </article>
353
+ <footer slot="modal-footer" class="modal-footer">
354
+ <button type="button" class="btn btn-success" @click='imgclose'>关闭</button>
355
+ </footer>
356
+ </modal>
357
+ <modal :show.sync="imgListShow" v-ref:modal backdrop="true" coverstyle="modalContentRight">
358
+ <header slot="modal-header" class="modal-header">
359
+ 抄表图像识别照片
360
+ </header>
361
+ <article slot="modal-body" class="modal-body">
362
+ <div class="from-group" v-for="img in images">
363
+ <img-self :src="`/singlepage/rs/image/file/` + img" :width="250" :height="250"></img-self>
364
+ </div>
365
+ </article>
366
+ <footer slot="modal-footer" class="modal-footer">
367
+ <button type="button" class="btn btn-success" @click='imgListClose'>关闭</button>
368
+ </footer>
369
+ </modal>
370
+ </div>
371
+ </template>
372
+ <script>
373
+ import {PagedList, HttpResetClass} from 'vue-client'
374
+ import Vue from 'vue'
375
+
376
+ let readyGen = async function (self) {
377
+ self.getfield = self.config.excelHeaders
378
+ self.sumsmodel = self.$refs.paged.$refs.grid.model.sums
379
+ self.reflash()
380
+ }
381
+
382
+ export default {
383
+ title: '物联网表抄表',
384
+ data () {
385
+ return {
386
+ priceModel: false,
387
+ initres: {
388
+ org: [this.$login.f.orgid],
389
+ dep: [],
390
+ user: []
391
+ },
392
+ sumsmodel: [],
393
+ orgCondtionStr: '',
394
+ deletestate: false,
395
+ criteriaShow: false,
396
+ imgshow: false,
397
+ imgListShow: false,
398
+ images: [],
399
+ imgfilename: '',
400
+ model: new PagedList('api/af-revenue/sql/sale_getWebHand', 50, {orderitem: this.orderDefault ? '"' + this.orderDefault + ' "' : `'f_hand_date desc'`}, {
401
+ f_oughtamount: 0
402
+ }),
403
+ config: {
404
+ // 导出列要和查询列相同
405
+ excelHeaders: {
406
+ 'f_user_id': '表编号',
407
+ 'f_meternumber': '表号',
408
+ 'f_inputtor': '抄表员',
409
+ 'f_last_input_date': '上次抄表时间',
410
+ 'f_input_date': '抄表日期',
411
+ 'f_userinfo_code': '客户编号',
412
+ 'f_address': '客户地址',
413
+ 'f_residential_area': '小区名称',
414
+ 'f_user_name': '客户姓名',
415
+ 'f_last_tablebase': '上期底数',
416
+ 'f_tablebase': '本期指数',
417
+ 'f_oughtamount': '应交气量',
418
+ 'f_input_person': '录入人员',
419
+ 'f_meter_classify': '气表分类',
420
+ 'f_meter_style': '气表型号',
421
+ 'f_user_phone': '客户电话',
422
+ 'f_comments': '备注'
423
+ },
424
+ examine: true,
425
+ customCal: false
426
+ },
427
+ meter_state: false, // 是否显示计划下发按钮
428
+ downModel: {
429
+ downDate: Vue.$login.toStandardTimeString(),
430
+ downWay: 'downWithUserfiles',
431
+ downInputtor: []
432
+ },
433
+ inputtorModel: {
434
+ inputtor: [],
435
+ reason: ''
436
+ },
437
+ f_current_usage: '',
438
+ auditState: [{label: '全部', value: ''}, {label: '未抄表', value: '未抄表'}, {
439
+ label: '待审核',
440
+ value: '待审核'
441
+ }, {label: '已抄表', value: '已抄表'}],
442
+
443
+ plans: [], // 记录当前行是否被勾选
444
+ all: false, // 是否全选
445
+ show: false, // 下发日期模态框显示
446
+ unhandplan: [], // 之前是否有未抄表记录
447
+ downConfirm: false, // 下发若有未抄记录,确认框
448
+ uploadshow: false,
449
+ // 小区
450
+ residentialArea: [],
451
+
452
+ // downDate: this.$login.toStandardYearMonth().replace("-", ""),
453
+ msg: '',
454
+ condition: '',
455
+ orderDefault: 'f_hand_date',
456
+ orderFields: {
457
+ f_userinfo_id: 'no'
458
+ },
459
+ getfield: {},
460
+ outlet: '',
461
+ filiale: '',
462
+ condition2: '',
463
+ area: [],
464
+ inputtouPerson: [],
465
+ meters: [{label: '全部', value: ''}, {label: '机表', value: '机表'}, {label: '物联网表', value: '物联网表'}],
466
+ resultstate: this.$appdata.getParam('抄表结果状态'),
467
+ meterstates: [{label: '全部', value: ''}, {label: '未抄表', value: '未抄表'}, {label: '已抄表', value: '已抄表'}],
468
+ usertypes: this.$appdata.getParam('客户类型') ? [{
469
+ label: '全部',
470
+ value: ''
471
+ }, ...this.$appdata.getParam('客户类型')] : [],
472
+ splitdata: '',
473
+ f_filialeid: this.$login.f.orgid,
474
+ meterbooks: [],
475
+ upshow: false,
476
+ inputid: 0,
477
+ examineshow: false,
478
+ examinerow: null,
479
+ showfiles: false,
480
+ uploadText: '抄表',
481
+ examinetype: false,
482
+ danhu: {
483
+ show: false,
484
+ f_userinfo_code: '',
485
+ f_new_tablebase: '',
486
+ info: {}
487
+ },
488
+ showerr: false,
489
+ err: '',
490
+ // 请求对象(批量导入,查询进度使用)
491
+ HttpReset: new HttpResetClass(),
492
+ row: null,
493
+ // 应抄底数
494
+ should_base: 0,
495
+ // 计算公式
496
+ designFormulas: null
497
+ }
498
+ },
499
+ ready () {
500
+ this.getaddress()
501
+ readyGen(this)
502
+ },
503
+ mounted () {
504
+ console.log(this.inputid)
505
+ document.getElementById(this.inputid).focus()
506
+ },
507
+ methods: {
508
+ tableBaseBlur () {
509
+ if (this.danhu.f_new_tablebase) {
510
+ this.f_current_usage = (this.danhu.f_new_tablebase - 0) - (this.danhu.info.f_last_tablebase - 0)
511
+ }
512
+ },
513
+ handImgListShow (images) {
514
+ this.imgListShow = true
515
+ this.images = JSON.parse(images)
516
+ },
517
+ imgListClose () {
518
+ this.imgListShow = false
519
+ },
520
+ imgclose () {
521
+ this.imgshow = false
522
+ },
523
+ getFileName(fullPath) {
524
+ if (!fullPath) return '';
525
+ let url = fullPath.split('?')[0]; // 去除?后参数
526
+ return url.substring(url.lastIndexOf('/') + 1); // 截取最后一段
527
+ },
528
+ imgShow (val) {
529
+ this.imgfilename = `/rs/image/file/` + val
530
+ this.imgshow = true
531
+ },
532
+ async danhuCodeSearch () {
533
+ this.danhu.f_userinfo_code = this.danhu.f_userinfo_code.replace(/(^\s*)|(\s*$)/g, '')
534
+ await this.$resetpost('api/af-revenue/sql/sale_getWebHandDanHu', {
535
+ data: {
536
+ f_userinfo_code: this.danhu.f_userinfo_code,
537
+ f_orgid: this.f_filialeid
538
+ }
539
+ },
540
+ {resolveMsg: null, rejectMsg: '查询用户信息失败,网络错误'}).then(res => {
541
+ if (res.data.length !== 1) {
542
+ this.$showAlert(res.data.length === 0 ? '没有查询到用户' : '查询到多条用户信息', 'warning', 3000)
543
+ return
544
+ }
545
+ if (res.data[0].f_meter_state === '未抄表') {
546
+ this.$showAlert('该用户有未抄表记录', 'warning', 3000)
547
+ return
548
+ }
549
+ this.danhu.info = res.data[0]
550
+ document.getElementById('danhubase').focus()
551
+ })
552
+ },
553
+ calculationBase (row) {
554
+ let oughtamount = null
555
+ if (row.f_tablebase) {
556
+ if (row.f_share_gas) {
557
+ oughtamount = (row.f_tablebase - 0 - (row.f_last_tablebase - 0)).toFixed(4) + (row.f_share_gas > 0 ? '+' : '') + row.f_share_gas.toFixed(3)
558
+ } else {
559
+ if (row.f_capacity && row.f_capacity > 0 && row.f_tablebase < row.f_last_tablebase) {
560
+ oughtamount = (row.f_tablebase - 0 + (row.f_capacity - row.f_last_tablebase)).toFixed(3)
561
+ } else {
562
+ oughtamount = (row.f_tablebase - 0 - (row.f_last_tablebase - 0)).toFixed(3)
563
+ }
564
+ }
565
+ } else {
566
+ oughtamount = 0
567
+ }
568
+ row.f_oughtamount = oughtamount
569
+ return oughtamount
570
+ },
571
+ cancelHand (row) {
572
+ if (this.config.examine) {
573
+ let handdate = new Date(row.f_hand_date)
574
+ let ima = new Date()
575
+ if (handdate.getMonth() == ima.getMonth()) {
576
+ this.cancelHand3(row)
577
+ } else {
578
+ if (!this.$login.r.find(value => value == '抄表隔月冲正')) {
579
+ this.$showMessage('当前登录用户没有【抄表隔月冲正】权限, 请联系管理员!')
580
+ } else {
581
+ this.cancelHand3(row)
582
+ }
583
+ }
584
+ } else {
585
+ this.cancelHand3(row)
586
+ }
587
+ },
588
+ cancelAuditHand (row) {
589
+ let param = {
590
+ f_hand_id: row.id,
591
+ operInfo: {
592
+ f_operator: this.$login.f.name,
593
+ f_operatorid: this.$login.f.id,
594
+ f_orgid: this.$login.f.orgid,
595
+ f_orgname: this.$login.f.orgs,
596
+ f_depid: this.$login.f.depids,
597
+ f_depname: this.$login.f.deps
598
+ }
599
+ }
600
+ let url = 'api/af-revenue/logic/sale_webHandCancel'
601
+ this.$resetpost(url, {data: param}, {warnMsg: '确定对这条记录进行撤销吗?'}).then(() => {
602
+ this.search()
603
+ this.close()
604
+ })
605
+ },
606
+ // 单户抄表
607
+ async downAndHand () {
608
+ if (!this.danhu.info.f_userinfo_code || this.danhu.info.f_userinfo_code === '') {
609
+ this.$showAlert(`请先查询用户信息`, 'warning', 2000)
610
+ return
611
+ }
612
+ if (this.danhu.f_new_tablebase < 0) {
613
+ this.$showAlert(`底数不能小于0,请注意!`, 'warning', 2000)
614
+ return
615
+ } else if (this.danhu.f_new_tablebase.toString().split('.').length > 1 && this.danhu.f_new_tablebase.toString().split('.')[1].length > 3) {
616
+ this.$showAlert(`底数最多只能输入小数点后3位,请注意!`, 'warning', 2000)
617
+ return
618
+ } else if (this.danhu.f_new_tablebase < this.danhu.info.f_tablebase && !this.danhu.info.f_capacity) {
619
+ this.$showAlert(`本期表底数不能低于上期表底数`, 'warning', 2000)
620
+ return
621
+ }
622
+ this.danhu.info.f_hand_date = this.$login.toStandardTimeString()
623
+ this.danhu.info.f_meter_source = '单户抄表'
624
+ this.danhu.info.f_operatorid = this.$login.f.id
625
+ this.danhu.info.f_operator = this.$login.f.name
626
+ this.danhu.info.f_inputtor = this.$login.f.name
627
+ this.danhu.info.f_orgid = this.$login.f.orgid
628
+ this.danhu.info.f_orgname = this.$login.f.orgs
629
+ this.danhu.info.f_depid = this.$login.f.depids
630
+ this.danhu.info.f_depname = this.$login.f.deps
631
+ this.danhu.info.f_input_person = this.$login.f.name
632
+ this.danhu.info.f_new_tablebase = this.danhu.f_new_tablebase
633
+ this.$resetpost('api/af-revenue/logic/sale_webHandEnter', {data: this.danhu.info}, {
634
+ resolveMsg: null,
635
+ rejectMsg: null
636
+ }).then((res) => {
637
+ this.$showAlert(`单户抄表成功!`, 'success', 2000)
638
+ this.danhuShow()
639
+ }).catch((error) => {
640
+ this.danhu.show = false
641
+ this.$showAlert(`抄表失败,请注意查看,失败原因:` + JSON.toString(error), 'danger', 2000)
642
+ })
643
+ },
644
+ danhuShow () {
645
+ this.model.params.startDate = this.$refs.paged.$refs.criteria.model.startDate
646
+ this.model.params.endDate = this.$refs.paged.$refs.criteria.model.endDate
647
+ this.downModel.downDate = this.$login.toStandardTimeString()
648
+ this.danhu = {
649
+ show: true,
650
+ f_userinfo_code: '',
651
+ f_new_tablebase: '',
652
+ info: {}
653
+ }
654
+ this.f_current_usage = ''
655
+ setTimeout(() => {
656
+ document.getElementById('danhucode').focus()
657
+ this.$refs.paged.$refs.criteria.search()
658
+ }, 100)
659
+ },
660
+ paycodefocus () {
661
+ this.$nextTick(() => {
662
+ this.$els.paycode.focus()
663
+ })
664
+ },
665
+ getRes (obj) {
666
+ this.orgCondtionStr = obj
667
+ },
668
+ async getaddress () {
669
+ console.log('开始获取小区')
670
+ let HttpReset = new HttpResetClass()
671
+ var data = await HttpReset.load('POST', 'api/af-revenue/sql/manage_getarealist', {
672
+ data: {
673
+ condition: `1=1 and s.f_filialeid = '${this.$login.f.orgid}'`
674
+ }
675
+ }, {resolveMsg: null, rejectMsg: '获取小区失败!'})
676
+ console.log('小区', data)
677
+ let house = []
678
+ house.push()
679
+ for (let row of data.data) {
680
+ console.log('开始保存小区')
681
+ house.push({label: row.f_residential_area, value: row.f_residential_area})
682
+ }
683
+ this.residentialArea = house
684
+ },
685
+ hidden () {
686
+ this.criteriaShow = !this.criteriaShow
687
+ },
688
+ clear () {
689
+ Object.keys(this.$refs.paged.$refs.criteria.model).forEach((key) => {
690
+ this.$refs.paged.$refs.criteria.model[key] = []
691
+ })
692
+ },
693
+ search () {
694
+ // 查询前清空选择项
695
+ this.plans = []
696
+ this.$refs.paged.$refs.criteria.search()
697
+ },
698
+ selfSearch (args) {
699
+ this.meter_state = args.condition.includes('未下发')
700
+ this.inputtor_change = args.condition.includes('未抄表')
701
+ console.log('=====抄表1====', args.condition.includes('未抄表'))
702
+ console.log('=====抄表1====', this.deletestate)
703
+ if (args.condition.includes('未抄表')) {
704
+ this.deletestate = true
705
+ } else {
706
+ this.deletestate = false
707
+ }
708
+ console.log('=====抄表1====', this.deletestate)
709
+ if (!this.orgCondtionStr) {
710
+ args.condition = `${args.condition}` + ' and f_orgid = ' + this.$login.f.orgid
711
+ } else {
712
+ args.condition = `${args.condition}` + this.orgCondtionStr
713
+ }
714
+
715
+ // 抄表员查询条件
716
+ this.inputtouPerson = this.$refs.paged.$refs.criteria.model.f_inputtor
717
+ if (this.inputtouPerson.length !== 0) {
718
+ let str = JSON.stringify(this.inputtouPerson)
719
+ str = str.replace(/"/g, `'`)
720
+ str = str.replace(/\[/g, ``)
721
+ str = str.replace(/\]/g, ``)
722
+ console.log('=====抄表员model22222222222绑定====', str)
723
+ // 查询多个抄表员时条件
724
+ args.condition += ` and f_inputtor in ( ${str} )`
725
+ }
726
+ // 小区查询条件
727
+ this.area = this.$refs.paged.$refs.criteria.model.f_residential_area
728
+ console.log('=====小区model绑定====', this.area)
729
+ if (this.area.length !== 0) {
730
+ let str = JSON.stringify(this.area)
731
+ str = str.replace(/"/g, `'`)
732
+ str = str.replace(/\[/g, ``)
733
+ str = str.replace(/\]/g, ``)
734
+ console.log('=====小区model22222222222绑定====', str)
735
+ // 查询多个小区时条件
736
+ args.condition += ` and f_residential_area in ( ${str} )`
737
+ }
738
+
739
+ if (args.model.f_meter_brand && args.model.f_meter_brand.length > 0) {
740
+ if (args.model.f_meter_brand[0].f_meter_brand) {
741
+ args.condition = `${args.condition} and f_meter_brand = '${args.model.f_meter_brand[0].f_meter_brand}'`
742
+ }
743
+ }
744
+ this.model.params.startDate = this.$refs.paged.$refs.criteria.model.startDate
745
+ this.model.params.endDate = this.$refs.paged.$refs.criteria.model.endDate
746
+ this.condition2 = args.condition
747
+ console.log('selfsearch..', args.condition, this.model)
748
+ this.model.search(args.condition, this.model)
749
+ },
750
+ reflash () {
751
+ this.$refs.paged.$refs.criteria.model.f_orgid = `${Vue.$login.f.orgid}`
752
+ this.$refs.paged.$refs.criteria.model.startDate = this.$login.toStartAndEndDateString()[0]
753
+ this.$refs.paged.$refs.criteria.model.endDate = this.$login.toStartAndEndDateString()[1]
754
+ this.search()
755
+ },
756
+ beforenter (index, row) {
757
+ this.inputid = index + 1
758
+ // 限制本次抄表不能低于上次
759
+ if (row.f_tablebase) {
760
+ if (row.f_tablebase < 0) {
761
+ row.state = '失败'
762
+ Vue.set(row, 'error', '底数不能小于0')
763
+ this.speckText('底数不能小于0,请注意!')
764
+ } else if (this.danhu.f_new_tablebase.toString().split('.').length > 1 && this.danhu.f_new_tablebase.toString().split('.')[1].length > 3) {
765
+ row.state = '失败'
766
+ Vue.set(row, 'error', '底数最多只能输入小数点后3位')
767
+ this.speckText('底数最多只能输入小数点后3位,请注意!')
768
+ } else if (row.f_tablebase < row.f_last_tablebase && !row.f_capacity) {
769
+ row.state = '失败'
770
+ Vue.set(row, 'error', '本期表底数不能低于上期表底数')
771
+ this.speckText('本期表底数不能低于上期表底数,请注意!')
772
+ } else {
773
+ if (row.f_tablebase < row.f_last_tablebase) {
774
+ this.$showMessage('本次抄表已超越最大量程, 请熟知!')
775
+ }
776
+ // 抄表结果状态没选默认给正常
777
+ row.f_result_state = row.f_result_state ? row.f_result_state : '正常'
778
+ this.enter(index, row)
779
+ }
780
+ }
781
+ },
782
+ enter (index, row) {
783
+ console.log('录入数据。..', row)
784
+ let f_input_date = Vue.$login.toStandardTimeString()
785
+ let handplan = {
786
+ id: row.id,
787
+ f_oughtamount: row.f_oughtamount,
788
+ f_tablebase: row.f_tablebase,
789
+ f_hand_date: f_input_date,
790
+ f_input_date: f_input_date,
791
+ f_input_person: Vue.$login.f.name,
792
+ f_meter_state: '已抄表',
793
+ f_meter_source: '手动录入',
794
+ f_operator: Vue.$login.f.name,
795
+ f_operatorid: Vue.$login.f.id,
796
+ f_orgid: Vue.$login.f.orgid,
797
+ f_orgname: Vue.$login.f.orgs,
798
+ f_depid: Vue.$login.f.depids,
799
+ f_depname: Vue.$login.f.deps
800
+ }
801
+ console.log('抄表负数。。0', handplan)
802
+ this.$resetpost('api/af-revenue/entity/save/t_web_hand_plan_record', handplan, {
803
+ resolveMsg: null,
804
+ rejectMsg: '抄表数据保存出错!!!'
805
+ }).then((res) => {
806
+ row.f_meter_state = '已抄表'
807
+ row.f_input_date = f_input_date
808
+ let sql = `update t_userfiles set f_web_meter_base = ${row.f_tablebase},version = version + 1 where f_userfiles_id = '${row.f_userfiles_id}' `
809
+ this.$resetpost('api/af-revenue/logic/runSQL', { sql: sql })
810
+ }).catch((error) => {
811
+ row.state = '失败'
812
+ Vue.set(row, 'error', JSON.stringify(error))
813
+ this.speckText('抄表录入出错,请注意!')
814
+ })
815
+ },
816
+ clearError (row) {
817
+ if (row.f_tablebase === 0) {
818
+ row.f_tablebase = ''
819
+ }
820
+ Vue.set(row, 'error', null)
821
+ },
822
+ async speckText (str) {
823
+ var url = 'http://tts.baidu.com/text2audio?lan=zh&ie=UTF-8&spd=6&text=' + encodeURI(str)
824
+ await new Audio(url).play()
825
+ this.err = str
826
+ this.showerr = true
827
+ this.paycodefocus()
828
+ },
829
+ closeerr () {
830
+ this.showerr = false
831
+ },
832
+ // 删除这条计划
833
+ delectHand (row) {
834
+ let sql = `update t_web_hand_plan_record set f_hand_state = '无效' where id = '${row.id}' `
835
+ this.$resetpost('api/af-revenue/logic/runSQL', { sql: sql }).then((res) => {
836
+ this.search()
837
+ })
838
+ },
839
+ cancelHand3 (row) {
840
+ // 抄表加入权限
841
+ if (!this.$login.r.find(value => value == '机表抄表冲正')) {
842
+ this.$showMessage('当前登录用户没有冲正权限, 请联系管理员!')
843
+ return
844
+ }
845
+ // console.log('抄表冲正。、。。、', row)
846
+ let param = {
847
+ f_hand_id: row.id,
848
+ operInfo: {
849
+ f_operator: this.$login.f.name,
850
+ f_operatorid: this.$login.f.id,
851
+ f_orgid: this.$login.f.orgid,
852
+ f_orgname: this.$login.f.orgs,
853
+ f_depid: this.$login.f.depids,
854
+ f_depname: this.$login.f.deps
855
+ }
856
+ }
857
+ let url = 'api/af-revenue/logic/sale_commonEnterCancel'
858
+ this.$resetpost(url, {data: param}, {warnMsg: '确定对这条记录进行撤销吗?'}).then(() => {
859
+ this.search()
860
+ this.close()
861
+ })
862
+ },
863
+ // 关闭下发计划得弹出框
864
+ close () {
865
+ this.show = false
866
+ this.inputtor_show = false
867
+ this.downConfirm = false
868
+ this.examineshow = false
869
+ this.examinetype = false
870
+ this.detailsShow = false
871
+ this.priceModel = false
872
+ // 初始化模态框数据
873
+ this.initModal()
874
+ if (this.uploadshow) {
875
+ this.uploadshow = false
876
+ // 讲选的文件清空
877
+ this.$refs.file.$el.querySelector('input').value = ''
878
+ }
879
+ },
880
+ initModal () {
881
+ this.downModel = {
882
+ downDate: Vue.$login.toStandardDateString(),
883
+ downWay: 'downWithUserfiles',
884
+ downInputtor: []
885
+ }
886
+ this.inputtorModel = {
887
+ inputtor: [],
888
+ reason: ''
889
+ }
890
+ },
891
+ // 判断当前登陆人是不是子公司的人员
892
+ isHead () {
893
+ return this.$login.f.parent.parent.name.includes('统一资源管理')
894
+ },
895
+ sort (field, rule) {
896
+ // 将所有排序方式设为不排序,实现相互排斥
897
+ for (let key in this.orderFields) {
898
+ if (key === field) {
899
+ this.orderFields[key] = rule
900
+ } else {
901
+ this.orderFields[key] = 'no'
902
+ }
903
+ }
904
+ // 如果新规则不排序,还原为默认排序
905
+ if (rule === 'no') {
906
+ this.model.paramSource.orderitem = `'${this.orderDefault}'`
907
+ } else {
908
+ this.model.paramSource.orderitem = `'${field} ${rule}'`
909
+ }
910
+ this.search()
911
+ }
912
+ },
913
+ watch: {
914
+ 'detailsShow' (val) {
915
+ if (!val) {
916
+ this.should_base = 0
917
+ this.designFormulas = null
918
+ }
919
+ }
920
+ },
921
+ computed: {
922
+ danhutitle () {
923
+ return '单户抄表 当前计划年月:' + this.downModel.downDate
924
+ },
925
+ getCondition () {
926
+ return {
927
+ startDate: this.$refs.paged.$refs.criteria.model.startDate,
928
+ endDate: this.$refs.paged.$refs.criteria.model.endDate,
929
+ orderitem: this.orderDefault ? this.orderDefault : 'id',
930
+ condition: this.condition2
931
+ }
932
+ },
933
+ inputtores () {
934
+ // 获取抄表员
935
+ console.log('获取抄表员', this.$login.f)
936
+ let rs = []
937
+ if (this.$login.f.f_gasman.length > 0) {
938
+ for (let i = 0; i < this.$login.f.f_gasman.length; i++) {
939
+ let temp = {
940
+ label: this.$login.f.f_gasman[i].name,
941
+ value: this.$login.f.f_gasman[i].name
942
+ }
943
+ rs.push(temp)
944
+ }
945
+ }
946
+ this.inputtores2 = rs
947
+ return [...rs]
948
+ },
949
+ // 界面细节权限
950
+ jurisdiction () {
951
+ console.log('抄表界面细节', this.$login.r)
952
+ return this.$login.r ? this.$login.r : []
953
+ }
954
+ },
955
+ events: {
956
+ dblclick: function (row, index) {
957
+ this.row = row
958
+ this.detailsShow = true
959
+ },
960
+ // 删除Resid数组元素
961
+ 'delResid' (val) {
962
+ this.resid.$remove({id: val, f_biobid: ''})
963
+ },
964
+ // 增加Resid数组元素
965
+ 'resid' (val) {
966
+ console.log('-=', val)
967
+ this.resid.push({id: val, f_biobid: ''})
968
+ }
969
+ }
970
+ }
971
+ </script>
972
+ <style lang="less">
973
+ #handManager {
974
+ display: flex;
975
+ justify-content: space-around;
976
+ align-items: center;
977
+
978
+ .btn {
979
+ margin: 0px;
980
+ }
981
+
982
+ .hand-loading {
983
+ border: 3px solid #ccc;
984
+ border-right-color: #337ab7;
985
+ border-radius: 50%;
986
+ animation: spin 0.6s linear;
987
+ position: absolute;
988
+ animation-iteration-count: infinite;
989
+ top: 0;
990
+ right: 50%;
991
+ z-index: 2;
992
+ display: block;
993
+ width: 28px;
994
+ height: 28px;
995
+ line-height: 28px;
996
+ text-align: center;
997
+ pointer-events: none;
998
+ }
999
+
1000
+ @keyframes spin {
1001
+ 100% {
1002
+ transform: rotate(360deg);
1003
+ }
1004
+ }
1005
+
1006
+ .detail-panel {
1007
+ text-align: center;
1008
+ color: #31708f;
1009
+ background-color: #e8f1f9;
1010
+ border-color: #F2F6FA;
1011
+ }
1012
+ }
1013
+
1014
+ #hand_manager_grid {
1015
+ thead {
1016
+ position: relative;
1017
+ z-index: 2;
1018
+ }
1019
+ }
1020
+
1021
+ #machineHandManager {
1022
+ .color-red {
1023
+ color: red;
1024
+ }
1025
+ }
1026
+ </style>