adtec-core-package 1.2.4 → 1.2.6

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 (190) hide show
  1. package/README.en.md +36 -36
  2. package/eslint.config.js +11 -21
  3. package/package.json +66 -64
  4. package/src/api/BasicApi.ts +26 -26
  5. package/src/api/DeptInfoApi.ts +19 -19
  6. package/src/api/DocumentApi.ts +27 -27
  7. package/src/api/EmployeeInfoApi.ts +17 -17
  8. package/src/api/SysDictCacheApi.ts +29 -29
  9. package/src/api/SysUserApi.ts +35 -35
  10. package/src/api/framework.ts +12 -12
  11. package/src/api/workflow/workflow.ts +31 -31
  12. package/src/api/workflow/workflowInstApi.ts +72 -72
  13. package/src/assets/style/ant.scss +19 -19
  14. package/src/assets/style/index.less +180 -180
  15. package/src/components/ElFlex/ElFlex.vue +297 -297
  16. package/src/components/ElTotalTools.vue +70 -70
  17. package/src/components/OperationAuth/operationAuth.vue +26 -26
  18. package/src/components/RichTextEditor/RichTextEditor.vue +144 -144
  19. package/src/components/Scrollbars/ElScrollbars.vue +21 -21
  20. package/src/components/Search/ElIconSearch.vue +267 -267
  21. package/src/components/Search/ElSearch.vue +154 -154
  22. package/src/components/SelectInDicators/SelectInDicators.vue +225 -225
  23. package/src/components/SelectInDicators/api/DataIndicatorsApi.ts +28 -28
  24. package/src/components/SelectInDicators/interface/IComIndex.ts +26 -26
  25. package/src/components/SelectInDicators/interface/IComIndexAttri.ts +18 -18
  26. package/src/components/Table/ElTableColumnDynamic.vue +25 -25
  27. package/src/components/Table/ElTableColumnEdit.vue +264 -263
  28. package/src/components/Table/ElTableTool.ts +37 -37
  29. package/src/components/Title/ElTitle.vue +53 -53
  30. package/src/components/autoToolTip/ElAutoToolTip.vue +62 -62
  31. package/src/components/baseEcharts/index.vue +48 -48
  32. package/src/components/bpmntree/api/modules/role.ts +31 -31
  33. package/src/components/bpmntree/api/modules/user.ts +17 -17
  34. package/src/components/bpmntree/components/AdvancedFilter/Operator.vue +112 -112
  35. package/src/components/bpmntree/components/AdvancedFilter/Trigger.vue +23 -23
  36. package/src/components/bpmntree/components/AdvancedFilter/index.vue +230 -230
  37. package/src/components/bpmntree/components/AdvancedFilter/type.ts +20 -20
  38. package/src/components/bpmntree/components/FlowIcon/index.scss +7 -7
  39. package/src/components/bpmntree/components/FlowIcon/index.tsx +68 -68
  40. package/src/components/bpmntree/components/Render/render.vue +90 -90
  41. package/src/components/bpmntree/components/Render/type.ts +12 -12
  42. package/src/components/bpmntree/components/RoleSelector/RolePicker.vue +264 -264
  43. package/src/components/bpmntree/components/RoleSelector/RoleTag.vue +48 -48
  44. package/src/components/bpmntree/components/RoleSelector/index.vue +113 -113
  45. package/src/components/bpmntree/components/UserSelector/UserTag.vue +73 -73
  46. package/src/components/bpmntree/components/UserSelector/index.vue +140 -140
  47. package/src/components/bpmntree/hooks/useDraggableScroll.ts +44 -44
  48. package/src/components/bpmntree/typings/index.d.ts +1 -1
  49. package/src/components/bpmntree/views/flowDesign/index.vue +652 -652
  50. package/src/components/bpmntree/views/flowDesign/nodes/Add.vue +184 -184
  51. package/src/components/bpmntree/views/flowDesign/nodes/ApprovalNode.vue +127 -127
  52. package/src/components/bpmntree/views/flowDesign/nodes/CcNode.vue +93 -93
  53. package/src/components/bpmntree/views/flowDesign/nodes/ConcurrentNode.vue +61 -61
  54. package/src/components/bpmntree/views/flowDesign/nodes/ConditionNode.vue +59 -59
  55. package/src/components/bpmntree/views/flowDesign/nodes/EndNode.vue +80 -80
  56. package/src/components/bpmntree/views/flowDesign/nodes/ExclusiveNode.vue +20 -20
  57. package/src/components/bpmntree/views/flowDesign/nodes/GatewayNode.vue +173 -173
  58. package/src/components/bpmntree/views/flowDesign/nodes/InclusiveNode.vue +20 -20
  59. package/src/components/bpmntree/views/flowDesign/nodes/JumpNode.vue +49 -49
  60. package/src/components/bpmntree/views/flowDesign/nodes/Node.vue +346 -346
  61. package/src/components/bpmntree/views/flowDesign/nodes/NotifyNode.vue +115 -115
  62. package/src/components/bpmntree/views/flowDesign/nodes/ParallelNode.vue +20 -20
  63. package/src/components/bpmntree/views/flowDesign/nodes/PopoverView.vue +78 -78
  64. package/src/components/bpmntree/views/flowDesign/nodes/StartNode.vue +84 -84
  65. package/src/components/bpmntree/views/flowDesign/nodes/TimerNode.vue +50 -50
  66. package/src/components/bpmntree/views/flowDesign/nodes/TreeNode.vue +45 -45
  67. package/src/components/bpmntree/views/flowDesign/nodes/type.ts +192 -192
  68. package/src/components/bpmntree/views/flowDesign/panels/ApprovalPanel.vue +516 -516
  69. package/src/components/bpmntree/views/flowDesign/panels/AssigneePanel.vue +120 -120
  70. package/src/components/bpmntree/views/flowDesign/panels/CcPanel.vue +99 -99
  71. package/src/components/bpmntree/views/flowDesign/panels/ConditionPanel.vue +41 -41
  72. package/src/components/bpmntree/views/flowDesign/panels/EndPanel.vue +18 -18
  73. package/src/components/bpmntree/views/flowDesign/panels/ExecutionListeners.vue +110 -110
  74. package/src/components/bpmntree/views/flowDesign/panels/JumpPanel.vue +32 -32
  75. package/src/components/bpmntree/views/flowDesign/panels/NotifyPanel.vue +101 -101
  76. package/src/components/bpmntree/views/flowDesign/panels/ParaPanel.vue +248 -248
  77. package/src/components/bpmntree/views/flowDesign/panels/StartPanel.vue +159 -159
  78. package/src/components/bpmntree/views/flowDesign/panels/TaskListeners.vue +110 -110
  79. package/src/components/bpmntree/views/flowDesign/panels/TimerPanel.vue +51 -51
  80. package/src/components/bpmntree/views/flowDesign/panels/index.vue +85 -85
  81. package/src/components/bpmntree/views/view.index.vue +291 -291
  82. package/src/components/business/comp.userForm.vue +292 -286
  83. package/src/components/business/userSelect.vue +413 -413
  84. package/src/components/icon/ElIconBtn.vue +210 -210
  85. package/src/components/upload/ElUploads.vue +285 -285
  86. package/src/components/upload/FileView.vue +159 -159
  87. package/src/components/upload/FileViewComponents.vue +56 -56
  88. package/src/components/workflow/TaskOperation.vue +212 -212
  89. package/src/components/workflow/WorkflowTodoDialog.vue +81 -81
  90. package/src/components/workflow/components/AddOrMinusMultiDialog.vue +159 -159
  91. package/src/components/workflow/components/CheckDialog.vue +315 -316
  92. package/src/components/workflow/components/ProcessDetailComp.vue +133 -133
  93. package/src/components/workflow/components/ProcessDetailDialog.vue +129 -129
  94. package/src/components/workflow/components/ProcessInstance.vue +117 -117
  95. package/src/components/workflow/components/ProcessInstanceStep.vue +226 -226
  96. package/src/components/workflow/components/SelectAssigneeDialog.vue +109 -109
  97. package/src/components/workflow/components/SelectReturnActivityDialog.vue +104 -104
  98. package/src/config/ElementPlusConfig.ts +95 -95
  99. package/src/config/VxeTableConfig.ts +35 -0
  100. package/src/css/elementUI/autocomplete.scss +89 -89
  101. package/src/css/elementUI/common/var.scss +1549 -1549
  102. package/src/css/elementUI/date-picker/picker.scss +219 -219
  103. package/src/css/elementUI/descriptions.scss +152 -152
  104. package/src/css/elementUI/drawer.scss +164 -164
  105. package/src/css/elementUI/table.scss +694 -694
  106. package/src/css/elementUI/tabs.scss +659 -659
  107. package/src/css/vxeTableUI/all.scss +7 -0
  108. package/src/css/vxeTableUI/base.scss +16 -0
  109. package/src/css/vxeTableUI/components/colgroup.scss +0 -0
  110. package/src/css/vxeTableUI/components/column.scss +0 -0
  111. package/src/css/vxeTableUI/components/grid.scss +83 -0
  112. package/src/css/vxeTableUI/components/icon.scss +205 -0
  113. package/src/css/vxeTableUI/components/old-icon.scss +715 -0
  114. package/src/css/vxeTableUI/components/table-module/all.scss +7 -0
  115. package/src/css/vxeTableUI/components/table-module/custom.scss +491 -0
  116. package/src/css/vxeTableUI/components/table-module/edit.scss +0 -0
  117. package/src/css/vxeTableUI/components/table-module/export.scss +130 -0
  118. package/src/css/vxeTableUI/components/table-module/filter.scss +128 -0
  119. package/src/css/vxeTableUI/components/table-module/keyboard.scss +0 -0
  120. package/src/css/vxeTableUI/components/table-module/menu.scss +86 -0
  121. package/src/css/vxeTableUI/components/table-module/validator.scss +0 -0
  122. package/src/css/vxeTableUI/components/table.scss +2242 -0
  123. package/src/css/vxeTableUI/components/toolbar.scss +100 -0
  124. package/src/css/vxeTableUI/components/ui.scss +0 -0
  125. package/src/css/vxeTableUI/components/v-x-e-table.scss +0 -0
  126. package/src/css/vxeTableUI/cssvar.scss +3 -0
  127. package/src/css/vxeTableUI/default.scss +3 -0
  128. package/src/css/vxeTableUI/helpers/baseMixin.scss +82 -0
  129. package/src/css/vxeTableUI/icon/iconfont.ttf +0 -0
  130. package/src/css/vxeTableUI/icon/iconfont.woff +0 -0
  131. package/src/css/vxeTableUI/icon/iconfont.woff2 +0 -0
  132. package/src/css/vxeTableUI/index.scss +4 -0
  133. package/src/css/vxeTableUI/modules.scss +5 -0
  134. package/src/css/vxeTableUI/theme/base.scss +89 -0
  135. package/src/css/vxeTableUI/theme/dark.scss +46 -0
  136. package/src/css/vxeTableUI/theme/light.scss +42 -0
  137. package/src/css/vxeTableUI/variable.scss +41 -0
  138. package/src/directives/vKeydown.ts +91 -91
  139. package/src/hooks/useDictHooks.ts +119 -119
  140. package/src/hooks/useEcharts.ts +58 -58
  141. package/src/hooks/useFileView.ts +34 -11
  142. package/src/hooks/useMessageHooks.ts +132 -132
  143. package/src/hooks/usePermissionToolHooks.ts +21 -21
  144. package/src/hooks/useResetRefHooks.ts +18 -18
  145. package/src/hooks/userWorkflowHooks.ts +92 -92
  146. package/src/interface/BaseEntity.ts +30 -30
  147. package/src/interface/IMdmDept.ts +84 -84
  148. package/src/interface/IMdmEmployee.ts +134 -134
  149. package/src/interface/IMdmEmployeeQuery.ts +20 -19
  150. package/src/interface/IMdmOrg.ts +29 -29
  151. package/src/interface/IMdmOrgQuery.ts +13 -13
  152. package/src/interface/IOrgDeptInfo.ts +12 -12
  153. package/src/interface/ISysDictDataCacheVo.ts +46 -46
  154. package/src/interface/ISysDictType.ts +37 -37
  155. package/src/interface/ISysMenuDataVo.ts +22 -22
  156. package/src/interface/ISysMenuInfoVo.ts +83 -83
  157. package/src/interface/ISysMenuOperationVo.ts +21 -21
  158. package/src/interface/ISysUploadFiles.ts +16 -16
  159. package/src/interface/ISysUserInfo.ts +70 -70
  160. package/src/interface/IUserPermissionVo.ts +34 -34
  161. package/src/interface/Message.ts +73 -73
  162. package/src/interface/PageData.ts +17 -17
  163. package/src/interface/ResponseData.ts +16 -16
  164. package/src/interface/dictMapType.ts +11 -11
  165. package/src/interface/enum/MessageEnum.ts +41 -41
  166. package/src/interface/workflow/IWfProcessDefVo.ts +14 -14
  167. package/src/interface/workflow/IWfReturnNodeVo.ts +15 -16
  168. package/src/interface/workflow/IWfTaskAskVo.ts +61 -65
  169. package/src/interface/workflow/IWfTaskQueryVo.ts +30 -30
  170. package/src/interface/workflow/IWfTaskUsersVo.ts +21 -21
  171. package/src/interface/workflow/IWfTaskVo.ts +187 -187
  172. package/src/interface/workflow/workflow.ts +22 -22
  173. package/src/mixin/globalMixin.ts +45 -45
  174. package/src/packages/index.ts +18 -18
  175. package/src/packages/text.vue +13 -13
  176. package/src/plugins/echartsConfig.ts +73 -73
  177. package/src/plugins/plugins.ts +12 -12
  178. package/src/plugins/renderDialog.ts +74 -74
  179. package/src/stores/dictStore.ts +51 -51
  180. package/src/stores/messageStore.ts +49 -49
  181. package/src/stores/permissionStore.ts +108 -108
  182. package/src/stores/storeConfig.ts +23 -23
  183. package/src/stores/userInfoStore.ts +31 -31
  184. package/src/utils/AxiosConfig.ts +219 -219
  185. package/src/utils/modules.ts +8 -8
  186. package/src/utils/request.ts +76 -76
  187. package/adtec-core-package/adtec-core-package.css +0 -1
  188. package/adtec-core-package/adtec-core-package.js +0 -41605
  189. package/adtec-core-package/adtec-core-package.umd.cjs +0 -79
  190. package/adtec-core-package/favicon.ico +0 -0
@@ -1,285 +1,285 @@
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
- import frameworkUtils from '../../utils/FrameworkUtils.ts'
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
- const file = props.uploadFilesList.find((c) => c.name === uploadFile.name)
250
- if (file) {
251
- //if ((uploadFile.response as any).code === '0') {
252
- // const data = (uploadFile.response as any).data as ISysUploadFiles
253
- fileView(file.id)
254
- }
255
- }
256
- const remove = async (file: UploadFile) => {
257
- // if ((file.response as any).code === '0') {
258
- // const data = (file.response as any).data as ISysUploadFiles
259
- const find = props.uploadFilesList.find((c) => c.name === file.name)
260
- if (find) {
261
- try {
262
- await documentApi.delSysUploadFile(find.id)
263
- props.uploadFilesList.splice(props.uploadFilesList.indexOf(find), 1)
264
- } catch (err: any) {
265
- frameworkUtils.messageError(err)
266
- }
267
- }
268
- // }
269
- }
270
- onMounted(() => {
271
- uploadHeaders.value.Authorization = sessionStorage.getItem('Authorization') + ''
272
- })
273
- </script>
274
- <style scoped lang="scss">
275
- .file-class {
276
- }
277
- .file-class :hover {
278
- color: var(--el-color-primary);
279
- }
280
- :deep {
281
- .el-icon--upload {
282
- margin-bottom: 0;
283
- }
284
- }
285
- </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
+ import frameworkUtils from '../../utils/FrameworkUtils.ts'
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
+ const file = props.uploadFilesList.find((c) => c.name === uploadFile.name)
250
+ if (file) {
251
+ //if ((uploadFile.response as any).code === '0') {
252
+ // const data = (uploadFile.response as any).data as ISysUploadFiles
253
+ fileView(file.id)
254
+ }
255
+ }
256
+ const remove = async (file: UploadFile) => {
257
+ // if ((file.response as any).code === '0') {
258
+ // const data = (file.response as any).data as ISysUploadFiles
259
+ const find = props.uploadFilesList.find((c) => c.name === file.name)
260
+ if (find) {
261
+ try {
262
+ await documentApi.delSysUploadFile(find.id)
263
+ props.uploadFilesList.splice(props.uploadFilesList.indexOf(find), 1)
264
+ } catch (err: any) {
265
+ frameworkUtils.messageError(err)
266
+ }
267
+ }
268
+ // }
269
+ }
270
+ onMounted(() => {
271
+ uploadHeaders.value.Authorization = sessionStorage.getItem('Authorization') + ''
272
+ })
273
+ </script>
274
+ <style scoped lang="scss">
275
+ .file-class {
276
+ }
277
+ .file-class :hover {
278
+ color: var(--el-color-primary);
279
+ }
280
+ :deep {
281
+ .el-icon--upload {
282
+ margin-bottom: 0;
283
+ }
284
+ }
285
+ </style>