agilebuilder-ui 1.1.40 → 1.1.41-rc1

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.
@@ -1,5 +1,5 @@
1
1
  import { openBlock as r, createElementBlock as t, createCommentVNode as o } from "vue";
2
- import { _ as s } from "./index-e9efe5c2.js";
2
+ import { _ as s } from "./index-ea84c751.js";
3
3
  const u = ["src"], f = s({ data: () => ({ src: null }), watch: { $route(n, c) {
4
4
  this.src = this.$route.query.src;
5
5
  } }, mounted() {
@@ -1,4 +1,4 @@
1
- import { _ as f, c as _, g as x, b as P, s as h, m as M, M as O, i as I } from "./index-e9efe5c2.js";
1
+ import { _ as f, c as _, g as x, b as P, s as h, m as M, M as O, i as I } from "./index-ea84c751.js";
2
2
  import { resolveComponent as u, openBlock as l, createBlock as b, withCtx as g, createVNode as v, TransitionGroup as L, createElementBlock as p, Fragment as C, renderList as T, createElementVNode as m, toDisplayString as w, normalizeClass as S, createCommentVNode as y } from "vue";
3
3
  const k = { class: "no-redirect" }, A = f({ name: "Breadcrumb", data: () => ({ levelList: null }), computed: { levelListWithTitle() {
4
4
  return this.levelList.filter((e) => e.meta.title !== void 0 && e.meta.title !== null);
@@ -1,5 +1,5 @@
1
1
  import { resolveComponent as t, openBlock as a, createElementBlock as s, createElementVNode as y, createVNode as l, withCtx as r, createTextVNode as n, toDisplayString as p, createCommentVNode as c, createBlock as h } from "vue";
2
- import { _ as I } from "./index-e9efe5c2.js";
2
+ import { _ as I } from "./index-ea84c751.js";
3
3
  const g = { style: { "padding-bottom": "10px" } }, k = { key: 0, class: "graphDiv" }, N = I({ name: "TacheSubprocessHistory", data: () => ({ type: "graph", workflowId: null }), created() {
4
4
  const o = this.$route.query.workflowId;
5
5
  o && (this.workflowId = parseInt(o));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agilebuilder-ui",
3
- "version": "1.1.40",
3
+ "version": "1.1.41-rc1",
4
4
  "type": "module",
5
5
  "private": false,
6
6
  "main": "./lib/super-ui.js",
@@ -1,24 +1,78 @@
1
1
  <template>
2
- <div v-if="label">
3
- <div
4
- ref="filePreviewRef"
5
- @dblclick="dblclickEvent"
6
- style="display: flex; align-items: center; gap: 5px"
7
- :style="{ cursor: disabled && fileSetObj.disabledNoPreview ? 'not-allowed' : 'pointer' }"
8
- @click="previewMuti()"
9
- >
10
- <el-icon><el-icon-paperclip /></el-icon>
11
- {{ label }}
12
- <el-tooltip v-if="!disabled || !fileSetObj.disabledNoPreview" :content="$t('imatrixUIPublicModel.preview')">
13
- <el-icon style="cursor: pointer; color: #409eff; padding-right: 5px" @click="previewMuti()"
14
- ><el-icon-view
15
- /></el-icon>
16
- </el-tooltip>
17
- <el-tooltip v-if="!disabled || !fileSetObj.disabledNoDownload" :content="$t('imatrixUIPublicModel.download')">
18
- <el-icon style="cursor: pointer; color: #409eff" @click="donwloadViewFile()">
19
- <el-icon-download />
20
- </el-icon>
21
- </el-tooltip>
2
+ <div ref="fsPreviewRef">
3
+ <div ref="filePreviewRef" @dblclick="dblclickEvent" class="fs-preview-container">
4
+ <slot name="prefix"></slot>
5
+ <template v-if="firstFileName">
6
+ <div class="fs-preview-container">
7
+ <super-icon :iconValue="getFileIconByName(firstFileName)" />
8
+ </div>
9
+ <span :title="firstFileName" ref="nameRef" class="amb-list-preivew-name">
10
+ {{ firstFileName }}
11
+ </span>
12
+ </template>
13
+ <div v-if="firstFileName" ref="toolRef" class="fs-preview-tool">
14
+ <el-link v-if="enableDelete && !disabled" type="danger" :underline="false" @click="deleteFirst()">
15
+ {{ $t('fsUpload.delete') }}
16
+ </el-link>
17
+ <el-link
18
+ v-if="!disabled || !fileSetObj.disabledNoPreview"
19
+ type="primary"
20
+ :underline="false"
21
+ @click="previewFirst()"
22
+ >
23
+ {{ $t('fsUpload.preview') }}
24
+ </el-link>
25
+ <el-link
26
+ v-if="!disabled || !fileSetObj.disabledNoDownload"
27
+ type="primary"
28
+ :underline="false"
29
+ @click="downloadFirst()"
30
+ >
31
+ {{ $t('fsUpload.download') }}
32
+ </el-link>
33
+ <el-divider v-if="showMultipleFile" direction="vertical" />
34
+ <el-popover :width="450" trigger="click">
35
+ <template #reference>
36
+ <el-button v-if="showMultipleFile" type="primary" round size="small" @click="showMultiView">
37
+ 更多
38
+ <el-icon><ArrowDownBold /></el-icon>
39
+ </el-button>
40
+ </template>
41
+ <div style="max-height: 300px; overflow-y: auto">
42
+ <div v-for="(item, index) in fileList" :ref="item.serverPath" :key="item.serverPath" class="file-item">
43
+ <div style="display: flex; align-items: center; flex: 1">
44
+ <span>
45
+ <super-icon :iconValue="getFileIconByName(item.showName)" />
46
+ </span>
47
+ <span class="amb-list-preivew-name" style="width: 230px; margin-left: 10px">
48
+ {{ item.showName }}
49
+ </span>
50
+ </div>
51
+ <div class="file-actions">
52
+ <el-link v-if="enableDelete" type="danger" underline @click="deleteFile(item)">
53
+ {{ $t('fsUpload.delete') }}
54
+ </el-link>
55
+ <el-link
56
+ type="primary"
57
+ v-if="!disabled || !fileSetObj.disabledNoPreview"
58
+ underline
59
+ @click="previewSingle(item)"
60
+ >
61
+ {{ $t('fsUpload.preview') }}
62
+ </el-link>
63
+ <el-link
64
+ type="primary"
65
+ v-if="!disabled || !fileSetObj.disabledNoDownload"
66
+ underline
67
+ @click="donwloadFile(index)"
68
+ >
69
+ {{ $t('fsUpload.download') }}
70
+ </el-link>
71
+ </div>
72
+ </div>
73
+ </div>
74
+ </el-popover>
75
+ </div>
22
76
  </div>
23
77
  <el-image-viewer
24
78
  v-if="showPreviewSingleImage"
@@ -26,67 +80,6 @@
26
80
  :url-list="[previewImageInfo.src]"
27
81
  @close="showPreviewSingleImage = false"
28
82
  />
29
- <el-dialog
30
- layout-mobile="bottom"
31
- :append-to-body="true"
32
- :show-close="true"
33
- :title="$t('imatrixUIPublicModel.preview')"
34
- v-model="showPreviewMulti"
35
- width="30%"
36
- @close="$emit('close')"
37
- >
38
- <template v-slot:title>
39
- <span
40
- >{{ $t('imatrixUIPublicModel.preview') }}
41
- <!-- <i v-if="downloadable" class="el-icon-download" style="padding-left:5px;cursor:pointer;color:#409EFF" @click="downloadFile()" /> -->
42
- <!-- <i v-if="deleteable" class="el-icon-delete" style="padding-left:5px;cursor:pointer;color:#F56C6C" @click="deleteFile()" /> -->
43
- </span>
44
- </template>
45
- <el-table :show-header="false" :data="fileList" max-height="60vh">
46
- <el-table-column prop="showName" show-overflow-tooltip>
47
- <template v-slot="scope">
48
- <div style="display: flex; align-items: center">
49
- <span>
50
- <super-icon :iconValue="getFileIconByName(scope.row.showName)" />
51
- </span>
52
- <span class="amb-list-preivew-name" @click="previewSingle(scope.row)">
53
- {{ scope.row.showName }}
54
- </span>
55
- </div>
56
- </template>
57
- </el-table-column>
58
- <el-table-column width="80" align="center">
59
- <template v-slot="scope">
60
- <div style="margin: -10px 0">
61
- <el-tooltip
62
- v-if="!fileSetObj.disabledNoPreview"
63
- :content="$t('imatrixUIPublicModel.preview')"
64
- class="item"
65
- effect="dark"
66
- placement="top"
67
- >
68
- <el-button type="text" @click="previewSingle(scope.row)">
69
- <el-icon style="cursor: pointer"><el-icon-view /></el-icon>
70
- </el-button>
71
- </el-tooltip>
72
- <el-tooltip
73
- v-if="!fileSetObj.disabledNoDownload"
74
- :content="$t('imatrixUIPublicModel.download')"
75
- class="item"
76
- effect="dark"
77
- placement="top"
78
- >
79
- <el-button type="text" @click="donwloadFile(scope.$index, fileList)">
80
- <el-icon v-if="downloadable" style="cursor: pointer">
81
- <el-icon-download />
82
- </el-icon>
83
- </el-button>
84
- </el-tooltip>
85
- </div>
86
- </template>
87
- </el-table-column>
88
- </el-table>
89
- </el-dialog>
90
83
  </div>
91
84
  </template>
92
85
 
@@ -100,6 +93,7 @@ import { packageFile } from '../../super-grid/src/utils'
100
93
  import { getToken } from '../../../src/utils/auth'
101
94
  import { getFileIconByName } from '../../../src/utils/file-util'
102
95
  import { Base64 } from 'js-base64'
96
+ import { ElMessage } from 'element-plus'
103
97
  export default {
104
98
  components: {
105
99
  ElIconPaperclip,
@@ -108,6 +102,10 @@ export default {
108
102
  },
109
103
  name: 'FsPreview',
110
104
  props: {
105
+ width: {
106
+ type: [String, Number],
107
+ default: '100%'
108
+ },
111
109
  label: {
112
110
  type: String,
113
111
  default: null
@@ -135,6 +133,10 @@ export default {
135
133
  disabled: {
136
134
  type: Boolean,
137
135
  default: false
136
+ },
137
+ enableDelete: {
138
+ type: Boolean,
139
+ default: false
138
140
  }
139
141
  },
140
142
  data() {
@@ -144,7 +146,23 @@ export default {
144
146
  previewImageInfo: {},
145
147
  fileList: [],
146
148
  downloadable: true,
147
- keyValueParam: {}
149
+ keyValueParam: {},
150
+ showMultipleFile: false,
151
+ firstFileUUid: ''
152
+ }
153
+ },
154
+ computed: {
155
+ firstFileName() {
156
+ if (this.label?.indexOf(',') > -1) {
157
+ this.showMultipleFile = true
158
+ return this.label.split(',')[0]
159
+ } else {
160
+ this.showMultipleFile = false
161
+ return this.label
162
+ }
163
+ },
164
+ lab() {
165
+ return this.label || this.fileInfo.showName || '文件预览'
148
166
  }
149
167
  },
150
168
  created() {
@@ -157,6 +175,25 @@ export default {
157
175
  dblclickEvent() {
158
176
  clearTimeout(this.time)
159
177
  },
178
+ getFirstFile() {
179
+ const { showName, serverPath } = this.getShowNameAndUuidKey()
180
+ if (serverPath) {
181
+ const uuids = serverPath.split(',')
182
+ if (uuids.length > 1) {
183
+ return { showName: showName.split(',')[0], serverPath: serverPath.split(',')[0] }
184
+ } else {
185
+ return { showName: showName, serverPath: serverPath }
186
+ }
187
+ }
188
+ return null
189
+ },
190
+ previewFirst() {
191
+ this.previewSingle(this.getFirstFile())
192
+ },
193
+ downloadFirst() {
194
+ const { showName, serverPath } = this.getFirstFile()
195
+ this.download(showName, serverPath)
196
+ },
160
197
  previewSingle(fileInfo) {
161
198
  fileInfo = packageFile(fileInfo.showName, fileInfo.serverPath)
162
199
  if (isImage(fileInfo.showName)) {
@@ -188,9 +225,6 @@ export default {
188
225
  serverPath = getEntityFieldValue(this.entity, this.keyValueParam.serverPath)
189
226
  showName = getEntityFieldValue(this.entity, this.keyValueParam.showName)
190
227
  }
191
- if (!serverPath) {
192
- ElMessage.error(this.$t('imatrixUIMessage.filePathNotFound'))
193
- }
194
228
  return {
195
229
  showName: showName,
196
230
  serverPath: serverPath
@@ -273,7 +307,7 @@ export default {
273
307
  window.open(previewUrl, showName)
274
308
  }
275
309
  },
276
- donwloadFile(index, fileList) {
310
+ donwloadFile(index) {
277
311
  const showName = this.formatFileName(this.fileList[index].showName)
278
312
  if (!this.fileList[index].src) {
279
313
  this.download(showName, this.fileList[index].serverPath)
@@ -327,22 +361,93 @@ export default {
327
361
  },
328
362
  getFileIconByName(fileName) {
329
363
  return getFileIconByName(fileName)
364
+ },
365
+ showMultiView() {
366
+ const { showName, serverPath } = this.getShowNameAndUuidKey()
367
+ if (serverPath) {
368
+ const uuids = serverPath.split(',')
369
+ if (uuids.length > 1) {
370
+ const baseURL = window.$vueApp.config.globalProperties.baseURL
371
+ const baseAPI = window.$vueApp.config.globalProperties.baseAPI
372
+ let tempAction = baseURL + '/common/fs-upload/search-file-names'
373
+ if (isPlateSys(window.$vueApp.config.globalProperties.systemCode)) {
374
+ tempAction = baseAPI + '/api/search-file-names'
375
+ }
376
+ this.$http.post(tempAction, uuids).then((result) => {
377
+ this.fileList = []
378
+ uuids.forEach((uuid) => {
379
+ this.fileList.push({ showName: result[uuid], serverPath: uuid })
380
+ })
381
+ })
382
+ }
383
+ }
384
+ },
385
+ deleteFirst() {
386
+ const fileInfo = this.getFirstFile()
387
+ this.$emit('delete-file', fileInfo)
388
+ this.fileList = this.fileList.filter((item) => item.serverPath !== fileInfo.serverPath)
389
+ ElMessage.success('文件已删除')
390
+ },
391
+ deleteFile(fileInfo) {
392
+ this.$emit('delete-file', fileInfo)
393
+ this.fileList = this.fileList.filter((item) => item.serverPath !== fileInfo.serverPath)
394
+ ElMessage.success('文件已删除')
330
395
  }
331
396
  },
332
- emits: ['close']
397
+ emits: ['close', 'delete-file']
333
398
  }
334
399
  </script>
335
400
 
336
401
  <style lang="scss" scoped>
402
+ .fs-preview-container {
403
+ display: flex;
404
+ align-items: center;
405
+ gap: 5px;
406
+ justify-content: space-between;
407
+ }
408
+
409
+ .fs-preview-tool {
410
+ display: flex;
411
+ align-items: center;
412
+ flex-shrink: 0;
413
+ min-width: max-content;
414
+ margin-left: auto; /* 添加这行,将工具栏推到右侧 */
415
+ }
337
416
  .amb-color-iconfont {
338
417
  width: 30px;
339
418
  height: 30px;
340
419
  }
341
420
  .amb-list-preivew-name {
342
- margin-left: 10px;
343
- cursor: pointer;
344
421
  overflow: hidden;
345
422
  text-overflow: ellipsis;
346
423
  white-space: nowrap;
347
424
  }
425
+
426
+ .el-link + .el-link {
427
+ margin-left: 5px;
428
+ }
429
+ .file-item {
430
+ display: flex;
431
+ align-items: center;
432
+ justify-content: space-between; /* 添加这行来分布空间 */
433
+ gap: 10px;
434
+ height: 40px;
435
+ padding: 10px;
436
+ border-radius: 8px;
437
+ transition: background-color 0.2s;
438
+
439
+ &:hover {
440
+ color: var(--el-button-hover-text-color, #409eff);
441
+ border-color: var(--el-button-hover-border-color, rgb(197.7, 225.9, 255));
442
+ background-color: var(--el-button-hover-bg-color, rgb(235.9, 245.3, 255));
443
+ outline: none;
444
+ }
445
+ }
446
+
447
+ .file-actions {
448
+ display: flex;
449
+ align-items: center;
450
+ gap: 5px;
451
+ flex-shrink: 0; /* 防止按钮被压缩 */
452
+ }
348
453
  </style>