workflow-editor 0.9.65 → 0.9.66

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 (113) hide show
  1. package/lib/workflow-editor.css +1 -1
  2. package/lib/workflow-editor.umd.min.js +10 -10
  3. package/package.json +2 -2
  4. package/packages/index.js +34 -0
  5. package/packages/plugins/formValidatorUtil.js +528 -0
  6. package/packages/plugins/index.js +8 -0
  7. package/packages/workflow-editor/index.js +14 -0
  8. package/packages/workflow-editor/src/api.js +7 -0
  9. package/packages/workflow-editor/src/assets/wf-editor-icons.js +2 -0
  10. package/packages/workflow-editor/src/constant.js +8 -0
  11. package/packages/workflow-editor/src/json-object-templates/copy-task.js +67 -0
  12. package/packages/workflow-editor/src/json-object-templates/decision.js +11 -0
  13. package/packages/workflow-editor/src/json-object-templates/end.js +14 -0
  14. package/packages/workflow-editor/src/json-object-templates/fork.js +10 -0
  15. package/packages/workflow-editor/src/json-object-templates/human-decision.js +9 -0
  16. package/packages/workflow-editor/src/json-object-templates/human-task.js +199 -0
  17. package/packages/workflow-editor/src/json-object-templates/join.js +10 -0
  18. package/packages/workflow-editor/src/json-object-templates/process.js +98 -0
  19. package/packages/workflow-editor/src/json-object-templates/start.js +13 -0
  20. package/packages/workflow-editor/src/json-object-templates/subprocess.js +30 -0
  21. package/packages/workflow-editor/src/json-object-templates/transition.js +26 -0
  22. package/packages/workflow-editor/src/main/admin-save-dialog.vue +66 -0
  23. package/packages/workflow-editor/src/main/canvas.vue +479 -0
  24. package/packages/workflow-editor/src/main/context-menu.vue +132 -0
  25. package/packages/workflow-editor/src/main/icon-svg.vue +32 -0
  26. package/packages/workflow-editor/src/main/selection-region.vue +66 -0
  27. package/packages/workflow-editor/src/main/tache-history-tooltip.vue +38 -0
  28. package/packages/workflow-editor/src/main/tache-name-input.vue +19 -0
  29. package/packages/workflow-editor/src/main/tache-subprocess-history-dialog.vue +35 -0
  30. package/packages/workflow-editor/src/main/toolbox.vue +60 -0
  31. package/packages/workflow-editor/src/main/wf-history-canvas.vue +302 -0
  32. package/packages/workflow-editor/src/process-json.js +622 -0
  33. package/packages/workflow-editor/src/process-service.js +31 -0
  34. package/packages/workflow-editor/src/properties-editors/common/additional-condition-utils.js +531 -0
  35. package/packages/workflow-editor/src/properties-editors/common/additional-condition.vue +276 -0
  36. package/packages/workflow-editor/src/properties-editors/common/auto-filled-fields-utils.js +34 -0
  37. package/packages/workflow-editor/src/properties-editors/common/auto-filled-fields.vue +239 -0
  38. package/packages/workflow-editor/src/properties-editors/common/common-notice-tool.vue +47 -0
  39. package/packages/workflow-editor/src/properties-editors/common/common-user-condition.vue +241 -0
  40. package/packages/workflow-editor/src/properties-editors/common/form-fields-utils.js +23 -0
  41. package/packages/workflow-editor/src/properties-editors/common/form-fields.vue +116 -0
  42. package/packages/workflow-editor/src/properties-editors/common/i18n-input.vue +75 -0
  43. package/packages/workflow-editor/src/properties-editors/common/i18n-set-dialog.vue +125 -0
  44. package/packages/workflow-editor/src/properties-editors/common/notice.vue +98 -0
  45. package/packages/workflow-editor/src/properties-editors/common/reminder.vue +179 -0
  46. package/packages/workflow-editor/src/properties-editors/common/select-mail-template.vue +83 -0
  47. package/packages/workflow-editor/src/properties-editors/common/standard-fields.vue +65 -0
  48. package/packages/workflow-editor/src/properties-editors/common/system-role-tree-inline.vue +355 -0
  49. package/packages/workflow-editor/src/properties-editors/common/system-role-tree.vue +63 -0
  50. package/packages/workflow-editor/src/properties-editors/common/task-title.vue +148 -0
  51. package/packages/workflow-editor/src/properties-editors/common/transactor-settings.vue +233 -0
  52. package/packages/workflow-editor/src/properties-editors/common/user-selection.vue +386 -0
  53. package/packages/workflow-editor/src/properties-editors/common/value-selection-dialog.vue +209 -0
  54. package/packages/workflow-editor/src/properties-editors/common/variables.vue +135 -0
  55. package/packages/workflow-editor/src/properties-editors/copy-task/basic-properties.vue +90 -0
  56. package/packages/workflow-editor/src/properties-editors/copy-task/permission-settings.vue +155 -0
  57. package/packages/workflow-editor/src/properties-editors/copy-task.vue +80 -0
  58. package/packages/workflow-editor/src/properties-editors/decision.vue +90 -0
  59. package/packages/workflow-editor/src/properties-editors/fork.vue +72 -0
  60. package/packages/workflow-editor/src/properties-editors/human-decision.vue +44 -0
  61. package/packages/workflow-editor/src/properties-editors/human-task/additional-condition-dialog.vue +60 -0
  62. package/packages/workflow-editor/src/properties-editors/human-task/basic-properties.vue +156 -0
  63. package/packages/workflow-editor/src/properties-editors/human-task/componentsConfigUtil.js +291 -0
  64. package/packages/workflow-editor/src/properties-editors/human-task/custom-actions.vue +249 -0
  65. package/packages/workflow-editor/src/properties-editors/human-task/editable-child-field-setting.vue +392 -0
  66. package/packages/workflow-editor/src/properties-editors/human-task/editable-child-fields.vue +241 -0
  67. package/packages/workflow-editor/src/properties-editors/human-task/editable-field-selection.vue +220 -0
  68. package/packages/workflow-editor/src/properties-editors/human-task/editable-fields.vue +204 -0
  69. package/packages/workflow-editor/src/properties-editors/human-task/events.vue +59 -0
  70. package/packages/workflow-editor/src/properties-editors/human-task/permission-settings.vue +207 -0
  71. package/packages/workflow-editor/src/properties-editors/human-task/selection-conditions.vue +390 -0
  72. package/packages/workflow-editor/src/properties-editors/human-task.vue +103 -0
  73. package/packages/workflow-editor/src/properties-editors/join.vue +44 -0
  74. package/packages/workflow-editor/src/properties-editors/process/basic-properties.vue +273 -0
  75. package/packages/workflow-editor/src/properties-editors/process/events.vue +76 -0
  76. package/packages/workflow-editor/src/properties-editors/process/notice-settings.vue +60 -0
  77. package/packages/workflow-editor/src/properties-editors/process/parameter-settings.vue +95 -0
  78. package/packages/workflow-editor/src/properties-editors/process/permission-settings.vue +28 -0
  79. package/packages/workflow-editor/src/properties-editors/process/selectPage.vue +81 -0
  80. package/packages/workflow-editor/src/properties-editors/process.vue +109 -0
  81. package/packages/workflow-editor/src/properties-editors/subprocess/basic-properties.vue +187 -0
  82. package/packages/workflow-editor/src/properties-editors/subprocess/events.vue +26 -0
  83. package/packages/workflow-editor/src/properties-editors/subprocess/field-mappings.vue +206 -0
  84. package/packages/workflow-editor/src/properties-editors/subprocess/transactor-settings.vue +64 -0
  85. package/packages/workflow-editor/src/properties-editors/subprocess.vue +79 -0
  86. package/packages/workflow-editor/src/properties-editors/transition/basic-properties.vue +53 -0
  87. package/packages/workflow-editor/src/properties-editors/transition.vue +74 -0
  88. package/packages/workflow-editor/src/properties-editors/user-condition.js +177 -0
  89. package/packages/workflow-editor/src/store/getters.js +27 -0
  90. package/packages/workflow-editor/src/store/workflow-editor.js +125 -0
  91. package/packages/workflow-editor/src/taches/common-methods.js +21 -0
  92. package/packages/workflow-editor/src/taches/copy-task.vue +99 -0
  93. package/packages/workflow-editor/src/taches/custom-task.vue +88 -0
  94. package/packages/workflow-editor/src/taches/decision.vue +102 -0
  95. package/packages/workflow-editor/src/taches/end.vue +76 -0
  96. package/packages/workflow-editor/src/taches/fork.vue +102 -0
  97. package/packages/workflow-editor/src/taches/human-decision.vue +102 -0
  98. package/packages/workflow-editor/src/taches/human-task.vue +113 -0
  99. package/packages/workflow-editor/src/taches/join.vue +91 -0
  100. package/packages/workflow-editor/src/taches/joint.vue +177 -0
  101. package/packages/workflow-editor/src/taches/start.vue +76 -0
  102. package/packages/workflow-editor/src/taches/subprocess.vue +99 -0
  103. package/packages/workflow-editor/src/taches/tache-resizer.vue +80 -0
  104. package/packages/workflow-editor/src/transitions/broken-line.vue +91 -0
  105. package/packages/workflow-editor/src/transitions/curve-line.vue +91 -0
  106. package/packages/workflow-editor/src/transitions/straight-line.vue +26 -0
  107. package/packages/workflow-editor/src/transitions/transition.vue +212 -0
  108. package/packages/workflow-editor/src/transitions/virtual-transition.vue +43 -0
  109. package/packages/workflow-editor/src/util.js +493 -0
  110. package/packages/workflow-editor/src/workflow-editor.vue +605 -0
  111. package/packages/workflow-editor/src/workflow-history.vue +153 -0
  112. package/src/i18n/langs/cn.js +4 -1
  113. package/src/i18n/langs/en.js +4 -1
@@ -0,0 +1,386 @@
1
+ <template>
2
+ <el-form-item :label="label" :label-width="labelWidth">
3
+ <el-col>
4
+ <el-checkbox-group v-model="checkList">
5
+ <el-checkbox label="${instanceCreator}">
6
+ {{ $t('workflowEditor.process.processInitiator') }}
7
+ </el-checkbox>
8
+ <el-checkbox label="${processAdmin}">
9
+ {{ $t('workflowEditor.process.processAdministrator') }}
10
+ </el-checkbox>
11
+ <el-checkbox v-if="currentTransactor" label="${currentTransactor}">
12
+ {{ $t('workflowEditor.process.currentHandler') }}
13
+ </el-checkbox>
14
+ <el-checkbox v-else label="${allHandleTransactors}">
15
+ {{ $t('workflowEditor.process.allHandlingPersonnel') }}
16
+ </el-checkbox>
17
+ <el-checkbox label="assignUser" @change="toggleUserList">
18
+ {{ $t('workflowEditor.process.designatedPersonnel') }}
19
+ </el-checkbox>
20
+ </el-checkbox-group>
21
+ </el-col>
22
+ <div v-if="showUserList">
23
+ <el-col>
24
+ <el-row>
25
+ <el-col :span="4">
26
+ {{ $t('workflowEditor.process.listOfDesignatedPersons') }}
27
+ </el-col>
28
+ <el-col :span="5">
29
+ <el-dropdown size="mini" split-button type="primary" plain @command="handleCommand">
30
+ <span class="el-dropdown-link">
31
+ <i class="el-icon-search" /> {{ $t('workflowEditorPublicModel.choice') }}
32
+ </span>
33
+ <el-dropdown-menu slot="dropdown">
34
+ <el-dropdown-item command="selectUser" @click="selectPointUser()">
35
+ {{ $t('workflowEditor.common.selectusers') }}
36
+ </el-dropdown-item>
37
+ <el-dropdown-item command="selectDepartment" @click="selectPointDepartment()">
38
+ {{ $t('workflowEditor.common.selectDepartment') }}
39
+ </el-dropdown-item>
40
+ <el-dropdown-item command="selectWorkgroup" @click="selectPointWorkgroup()">
41
+ {{ $t('workflowEditor.common.selectTeam') }}
42
+ </el-dropdown-item>
43
+ <el-dropdown-item command="selectRole" @click="selectPointRole()">
44
+ {{ $t('workflowEditor.common.selectRole') }}
45
+ </el-dropdown-item>
46
+ <el-dropdown-item command="selectField" @click="selectPointField()">
47
+ {{ $t('workflowEditor.common.selectField') }}
48
+ </el-dropdown-item>
49
+ </el-dropdown-menu>
50
+ </el-dropdown>
51
+ </el-col>
52
+ <el-col :span="3">
53
+ <el-button type="primary" size="mini" plain icon="el-icon-delete" @click="resetSelectedUsers">
54
+ {{ $t('workflowEditorPublicModel.empty') }}
55
+ </el-button>
56
+ </el-col>
57
+ </el-row>
58
+ <el-row>
59
+ <el-col>
60
+ <el-input
61
+ v-model="selectedUsersShowValue"
62
+ type="textarea"
63
+ :rows="2"
64
+ :placeholder="$t('workflowEditorMessage.pleaseSelectPersonnel')"
65
+ />
66
+ </el-col>
67
+ </el-row>
68
+ </el-col>
69
+ <department-user-tree v-if="showSelectUser" width="60%" :multiple="true" @close="addPointUsers" />
70
+ <department-tree v-if="showSelectDepartment" width="30%" :multiple="true" @close="addPointDepartments" />
71
+ <workgroup-tree v-if="showSelectWorkgroup" width="30%" :multiple="true" @close="addPointWorkgroups" />
72
+ <system-role-tree v-if="showSelectRole" :multiple="true" @close="addPointRoles" />
73
+ <form-fields v-if="showSelectField" @close="setField" />
74
+ </div>
75
+ </el-form-item>
76
+ </template>
77
+ <script>
78
+ import FormFields from '../common/form-fields'
79
+ import SystemRoleTree from './system-role-tree'
80
+ import { getFormFieldLabel } from '../common/form-fields-utils.js'
81
+ export default {
82
+ name: 'UserSelection',
83
+ components: {
84
+ SystemRoleTree,
85
+ FormFields
86
+ },
87
+ props: {
88
+ label: {
89
+ type: String,
90
+ default: ''
91
+ },
92
+ labelWidth: {
93
+ type: String,
94
+ default: null
95
+ },
96
+ value: {
97
+ type: String,
98
+ default: ''
99
+ },
100
+ currentTransactor: {
101
+ type: Boolean,
102
+ default: false
103
+ }
104
+ },
105
+ data() {
106
+ let showUserList = false
107
+ let selectedUsers = ''
108
+ // 流程发起人等前3个选项和指定人员选中的人使用分号(后跟一个空格)来分割,这样区分了前三个选项和最后一个选项
109
+ const users = this.value.split('; ')
110
+ const checkList = users[0].split(' condition.operator.or ')
111
+ if (users.length === 2) {
112
+ showUserList = true
113
+ selectedUsers = users[1].split(' condition.operator.or ')
114
+ checkList.push('assignUser')
115
+ }
116
+ return {
117
+ checkList,
118
+ showUserList,
119
+ selectedUsers,
120
+ showSelectUser: false, // 是否显示用户树
121
+ selectedUsersShowValue: null, // 已选择人员的显示值,例如:用户 等于 '张三/分支1' 或者 用户 等于 '李四/集团公司'
122
+ showSelectDepartment: false, // 是否显示部门树
123
+ showSelectWorkgroup: false, // 是否显示工作组树
124
+ showSelectRole: false, // 是否显示角色树
125
+ showSelectField: false // 是否选择字段
126
+ }
127
+ },
128
+ watch: {
129
+ checkList(val) {
130
+ this.$emit('input', this.getValue())
131
+ },
132
+ selectedUsers(val) {
133
+ this.$emit('input', this.getValue())
134
+ }
135
+ },
136
+ created() {
137
+ console.log(this.checkList)
138
+ this.getSelectedUsersShowValue()
139
+ },
140
+ methods: {
141
+ formatLabel(name) {
142
+ return getFormFieldLabel(name)
143
+ },
144
+ getValue() {
145
+ const checkList = this.checkList.filter(item => {
146
+ return item !== '' && item !== 'assignUser'
147
+ })
148
+ let value = checkList.join(' condition.operator.or ')
149
+ if (this.showUserList && this.selectedUsers && this.selectedUsers.length !== 0) {
150
+ value = value + '; ' + this.selectedUsers.join(' condition.operator.or ')
151
+ }
152
+ return value
153
+ },
154
+ toggleUserList() {
155
+ this.showUserList = !this.showUserList
156
+ },
157
+ // 清空已选人员
158
+ resetSelectedUsers() {
159
+ this.selectedUsers = []
160
+ this.selectedUsersShowValue = ''
161
+ },
162
+ // 选择指定人员下拉菜单事件处理
163
+ handleCommand(command) {
164
+ if (command === 'selectUser') {
165
+ this.selectPointUser()
166
+ } else if (command === 'selectDepartment') {
167
+ this.selectPointDepartment()
168
+ } else if (command === 'selectRole') {
169
+ this.selectPointRole()
170
+ } else if (command === 'selectWorkgroup') {
171
+ this.selectPointWorkgroup()
172
+ } else if (command === 'selectField') {
173
+ this.selectPointField()
174
+ }
175
+ },
176
+ // 显示用户树
177
+ selectPointUser() {
178
+ this.showSelectUser = true
179
+ },
180
+ // 显示部门树
181
+ selectPointDepartment() {
182
+ this.showSelectDepartment = true
183
+ },
184
+ // 显示角色树
185
+ selectPointRole() {
186
+ this.showSelectRole = true
187
+ },
188
+ selectPointField() {
189
+ this.showSelectField = true
190
+ },
191
+ // 显示工作组树
192
+ selectPointWorkgroup() {
193
+ this.showSelectWorkgroup = true
194
+ },
195
+ // 选择用户
196
+ addPointUsers(selectNodeInfo) {
197
+ if (selectNodeInfo) {
198
+ const isContainBranch = selectNodeInfo.containBranch
199
+ if (isContainBranch) {
200
+ // 如果包含分支机构,需要拼接分支编码,格式为:loginName~~branchCode,并封装为用户条件
201
+ this.packageSelectedUserConditionsWithBranch(selectNodeInfo.users)
202
+ } else {
203
+ // 如果不包含分支机构,直接封装为用户条件
204
+ this.packageSelectedUserConditionsWithOutBranch(selectNodeInfo.users)
205
+ }
206
+ // 获得显示时的条件值
207
+ this.getSelectedUsersShowValue()
208
+ }
209
+ this.showSelectUser = false
210
+ },
211
+ // 如果包含分支机构,需要拼接分支编码,格式为:loginName~~branchCode,并封装为用户条件
212
+ packageSelectedUserConditionsWithBranch(selectedUsers) {
213
+ // 用户登录名和分支编码的分隔符
214
+ const loginNameAndBranchSeparator = '~~'
215
+ // 用户姓名和分支名称的分隔符
216
+ const userNameAndBranchSeparator = '/'
217
+ const fixCondition = '${user} operator.text.eq '
218
+ selectedUsers.forEach(user => {
219
+ let loginName = user.loginName
220
+ let userName = user.name
221
+ if (user.subCompanyId && user.subCompanyId !== null) {
222
+ // 用户属于分支机构,拼接分支机构编码
223
+ const branchCode = user.subCompanyCode
224
+ const branchName = user.subCompanyName
225
+ loginName = loginName + loginNameAndBranchSeparator + branchCode
226
+ userName = userName + userNameAndBranchSeparator + branchName
227
+ } else {
228
+ // 用户属于集团公司,拼接公司编码
229
+ loginName = loginName + loginNameAndBranchSeparator + user.tenantCode
230
+ userName = userName + userNameAndBranchSeparator + user.tenantName
231
+ }
232
+ const condition = fixCondition + userName + '[' + loginName + ']'
233
+ if (this.selectedUsers) {
234
+ const selectedCondition = this.selectedUsers.filter(this.filterCondition(condition))
235
+ if (selectedCondition.length === 0) {
236
+ this.selectedUsers.push(condition)
237
+ }
238
+ } else {
239
+ this.selectedUsers = []
240
+ this.selectedUsers.push(condition)
241
+ }
242
+ })
243
+ },
244
+ // 如果不包含分支机构,直接封装为用户条件
245
+ packageSelectedUserConditionsWithOutBranch(selectedUsers) {
246
+ const fixCondition = '${user} operator.text.eq '
247
+ selectedUsers.forEach(user => {
248
+ const condition = fixCondition + user.name + '[' + user.loginName + ']'
249
+ const selectedUserCondition = this.selectedUsers.filter(this.filterCondition(condition))
250
+ if (selectedUserCondition.length === 0) {
251
+ this.selectedUsers.push(condition)
252
+ }
253
+ })
254
+ },
255
+ // 获得显示时的条件值
256
+ getSelectedUsersShowValue() {
257
+ if (this.selectedUsers) {
258
+ const selectedUsersCondition = this.selectedUsers.join(' condition.operator.or ')
259
+ this.selectedUsersShowValue = selectedUsersCondition.replace(/\$\{user\}/g, '用户')
260
+ .replace(/\$\{department\}/g, '部门').replace(/\$\{workGroup\}/g, '工作组')
261
+ .replace(/\$\{role\}/g, '角色')
262
+ .replace(/operator\.text\.eq/g, '等于').replace(/condition\.operator\.or/g, '或者')
263
+ .replace(/\$\{field/g, '字段').replace(/]\}/g, ']')
264
+ }
265
+ },
266
+ // 过滤已选条件中是否包含condition条件
267
+ filterCondition(condition) {
268
+ return (selectedUserCondition) => {
269
+ return selectedUserCondition === condition
270
+ }
271
+ },
272
+ // 选择部门
273
+ addPointDepartments(selectNodeInfo) {
274
+ if (selectNodeInfo) {
275
+ const isContainBranch = selectNodeInfo.containBranch
276
+ if (isContainBranch) {
277
+ // 如果包含分支机构,需要拼接显示的分支名称,格式为:部门名称/分支名称,并封装为部门条件
278
+ this.packageSelectedDepartmentOrWorkgroupConditionsWithBranch(selectNodeInfo.departments, '${department}')
279
+ } else {
280
+ // 如果不包含分支机构,直接封装为部门条件
281
+ this.packageSelectedDepartmentOrWorkgroupConditionsWithOutBranch(selectNodeInfo.departments, '${department}')
282
+ }
283
+ // 获得显示时的条件值
284
+ this.getSelectedUsersShowValue()
285
+ }
286
+ this.showSelectDepartment = false
287
+ },
288
+ // 如果包含分支机构,需要拼接显示的分支名称,格式为:部门名称/分支名称 或 工作组名称/分支名称,并封装为部门 或 工作组条件
289
+ packageSelectedDepartmentOrWorkgroupConditionsWithBranch(selectedDepartments, type) {
290
+ // 部门姓名和分支名称的分隔符
291
+ const departmentNameAndBranchSeparator = '/'
292
+ const fixCondition = type + ' operator.text.eq '
293
+ selectedDepartments.forEach(department => {
294
+ const departmentCode = department.code
295
+ let departmentName = department.name
296
+ if (department.subCompanyId && department.subCompanyId !== null) {
297
+ // 用户属于分支机构,拼接分支机构名称
298
+ const branchName = department.subCompanyName
299
+ if (branchName && branchName !== '') {
300
+ departmentName = departmentName + departmentNameAndBranchSeparator + branchName
301
+ }
302
+ } else {
303
+ // 用户属于集团公司,拼接公司名称
304
+ departmentName = departmentName + departmentNameAndBranchSeparator + department.tenantName
305
+ }
306
+ const condition = fixCondition + departmentName + '[' + departmentCode + ']'
307
+ if (this.selectedUsers) {
308
+ const selectedCondition = this.selectedUsers.filter(this.filterCondition(condition))
309
+ if (selectedCondition.length === 0) {
310
+ this.selectedUsers.push(condition)
311
+ }
312
+ } else {
313
+ this.selectedUsers = []
314
+ this.selectedUsers.push(condition)
315
+ }
316
+ })
317
+ },
318
+ // 如果不包含分支机构,直接封装为部门条件 或 工作组条件
319
+ packageSelectedDepartmentOrWorkgroupConditionsWithOutBranch(selectedDepartments, type) {
320
+ const fixCondition = type + ' operator.text.eq '
321
+ selectedDepartments.forEach(department => {
322
+ const condition = fixCondition + department.name + '[' + department.code + ']'
323
+ if (this.selectedUsers) {
324
+ const selectedCondition = this.selectedUsers.filter(this.filterCondition(condition))
325
+ if (selectedCondition.length === 0) {
326
+ this.selectedUsers.push(condition)
327
+ }
328
+ } else {
329
+ this.selectedUsers = []
330
+ this.selectedUsers.push(condition)
331
+ }
332
+ })
333
+ },
334
+ // 选择工作组
335
+ addPointWorkgroups(selectNodeInfo) {
336
+ if (selectNodeInfo) {
337
+ const isContainBranch = selectNodeInfo.containBranch
338
+ if (isContainBranch) {
339
+ // 如果包含分支机构,需要拼接分支名称,格式为:工作组名称/分支名称,并封装为工作组条件
340
+ this.packageSelectedDepartmentOrWorkgroupConditionsWithBranch(selectNodeInfo.workgroups, '${workGroup}')
341
+ } else {
342
+ // 如果不包含分支机构,直接封装为工作组条件
343
+ this.packageSelectedDepartmentOrWorkgroupConditionsWithOutBranch(selectNodeInfo.workgroups, '${workGroup}')
344
+ }
345
+ // 获得显示时的条件值
346
+ this.getSelectedUsersShowValue()
347
+ }
348
+ this.showSelectWorkgroup = false
349
+ },
350
+ // 选择角色
351
+ addPointRoles(selectNodeInfo) {
352
+ if (selectNodeInfo) {
353
+ // 角色不需要考虑分支机构
354
+ this.packageSelectedDepartmentOrWorkgroupConditionsWithOutBranch(selectNodeInfo.roles, '${role}')
355
+ // 获得显示时的条件值
356
+ this.getSelectedUsersShowValue()
357
+ }
358
+ this.showSelectRole = false
359
+ },
360
+ // 如果不包含分支机构,直接封装为部门条件 或 工作组条件
361
+ packageSelectedFieldConditions(fieldName, type) {
362
+ const fixCondition = type + ' operator.text.eq '
363
+ const condition = fixCondition + '${field[' + fieldName + ']}'
364
+ if (this.selectedUsers) {
365
+ const selectedCondition = this.selectedUsers.filter(this.filterCondition(condition))
366
+ if (selectedCondition.length === 0) {
367
+ this.selectedUsers.push(condition)
368
+ }
369
+ } else {
370
+ this.selectedUsers = []
371
+ this.selectedUsers.push(condition)
372
+ }
373
+ },
374
+ // 选择字段
375
+ setField(name) {
376
+ if (name !== undefined) {
377
+ this.packageSelectedFieldConditions(name, '${user}')
378
+ // 获得显示时的条件值
379
+ this.getSelectedUsersShowValue()
380
+ }
381
+ this.showSelectField = false
382
+ }
383
+ }
384
+ }
385
+ </script>
386
+
@@ -0,0 +1,209 @@
1
+ <template>
2
+ <el-dialog
3
+ :title="titleName"
4
+ :visible="true"
5
+ top="10vh"
6
+ append-to-body
7
+ custom-class="properties-editor-valueSelect"
8
+ center
9
+ @close="$emit('close')"
10
+ >
11
+ <el-tabs id="custTabOne" v-model="activeTab" type="border-card">
12
+ <el-tab-pane v-if="options.length>0" :label="$t('workflowEditor.process.standardFields')" name="standardFields">
13
+ <el-row v-for="option in options" :key="option.name">
14
+ <el-radio v-model="selectedValue" :label="option.name" border>
15
+ {{ option.label }}
16
+ </el-radio>
17
+ </el-row>
18
+ </el-tab-pane>
19
+ <el-tab-pane v-if="showOrganization" :label="$t('workflowEditor.common.organizationStructure')" name="organization">
20
+ <inline-department-user-tree v-if="orgType === 'user'" ref="organizationTree" :multiple="false" @result="orgSelect" />
21
+ <inline-department-tree v-if="orgType === 'department'" ref="organizationTree" :multiple="false" @result="orgSelect" />
22
+ <inline-workgroup-tree v-if="orgType === 'workgroup'" ref="organizationTree" :multiple="false" @result="orgSelect" />
23
+ <inline-system-role-tree v-if="orgType === 'role'" ref="organizationTree" :multiple="false" @result="orgSelect" />
24
+ </el-tab-pane>
25
+ <el-tab-pane :label="$t('workflowEditor.common.formField')" name="formFields">
26
+ <el-radio-group v-model="selectedValue" class="group">
27
+ <div v-for="field in formFields" :key="field.name" class="item">
28
+ <el-radio :label="'${field['+field.name+']}'">
29
+ {{ field.label }}
30
+ </el-radio>
31
+ </div>
32
+ </el-radio-group>
33
+ </el-tab-pane>
34
+ </el-tabs>
35
+ <span slot="footer" class="dialog-footer">
36
+ <el-button type="primary" size="small" @click="setValue">
37
+ {{ $t('workflowEditorPublicModel.determine') }}
38
+ </el-button>
39
+ <el-button size="small" @click="$emit('close')">
40
+ {{ $t('workflowEditorPublicModel.cancel') }}
41
+ </el-button>
42
+ </span>
43
+ </el-dialog>
44
+ </template>
45
+ <script>
46
+ import InlineSystemRoleTree from './system-role-tree-inline'
47
+ import { mapGetters } from 'vuex'
48
+ import { getI18n } from '../../../../workflow-editor/src/util'
49
+ export default {
50
+ name: 'ValueSelectionDialog',
51
+ components: {
52
+ InlineSystemRoleTree
53
+ },
54
+ props: {
55
+ standardFields: {
56
+ type: [Object, Array],
57
+ default: null
58
+ },
59
+ title: {
60
+ type: String,
61
+ default: ''
62
+ },
63
+ showOrganization: {
64
+ type: Boolean,
65
+ default: true
66
+ },
67
+ showFormFields: {
68
+ type: Boolean,
69
+ default: true
70
+ },
71
+ orgType: {
72
+ type: String,
73
+ default: ''
74
+ }
75
+
76
+ },
77
+ data() {
78
+ let titleName = this.title
79
+ let activeTab = 'organization'
80
+ if (!this.showOrganization) {
81
+ activeTab = 'standardFields'
82
+ }
83
+ if (!this.title || this.title === '') {
84
+ titleName = getI18n().t('workflowEditorMessage.pleaseSelectAValue')
85
+ }
86
+ return {
87
+ selectedValue: '',
88
+ activeTab,
89
+ titleName: titleName
90
+ }
91
+ },
92
+ computed: {
93
+ ...mapGetters('wfEditor', [
94
+ 'formFields'
95
+ ]),
96
+ options() {
97
+ if (Array.isArray(this.standardFields)) {
98
+ return this.standardFields
99
+ } else {
100
+ const result = []
101
+ for (const key of Object.keys(this.standardFields)) {
102
+ result.push({
103
+ name: key,
104
+ label: this.standardFields[key]
105
+ })
106
+ }
107
+ return result
108
+ }
109
+ }
110
+ },
111
+ watch: {
112
+ activeTab(value) {
113
+ // 切换页签时清空选中的值
114
+ this.selectedValue = ''
115
+ }
116
+ },
117
+ methods: {
118
+ setValue() {
119
+ // 获得组织结构树的结果
120
+ this.organizationResultValue()
121
+ if (this.selectedValue === '') {
122
+ this.$alert(this.$t('workflowEditorMessage.pleaseSelectAValueInTheCurrentTab'))
123
+ return
124
+ }
125
+ this.$emit('close', this.selectedValue)
126
+ },
127
+ // 监听组织结构树结果
128
+ orgSelect(selectedInfo) {
129
+ if (selectedInfo) {
130
+ if (this.orgType === 'user') {
131
+ this.getSelectedUser(selectedInfo.user, selectedInfo.containBranch)
132
+ } else if (this.orgType === 'department') {
133
+ this.getSelectedDepartmentOrWorkgroup(selectedInfo.department, selectedInfo.containBranch)
134
+ } else if (this.orgType === 'workgroup') {
135
+ this.getSelectedDepartmentOrWorkgroup(selectedInfo.workgroup, selectedInfo.containBranch)
136
+ } else if (this.orgType === 'role') {
137
+ this.getSelectedRole(selectedInfo.role)
138
+ }
139
+ }
140
+ },
141
+ // 获得组织结构的结果
142
+ organizationResultValue() {
143
+ if (this.orgType && this.activeTab === 'organization') {
144
+ if (this.orgType === 'user') {
145
+ this.$refs.organizationTree.confirmSelectUser()
146
+ } else if (this.orgType === 'department') {
147
+ this.$refs.organizationTree.selectDepartment()
148
+ } else if (this.orgType === 'workgroup') {
149
+ this.$refs.organizationTree.selectWorkgroup()
150
+ } else if (this.orgType === 'role') {
151
+ this.$refs.organizationTree.selectRole()
152
+ }
153
+ }
154
+ },
155
+ getSelectedUser(user, containBranch) {
156
+ // 用户登录名和分支编码的分隔符
157
+ const loginNameAndBranchSeparator = '~~'
158
+ // 用户姓名和分支名称的分隔符
159
+ const userNameAndBranchSeparator = '/'
160
+ let loginName = user.loginName
161
+ let userName = user.name
162
+ if (containBranch) {
163
+ if (user.subCompanyId && user.subCompanyId !== null) {
164
+ // 用户属于分支机构,拼接分支机构编码
165
+ const branchCode = user.subCompanyCode
166
+ const branchName = user.subCompanyName
167
+ loginName = loginName + loginNameAndBranchSeparator + branchCode
168
+ userName = userName + userNameAndBranchSeparator + branchName
169
+ } else {
170
+ // 用户属于集团公司,拼接公司编码
171
+ loginName = loginName + loginNameAndBranchSeparator + user.tenantCode
172
+ userName = userName + userNameAndBranchSeparator + user.tenantName
173
+ }
174
+ this.selectedValue = userName + '[' + loginName + ']'
175
+ } else {
176
+ this.selectedValue = user.name + '[' + user.loginName + ']'
177
+ }
178
+ },
179
+ getSelectedDepartmentOrWorkgroup(department, containBranch) {
180
+ this.selectedValue = department.name
181
+ // 用户姓名和分支名称的分隔符
182
+ const userNameAndBranchSeparator = '/'
183
+ let departmentName = department.name
184
+ if (containBranch) {
185
+ if (department.subCompanyId && department.subCompanyId !== null) {
186
+ // 用户属于分支机构,拼接分支机构编码
187
+ const branchName = department.subCompanyName
188
+ departmentName = departmentName + userNameAndBranchSeparator + branchName
189
+ } else {
190
+ // 用户属于集团公司,拼接公司编码
191
+ departmentName = departmentName + userNameAndBranchSeparator + department.tenantName
192
+ }
193
+ this.selectedValue = departmentName + '[' + department.code + ']'
194
+ } else {
195
+ this.selectedValue = department.name + '[' + department.code + ']'
196
+ }
197
+ },
198
+ getSelectedRole(role) {
199
+ this.selectedValue = role.name + '[' + role.code + ']'
200
+ }
201
+
202
+ }
203
+ }
204
+ </script>
205
+ <style scoped>
206
+ #custTabOne /deep/ .el-tabs__content{
207
+ height:500px
208
+ }
209
+ </style>