sale-client 4.3.83 → 4.3.85

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 (27) hide show
  1. package/.gradle/5.2.1/executionHistory/executionHistory.bin +0 -0
  2. package/.gradle/5.2.1/executionHistory/executionHistory.lock +0 -0
  3. package/.gradle/5.2.1/fileContent/fileContent.lock +0 -0
  4. package/.gradle/5.2.1/fileHashes/fileHashes.lock +0 -0
  5. package/.gradle/8.10/checksums/checksums.lock +0 -0
  6. package/.gradle/8.10/executionHistory/executionHistory.bin +0 -0
  7. package/.gradle/8.10/executionHistory/executionHistory.lock +0 -0
  8. package/.gradle/8.10/fileHashes/fileHashes.bin +0 -0
  9. package/.gradle/8.10/fileHashes/fileHashes.lock +0 -0
  10. package/.gradle/8.10/gc.properties +0 -0
  11. package/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  12. package/.gradle/buildOutputCleanup/cache.properties +1 -1
  13. package/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
  14. package/.gradle/file-system.probe +0 -0
  15. package/package.json +1 -1
  16. package/src/expandcss.less +569 -0
  17. package/src/filiale/beifangshiye/specificInformation.vue +1 -1
  18. package/src/filiale/meihekou/CorrectBill.vue +93 -0
  19. package/src/filiale/meihekou/RecordCancel.vue +1 -1
  20. package/src/filiale/meihekou/batch/batchEditFiles.vue +104 -4
  21. package/src/filiale/meihekou/batch/batchEditManage.vue +15 -2
  22. package/src/filiale/meihekou/batch/batchUserList.vue +81 -47
  23. package/src/filiale/meihekou/sale.js +2 -0
  24. package/.gradle/9.3.0/checksums/checksums.lock +0 -0
  25. package/.gradle/9.3.0/fileHashes/fileHashes.lock +0 -0
  26. /package/.gradle/{9.3.0 → 8.10/dependencies-accessors}/gc.properties +0 -0
  27. /package/.gradle/{9.3.0 → 8.10}/fileChanges/last-build.bin +0 -0
File without changes
@@ -1,2 +1,2 @@
1
- #Wed May 13 15:19:48 CST 2026
1
+ #Wed Mar 18 10:18:57 CST 2026
2
2
  gradle.version=5.2.1
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sale-client",
3
- "version": "4.3.83",
3
+ "version": "4.3.85",
4
4
  "description": "收费模块前台组件",
5
5
  "main": "src/index.js",
6
6
  "scripts": {
@@ -0,0 +1,569 @@
1
+ @import "./bootstrap/less/variables.less";
2
+
3
+ @form-text-fout-size: @font-size-base;//引用bootstrap的字体大小
4
+ @form-text-padding: 10px;//右padding
5
+ /**
6
+ 文本表单flex布局实现固定label
7
+ */
8
+ .form-fix-width{
9
+ display: -webkit-box;
10
+ display: -webkit-flex;
11
+ display: -ms-flexbox;
12
+ display:flex;
13
+ }
14
+ .form-fix-width>:first-child{
15
+ width: @form-text-padding+@form-text-fout-size*5;
16
+ -webkit-box-flex:none;
17
+ -webkit-flex:none;
18
+ -ms-flexbox-flex:none;
19
+ flex:none;
20
+ }
21
+ .form-fix-width>:last-child{
22
+ flex:1;
23
+ -webkit-box-flex:1;
24
+ -webkit-flex:1;
25
+ -ms-flexbox-flex:1;
26
+ }
27
+ /**
28
+ 固定checkbox的一些属性 后续继续扩增
29
+ */
30
+ .checkbox-fix-width {
31
+ width: @form-text-fout-size*4+@form-text-padding+20px;
32
+ text-align: left;
33
+ margin-left: 0px !important;
34
+ }
35
+
36
+ #android-app {
37
+ font-size: 16px;
38
+ }
39
+
40
+ /* 解决chrome最小字体为12px问题 */
41
+ .chrome_adjust {
42
+ font-size: 10px;
43
+ -webkit-transform: scale(0.85);
44
+ -o-transform: scale(1); //针对能识别-webkit的opera browser设置
45
+ }
46
+
47
+ /* 表单内输入框 */
48
+ .form-input-group-large {
49
+ display: -webkit-box;
50
+ display: -webkit-flex;
51
+ display: -ms-flexbox;
52
+ display: flex;
53
+ .control-label {
54
+ width: 100px;
55
+ line-height: @input-height-base;
56
+ text-align: right;
57
+ + * {
58
+ -webkit-box-flex:1;
59
+ -webkit-flex:1;
60
+ -ms-flexbox-flex:1;
61
+ flex: 1;
62
+ width: 100px; // 随意给的宽度,将有flex重新计算
63
+ box-sizing: border-box;
64
+ vertical-align:middle;
65
+ }
66
+ }
67
+ }
68
+ .form-input-group {
69
+ display: -webkit-box;
70
+ display: -webkit-flex;
71
+ display: -ms-flexbox;
72
+ display: flex;
73
+ .control-label {
74
+ // 居中对齐
75
+ line-height: @input-height-base;
76
+ width: 70px;
77
+ // padding-top: 6px;
78
+ text-align: right;
79
+ vertical-align: middle;
80
+ + * {
81
+ -webkit-box-flex:1;
82
+ -webkit-flex:1;
83
+ -ms-flexbox-flex:1;
84
+ flex: 1;
85
+ width: 100px; // 随意给的宽度,将有flex重新计算
86
+ box-sizing: border-box;
87
+ vertical-align:middle;
88
+ }
89
+ }
90
+ }
91
+ .form-input-group-small {
92
+ display: -webkit-box;
93
+ display: -webkit-flex;
94
+ display: -ms-flexbox;
95
+ display: flex;
96
+ label {
97
+ width: 50px;
98
+ line-height: @input-height-base;
99
+ text-align: right;
100
+ + * {
101
+ -webkit-box-flex:1;
102
+ -webkit-flex:1;
103
+ -ms-flexbox-flex:1;
104
+ flex: 1;
105
+ width: 100px; // 随意给的宽度,将有flex重新计算
106
+ box-sizing: border-box;
107
+ vertical-align:middle;
108
+ }
109
+ }
110
+ }
111
+ .bg-white {
112
+ background-color: white;
113
+ }
114
+ .mgb-5 {
115
+ margin-bottom: 5px;
116
+ }
117
+ .pdl-12 {
118
+ padding-left: 12px;
119
+ }
120
+ // 字体加粗
121
+ .fwb {
122
+ font-weight: bold;
123
+ }
124
+ // 浮动右对齐
125
+ .fr {
126
+ float: right;
127
+ }
128
+ .pl-12 {
129
+ padding-left: 12px;
130
+ }
131
+ .p-10 {
132
+ padding: 10px;
133
+ }
134
+ .pt-8 {
135
+ padding-top: 8px;
136
+ }
137
+ // 下拉选择框占据剩余全部空间
138
+ .select-overspread {
139
+ .form-group {
140
+ // margin: 0px 5px 10px 0px;
141
+ .form-control {
142
+ margin-right: 0px;
143
+ }
144
+ }
145
+ .btn-group, .btn-group-vertical {
146
+ // width: 100%;
147
+ // padding-right: 5px;
148
+ button {
149
+ width: 100%;
150
+ display: flex;
151
+ justify-content: space-between;
152
+ align-items: center;
153
+ }
154
+ }
155
+ .dropdown-menu {
156
+ min-width: 100%
157
+ }
158
+ }
159
+ .app-bg {
160
+ background: #F5F5F5;
161
+ }
162
+ .app-input {
163
+ background: #FFF;
164
+ border-bottom: 1px solid #ccc;
165
+ }
166
+ .app-input input, .app-input label {
167
+ padding: 8px 10px;
168
+ border: none;
169
+ outline: none;
170
+ margin: 0px;
171
+ }
172
+ .app-textarea {
173
+ display: block;
174
+ padding: 10px 15px;
175
+ border: 0;
176
+ resize: none;
177
+ width: 100%;
178
+ color: inherit;
179
+ font-size: 1em;
180
+ line-height: inherit;
181
+ outline: 0;
182
+ }
183
+ .app-cells {
184
+ height: auto;
185
+ background-color: #FFFFFF;
186
+ font-size: 1.2em;
187
+ overflow: hidden;
188
+ position: relative;
189
+ }
190
+ .app-cells label {
191
+ padding: 10px;
192
+ margin: 0px;
193
+ color: #999999;
194
+ font-weight: normal;
195
+ }
196
+ .app-cells * + * {
197
+ border-top: 1px solid #D5D5D6;
198
+ }
199
+ .app-btn {
200
+ display: flex;
201
+ width: 100%;
202
+ }
203
+ .app-btn button{
204
+ flex: 1;
205
+ border-radius: 17px;
206
+ margin: 10px;
207
+ }
208
+ .app-btn button:focus, .app-btn button::selection {
209
+ outline: none;
210
+ }
211
+ .app-list {
212
+ margin-top: 8px;
213
+ background: #FFF;
214
+ }
215
+ .app-list div {
216
+ padding: 6px 10px;
217
+ }
218
+ .app-list div:first-child{
219
+ border-bottom: 1px solid #ccc;
220
+ }
221
+ .app-input .datepicker-input[readonly] {
222
+ border: none;
223
+ background: none;
224
+ }
225
+ div[contenteditable=true]{
226
+ height: 80px;
227
+ width: 100%;
228
+ outline: none;
229
+ padding: 8px;
230
+ overflow: scroll;
231
+ }
232
+
233
+ .flex-between {
234
+ display: flex;
235
+ justify-content: space-between;
236
+ align-items: center;
237
+ }
238
+ .flex-between span {
239
+ padding-right: 10px;
240
+ }
241
+ .flex-full {
242
+ flex: 1;
243
+ }
244
+ /* app卡片样式 */
245
+ .app-preview {
246
+ position: relative;
247
+ background-color: #FFF;
248
+ height: auto;
249
+ }
250
+ .app-preview > .head > * {
251
+ padding: 0px;
252
+ margin: 0px;
253
+ }
254
+ .app-preview > .head {
255
+ display: flex;
256
+ justify-content: space-between;
257
+ padding: 10px 15px;
258
+ line-height: 2.5em;
259
+ border-bottom: 1px solid #D5D5D6;
260
+ }
261
+ .app-preview-btn-default {
262
+ color: #999999;
263
+ }
264
+ .app-preview-btn-success {
265
+ color: #3CC51F;
266
+ }
267
+ .app-preview > .body {
268
+ padding: 10px 15px;
269
+ border-bottom: 1px solid #D5D5D6;
270
+
271
+ }
272
+ .app-preview > .body > div > label {
273
+ text-align: justify;
274
+ text-align-last: justify;
275
+ min-width: 70px;
276
+ }
277
+ .app-preview > .foot {
278
+ display: flex;
279
+ height: 50px;
280
+ }
281
+ .app-preview > .foot > * {
282
+ flex: 1;
283
+ display: block;
284
+ flex: 1;
285
+
286
+ text-align: center;
287
+ }
288
+ .app-preview > .foot > * + * {
289
+ border-left: 1px solid #D5D5D6;
290
+ }
291
+ // 为工单列表样式
292
+ .compatible {
293
+ padding: 8px;
294
+ }
295
+ .compatible .form-input-group {
296
+ margin: 3px 0px;
297
+ padding: 0 8px;
298
+ }
299
+ @media screen and (min-width:992px) {
300
+ .hd-disappear{
301
+ display: none;
302
+ }
303
+ }
304
+
305
+ #work-history ul {
306
+ padding: 0px;
307
+ }
308
+
309
+ // 从order文件夹拷贝
310
+ // 为blockquote写的通用样式
311
+ // 大背景
312
+ .repair-bg {
313
+ background: #DBDBDB;
314
+ }
315
+ // 头部信息提示
316
+ .bq-parent {
317
+ height: auto;
318
+ background: #FFF;
319
+ padding: 10px 15px;
320
+ >blockquote {
321
+ padding: 0px;
322
+ padding-left: 8px;
323
+ margin: 0px;
324
+ font-size: 18px;
325
+ font-weight: bold;
326
+ border-left-color: #4C647A;
327
+ }
328
+ }
329
+ // 为移动端提供左侧修饰性边框
330
+ .lb-left {
331
+ padding-left: 8px;
332
+ border: none;
333
+ border-left: 5px solid #A2C2EB;
334
+ }
335
+ // 内容块
336
+ .repair-info-content {
337
+ margin: 15px;
338
+ background: #FFF;
339
+ border-radius: 5px;
340
+ }
341
+ @media screen and (max-width:768px) {
342
+ .repair-info-content {
343
+ margin: 0px;
344
+ padding: 8px;
345
+ background: #FFF;
346
+ border-radius: 0px;
347
+ }
348
+ }
349
+ // 为a标签:berfor伪元素写的通用样式
350
+ .tab-befor-img (@url) {
351
+ content: '';
352
+ background-image: url("@{url}");
353
+ background-size: 30px;
354
+ display: inline-block;
355
+ margin-right: 8px;
356
+ height: 30px;
357
+ width: 30px;
358
+ vertical-align: -35%;
359
+ }
360
+ .android-repair-order {
361
+ > div {
362
+ > ul {
363
+ background: #4C647A;
364
+ overflow: auto;
365
+ li {
366
+ display: block;
367
+ width: 100%;
368
+ }
369
+ > .active {
370
+ a {
371
+ background: #7599C4!important;
372
+ color: #FFF!important;
373
+ border: none;
374
+ display: block;
375
+ font-weight: bold;
376
+ &::after {
377
+ content: "";
378
+ width: 0px;
379
+ height: 0px;
380
+ border-width: 8px 8px 8px 0px;
381
+ border-color: transparent #FFF;
382
+ border-style: solid;
383
+ position: absolute;
384
+ right: 0;
385
+ top: 50%;
386
+ transform: translateY(-50%);
387
+ }
388
+ &:focus {
389
+ color: #FFF;
390
+ background: none;
391
+ }
392
+ }
393
+ }
394
+ a {
395
+ font-size: 18px;
396
+ color: #FFF;
397
+ padding: 13px 16px;
398
+ }
399
+ }
400
+ }
401
+ }
402
+
403
+ // 从app中考出
404
+ .no-close .nav-tabs a {
405
+ padding: 5px 12px;
406
+ }
407
+ /* checkbox和radio的样式 */
408
+ .magic-radio,
409
+ .magic-checkbox {
410
+ position: absolute;
411
+ display: none;
412
+ }
413
+
414
+ .magic-radio[disabled],
415
+ .magic-checkbox[disabled] {
416
+ cursor: not-allowed;
417
+ }
418
+
419
+ .magic-radio + label,
420
+ .magic-checkbox + label {
421
+ position: relative;
422
+ display: block;
423
+ padding-left: 30px;
424
+ cursor: pointer;
425
+ vertical-align: middle;
426
+ text-align: left;
427
+ }
428
+
429
+ .magic-radio + label:hover:before,
430
+ .magic-checkbox + label:hover:before {
431
+ animation-duration: 0.4s;
432
+ animation-fill-mode: both;
433
+ animation-name: hover-color;
434
+ }
435
+
436
+ .magic-radio + label:before,
437
+ .magic-checkbox + label:before {
438
+ position: absolute;
439
+ top: 0;
440
+ left: 0;
441
+ display: inline-block;
442
+ width: 20px;
443
+ height: 20px;
444
+ content: '';
445
+ border: 1px solid #c0c0c0;
446
+ }
447
+
448
+ .magic-radio + label:after,
449
+ .magic-checkbox + label:after {
450
+ position: absolute;
451
+ display: none;
452
+ content: '';
453
+ }
454
+
455
+ .magic-radio[disabled] + label,
456
+ .magic-checkbox[disabled] + label {
457
+ cursor: not-allowed;
458
+ color: #e4e4e4;
459
+ }
460
+
461
+ .magic-radio[disabled] + label:hover, .magic-radio[disabled] + label:before, .magic-radio[disabled] + label:after,
462
+ .magic-checkbox[disabled] + label:hover,
463
+ .magic-checkbox[disabled] + label:before,
464
+ .magic-checkbox[disabled] + label:after {
465
+ cursor: not-allowed;
466
+ }
467
+
468
+ .magic-radio[disabled] + label:hover:before,
469
+ .magic-checkbox[disabled] + label:hover:before {
470
+ border: 1px solid #e4e4e4;
471
+ animation-name: none;
472
+ }
473
+
474
+ .magic-radio[disabled] + label:before,
475
+ .magic-checkbox[disabled] + label:before {
476
+ border-color: #e4e4e4;
477
+ }
478
+
479
+ .magic-radio:checked + label:before,
480
+ .magic-checkbox:checked + label:before {
481
+ animation-name: none;
482
+ }
483
+
484
+ .magic-radio:checked + label:after,
485
+ .magic-checkbox:checked + label:after {
486
+ display: block;
487
+ }
488
+
489
+ .magic-radio + label:before {
490
+ border-radius: 50%;
491
+ }
492
+
493
+ .magic-radio + label:after {
494
+ top: 4px;
495
+ left: 4px;
496
+ width: 12px;
497
+ height: 12px;
498
+ border-radius: 50%;
499
+ background: #7697c4;
500
+ }
501
+
502
+ .magic-radio:checked + label:before {
503
+ border: 2px solid #7697c4;
504
+ }
505
+
506
+ .magic-radio:checked[disabled] + label:before {
507
+ border: 2px solid #c9e2f9;
508
+ }
509
+
510
+ /*.magic-radio:checked[disabled] + label:after {
511
+ background: #c9e2f9; }*/
512
+
513
+ .magic-checkbox + label:before {
514
+ border-radius: 3px;
515
+ }
516
+
517
+ .magic-checkbox + label:after {
518
+ top: 2px;
519
+ left: 7px;
520
+ box-sizing: border-box;
521
+ width: 6px;
522
+ height: 12px;
523
+ transform: rotate(45deg);
524
+ border-width: 2px;
525
+ border-style: solid;
526
+ border-color: #fff;
527
+ border-top: 0;
528
+ border-left: 0;
529
+ }
530
+
531
+ .magic-checkbox:checked + label:before {
532
+ border: #7697c4;
533
+ background: #7697c4;
534
+ }
535
+
536
+ .magic-checkbox:checked[disabled] + label:before {
537
+ border: #c9e2f9;
538
+ background: #c9e2f9;
539
+ }
540
+ /* 滚动条样式 */
541
+ /*---滚动条默认显示样式--*/
542
+ ::-webkit-scrollbar-thumb{
543
+ // display: none;
544
+ background-color:rgba(0,0,0,0.2);
545
+ height:50px;
546
+ outline-offset:-2px;
547
+ /*outline:2px solid #fff;*/
548
+ -webkit-border-radius:4px;
549
+ /*border: 2px solid #fff;*/
550
+ }
551
+
552
+ /*---鼠标点击滚动条显示样式--*/
553
+ ::-webkit-scrollbar-thumb:hover{
554
+ // display: inherit;
555
+ background-color:rgba(0,0,0,0.4);
556
+ height:50px;
557
+ -webkit-border-radius:4px;
558
+ }
559
+ /*---滚动条大小--*/
560
+ ::-webkit-scrollbar{
561
+ width:8px;
562
+ height:8px;
563
+ }
564
+ /*---滚动框背景样式--*/
565
+ ::-webkit-scrollbar-track-piece{
566
+ /* 全透明,不显示 */
567
+ background-color:rgba(255,255,255,0);
568
+ -webkit-border-radius:0;
569
+ }
@@ -155,7 +155,7 @@
155
155
  <script>
156
156
  import Vue from 'vue'
157
157
  import {HttpResetClass, PagedList} from 'vue-client'
158
- import * as Util from "../../../../../Util";
158
+ import * as Util from "../../Util";
159
159
  // var data
160
160
  export default {
161
161
  title: '基本信息',
@@ -0,0 +1,93 @@
1
+ <template>
2
+ <div class="auto form-horizontal" >
3
+ <modal :show.sync="show" v-ref:modal large backdrop="false">
4
+ <header slot="modal-header" class="modal-header">
5
+ <h3 style="color:black" class="modal-title">{{title}}</h3>
6
+ </header>
7
+ <article slot="modal-body" style = "display: flex;justify-content: center;" id="bill">
8
+ <div v-if="bill.data">
9
+ {{{bill.data}}}
10
+ </div>
11
+ </article>
12
+ <footer slot="modal-footer" class="modal-footer">
13
+ <div v-if="billConfig.hasBillManage">
14
+ <div class="col-sm-2">
15
+ <span><strong>发票号:{{model.f_using_number}}</strong></span>
16
+ </div>
17
+ </div>
18
+ <button type="button" class="btn btn-success" @click='print()'>打印</button>
19
+ <report-print id='bill' top='15mm' left='5mm' width='90%' height='70%' :notrepeat="true" :showbtn="false" v-ref:reportprint></report-print>
20
+ <button type="button" class="btn btn-default" @click='cancel()' v-if="!billManager">取消</button>
21
+ </footer>
22
+ </modal>
23
+ </div>
24
+ </template>
25
+ <script>
26
+ import { DataModel } from 'vue-client'
27
+
28
+ let getBillData = async function (self, val) {
29
+ console.log('看看打票里面的data', self.data, self.billData, val)
30
+ self.bill = new DataModel(self.billData.url, {reprint: "'冲正'"}, 'af-revenue')
31
+ await self.bill.search(self.data.id)
32
+
33
+ self.model.f_using_number = self.billData.bill.number
34
+ }
35
+
36
+ export default {
37
+ title: '收费发票',
38
+ data () {
39
+ return {
40
+ model: {
41
+ f_using_number: null
42
+ },
43
+ bill: {},
44
+ messShow: false
45
+ }
46
+ },
47
+ props: ['show', 'data', 'billData', 'billConfig', 'title'],
48
+ ready () {
49
+ console.log('打票', this.billConfig, this.billData)
50
+ },
51
+ methods: {
52
+ cancel () {
53
+ this.$dispatch('toggle')
54
+ },
55
+
56
+ async print () {
57
+ // 更新系统发票号
58
+ try {
59
+ console.log('开具冲红收据的参数:', this.data.id, this.data.f_type)
60
+ if (this.billConfig.hasBillManage) {
61
+ await this.$CommonService.correctPaperBill(this.data.id, this.data.f_type, this.data.f_use_type, this.billData.bill, 'newBill')
62
+ }
63
+ console.log('系统票号更新完毕')
64
+ this.$refs.reportprint.print()
65
+ } catch (error) {
66
+ this.$dispatch('refresh')
67
+ }
68
+ }
69
+ },
70
+ watch: {
71
+ 'show' (val) {
72
+ if (val) {
73
+ getBillData(this, val).then(() => {
74
+ this.$emit('ready')
75
+ }).catch((error) => {
76
+ this.$emit('error', error)
77
+ })
78
+ }
79
+ }
80
+ },
81
+ events: {
82
+ 'print' () {
83
+ // 对票据明细进行更新或插入操作
84
+ this.$dispatch('printok', '发票打印', this.data)
85
+ },
86
+ 'print-error' () {
87
+ this.$dispatch('error', '发票打印', this.data, null)
88
+ }
89
+ }
90
+ }
91
+ </script>
92
+ <style >
93
+ </style>
@@ -48,7 +48,7 @@
48
48
  </footer>
49
49
  </modal>
50
50
  <correct-bill :show="print" :bill-config='config' :bill-data='billData'
51
- @printok="printok" @toggle="printCancel" :data='printModel' v-ref:printbill ></correct-bill>
51
+ @printok="printok" @toggle="printCancel" :data='printModel' :title="`${data.type}撤销票据`" v-ref:printbill ></correct-bill>
52
52
  </div>
53
53
  </template>
54
54
 
@@ -122,6 +122,73 @@
122
122
  close-on-select
123
123
  ></v-select>
124
124
  </div>
125
+ <div class="col-sm-6">
126
+ <label class="font_normal_body">用户等级</label>
127
+ <v-select :value.sync="model.f_user_level" v-model="model.f_user_level"
128
+ :options='userlevels' placeholder='用户等级'
129
+ close-on-select
130
+ ></v-select>
131
+ </div>
132
+ </div>
133
+ <div class="row" style="margin-top:6px;">
134
+ <div class="col-sm-6">
135
+ <label class="font_normal_body">用户状态</label>
136
+ <v-select :value.sync="model.f_user_state" v-model="model.f_user_state"
137
+ :options='userstates' placeholder='用户状态'
138
+ close-on-select
139
+ ></v-select>
140
+ </div>
141
+ <div class="col-sm-6">
142
+ <label class="font_normal_body">房屋类型</label>
143
+ <v-select :value.sync="model.f_house_type" v-model="model.f_house_type"
144
+ :options='housetypes' placeholder='房屋类型'
145
+ close-on-select
146
+ ></v-select>
147
+ </div>
148
+ </div>
149
+ <div class="row" style="margin-top:6px;">
150
+ <div class="col-sm-6">
151
+ <label class="font_normal_body">使用状态</label>
152
+ <v-select :value.sync="model.f_usetype" v-model="model.f_usetype"
153
+ :options='usetypes' placeholder='使用状态'
154
+ close-on-select
155
+ ></v-select>
156
+ </div>
157
+ <div class="col-sm-6">
158
+ <label class="font_normal_body">发卡状态</label>
159
+ <v-select :value.sync="model.f_whether_hairpin" v-model="model.f_whether_hairpin"
160
+ :options='whetherhairpins' placeholder='发卡状态'
161
+ close-on-select
162
+ ></v-select>
163
+ </div>
164
+ </div>
165
+ <div class="row" style="margin-top:6px;">
166
+ <div class="col-sm-6">
167
+ <label class="font_normal_body">表具年限</label>
168
+ <input type="number" class="input_search" style="width:60%" v-model="model.f_use_limit" placeholder='表具年限' min="1" step="1" @input="validateUseLimit"></input>
169
+ </div>
170
+ <div class="col-sm-6">
171
+ <label class="font_normal_body">出厂日期</label>
172
+ <datepicker style="width:60%" placeholder="表具出厂日期"
173
+ v-model="model.f_factory_date"
174
+ :value.sync="model.f_factory_date"
175
+ class="datepicker"
176
+ :format="'yyyy-MM-dd HH:mm:ss'"
177
+ :show-reset-button="true">
178
+ </datepicker>
179
+ </div>
180
+ </div>
181
+ <div class="row" style="margin-top:6px;">
182
+ <div class="col-sm-6">
183
+ <label class="font_normal_body">报废日期</label>
184
+ <datepicker style="width:60%" placeholder="表具报废日期"
185
+ v-model="model.f_scrap_date"
186
+ :value.sync="model.f_scrap_date"
187
+ class="datepicker"
188
+ :format="'yyyy-MM-dd HH:mm:ss'"
189
+ :show-reset-button="true">
190
+ </datepicker>
191
+ </div>
125
192
  </div>
126
193
  <div class="row" >
127
194
  <div class="col-sm-12">
@@ -165,9 +232,17 @@
165
232
  f_usestate: '',
166
233
  f_comments: '',
167
234
  f_overdue_set: '',
168
- f_meter_book:'',
169
- f_book_slice_area:'',
170
- f_adjustable_id:''
235
+ f_meter_book: '',
236
+ f_book_slice_area: '',
237
+ f_adjustable_id: '',
238
+ f_user_level: '',
239
+ f_user_state: '',
240
+ f_house_type: '',
241
+ f_usetype: '',
242
+ f_whether_hairpin: '',
243
+ f_use_limit: '',
244
+ f_factory_date: '',
245
+ f_scrap_date: ''
171
246
  },
172
247
  uploadText: '换表',
173
248
  // 构建数组来存储对象
@@ -188,6 +263,17 @@
188
263
  readyGen(this)
189
264
  },
190
265
  methods: {
266
+ validateUseLimit () {
267
+ let val = this.model.f_use_limit
268
+ if (val !== '' && val !== null && val !== undefined) {
269
+ val = parseInt(val)
270
+ if (isNaN(val) || val < 1) {
271
+ this.model.f_use_limit = ''
272
+ } else {
273
+ this.model.f_use_limit = val
274
+ }
275
+ }
276
+ },
191
277
  async initSlice (val) {
192
278
  if (val) {
193
279
  let getAllArea = await this.$resetpost('/rs/search', {
@@ -253,7 +339,21 @@
253
339
 
254
340
  },
255
341
  computed: {
256
-
342
+ whetherhairpins () {
343
+ return this.$appdata.getParam('发卡状态')
344
+ },
345
+ usetypes () {
346
+ return this.$appdata.getParam('使用状态')
347
+ },
348
+ housetypes () {
349
+ return this.$appdata.getParam('房屋类型')
350
+ },
351
+ userstates () {
352
+ return this.$appdata.getParam('用户状态')
353
+ },
354
+ userlevels () {
355
+ return this.$appdata.getParam('用户等级')
356
+ },
257
357
  aroundmeters () {
258
358
  return this.$appdata.getParam('左右表')
259
359
  },
@@ -27,6 +27,7 @@
27
27
  files: {},
28
28
  pinfo: {},
29
29
  isdetail: true,
30
+ userinfo: ['f_user_level','f_user_state','f_house_type'],
30
31
  chinesename: {
31
32
  files: {
32
33
  'f_inputtor': '抄表员',
@@ -43,7 +44,15 @@
43
44
  'f_comments': '备注',
44
45
  'f_overdue_set': '违约金规则',
45
46
  'f_adjustable_name': '调 压 箱',
46
- 'f_book_slice_area': '表册片区'
47
+ 'f_book_slice_area': '表册片区',
48
+ 'f_user_level': '用户等级',
49
+ 'f_user_state': '用户状态',
50
+ 'f_house_type': '房屋类型',
51
+ 'f_usetype': '使用状态',
52
+ 'f_whether_hairpin': '发卡状态',
53
+ 'f_use_limit': '表具年限',
54
+ 'f_factory_date': '表具出厂日期',
55
+ 'f_scrap_date': '表具报废日期'
47
56
  }
48
57
  }
49
58
  }
@@ -83,10 +92,14 @@
83
92
  if (this.files[item] instanceof Array) {
84
93
  this.files[item] = this.files[item].length > 0 ? this.files[item][0] : ''
85
94
  }
95
+ let tablename = 't_userfiles'
96
+ if (this.userinfo.includes(item)) {
97
+ tablename = 't_userinfo'
98
+ }
86
99
  var file = {
87
100
  chinesename: this.chinesename.files[item],
88
101
  fieldname: item,
89
- tablename: 't_userfiles',
102
+ tablename: tablename,
90
103
  newvalue: this.files[item],
91
104
  state: '有效',
92
105
  modifitime: Util.toStandardDateString()
@@ -36,6 +36,7 @@
36
36
  <label class="font_normal_body">用户状态</label>
37
37
  <v-select :value.sync="model.f_user_state" v-model="model.f_user_state"
38
38
  :options='$parent.$parent.userstates' placeholder='用户状态'
39
+ condition="u.f_user_state = '{}'"
39
40
  close-on-select></v-select>
40
41
  </div>
41
42
  <div class="col-sm-3 form-group">
@@ -47,6 +48,39 @@
47
48
  condition="u.f_meter_classify like '%{}'"
48
49
  ></v-select>
49
50
  </div>
51
+ <div class="col-sm-3 form-group">
52
+ <label class="font_normal_body">气表品牌</label>
53
+ <v-select :value.sync="model.f_meter_brand" v-model="model.f_meter_brand"
54
+ style="width:60%"
55
+ :options='$parent.$parent.meterbrands' placeholder='气表品牌'
56
+ close-on-select
57
+ condition="u.f_meter_brand like '%{}'"
58
+ ></v-select>
59
+ </div>
60
+ <div class="col-sm-3 form-group">
61
+ <label class="font_normal_body">气表状态</label>
62
+ <v-select :value.sync="model.f_table_state" v-model="model.f_table_state"
63
+ :options='$parent.$parent.tablestates' placeholder='气表状态'
64
+ condition="u.f_table_state = '{}'"
65
+ close-on-select></v-select>
66
+ </div>
67
+ <div class="col-sm-3 form-group" style="padding-right: 5px;">
68
+ <label class="font_normal_body">设备类型</label>
69
+ <v-select :value.sync="model.f_devices_type" v-model="model.f_devices_type"
70
+ :options='$parent.$parent.devicetypes' placeholder='设备类型' :value-single="true"
71
+ condition="u.f_devices_type = '{}'"
72
+ close-on-select></v-select>
73
+ </div>
74
+ <div class="col-sm-3 form-group">
75
+ <label class="font_normal_body">设备品牌</label>
76
+ <input type="text" class="input_search" style="width: 60%" v-model="model.f_brand"
77
+ condition="f_brand like '%{}%'" placeholder='设备品牌'>
78
+ </div>
79
+ <div class="col-sm-3 form-group">
80
+ <label class="font_normal_body">表号</label>
81
+ <input type="text" class="input_search" style="width: 60%" v-model="model.f_meternumber"
82
+ condition="f_meternumber = '{}'" placeholder='表号'>
83
+ </div>
50
84
  <div class="col-sm-3 form-group">
51
85
  <label class="font_normal_body" >抄&nbsp;表&nbsp;员</label>
52
86
  <v-select :value.sync="model.f_inputtor" placeholder='抄表员'
@@ -85,10 +119,24 @@
85
119
  :options='$parent.$parent.bookSliceArea' placeholder='表册片区'
86
120
  multiple
87
121
  style="width:60%"
88
- @change="$parent.$parent.sliceChange"
89
122
  close-on-select
90
123
  condition="f_book_slice_area in {}"></v-select>
91
124
  </div>
125
+ <!--抄表册-->
126
+ <div class="col-sm-3 form-group">
127
+ <label class="font_normal_body">抄表册</label>
128
+ <v-select :value.sync="model.f_meter_book" v-model="model.f_meter_book"
129
+ :options='$parent.$parent.meterbooks' placeholder='抄表册'
130
+ multiple
131
+ style="width:60%"
132
+ close-on-select
133
+ condition="f_meter_book in {}"></v-select>
134
+ </div>
135
+ <div class="col-sm-3 form-group">
136
+ <label class="font_normal_body">档案备注</label>
137
+ <input type="text" class="input_search" style="width: 60%" v-model="model.f_comments"
138
+ condition="f_comments like '%{}%'" placeholder='档案备注'>
139
+ </div>
92
140
  <div class="col-sm-3 form-group">
93
141
  <label class="font_normal_body">小&emsp;&emsp;区</label>
94
142
  <input style="width:60%" type="text" class="form-control" v-model="model.f_residential_area"
@@ -98,25 +146,25 @@
98
146
  <div class="col-sm-3 form-group">
99
147
  <label class="font_normal_body">楼&emsp;&emsp;栋</label>
100
148
  <input style="width:60%" type="text" class="form-control" v-model="model.f_building"
101
- condition="f_building like '%{}%'" placeholder='楼栋'
149
+ condition="f_building = '{}'" placeholder='楼栋'
102
150
  >
103
151
  </div>
104
152
  <div class="col-sm-3 form-group">
105
153
  <label class="font_normal_body">单&emsp;&emsp;元</label>
106
154
  <input style="width:60%" type="text" class="form-control" v-model="model.f_unit"
107
- condition="f_unit like '%{}%'" placeholder='单元'
155
+ condition="f_unit = '{}'" placeholder='单元'
108
156
  >
109
157
  </div>
110
158
  <div class="col-sm-3 form-group">
111
159
  <label class="font_normal_body">楼&emsp;&emsp;层</label>
112
160
  <input style="width:60%" type="text" class="form-control" v-model="model.f_floor"
113
- condition="f_floor like '%{}%'" placeholder='楼层'
161
+ condition="f_floor = '{}'" placeholder='楼层'
114
162
  >
115
163
  </div>
116
164
  <div class="col-sm-3 form-group">
117
165
  <label class="font_normal_body">&emsp;门牌号</label>
118
166
  <input style="width:60%" type="text" class="form-control" v-model="model.f_room"
119
- condition="f_room like '%{}%'" placeholder='门牌号'
167
+ condition="f_room = '{}'" placeholder='门牌号'
120
168
  >
121
169
  </div>
122
170
  </div>
@@ -198,6 +246,7 @@
198
246
  // console.log('获取登录信息,', self.$login, self.$appdata, self.$appdata.getParam('用户类型'), Vue.$login.f.name)
199
247
  await self.search()
200
248
  await self.$LoadParams.loadParam()
249
+ await self.$LoadParams.loadMeterBook(self.$login.f.orgid)
201
250
  let overdueset = []
202
251
  let res = await self.$resetpost('api/af-revenue/sql/saleSingleTable', {
203
252
  data: {
@@ -211,6 +260,7 @@
211
260
  self.overdueset = overdueset
212
261
  self.initAdjustables()
213
262
  self.initSlice(self.$login.f.orgid)
263
+ self.loadMeterBooks()
214
264
  }
215
265
 
216
266
  export default {
@@ -223,6 +273,9 @@
223
273
  overdueset: [],
224
274
  // 控制全选
225
275
  all: [],
276
+ meterbooks: [],
277
+ meterbrands: [],
278
+ devicetypes: this.$appdata.getParam('设备类型'),
226
279
  // 控制单选
227
280
  radio: [],
228
281
  criteriaShow: true,
@@ -235,42 +288,20 @@
235
288
  loadParamGem(this)
236
289
  },
237
290
  methods: {
238
- async sliceChange () {
239
- this.$set('$refs.paged.$refs.criteria.model.f_meter_book', [])
240
- let val2 = this.$refs.paged.$refs.criteria.model.f_book_slice_area
241
- if (val2.length > 0) {
242
- let condition = ` 1=1 and f_orgid ='${this.f_filialeid}' and f_book_state='有效' `
243
- let aaa = '('
244
- val2.forEach((item) => {
245
- aaa = aaa + `'${item}',`
246
- })
247
- aaa = aaa + `'')`
248
- condition = condition + ` and f_book_slice_area in ${aaa} `
249
- let param = {
250
- items: '*',
251
- tablename: 't_meter_book',
252
- condition: condition,
253
- orderitem: 'id'
254
- }
255
- let getMeterBooks = await this.$resetpost('api/af-revenue/sql/singleTable_OrderBy', {data: param}, {resolveMsg: null, rejectMsg: '获取营收参数出错!!!'})
256
- if (getMeterBooks.data) {
257
- if (getMeterBooks.data.length > 0) {
258
- let rs = []
259
- getMeterBooks.data.forEach((item) => {
260
- let temp = {
261
- label: item.f_book_name,
262
- value: item.id
263
- }
264
- rs.push(temp)
265
- })
266
- this.meterbooks = [{label: '全部', value: ''}, ...rs]
267
- } else {
268
- this.meterbooks = [{label: '全部', value: ''}]
269
- }
270
- }
291
+ loadMeterBooks () {
292
+ console.log('$GetSaleParam.meterbooks:', this.$GetSaleParam.meterbooks)
293
+ console.log('$GetSaleParam.bookcodes:', this.$GetSaleParam.bookcodes)
294
+
295
+ let books = this.$GetSaleParam.meterbooks || []
296
+ if (books.length > 0) {
297
+ this.meterbooks = books.map(item => ({
298
+ label: item.label,
299
+ value: item.value
300
+ }))
271
301
  } else {
272
302
  this.meterbooks = [{label: '全部', value: ''}]
273
303
  }
304
+ console.log('最终 meterbooks:', this.meterbooks)
274
305
  },
275
306
  async initSlice (val) {
276
307
  if (val) {
@@ -298,15 +329,15 @@
298
329
  arr.push(temp)
299
330
  })
300
331
  this.adjustables = [{label: '全部', value: ''}, ...arr]
301
- // // 初始化气表品牌
302
- // let brandArr = []
303
- // this.$GetSaleParam.getGasbrand().forEach((item) => {
304
- // let temp1 = {}
305
- // temp1.label = item.label
306
- // temp1.value = item.value.f_meter_brand
307
- // brandArr.push(temp1)
308
- // })
309
- // this.meterbrands = [{label: '全部', value: ''}, ...brandArr]
332
+ // 初始化气表品牌
333
+ let brandArr = []
334
+ this.$GetSaleParam.getGasbrand().forEach((item) => {
335
+ let temp1 = {}
336
+ temp1.label = item.label
337
+ temp1.value = item.value.f_meter_brand
338
+ brandArr.push(temp1)
339
+ })
340
+ this.meterbrands = [{label: '全部', value: ''}, ...brandArr]
310
341
  },
311
342
  search () {
312
343
  // this.$refs.paged.$refs.criteria.model.generate_state = '0'
@@ -467,6 +498,9 @@
467
498
  userstates () {
468
499
  return this.$appdata.getParam('用户状态')
469
500
  },
501
+ tablestates () {
502
+ return this.$appdata.getParam('表具状态')
503
+ },
470
504
  ischecked () {
471
505
  return function (index, i) {
472
506
  // console.log("计算属性")
@@ -87,4 +87,6 @@ export default function () {
87
87
  Vue.component('sale-safecheck-info', (resolve) => { require(['./SafeCheck'], resolve) })
88
88
  // 使用该气价的用户信息
89
89
  Vue.component('gasprice-user', (resolve) => { require(['./GasPriceUser'], resolve) })
90
+ // 冲正票据
91
+ Vue.component('correct-bill', (resolve) => { require(['./CorrectBill'], resolve) })
90
92
  }