agilebuilder-ui 1.1.38-tmp1 → 1.1.39-sit1

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 (47) hide show
  1. package/lib/{401-d84fc7c6.js → 401-994c9198.js} +1 -1
  2. package/lib/{404-b47ec5c0.js → 404-529e9d04.js} +1 -1
  3. package/lib/{iframe-page-21dddc9b.js → iframe-page-8416d7e7.js} +1 -1
  4. package/lib/{index-4de073b5.js → index-f2020c47.js} +14108 -14058
  5. package/lib/super-ui.css +1 -1
  6. package/lib/super-ui.js +1 -1
  7. package/lib/super-ui.umd.cjs +63 -63
  8. package/lib/{tab-content-iframe-index-f3419de1.js → tab-content-iframe-index-b9c23a8b.js} +1 -1
  9. package/lib/{tab-content-index-034f8326.js → tab-content-index-289ae3af.js} +1 -1
  10. package/lib/{tache-subprocess-history-53fa49b9.js → tache-subprocess-history-3ad4baa1.js} +1 -1
  11. package/package.json +1 -1
  12. package/packages/department-tree-inline/src/department-single-tree-inline.vue +3 -1
  13. package/packages/department-user-tree-inline/src/department-user-multiple-tree-inline.vue +5 -1
  14. package/packages/department-user-tree-inline/src/department-user-single-tree-inline.vue +2 -1
  15. package/packages/department-user-tree-inline/src/department-user-tree-multi-service.js +0 -1
  16. package/packages/department-user-tree-mobile/src/department-user-tree-inline-app.vue +3 -1
  17. package/packages/fs-preview/src/fs-preview.vue +44 -7
  18. package/packages/fs-upload-list/src/fs-upload-list.vue +50 -24
  19. package/packages/fs-upload-new/src/fs-button-upload.vue +12 -0
  20. package/packages/fs-upload-new/src/fs-drag-upload.vue +12 -0
  21. package/packages/fs-upload-new/src/fs-preview-new.vue +24 -5
  22. package/packages/fs-upload-new/src/fs-upload-new.vue +20 -0
  23. package/packages/organization-input/src/organization-input.vue +3 -3
  24. package/packages/super-grid/src/components/mobile-table-card.jsx +0 -1
  25. package/packages/super-grid/src/custom-formatter.js +1 -1
  26. package/packages/super-grid/src/dynamic-input.vue +16 -22
  27. package/packages/super-grid/src/normal-column-content.vue +25 -13
  28. package/packages/super-grid/src/row-operation.vue +13 -9
  29. package/packages/super-grid/src/search-form-item.vue +75 -17
  30. package/packages/super-grid/src/search-form-mobile.vue +5 -0
  31. package/packages/super-grid/src/search-form-ordinarySearch.vue +5 -0
  32. package/packages/super-grid/src/search-methods.js +3 -1
  33. package/packages/utils/organization.ts +56 -40
  34. package/packages/workflow-history-list/src/workflow-history-list.vue +41 -3
  35. package/src/directives/permission/permission.js +7 -1
  36. package/src/i18n/langs/cn.js +10 -3
  37. package/src/i18n/langs/en.js +10 -3
  38. package/src/utils/file-util.ts +12 -4
  39. package/src/utils/jump-page-utils.js +1 -0
  40. package/src/utils/permission.js +2 -2
  41. package/src/utils/permissionAuth.js +4 -2
  42. package/src/utils/util.js +19 -0
  43. package/src/views/dsc-component/Sidebar/Item.vue +18 -7
  44. package/src/views/dsc-component/Sidebar/SidebarItem.vue +10 -2
  45. package/src/views/dsc-component/Sidebar/index.vue +0 -2
  46. package/src/views/layout/components/Menubar/Item.vue +20 -3
  47. package/src/views/layout/components/Menubar/SidebarItem.vue +46 -18
@@ -96,6 +96,7 @@
96
96
  :grid-data="gridData"
97
97
  :page-grid-data="pageGridData"
98
98
  :current-page="currentPage"
99
+ :custom-params="controlConfig ? controlConfig.customParams : null"
99
100
  @refresh-list="refreshList"
100
101
  />
101
102
  <row-operation
@@ -106,6 +107,7 @@
106
107
  :is-show="operation.isShow"
107
108
  :label="operation.props.label ? operation.props.label : row[column.prop]"
108
109
  :on-click="operation.onClick"
110
+ :operation="operation"
109
111
  :operation-index="operationIndex"
110
112
  :operation-setting="operation.props"
111
113
  :event-name="operation.eventName"
@@ -133,6 +135,7 @@
133
135
  :additional-param-map="additionalParamMap"
134
136
  :additional-settings="additionalSettings"
135
137
  :page-context="options?.pageContext"
138
+ :custom-params="controlConfig ? controlConfig.customParams : null"
136
139
  />
137
140
  </span>
138
141
  <!-- 自定义格式的时候 -->
@@ -170,6 +173,7 @@
170
173
  :component-id="componentId"
171
174
  :additional-settings="additionalSettings"
172
175
  :page-context="options?.pageContext"
176
+ :custom-params="controlConfig ? controlConfig.customParams : null"
173
177
  @prohibitToEdit="prohibitToEdit"
174
178
  @refresh-list="refreshList"
175
179
  /></span>
@@ -235,15 +239,17 @@
235
239
  :title="getMyHyperLinkSetting(row, rowIndex).title"
236
240
  :class="textOverflow === 'newline' ? 'wrap-text' : 'ellipsis cell--span'"
237
241
  >{{ getMyHyperLinkSetting(row, rowIndex).label }}
238
- <el-icon v-if="getMyHyperLinkSetting(row, rowIndex).icon">
239
- <component :is="(getMyHyperLinkSetting(row), rowIndex.icon)" />
240
- </el-icon>
242
+ <SuperIcon
243
+ v-if="getMyHyperLinkSetting(row, rowIndex).icon"
244
+ :iconValue="getMyHyperLinkSetting(row, rowIndex).icon"
245
+ ></SuperIcon>
241
246
  </span>
242
247
  <span v-else :id="column.prop + 'DomData' + rowIndex" :class="isShowForm ? '' : 'cell--span'"
243
248
  >{{ getMyHyperLinkSetting(row, rowIndex).label }}
244
- <el-icon v-if="getMyHyperLinkSetting(row, rowIndex).icon">
245
- <component :is="getMyHyperLinkSetting(row, rowIndex).icon" />
246
- </el-icon>
249
+ <SuperIcon
250
+ v-if="getMyHyperLinkSetting(row, rowIndex).icon"
251
+ :iconValue="getMyHyperLinkSetting(row, rowIndex).icon"
252
+ ></SuperIcon>
247
253
  </span>
248
254
  </el-link>
249
255
  <span
@@ -316,15 +322,17 @@
316
322
  :title="$escapeHtml(getMyHyperLinkSetting(row, rowIndex).title)"
317
323
  :class="textOverflow === 'newline' ? 'wrap-text' : 'ellipsis cell--span'"
318
324
  >{{ $escapeHtml(getMyHyperLinkSetting(row, rowIndex).label) }}
319
- <el-icon v-if="getMyHyperLinkSetting(row, rowIndex).icon">
320
- <component :is="getMyHyperLinkSetting(row, rowIndex).icon" />
321
- </el-icon>
325
+ <SuperIcon
326
+ v-if="getMyHyperLinkSetting(row, rowIndex).icon"
327
+ :iconValue="getMyHyperLinkSetting(row, rowIndex).icon"
328
+ ></SuperIcon>
322
329
  </span>
323
330
  <span v-else :id="column.prop + 'DomData' + rowIndex" :class="isShowForm ? '' : 'cell--span'"
324
331
  >{{ $escapeHtml(getMyHyperLinkSetting(row, rowIndex).label) }}
325
- <el-icon v-if="getMyHyperLinkSetting(row, rowIndex).icon">
326
- <component :is="getMyHyperLinkSetting(row, rowIndex).icon" />
327
- </el-icon>
332
+ <SuperIcon
333
+ v-if="getMyHyperLinkSetting(row, rowIndex).icon"
334
+ :iconValue="getMyHyperLinkSetting(row, rowIndex).icon"
335
+ ></SuperIcon>
328
336
  </span>
329
337
  </el-link>
330
338
  <!-- 富文本 -->
@@ -387,7 +395,7 @@ import customFormatter from './custom-formatter'
387
395
  import RowOperation from './row-operation.vue'
388
396
  import apis from './apis'
389
397
  import { mapGetters } from 'vuex'
390
- import { getEntityFieldValue, getParentObjectUtil } from '../../../src/utils/util'
398
+ import { getEntityFieldValue, getParentObjectUtil, formatCustomParams } from '../../../src/utils/util'
391
399
  import ViewImageDialog from './view-image-dialog.vue'
392
400
  import eventBus from './eventBus'
393
401
  import FsPreview from '../../fs-preview'
@@ -700,6 +708,10 @@ export default {
700
708
  this.requiredClass = this.isRequired(this.row.$editing) ? 'm-requried' : ''
701
709
  },
702
710
  mounted() {
711
+ if (this.controlConfig) {
712
+ const gridParams = store.get(this.listCode)
713
+ formatCustomParams(this.controlConfig.customParams, gridParams.pageContext, this.row)
714
+ }
703
715
  // 监听取消自定义编辑事件
704
716
  eventBus.$on('clearTableAllStartEditing', () => {
705
717
  this.clearAllEditing()
@@ -1,10 +1,10 @@
1
1
  <template>
2
2
  <!--将@click改为@mousedown.native是因为操作列保存按钮时事件和input等组件的@blur冲突,导致保存需要保存两次,因为
3
3
  @blur先于@click执行的,所以只会执行@blur,@click就失效了,@mousedown是先于@blur执行的-->
4
- <span :style="myStyle">
4
+ <span class="table-operation-row-btn" :style="myStyle">
5
5
  <template v-if="isShowButton()">
6
6
  <el-tooltip :disabled="tooltipDisabled" :content="label" placement="top">
7
- <template v-if="operationSettingData.permission">
7
+ <template v-if="operationSettingData?.permission">
8
8
  <component
9
9
  v-bind="operationSettingData"
10
10
  :is="isElementType"
@@ -77,9 +77,13 @@ export default {
77
77
  type: String,
78
78
  default: null,
79
79
  },
80
+ operation: {
81
+ type: Object,
82
+ default: () => ({}),
83
+ },
80
84
  operationSetting: {
81
85
  type: Object,
82
- default: null,
86
+ default: () => ({}),
83
87
  },
84
88
  operationIndex: {
85
89
  type: Number,
@@ -148,16 +152,16 @@ export default {
148
152
  },
149
153
  // 后置图标
150
154
  suffixIcon() {
151
- if(['right'].includes(this.operationSettingData.iconPosition)) return this.operationSetting.iconValue
155
+ if(['right'].includes(this.operationSetting.iconPosition)) return this.operationSetting.iconValue
152
156
  return undefined
153
157
  },
154
158
  // 是否显示文字按钮 > 图标模式
155
159
  isTextIcon() {
156
160
  if (this.isTableBtnLinkShow) {
157
- if (this.operationSettingData.isTextIcon === undefined) {
161
+ if (this.operationSetting.isTextIcon === undefined) {
158
162
  return this.isSaveRow || this.isDeleteRow || this.isEditRow || this.isRestoreRow
159
163
  }
160
- return this.operationSettingData.isTextIcon
164
+ return this.operationSetting.isTextIcon
161
165
  } else {
162
166
  return false
163
167
  }
@@ -172,14 +176,14 @@ export default {
172
176
  },
173
177
  // 是否自动开启表格 按钮 转 文字按钮
174
178
  isTableBtnLinkShow() {
175
- if (this.operationSetting.text) return true
179
+ if (this.operationSetting?.text) return true
176
180
  if (this.isTableBtnLink && this.elementType === 'el-button') {
177
- return [this.operationSetting.text, this.operationSetting.plain, this.operationSetting.round].every(v => v === undefined)
181
+ return [this.operationSetting?.text, this.operationSetting?.plain, this.operationSetting?.round].every(v => v === undefined)
178
182
  }
179
183
  return false
180
184
  },
181
185
  operationSettingData() {
182
- const dataList = { ...this.operationSetting }
186
+ const dataList = { ...(this.operationSetting ?? {}) }
183
187
  if (this.isTableBtnLinkShow) {
184
188
  dataList.underline = false
185
189
  delete dataList.text
@@ -148,26 +148,30 @@
148
148
  >
149
149
  <el-option v-for="item in column.valueSet" :key="item.value" :label="item.label" :value="item.value" />
150
150
  </el-select>
151
- <dynamic-source-select
151
+ <template
152
152
  v-else-if="
153
153
  column.componentType &&
154
154
  (column.componentType === 'multiselect' || column.componentType === 'select') &&
155
155
  isDynamicDataSourceSource(column)
156
156
  "
157
- :allow-create="true"
158
- :base-props="{
159
- multiple: column.componentType === 'multiselect' ? true : false
160
- }"
161
- :entity="searchForm"
162
- :filterable="true"
163
- :is-join-table="isJoinTable"
164
- :list-code="code"
165
- :list-toolbar-form-data="listToolbarFormData"
166
- :options="getDynamicDataSourceOptions(column)"
167
- :table-name="tableName"
168
- :value="getFormItemValue(column.prop)"
169
- @input="setValueToModelProp(column.prop, $event)"
170
- />
157
+ >
158
+ <dynamic-source-select
159
+ v-model:value="searchForm[column.prop]"
160
+ :allow-create="true"
161
+ :base-props="{
162
+ multiple: column.componentType === 'multiselect' ? true : false
163
+ }"
164
+ :entity="searchForm"
165
+ :filterable="true"
166
+ :is-join-table="isJoinTable"
167
+ :list-code="code"
168
+ :list-toolbar-form-data="listToolbarFormData"
169
+ :options="getDynamicDataSourceOptions(column)"
170
+ :table-name="tableName"
171
+ @change="multiselectChange"
172
+ @input="setValueToModelProp(column.prop, $event)"
173
+ />
174
+ </template>
171
175
  <!--
172
176
  <el-input-number
173
177
  v-else-if="column.componentType && column.componentType==='inputNumber'"
@@ -209,7 +213,18 @@
209
213
  :style="column.searchControlWidth"
210
214
  @keyup.enter="submitForm('searchForm')"
211
215
  @input="setValueToModelProp(column.prop, $event)"
212
- />
216
+ @focus="showEmpty()"
217
+ @blur="hiddenEmpty()"
218
+ >
219
+ <template #suffix>
220
+ <el-tooltip
221
+ :content="$t('superGrid.searchEmpty')"
222
+ placement="bottom"
223
+ >
224
+ <el-checkbox v-if="isShowEmtpty" v-model="checkedEmpty" @change="checkEmptyChange"/>
225
+ </el-tooltip>
226
+ </template>
227
+ </el-input>
213
228
  </el-form-item>
214
229
  </template>
215
230
 
@@ -277,7 +292,9 @@ export default {
277
292
  dataTwo: null,
278
293
  moduleConfig: {},
279
294
  dateVal: this.getFormItemValue(this.column.prop),
280
- controlConfig: getControlConfig(this.column)
295
+ controlConfig: getControlConfig(this.column),
296
+ isShowEmtptyFlag: false,
297
+ // checkedEmpty: false,
281
298
  }
282
299
  },
283
300
  computed: {
@@ -287,6 +304,23 @@ export default {
287
304
  return data.listToolbarFormData
288
305
  }
289
306
  return null
307
+ },
308
+ isShowEmtpty() {
309
+ return this.isShowEmtptyFlag
310
+ },
311
+ checkedEmpty(){
312
+ if(this.column._emptyValue && this.column._emptyValue === '#blank#'){
313
+ return true
314
+ }
315
+ if(this.column._resetValue || this.column._resetValue === undefined){
316
+ if(this.column._resetValue){
317
+ this.column._resetValue = undefined
318
+ this.isShowEmtptyFlag = false
319
+ }
320
+ return false
321
+ } else {
322
+ return true
323
+ }
290
324
  }
291
325
  },
292
326
  created() {
@@ -471,6 +505,30 @@ export default {
471
505
  } else {
472
506
  return ['00:00:00']
473
507
  }
508
+ },
509
+ multiselectChange(arr, selectedItem) {
510
+ if (arr.indexOf('saveAll') !== -1) {
511
+ if (this.searchForm[this.column.prop] && typeof this.searchForm[this.column.prop] === 'string') {
512
+ this.searchForm[this.column.prop] = this.searchForm[this.column.prop].split(',')
513
+ }
514
+ } else {
515
+ this.searchForm[this.column.prop] = arr
516
+ }
517
+ },
518
+ showEmpty(){
519
+ this.isShowEmtptyFlag = true
520
+ },
521
+ hiddenEmpty(){
522
+ if(!this.checkedEmpty){
523
+ this.isShowEmtptyFlag = false
524
+ }
525
+ },
526
+ checkEmptyChange(newValue) {
527
+ if(newValue){
528
+ this.column._emptyValue='#blank#'
529
+ } else {
530
+ this.column._emptyValue=undefined
531
+ }
474
532
  }
475
533
  },
476
534
  emits: ['submit-form']
@@ -157,6 +157,11 @@ export default {
157
157
  }
158
158
  this.setDefaultQueryValue(column, this.searchForm)
159
159
  }
160
+ // 清空空值状态
161
+ if(column._emptyValue){
162
+ column._emptyValue=undefined
163
+ column._resetValue=true
164
+ }
160
165
  })
161
166
  // 取消当前选中的条件列表的信息
162
167
  // this.$refs.searchConditionList.editConditionId = null
@@ -162,6 +162,11 @@ export default {
162
162
  }
163
163
  this.setDefaultQueryValue(column, this.searchForm)
164
164
  }
165
+ // 清空空值状态
166
+ if(column._emptyValue){
167
+ column._emptyValue=undefined
168
+ column._resetValue=true
169
+ }
165
170
  })
166
171
  // 取消当前选中的条件列表的信息
167
172
  // this.$refs.searchConditionList.editConditionId = null
@@ -27,6 +27,7 @@ const searchMethods = {
27
27
  param.formatter = column.formatter
28
28
  ? JSON.parse(JSON.stringify(column.formatter))
29
29
  : column.formatter
30
+ param.isEmptyValue= column._emptyValue && column._emptyValue === '#blank#'?true:false
30
31
  const values = this.getFormItemValue(column.prop)
31
32
  if (column.dataType === 'DATE' || column.dataType === 'TIME') {
32
33
  // 日期 或 时间类型
@@ -440,10 +441,11 @@ const searchMethods = {
440
441
  num++
441
442
  })
442
443
  } else if (
444
+ param.isEmptyValue || (
443
445
  typeof value !== 'undefined' &&
444
446
  value !== '' &&
445
447
  value !== null &&
446
- !Array.isArray(value)
448
+ !Array.isArray(value))
447
449
  ) {
448
450
  // 不是数组
449
451
  param.propValue = value
@@ -1,5 +1,5 @@
1
1
  // 将选中的部门节点添加到结果集合中
2
- export function addSelectedUserInfo (selectNodeInfo, userData, containBranch) {
2
+ export function addSelectedUserInfo(selectNodeInfo, userData, containBranch) {
3
3
  if (selectNodeInfo.userIds.indexOf(userData.id) < 0) {
4
4
  // 表示集合中不存在该用户
5
5
  selectNodeInfo.userIds.push(userData.id)
@@ -28,7 +28,7 @@ export function addSelectedUserInfo (selectNodeInfo, userData, containBranch) {
28
28
  selectNodeInfo.userEnNames.push(userData.enName ? userData.enName : '')
29
29
  }
30
30
  }
31
- export function packageSelectResult (user, containBranch) {
31
+ export function packageSelectResult(user, containBranch) {
32
32
  let name = user.name
33
33
  if (user.enName && user.enName.trim() !== '') {
34
34
  name = name + '(' + user.enName + ')'
@@ -47,29 +47,42 @@ export function packageSelectResult (user, containBranch) {
47
47
  containBranch: containBranch,
48
48
  user: user,
49
49
  enName: user.enName ? user.enName : '',
50
- subCompanyName: user.subCompanyName
50
+ subCompanyName: user.subCompanyName,
51
+ divisionManager: user.divisionManager,
52
+ divisionManagerName: user.divisionManagerName
51
53
  }
52
54
  // 表示是勾选单选按钮或 选中树节点
53
55
  return selectNodeInfo
54
56
  }
55
57
  // 根据指定用户信息获得用户集合
56
- function getSelectUsers (searchField, selectUserInfo, separator) {
58
+ function getSelectUsers(searchField, selectUserInfo, separator) {
57
59
  return new Promise((resolve, reject) => {
58
60
  if (!searchField) {
59
61
  resolve([])
60
62
  } else if (!selectUserInfo) {
61
63
  resolve([])
62
64
  } else {
63
- window['$vueApp'].config.globalProperties.$http.get(window['$vueApp'].config.globalProperties.baseAPI + '/component/organization-trees/select-users-mobile?searchField=' + searchField + '&selectUserInfo=' + selectUserInfo + '&separator=' + separator).then(users => {
64
- resolve(users)
65
- }).catch(error => {
66
- reject(error)
67
- })
65
+ window['$vueApp'].config.globalProperties.$http
66
+ .get(
67
+ window['$vueApp'].config.globalProperties.baseAPI +
68
+ '/component/organization-trees/select-users-mobile?searchField=' +
69
+ searchField +
70
+ '&selectUserInfo=' +
71
+ selectUserInfo +
72
+ '&separator=' +
73
+ separator
74
+ )
75
+ .then((users) => {
76
+ resolve(users)
77
+ })
78
+ .catch((error) => {
79
+ reject(error)
80
+ })
68
81
  }
69
82
  })
70
83
  }
71
84
  // 部门人员树选中了组织结构树的根节点
72
- function packageAllUser () {
85
+ function packageAllUser() {
73
86
  // 表示集合中不存在该用户,则封装该用户
74
87
  const tenantNodeId = -1
75
88
  var allUser = {
@@ -79,7 +92,7 @@ function packageAllUser () {
79
92
  return allUser
80
93
  }
81
94
  // 工作组人员树选中了组织结构树的根节点
82
- function packageAllWgUser () {
95
+ function packageAllWgUser() {
83
96
  // 表示集合中不存在该用户,则封装该用户
84
97
  const tenantNodeId = -1
85
98
  var allUser = {
@@ -88,7 +101,7 @@ function packageAllWgUser () {
88
101
  }
89
102
  return allUser
90
103
  }
91
- export function initSelectUsers (searchField, selectUserInfo, separator) {
104
+ export function initSelectUsers(searchField, selectUserInfo, separator) {
92
105
  return new Promise((resolve, reject) => {
93
106
  const selectDepts = []
94
107
  if (selectUserInfo) {
@@ -101,11 +114,13 @@ export function initSelectUsers (searchField, selectUserInfo, separator) {
101
114
  resolve(selectDepts)
102
115
  } else {
103
116
  // 表示不是选择的所有用户
104
- getSelectUsers(searchField, selectUserInfo, separator).then(users => {
105
- resolve(users)
106
- }).catch(error => {
107
- reject(error)
108
- })
117
+ getSelectUsers(searchField, selectUserInfo, separator)
118
+ .then((users) => {
119
+ resolve(users)
120
+ })
121
+ .catch((error) => {
122
+ reject(error)
123
+ })
109
124
  }
110
125
  } else {
111
126
  resolve(selectDepts)
@@ -113,9 +128,8 @@ export function initSelectUsers (searchField, selectUserInfo, separator) {
113
128
  })
114
129
  }
115
130
 
116
-
117
131
  // import {getLanguageWithLocale} from '../../../src/utils/util'
118
- export function resizeScrollTargetHeightUtil () {
132
+ export function resizeScrollTargetHeightUtil() {
119
133
  const pagePadding = 16
120
134
  let height = window.innerHeight - pagePadding
121
135
  const header = document.querySelector('.el-page-header')
@@ -129,29 +143,31 @@ export function resizeScrollTargetHeightUtil () {
129
143
  return height
130
144
  }
131
145
 
132
-
133
- export function getUserMainDeptName (user) {
134
- let deptShowName = ''
135
- if (user && user.data) {
136
- const userData = JSON.parse(user.data)
137
- if (userData.mainDepartmentEnName && userData.mainDepartmentEnName !== '' && window['$locale'] && window['$locale'] !== 'cn') {
138
- deptShowName = userData.mainDepartmentEnName
139
- } else {
140
- if (userData.mainDepartmentName && userData.mainDepartmentName !== '') {
141
- deptShowName = userData.mainDepartmentName
146
+ export function getUserMainDeptName(user) {
147
+ let deptShowName = ''
148
+ if (user && user.data) {
149
+ const userData = JSON.parse(user.data)
150
+ if (
151
+ userData.mainDepartmentEnName &&
152
+ userData.mainDepartmentEnName !== '' &&
153
+ window['$locale'] &&
154
+ window['$locale'] !== 'cn'
155
+ ) {
156
+ deptShowName = userData.mainDepartmentEnName
157
+ } else {
158
+ if (userData.mainDepartmentName && userData.mainDepartmentName !== '') {
159
+ deptShowName = userData.mainDepartmentName
160
+ }
142
161
  }
143
162
  }
144
- }
145
- return deptShowName
163
+ return deptShowName
146
164
  }
147
165
 
148
-
149
-
150
- export function getDeptNamePath (dept) {
151
- let deptShowName = ''
152
- if (dept && dept.data) {
153
- const deptData = JSON.parse(dept.data)
154
- deptShowName = deptData.namePath
155
- }
156
- return deptShowName
166
+ export function getDeptNamePath(dept) {
167
+ let deptShowName = ''
168
+ if (dept && dept.data) {
169
+ const deptData = JSON.parse(dept.data)
170
+ deptShowName = deptData.namePath
171
+ }
172
+ return deptShowName
157
173
  }
@@ -15,7 +15,7 @@
15
15
  row-key="uuid"
16
16
  style="width: 100%"
17
17
  >
18
- <el-table-column :label="$t('workflowHistoryList.index')" align="left" width="80px">
18
+ <el-table-column :label="$t('workflowHistoryList.index')" align="center" width="80">
19
19
  <template v-slot="scope">
20
20
  {{ scope.$index + 1 }}
21
21
  </template>
@@ -35,13 +35,13 @@
35
35
  }}</span>
36
36
  </template>
37
37
  </el-table-column>
38
- <el-table-column :label="$t('workflowHistoryList.operator')" align="left" width="250">
38
+ <el-table-column :label="$t('workflowHistoryList.operator')" align="left" width="120">
39
39
  <template v-slot="scope">
40
40
  <span v-if="scope.row.historyType && scope.row.historyType === 'PROCESS_END'" />
41
41
  <span v-else>{{ scope.row.creatorName }}</span>
42
42
  </template>
43
43
  </el-table-column>
44
- <el-table-column :label="$t('workflowHistoryList.operatorLg')" align="left" width="250">
44
+ <el-table-column :label="$t('workflowHistoryList.operatorLg')" align="left" width="160">
45
45
  <template v-slot="scope">
46
46
  <span v-if="scope.row.historyType && scope.row.historyType === 'PROCESS_END'" />
47
47
  <span v-else>{{ scope.row.creator }}</span>
@@ -59,6 +59,28 @@
59
59
  <span v-else>{{ scope.row.formatCreatedTime }}</span>
60
60
  </template>
61
61
  </el-table-column>
62
+ <el-table-column :label="$t('workflowHistoryList.taskState')" align="left" width="100">
63
+ <template v-slot="scope">
64
+ <span v-if="scope.row.historyType && scope.row.historyType === 'PROCESS_END'" />
65
+ <el-tag v-else-if="scope.row.current" type="warning">{{$t('workflowHistoryList.taskStateDoing')}}</el-tag>
66
+ <el-tag v-else type="success">{{$t('workflowHistoryList.taskStateDone')}}</el-tag>
67
+ </template>
68
+ </el-table-column>
69
+ <el-table-column :label="$t('workflowHistoryList.processingDuration')" align="center" width="120">
70
+ <template v-slot="scope">
71
+ <span v-if="scope.row.historyType && scope.row.historyType === 'PROCESS_END'" />
72
+ <span v-else-if="!scope.row.copyTask">{{ scope.row.processingDuration }}</span>
73
+ </template>
74
+ </el-table-column>
75
+ <el-table-column :label="$t('workflowHistoryList.isOverdue')" align="center" width="100">
76
+ <template v-slot="scope">
77
+ <span v-if="scope.row.historyType && scope.row.historyType === 'PROCESS_END'" />
78
+ <span v-else>
79
+ <div v-if="scope.row.overdueDuration && scope.row.overdueDuration > 0" class="red-circle"/>
80
+ <div v-else class="green-circle"/>
81
+ </span>
82
+ </template>
83
+ </el-table-column>
62
84
  <el-table-column :label="$t('workflowHistoryList.operation')" align="left" width="400">
63
85
  <template v-slot="scope">
64
86
  <span v-if="scope.row.historyType && scope.row.historyType === 'PROCESS_END'" />
@@ -286,3 +308,19 @@ export default {
286
308
  }
287
309
  }
288
310
  </script>
311
+ <style scoped>
312
+ .red-circle {
313
+ width: 20px; /* 圆圈的宽度 */
314
+ height: 20px; /* 圆圈的高度 */
315
+ background-color: red; /* 背景色设置为红色 */
316
+ border-radius: 50%; /* 边框半径设置为50%,使元素变为圆形 */
317
+ display: inline-block; /* 确保元素以块级元素显示 */
318
+ }
319
+ .green-circle {
320
+ width: 20px; /* 圆圈的宽度 */
321
+ height: 20px; /* 圆圈的高度 */
322
+ background-color: rgb(11, 177, 121); /* 背景色设置为红色 */
323
+ border-radius: 50%; /* 边框半径设置为50%,使元素变为圆形 */
324
+ display: inline-block; /* 确保元素以块级元素显示 */
325
+ }
326
+ </style>
@@ -6,9 +6,15 @@ export default {
6
6
 
7
7
  if (value) {
8
8
  // console.log('-----v-permission---init----')
9
+ let permissionCodes = value
10
+ let systemCode
11
+ if(value instanceof Object) {
12
+ permissionCodes = value.codes
13
+ systemCode = value.systemCode
14
+ }
9
15
  // 页面组件预览时不需要权限控制,系统中使用页面组件时需要使用权限控制,所以当是预览是资源编码传'true'
10
16
  // 工作流按钮组件中也使用了资源编码为'true'的情况
11
- if (value !== 'true' && !checkPermission(value)) {
17
+ if (permissionCodes !== 'true' && !checkPermission(permissionCodes, systemCode)) {
12
18
  el.parentNode && el.parentNode.removeChild(el)
13
19
  }
14
20
  } else {
@@ -83,7 +83,8 @@ const cn = {
83
83
  forbiddenExceptionLinkUser: '如有疑问请联系',
84
84
  uploadFileTip: '上传的文件不超过{fileSize}M',
85
85
  asyncExportJumpMsg: '或点击我跳转到下载页面',
86
- mustFill: '{label} 必须填写'
86
+ mustFill: '{label} 必须填写',
87
+ filePathNotFound: '文件UUID未找到,请检查配置',
87
88
  },
88
89
  // 列表组件
89
90
  superGrid: {
@@ -134,7 +135,8 @@ const cn = {
134
135
  fold: '收起',
135
136
  prevRow: '上一行',
136
137
  nextRow: '下一行',
137
- detail: '详情'
138
+ detail: '详情',
139
+ searchEmpty:'查询空值'
138
140
  },
139
141
  // 部门树组件
140
142
  departmentTree: {},
@@ -255,7 +257,12 @@ const cn = {
255
257
  operationTime: '操作时间',
256
258
  history_draw_dept_task: '{key_1}领取了部门[{key_2}]的任务',
257
259
  history_abandon_draw_dept_task: '{key_1}放弃领取部门[{key_2}]的任务',
258
- remark: '备注'
260
+ remark: '备注',
261
+ taskState: '节点状态',
262
+ processingDuration: '处理时长(H)',
263
+ isOverdue: '是否超期',
264
+ taskStateDoing: '进行中',
265
+ taskStateDone: '已完成'
259
266
  },
260
267
  gateway: {
261
268
  timeout: '接口调用超时',
@@ -84,7 +84,8 @@ const en = {
84
84
  forbiddenExceptionLinkUser: 'if you have any questions,please contact',
85
85
  uploadFileTip: 'The file size should lower {fileSize}M',
86
86
  asyncExportJumpMsg: 'Or click me to jump to download page.',
87
- mustFill: '{label} must fill'
87
+ mustFill: '{label} must fill',
88
+ filePathNotFound: 'File UUID not found, please check the configuration'
88
89
  },
89
90
  superGrid: {
90
91
  editablePlaceholder: 'Please click to input',
@@ -134,7 +135,8 @@ const en = {
134
135
  fold: 'Fold',
135
136
  prevRow: 'Prev Row',
136
137
  nextRow: 'Next Row',
137
- detail: 'Detail'
138
+ detail: 'Detail',
139
+ searchEmpty:'Search Empty'
138
140
  },
139
141
  departmentTree: {},
140
142
  departmentTreeInline: {
@@ -254,7 +256,12 @@ const en = {
254
256
  operationTime: 'Operation Time',
255
257
  history_draw_dept_task: '{key_1} Received tasks from department [{key_2}]',
256
258
  history_abandon_draw_dept_task: '{key_1} Abandon the task of receiving department [{key_2}]',
257
- remark: 'remark'
259
+ remark: 'remark',
260
+ taskState: 'Task State',
261
+ processingDuration: 'Processing Duration(H)',
262
+ isOverdue: 'Is Overdue',
263
+ taskStateDoing: 'Doing',
264
+ taskStateDone: 'Done'
258
265
  },
259
266
  gateway: {
260
267
  timeout: 'Interface call timeout',