adtec-core-package 0.2.3 → 0.2.4

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 (156) hide show
  1. package/.editorconfig +6 -6
  2. package/.prettierrc.json +7 -7
  3. package/.vscode/extensions.json +8 -8
  4. package/README.md +39 -39
  5. package/env.d.ts +1 -1
  6. package/eslint.config.js +56 -56
  7. package/index.html +13 -13
  8. package/package.json +56 -56
  9. package/src/App.vue +9 -9
  10. package/src/assets/base.css +86 -86
  11. package/src/assets/logo.svg +1 -1
  12. package/src/assets/main.css +35 -35
  13. package/src/assets/style/transition.scss +49 -49
  14. package/src/components/OperationAuth/operationAuth.vue +26 -26
  15. package/src/components/Search/ElIconSearch.vue +239 -239
  16. package/src/components/Search/ElSearch.vue +132 -132
  17. package/src/components/icon/ElIconBtn.vue +182 -182
  18. package/src/components/icon/ElIcons.vue +38 -38
  19. package/src/components/upload/ElUploads.vue +279 -279
  20. package/src/css/elementUI/affix.scss +7 -7
  21. package/src/css/elementUI/alert.scss +115 -115
  22. package/src/css/elementUI/anchor-link.scss +41 -41
  23. package/src/css/elementUI/anchor.scss +88 -88
  24. package/src/css/elementUI/aside.scss +8 -8
  25. package/src/css/elementUI/avatar.scss +55 -55
  26. package/src/css/elementUI/backtop.scss +29 -29
  27. package/src/css/elementUI/badge.scss +58 -58
  28. package/src/css/elementUI/base.scss +3 -3
  29. package/src/css/elementUI/breadcrumb.scss +62 -62
  30. package/src/css/elementUI/button-group.scss +80 -80
  31. package/src/css/elementUI/button.scss +304 -304
  32. package/src/css/elementUI/calendar.scss +80 -80
  33. package/src/css/elementUI/card.scss +45 -45
  34. package/src/css/elementUI/carousel-item.scss +58 -58
  35. package/src/css/elementUI/carousel.scss +188 -188
  36. package/src/css/elementUI/cascader-panel.scss +138 -138
  37. package/src/css/elementUI/cascader.scss +230 -230
  38. package/src/css/elementUI/check-tag.scss +60 -60
  39. package/src/css/elementUI/checkbox-button.scss +140 -140
  40. package/src/css/elementUI/checkbox-group.scss +7 -7
  41. package/src/css/elementUI/checkbox.scss +298 -298
  42. package/src/css/elementUI/col.scss +48 -48
  43. package/src/css/elementUI/collapse.scss +70 -70
  44. package/src/css/elementUI/color/index.scss +20 -20
  45. package/src/css/elementUI/color-picker.scss +392 -392
  46. package/src/css/elementUI/common/popup.scss +47 -47
  47. package/src/css/elementUI/common/transition.scss +122 -122
  48. package/src/css/elementUI/container.scss +14 -14
  49. package/src/css/elementUI/dark/css-vars.scss +39 -39
  50. package/src/css/elementUI/dark/var.scss +222 -222
  51. package/src/css/elementUI/date-picker/date-picker.scss +110 -110
  52. package/src/css/elementUI/date-picker/date-range-picker.scss +113 -113
  53. package/src/css/elementUI/date-picker/date-table.scss +158 -158
  54. package/src/css/elementUI/date-picker/month-table.scss +112 -112
  55. package/src/css/elementUI/date-picker/picker-panel.scss +131 -131
  56. package/src/css/elementUI/date-picker/time-picker.scss +90 -90
  57. package/src/css/elementUI/date-picker/time-range-picker.scss +33 -33
  58. package/src/css/elementUI/date-picker/time-spinner.scss +111 -111
  59. package/src/css/elementUI/date-picker/year-table.scss +108 -108
  60. package/src/css/elementUI/date-picker.scss +9 -9
  61. package/src/css/elementUI/descriptions-item.scss +73 -73
  62. package/src/css/elementUI/descriptions.scss +152 -152
  63. package/src/css/elementUI/dialog.scss +199 -199
  64. package/src/css/elementUI/display.scss +12 -12
  65. package/src/css/elementUI/divider.scss +48 -48
  66. package/src/css/elementUI/dropdown.scss +208 -208
  67. package/src/css/elementUI/empty.scss +49 -49
  68. package/src/css/elementUI/footer.scss +12 -12
  69. package/src/css/elementUI/form.scss +243 -243
  70. package/src/css/elementUI/header.scss +12 -12
  71. package/src/css/elementUI/icon.scss +45 -45
  72. package/src/css/elementUI/image-viewer.scss +139 -139
  73. package/src/css/elementUI/image.scss +49 -49
  74. package/src/css/elementUI/index.scss +110 -110
  75. package/src/css/elementUI/input-number.scss +178 -178
  76. package/src/css/elementUI/input.scss +478 -478
  77. package/src/css/elementUI/link.scss +90 -90
  78. package/src/css/elementUI/loading.scss +104 -104
  79. package/src/css/elementUI/main.scss +14 -14
  80. package/src/css/elementUI/mention.scss +88 -88
  81. package/src/css/elementUI/menu.scss +339 -339
  82. package/src/css/elementUI/message-box.scss +213 -213
  83. package/src/css/elementUI/message.scss +98 -98
  84. package/src/css/elementUI/mixins/_button.scss +165 -165
  85. package/src/css/elementUI/mixins/_col.scss +33 -33
  86. package/src/css/elementUI/mixins/_var.scss +67 -67
  87. package/src/css/elementUI/mixins/config.scss +5 -5
  88. package/src/css/elementUI/mixins/function.scss +88 -88
  89. package/src/css/elementUI/mixins/mixins.scss +237 -237
  90. package/src/css/elementUI/mixins/utils.scss +39 -39
  91. package/src/css/elementUI/notification.scss +104 -104
  92. package/src/css/elementUI/option-group.scss +33 -33
  93. package/src/css/elementUI/option.scss +71 -71
  94. package/src/css/elementUI/overlay.scss +17 -17
  95. package/src/css/elementUI/page-header.scss +60 -60
  96. package/src/css/elementUI/pagination.scss +238 -238
  97. package/src/css/elementUI/popconfirm.scss +16 -16
  98. package/src/css/elementUI/popover.scss +61 -61
  99. package/src/css/elementUI/popper.scss +106 -106
  100. package/src/css/elementUI/progress.scss +179 -179
  101. package/src/css/elementUI/radio-button.scss +169 -169
  102. package/src/css/elementUI/radio-group.scss +9 -9
  103. package/src/css/elementUI/radio.scss +215 -215
  104. package/src/css/elementUI/rate.scss +108 -108
  105. package/src/css/elementUI/reset.scss +98 -98
  106. package/src/css/elementUI/result.scss +57 -57
  107. package/src/css/elementUI/row.scss +35 -35
  108. package/src/css/elementUI/scrollbar.scss +97 -97
  109. package/src/css/elementUI/segmented.scss +183 -183
  110. package/src/css/elementUI/select-dropdown-v2.scss +1 -1
  111. package/src/css/elementUI/select-dropdown.scss +57 -57
  112. package/src/css/elementUI/select-v2.scss +4 -4
  113. package/src/css/elementUI/select.scss +253 -253
  114. package/src/css/elementUI/skeleton-item.scss +83 -83
  115. package/src/css/elementUI/skeleton.scss +44 -44
  116. package/src/css/elementUI/slider.scss +212 -212
  117. package/src/css/elementUI/space.scss +20 -20
  118. package/src/css/elementUI/spinner.scss +43 -43
  119. package/src/css/elementUI/statistic.scss +35 -35
  120. package/src/css/elementUI/step.scss +316 -316
  121. package/src/css/elementUI/steps.scss +21 -21
  122. package/src/css/elementUI/switch.scss +300 -300
  123. package/src/css/elementUI/table-column.scss +98 -98
  124. package/src/css/elementUI/table-v2.scss +236 -236
  125. package/src/css/elementUI/tag.scss +181 -181
  126. package/src/css/elementUI/text.scss +51 -51
  127. package/src/css/elementUI/time-picker.scss +5 -5
  128. package/src/css/elementUI/time-select.scss +37 -37
  129. package/src/css/elementUI/timeline-item.scss +84 -84
  130. package/src/css/elementUI/timeline.scss +46 -46
  131. package/src/css/elementUI/tooltip-v2.scss +95 -95
  132. package/src/css/elementUI/tour.scss +187 -187
  133. package/src/css/elementUI/transfer.scss +203 -203
  134. package/src/css/elementUI/tree-select.scss +41 -41
  135. package/src/css/elementUI/tree.scss +134 -134
  136. package/src/css/elementUI/upload.scss +654 -654
  137. package/src/css/elementUI/var.scss +87 -87
  138. package/src/css/elementUI/virtual-list.scss +40 -40
  139. package/src/interface/enum/FlexEnum.ts +85 -85
  140. package/src/main.ts +14 -14
  141. package/src/mixin/globalMixin.ts +31 -34
  142. package/src/router/index.ts +23 -23
  143. package/src/utils/encrypt.ts +10 -10
  144. package/src/utils/request.ts +55 -55
  145. package/tsconfig.app.json +12 -12
  146. package/tsconfig.json +11 -11
  147. package/tsconfig.node.json +18 -18
  148. package/vite.config.ts +38 -38
  149. package/src/api/BasicApi.ts +0 -17
  150. package/src/api/SysUserApi.ts +0 -35
  151. package/src/components/business/userSelect.vue +0 -412
  152. package/src/hooks/useDictHooks.ts +0 -81
  153. package/src/interface/IMdmDept.ts +0 -82
  154. package/src/interface/IOrgDeptInfo.ts +0 -12
  155. package/src/interface/ISysUserInfo.ts +0 -70
  156. /package/src/components/autoToolTip/{ElAutoToolTip.vue → index.vue} +0 -0
@@ -1,38 +1,38 @@
1
- <!--创建人 丁盼-->
2
- <!--说明: ElIcons-->
3
- <!--创建时间: 2024/10/18 上午11:47-->
4
- <!--修改时间: 2024/10/18 上午11:47-->
5
- <template>
6
- <!-- <span v-if="selcomp" class="adtec" :class="iconName"></span>-->
7
- <el-icon>
8
- <svg v-if="selcomp" class="icon" aria-hidden="true">
9
- <use :href="'#' + iconName"></use>
10
- </svg>
11
- <component v-else :is="iconName"></component>
12
- </el-icon>
13
- </template>
14
- <script setup lang="ts">
15
- import { computed } from 'vue'
16
- import { useVModel } from '@vueuse/core'
17
- const props = defineProps({
18
- modelValue: String,
19
- })
20
- const emit = defineEmits(['update:modelValue'])
21
- const iconName = useVModel(props, 'modelValue', emit)
22
- const selcomp = computed(() => {
23
- if (iconName.value?.includes('adtec')) {
24
- return true
25
- } else {
26
- return false
27
- }
28
- })
29
- </script>
30
- <style scoped lang="scss">
31
- .icon {
32
- width: 1em;
33
- height: 1em;
34
- vertical-align: -0.15em;
35
- fill: currentColor;
36
- overflow: hidden;
37
- }
38
- </style>
1
+ <!--创建人 丁盼-->
2
+ <!--说明: ElIcons-->
3
+ <!--创建时间: 2024/10/18 上午11:47-->
4
+ <!--修改时间: 2024/10/18 上午11:47-->
5
+ <template>
6
+ <!-- <span v-if="selcomp" class="adtec" :class="iconName"></span>-->
7
+ <el-icon>
8
+ <svg v-if="selcomp" class="icon" aria-hidden="true">
9
+ <use :href="'#' + iconName"></use>
10
+ </svg>
11
+ <component v-else :is="iconName"></component>
12
+ </el-icon>
13
+ </template>
14
+ <script setup lang="ts">
15
+ import { computed } from 'vue'
16
+ import { useVModel } from '@vueuse/core'
17
+ const props = defineProps({
18
+ modelValue: String,
19
+ })
20
+ const emit = defineEmits(['update:modelValue'])
21
+ const iconName = useVModel(props, 'modelValue', emit)
22
+ const selcomp = computed(() => {
23
+ if (iconName.value?.includes('adtec')) {
24
+ return true
25
+ } else {
26
+ return false
27
+ }
28
+ })
29
+ </script>
30
+ <style scoped lang="scss">
31
+ .icon {
32
+ width: 1em;
33
+ height: 1em;
34
+ vertical-align: -0.15em;
35
+ fill: currentColor;
36
+ overflow: hidden;
37
+ }
38
+ </style>
@@ -1,279 +1,279 @@
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">
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,7 +1,7 @@
1
- @use 'mixins/mixins' as *;
2
-
3
- @include b(affix) {
4
- @include m(fixed) {
5
- position: fixed;
6
- }
7
- }
1
+ @use 'mixins/mixins' as *;
2
+
3
+ @include b(affix) {
4
+ @include m(fixed) {
5
+ position: fixed;
6
+ }
7
+ }