adtec-core-package 0.4.0 → 0.4.2

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 (207) hide show
  1. package/.editorconfig +6 -6
  2. package/.prettierrc.json +7 -7
  3. package/.vscode/extensions.json +8 -8
  4. package/README.en.md +36 -36
  5. package/README.md +39 -39
  6. package/env.d.ts +1 -1
  7. package/eslint.config.js +56 -56
  8. package/index.html +13 -13
  9. package/package.json +59 -59
  10. package/src/App.vue +9 -9
  11. package/src/api/BasicApi.ts +17 -17
  12. package/src/api/DocumentApi.ts +27 -27
  13. package/src/api/SysDictCacheApi.ts +26 -26
  14. package/src/api/SysUserApi.ts +35 -35
  15. package/src/api/framework.ts +12 -12
  16. package/src/assets/base.css +86 -86
  17. package/src/assets/logo.svg +1 -1
  18. package/src/assets/main.css +35 -35
  19. package/src/assets/style/ant.scss +19 -19
  20. package/src/assets/style/index.less +180 -180
  21. package/src/assets/style/transition.scss +49 -49
  22. package/src/components/ElFlex/ElFlex.vue +297 -297
  23. package/src/components/OperationAuth/operationAuth.vue +26 -26
  24. package/src/components/Search/ElIconSearch.vue +260 -239
  25. package/src/components/Search/ElSearch.vue +154 -154
  26. package/src/components/Table/ElTableColumnEdit.vue +218 -218
  27. package/src/components/Title/ElTitle.vue +49 -49
  28. package/src/components/autoToolTip/ElAutoToolTip.vue +61 -61
  29. package/src/components/baseEcharts/index.vue +48 -48
  30. package/src/components/business/userSelect.vue +412 -412
  31. package/src/components/icon/ElIconBtn.vue +182 -182
  32. package/src/components/icon/ElIcons.vue +38 -38
  33. package/src/components/upload/ElUploads.vue +286 -279
  34. package/src/components/upload/FileView.vue +158 -158
  35. package/src/components/upload/FileViewComponents.vue +57 -57
  36. package/src/config/ElementPlusConfig.ts +95 -95
  37. package/src/css/elementUI/affix.scss +7 -7
  38. package/src/css/elementUI/alert.scss +115 -115
  39. package/src/css/elementUI/anchor-link.scss +41 -41
  40. package/src/css/elementUI/anchor.scss +88 -88
  41. package/src/css/elementUI/aside.scss +8 -8
  42. package/src/css/elementUI/autocomplete.scss +89 -89
  43. package/src/css/elementUI/avatar.scss +55 -55
  44. package/src/css/elementUI/backtop.scss +29 -29
  45. package/src/css/elementUI/badge.scss +58 -58
  46. package/src/css/elementUI/base.scss +3 -3
  47. package/src/css/elementUI/breadcrumb.scss +62 -62
  48. package/src/css/elementUI/button-group.scss +80 -80
  49. package/src/css/elementUI/button.scss +304 -304
  50. package/src/css/elementUI/calendar.scss +80 -80
  51. package/src/css/elementUI/card.scss +45 -45
  52. package/src/css/elementUI/carousel-item.scss +58 -58
  53. package/src/css/elementUI/carousel.scss +188 -188
  54. package/src/css/elementUI/cascader-panel.scss +138 -138
  55. package/src/css/elementUI/cascader.scss +230 -230
  56. package/src/css/elementUI/check-tag.scss +60 -60
  57. package/src/css/elementUI/checkbox-button.scss +140 -140
  58. package/src/css/elementUI/checkbox-group.scss +7 -7
  59. package/src/css/elementUI/checkbox.scss +298 -298
  60. package/src/css/elementUI/col.scss +48 -48
  61. package/src/css/elementUI/collapse.scss +70 -70
  62. package/src/css/elementUI/color/index.scss +20 -20
  63. package/src/css/elementUI/color-picker.scss +392 -392
  64. package/src/css/elementUI/common/popup.scss +47 -47
  65. package/src/css/elementUI/common/transition.scss +122 -122
  66. package/src/css/elementUI/common/var.scss +1549 -1549
  67. package/src/css/elementUI/container.scss +14 -14
  68. package/src/css/elementUI/dark/css-vars.scss +39 -39
  69. package/src/css/elementUI/dark/var.scss +222 -222
  70. package/src/css/elementUI/date-picker/date-picker.scss +110 -110
  71. package/src/css/elementUI/date-picker/date-range-picker.scss +113 -113
  72. package/src/css/elementUI/date-picker/date-table.scss +158 -158
  73. package/src/css/elementUI/date-picker/month-table.scss +112 -112
  74. package/src/css/elementUI/date-picker/picker-panel.scss +131 -131
  75. package/src/css/elementUI/date-picker/picker.scss +219 -219
  76. package/src/css/elementUI/date-picker/time-picker.scss +90 -90
  77. package/src/css/elementUI/date-picker/time-range-picker.scss +33 -33
  78. package/src/css/elementUI/date-picker/time-spinner.scss +111 -111
  79. package/src/css/elementUI/date-picker/year-table.scss +108 -108
  80. package/src/css/elementUI/date-picker.scss +9 -9
  81. package/src/css/elementUI/descriptions-item.scss +73 -73
  82. package/src/css/elementUI/descriptions.scss +152 -152
  83. package/src/css/elementUI/dialog.scss +199 -199
  84. package/src/css/elementUI/display.scss +12 -12
  85. package/src/css/elementUI/divider.scss +48 -48
  86. package/src/css/elementUI/drawer.scss +164 -164
  87. package/src/css/elementUI/dropdown.scss +208 -208
  88. package/src/css/elementUI/empty.scss +49 -49
  89. package/src/css/elementUI/footer.scss +12 -12
  90. package/src/css/elementUI/form.scss +243 -243
  91. package/src/css/elementUI/header.scss +12 -12
  92. package/src/css/elementUI/icon.scss +45 -45
  93. package/src/css/elementUI/image-viewer.scss +139 -139
  94. package/src/css/elementUI/image.scss +49 -49
  95. package/src/css/elementUI/index.scss +110 -110
  96. package/src/css/elementUI/input-number.scss +178 -178
  97. package/src/css/elementUI/input.scss +478 -478
  98. package/src/css/elementUI/link.scss +90 -90
  99. package/src/css/elementUI/loading.scss +104 -104
  100. package/src/css/elementUI/main.scss +14 -14
  101. package/src/css/elementUI/mention.scss +88 -88
  102. package/src/css/elementUI/menu.scss +339 -339
  103. package/src/css/elementUI/message-box.scss +213 -213
  104. package/src/css/elementUI/message.scss +98 -98
  105. package/src/css/elementUI/mixins/_button.scss +165 -165
  106. package/src/css/elementUI/mixins/_col.scss +33 -33
  107. package/src/css/elementUI/mixins/_var.scss +67 -67
  108. package/src/css/elementUI/mixins/config.scss +5 -5
  109. package/src/css/elementUI/mixins/function.scss +88 -88
  110. package/src/css/elementUI/mixins/mixins.scss +237 -237
  111. package/src/css/elementUI/mixins/utils.scss +39 -39
  112. package/src/css/elementUI/notification.scss +104 -104
  113. package/src/css/elementUI/option-group.scss +33 -33
  114. package/src/css/elementUI/option.scss +71 -71
  115. package/src/css/elementUI/overlay.scss +17 -17
  116. package/src/css/elementUI/page-header.scss +60 -60
  117. package/src/css/elementUI/pagination.scss +238 -238
  118. package/src/css/elementUI/popconfirm.scss +16 -16
  119. package/src/css/elementUI/popover.scss +61 -61
  120. package/src/css/elementUI/popper.scss +106 -106
  121. package/src/css/elementUI/progress.scss +179 -179
  122. package/src/css/elementUI/radio-button.scss +169 -169
  123. package/src/css/elementUI/radio-group.scss +9 -9
  124. package/src/css/elementUI/radio.scss +215 -215
  125. package/src/css/elementUI/rate.scss +108 -108
  126. package/src/css/elementUI/reset.scss +98 -98
  127. package/src/css/elementUI/result.scss +57 -57
  128. package/src/css/elementUI/row.scss +35 -35
  129. package/src/css/elementUI/scrollbar.scss +97 -97
  130. package/src/css/elementUI/segmented.scss +183 -183
  131. package/src/css/elementUI/select-dropdown-v2.scss +1 -1
  132. package/src/css/elementUI/select-dropdown.scss +57 -57
  133. package/src/css/elementUI/select-v2.scss +4 -4
  134. package/src/css/elementUI/select.scss +253 -253
  135. package/src/css/elementUI/skeleton-item.scss +83 -83
  136. package/src/css/elementUI/skeleton.scss +44 -44
  137. package/src/css/elementUI/slider.scss +212 -212
  138. package/src/css/elementUI/space.scss +20 -20
  139. package/src/css/elementUI/spinner.scss +43 -43
  140. package/src/css/elementUI/statistic.scss +35 -35
  141. package/src/css/elementUI/step.scss +316 -316
  142. package/src/css/elementUI/steps.scss +21 -21
  143. package/src/css/elementUI/switch.scss +300 -300
  144. package/src/css/elementUI/table-column.scss +98 -98
  145. package/src/css/elementUI/table-v2.scss +236 -236
  146. package/src/css/elementUI/table.scss +694 -694
  147. package/src/css/elementUI/tabs.scss +659 -659
  148. package/src/css/elementUI/tag.scss +181 -181
  149. package/src/css/elementUI/text.scss +51 -51
  150. package/src/css/elementUI/time-picker.scss +5 -5
  151. package/src/css/elementUI/time-select.scss +37 -37
  152. package/src/css/elementUI/timeline-item.scss +84 -84
  153. package/src/css/elementUI/timeline.scss +46 -46
  154. package/src/css/elementUI/tooltip-v2.scss +95 -95
  155. package/src/css/elementUI/tour.scss +187 -187
  156. package/src/css/elementUI/transfer.scss +203 -203
  157. package/src/css/elementUI/tree-select.scss +41 -41
  158. package/src/css/elementUI/tree.scss +134 -134
  159. package/src/css/elementUI/upload.scss +654 -654
  160. package/src/css/elementUI/var.scss +87 -87
  161. package/src/css/elementUI/virtual-list.scss +40 -40
  162. package/src/directives/vKeydown.ts +93 -93
  163. package/src/hooks/useDictHooks.ts +79 -76
  164. package/src/hooks/useEcharts.ts +58 -58
  165. package/src/hooks/useFileView.ts +34 -34
  166. package/src/hooks/useMessageHooks.ts +132 -132
  167. package/src/hooks/useResetRefHooks.ts +18 -18
  168. package/src/interface/BaseEntity.ts +28 -28
  169. package/src/interface/IMdmDept.ts +82 -82
  170. package/src/interface/IOrgDeptInfo.ts +12 -12
  171. package/src/interface/ISysDictDataCacheVo.ts +46 -46
  172. package/src/interface/ISysDictType.ts +37 -37
  173. package/src/interface/ISysMenuDataVo.ts +22 -22
  174. package/src/interface/ISysMenuInfoVo.ts +83 -83
  175. package/src/interface/ISysMenuOperationVo.ts +21 -21
  176. package/src/interface/ISysUploadFiles.ts +16 -16
  177. package/src/interface/ISysUserInfo.ts +70 -70
  178. package/src/interface/IUserPermissionVo.ts +34 -34
  179. package/src/interface/Message.ts +69 -69
  180. package/src/interface/PageData.ts +17 -17
  181. package/src/interface/ResponseData.ts +16 -16
  182. package/src/interface/dictMapType.ts +11 -11
  183. package/src/interface/enum/FlexEnum.ts +85 -85
  184. package/src/interface/enum/MessageEnum.ts +41 -41
  185. package/src/main.ts +14 -14
  186. package/src/mixin/globalMixin.ts +37 -37
  187. package/src/packages/index.ts +18 -18
  188. package/src/packages/text.vue +13 -13
  189. package/src/plugins/echartsConfig.ts +73 -73
  190. package/src/plugins/plugins.ts +12 -12
  191. package/src/router/index.ts +23 -23
  192. package/src/stores/dictStore.ts +27 -20
  193. package/src/stores/messageStore.ts +49 -49
  194. package/src/stores/permissionStore.ts +108 -108
  195. package/src/stores/storeConfig.ts +23 -23
  196. package/src/stores/userInfoStore.ts +31 -31
  197. package/src/utils/AxiosConfig.ts +216 -216
  198. package/src/utils/encrypt.ts +10 -10
  199. package/src/utils/request.ts +55 -55
  200. package/tsconfig.app.json +12 -12
  201. package/tsconfig.json +11 -11
  202. package/tsconfig.node.json +18 -18
  203. package/vite.config.ts +38 -38
  204. package/adtec-core-package/adtec-core-package.css +0 -1
  205. package/adtec-core-package/adtec-core-package.js +0 -41364
  206. package/adtec-core-package/adtec-core-package.umd.cjs +0 -79
  207. package/adtec-core-package/favicon.ico +0 -0
@@ -1,279 +1,286 @@
1
- <!--创建人 丁盼-->
2
- <!--说明: 文档上传组件-->
3
- <!--创建时间: 2024/12/2 下午1:59-->
4
- <!--修改时间: 2024/12/2 下午1:59-->
5
- <template>
6
- <el-flex v-if="!isEdlt">
7
- <el-flex
8
- v-for="item of uploadFilesList"
9
- :key="item.id"
10
- class="file-class"
11
- @click="fileView(item.id)"
12
- :width="itemWidth"
13
- >
14
- <el-flex align="center" justify="flex-start">
15
- <el-tooltip class="box-item" :content="item.name" placement="top">
16
- <el-text truncated style="cursor: pointer"
17
- ><el-icons :model-value="getIcon(item.name)" style="margin-right: 5px"></el-icons
18
- >{{ item.name }}</el-text
19
- >
20
- </el-tooltip>
21
- </el-flex>
22
- </el-flex>
23
- </el-flex>
24
- <el-upload
25
- v-else
26
- ref="ref_upload"
27
- :file-list="uploadFilesList"
28
- @success="success"
29
- @remove="remove"
30
- @preview="preview"
31
- @error="error"
32
- @exceed="exceed"
33
- :before-upload="beforeUpload"
34
- drag
35
- :accept="getAccept"
36
- :action="'/api/doc/uploadFile/' + business + '/' + businessId + '/' + association"
37
- multiple
38
- :limit="limit"
39
- :headers="uploadHeaders"
40
- >
41
- <el-icon class="el-icon--upload"><upload-filled /></el-icon>
42
- <div class="el-upload__text">拖动文件或<em>点击上传</em></div>
43
- <div class="el-upload__tip">最大上传文件大小{{ size }}MB</div>
44
- <template #file="{ file }">
45
- <el-flex
46
- class="file-class"
47
- @mousemove="mousemove(file.name)"
48
- @mouseout="mouseout"
49
- @click="preview(file)"
50
- height="20px"
51
- :width="itemWidth"
52
- >
53
- <el-flex align="center" justify="flex-start">
54
- <el-tooltip class="box-item" :content="file.name" placement="top">
55
- <el-text truncated style="cursor: pointer"
56
- ><el-icons :model-value="getIcon(file.name)" style="margin-right: 5px"></el-icons
57
- >{{ file.name }}</el-text
58
- >
59
- </el-tooltip>
60
- </el-flex>
61
- <el-flex align="center" justify="flex-end" width="50px">
62
- <el-text v-if="!file?.businessId && file.percentage !== 100"
63
- >{{ file.percentage }}%</el-text
64
- >
65
- <el-icons
66
- v-if="file?.businessId || file.percentage === 100"
67
- @click.prevent.stop="fileClick(file)"
68
- :model-value="file.name === hoverfileName ? 'adtec-close' : 'adtec-success'"
69
- style="color: var(--el-color-success); font-size: 14px"
70
- :style="{
71
- color:
72
- file.name === hoverfileName ? 'var(--el-color-danger)' : 'var(--el-color-success)',
73
- }"
74
- ></el-icons>
75
- </el-flex>
76
- </el-flex>
77
- </template>
78
- </el-upload>
79
- </template>
80
-
81
- <script setup lang="ts">
82
- import { UploadFilled } from '@element-plus/icons-vue'
83
- import { computed, onMounted, ref } from 'vue'
84
- import { ElMessage, type UploadFile, type UploadFiles, type UploadUserFile } from 'element-plus'
85
- import type { ISysUploadFiles } from '../../interface/ISysUploadFiles'
86
- //@ts-ignore
87
- import useFileView from '../../hooks/useFileView.ts'
88
- import documentApi from '../../api/DocumentApi.ts'
89
-
90
- const { fileView: fileView } = useFileView()
91
- const uploadHeaders = ref({
92
- Authorization: '',
93
- })
94
- const ref_upload = ref()
95
- const hoverfileName = ref('')
96
- const props = defineProps({
97
- /**
98
- * @description 上传文件数量
99
- * @default 1
100
- */
101
- limit: {
102
- type: Number,
103
- default: 1,
104
- },
105
-
106
- /**
107
- * @description 上传文件类型
108
- * @default ''
109
- * @type {'images'|'document'|'txt'|'pdf'|'word'|'excel'|'ppt'}
110
- */
111
- accept: {
112
- type: String,
113
- default: '',
114
- },
115
- /**
116
- * @description 业务类型
117
- * @default 'default'
118
- */
119
- business: {
120
- type: String,
121
- default: 'default',
122
- },
123
- /**
124
- * @description 业务id
125
- * @default ''
126
- */
127
- businessId: {
128
- type: String,
129
- default: 'default',
130
- },
131
- /**
132
- * 文件列表
133
- */
134
- uploadFilesList: {
135
- type: Array<ISysUploadFiles>,
136
- default: () => [],
137
- },
138
- /**
139
- * @description 是否编辑状态
140
- * @default 'true'
141
- * @type {true|false}
142
- */
143
- isEdlt: {
144
- type: Boolean,
145
- default: true,
146
- },
147
- /**
148
- * @description 文档上传是否默认关联,默认不关联
149
- * @default 'false'
150
- * @type {true|false}
151
- */
152
- association: {
153
- type: Boolean,
154
- default: false,
155
- },
156
- size: {
157
- type: Number,
158
- default: 50,
159
- },
160
- //附件宽度
161
- itemWidth: {
162
- type: String,
163
- default: '100%',
164
- },
165
- })
166
- const mousemove = (fileName: string) => {
167
- hoverfileName.value = fileName
168
- }
169
- const mouseout = () => {
170
- hoverfileName.value = ''
171
- }
172
- const getAccept = computed(() => {
173
- if (props.accept === 'images') {
174
- return '.jpg,.jpeg,.png,.gif,.bmp,.JPG,.JPEG,.PBG,.GIF,.BMP'
175
- } else if (props.accept === 'document') {
176
- return '.txt,.pdf,.doc,.docx,.xls,.xlsx,.ppt,.pptx'
177
- } else if (props.accept === 'txt') {
178
- return '.txt'
179
- } else if (props.accept === 'pdf') {
180
- return '.pdf'
181
- } else if (props.accept === 'word') {
182
- return '.doc,.docx'
183
- } else if (props.accept === 'excel') {
184
- return '.xls,.xlsx'
185
- } else if (props.accept === 'ppt') {
186
- return '.ppt,.pptx'
187
- } else {
188
- return ''
189
- }
190
- })
191
- const getIcon = (fileName: string) => {
192
- const type: string = fileName.split('.').pop() + ''
193
- if ('.jpg,.jpeg,.png,.gif,.bmp,.JPG,.JPEG,.PBG,.GIF,.BMP'.includes(type)) {
194
- return 'adtec-image'
195
- } else if ('txt'.includes(type)) {
196
- return 'adtec-text'
197
- } else if ('pdf'.includes(type)) {
198
- return 'adtec-pdf'
199
- } else if ('doc,docx'.includes(type)) {
200
- return 'adtec-word'
201
- } else if ('xls,xlsx'.includes(type)) {
202
- return 'adtec-excel'
203
- } else if ('ppt,pptx'.includes(type)) {
204
- return 'adtec-ppt'
205
- } else {
206
- return 'adtec-text'
207
- }
208
- }
209
- const success = (response: any, uploadFile: UploadFile, uploadFiles: UploadFiles) => {
210
- if (response.code === '0') {
211
- props.uploadFilesList.push(response.data as ISysUploadFiles)
212
- } else {
213
- ElMessage.error(response.msg)
214
- ref_upload.value?.handleRemove(uploadFile)
215
- }
216
- }
217
- const beforeUpload = (file: File) => {
218
- const f = props.uploadFilesList.find((c) => c.name === file.name)
219
- if (f) {
220
- ElMessage.warning(file.name + ',文件已存在')
221
- return false
222
- } else if (file.size > props.size * 1024 * 1024) {
223
- ElMessage.warning('文件大小不能超过' + props.size + 'MB')
224
- return false
225
- }
226
- return true
227
- }
228
- const fileClick = (file: UploadFile) => {
229
- if (file.name === hoverfileName.value) {
230
- ref_upload.value?.handleRemove(file)
231
- } else {
232
- preview(file)
233
- }
234
- }
235
- const exceed = (files: File[], uploadFiles: UploadUserFile[]) => {
236
- ElMessage.warning('最多上传' + props.limit + '个文件,上传文件数量已达到限制')
237
- }
238
- const error = () => {
239
- ElMessage.error('上传失败')
240
- }
241
- const preview = async (uploadFile: UploadFile) => {
242
- console.log('preview', uploadFile)
243
- const file = props.uploadFilesList.find((c) => c.name === uploadFile.name)
244
- if (file) {
245
- //if ((uploadFile.response as any).code === '0') {
246
- // const data = (uploadFile.response as any).data as ISysUploadFiles
247
- fileView(file.id)
248
- }
249
- }
250
- const remove = async (file: UploadFile) => {
251
- // if ((file.response as any).code === '0') {
252
- // const data = (file.response as any).data as ISysUploadFiles
253
- const find = props.uploadFilesList.find((c) => c.name === file.name)
254
- if (find) {
255
- try {
256
- await documentApi.delSysUploadFile(find.id)
257
- props.uploadFilesList.splice(props.uploadFilesList.indexOf(find), 1)
258
- } catch (error: any) {
259
- ElMessage.error(error.msg)
260
- }
261
- }
262
- // }
263
- }
264
- onMounted(() => {
265
- uploadHeaders.value.Authorization = sessionStorage.getItem('Authorization') + ''
266
- })
267
- </script>
268
- <style scoped lang="scss">
269
- .file-class {
270
- }
271
- .file-class :hover {
272
- color: var(--el-color-primary);
273
- }
274
- :deep {
275
- .el-icon--upload {
276
- margin-bottom: 0;
277
- }
278
- }
279
- </style>
1
+ <!--创建人 丁盼-->
2
+ <!--说明: 文档上传组件-->
3
+ <!--创建时间: 2024/12/2 下午1:59-->
4
+ <!--修改时间: 2024/12/2 下午1:59-->
5
+ <template>
6
+ <el-flex v-if="!isEdlt" :vertical="vertical">
7
+ <el-flex
8
+ v-for="item of uploadFilesList"
9
+ :key="item.id"
10
+ class="file-class"
11
+ @click="fileView(item.id)"
12
+ :width="itemWidth"
13
+ >
14
+ <el-flex align="center" justify="flex-start">
15
+ <el-tooltip class="box-item" :content="item.name" placement="top">
16
+ <el-text truncated style="cursor: pointer"
17
+ ><el-icons :model-value="getIcon(item.name)" style="margin-right: 5px"></el-icons
18
+ >{{ item.name }}</el-text
19
+ >
20
+ </el-tooltip>
21
+ </el-flex>
22
+ </el-flex>
23
+ </el-flex>
24
+ <el-upload
25
+ v-else
26
+ ref="ref_upload"
27
+ :file-list="uploadFilesList"
28
+ @success="success"
29
+ @remove="remove"
30
+ @preview="preview"
31
+ @error="error"
32
+ @exceed="exceed"
33
+ :before-upload="beforeUpload"
34
+ drag
35
+ :accept="getAccept"
36
+ :action="'/api/doc/uploadFile/' + business + '/' + businessId + '/' + association"
37
+ multiple
38
+ :limit="limit"
39
+ :headers="uploadHeaders"
40
+ >
41
+ <el-icon class="el-icon--upload"><upload-filled /></el-icon>
42
+ <div class="el-upload__text">拖动文件或<em>点击上传</em></div>
43
+ <div class="el-upload__tip">最大上传文件大小{{ size }}MB</div>
44
+ <template #file="{ file }">
45
+ <el-flex
46
+ class="file-class"
47
+ @mousemove="mousemove(file.name)"
48
+ @mouseout="mouseout"
49
+ @click="preview(file)"
50
+ height="20px"
51
+ :width="itemWidth"
52
+ >
53
+ <el-flex align="center" justify="flex-start">
54
+ <el-tooltip class="box-item" :content="file.name" placement="top">
55
+ <el-text truncated style="cursor: pointer"
56
+ ><el-icons :model-value="getIcon(file.name)" style="margin-right: 5px"></el-icons
57
+ >{{ file.name }}</el-text
58
+ >
59
+ </el-tooltip>
60
+ </el-flex>
61
+ <el-flex align="center" justify="flex-end" width="50px">
62
+ <el-text v-if="!file?.businessId && file.percentage !== 100"
63
+ >{{ file.percentage }}%</el-text
64
+ >
65
+ <el-icons
66
+ v-if="file?.businessId || file.percentage === 100"
67
+ @click.prevent.stop="fileClick(file)"
68
+ :model-value="file.name === hoverfileName ? 'adtec-close' : 'adtec-success'"
69
+ style="color: var(--el-color-success); font-size: 14px"
70
+ :style="{
71
+ color:
72
+ file.name === hoverfileName ? 'var(--el-color-danger)' : 'var(--el-color-success)',
73
+ }"
74
+ ></el-icons>
75
+ </el-flex>
76
+ </el-flex>
77
+ </template>
78
+ </el-upload>
79
+ </template>
80
+
81
+ <script setup lang="ts">
82
+ import { UploadFilled } from '@element-plus/icons-vue'
83
+ import { computed, onMounted, ref } from 'vue'
84
+ import { ElMessage, type UploadFile, type UploadFiles, type UploadUserFile } from 'element-plus'
85
+ import type { ISysUploadFiles } from '../../interface/ISysUploadFiles'
86
+ //@ts-ignore
87
+ import useFileView from '../../hooks/useFileView.ts'
88
+ import documentApi from '../../api/DocumentApi.ts'
89
+
90
+ const { fileView: fileView } = useFileView()
91
+ const uploadHeaders = ref({
92
+ Authorization: '',
93
+ })
94
+ const ref_upload = ref()
95
+ const hoverfileName = ref('')
96
+ const props = defineProps({
97
+ /**
98
+ * @description 上传文件数量
99
+ * @default 1
100
+ */
101
+ limit: {
102
+ type: Number,
103
+ default: 1,
104
+ },
105
+ /**
106
+ * @description 纵向排列
107
+ * @default false
108
+ */
109
+ vertical: {
110
+ type: Boolean,
111
+ default: false,
112
+ },
113
+ /**
114
+ * @description 上传文件类型
115
+ * @default ''
116
+ * @type {'images'|'document'|'txt'|'pdf'|'word'|'excel'|'ppt'}
117
+ */
118
+ accept: {
119
+ type: String,
120
+ default: '',
121
+ },
122
+ /**
123
+ * @description 业务类型
124
+ * @default 'default'
125
+ */
126
+ business: {
127
+ type: String,
128
+ default: 'default',
129
+ },
130
+ /**
131
+ * @description 业务id
132
+ * @default ''
133
+ */
134
+ businessId: {
135
+ type: String,
136
+ default: 'default',
137
+ },
138
+ /**
139
+ * 文件列表
140
+ */
141
+ uploadFilesList: {
142
+ type: Array<ISysUploadFiles>,
143
+ default: () => [],
144
+ },
145
+ /**
146
+ * @description 是否编辑状态
147
+ * @default 'true'
148
+ * @type {true|false}
149
+ */
150
+ isEdlt: {
151
+ type: Boolean,
152
+ default: true,
153
+ },
154
+ /**
155
+ * @description 文档上传是否默认关联,默认不关联
156
+ * @default 'false'
157
+ * @type {true|false}
158
+ */
159
+ association: {
160
+ type: Boolean,
161
+ default: false,
162
+ },
163
+ size: {
164
+ type: Number,
165
+ default: 50,
166
+ },
167
+ //附件宽度
168
+ itemWidth: {
169
+ type: String,
170
+ default: '100%',
171
+ },
172
+ })
173
+ const mousemove = (fileName: string) => {
174
+ hoverfileName.value = fileName
175
+ }
176
+ const mouseout = () => {
177
+ hoverfileName.value = ''
178
+ }
179
+ const getAccept = computed(() => {
180
+ if (props.accept === 'images') {
181
+ return '.jpg,.jpeg,.png,.gif,.bmp,.JPG,.JPEG,.PBG,.GIF,.BMP'
182
+ } else if (props.accept === 'document') {
183
+ return '.txt,.pdf,.doc,.docx,.xls,.xlsx,.ppt,.pptx'
184
+ } else if (props.accept === 'txt') {
185
+ return '.txt'
186
+ } else if (props.accept === 'pdf') {
187
+ return '.pdf'
188
+ } else if (props.accept === 'word') {
189
+ return '.doc,.docx'
190
+ } else if (props.accept === 'excel') {
191
+ return '.xls,.xlsx'
192
+ } else if (props.accept === 'ppt') {
193
+ return '.ppt,.pptx'
194
+ } else {
195
+ return ''
196
+ }
197
+ })
198
+ const getIcon = (fileName: string) => {
199
+ const type: string = fileName.split('.').pop() + ''
200
+ if ('.jpg,.jpeg,.png,.gif,.bmp,.JPG,.JPEG,.PBG,.GIF,.BMP'.includes(type)) {
201
+ return 'adtec-image'
202
+ } else if ('txt'.includes(type)) {
203
+ return 'adtec-text'
204
+ } else if ('pdf'.includes(type)) {
205
+ return 'adtec-pdf'
206
+ } else if ('doc,docx'.includes(type)) {
207
+ return 'adtec-word'
208
+ } else if ('xls,xlsx'.includes(type)) {
209
+ return 'adtec-excel'
210
+ } else if ('ppt,pptx'.includes(type)) {
211
+ return 'adtec-ppt'
212
+ } else {
213
+ return 'adtec-text'
214
+ }
215
+ }
216
+ const success = (response: any, uploadFile: UploadFile, uploadFiles: UploadFiles) => {
217
+ if (response.code === '0') {
218
+ props.uploadFilesList.push(response.data as ISysUploadFiles)
219
+ } else {
220
+ ElMessage.error(response.msg)
221
+ ref_upload.value?.handleRemove(uploadFile)
222
+ }
223
+ }
224
+ const beforeUpload = (file: File) => {
225
+ const f = props.uploadFilesList.find((c) => c.name === file.name)
226
+ if (f) {
227
+ ElMessage.warning(file.name + ',文件已存在')
228
+ return false
229
+ } else if (file.size > props.size * 1024 * 1024) {
230
+ ElMessage.warning('文件大小不能超过' + props.size + 'MB')
231
+ return false
232
+ }
233
+ return true
234
+ }
235
+ const fileClick = (file: UploadFile) => {
236
+ if (file.name === hoverfileName.value) {
237
+ ref_upload.value?.handleRemove(file)
238
+ } else {
239
+ preview(file)
240
+ }
241
+ }
242
+ const exceed = (files: File[], uploadFiles: UploadUserFile[]) => {
243
+ ElMessage.warning('最多上传' + props.limit + '个文件,上传文件数量已达到限制')
244
+ }
245
+ const error = () => {
246
+ ElMessage.error('上传失败')
247
+ }
248
+ const preview = async (uploadFile: UploadFile) => {
249
+ console.log('preview', uploadFile)
250
+ const file = props.uploadFilesList.find((c) => c.name === uploadFile.name)
251
+ if (file) {
252
+ //if ((uploadFile.response as any).code === '0') {
253
+ // const data = (uploadFile.response as any).data as ISysUploadFiles
254
+ fileView(file.id)
255
+ }
256
+ }
257
+ const remove = async (file: UploadFile) => {
258
+ // if ((file.response as any).code === '0') {
259
+ // const data = (file.response as any).data as ISysUploadFiles
260
+ const find = props.uploadFilesList.find((c) => c.name === file.name)
261
+ if (find) {
262
+ try {
263
+ await documentApi.delSysUploadFile(find.id)
264
+ props.uploadFilesList.splice(props.uploadFilesList.indexOf(find), 1)
265
+ } catch (error: any) {
266
+ ElMessage.error(error.msg)
267
+ }
268
+ }
269
+ // }
270
+ }
271
+ onMounted(() => {
272
+ uploadHeaders.value.Authorization = sessionStorage.getItem('Authorization') + ''
273
+ })
274
+ </script>
275
+ <style scoped lang="scss">
276
+ .file-class {
277
+ }
278
+ .file-class :hover {
279
+ color: var(--el-color-primary);
280
+ }
281
+ :deep {
282
+ .el-icon--upload {
283
+ margin-bottom: 0;
284
+ }
285
+ }
286
+ </style>