sale-client 4.4.1 → 4.4.3

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 (32) hide show
  1. package/.gradle/5.2.1/fileChanges/last-build.bin +0 -0
  2. package/.gradle/5.2.1/fileHashes/fileHashes.lock +0 -0
  3. package/.gradle/5.2.1/gc.properties +0 -0
  4. package/.gradle/9.3.0/checksums/checksums.lock +0 -0
  5. package/.gradle/9.3.0/fileChanges/last-build.bin +0 -0
  6. package/.gradle/9.3.0/fileHashes/fileHashes.lock +0 -0
  7. package/.gradle/9.3.0/gc.properties +0 -0
  8. package/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  9. package/.gradle/buildOutputCleanup/cache.properties +2 -0
  10. package/.gradle/vcs-1/gc.properties +0 -0
  11. package/build/dev-server.js +77 -71
  12. package/package.json +1 -1
  13. package/src/components/charge/ServiceEvaluation.vue +396 -0
  14. package/src/components/common/userinfo_detail/iot_detail/QueryInstruct.vue +1 -1
  15. package/src/components/revenue/comprehen/ComprehenOperation/OtherGas/OtherGas.vue +2 -2
  16. package/src/components/revenue/comprehen/ComprehenOperation/ReplaceCard/ReplaceCardManage.vue +2 -2
  17. package/src/components/revenue/comprehen/ComprehenOperation/newchangemeter/ChangeMeter.vue +1 -1
  18. package/src/components/revenue/comprehen/ComprehenOperation/newchangemeter/ResetMeter.vue +1 -1
  19. package/src/filiale/kelai/CardMeterCenter.vue +3 -3
  20. package/src/filiale/kelai/ChargeManage.vue +265 -172
  21. package/src/filiale/kelai/ChargeOper.vue +12 -2
  22. package/src/filiale/kelai/GarbageCharge.vue +4 -4
  23. package/src/filiale/kelai/IOTMeterCenter.vue +3 -3
  24. package/src/filiale/kelai/MachineMeterCenter.vue +2 -2
  25. package/src/filiale/kelai/ShowCardSellGas.vue +3 -3
  26. package/src/filiale/kelai/sale.js +1 -0
  27. package/src/filiale/meihekou/GasPriceUser.vue +503 -503
  28. package/src/filiale/meihekou/UserPriceChangeManage.vue +709 -709
  29. package/src/filiale/ronghao/meterinfodetail.vue +482 -482
  30. package/src/plugins/CevEvaluatorPlugin.js +143 -0
  31. package/src/sale.js +2 -0
  32. package/src/saleRes.json +2 -1
File without changes
File without changes
@@ -0,0 +1,2 @@
1
+ #Wed May 13 15:19:48 CST 2026
2
+ gradle.version=5.2.1
File without changes
@@ -1,71 +1,77 @@
1
- var path = require('path')
2
- var checkVersion = require('./versionCheck.js')
3
- checkVersion()
4
- const [ serverRul, localUrl ] = ['http://121.36.106.17:31467/', 'http://121.36.106.17:31467/']
5
- var merge = require('webpack-merge')
6
- var baseConfig = require('./webpack.dev.conf')
7
- var devConfig = {
8
- devServer: {
9
- contentBase: path.join(__dirname, 'src'),
10
- hot: true,
11
- publicPath: baseConfig.output.publicPath,
12
- historyApiFallback: true,
13
- host: '127.0.0.1',
14
- port: 8089,
15
- open: false,
16
- stats: {
17
- colors: false, // 配置控制台输出彩色日志
18
- chunks: false, // 不输出构建 chunk 信息
19
- children: false // 不输出子模块构建信息
20
- },
21
- proxy: {
22
- // '/api/af-revenue/batchdeduction/all': {
23
- // pathRewrite: {
24
- // '/api/af-revenue/batchdeduction/all': '/batchdeduction/all'
25
- // },
26
- // target: localUrl
27
- // },
28
- // '/api/af-revenue/logic': {
29
- // pathRewrite: {
30
- // '/api/af-revenue/logic': '/logic'
31
- // },
32
- // target: localUrl
33
- // },
34
- // '/api/af-revenue/file': {
35
- // // pathRewrite: {
36
- // // '/api/af-revenue/file': '/file'
37
- // // },
38
- // target: localUrl
39
- // },
40
- // '/weixin2/rs':{
41
- //
42
- // target: 'http://410663id1ia4.vicp.fun'
43
- // },
44
- // '/api/af-revenue/sql': {
45
- // pathRewrite: {
46
- // '/api/af-revenue/sql': '/sql'
47
- // },
48
- // target: localUrl
49
- // },
50
- '/rs/pay': {
51
- target: 'http://localhost:8080'
52
- },
53
- // '/api/af-revenue': {
54
- // pathRewrite: {
55
- // '/api/af-revenue': '/'
56
- // },
57
- // target: "http://localhost:9026"
58
- // },
59
- '/api': {
60
- target: serverRul
61
- },
62
- '/resource': {
63
- target: serverRul
64
- },
65
- '/rs': {
66
- target: serverRul
67
- }
68
- }
69
- }
70
- }
71
- module.exports = merge(baseConfig, devConfig)
1
+ var path = require('path')
2
+ var checkVersion = require('./versionCheck.js')
3
+ checkVersion()
4
+ const [ serverRul, localUrl ] = ['http://192.168.50.67:31567/', 'http://localhost:9026']
5
+ var merge = require('webpack-merge')
6
+ var baseConfig = require('./webpack.dev.conf')
7
+ var devConfig = {
8
+ devServer: {
9
+ contentBase: path.join(__dirname, 'src'),
10
+ hot: true,
11
+ publicPath: baseConfig.output.publicPath,
12
+ historyApiFallback: true,
13
+ host: '127.0.0.1',
14
+ port: 8089,
15
+ open: false,
16
+ stats: {
17
+ colors: false, // 配置控制台输出彩色日志
18
+ chunks: false, // 不输出构建 chunk 信息
19
+ children: false // 不输出子模块构建信息
20
+ },
21
+ proxy: {
22
+ // '/api/af-revenue/batchdeduction/all': {
23
+ // pathRewrite: {
24
+ // '/api/af-revenue/batchdeduction/all': '/batchdeduction/all'
25
+ // },
26
+ // target: localUrl
27
+ // },
28
+ '/api/af-revenue/logic': {
29
+ pathRewrite: {
30
+ '/api/af-revenue/logic': '/logic'
31
+ },
32
+ target: localUrl
33
+ },
34
+ // '/api/af-revenue/file': {
35
+ // // pathRewrite: {
36
+ // // '/api/af-revenue/file': '/file'
37
+ // // },
38
+ // target: localUrl
39
+ // },
40
+ // '/weixin2/rs':{
41
+ //
42
+ // target: 'http://410663id1ia4.vicp.fun'
43
+ // },
44
+ '/api/af-revenue/sql': {
45
+ pathRewrite: {
46
+ '/api/af-revenue/sql': '/sql'
47
+ },
48
+ target: localUrl
49
+ },
50
+ '/rs/pay': {
51
+ target: 'http://localhost:8080'
52
+ },
53
+ // '/api/af-revenue': {
54
+ // pathRewrite: {
55
+ // '/api/af-revenue': '/'
56
+ // },
57
+ // target: "http://localhost:9026"
58
+ // },
59
+ '/api': {
60
+ target: serverRul,
61
+ secure: false,
62
+ changeOrigin: true,
63
+ },
64
+ '/resource': {
65
+ target: serverRul,
66
+ secure: false,
67
+ changeOrigin: true
68
+ },
69
+ '/rs': {
70
+ target: serverRul,
71
+ secure: false,
72
+ changeOrigin: true,
73
+ }
74
+ }
75
+ }
76
+ }
77
+ module.exports = merge(baseConfig, devConfig)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sale-client",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "收费模块前台组件",
5
5
  "main": "src/index.js",
6
6
  "scripts": {
@@ -0,0 +1,396 @@
1
+ <template>
2
+ <div class="evaluation-panel">
3
+ <div class="status-bar">
4
+ <div class="status-item">
5
+ <span :class="['status-badge', deviceStatusClass]"></span>
6
+ <span>设备状态: {{ deviceStatusText }}</span>
7
+ </div>
8
+ <div class="status-item">
9
+ <span>评价状态: {{ evaluationStatus }}</span>
10
+ </div>
11
+ </div>
12
+ <div class="auto-process" v-if="autoProcessMessage">
13
+ <h4>评价器状态</h4>
14
+ <p>{{ autoProcessMessage }}</p>
15
+ </div>
16
+ <div class="section">
17
+ <button v-on:click="handleEvaluate" v-bind:disabled="loading">发起评价</button>
18
+ <button v-on:click="checkStatus" v-bind:disabled="loading">检查在线状态</button>
19
+ </div>
20
+ </div>
21
+ </template>
22
+
23
+ <script>
24
+ import co from "co";
25
+
26
+ module.exports = {
27
+ title: 'EvaluationPanel',
28
+ data () {
29
+ return {
30
+ signInParams: {
31
+ num: this.$login.f.id,
32
+ name: this.$login.f.name,
33
+ pos: this.$login.f.f_show_rolestr,
34
+ org: this.$login.f.f_show_department_name,
35
+ equ: this.$login.f.f_show_department_name,
36
+ star: '5',
37
+ inf: `工号:${this.$login.f.id}`,
38
+ photo: '127.0.0.1:8068/photo.jpg'
39
+ },
40
+ loading: false,
41
+ response: null,
42
+ error: null,
43
+ deviceOnline: false,
44
+ deviceCheckTimer: null,
45
+ deviceCheckInterval: 10000,
46
+ evaluationStatus: '未发起',
47
+ // 组件销毁标志和请求跟踪
48
+ isComponentDestroyed: false,
49
+ pendingRequests: new Set()
50
+ }
51
+ },
52
+ props: {
53
+ row: {
54
+ type: Object,
55
+ default: undefined
56
+ }
57
+ },
58
+ beforeDestroy() {
59
+ this.cleanup();
60
+ },
61
+ destroyed() {
62
+ this.cleanup();
63
+ },
64
+ async ready() {
65
+ console.log('row', this.row)
66
+ await this.initSystem()
67
+ this.startDeviceStatusMonitoring()
68
+ },
69
+ methods: {
70
+ // 统一的清理方法
71
+ cleanup() {
72
+ console.log('开始清理组件资源');
73
+ this.isComponentDestroyed = true;
74
+
75
+ // 清理所有定时器
76
+ this.stopDeviceStatusMonitoring();
77
+
78
+ // 取消所有进行中的请求
79
+ this.pendingRequests.clear();
80
+
81
+ // 重置状态
82
+ this.loading = false;
83
+ },
84
+
85
+ // 安全执行方法,检查组件状态
86
+ safeExecute(callback) {
87
+ if (this.isComponentDestroyed) {
88
+ console.log('组件已销毁,停止执行');
89
+ return false;
90
+ }
91
+ return true;
92
+ },
93
+
94
+ async initSystem () {
95
+ if (!this.safeExecute()) return;
96
+
97
+ console.log('检查设备状态')
98
+ await this.checkStatus()
99
+ if (!this.safeExecute()) return;
100
+
101
+ console.log('设备在线')
102
+ if (this.deviceOnline) {
103
+ console.log('设备已就绪,可以开始评价')
104
+ }
105
+ },
106
+
107
+ // 提交评价
108
+ async submitEvaluation(value) {
109
+ if (!this.safeExecute()) return;
110
+
111
+ this.evaluationStatus = '未发起'
112
+ console.log('用户评价值:', value)
113
+ let req = await this.$resetpost('api/af-revenue/logic/saveEvaluationBussiness', {
114
+ f_orgid: this.$login.f.orgid,
115
+ f_userinfo_id: this.row.f_userinfo_id,
116
+ f_operatorid: this.$login.f.id,
117
+ f_satisfaction: 5 - value,
118
+ f_user_type: this.row.f_user_type
119
+ }, {resolveMsg: '提交评价成功', rejectMsg: '提交评价失败!'})
120
+ this.$dispatch('success', '评价')
121
+ },
122
+
123
+ handleEvaluate () {
124
+ if (!this.safeExecute()) return;
125
+
126
+ let self = this;
127
+ self.loading = true;
128
+ self.error = null;
129
+ self.response = null;
130
+ self.evaluationStatus = '等待用户评价'
131
+
132
+ const requestId = 'evaluate_' + Date.now();
133
+ this.pendingRequests.add(requestId);
134
+
135
+ this.$CEVEvaluator.startEvaluateDirect()
136
+ .then(async function (result) {
137
+ if (!self.safeExecute() || !self.pendingRequests.has(requestId)) return;
138
+
139
+ self.response = JSON.stringify(result.data, null, 2);
140
+ if (result.data.code === '0') {
141
+ console.log('result.data.data', result.data.data)
142
+ self.evaluationStatus = '用户已评价'
143
+ let res = await self.$showMessage(`用户已评价,请提交`, ['confirm', 'cancel'])
144
+ if (res !== 'confirm') return
145
+ self.submitEvaluation(result.data.data)
146
+ }
147
+ })
148
+ .catch(function(err) {
149
+ if (!self.safeExecute() || !self.pendingRequests.has(requestId)) return;
150
+
151
+ self.error = err.message || '评价启动失败';
152
+ self.showCeAlert('用户评价失败: ' + (err.message || '未知错误'), 'error');
153
+ self.evaluationStatus = '未发起'
154
+ })
155
+ .finally(function() {
156
+ self.pendingRequests.delete(requestId);
157
+ if (self.safeExecute()) {
158
+ self.loading = false;
159
+ }
160
+ });
161
+ },
162
+
163
+ // 启动设备状态定时监测
164
+ startDeviceStatusMonitoring() {
165
+ if (!this.safeExecute()) return;
166
+
167
+ // 先停止可能存在的旧定时器
168
+ this.stopDeviceStatusMonitoring();
169
+
170
+ this.deviceCheckTimer = setInterval(async () => {
171
+ if (!this.safeExecute()) {
172
+ this.stopDeviceStatusMonitoring();
173
+ return;
174
+ }
175
+
176
+ await this.checkStatus();
177
+ if (!this.safeExecute()) return;
178
+
179
+ if (this.deviceOnline) {
180
+ console.log('设备在线,状态正常')
181
+ }
182
+ }, this.deviceCheckInterval);
183
+ },
184
+
185
+ // 停止设备状态监测
186
+ stopDeviceStatusMonitoring() {
187
+ if (this.deviceCheckTimer) {
188
+ clearInterval(this.deviceCheckTimer);
189
+ this.deviceCheckTimer = null;
190
+ }
191
+ },
192
+
193
+ checkStatus () {
194
+ if (!this.safeExecute()) return;
195
+
196
+ let self = this;
197
+ self.loading = true;
198
+ self.error = null;
199
+ self.response = null;
200
+
201
+ const requestId = 'checkStatus_' + Date.now();
202
+ this.pendingRequests.add(requestId);
203
+
204
+ return co(
205
+ this.$CEVEvaluator.checkOnline()
206
+ .then(function(result) {
207
+ if (!self.safeExecute() || !self.pendingRequests.has(requestId)) return;
208
+
209
+ self.response = JSON.stringify(result.data, null, 2);
210
+ if (result.data.code === '0' && result.data.online === '1') {
211
+ self.deviceOnline = true
212
+ } else {
213
+ self.deviceOnline = false
214
+ self.showCeAlert('状态检查完成', 'success');
215
+ }
216
+ })
217
+ .catch(function(err) {
218
+ if (!self.safeExecute() || !self.pendingRequests.has(requestId)) return;
219
+
220
+ self.error = err.message || '状态检查失败';
221
+ self.showCeAlert('状态检查失败', 'error');
222
+ })
223
+ .finally(function() {
224
+ self.pendingRequests.delete(requestId);
225
+ if (self.safeExecute()) {
226
+ self.loading = false;
227
+ }
228
+ })
229
+ )
230
+ },
231
+
232
+ showCeAlert (message, type) {
233
+ if (!this.safeExecute()) return;
234
+
235
+ if (type === 'error') {
236
+ console.error(message);
237
+ this.$showAlert(message, 'danger', 2000);
238
+ } else {
239
+ console.log(message);
240
+ this.$showAlert(message, 'success', 2000);
241
+ }
242
+ }
243
+ },
244
+ computed: {
245
+ deviceStatusClass() {
246
+ if (this.loading) return 'loading';
247
+ return this.deviceOnline ? 'online' : 'offline';
248
+ },
249
+ deviceStatusText() {
250
+ if (this.loading) return '检测中...';
251
+ return this.deviceOnline ? '在线' : '离线';
252
+ },
253
+ autoProcessMessage () {
254
+ if (!this.deviceOnline) return '系统启动中,正在检查设备状态...'
255
+ return this.deviceOnline ? '系统已就绪,可以开始评价' : '系统初始化失败,请检查设备连接'
256
+ }
257
+ },
258
+ };
259
+ </script>
260
+
261
+ <style scoped>
262
+ .section {
263
+ margin-bottom: 20px;
264
+ padding: 15px;
265
+ border: 1px solid #e0e0e0;
266
+ border-radius: 5px;
267
+ }
268
+
269
+ .section h3 {
270
+ margin-top: 0;
271
+ color: #333;
272
+ border-bottom: 1px solid #ddd;
273
+ padding-bottom: 8px;
274
+ }
275
+
276
+ .input-group {
277
+ margin-bottom: 10px;
278
+ display: flex;
279
+ align-items: center;
280
+ }
281
+
282
+ .input-group label {
283
+ display: inline-block;
284
+ width: 80px;
285
+ font-weight: bold;
286
+ margin-right: 10px;
287
+ }
288
+
289
+ .input-group input {
290
+ flex: 1;
291
+ padding: 8px;
292
+ border: 1px solid #ccc;
293
+ border-radius: 3px;
294
+ max-width: 300px;
295
+ }
296
+
297
+ button {
298
+ margin-right: 10px;
299
+ margin-bottom: 10px;
300
+ padding: 10px 15px;
301
+ background-color: #4CAF50;
302
+ color: white;
303
+ border: none;
304
+ border-radius: 4px;
305
+ cursor: pointer;
306
+ font-size: 14px;
307
+ }
308
+
309
+ button:disabled {
310
+ background-color: #cccccc;
311
+ cursor: not-allowed;
312
+ }
313
+
314
+ button:hover:not(:disabled) {
315
+ background-color: #45a049;
316
+ }
317
+
318
+ .response, .error {
319
+ margin-top: 20px;
320
+ padding: 15px;
321
+ border-radius: 5px;
322
+ font-size: 14px;
323
+ }
324
+
325
+ .response {
326
+ background-color: #f0f9f0;
327
+ border-left: 4px solid #4CAF50;
328
+ }
329
+
330
+ .error {
331
+ background-color: #fef0f0;
332
+ border-left: 4px solid #f56c6c;
333
+ }
334
+
335
+ pre {
336
+ white-space: pre-wrap;
337
+ word-wrap: break-word;
338
+ margin: 0;
339
+ font-family: 'Courier New', monospace;
340
+ font-size: 13px;
341
+ }
342
+
343
+ h2 {
344
+ text-align: center;
345
+ color: #333;
346
+ margin-bottom: 30px;
347
+ }
348
+ .auto-process {
349
+ background: #fff3cd;
350
+ border-left: 4px solid #ffc107;
351
+ padding: 10px 15px;
352
+ margin: 15px 0;
353
+ border-radius: 4px;
354
+ }
355
+
356
+ .auto-process h4 {
357
+ color: #856404;
358
+ margin-bottom: 5px;
359
+ }
360
+ .status-item {
361
+ display: flex;
362
+ align-items: center;
363
+ gap: 8px;
364
+ margin: 5px 0;
365
+ }
366
+
367
+ .status-badge {
368
+ display: inline-block;
369
+ width: 12px;
370
+ height: 12px;
371
+ border-radius: 50%;
372
+ margin-right: 5px;
373
+ }
374
+
375
+ .online {
376
+ background: #2ecc71;
377
+ }
378
+
379
+ .offline {
380
+ background: #e74c3c;
381
+ }
382
+
383
+ .loading {
384
+ background: #f39c12;
385
+ animation: pulse 1.5s infinite;
386
+ }
387
+ .timer-badge {
388
+ display: inline-block;
389
+ padding: 3px 8px;
390
+ border-radius: 12px;
391
+ background: #3498db;
392
+ color: white;
393
+ font-size: 12px;
394
+ margin-left: 8px;
395
+ }
396
+ </style>
@@ -331,7 +331,7 @@ export default {
331
331
  this.cancelid = megrow.id
332
332
  },
333
333
  async confirmcenta () {
334
- let sql = `update t_instruct set f_cancel_inputtor = ${this.$login.f.name}, f_cancel_inputtor_id = ${this.$login.f.id},f_comments = ${this.cancelreason},f_instruct_state = '取消发送' WHERE id = ${this.cancelid}`
334
+ let sql = `update t_instruct set f_cancel_inputtor = '${this.$login.f.name}', f_cancel_inputtor_id = '${this.$login.f.id}',f_comments = '${this.cancelreason}',f_instruct_state = '取消发送' WHERE id = '${this.cancelid}'`
335
335
  await this.$resetpost('api/af-revenue/logic/runSQL', {sql: sql}, {resolveMsg: '操作成功', rejectMsg: '操作失败'})
336
336
  this.handcental = false
337
337
  this.$refs.paged.$refs.criteria.search()
@@ -407,7 +407,7 @@
407
407
  this.print = true
408
408
  }
409
409
  } else {
410
- this.$dispatch('success')
410
+ this.$dispatch('success', '其他补气')
411
411
  }
412
412
  },
413
413
  pregas () {
@@ -481,7 +481,7 @@
481
481
  this.$dispatch('cancelclean', this.row)
482
482
  },
483
483
  printok () {
484
- this.$dispatch('success')
484
+ this.$dispatch('success', '其他补气')
485
485
  }
486
486
  },
487
487
  events: {
@@ -298,7 +298,7 @@
298
298
  },
299
299
  eticket_toggle () {
300
300
  this.eticket_show = false
301
- this.$dispatch('success')
301
+ this.$dispatch('success', '补卡')
302
302
  },
303
303
  confirm () {
304
304
  this.eticket_msg = false
@@ -404,7 +404,7 @@
404
404
  },
405
405
  printok () {
406
406
  // 收据打完,判断是否还有其他票据进行请求 TODO
407
- this.$dispatch('success')
407
+ this.$dispatch('success', '补卡')
408
408
  },
409
409
  fillcardChange (val) {
410
410
  if (val === 'IC卡丢失或损坏') {
@@ -587,7 +587,7 @@ export default {
587
587
  if (msg == 'confirm') {
588
588
  this.$dispatch('get-new-row', this.row)
589
589
  } else {
590
- this.$dispatch('success')
590
+ this.$dispatch('success', '换表')
591
591
  }
592
592
  },
593
593
  flowmetermodels (label) {
@@ -616,7 +616,7 @@ export default {
616
616
  if (msg == 'confirm') {
617
617
  this.$dispatch('get-new-row', this.row)
618
618
  } else {
619
- this.$dispatch('success')
619
+ this.$dispatch('success', '换表')
620
620
  }
621
621
  },
622
622
  flowmetermodels (label) {
@@ -379,7 +379,7 @@
379
379
  }
380
380
  }
381
381
  } else {
382
- self.$dispatch('success')
382
+ self.$dispatch('success', '卡表收费')
383
383
  }
384
384
  self.clickConfirm = false
385
385
  } catch (error) {
@@ -728,7 +728,7 @@
728
728
  },
729
729
  eticket_toggle () {
730
730
  this.eticket_show = false
731
- this.$dispatch('success')
731
+ this.$dispatch('success','卡表收费')
732
732
  },
733
733
  clean () {
734
734
  this.$info('取消操作')
@@ -745,7 +745,7 @@
745
745
  this.$CommonService.openEticket(this.row.id, '售气收费')
746
746
  }
747
747
  }
748
- this.$dispatch('success')
748
+ this.$dispatch('success','卡表收费')
749
749
  },
750
750
  pregas () {
751
751
  this.dymoney = 0