vue2-client 1.14.68 → 1.14.69

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 (62) hide show
  1. package/docs/Logic/345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +0 -1
  2. package/docs//345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +1 -2
  3. package/package.json +1 -1
  4. package/src/base-client/components/common/XReport/XReport.vue +72 -1
  5. package/src/base-client/components/common/XReport/XReportDemo.vue +1 -2
  6. package/src/base-client/components/common/XReport/XReportTrGroup.vue +218 -29
  7. package/src/base-client/components/common/XReport/index.md +59 -0
  8. package/src/base-client/components/common/XUploadFilesView/index.vue +485 -485
  9. package/src/base-client/components/his/XTextCard/XTextCard.vue +207 -207
  10. package/src/base-client/components/his/XTreeRows/TreeNode.vue +100 -100
  11. package/src/base-client/components/his/XTreeRows/XTreeRows.vue +197 -197
  12. package/src/base-client/components/his/threeTestOrders/editor.vue +111 -111
  13. package/src/pages/WorkflowDetail/WorkFlowDemo.vue +1 -1
  14. package/src/pages/WorkflowDetail/WorkflowPageDetail/LeaveMessage.vue +388 -388
  15. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandle.vue +1 -1
  16. package/src/router/async/router.map.js +2 -2
  17. package/.history/public/his/editor/editor_20250606134713.html +0 -51
  18. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527173925.vue +0 -509
  19. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174316.vue +0 -524
  20. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174419.vue +0 -524
  21. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174422.vue +0 -524
  22. package/.history/src/base-client/components/common/XForm/XFormItem_20250508134122.vue +0 -1320
  23. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171604.vue +0 -1332
  24. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171613.vue +0 -1331
  25. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171703.vue +0 -1331
  26. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171720.vue +0 -1331
  27. package/.history/src/base-client/components/common/XForm/XFormItem_20250527174327.vue +0 -1339
  28. package/.history/src/base-client/components/his/XList/XList_20250609135848.vue +0 -173
  29. package/.history/src/base-client/components/his/XList/XList_20250609141026.vue +0 -222
  30. package/.history/src/base-client/components/his/XList/XList_20250609141035.vue +0 -229
  31. package/.history/src/base-client/components/his/XList/XList_20250609141103.vue +0 -229
  32. package/.history/src/base-client/components/his/XList/XList_20250609141105.vue +0 -229
  33. package/.history/src/base-client/components/his/XList/XList_20250609141334.vue +0 -241
  34. package/.history/src/base-client/components/his/XList/XList_20250609141404.vue +0 -241
  35. package/.history/src/base-client/components/his/XList/XList_20250609141406.vue +0 -241
  36. package/.history/src/base-client/components/his/XList/XList_20250609141801.vue +0 -245
  37. package/.history/src/base-client/components/his/XList/XList_20250609142033.vue +0 -245
  38. package/.history/src/base-client/components/his/XList/XList_20250609142038.vue +0 -245
  39. package/.history/src/base-client/components/his/XList/XList_20250609142435.vue +0 -255
  40. package/.history/src/base-client/components/his/XList/XList_20250609142503.vue +0 -255
  41. package/.history/src/base-client/components/his/XList/XList_20250609142504.vue +0 -255
  42. package/.history/src/base-client/components/his/XList/XList_20250609143012.vue +0 -270
  43. package/.history/src/base-client/components/his/XList/XList_20250609143044.vue +0 -270
  44. package/.history/src/base-client/components/his/XList/XList_20250609143046.vue +0 -270
  45. package/.history/src/base-client/components/his/XList/XList_20250609143210.vue +0 -270
  46. package/.history/src/base-client/components/his/XList/XList_20250609144339.vue +0 -294
  47. package/.history/src/base-client/components/his/XList/XList_20250609144410.vue +0 -294
  48. package/.history/src/base-client/components/his/XList/XList_20250609144412.vue +0 -294
  49. package/.history/src/base-client/components/his/XList/XList_20250609144647.vue +0 -303
  50. package/.history/src/base-client/components/his/XList/XList_20250609144716.vue +0 -303
  51. package/.history/src/base-client/components/his/XList/XList_20250609144729.vue +0 -303
  52. package/.history/src/base-client/components/his/XList/XList_20250609151232.vue +0 -288
  53. package/.history/src/base-client/components/his/XList/XList_20250609151247.vue +0 -288
  54. package/.history/src/base-client/components/his/XList/XList_20250609151252.vue +0 -288
  55. package/.history/src/base-client/components/his/XList/XList_20250609161220.vue +0 -317
  56. package/.history/src/base-client/components/his/XList/XList_20250609161258.vue +0 -306
  57. package/.history/src/base-client/components/his/XList/XList_20250609161319.vue +0 -306
  58. package/.history/src/base-client/components/his/XList/XList_20250609161320.vue +0 -306
  59. package/Users/objecrt/af-vue2-client/src/base-client/components/his/XShiftSchedule/XShiftSchedule.vue +0 -36
  60. package/src/base-client/components/TreeList/TreeList.vue +0 -91
  61. package/src/base-client/components/TreeList/TreeNode.vue +0 -81
  62. package/src/base-client/components/common/XCardSet/XTiltle.vue +0 -191
@@ -1,485 +1,485 @@
1
- <template>
2
- <div class="upload-files-container">
3
- <div class="filter-container">
4
- <div class="filter-group">
5
- <a-date-picker
6
- v-model="upload_date"
7
- placeholder="上传日期"
8
- @change="selfSearch"
9
- class="filter-item"
10
- />
11
- <a-select
12
- class="filter-item"
13
- v-model="fusetype"
14
- :options="fusetypes"
15
- placeholder="分类"
16
- @change="selfSearch"
17
- allow-clear
18
- />
19
- <a-button type="primary" @click="selfSearch" class="search-btn">
20
- 查询
21
- </a-button>
22
- </div>
23
- </div>
24
-
25
- <div v-if="files.length === 0" class="empty-state">
26
- <i class="anticon anticon-inbox empty-icon"></i>
27
- <p>暂无附件数据</p>
28
- </div>
29
-
30
- <div v-else class="file-timeline">
31
- <div v-for="(item, index) in files" :key="'fileGroup' + index" class="date-group">
32
- <div class="date-header">
33
- <i class="anticon anticon-calendar"></i>
34
- <span>{{ item.days }}</span>
35
- </div>
36
- <div class="file-grid">
37
- <div v-for="file in item.arrays" :key="'fileItem' + file.id" class="file-card">
38
- <div class="card-content">
39
- <div class="file-preview">
40
- <img
41
- v-if="file.f_filetype.includes('jpg') || file.f_filetype.includes('png')"
42
- :src="file.f_downloadpath"
43
- class="preview-image"
44
- @click="previewImage(file.f_downloadpath)"
45
- />
46
- <div v-else class="file-icon">
47
- <i class="anticon anticon-file"></i>
48
- </div>
49
- </div>
50
- <div class="file-info">
51
- <div class="info-row">
52
- <span class="info-label"><i class="anticon anticon-clock-circle"></i> 上传时间:</span>
53
- <span class="info-value">{{ file.f_uploaddate }}</span>
54
- </div>
55
- <div class="info-row">
56
- <span class="info-label"><i class="anticon anticon-user"></i> 操作员:</span>
57
- <span class="info-value">{{ file.f_username }}</span>
58
- </div>
59
- <div class="info-row">
60
- <span class="info-label"><i class="anticon anticon-tag"></i> 分类:</span>
61
- <span class="info-value">{{ file.fusetype }}</span>
62
- </div>
63
- <div class="info-row remarks">
64
- <span class="info-label"><i class="anticon anticon-message"></i> 说明:</span>
65
- <span class="info-value">{{ file.fremarks || '无' }}</span>
66
- </div>
67
- </div>
68
- <div class="file-actions">
69
- <a-button
70
- type="link"
71
- :href="file.f_downloadpath"
72
- target="_blank"
73
- class="action-btn preview-btn"
74
- >
75
- <i class="anticon anticon-eye"></i>
76
- 预览
77
- </a-button>
78
- <a-button
79
- v-if="isDelete === '1'"
80
- type="link"
81
- danger
82
- @click="delet(file.id)"
83
- class="action-btn delete-btn"
84
- >
85
- <i class="anticon anticon-delete"></i>
86
- 删除
87
- </a-button>
88
- </div>
89
- </div>
90
- </div>
91
- </div>
92
- </div>
93
- </div>
94
- </div>
95
- </template>
96
-
97
- <script>
98
- import { post } from '@vue2-client/services/api'
99
- import { del } from '@vue2-client/services/api/restTools'
100
-
101
- export default {
102
- name: 'XUploadFilesView',
103
- props: {
104
- currUserInfo: {
105
- type: Object,
106
- default: () => undefined
107
- }
108
- },
109
- data () {
110
- return {
111
- upload_date: null,
112
- fusetype: null,
113
- files: [],
114
- fusetypes: [],
115
- isDelete: '0'
116
- }
117
- },
118
- methods: {
119
- async getfusetypes () {
120
- this.fusetypes = [{ label: '全部', value: '' }]
121
- const res = await post('/api/af-revenue/logic/getFileUseType', {})
122
- this.fusetypes.push(...res
123
- .filter(item => item.fusetype && item.fusetype.trim() !== '')
124
- .map(item => ({ label: item.fusetype, value: item.fusetype })))
125
- this.fusetype = ''
126
- },
127
- async getFiles () {
128
- if (!this.currUserInfo) return
129
- this.files = []
130
- let condition = `f_blobid = '${this.currUserInfo.f_userinfo_id}'`
131
- if (this.upload_date) {
132
- condition += ` and CONVERT(VARCHAR(100), f_uploaddate, 23) = '${this.upload_date}'`
133
- }
134
- if (this.fusetype) {
135
- condition += ` and fusetype = '${this.fusetype}'`
136
- }
137
- const res = await post('/api/af-revenue/logic/getAllFiles', { data: { condition } })
138
- this.files = res.days.map(day => ({
139
- days: day.uploadday,
140
- arrays: res.array.filter(file => file.uploadday === day.uploadday)
141
- }))
142
- },
143
- async delet (fileId) {
144
- await del('api/af-revenue/entity/save/t_files', { id: fileId }, { resolveMsg: '删除成功', rejectMsg: '删除失败' })
145
- this.getFiles()
146
- },
147
- selfSearch () {
148
- this.getFiles()
149
- },
150
- previewImage (url) {
151
- window.open(url, '_blank')
152
- }
153
- },
154
- mounted () {
155
- if (this.$login.r.includes('上传附件删除')) {
156
- this.isDelete = '1'
157
- }
158
- this.getFiles()
159
- this.getfusetypes()
160
- }
161
- }
162
- </script>
163
-
164
- <style scoped>
165
- .upload-files-container {
166
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
167
- background-color: #f9fafc;
168
- border-radius: 12px;
169
- padding: 24px;
170
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
171
- }
172
-
173
- /* 过滤区样式 */
174
- .filter-container {
175
- background-color: #fff;
176
- border-radius: 10px;
177
- padding: 20px;
178
- margin-bottom: 24px;
179
- box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08);
180
- border: 1px solid rgba(240, 240, 240, 0.8);
181
- transition: all 0.3s ease;
182
- }
183
-
184
- .filter-container:hover {
185
- box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1);
186
- }
187
-
188
- .filter-group {
189
- display: flex;
190
- flex-wrap: wrap;
191
- gap: 16px;
192
- align-items: center;
193
- }
194
-
195
- .filter-item {
196
- min-width: 200px;
197
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.02);
198
- border-radius: 6px;
199
- }
200
-
201
- .search-btn {
202
- display: flex;
203
- align-items: center;
204
- gap: 6px;
205
- height: 32px;
206
- border-radius: 6px;
207
- padding: 0 16px;
208
- font-weight: 500;
209
- transition: all 0.3s ease;
210
- box-shadow: 0 2px 5px rgba(24, 144, 255, 0.2);
211
- justify-content: center;
212
- }
213
-
214
- .search-btn:hover {
215
- transform: translateY(-1px);
216
- box-shadow: 0 4px 8px rgba(24, 144, 255, 0.3);
217
- }
218
-
219
- /* 空状态样式 */
220
- .empty-state {
221
- display: flex;
222
- flex-direction: column;
223
- align-items: center;
224
- justify-content: center;
225
- padding: 80px 0;
226
- background-color: #fff;
227
- border-radius: 10px;
228
- color: #8c8c8c;
229
- border: 1px dashed #e8e8e8;
230
- transition: all 0.3s ease;
231
- }
232
-
233
- .empty-icon {
234
- font-size: 48px;
235
- color: #bfbfbf;
236
- margin-bottom: 16px;
237
- }
238
-
239
- .empty-state p {
240
- font-size: 16px;
241
- margin-top: 8px;
242
- color: #8c8c8c;
243
- }
244
-
245
- /* 文件时间线 */
246
- .file-timeline {
247
- display: flex;
248
- flex-direction: column;
249
- gap: 28px;
250
- }
251
-
252
- .date-group {
253
- background-color: #fff;
254
- border-radius: 10px;
255
- overflow: hidden;
256
- box-shadow: 0 2px 12px rgba(0, 0, 0, 0.06);
257
- border: 1px solid rgba(240, 240, 240, 0.8);
258
- transition: all 0.3s ease;
259
- }
260
-
261
- .date-group:hover {
262
- box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1);
263
- transform: translateY(-2px);
264
- }
265
-
266
- .date-header {
267
- display: flex;
268
- align-items: center;
269
- gap: 10px;
270
- padding: 16px 20px;
271
- background: linear-gradient(135deg, #e6f7ff, #f0f5ff);
272
- border-bottom: 1px solid #e6f0ff;
273
- font-weight: 500;
274
- color: #1890ff;
275
- font-size: 15px;
276
- }
277
-
278
- .date-header i {
279
- font-size: 18px;
280
- }
281
-
282
- /* 文件网格 */
283
- .file-grid {
284
- display: grid;
285
- grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
286
- gap: 20px;
287
- padding: 20px;
288
- }
289
-
290
- /* 文件卡片 */
291
- .file-card {
292
- border-radius: 10px;
293
- overflow: hidden;
294
- transition: all 0.3s ease;
295
- border: 1px solid #f0f0f0;
296
- height: 100%;
297
- background-color: #fff;
298
- box-shadow: 0 1px 5px rgba(0, 0, 0, 0.03);
299
- }
300
-
301
- .file-card:hover {
302
- transform: translateY(-5px);
303
- box-shadow: 0 8px 20px rgba(0, 0, 0, 0.1);
304
- border-color: #e6f7ff;
305
- }
306
-
307
- .card-content {
308
- display: flex;
309
- flex-direction: column;
310
- height: 100%;
311
- }
312
-
313
- /* 文件预览 */
314
- .file-preview {
315
- height: 200px;
316
- background-color: #f5f5f5;
317
- display: flex;
318
- align-items: center;
319
- justify-content: center;
320
- overflow: hidden;
321
- position: relative;
322
- border-bottom: 1px solid #f0f0f0;
323
- }
324
-
325
- .preview-image {
326
- width: 100%;
327
- height: 100%;
328
- object-fit: cover;
329
- transition: transform 0.5s ease;
330
- cursor: zoom-in;
331
- }
332
-
333
- .preview-image:hover {
334
- transform: scale(1.08);
335
- }
336
-
337
- .file-icon {
338
- display: flex;
339
- align-items: center;
340
- justify-content: center;
341
- width: 100%;
342
- height: 100%;
343
- font-size: 64px;
344
- color: #bfbfbf;
345
- background-color: #fafafa;
346
- transition: all 0.3s ease;
347
- }
348
-
349
- .file-icon:hover {
350
- color: #1890ff;
351
- }
352
-
353
- .file-icon i {
354
- opacity: 0.7;
355
- }
356
-
357
- /* 文件信息 */
358
- .file-info {
359
- padding: 16px;
360
- flex-grow: 1;
361
- display: flex;
362
- flex-direction: column;
363
- gap: 10px;
364
- background-color: #fff;
365
- }
366
-
367
- .info-row {
368
- display: flex;
369
- align-items: flex-start;
370
- gap: 8px;
371
- font-size: 14px;
372
- color: #595959;
373
- line-height: 1.5;
374
- }
375
-
376
- .info-label {
377
- font-weight: 500;
378
- color: #8c8c8c;
379
- display: flex;
380
- align-items: center;
381
- gap: 4px;
382
- min-width: 80px;
383
- }
384
-
385
- .info-label i {
386
- font-size: 14px;
387
- color: #1890ff;
388
- }
389
-
390
- .info-value {
391
- color: #262626;
392
- flex: 1;
393
- overflow: hidden;
394
- text-overflow: ellipsis;
395
- white-space: nowrap;
396
- }
397
-
398
- .remarks .info-value {
399
- white-space: normal;
400
- display: -webkit-box;
401
- -webkit-line-clamp: 2;
402
- -webkit-box-orient: vertical;
403
- line-height: 1.6;
404
- color: #434343;
405
- }
406
-
407
- /* 操作按钮 */
408
- .file-actions {
409
- display: flex;
410
- justify-content: space-between;
411
- padding: 12px 16px;
412
- border-top: 1px solid #f0f0f0;
413
- background-color: #fafafa;
414
- }
415
-
416
- .action-btn {
417
- display: flex;
418
- align-items: center;
419
- gap: 6px;
420
- font-size: 14px;
421
- border-radius: 4px;
422
- padding: 4px 12px;
423
- transition: all 0.3s ease;
424
- }
425
-
426
- .action-btn i {
427
- font-size: 14px;
428
- }
429
-
430
- .preview-btn {
431
- color: #1890ff;
432
- }
433
-
434
- .preview-btn:hover {
435
- background-color: #e6f7ff;
436
- }
437
-
438
- .delete-btn {
439
- color: #ff4d4f;
440
- }
441
-
442
- .delete-btn:hover {
443
- background-color: #fff1f0;
444
- }
445
-
446
- /* 响应式调整 */
447
- @media (max-width: 768px) {
448
- .filter-group {
449
- flex-direction: column;
450
- align-items: stretch;
451
- }
452
-
453
- .filter-item {
454
- width: 100%;
455
- min-width: auto;
456
- }
457
-
458
- .search-btn {
459
- width: 100%;
460
- }
461
-
462
- .file-grid {
463
- grid-template-columns: 1fr;
464
- }
465
-
466
- .upload-files-container {
467
- padding: 16px;
468
- }
469
- }
470
-
471
- @media (max-width: 480px) {
472
- .file-preview {
473
- height: 160px;
474
- }
475
-
476
- .date-header {
477
- padding: 12px 16px;
478
- }
479
-
480
- .file-grid {
481
- padding: 12px;
482
- gap: 12px;
483
- }
484
- }
485
- </style>
1
+ <template>
2
+ <div class="upload-files-container">
3
+ <div class="filter-container">
4
+ <div class="filter-group">
5
+ <a-date-picker
6
+ v-model="upload_date"
7
+ placeholder="上传日期"
8
+ @change="selfSearch"
9
+ class="filter-item"
10
+ />
11
+ <a-select
12
+ class="filter-item"
13
+ v-model="fusetype"
14
+ :options="fusetypes"
15
+ placeholder="分类"
16
+ @change="selfSearch"
17
+ allow-clear
18
+ />
19
+ <a-button type="primary" @click="selfSearch" class="search-btn">
20
+ 查询
21
+ </a-button>
22
+ </div>
23
+ </div>
24
+
25
+ <div v-if="files.length === 0" class="empty-state">
26
+ <i class="anticon anticon-inbox empty-icon"></i>
27
+ <p>暂无附件数据</p>
28
+ </div>
29
+
30
+ <div v-else class="file-timeline">
31
+ <div v-for="(item, index) in files" :key="'fileGroup' + index" class="date-group">
32
+ <div class="date-header">
33
+ <i class="anticon anticon-calendar"></i>
34
+ <span>{{ item.days }}</span>
35
+ </div>
36
+ <div class="file-grid">
37
+ <div v-for="file in item.arrays" :key="'fileItem' + file.id" class="file-card">
38
+ <div class="card-content">
39
+ <div class="file-preview">
40
+ <img
41
+ v-if="file.f_filetype.includes('jpg') || file.f_filetype.includes('png')"
42
+ :src="file.f_downloadpath"
43
+ class="preview-image"
44
+ @click="previewImage(file.f_downloadpath)"
45
+ />
46
+ <div v-else class="file-icon">
47
+ <i class="anticon anticon-file"></i>
48
+ </div>
49
+ </div>
50
+ <div class="file-info">
51
+ <div class="info-row">
52
+ <span class="info-label"><i class="anticon anticon-clock-circle"></i> 上传时间:</span>
53
+ <span class="info-value">{{ file.f_uploaddate }}</span>
54
+ </div>
55
+ <div class="info-row">
56
+ <span class="info-label"><i class="anticon anticon-user"></i> 操作员:</span>
57
+ <span class="info-value">{{ file.f_username }}</span>
58
+ </div>
59
+ <div class="info-row">
60
+ <span class="info-label"><i class="anticon anticon-tag"></i> 分类:</span>
61
+ <span class="info-value">{{ file.fusetype }}</span>
62
+ </div>
63
+ <div class="info-row remarks">
64
+ <span class="info-label"><i class="anticon anticon-message"></i> 说明:</span>
65
+ <span class="info-value">{{ file.fremarks || '无' }}</span>
66
+ </div>
67
+ </div>
68
+ <div class="file-actions">
69
+ <a-button
70
+ type="link"
71
+ :href="file.f_downloadpath"
72
+ target="_blank"
73
+ class="action-btn preview-btn"
74
+ >
75
+ <i class="anticon anticon-eye"></i>
76
+ 预览
77
+ </a-button>
78
+ <a-button
79
+ v-if="isDelete === '1'"
80
+ type="link"
81
+ danger
82
+ @click="delet(file.id)"
83
+ class="action-btn delete-btn"
84
+ >
85
+ <i class="anticon anticon-delete"></i>
86
+ 删除
87
+ </a-button>
88
+ </div>
89
+ </div>
90
+ </div>
91
+ </div>
92
+ </div>
93
+ </div>
94
+ </div>
95
+ </template>
96
+
97
+ <script>
98
+ import { post } from '@vue2-client/services/api'
99
+ import { del } from '@vue2-client/services/api/restTools'
100
+
101
+ export default {
102
+ name: 'XUploadFilesView',
103
+ props: {
104
+ currUserInfo: {
105
+ type: Object,
106
+ default: () => undefined
107
+ }
108
+ },
109
+ data () {
110
+ return {
111
+ upload_date: null,
112
+ fusetype: null,
113
+ files: [],
114
+ fusetypes: [],
115
+ isDelete: '0'
116
+ }
117
+ },
118
+ methods: {
119
+ async getfusetypes () {
120
+ this.fusetypes = [{ label: '全部', value: '' }]
121
+ const res = await post('/api/af-revenue/logic/getFileUseType', {})
122
+ this.fusetypes.push(...res
123
+ .filter(item => item.fusetype && item.fusetype.trim() !== '')
124
+ .map(item => ({ label: item.fusetype, value: item.fusetype })))
125
+ this.fusetype = ''
126
+ },
127
+ async getFiles () {
128
+ if (!this.currUserInfo) return
129
+ this.files = []
130
+ let condition = `f_blobid = '${this.currUserInfo.f_userinfo_id}'`
131
+ if (this.upload_date) {
132
+ condition += ` and CONVERT(VARCHAR(100), f_uploaddate, 23) = '${this.upload_date}'`
133
+ }
134
+ if (this.fusetype) {
135
+ condition += ` and fusetype = '${this.fusetype}'`
136
+ }
137
+ const res = await post('/api/af-revenue/logic/getAllFiles', { data: { condition } })
138
+ this.files = res.days.map(day => ({
139
+ days: day.uploadday,
140
+ arrays: res.array.filter(file => file.uploadday === day.uploadday)
141
+ }))
142
+ },
143
+ async delet (fileId) {
144
+ await del('api/af-revenue/entity/save/t_files', { id: fileId }, { resolveMsg: '删除成功', rejectMsg: '删除失败' })
145
+ this.getFiles()
146
+ },
147
+ selfSearch () {
148
+ this.getFiles()
149
+ },
150
+ previewImage (url) {
151
+ window.open(url, '_blank')
152
+ }
153
+ },
154
+ mounted () {
155
+ if (this.$login.r.includes('上传附件删除')) {
156
+ this.isDelete = '1'
157
+ }
158
+ this.getFiles()
159
+ this.getfusetypes()
160
+ }
161
+ }
162
+ </script>
163
+
164
+ <style scoped>
165
+ .upload-files-container {
166
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
167
+ background-color: #f9fafc;
168
+ border-radius: 12px;
169
+ padding: 24px;
170
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
171
+ }
172
+
173
+ /* 过滤区样式 */
174
+ .filter-container {
175
+ background-color: #fff;
176
+ border-radius: 10px;
177
+ padding: 20px;
178
+ margin-bottom: 24px;
179
+ box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08);
180
+ border: 1px solid rgba(240, 240, 240, 0.8);
181
+ transition: all 0.3s ease;
182
+ }
183
+
184
+ .filter-container:hover {
185
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1);
186
+ }
187
+
188
+ .filter-group {
189
+ display: flex;
190
+ flex-wrap: wrap;
191
+ gap: 16px;
192
+ align-items: center;
193
+ }
194
+
195
+ .filter-item {
196
+ min-width: 200px;
197
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.02);
198
+ border-radius: 6px;
199
+ }
200
+
201
+ .search-btn {
202
+ display: flex;
203
+ align-items: center;
204
+ gap: 6px;
205
+ height: 32px;
206
+ border-radius: 6px;
207
+ padding: 0 16px;
208
+ font-weight: 500;
209
+ transition: all 0.3s ease;
210
+ box-shadow: 0 2px 5px rgba(24, 144, 255, 0.2);
211
+ justify-content: center;
212
+ }
213
+
214
+ .search-btn:hover {
215
+ transform: translateY(-1px);
216
+ box-shadow: 0 4px 8px rgba(24, 144, 255, 0.3);
217
+ }
218
+
219
+ /* 空状态样式 */
220
+ .empty-state {
221
+ display: flex;
222
+ flex-direction: column;
223
+ align-items: center;
224
+ justify-content: center;
225
+ padding: 80px 0;
226
+ background-color: #fff;
227
+ border-radius: 10px;
228
+ color: #8c8c8c;
229
+ border: 1px dashed #e8e8e8;
230
+ transition: all 0.3s ease;
231
+ }
232
+
233
+ .empty-icon {
234
+ font-size: 48px;
235
+ color: #bfbfbf;
236
+ margin-bottom: 16px;
237
+ }
238
+
239
+ .empty-state p {
240
+ font-size: 16px;
241
+ margin-top: 8px;
242
+ color: #8c8c8c;
243
+ }
244
+
245
+ /* 文件时间线 */
246
+ .file-timeline {
247
+ display: flex;
248
+ flex-direction: column;
249
+ gap: 28px;
250
+ }
251
+
252
+ .date-group {
253
+ background-color: #fff;
254
+ border-radius: 10px;
255
+ overflow: hidden;
256
+ box-shadow: 0 2px 12px rgba(0, 0, 0, 0.06);
257
+ border: 1px solid rgba(240, 240, 240, 0.8);
258
+ transition: all 0.3s ease;
259
+ }
260
+
261
+ .date-group:hover {
262
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1);
263
+ transform: translateY(-2px);
264
+ }
265
+
266
+ .date-header {
267
+ display: flex;
268
+ align-items: center;
269
+ gap: 10px;
270
+ padding: 16px 20px;
271
+ background: linear-gradient(135deg, #e6f7ff, #f0f5ff);
272
+ border-bottom: 1px solid #e6f0ff;
273
+ font-weight: 500;
274
+ color: #1890ff;
275
+ font-size: 15px;
276
+ }
277
+
278
+ .date-header i {
279
+ font-size: 18px;
280
+ }
281
+
282
+ /* 文件网格 */
283
+ .file-grid {
284
+ display: grid;
285
+ grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
286
+ gap: 20px;
287
+ padding: 20px;
288
+ }
289
+
290
+ /* 文件卡片 */
291
+ .file-card {
292
+ border-radius: 10px;
293
+ overflow: hidden;
294
+ transition: all 0.3s ease;
295
+ border: 1px solid #f0f0f0;
296
+ height: 100%;
297
+ background-color: #fff;
298
+ box-shadow: 0 1px 5px rgba(0, 0, 0, 0.03);
299
+ }
300
+
301
+ .file-card:hover {
302
+ transform: translateY(-5px);
303
+ box-shadow: 0 8px 20px rgba(0, 0, 0, 0.1);
304
+ border-color: #e6f7ff;
305
+ }
306
+
307
+ .card-content {
308
+ display: flex;
309
+ flex-direction: column;
310
+ height: 100%;
311
+ }
312
+
313
+ /* 文件预览 */
314
+ .file-preview {
315
+ height: 200px;
316
+ background-color: #f5f5f5;
317
+ display: flex;
318
+ align-items: center;
319
+ justify-content: center;
320
+ overflow: hidden;
321
+ position: relative;
322
+ border-bottom: 1px solid #f0f0f0;
323
+ }
324
+
325
+ .preview-image {
326
+ width: 100%;
327
+ height: 100%;
328
+ object-fit: cover;
329
+ transition: transform 0.5s ease;
330
+ cursor: zoom-in;
331
+ }
332
+
333
+ .preview-image:hover {
334
+ transform: scale(1.08);
335
+ }
336
+
337
+ .file-icon {
338
+ display: flex;
339
+ align-items: center;
340
+ justify-content: center;
341
+ width: 100%;
342
+ height: 100%;
343
+ font-size: 64px;
344
+ color: #bfbfbf;
345
+ background-color: #fafafa;
346
+ transition: all 0.3s ease;
347
+ }
348
+
349
+ .file-icon:hover {
350
+ color: #1890ff;
351
+ }
352
+
353
+ .file-icon i {
354
+ opacity: 0.7;
355
+ }
356
+
357
+ /* 文件信息 */
358
+ .file-info {
359
+ padding: 16px;
360
+ flex-grow: 1;
361
+ display: flex;
362
+ flex-direction: column;
363
+ gap: 10px;
364
+ background-color: #fff;
365
+ }
366
+
367
+ .info-row {
368
+ display: flex;
369
+ align-items: flex-start;
370
+ gap: 8px;
371
+ font-size: 14px;
372
+ color: #595959;
373
+ line-height: 1.5;
374
+ }
375
+
376
+ .info-label {
377
+ font-weight: 500;
378
+ color: #8c8c8c;
379
+ display: flex;
380
+ align-items: center;
381
+ gap: 4px;
382
+ min-width: 80px;
383
+ }
384
+
385
+ .info-label i {
386
+ font-size: 14px;
387
+ color: #1890ff;
388
+ }
389
+
390
+ .info-value {
391
+ color: #262626;
392
+ flex: 1;
393
+ overflow: hidden;
394
+ text-overflow: ellipsis;
395
+ white-space: nowrap;
396
+ }
397
+
398
+ .remarks .info-value {
399
+ white-space: normal;
400
+ display: -webkit-box;
401
+ -webkit-line-clamp: 2;
402
+ -webkit-box-orient: vertical;
403
+ line-height: 1.6;
404
+ color: #434343;
405
+ }
406
+
407
+ /* 操作按钮 */
408
+ .file-actions {
409
+ display: flex;
410
+ justify-content: space-between;
411
+ padding: 12px 16px;
412
+ border-top: 1px solid #f0f0f0;
413
+ background-color: #fafafa;
414
+ }
415
+
416
+ .action-btn {
417
+ display: flex;
418
+ align-items: center;
419
+ gap: 6px;
420
+ font-size: 14px;
421
+ border-radius: 4px;
422
+ padding: 4px 12px;
423
+ transition: all 0.3s ease;
424
+ }
425
+
426
+ .action-btn i {
427
+ font-size: 14px;
428
+ }
429
+
430
+ .preview-btn {
431
+ color: #1890ff;
432
+ }
433
+
434
+ .preview-btn:hover {
435
+ background-color: #e6f7ff;
436
+ }
437
+
438
+ .delete-btn {
439
+ color: #ff4d4f;
440
+ }
441
+
442
+ .delete-btn:hover {
443
+ background-color: #fff1f0;
444
+ }
445
+
446
+ /* 响应式调整 */
447
+ @media (max-width: 768px) {
448
+ .filter-group {
449
+ flex-direction: column;
450
+ align-items: stretch;
451
+ }
452
+
453
+ .filter-item {
454
+ width: 100%;
455
+ min-width: auto;
456
+ }
457
+
458
+ .search-btn {
459
+ width: 100%;
460
+ }
461
+
462
+ .file-grid {
463
+ grid-template-columns: 1fr;
464
+ }
465
+
466
+ .upload-files-container {
467
+ padding: 16px;
468
+ }
469
+ }
470
+
471
+ @media (max-width: 480px) {
472
+ .file-preview {
473
+ height: 160px;
474
+ }
475
+
476
+ .date-header {
477
+ padding: 12px 16px;
478
+ }
479
+
480
+ .file-grid {
481
+ padding: 12px;
482
+ gap: 12px;
483
+ }
484
+ }
485
+ </style>