sale-client 4.3.21 → 4.3.23

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.
@@ -1,2 +1,2 @@
1
- #Mon Oct 13 17:27:02 CST 2025
1
+ #Mon Jan 05 11:37:36 CST 2026
2
2
  gradle.version=5.2.1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # Change Log
2
2
  所有关于本产品的变化都在该文档里。
3
+ ##4.3.22 2023-03-31 @张科科
4
+ - 提交 洪雅 综合收费界面 点火状态 改为 通气状态 左侧表具信息 增加通气状态的显示
5
+
3
6
  ##1.8.0 2019-09-19 @郭伟
4
7
  - 切分支,SQLchange分支准备改f_filaleids
5
8
 
@@ -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://116.204.64.92:31467/', 'http://116.204.64.92:31467/']
4
+ const [ serverRul, localUrl ] = ['http://192.168.50.67:31567/', 'http://192.168.50.67:31567/']
5
5
  var merge = require('webpack-merge')
6
6
  var baseConfig = require('./webpack.dev.conf')
7
7
  var devConfig = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sale-client",
3
- "version": "4.3.21",
3
+ "version": "4.3.23",
4
4
  "description": "收费模块前台组件",
5
5
  "main": "src/index.js",
6
6
  "scripts": {
@@ -1,188 +1,315 @@
1
1
  <template>
2
- <div class="row" style="height:8%">
3
- <div class="col-sm-2 form-group" >
4
- <label for="f_hand_date" class="font_normal_body">上传日期</label>
5
- <datepicker style="width:60%" id="f_hand_date" placeholder="上传日期"
6
- :value.sync="upload_date"
7
- :format="'yyyy-MM-dd'"
8
- class="datepicker"
9
- :show-reset-button="true">
10
- </datepicker>
11
- </div>
12
- <div class="col-sm-2 form-group" >
13
- <label class="font_normal_body">分类</label>
14
- <v-select :value.sync="fusetype" :options='fusetypes' placeholder='分类' close-on-select></v-select>
15
- </div>
16
- <div style="float: right">
17
- <button class="button_search" @click="selfSearch()" style="float:right;margin-right: 5px" v-el:cba>查询</button>
2
+ <div>
3
+ <div class="row" style="height:8%">
4
+ <div class="col-sm-2 form-group">
5
+ <label class="font_normal_body">上传日期</label>
6
+ <datepicker style="width:60%"
7
+ :value.sync="upload_date"
8
+ :format="'yyyy-MM-dd'"
9
+ class="datepicker"
10
+ :show-reset-button="true">
11
+ </datepicker>
12
+ </div>
13
+
14
+ <div class="col-sm-2 form-group">
15
+ <label class="font_normal_body">分类</label>
16
+ <v-select :value.sync="fusetype"
17
+ :options='fusetypes'
18
+ placeholder='分类'
19
+ close-on-select>
20
+ </v-select>
21
+ </div>
22
+
23
+ <div style="float: right">
24
+ <button class="button_search"
25
+ @click="selfSearch()"
26
+ style="float:right;margin-right: 5px">
27
+ 查询
28
+ </button>
29
+ </div>
18
30
  </div>
19
- </div>
20
- <div class="panel panel-info auto" style="overflow-y: auto;height:100%" id="apps">
21
- <!-- <div class="panel-heading auto">-->
22
- <!-- 上传附件记录-->
23
- <!-- </div>-->
24
31
 
25
- <div class="tab-content span" style="min-height:300px" id="app">
26
- <div style="padding:0px 0px 10px 0px;margin-left: 20px;overflow: auto;">
32
+ <div class="panel panel-info auto" style="overflow-y: auto;height:100%">
33
+ <div class="tab-content span" style="min-height:300px">
34
+ <div style="padding:0 0 10px 0;margin-left: 20px;overflow: auto;">
27
35
 
28
- <!-- 时间轴显示 -->
29
- <!-- 工单的基本信息 -->
36
+ <timeline>
37
+ <timeline-item v-for="item in files"
38
+ :color="$index === files.length - 1 ? 'blue' : 'default'">
30
39
 
40
+ <div class="row">
41
+ <p>{{item.days}}</p>
31
42
 
32
- <!-- <div class="flex-row" v-for="item in files" ><span >-&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;</span></div>-->
33
- <timeline >
34
- <timeline-item v-for="item in files"
35
- :color="$index === files.length - 1 ? 'blue' : 'default'">
36
- <div class="row" >
43
+ <div v-for="file in item.arrays" class="col-sm-6">
37
44
 
45
+ <div style="height:180px;">
46
+ <img style="height:100%;cursor:pointer"
47
+ :src="file.f_downloadURL"
48
+ @click="preview(file)"/>
49
+ </div>
38
50
 
39
- <p> {{item.days}}</p>
51
+ <div style="height:190px;">
52
+ <div class="showtext">上传时间: {{file.f_uploaddate}}</div>
53
+ <div class="showtext">操作员: {{file.f_operator}}</div>
54
+ <div class="showtext">分类: {{file.fusetype}}</div>
55
+ <div class="showtext">文件说明: {{file.fremarks}}</div>
40
56
 
41
- <!-- 派单 -->
42
- <div v-for="file in item.arrays" class="col-sm-6">
57
+ <div class="flex-row showtext">
58
+ <a href="javascript:;" @click="preview(file)">预览</a>
43
59
 
44
- <div style="height:180px;">
45
- <img style="height:100%" :src="file.f_downloadURL"/>
46
- </div>
60
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
47
61
 
48
- <div style="height:190px;">
49
- <div class="showtext">上传时间:&nbsp;<span>{{file.f_uploaddate}}</span></div>
50
- <div class="showtext">操作员:&nbsp;<span>{{file.f_operator}}</span></div>
51
- <div class="showtext">分类:&nbsp;<span>{{file.fusetype}}</span></div>
52
- <div class="showtext">文件说明:&nbsp;{{file.fremarks}}</div>
53
- <div class="flex-row showtext">
54
- <a target="_blank" :href="file.f_downloadURL">预览</a>
55
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
56
- <a v-show="isDelete == '1'" @click="delet($index,file)">删除</a>
62
+ <a v-show="isDelete == '1'"
63
+ @click="delet($index,file)">
64
+ 删除
65
+ </a>
66
+ </div>
57
67
  </div>
68
+
58
69
  </div>
59
70
  </div>
60
- </div>
61
71
 
62
- </timeline-item>
63
- </timeline>
72
+ </timeline-item>
73
+ </timeline>
74
+
75
+ </div>
76
+ </div>
77
+ </div>
78
+
79
+ <!-- 预览弹框 -->
80
+ <div v-if="previewVisible" class="preview-mask" @click="closePreview">
81
+ <div class="preview-box" @click.stop>
82
+
83
+ <!-- 图片 -->
84
+ <img v-if="isImage(previewUrl)"
85
+ :src="previewUrl"
86
+ class="preview-img"
87
+ :style="{ transform: 'scale(' + scale + ')' }"
88
+ @wheel.prevent="handleWheel"/>
89
+
90
+ <!-- 其他文件 -->
91
+ <iframe v-else
92
+ :src="previewUrl"
93
+ class="preview-iframe">
94
+ </iframe>
95
+
96
+ <span class="preview-close" @click="closePreview">×</span>
64
97
  </div>
65
98
  </div>
99
+
66
100
  </div>
67
101
  </template>
102
+
68
103
  <script>
69
- import {HttpResetClass} from 'vue-client'
104
+ import {HttpResetClass} from 'vue-client'
70
105
 
71
106
  export default {
72
- title: '附件上传记录',
73
- props: {
74
- row: ''
107
+ title: '附件上传记录',
108
+ props: {
109
+ row: ''
110
+ },
111
+ data () {
112
+ return {
113
+ upload_date: '',
114
+ fusetype: [],
115
+ files: [],
116
+ fusetypes: [],
117
+ isDelete: '0',
118
+ userinfo_id: '',
119
+
120
+ previewVisible: false,
121
+ previewUrl: '',
122
+ scale: 1
123
+ }
124
+ },
125
+
126
+ methods: {
127
+
128
+ selfSearch () {
129
+ this.getFiles()
130
+ },
131
+
132
+ preview(file) {
133
+ this.previewUrl = file.f_downloadURL
134
+ this.previewVisible = true
135
+ this.scale = 1
136
+ },
137
+
138
+ closePreview() {
139
+ this.previewVisible = false
140
+ this.previewUrl = ''
141
+ },
142
+ handleKeydown(e) {
143
+ if (e.key === 'Escape' || e.keyCode === 27) {
144
+ if (this.previewVisible) {
145
+ this.closePreview()
146
+ }
147
+ }
148
+ },
149
+
150
+ isImage(url) {
151
+ return /\.(jpg|jpeg|png|gif)$/i.test(url)
75
152
  },
76
- data () {
77
- return {
78
-
79
- upload_date: '',
80
- fusetype: [],
81
- files: [],
82
- fusetypes: [],
83
- isDelete: '0', // 删除按钮,可以进行控制(权限等)
84
- userinfo_id: '',
85
- images: ''
153
+
154
+ handleWheel(e) {
155
+ if (e.deltaY > 0) {
156
+ this.scale -= 0.1
157
+ } else {
158
+ this.scale += 0.1
86
159
  }
160
+
161
+ if (this.scale < 0.2) this.scale = 0.2
162
+ if (this.scale > 5) this.scale = 5
87
163
  },
88
- methods: {
89
-
90
- selfSearch () {
91
- this.getFiles()
92
- },
93
- async getfusetypes () {
94
- this.fusetypes.push({label: '全部', value: ''})
95
- let http = new HttpResetClass()
96
- let res = await http.load('POST', 'api/af-revenue/sql/singleTable_OrderBy',
97
- {data: {items: 'fusetype',
98
- tablename: 't_files',
99
- condition: `fusetype is not null GROUP BY fusetype`,
100
- orderitem: 'fusetype'}},
101
- {resolveMsg: null, rejectMsg: '获取图片分类失败'})
102
- res.data.forEach((item) => {
103
- this.fusetypes.push({
104
- label: item.fusetype, value: item.fusetype
105
- })
164
+
165
+ async getfusetypes () {
166
+ this.fusetypes.push({label: '全部', value: ''})
167
+ let http = new HttpResetClass()
168
+ let res = await http.load('POST', 'api/af-revenue/sql/singleTable_OrderBy', {
169
+ data: {
170
+ items: 'fusetype',
171
+ tablename: 't_files',
172
+ condition: `fusetype is not null GROUP BY fusetype`,
173
+ orderitem: 'fusetype'
174
+ }
175
+ })
176
+
177
+ res.data.forEach((item) => {
178
+ this.fusetypes.push({
179
+ label: item.fusetype,
180
+ value: item.fusetype
106
181
  })
107
- },
108
- delet (index, row) {
109
- this.$resetdelete('api/af-revenue/entity/t_files', {id: row.id}, {resolveMsg: '删除成功', rejectMsg: '删除失败'}).then((res) => {
110
- // this.files.splice(index, 1)
182
+ })
183
+ },
184
+
185
+ delet (index, row) {
186
+ this.$resetdelete('api/af-revenue/entity/t_files',
187
+ {id: row.id},
188
+ {resolveMsg: '删除成功', rejectMsg: '删除失败'})
189
+ .then(() => {
111
190
  this.selfSearch()
112
191
  })
113
- },
114
- getFiles () {
115
- this.files = []
116
- this.userinfo_id = this.row.f_userinfo_id
117
- let condition = `CONVERT(varchar(200),f_blobid) = '${this.userinfo_id}' and f_state!='删除'`
118
- if (this.upload_date !== '') {
119
- condition += `and CONVERT( VARCHAR ( 100 ), f_uploaddate, 23 )='${this.upload_date}' `
120
- }
121
- if (this.fusetype.length == 1) {
122
- if (this.fusetype[0] !== '') {
123
- condition += `and fusetype='${this.fusetype}' `
124
- }
125
- }
126
- let http = new HttpResetClass()
192
+ },
127
193
 
128
- if (this.userinfo_id) {
129
- http.load('POST', 'api/af-revenue/logic/getAllFiles', {
130
- data: {
131
- condition: condition
132
- }
133
- }, {resolveMsg: null, rejectMsg: '获取附件出错!!!'}).then((res) => {
134
- for (var i = 0; i < res.data.days.length; i++) {
135
- // 循环日期。将files组织成[{day:'',array:''},{day:'',array:''}...]格式
136
- this.files.push({
137
- days: null,
138
- arrays: []
139
- })
140
- this.files[i].days = res.data.days[i].uploadday
141
- for (var j = 0; j < res.data.array.length; j++) {
142
- // 循环查出来的所有附件
143
-
144
- if (res.data.array[j].uploadday == this.files[i].days) {
145
- // 如果使用类型包含导入字样,则是execl文件导入的,不做显示
146
- if (res.data.array[j].fusetype && res.data.array[j].f_filetype.includes('xls')) {
147
- res.data.array[j].splice(i, 1)
148
- i--
149
- continue
150
- }
151
- if ((res.data.array[j].fusetype == '安检照片' && res.data.array[j].f_filename.includes('amr'))) {
152
- continue
153
- }
154
- let temp = res.data.array[j].f_downloadpath
155
- let URL = temp.substring(temp.lastIndexOf(':\\') + 2)
156
- if (res.data.array[j].fusetype == '安检照片') {
157
- res.data.array[j].f_downloadURL = location.protocol + '//' + location.host + '/rs/image/file/' + res.data.array[j].f_filename
158
- } else {
159
- res.data.array[j].f_downloadURL = location.protocol + '//' + location.host + '/' + URL
160
- }
161
- console.log('res.data.array[j].f_downloadURL', res.data.array[j].f_downloadURL)
162
- this.files[i].arrays.push(res.data.array[j])
194
+ getFiles () {
195
+ this.files = []
196
+ this.userinfo_id = this.row.f_userinfo_id
197
+
198
+ let condition = `CONVERT(varchar(200),f_blobid) = '${this.userinfo_id}' and f_state!='删除'`
199
+
200
+ if (this.upload_date) {
201
+ condition += ` and CONVERT(VARCHAR(100), f_uploaddate, 23)='${this.upload_date}'`
202
+ }
203
+
204
+ if (this.fusetype.length === 1 && this.fusetype[0] !== '') {
205
+ condition += ` and fusetype='${this.fusetype}'`
206
+ }
207
+
208
+ let http = new HttpResetClass()
209
+
210
+ if (this.userinfo_id) {
211
+ http.load('POST', 'api/af-revenue/logic/getAllFiles', {
212
+ data: { condition }
213
+ }).then((res) => {
214
+
215
+ for (let i = 0; i < res.data.days.length; i++) {
216
+ this.files.push({
217
+ days: res.data.days[i].uploadday,
218
+ arrays: []
219
+ })
220
+
221
+ for (let j = 0; j < res.data.array.length; j++) {
222
+
223
+ let item = res.data.array[j]
224
+
225
+ if (item.uploadday === this.files[i].days) {
226
+
227
+ if (item.fusetype && item.f_filetype.includes('xls')) {
228
+ continue
229
+ }
230
+
231
+ if (item.fusetype === '安检照片' && item.f_filename.includes('amr')) {
232
+ continue
233
+ }
234
+
235
+ let temp = item.f_downloadpath
236
+ let URL = temp.substring(temp.lastIndexOf(':\\') + 2)
237
+
238
+ if (item.fusetype === '安检照片') {
239
+ item.f_downloadURL = location.protocol + '//' + location.host + '/rs/image/file/' + item.f_filename
240
+ } else {
241
+ item.f_downloadURL = location.protocol + '//' + location.host + '/' + URL
163
242
  }
243
+
244
+ this.files[i].arrays.push(item)
164
245
  }
165
246
  }
166
- })
167
- }
168
- }
247
+ }
169
248
 
170
- },
171
- ready () {
172
- if (this.$login.r.find(value => value == '上传附件删除')) {
173
- // 有删除权限
174
- this.isDelete = '1'
249
+ })
175
250
  }
176
- this.getFiles()
177
- this.getfusetypes()
178
251
  }
252
+ },
253
+ ready () {
254
+ if (this.$login.r.find(v => v === '上传附件删除')) {
255
+ this.isDelete = '1'
256
+ }
257
+ this.getFiles()
258
+ this.getfusetypes()
259
+
260
+ // 绑定 ESC
261
+ window.addEventListener('keydown', this.handleKeydown)
262
+ },
263
+
264
+ beforeDestroy () {
265
+ // 解绑 ESC(防止内存泄漏)
266
+ window.removeEventListener('keydown', this.handleKeydown)
179
267
  }
268
+ }
180
269
  </script>
181
- <style media="screen">
182
- #work-history ul {
183
- padding: 0px;
184
- }
185
- .showtext{
186
- height:20px;
187
- }
270
+
271
+ <style>
272
+ .showtext {
273
+ height: 20px;
274
+ }
275
+
276
+ .preview-mask {
277
+ position: fixed;
278
+ top: 0;
279
+ left: 0;
280
+ width: 100%;
281
+ height: 100%;
282
+ background: rgba(0,0,0,0.7);
283
+ display: flex;
284
+ justify-content: center;
285
+ align-items: center;
286
+ z-index: 9999;
287
+ }
288
+
289
+ .preview-box {
290
+ position: relative;
291
+ max-width: 90%;
292
+ max-height: 90%;
293
+ }
294
+
295
+ .preview-img {
296
+ max-width: 100%;
297
+ max-height: 100%;
298
+ transition: transform 0.1s ease;
299
+ }
300
+
301
+ .preview-iframe {
302
+ width: 80vw;
303
+ height: 80vh;
304
+ background: #fff;
305
+ }
306
+
307
+ .preview-close {
308
+ position: absolute;
309
+ top: -10px;
310
+ right: -10px;
311
+ font-size: 28px;
312
+ color: #fff;
313
+ cursor: pointer;
314
+ }
188
315
  </style>