sale-client 4.3.99 → 4.3.100

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.
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
@@ -1,7 +1,7 @@
1
1
  var path = require('path')
2
2
  var checkVersion = require('./versionCheck.js')
3
3
  checkVersion()
4
- const [ serverRul, localUrl ] = ['http://192.168.50.67:31567/', 'http://localhost:9026']
4
+ const [ serverRul, localUrl ] = ['https://222.83.114.229:31467/', 'https://222.83.114.229:31467/']
5
5
  var merge = require('webpack-merge')
6
6
  var baseConfig = require('./webpack.dev.conf')
7
7
  var devConfig = {
@@ -25,12 +25,12 @@ var devConfig = {
25
25
  // },
26
26
  // target: localUrl
27
27
  // },
28
- '/api/af-revenue/logic': {
29
- pathRewrite: {
30
- '/api/af-revenue/logic': '/logic'
31
- },
32
- target: localUrl
33
- },
28
+ // '/api/af-revenue/logic': {
29
+ // pathRewrite: {
30
+ // '/api/af-revenue/logic': '/logic'
31
+ // },
32
+ // target: localUrl
33
+ // },
34
34
  // '/api/af-revenue/file': {
35
35
  // // pathRewrite: {
36
36
  // // '/api/af-revenue/file': '/file'
@@ -41,12 +41,12 @@ var devConfig = {
41
41
  //
42
42
  // target: 'http://410663id1ia4.vicp.fun'
43
43
  // },
44
- '/api/af-revenue/sql': {
45
- pathRewrite: {
46
- '/api/af-revenue/sql': '/sql'
47
- },
48
- target: localUrl
49
- },
44
+ // '/api/af-revenue/sql': {
45
+ // pathRewrite: {
46
+ // '/api/af-revenue/sql': '/sql'
47
+ // },
48
+ // target: localUrl
49
+ // },
50
50
  '/rs/pay': {
51
51
  target: 'http://localhost:8080'
52
52
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sale-client",
3
- "version": "4.3.99",
3
+ "version": "4.3.100",
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
+ }
@@ -0,0 +1,152 @@
1
+ <template>
2
+ <div class="panel panel-info auto">
3
+ <div class="panel-heading auto" style="height: 35px">
4
+ <h4 style="display:inline-block;margin-top: auto">未处理隐患</h4>
5
+ </div>
6
+
7
+ <table class="table table-striped table-bordered" v-if="hiddenDangerList.length > 0">
8
+ <tbody v-for="(index,row) in hiddenDangerList">
9
+ <tr>
10
+ <td colspan="4" style="text-align: center;background-color: #8cbce2;">未处理隐患{{index+1}}明细
11
+ </td>
12
+ </tr>
13
+ <tr>
14
+ <td colspan="1" style="text-align: center;border: #E9E9E9 solid 1px;">隐患名称:</td>
15
+ <td colspan="3" style="text-align: center;border: #E9E9E9 solid 1px;">{{ row.f_item_name }}</td>
16
+ </tr>
17
+ <tr>
18
+ <td colspan="1" style="text-align: center;border: #E9E9E9 solid 1px;">发现时间:</td>
19
+ <td colspan="3" style="text-align: center;border: #E9E9E9 solid 1px;">{{ row.f_offsite_time }}</td>
20
+ </tr>
21
+ <tr>
22
+ <td colspan="1" style="text-align: center;border: #E9E9E9 solid 1px;">发现人员:</td>
23
+ <td colspan="3" style="text-align: center;border: #E9E9E9 solid 1px;">{{ row.f_checker_name }}</td>
24
+ </tr>
25
+ <tr>
26
+ <td colspan="1" style="text-align: center;border: #E9E9E9 solid 1px;width: 17%">隐患照片:</td>
27
+ <td colspan="3" style="text-align: center;border: #E9E9E9 solid 1px;width: 33%">
28
+ <div class="img">
29
+ <img-self :src="row.f_path" width="150" height="150"></img-self>
30
+ </div>
31
+ </td>
32
+ </tr>
33
+ <tr v-if="row.f_p1_path">
34
+ <td colspan="1" style="text-align: center;border: #E9E9E9 solid 1px;width: 17%">隐患照片2:</td>
35
+ <td colspan="3" style="text-align: center;border: #E9E9E9 solid 1px;width: 33%">
36
+ <div class="img">
37
+ <img-self :src="'rs/image/file/' + row.f_p1_path" width="150" height="150"></img-self>
38
+ </div>
39
+ </td>
40
+ </tr>
41
+ <tr v-if="row.f_p2_path">
42
+ <td colspan="1" style="text-align: center;border: #E9E9E9 solid 1px;width: 17%">隐患照片3:</td>
43
+ <td colspan="3" style="text-align: center;border: #E9E9E9 solid 1px;width: 33%">
44
+ <div class="img">
45
+ <img-self :src="'rs/image/file/' + row.f_p2_path" width="150" height="150"></img-self>
46
+ </div>
47
+ </td>
48
+ </tr>
49
+ <tr v-if="row.f_p3_path">
50
+ <td colspan="1" style="text-align: center;border: #E9E9E9 solid 1px;width: 17%">隐患照片4:</td>
51
+ <td colspan="3" style="text-align: center;border: #E9E9E9 solid 1px;width: 33%">
52
+ <div class="img">
53
+ <img-self :src="'api/af-revenue/file/image/' + row.f_p3_path" width="150" height="150"></img-self>
54
+ </div>
55
+ </td>
56
+ </tr>
57
+ </tbody>
58
+ </table>
59
+
60
+ <div class="auto info-content" v-if="hiddenDangerList.length === 0">
61
+ <div class="row">
62
+ <strong>暂无未处理隐患信息</strong>
63
+ </div>
64
+ </div>
65
+ </div>
66
+
67
+ </template>
68
+ <script>
69
+ /**
70
+ *用户信息
71
+ *安检信息
72
+ */
73
+
74
+ import { HttpResetClass } from 'vue-client'
75
+ import {runLogic} from 'vue-client/src/util/apiUtils'
76
+
77
+ let getHiddenDangerGen = async function (self) {
78
+ try {
79
+ let http = new HttpResetClass()
80
+ let condition = `f_userinfoid = ${self.data.f_userinfo_id} and f_is_repaired = '隐患未处理'`
81
+ let getHiddenDanger = await http.load('POST', 'api/af-safecheck/sql/defectDetails', {
82
+ data: {
83
+ condition: condition,
84
+ f_filialeid: `('${self.$login.f.orgid}')`
85
+ }
86
+ }, {resolveMsg: null, rejectMsg: null})
87
+ console.log('getHiddenDanger', getHiddenDanger)
88
+ self.hiddenDangerList = getHiddenDanger.data
89
+ if (self.hiddenDangerList && self.hiddenDangerList.length > 0) {
90
+ for (let img of self.hiddenDangerList) {
91
+ if (img.f_path && img.f_path !== '') {
92
+ const filename = img.f_path.split('/')[img.f_path.split('/').length - 1]
93
+ try {
94
+ const res = await runLogic('getImageFileLogic', {filename}, 'af-telephone')
95
+ if (res && res.data && res.data.filepath) {
96
+ img.f_path = res.data.filepath
97
+ }
98
+ } catch (error) {
99
+ console.error('获取图片路径失败:', error)
100
+ }
101
+ }
102
+ }
103
+ }
104
+ } catch (error) {
105
+ console.error(error)
106
+ }
107
+ }
108
+
109
+ export default {
110
+ title: '安检信息',
111
+ data () {
112
+ return {
113
+ hiddenDangerList: [],
114
+ style: 'text-align: center;border: #E9E9E9 solid 1px;'
115
+ }
116
+ },
117
+ props: ['data'],
118
+ ready () {
119
+ if (this.data) {
120
+ getHiddenDangerGen(this)
121
+ }
122
+ },
123
+ methods: {},
124
+ computed: {},
125
+ watch: {
126
+ 'data' () {
127
+ if (this.data == null) {
128
+ this.hiddenDangerList = []
129
+ } else {
130
+ getHiddenDangerGen(this)
131
+ }
132
+ }
133
+ }
134
+ }
135
+ </script>
136
+ <style scoped>
137
+ .img {
138
+ border: 1px solid #9773ed;
139
+ width: auto;
140
+ height: auto;
141
+ margin: 6px auto;
142
+ display: inline-block;
143
+ text-align: center;
144
+ }
145
+
146
+ img {
147
+ margin: 6px;
148
+ display: block;
149
+ margin-left: auto;
150
+ margin-right: auto;
151
+ }
152
+ </style>
@@ -0,0 +1,412 @@
1
+ <template>
2
+ <div class="panel panel-info auto">
3
+ <div class="panel-heading auto" style="height: 35px">
4
+ <h4 style="display:inline-block;margin-top: auto">安检信息</h4>
5
+ </div>
6
+ <div class="auto info-content" v-if="hasCheck == 1 && model.datasource=='oldos'">
7
+ <div class="row">
8
+ <label class="col-sm-6 ">客户名称:</label>
9
+ <span class="col-sm-6">{{model.name}}</span>
10
+ </div>
11
+ <div class="row">
12
+ <label class="col-sm-6 ">客户地址:</label>
13
+ <span class="col-sm-6">{{model.address}}</span>
14
+ </div>
15
+ <div class="row">
16
+ <label class="col-sm-6 ">安检状态:</label>
17
+ <span class="col-sm-6">{{model.taskStatusText}}</span>
18
+ </div>
19
+ <tr v-show="nextCheckDateShow">
20
+ <td colspan="1" style="text-align: center;border: #E9E9E9 solid 1px;">下次安检时间:</td>
21
+ <td colspan="3" style="text-align: center;border: #E9E9E9 solid 1px;">{{ model.nextcheckdate }}</td>
22
+ </tr>
23
+ <div class="row">
24
+ <label class="col-sm-6 ">上次安检时间:</label>
25
+ <span class="col-sm-6">{{model.lastCheckDate}}</span>
26
+ </div>
27
+ <div class="row">
28
+ <label class="col-sm-6 ">安检员:</label>
29
+ <span class="col-sm-6">{{model.f_checker_name}}</span>
30
+ </div>
31
+ <div class="row">
32
+ <label class="col-sm-6 ">壁挂炉:</label>
33
+ <span class="col-sm-6">{{model.hasFireplace == 0 ? '无': '有'}}</span>
34
+ </div>
35
+ <div class="row">
36
+ <label class="col-sm-6 ">热水器:</label>
37
+ <span class="col-sm-6">{{model.hasWaterHeater == 0 ? '无': '有'}}</span>
38
+ </div>
39
+ <div class="row">
40
+ <label class="col-sm-6 ">天然气专用灶:</label>
41
+ <span class="col-sm-6">{{model.hasCookTool == 0 ? '无': '有'}}</span>
42
+ </div>
43
+ </div>
44
+ <table class="table table-striped table-bordered" v-if="(model.f_entry_status=='到访不遇' || model.f_entry_status=='拒检') && model.datasource =='newos'">
45
+ <thead>
46
+ <tr> <th colspan="4" style="text-align: center;background-color: #8cbce2;">用户安检概况</th></tr>
47
+ </thead>
48
+ <tbody>
49
+ <tr v-show="nextCheckDateShow">
50
+ <td colspan="1" style="text-align: center;border: #E9E9E9 solid 1px;">下次安检时间:</td>
51
+ <td colspan="3" :style=style>{{ model.f_next_check_date }}</td>
52
+ </tr>
53
+ <tr>
54
+ <td colspan="1" style="text-align: center;border: #E9E9E9 solid 1px;">上次安检时间:</td>
55
+ <td colspan="3" style="text-align: center;border: #E9E9E9 solid 1px;">{{ model.f_last_check_date }}</td>
56
+ </tr>
57
+ <tr>
58
+ <td style="text-align: center;border: #E9E9E9 solid 1px;width: 17%">到达时间:</td>
59
+ <td style="text-align: center;border: #E9E9E9 solid 1px;width: 33%">{{ model.f_onsite_time }}</td>
60
+ <td style="text-align: center;border: #E9E9E9 solid 1px;width: 17%">离开时间:</td>
61
+ <td style="text-align: center;border: #E9E9E9 solid 1px;width: 33%">{{ model.f_offsite_time }}</td>
62
+ </tr>
63
+ <tr>
64
+ <td :style="{color: (model.f_entry_status==='到访不遇'||model.f_entry_status==='拒绝入户'||model.f_entry_status==='拒检') ? 'brown' : ''}" style="text-align: center;border: #E9E9E9 solid 1px;width: 17%">入户状态:</td>
65
+ <td :style="{color: (model.f_entry_status==='到访不遇'||model.f_entry_status==='拒绝入户'||model.f_entry_status==='拒检') ? 'brown' : ''}" style="text-align: center;border: #E9E9E9 solid 1px;width: 33%">{{ model.f_entry_status }}</td>
66
+ </tr>
67
+ </tbody>
68
+ </table>
69
+ <table class="table table-striped table-bordered" v-if="(model.f_entry_status=='到访不遇' || model.f_entry_status=='拒检') && model.datasource =='newos'">
70
+ <thead>
71
+ <tr> <th colspan="4" style="text-align: center;background-color: #8cbce2;">{{ model.f_entry_status }}图片</th></tr>
72
+ </thead>
73
+ <tbody> <tr>
74
+ <td style="margin: auto;text-align: center">
75
+ <div class="container" style="background: #FFFFFF;margin:0;width:100%;">
76
+ <div class="img" v-for="img in model.f_overall_imgs">
77
+ <img-self v-if="img.f_overall_path!='' && img.f_overall_path!=null" :src="img.f_overall_path" style="float: left" width="100" height="150"></img-self>
78
+ </div>
79
+
80
+ </div>
81
+ </td>
82
+ </tr>
83
+ </tbody>
84
+ </table>
85
+
86
+ <table class="table table-striped table-bordered" v-if="model.f_entry_status=='入户' && model.datasource =='newos'">
87
+ <thead>
88
+ <tr> <th colspan="4" style="text-align: center;background-color: #8cbce2;">用户安检概况</th></tr>
89
+ </thead>
90
+ <tbody>
91
+ <tr v-show="nextCheckDateShow">
92
+ <td colspan="1" style="text-align: center;border: #E9E9E9 solid 1px;">下次安检时间:</td>
93
+ <td colspan="3" :style=style>{{ model.f_next_check_date }}</td>
94
+ </tr>
95
+ <tr>
96
+ <td colspan="1" style="text-align: center;border: #E9E9E9 solid 1px;">上次安检时间:</td>
97
+ <td colspan="3" style="text-align: center;border: #E9E9E9 solid 1px;">{{ model.f_last_check_date }}</td>
98
+ </tr>
99
+ <tr>
100
+ <td colspan="1" style="text-align: center;border: #E9E9E9 solid 1px;">安检员:</td>
101
+ <td colspan="3" style="text-align: center;border: #E9E9E9 solid 1px;">{{model.f_checker_name}}</td>
102
+ </tr>
103
+ <tr>
104
+ <td style="text-align: center;border: #E9E9E9 solid 1px;width: 17%">到达时间:</td>
105
+ <td style="text-align: center;border: #E9E9E9 solid 1px;width: 33%">{{ model.f_onsite_time }}</td>
106
+ <td style="text-align: center;border: #E9E9E9 solid 1px;width: 17%">离开时间:</td>
107
+ <td style="text-align: center;border: #E9E9E9 solid 1px;width: 33%">{{ model.f_offsite_time }}</td>
108
+ </tr>
109
+ <tr>
110
+ <td style="text-align: center;border: #E9E9E9 solid 1px;width: 17%">入户状态:</td>
111
+ <td style="text-align: center;border: #E9E9E9 solid 1px;width: 33%">{{ model.f_entry_status }}</td>
112
+ <td style="text-align: center;border: #E9E9E9 solid 1px;width: 17%" >燃气使用:</td>
113
+ <td style="text-align: center;border: #E9E9E9 solid 1px;width: 33%">{{ model.f_usegas }}</td>
114
+ </tr>
115
+ <tr>
116
+ <td colspan="1" style="text-align: center;border: #E9E9E9 solid 1px;width: 17%" >机械读数:</td>
117
+ <td colspan="3" style="text-align: center;border: #E9E9E9 solid 1px;width: 33%">{{ model.f_base_num_machinery }}</td>
118
+ </tr>
119
+ <tr >
120
+ <td colspan="1" style="text-align: center;border: #E9E9E9 solid 1px;">用户满意度:</td>
121
+ <td colspan="1" style="text-align: center;border: #E9E9E9 solid 1px;">{{ model.f_client_evaluation }}</td>
122
+ <td colspan="1" v-if="!(model.ajresult && (model.ajresult.indexOf('有隐患') >=0))" style="text-align: center;border: #E9E9E9 solid 1px;">安检结果:</td>
123
+ <td colspan="1" v-if="!(model.ajresult && (model.ajresult.indexOf('有隐患') >= 0))" style="text-align: center;border: #E9E9E9 solid 1px;">{{ model.ajresult }}</td>
124
+ <td colspan="1" v-if="model.ajresult && (model.ajresult.indexOf('有隐患') >= 0)" style="text-align: center;border: #E9E9E9 solid 1px;color:red;">安检结果:</td>
125
+ <td colspan="1" v-if="model.ajresult && (model.ajresult.indexOf('有隐患') >= 0)" style="text-align: center;border: #E9E9E9 solid 1px;color:red;">{{ model.ajresult }}</td>
126
+ </tr>
127
+ <tr>
128
+ <td colspan="1" v-if="model.ajresult && (model.ajresult.indexOf('有隐患') >= 0)" style="text-align: center;border: #E9E9E9 solid 1px;color:red;">隐患详情:</td>
129
+ <td colspan="3" v-if="model.ajresult && (model.ajresult.indexOf('有隐患') >= 0)" style="text-align: center;border: #E9E9E9 solid 1px;word-wrap:break-word;word-break:break-all;width:87%;color:red;">
130
+ <span v-for="deviceCollect in model.deviceCollects">
131
+ <span class="li-font" :class="[deviceCollect.value.indexOf('有隐患') >-1 ? 'defectcs' : '']" >
132
+ {{deviceCollect.name}}:{{deviceCollect.value}}&nbsp;&nbsp;&nbsp;
133
+ </span>
134
+ <br>
135
+ </span>
136
+ </td>
137
+ <td colspan="1" v-if="!(model.ajresult && (model.ajresult.indexOf('有隐患') >=0))" style="text-align: center;border: #E9E9E9 solid 1px;">隐患详情:</td>
138
+ <td colspan="3" v-if="!(model.ajresult && (model.ajresult.indexOf('有隐患') >=0))" style="text-align: center;border: #E9E9E9 solid 1px;word-wrap:break-word;word-break:break-all;width:87%">
139
+ <span v-for="deviceCollect in model.deviceCollects">
140
+ <span class="li-font" :class="[deviceCollect.value.indexOf('有隐患') >-1 ? 'defectcs' : '']" >
141
+ {{deviceCollect.name}}:{{deviceCollect.value}}&nbsp;&nbsp;&nbsp;
142
+ </span>
143
+ <br>
144
+ </span>
145
+ </td>
146
+ </tr>
147
+ </tbody>
148
+ </table>
149
+ <table class="table table-striped table-bordered" v-if="model.safecheckitem.length>0 && model.datasource =='newos'">
150
+ <thead>
151
+ <tr> <th colspan="4" style="text-align: center;background-color: #8cbce2;">隐患详情</th></tr>
152
+ </thead>
153
+ <tr v-for="checkitem in model.safecheckitem">
154
+ <td style="text-align: center;border: #E9E9E9 solid 1px;width: 33%">{{ checkitem.f_item_name }}</td>
155
+ <td style="text-align: center;border: #E9E9E9 solid 1px;width: 33%">{{ checkitem.f_is_repaired }}</td>
156
+ <td style="text-align: center;border: #E9E9E9 solid 1px;width: 33%" v-if="checkitem.f_path!='' && checkitem.f_path!=null">
157
+ <img-self :src="'rs/image/file/'+checkitem.f_path" style="float: left" width="100" height="150"></img-self>
158
+ </td>
159
+ <td style="text-align: center;border: #E9E9E9 solid 1px;width: 33%;color:red" v-if="checkitem.f_filename_paths!='' && checkitem.f_filename_paths!=null">
160
+ <span class="defectcs" @click="getDefectImg(checkitem.f_filename_paths)" >查看图片</span>
161
+ <!-- <img-self :src="'rs/image/file/'+checkitem.f_path" style="float: left" width="100" height="150"></img-self>-->
162
+ </td>
163
+ <td style="text-align: center;border: #E9E9E9 solid 1px;width: 33%" v-if="checkitem.f_path=='' && checkitem.f_path==null">
164
+ 暂无图片
165
+ </td>
166
+ </tr>
167
+ </table>
168
+ <table class="table table-striped table-bordered" v-if="model.f_notified_path!='' && model.f_notified_path!=null">
169
+ <thead>
170
+ <tr> <th colspan="4" style="text-align: center;background-color: #8cbce2;">隐患整改通知单</th></tr>
171
+ </thead>
172
+ <tr>
173
+ <td style="text-align: center;border: #E9E9E9 solid 1px;width: 33%" v-if="model.f_notified_path!='' && model.f_notified_path!=null">
174
+ <img-self :src="'rs/image/file/'+model.f_notified_path" style="float: left" width="100" height="150"></img-self>
175
+ </td>
176
+ </tr>
177
+ </table>
178
+
179
+ <table class="table table-striped table-bordered" v-if="model.f_entry_status=='入户' && model.datasource =='newos'">
180
+ <thead>
181
+ <tr> <th colspan="4" style="text-align: center;background-color: #8cbce2;">总体安检照片</th></tr>
182
+ </thead>
183
+ <tbody> <tr>
184
+ <td style="margin: auto;text-align: center">
185
+ <div class="container" style="background: #FFFFFF;margin:0;width:100%;">
186
+ <div class="img" v-for="img in model.f_overall_imgs">
187
+ <img-self :src="img.f_overall_path" style="float: left" width="100" height="150"></img-self>
188
+ </div>
189
+ </div>
190
+ </td>
191
+ </tr>
192
+ </tbody>
193
+ </table>
194
+ <div class="auto info-content" v-if="hasCheck === 0">
195
+ <div class="row">
196
+ <strong>暂无安检信息</strong>
197
+ </div>
198
+ </div>
199
+ <div class="auto info-content" v-if="hasCheck === -1">
200
+ <div class="row">
201
+ <p>正在获取安检信息...</p>
202
+ </div>
203
+ </div>
204
+ </div>
205
+ <modal :show.sync="imgshow2" v-ref:modal backdrop="true">
206
+ <header slot="modal-header" class="modal-header">
207
+ {{model.f_entry_status}}照片
208
+ </header>
209
+ <article slot="modal-body" class="modal-body">
210
+ <div class="from-group">
211
+ <div class="row">
212
+ <div class="col-md-6">
213
+ <img-self v-if="this.model.f_entry_status=='到访不遇'" :src="showimg3" width="300" height="400"></img-self>
214
+ </div><div class="col-md-6">
215
+ <img-self v-if="this.model.f_entry_status=='拒检'" :src="showimg4" width="300" height="400"></img-self>
216
+ </div>
217
+ </div>
218
+ </div>
219
+ </article>
220
+ <footer slot="modal-footer" class="modal-footer" v-show="false">
221
+ <button type="button" class="btn btn-success" @click='imgclose'>关闭</button>
222
+ </footer>
223
+ </modal>
224
+ <modal :show.sync="defectImgShow" v-ref:modal styles="height:80vh">
225
+ <header slot="modal-header" class="modal-header">
226
+ 隐患照片
227
+ </header>
228
+ <article slot="modal-body" class="modal-body" >
229
+ <div class="from-group">
230
+ <div class="row">
231
+ <div class="col-sm-6" v-for="img in defectImgArr">
232
+ <img-self :src="'rs/image/file/'+img.f_path" style="float: left" width="300" height="400"></img-self>
233
+ </div>
234
+ </div>
235
+ </div>
236
+ </article>
237
+ <footer slot="modal-footer" class="modal-footer" v-show="false">
238
+ <button type="button" class="btn btn-success" @click='imgDefectClose'>关闭</button>
239
+ </footer>
240
+ </modal>
241
+ </template>
242
+ <script>
243
+ /**
244
+ *用户信息
245
+ *安检信息
246
+ */
247
+
248
+ import {HttpResetClass} from 'vue-client'
249
+ import {runLogic} from 'vue-client/src/util/apiUtils'
250
+
251
+ let getSafeCheckGen = async function (self) {
252
+ // 获取安检信息
253
+ try {
254
+ let http = new HttpResetClass()
255
+ let param = {
256
+ f_userfiles_id: self.data.f_userfiles_id,
257
+ f_userinfo_id: self.data.f_userinfo_id
258
+ }
259
+ if (self.data.f_olduserinfo_code) {
260
+ param.f_olduserinfo_code = self.data.f_olduserinfo_code
261
+ }
262
+ let getSafeCheck = await http.load('POST', 'api/af-revenue/logic/getSafecheck', param, {resolveMsg: null, rejectMsg: null})
263
+ if (!(JSON.stringify(getSafeCheck.data) == '{}')) {
264
+ self.model = {}
265
+ self.model = Object.assign({}, self.model, getSafeCheck.data)
266
+ // self.model.safecheckitem[0].f_filename_paths = '50eeff69c7ff78bd7831f17ff181f4b2-device10-0-f_items1.jpg?0.10122581621022331,6a6ce267f9ddd8904f6a52aeabe11c0b-device10-0-f_items1.jpg?0.9118883785380048'
267
+
268
+ // 处理图片路径
269
+ if (self.model.f_overall_imgs && self.model.f_overall_imgs.length > 0) {
270
+ for (let img of self.model.f_overall_imgs) {
271
+ if (img.f_overall_path && img.f_overall_path !== '') {
272
+ const filename = img.f_overall_path.split('/')[img.f_overall_path.split('/').length - 1]
273
+ try {
274
+ const res = await runLogic('getImageFileLogic', {filename}, 'af-telephone')
275
+ if (res && res.data && res.data.filepath) {
276
+ img.f_overall_path = res.data.filepath
277
+ }
278
+ } catch (error) {
279
+ console.error('获取图片路径失败:', error)
280
+ }
281
+ }
282
+ }
283
+ }
284
+
285
+ self.hasCheck = 1
286
+ } else {
287
+ self.hasCheck = 0
288
+ }
289
+ } catch (error) {
290
+ self.hasCheck = 0
291
+ }
292
+
293
+ if (new Date(self.model.f_next_check_date) < new Date(self.nowdate)) {
294
+ self.style = 'text-align: center;border: #E9E9E9 solid 1px;color:red'
295
+ } else {
296
+ self.style = 'text-align: center;border: #E9E9E9 solid 1px;'
297
+ }
298
+ }
299
+
300
+ export default {
301
+ title: '安检信息',
302
+ data () {
303
+ return {
304
+ model: {},
305
+ style: 'text-align: center;border: #E9E9E9 solid 1px;',
306
+ nowdate: this.$login.toStandardTimeString(),
307
+ hasCheck: -1,
308
+ imgshow: false,
309
+ imgshow2: false,
310
+ defectImgShow: false,
311
+ defectImgArr: [],
312
+ showimg1: '',
313
+ showimg2: '',
314
+ showimg3: '',
315
+ nextCheckDateShow: true,
316
+ showimg4: ''
317
+ }
318
+ },
319
+ props: ['data'],
320
+ ready () {
321
+ getSafeCheckGen(this)
322
+ if (this.$appdata.getSingleValue('是否显示下次安检时间') == '否') {
323
+ this.nextCheckDateShow = false
324
+ }
325
+ },
326
+ methods: {
327
+ async getImgPath (name) {
328
+ // 从url中获取最后的文件名,用/分割
329
+ const filename = name.split('/')[name.split('/').length - 1]
330
+ const res = await runLogic('getImageFileLogic', {filename})
331
+ console.log(res)
332
+ return res.data.filepath
333
+ },
334
+ getDefectImg (row) {
335
+ this.defectImgShow = true
336
+ const itemsArray = row.split(',')
337
+ this.defectImgArr = itemsArray.map(item => ({
338
+ f_path: item
339
+ }))
340
+ },
341
+ imgDefectClose () {
342
+ this.defectImgShow = false
343
+ this.defectImgArr = []
344
+ },
345
+ showpicture2 () {
346
+ this.imgshow2 = true
347
+ }
348
+ },
349
+ watch: {
350
+ 'data' () {
351
+ if (this.data == null) {
352
+ this.hasCheck = 0
353
+ this.model = {}
354
+ } else {
355
+ getSafeCheckGen(this)
356
+ }
357
+ }
358
+ }
359
+ }
360
+ </script>
361
+ <style scoped>
362
+ .defectcs{
363
+ cursor: pointer;
364
+ }
365
+ .img {
366
+ border: 1px solid #9773ed;
367
+ width: auto;
368
+ height: auto;
369
+ float: left;
370
+ text-align: center;
371
+ margin: 6px;
372
+ }
373
+
374
+ img {
375
+ margin: 6px;
376
+ }
377
+
378
+
379
+ .container{
380
+ margin: 10px auto;
381
+ width: 80%;
382
+ height: auto;
383
+ }
384
+ div::-webkit-scrollbar {
385
+ width: 0 !important;
386
+ height: 0 !important;
387
+ }
388
+
389
+ div{
390
+ -ms-overflow-style: none;
391
+ overflow: -moz-scrollbars-none;
392
+ }
393
+ .divmask {
394
+ pointer-events: none;
395
+ }
396
+ .app-header {
397
+ border-radius: 50%;
398
+ background: rgba(73, 158, 223, 0.4);
399
+ color: #FFF;
400
+ padding: 20px;
401
+ text-align: center;
402
+ font-size: 1.2em;
403
+ z-index: 10;
404
+ opacity:0.5;
405
+ bottom: 50px;
406
+ margin-top: -20px;
407
+ position: absolute;
408
+ top: 10%;
409
+ right: 2%;
410
+ height: 8%;
411
+ }
412
+ </style>
@@ -30,5 +30,9 @@ export default function () {
30
30
  Vue.component('user-info-detail-manage-new', (resolve) => { require(['./UserInfoDetailManageNew'], resolve) })
31
31
  // 黑名单管理
32
32
  Vue.component('black-list-list', (resolve) => { require(['./BlackList/BlackListList'], resolve) })
33
+ // 安检信息
34
+ Vue.component('sale-safecheck-info', (resolve) => { require(['./SafeCheck'], resolve) })
35
+ // 未处理隐患信息
36
+ Vue.component('sale-hidden-danger-info', (resolve) => { require(['./HiddenDangerInfo'], resolve) })
33
37
  }
34
38
 
package/src/main.js CHANGED
@@ -2,7 +2,7 @@ import Vue from 'vue'
2
2
  import all from 'vue-client/src/all'
3
3
  import App from './App'
4
4
  import system from 'system-clients/src/system'
5
- import FilialeSale from './filiale/meihekou/sale'
5
+ import FilialeSale from './filiale/dexin/sale'
6
6
  import sale from './sale'
7
7
  import address from 'address-client/src/address'
8
8
  import ldap from 'ldap-clients/src/ldap'