agilebuilder-ui 1.1.47 → 1.1.48-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.
Files changed (60) hide show
  1. package/lib/{401-24b6b525.js → 401-a94cd05b.js} +1 -1
  2. package/lib/{404-55dbc936.js → 404-eb21244b.js} +1 -1
  3. package/lib/{iframe-page-effbb33c.js → iframe-page-7add4333.js} +1 -1
  4. package/lib/{index-f3ef09a5.js → index-7a601895.js} +18636 -18542
  5. package/lib/super-ui.css +1 -1
  6. package/lib/super-ui.js +1 -1
  7. package/lib/super-ui.umd.cjs +104 -104
  8. package/lib/{tab-content-iframe-index-4c557db3.js → tab-content-iframe-index-483b398c.js} +1 -1
  9. package/lib/{tab-content-index-a7350229.js → tab-content-index-0862686f.js} +1 -1
  10. package/lib/{tache-subprocess-history-f19dd95f.js → tache-subprocess-history-c80e8ed2.js} +1 -1
  11. package/package.json +1 -1
  12. package/packages/department-tree-inline/src/department-multi-tree-inline.vue +42 -34
  13. package/packages/department-tree-inline/src/department-single-tree-inline.vue +53 -42
  14. package/packages/department-tree-inline/src/department-tree-service.js +17 -11
  15. package/packages/department-tree-inline/src/search-result.vue +187 -219
  16. package/packages/department-tree-mobile/src/department-tree-inline-app.vue +17 -4
  17. package/packages/department-user-tree-inline/src/department-user-multiple-tree-inline.vue +52 -43
  18. package/packages/department-user-tree-inline/src/department-user-single-tree-inline.vue +52 -42
  19. package/packages/department-user-tree-inline/src/department-user-tree-multi-service.js +23 -13
  20. package/packages/department-user-tree-inline/src/department-user-tree-single-service.js +9 -5
  21. package/packages/department-user-tree-inline/src/group-user-tree-service.js +17 -11
  22. package/packages/department-user-tree-inline/src/search-result.vue +207 -220
  23. package/packages/department-user-tree-mobile/src/department-user-tree-inline-app.vue +14 -3
  24. package/packages/dynamic-source-select/src/dynamic-source-select-service.js +7 -2
  25. package/packages/empty-state/index.vue +28 -0
  26. package/packages/fs-preview/src/fs-preview.vue +12 -3
  27. package/packages/fs-upload/src/fs-upload-multi.vue +6 -4
  28. package/packages/fs-upload/src/fs-upload-single.vue +7 -6
  29. package/packages/fs-upload/src/fs-upload.vue +3 -1
  30. package/packages/fs-upload/src/see-big-picture.vue +3 -0
  31. package/packages/fs-upload-list/src/fs-upload-list.vue +8 -2
  32. package/packages/fs-upload-new/src/fs-button-upload.vue +11 -4
  33. package/packages/fs-upload-new/src/fs-drag-upload.vue +11 -4
  34. package/packages/fs-upload-new/src/fs-preview-new.vue +8 -5
  35. package/packages/fs-upload-new/src/fs-upload-new.vue +17 -0
  36. package/packages/plugins/export-data-new.js +2 -0
  37. package/packages/super-grid/src/components/grid-icon.vue +6 -3
  38. package/packages/super-grid/src/custom-formatter.js +15 -2
  39. package/packages/super-grid/src/dynamic-input.vue +34 -6
  40. package/packages/super-grid/src/formatter.js +5 -1
  41. package/packages/super-grid/src/normal-column-content.vue +30 -38
  42. package/packages/super-grid/src/super-grid.vue +4 -4
  43. package/packages/utils/utils.js +27 -9
  44. package/packages/workgroup-tree-inline/src/search-result.vue +2 -1
  45. package/packages/workgroup-tree-inline/src/workgroup-tree-inline.vue +50 -41
  46. package/packages/workgroup-tree-mobile/src/workgroup-tree-inline-app.vue +16 -5
  47. package/packages/workgroup-user-tree-inline/src/search-result.vue +2 -1
  48. package/packages/workgroup-user-tree-inline/src/workgroup-tree-inline-service.js +30 -24
  49. package/packages/workgroup-user-tree-inline/src/workgroup-user-tree-inline.vue +49 -37
  50. package/packages/workgroup-user-tree-mobile/src/workgroup-user-tree-inline-app.vue +281 -222
  51. package/src/i18n/langs/cn.js +6 -4
  52. package/src/i18n/langs/en.js +6 -4
  53. package/src/styles/index.scss +26 -0
  54. package/src/utils/auth.js +10 -7
  55. package/src/utils/chat-ai-util.ts +3 -3
  56. package/src/utils/common-util.js +22 -0
  57. package/src/utils/global-prop.js +17 -0
  58. package/src/utils/jump-page-utils.js +8 -4
  59. package/src/views/dsc-component/Sidebar/SidebarItem.vue +6 -0
  60. package/src/views/dsc-component/tabs/tab-content.vue +6 -0
@@ -1,80 +1,71 @@
1
1
  <template>
2
- <div style="height: 100%">
3
- <el-table
4
- ref="superGrid"
5
- :data="gridData"
6
- :max-height="myHeight"
7
- :row-class-name="tableRowClassName"
8
- border
9
- fit
10
- row-key="id"
11
- stripe
12
- @row-click="rowClick"
13
- @row-dblclick="rowDblclick"
14
- >
15
- <template v-slot:empty>
16
- <div class="roleQuery_center_area" style="height: 395px">
17
- <div
18
- class="roleQuery_notAvailable"
19
- style="width: 120px; height: 120px"
20
- >
21
- <span class="roleQuery_notAvailable_text">{{
22
- $t('imatrixUIPromptMessage.NoContent')
23
- }}</span>
24
- </div>
25
- </div>
26
- </template>
27
- <el-table-column v-if="multiple === false" fixed width="60">
28
- <template v-slot="scope">
29
- <el-radio
30
- v-model="singleUserIndex"
31
- :label="scope.$index"
32
- @change="selectUser"
33
- >
34
- {{ scope.$index + 1 }}
35
- </el-radio>
36
- </template>
37
- </el-table-column>
38
- <el-table-column
39
- v-if="multiple && isSearchResult"
40
- :label="$t('imatrixUIPublicModel.edit')"
41
- align="center"
42
- fixed
43
- width="60px"
44
- >
45
- <template v-slot="scope">
46
- <div>
47
- <el-button
48
- :disabled="isDisable(scope.row)"
49
- :icon="ElIconPlus"
50
- circle
51
- size="default"
52
- type="primary"
53
- @click="addUser(scope.$index, scope.row)"
54
- />
55
- </div>
56
- </template>
57
- </el-table-column>
58
- <el-table-column
59
- v-if="multiple && !isSearchResult"
60
- :label="$t('imatrixUIPublicModel.edit')"
61
- align="center"
62
- fixed="right"
63
- width="60px"
64
- >
65
- <template v-slot="scope">
66
- <div>
67
- <el-button
68
- :icon="ElIconDelete"
69
- circle
70
- size="default"
71
- type="danger"
72
- @click="removeUser(scope.$index, scope.row)"
73
- />
74
- </div>
75
- </template>
76
- </el-table-column>
77
- <!-- <el-table-column
2
+ <div style="height: 100%">
3
+ <el-table
4
+ ref="superGrid"
5
+ :data="gridData"
6
+ :max-height="myHeight"
7
+ :row-class-name="tableRowClassName"
8
+ border
9
+ fit
10
+ row-key="id"
11
+ stripe
12
+ @row-click="rowClick"
13
+ @row-dblclick="rowDblclick"
14
+ >
15
+ <template v-slot:empty>
16
+ <div class="empty_center_area" style="height: 395px">
17
+ <div class="empty_notAvailable" style="width: 120px; height: 120px">
18
+ <span class="empty_notAvailable_text">{{ $t('imatrixUIPromptMessage.NoContent') }}</span>
19
+ </div>
20
+ </div>
21
+ </template>
22
+ <el-table-column v-if="multiple === false" fixed width="60">
23
+ <template v-slot="scope">
24
+ <el-radio v-model="singleUserIndex" :label="scope.$index" @change="selectUser">
25
+ {{ scope.$index + 1 }}
26
+ </el-radio>
27
+ </template>
28
+ </el-table-column>
29
+ <el-table-column
30
+ v-if="multiple && isSearchResult"
31
+ :label="$t('imatrixUIPublicModel.edit')"
32
+ align="center"
33
+ fixed
34
+ width="60px"
35
+ >
36
+ <template v-slot="scope">
37
+ <div>
38
+ <el-button
39
+ :disabled="isDisable(scope.row)"
40
+ :icon="ElIconPlus"
41
+ circle
42
+ size="default"
43
+ type="primary"
44
+ @click="addUser(scope.$index, scope.row)"
45
+ />
46
+ </div>
47
+ </template>
48
+ </el-table-column>
49
+ <el-table-column
50
+ v-if="multiple && !isSearchResult"
51
+ :label="$t('imatrixUIPublicModel.edit')"
52
+ align="center"
53
+ fixed="right"
54
+ width="60px"
55
+ >
56
+ <template v-slot="scope">
57
+ <div>
58
+ <el-button
59
+ :icon="ElIconDelete"
60
+ circle
61
+ size="default"
62
+ type="danger"
63
+ @click="removeUser(scope.$index, scope.row)"
64
+ />
65
+ </div>
66
+ </template>
67
+ </el-table-column>
68
+ <!-- <el-table-column
78
69
  v-if="multiple"
79
70
  :label="$t('superGrid.index')"
80
71
  align="center"
@@ -84,30 +75,27 @@
84
75
  {{ scope.$index + 1 }}
85
76
  </template>
86
77
  </el-table-column> -->
87
- <el-table-column
88
- :label="$t('departmentUserTreeInline.name')"
89
- prop="name"
90
- >
91
- <template v-slot="scope">
92
- <div v-if="scope.row.enName && scope.row.enName.trim() !== ''">
93
- <div :title="scope.row.name +'('+scope.row.enName+')' +'['+scope.row.loginName+']'">
94
- <span>{{ scope.row.name+'('+scope.row.enName+')' }}[{{ scope.row.loginName }}]</span>
95
- </div>
96
- <div style="color:#ccc" :title="getDeptName(scope.row)">
97
- {{ getDeptName(scope.row) }}
98
- </div>
99
- </div>
100
- <div v-else>
101
- <div :title="scope.row.name +'['+scope.row.loginName+']'">
102
- <span>{{ scope.row.name }}[{{ scope.row.loginName }}]</span>
103
- </div>
104
- <div style="color:#ccc" :title="getDeptName(scope.row)">
105
- {{ getDeptName(scope.row) }}
106
- </div>
107
- </div>
108
- </template>
109
- </el-table-column>
110
- <!-- <el-table-column
78
+ <el-table-column :label="$t('departmentUserTreeInline.name')" prop="name">
79
+ <template v-slot="scope">
80
+ <div v-if="scope.row.enName && scope.row.enName.trim() !== ''">
81
+ <div :title="scope.row.name + '(' + scope.row.enName + ')' + '[' + scope.row.loginName + ']'">
82
+ <span>{{ scope.row.name + '(' + scope.row.enName + ')' }}[{{ scope.row.loginName }}]</span>
83
+ </div>
84
+ <div style="color: #ccc" :title="getDeptName(scope.row)">
85
+ {{ getDeptName(scope.row) }}
86
+ </div>
87
+ </div>
88
+ <div v-else>
89
+ <div :title="scope.row.name + '[' + scope.row.loginName + ']'">
90
+ <span>{{ scope.row.name }}[{{ scope.row.loginName }}]</span>
91
+ </div>
92
+ <div style="color: #ccc" :title="getDeptName(scope.row)">
93
+ {{ getDeptName(scope.row) }}
94
+ </div>
95
+ </div>
96
+ </template>
97
+ </el-table-column>
98
+ <!-- <el-table-column
111
99
  :label="$t('departmentUserTreeInline.loginName')"
112
100
  :width="110"
113
101
  prop="loginName"
@@ -139,8 +127,8 @@
139
127
  >
140
128
  </template>
141
129
  </el-table-column> -->
142
- <!--由于保密要求,邮箱不能显示,需要脱敏处理,暂时注释掉,不显示-->
143
- <!-- <el-table-column
130
+ <!--由于保密要求,邮箱不能显示,需要脱敏处理,暂时注释掉,不显示-->
131
+ <!-- <el-table-column
144
132
  :label="$t('departmentUserTreeInline.email')"
145
133
  :width="130"
146
134
  prop="email"
@@ -149,139 +137,138 @@
149
137
  <span class="ellipsis cell--span" :title="scope.row.email">{{ scope.row.email }}</span>
150
138
  </template>
151
139
  </el-table-column> -->
152
- </el-table>
153
- </div>
140
+ </el-table>
141
+ </div>
154
142
  </template>
155
143
 
156
144
  <script>
157
- import {Delete as ElIconDelete, Plus as ElIconPlus} from '@element-plus/icons-vue'
145
+ import { Delete as ElIconDelete, Plus as ElIconPlus } from '@element-plus/icons-vue'
158
146
 
159
147
  export default {
160
- data() {
161
- let tableHeight = this.height
162
- tableHeight = tableHeight.substring(0, tableHeight.indexOf('px'))
163
- const myHeight = parseInt(tableHeight) + 30 + 'px'
164
- return {
165
- // 选中的用户序号
166
- singleUserIndex: null,
167
- selectedUser: null,
168
- myHeight,
169
- language: !window.$locale ? 'cn' : window.$locale,
170
- ElIconPlus,
171
- ElIconDelete,
172
- }
173
- },
174
- name: 'UserResult',
175
- props: {
176
- gridData: {
177
- type: Array,
178
- default: null,
179
- },
180
- containBranch: {
181
- type: Boolean,
182
- default: false,
183
- },
184
- multiple: {
185
- type: Boolean,
186
- default: false,
187
- },
188
- // 多选树时是否是查询结果列表,用于控制“操作”列按钮的显示
189
- isSearchResult: {
190
- type: Boolean,
191
- default: true,
192
- },
193
- height: {
194
- type: String,
195
- default: '300px',
196
- },
197
- selectResult: {
198
- type: Array,
199
- default: function () {
200
- return []
201
- },
202
- },
203
- },
204
- created() {
205
- },
206
- methods: {
207
- // 单选树时,点击行事件
208
- // rowClick(row, column, event) {
209
- // this.selectedUser = row
210
- // // this.$emit('rowClick', row, column, event)
211
- // },
212
- // 移除用户
213
- removeUser(index, row) {
214
- this.$emit( 'removeUser', index, row)
215
- },
216
- // 添加用户
217
- addUser(index, row) {
218
- this.$emit( 'addUser', index, row)
219
- },
220
- selectUser(selectVal) {
221
- // console.log('selectUser', selectVal)
222
- this.$emit( 'selectResult', this.gridData[selectVal])
223
- },
224
- rowClick(row, column, event) {
225
- if(!this.multiple){
226
- this.singleUserIndex = row.row_index
227
- this.$emit( 'selectResult', row)
228
- }
229
- },
230
- tableRowClassName({row, rowIndex}) {
231
- if(!this.multiple){
232
- row.row_index = rowIndex
233
- }
234
- },
235
- rowDblclick(row, column, event) {
236
- if (this.multiple) {
237
- this.$emit( 'addUser', null, row)
238
- } else {
239
- this.$emit( 'resultRowDblclick', row)
240
- }
241
- },
242
- isDisable(row) {
243
- if (this.selectResult) {
244
- const containUsers = this.selectResult.filter(this.filterDept(row))
245
- if (containUsers && containUsers.length > 0) {
246
- return true
247
- }
248
- }
249
- return false
250
- },
251
- // 判断用户是否存在的过滤器
252
- filterDept(queryDept) {
253
- return (dept) => {
254
- return dept.id === queryDept.id
255
- }
256
- },
257
- getDeptName(row) {
258
- let deptName = row.superiorDeptNameFullPath
259
- if (deptName) {
260
- return deptName
261
- }
262
- if (this.language && this.language !== 'cn') {
263
- deptName = row.mainDepartmentEnName
264
- }
265
- if (deptName) {
266
- return deptName
267
- }
268
- return row.mainDepartmentName
269
- }
270
- },
271
- emits: ['removeUser', 'addUser', 'selectResult', 'resultRowDblclick'],
148
+ data() {
149
+ let tableHeight = this.height
150
+ tableHeight = tableHeight.substring(0, tableHeight.indexOf('px'))
151
+ const myHeight = parseInt(tableHeight) + 30 + 'px'
152
+ return {
153
+ // 选中的用户序号
154
+ singleUserIndex: null,
155
+ selectedUser: null,
156
+ myHeight,
157
+ language: !window.$locale ? 'cn' : window.$locale,
158
+ ElIconPlus,
159
+ ElIconDelete
160
+ }
161
+ },
162
+ name: 'UserResult',
163
+ props: {
164
+ gridData: {
165
+ type: Array,
166
+ default: null
167
+ },
168
+ containBranch: {
169
+ type: Boolean,
170
+ default: false
171
+ },
172
+ multiple: {
173
+ type: Boolean,
174
+ default: false
175
+ },
176
+ // 多选树时是否是查询结果列表,用于控制“操作”列按钮的显示
177
+ isSearchResult: {
178
+ type: Boolean,
179
+ default: true
180
+ },
181
+ height: {
182
+ type: String,
183
+ default: '300px'
184
+ },
185
+ selectResult: {
186
+ type: Array,
187
+ default: function () {
188
+ return []
189
+ }
190
+ }
191
+ },
192
+ created() {},
193
+ methods: {
194
+ // 单选树时,点击行事件
195
+ // rowClick(row, column, event) {
196
+ // this.selectedUser = row
197
+ // // this.$emit('rowClick', row, column, event)
198
+ // },
199
+ // 移除用户
200
+ removeUser(index, row) {
201
+ this.$emit('removeUser', index, row)
202
+ },
203
+ // 添加用户
204
+ addUser(index, row) {
205
+ this.$emit('addUser', index, JSON.parse(JSON.stringify(row)))
206
+ },
207
+ selectUser(selectVal) {
208
+ // console.log('selectUser', selectVal)
209
+ this.$emit('selectResult', this.gridData[selectVal])
210
+ },
211
+ rowClick(row, column, event) {
212
+ if (!this.multiple) {
213
+ this.singleUserIndex = row.row_index
214
+ this.$emit('selectResult', row)
215
+ }
216
+ },
217
+ tableRowClassName({ row, rowIndex }) {
218
+ if (!this.multiple) {
219
+ row.row_index = rowIndex
220
+ }
221
+ },
222
+ rowDblclick(row, column, event) {
223
+ if (this.multiple) {
224
+ this.$emit('addUser', null, row)
225
+ } else {
226
+ this.$emit('resultRowDblclick', row)
227
+ }
228
+ },
229
+ isDisable(row) {
230
+ if (this.selectResult) {
231
+ const containUsers = this.selectResult.filter(this.filterDept(row))
232
+ if (containUsers && containUsers.length > 0) {
233
+ return true
234
+ }
235
+ }
236
+ return false
237
+ },
238
+ // 判断用户是否存在的过滤器
239
+ filterDept(queryDept) {
240
+ return (dept) => {
241
+ return dept.id === queryDept.id
242
+ }
243
+ },
244
+ getDeptName(row) {
245
+ let deptName = row.superiorDeptNameFullPath
246
+ if (deptName) {
247
+ return deptName
248
+ }
249
+ if (this.language && this.language !== 'cn') {
250
+ deptName = row.mainDepartmentEnName
251
+ }
252
+ if (deptName) {
253
+ return deptName
254
+ }
255
+ return row.mainDepartmentName
256
+ }
257
+ },
258
+ emits: ['removeUser', 'addUser', 'selectResult', 'resultRowDblclick']
272
259
  }
273
260
  </script>
274
261
 
275
262
  <style>
276
263
  .searchResult {
277
- color: red;
264
+ color: red;
278
265
  }
279
266
 
280
267
  .inline-select-custom {
281
- width: 100px;
268
+ width: 100px;
282
269
  }
283
270
 
284
271
  .inline-input-custom {
285
- width: 98%;
272
+ width: 98%;
286
273
  }
287
274
  </style>
@@ -39,7 +39,9 @@
39
39
  </el-row>
40
40
  </el-card>
41
41
  <el-card class="card-content org-tree" style="overflow: auto">
42
+ <el-empty v-if="!departments.length" :image="noMessageImage"> </el-empty>
42
43
  <el-tree
44
+ v-else
43
45
  ref="orgTreeRef"
44
46
  :data="departments"
45
47
  :show-checkbox="multiple"
@@ -132,6 +134,8 @@ import deptPath from './dept-path.vue'
132
134
  import deptResult from './dept-result.vue'
133
135
  import { ElMessage } from 'element-plus'
134
136
  import { useI18n } from 'vue-i18n'
137
+ import utils from '../../utils/utils'
138
+ import noMessageImage from '../../../src/assets/nonemessage.png'
135
139
  const props = defineProps<{
136
140
  // 是否是多选树,默认是true
137
141
  multiple: {
@@ -190,6 +194,7 @@ let defaultProps = ref({
190
194
  })
191
195
  let loading = ref(false)
192
196
  const { t } = useI18n()
197
+
193
198
  onMounted(() => {
194
199
  initSelectUsers(props.searchField, props.selectUserInfo, props.separator).then((departments) => {
195
200
  selectUsers.value = departments
@@ -208,9 +213,15 @@ function getTenantInfo() {
208
213
  }
209
214
 
210
215
  function getTenantChildrenDept() {
211
- getTenantChildren(props.departmentInfo, tenantNodeId, props.limitFilterColumn).then((children) => {
212
- departments.value = children
213
- checkedDeptDefault(selectUsers.value, defaultCheckedKeys.value)
216
+ utils.canShowOrgTree().then((showOrgTree) => {
217
+ if (showOrgTree) {
218
+ getTenantChildren(props.departmentInfo, tenantNodeId, props.limitFilterColumn).then((children) => {
219
+ departments.value = children
220
+ checkedDeptDefault(selectUsers.value, defaultCheckedKeys.value)
221
+ })
222
+ } else {
223
+ departments.value = []
224
+ }
214
225
  })
215
226
  }
216
227
 
@@ -1,3 +1,5 @@
1
+ import { getRelativeBaseUrl } from "../../../src/utils/common-util"
2
+
1
3
  const dynamicSourceSelectService = {
2
4
  findDynamicDataSourceByCode(dynamicSourceCode, entity, searchParam, additionalParameterStr, backendUrl) {
3
5
  let searchText
@@ -62,7 +64,8 @@ const dynamicSourceSelectService = {
62
64
  if (!backendUrl) {
63
65
  backendUrl = window.$vueApp.config.globalProperties.baseURL
64
66
  }
65
-
67
+ // 替换域名,内网、外网访问需要
68
+ backendUrl = getRelativeBaseUrl(backendUrl)
66
69
  return new Promise((resolve, reject) => {
67
70
  // this.$http
68
71
  // .post(
@@ -105,8 +108,10 @@ const dynamicSourceSelectService = {
105
108
  .then((result) => {
106
109
  if (result.backendUrl) {
107
110
  // result.backendUrl表示需要使用动态数据源所属的系统路径重新获得一次数据
111
+ // 替换域名,内网、外网访问需要
112
+ const resultBackendUrl = getRelativeBaseUrl(result.backendUrl)
108
113
  this.$http
109
- .post(result.backendUrl + '/common/dynamic-data-source/' + dynamicSourceCode, params, {
114
+ .post(resultBackendUrl + '/common/dynamic-data-source/' + dynamicSourceCode, params, {
110
115
  headers: { customSystem: result.systemCode }
111
116
  })
112
117
  .then((finallyResult) => {
@@ -0,0 +1,28 @@
1
+ <template>
2
+ <div class="empty_center_area">
3
+ <div class="empty_notAvailable" :style="{ width: props.imageWidth, height: props.imageHeight }">
4
+ <span class="empty_notAvailable_text">
5
+ {{ props.emptyText ? props.emptyText : t('imatrixUIPromptMessage.NoContent') }}
6
+ </span>
7
+ </div>
8
+ </div>
9
+ </template>
10
+ <script lang="ts" setup>
11
+ import { defineProps } from 'vue'
12
+ import { useI18n } from 'vue-i18n'
13
+ const { t } = useI18n()
14
+ const props = defineProps({
15
+ imageHeight: {
16
+ type: String,
17
+ default: '120px'
18
+ },
19
+ imageWidth: {
20
+ type: String,
21
+ default: '120px'
22
+ },
23
+ emptyText: {
24
+ type: String,
25
+ default: ''
26
+ }
27
+ })
28
+ </script>
@@ -11,6 +11,7 @@
11
11
  </span>
12
12
  </template>
13
13
  <div v-if="firstFileName" ref="toolRef" class="fs-preview-tool">
14
+ <slot name="tool-prefix" :item="getFirstFile()"></slot>
14
15
  <el-tooltip v-if="enableDelete && !disabled" :content="$t('fsUpload.delete')">
15
16
  <super-icon @click="deleteFirst()" iconValue="amb-color-icon-shanchu" />
16
17
  </el-tooltip>
@@ -20,11 +21,12 @@
20
21
  <el-tooltip v-if="!disabled || !fileSetObj.disabledNoDownload" :content="$t('fsUpload.download')">
21
22
  <super-icon @click="downloadFirst()" iconValue="amb-color-icon-xiazai" />
22
23
  </el-tooltip>
24
+ <slot name="tool-suffix" :item="getFirstFile()"></slot>
23
25
  <el-divider v-if="showMultipleFile" direction="vertical" />
24
26
  <el-popover :width="450" trigger="click">
25
27
  <template #reference>
26
28
  <el-button v-if="showMultipleFile" type="primary" round size="small" @click="showMultiView">
27
- 更多
29
+ {{ $t('fsUpload.more') }}
28
30
  <el-icon><ArrowDownBold /></el-icon>
29
31
  </el-button>
30
32
  </template>
@@ -53,6 +55,7 @@
53
55
  <el-link type="primary" v-if="!disabled || !fileSetObj.disabledNoDownload" underline>
54
56
  {{ $t('fsUpload.download') }}
55
57
  </el-link> -->
58
+ <slot name="tool-more-prefix" :item="item"></slot>
56
59
  <el-tooltip v-if="enableDelete" :content="$t('fsUpload.delete')">
57
60
  <super-icon @click="deleteFile(item)" iconValue="amb-color-icon-shanchu" />
58
61
  </el-tooltip>
@@ -81,7 +84,7 @@
81
84
  // import { Image } from 'antd';
82
85
  import { Paperclip as ElIconPaperclip, View as ElIconView, Download as ElIconDownload } from '@element-plus/icons-vue'
83
86
  import * as Vue from 'vue'
84
- import { isPlateSys, getSystemFrontendUrl } from '../../../src/utils/common-util'
87
+ import { isPlateSys, getSystemFrontendUrl, getRelativeBaseUrl } from '../../../src/utils/common-util'
85
88
  import { isImage, getEntityFieldValue } from '../../../src/utils/util'
86
89
  import { packageFile } from '../../super-grid/src/utils'
87
90
  import { getToken } from '../../../src/utils/auth'
@@ -238,6 +241,7 @@ export default {
238
241
  if (isPlateSys(window.$vueApp.config.globalProperties.systemCode)) {
239
242
  tempAction = baseAPI + '/api/search-file-names'
240
243
  }
244
+ tempAction = getRelativeBaseUrl(tempAction)
241
245
  this.$http.post(tempAction, uuids).then((result) => {
242
246
  this.fileList = []
243
247
  uuids.forEach((uuid) => {
@@ -298,6 +302,7 @@ export default {
298
302
  previewUrl = baseUrl + '/common/fs-upload/preview?jwt=' + token
299
303
  previewUrl = previewUrl + '&showName=' + encodeURI(showName) + '&serverPath=' + fileInfo.serverPath
300
304
  }
305
+ previewUrl = getRelativeBaseUrl(previewUrl)
301
306
  window.open(previewUrl, showName)
302
307
  }
303
308
  },
@@ -306,7 +311,8 @@ export default {
306
311
  if (!this.fileList[index].src) {
307
312
  this.download(showName, this.fileList[index].serverPath)
308
313
  } else {
309
- window.open(this.fileList[index].src)
314
+ const src = getRelativeBaseUrl(this.fileList[index].src)
315
+ window.open(src)
310
316
  }
311
317
  },
312
318
  download(showName, serverPath) {
@@ -315,6 +321,7 @@ export default {
315
321
  if (isPlateSys(window.$vueApp.config.globalProperties.systemCode)) {
316
322
  url = window.$vueApp.config.globalProperties.baseAPI + '/component/super-form/downloads?jwt=' + token
317
323
  }
324
+ url = getRelativeBaseUrl(url)
318
325
  const src = url + '&showName=' + encodeURI(showName) + '&serverPath=' + serverPath
319
326
  window.open(src)
320
327
  },
@@ -367,6 +374,7 @@ export default {
367
374
  if (isPlateSys(window.$vueApp.config.globalProperties.systemCode)) {
368
375
  tempAction = baseAPI + '/api/search-file-names'
369
376
  }
377
+ tempAction = getRelativeBaseUrl(tempAction)
370
378
  this.$http.post(tempAction, uuids).then((result) => {
371
379
  this.fileList = []
372
380
  uuids.forEach((uuid) => {
@@ -375,6 +383,7 @@ export default {
375
383
  })
376
384
  }
377
385
  }
386
+ return this.fileList
378
387
  },
379
388
  deleteFirst() {
380
389
  const fileInfo = this.getFirstFile()