vue2-client 1.14.94 → 1.14.97

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 (145) 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 +2 -4
  3. package/package.json +1 -1
  4. package/src/base-client/components/common/XFormTable/XFormTable.vue +6 -0
  5. package/src/base-client/components/common/XTab/XTab.vue +40 -8
  6. package/src/base-client/components/common/XTable/XTable.vue +30 -23
  7. package/src/base-client/components/common/XTable/XTableWrapper.vue +13 -6
  8. package/src/base-client/components/common/XUploadFilesView/index.vue +485 -485
  9. package/src/base-client/components/his/XList/XList.vue +35 -35
  10. package/src/base-client/components/his/XQuestionnaire/XQuestionnaire.json +0 -34
  11. package/src/base-client/components/his/XQuestionnaire/XQuestionnaire.vue +51 -23
  12. package/src/base-client/components/his/XQuestionnaire/XQuestionnaireDemo.vue +19 -2
  13. package/src/base-client/components/his/XQuestionnaire/XQuestionnaireItem.vue +39 -56
  14. package/src/base-client/components/his/XShiftSchedule/XShiftSchedule.vue +1 -1
  15. package/src/base-client/components/his/XTextCard/XTextCard.vue +207 -207
  16. package/src/base-client/components/his/XTreeRows/TreeNode.vue +100 -100
  17. package/src/base-client/components/his/XTreeRows/XTreeRows.vue +197 -197
  18. package/src/base-client/components/his/threeTestOrders/editor.vue +111 -111
  19. package/src/base-client/components/layout/XPageView/RenderRow.vue +88 -90
  20. package/src/base-client/components/layout/XPageView/XPageRowTemplate.vue +37 -0
  21. package/src/base-client/components/layout/XPageView/XPageView.vue +223 -222
  22. package/src/base-client/components/layout/XPageView/XTab/XTab.vue +96 -0
  23. package/src/base-client/components/layout/XPageView/XTab/index.js +3 -0
  24. package/src/base-client/components/layout/XPageView/componentTypes.js +22 -0
  25. package/src/base-client/components/layout/XPageView/index.js +1 -0
  26. package/src/base-client/components/layout/XPageView/index.md +19 -0
  27. package/src/pages/WorkflowDetail/WorkflowPageDetail/LeaveMessage.vue +388 -388
  28. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandle.vue +10 -4
  29. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowTimeline.vue +1 -1
  30. package/src/pages/XPageViewExample/index.vue +149 -71
  31. package/.history/public/his/editor/editor_20250606134713.html +0 -51
  32. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527173925.vue +0 -509
  33. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174316.vue +0 -524
  34. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174419.vue +0 -524
  35. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174422.vue +0 -524
  36. package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611172825.vue +0 -207
  37. package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611172945.vue +0 -211
  38. package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611172949.vue +0 -212
  39. package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611173010.vue +0 -212
  40. package/.history/src/base-client/components/common/XForm/XFormItem_20250508134122.vue +0 -1320
  41. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171604.vue +0 -1332
  42. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171613.vue +0 -1331
  43. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171703.vue +0 -1331
  44. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171720.vue +0 -1331
  45. package/.history/src/base-client/components/common/XForm/XFormItem_20250527174327.vue +0 -1339
  46. package/.history/src/base-client/components/common/XReportGrid/XReportTrGroup_20250612092804.vue +0 -731
  47. package/.history/src/base-client/components/common/XReportGrid/XReportTrGroup_20250612112546.vue +0 -748
  48. package/.history/src/base-client/components/common/XReportGrid/XReportTrGroup_20250612113808.vue +0 -748
  49. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115237.vue +0 -1071
  50. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115346.vue +0 -1078
  51. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115350.vue +0 -1077
  52. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115415.vue +0 -1077
  53. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115429.vue +0 -1077
  54. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611091619.vue +0 -442
  55. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092547.vue +0 -442
  56. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092552.vue +0 -442
  57. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092744.vue +0 -475
  58. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092955.vue +0 -475
  59. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092957.vue +0 -475
  60. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611095652.vue +0 -477
  61. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611095701.vue +0 -477
  62. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611095704.vue +0 -477
  63. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100005.vue +0 -473
  64. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100011.vue +0 -473
  65. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100014.vue +0 -473
  66. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100833.vue +0 -473
  67. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100853.vue +0 -473
  68. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100940.vue +0 -473
  69. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101011.vue +0 -473
  70. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101013.vue +0 -473
  71. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101014.vue +0 -473
  72. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101159.vue +0 -473
  73. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101238.vue +0 -474
  74. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101240.vue +0 -474
  75. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101242.vue +0 -474
  76. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101404.vue +0 -472
  77. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101410.vue +0 -472
  78. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101459.vue +0 -472
  79. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101500.vue +0 -472
  80. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101502.vue +0 -472
  81. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101504.vue +0 -472
  82. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101610.vue +0 -501
  83. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101700.vue +0 -501
  84. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101702.vue +0 -501
  85. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101741.vue +0 -504
  86. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101749.vue +0 -504
  87. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101759.vue +0 -504
  88. package/.history/src/base-client/components/his/XHisEditor/dome_20250611091349.vue +0 -131
  89. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105854.vue +0 -160
  90. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105902.vue +0 -160
  91. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105924.vue +0 -160
  92. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105932.vue +0 -158
  93. package/.history/src/base-client/components/his/XList/XList_20250609135848.vue +0 -173
  94. package/.history/src/base-client/components/his/XList/XList_20250609141026.vue +0 -222
  95. package/.history/src/base-client/components/his/XList/XList_20250609141035.vue +0 -229
  96. package/.history/src/base-client/components/his/XList/XList_20250609141103.vue +0 -229
  97. package/.history/src/base-client/components/his/XList/XList_20250609141105.vue +0 -229
  98. package/.history/src/base-client/components/his/XList/XList_20250609141334.vue +0 -241
  99. package/.history/src/base-client/components/his/XList/XList_20250609141404.vue +0 -241
  100. package/.history/src/base-client/components/his/XList/XList_20250609141406.vue +0 -241
  101. package/.history/src/base-client/components/his/XList/XList_20250609141801.vue +0 -245
  102. package/.history/src/base-client/components/his/XList/XList_20250609142033.vue +0 -245
  103. package/.history/src/base-client/components/his/XList/XList_20250609142038.vue +0 -245
  104. package/.history/src/base-client/components/his/XList/XList_20250609142435.vue +0 -255
  105. package/.history/src/base-client/components/his/XList/XList_20250609142503.vue +0 -255
  106. package/.history/src/base-client/components/his/XList/XList_20250609142504.vue +0 -255
  107. package/.history/src/base-client/components/his/XList/XList_20250609143012.vue +0 -270
  108. package/.history/src/base-client/components/his/XList/XList_20250609143044.vue +0 -270
  109. package/.history/src/base-client/components/his/XList/XList_20250609143046.vue +0 -270
  110. package/.history/src/base-client/components/his/XList/XList_20250609143210.vue +0 -270
  111. package/.history/src/base-client/components/his/XList/XList_20250609144339.vue +0 -294
  112. package/.history/src/base-client/components/his/XList/XList_20250609144410.vue +0 -294
  113. package/.history/src/base-client/components/his/XList/XList_20250609144412.vue +0 -294
  114. package/.history/src/base-client/components/his/XList/XList_20250609144647.vue +0 -303
  115. package/.history/src/base-client/components/his/XList/XList_20250609144716.vue +0 -303
  116. package/.history/src/base-client/components/his/XList/XList_20250609144729.vue +0 -303
  117. package/.history/src/base-client/components/his/XList/XList_20250609151232.vue +0 -288
  118. package/.history/src/base-client/components/his/XList/XList_20250609151247.vue +0 -288
  119. package/.history/src/base-client/components/his/XList/XList_20250609151252.vue +0 -288
  120. package/.history/src/base-client/components/his/XList/XList_20250609161220.vue +0 -317
  121. package/.history/src/base-client/components/his/XList/XList_20250609161258.vue +0 -306
  122. package/.history/src/base-client/components/his/XList/XList_20250609161319.vue +0 -306
  123. package/.history/src/base-client/components/his/XList/XList_20250609161320.vue +0 -306
  124. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250609151519.vue +0 -222
  125. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250612155514.vue +0 -183
  126. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250612155556.vue +0 -183
  127. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250612155600.vue +0 -183
  128. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250612181609.vue +0 -206
  129. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250612181629.vue +0 -209
  130. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613095553.vue +0 -242
  131. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613095610.vue +0 -242
  132. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613095612.vue +0 -242
  133. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100041.vue +0 -251
  134. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100047.vue +0 -251
  135. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100054.vue +0 -250
  136. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100105.vue +0 -250
  137. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100107.vue +0 -250
  138. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100114.vue +0 -250
  139. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613140844.vue +0 -238
  140. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613140910.vue +0 -238
  141. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613140912.vue +0 -238
  142. package/Users/objecrt/af-vue2-client/src/base-client/components/his/XShiftSchedule/XShiftSchedule.vue +0 -36
  143. package/src/base-client/components/TreeList/TreeList.vue +0 -91
  144. package/src/base-client/components/TreeList/TreeNode.vue +0 -81
  145. 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>