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,531 @@
1
+ import { getFormField, getFormFieldLabel } from './form-fields-utils'
2
+ import { getI18n } from '../../../../workflow-editor/src/util'
3
+ export const standardFields = [
4
+ {
5
+ name: '${approvalResult}',
6
+ label: getI18n().t('workflowEditor.process.approvalResults'),
7
+ orgType: 'other'
8
+ },
9
+ {
10
+ name: '${instanceCreatorName}',
11
+ label: getI18n().t('workflowEditor.process.processInitiator'),
12
+ orgType: 'user'
13
+ },
14
+ {
15
+ name: '${instanceCreatorRole}',
16
+ label: getI18n().t('workflowEditor.process.processInitiatorRole'),
17
+ orgType: 'role'
18
+ },
19
+ {
20
+ name: '${instanceCreatorDepartment}',
21
+ label: getI18n().t('workflowEditor.process.processInitiatorDepartment'),
22
+ orgType: 'department',
23
+ relatedFields: ['upstageDepartment']
24
+
25
+ },
26
+ {
27
+ name: '${superiorDepartment}',
28
+ label: getI18n().t('workflowEditor.process.processInitiatorSuperiorDepartment'),
29
+ orgType: 'department',
30
+ relatedFields: ['upstageDepartment']
31
+ },
32
+ {
33
+ name: '${instanceCreatorUpstageDepartment}',
34
+ label: getI18n().t('workflowEditor.process.processInitiatorTopDepartment'),
35
+ orgType: 'department'
36
+ },
37
+ {
38
+ name: '${instanceCreatorWorkGroup}',
39
+ label: getI18n().t('workflowEditor.process.processInitiatorWorkingGroup'),
40
+ orgType: 'workgroup'
41
+ },
42
+ {
43
+ name: '${instanceCreatorDirectSuperiorName}',
44
+ label: getI18n().t('workflowEditor.process.nameOfTheDirectSuperiorOfTheProcessInitiator'),
45
+ orgType: 'user'
46
+ },
47
+ {
48
+ name: '${instanceCreatorDirectSuperiorDepartment}',
49
+ label: getI18n().t('workflowEditor.process.processInitiatorsDirectSuperiorDepartment'),
50
+ orgType: 'department',
51
+ relatedFields: ['upstageDepartment']
52
+ },
53
+ {
54
+ name: '${instanceCreatorDirectSuperiorRole}',
55
+ label: getI18n().t('workflowEditor.process.directSuperiorRoleOfProcessInitiator'),
56
+ orgType: 'role'
57
+ },
58
+ {
59
+ name: '${instanceCreatorDirectSuperiorWorkGroup}',
60
+ label: getI18n().t('workflowEditor.process.ProcessInitiatorsImmediateSuperiorWorkingGroup'),
61
+ orgType: 'workgroup'
62
+ },
63
+ {
64
+ name: '${currentTransactorName}',
65
+ label: getI18n().t('workflowEditor.process.nameOfCurrentHandler'),
66
+ orgType: 'user',
67
+ relatedFields: ['instanceCreatorName', 'instanceCreatorDirectSuperiorName']
68
+ },
69
+ {
70
+ name: '${currentTransactorRole}',
71
+ label: getI18n().t('workflowEditor.process.currentHandlerRole'),
72
+ orgType: 'role'
73
+ },
74
+ {
75
+ name: '${currentTransactorDepartment}',
76
+ label: getI18n().t('workflowEditor.process.currentHandlerDepartment'),
77
+ orgType: 'department',
78
+ relatedFields: ['instanceCreatorDepartment', 'superiorDepartment', 'instanceCreatorUpstageDepartment', 'instanceCreatorDirectSuperiorDepartment', 'upstageDepartment']
79
+ },
80
+ {
81
+ name: '${currentTransactorSuperiorDepartment}',
82
+ label: getI18n().t('workflowEditor.process.currentHandlerSuperiorDepartment'),
83
+ orgType: 'department',
84
+ relatedFields: ['instanceCreatorDepartment', 'superiorDepartment', 'instanceCreatorUpstageDepartment', 'instanceCreatorDirectSuperiorDepartment', 'upstageDepartment']
85
+ },
86
+ {
87
+ name: '${currentTransactorUpstageDepartment}',
88
+ label: getI18n().t('workflowEditor.process.topDepartmentOfCurrentHandler'),
89
+ orgType: 'department',
90
+ relatedFields: ['instanceCreatorDepartment', 'superiorDepartment', 'instanceCreatorUpstageDepartment', 'instanceCreatorDirectSuperiorDepartment']
91
+ },
92
+ {
93
+ name: '${currentTransactorWorkGroup}',
94
+ label: getI18n().t('workflowEditor.process.currentHandlerWorkingGroup'),
95
+ orgType: 'workgroup'
96
+ },
97
+ {
98
+ name: '${currentTransactorDirectSuperiorName}',
99
+ label: getI18n().t('workflowEditor.process.nameOfTheImmediateSuperiorOfTheCurrentHandler'),
100
+ orgType: 'user',
101
+ relatedFields: ['instanceCreatorName', 'instanceCreatorDirectSuperiorName']
102
+ },
103
+ {
104
+ name: '${currentTransactorDirectSuperiorDepartment}',
105
+ label: getI18n().t('workflowEditor.process.currentHandlerDirectSuperiorDepartment'),
106
+ orgType: 'department',
107
+ relatedFields: ['instanceCreatorDepartment', 'superiorDepartment', 'instanceCreatorUpstageDepartment', 'instanceCreatorDirectSuperiorDepartment', 'upstageDepartment']
108
+ },
109
+ {
110
+ name: '${currentTransactorDirectSuperiorRole}',
111
+ label: getI18n().t('workflowEditor.process.currentManagerDirectSuperiorRole'),
112
+ orgType: 'role'
113
+ },
114
+ {
115
+ name: '${currentTransactorDirectSuperiorWorkGroup}',
116
+ label: getI18n().t('workflowEditor.process.workingGroupDirectlyUnderTheCurrentHandler'),
117
+ orgType: 'workgroup'
118
+ },
119
+ {
120
+ name: '${upstageDepartment}',
121
+ label: getI18n().t('workflowEditor.process.topDepartments'),
122
+ orgType: 'department'
123
+ },
124
+ {
125
+ name: '${countersignatureDisagreeCount}',
126
+ label: getI18n().t('workflowEditor.process.totalNnumberOfPersonsWhoDisagreeWithTheCountersignature'),
127
+ orgType: 'other'
128
+ },
129
+ {
130
+ name: '${countersignatureAgreeCount}',
131
+ label: getI18n().t('workflowEditor.process.totalNumberOfCountersignedAndAgreedPersonnel'),
132
+ orgType: 'other'
133
+ },
134
+ {
135
+ name: '${countersignatureDisagreePercentage}',
136
+ label: getI18n().t('workflowEditor.process.percentageOfPersonsWhoDisagreeWithTheCountersignature'),
137
+ orgType: 'other'
138
+ },
139
+ {
140
+ name: '${countersignatureAgreePercentage}',
141
+ label: getI18n().t('workflowEditor.process.percentageOfCountersignedAndAgreedPersonnel'),
142
+ orgType: 'other'
143
+ },
144
+ {
145
+ name: '${abstentionPercentage}',
146
+ label: getI18n().t('workflowEditor.process.percentageOfAbstentions'),
147
+ orgType: 'other'
148
+ },
149
+ {
150
+ name: '${againstPercentage}',
151
+ label: getI18n().t('workflowEditor.process.percentageOfVotesAgainst'),
152
+ orgType: 'other'
153
+ },
154
+ {
155
+ name: '${favorPercentage}',
156
+ label: getI18n().t('workflowEditor.process.percentageOfAffirmativeVotes'),
157
+ orgType: 'other'
158
+ },
159
+ {
160
+ name: '${abstentionCount}',
161
+ label: getI18n().t('workflowEditor.process.totalNumberOfAbstentions'),
162
+ orgType: 'other'
163
+ },
164
+ {
165
+ name: '${againstCount}',
166
+ label: getI18n().t('workflowEditor.process.totalVotesAgainst'),
167
+ orgType: 'other'
168
+ },
169
+ {
170
+ name: '${favorCount}',
171
+ label: getI18n().t('workflowEditor.process.totalNumberOfAffirmativeVotes'),
172
+ orgType: 'other'
173
+ }
174
+
175
+ ]
176
+
177
+ export function getStandardFields() {
178
+ const result = {
179
+ value: 'standard',
180
+ label: getI18n().t('workflowEditor.process.standardFields'),
181
+ children: []
182
+ }
183
+ for (const field of standardFields) {
184
+ result.children.push({
185
+ value: field.name,
186
+ label: field.label
187
+ })
188
+ }
189
+ return result
190
+ }
191
+
192
+ export const logicOperators = {
193
+ 'condition.operator.or': getI18n().t('workflowEditor.process.perhaps'),
194
+ 'condition.operator.and': getI18n().t('workflowEditor.process.also')
195
+ }
196
+ export function isNumber(type) {
197
+ return ['NUMBER', 'DOUBLE', 'FLOAT', 'LONG', 'INTEGER', 'AMOUNT'].indexOf(type) >= 0
198
+ }
199
+ export const operatorsForNumber = [{
200
+ name: 'operator.number.gt',
201
+ label: getI18n().t('workflowEditor.process.greaterThan')
202
+ }, {
203
+ name: 'operator.number.lt',
204
+ label: getI18n().t('workflowEditor.process.lessThan')
205
+ }, {
206
+ name: 'operator.number.eq',
207
+ label: getI18n().t('workflowEditor.process.beEqualTo')
208
+ }, {
209
+ name: 'operator.number.le',
210
+ label: getI18n().t('workflowEditor.process.notGreaterThan')
211
+ }, {
212
+ name: 'operator.number.ge',
213
+ label: getI18n().t('workflowEditor.process.notLessThan')
214
+ }, {
215
+ name: 'operator.number.ne',
216
+ label: getI18n().t('workflowEditor.process.notEqualTo')
217
+ }]
218
+
219
+ export function isString(type) {
220
+ return ['STRING', 'TEXT'].indexOf(type) >= 0
221
+ }
222
+ export const operatorsForString = [{
223
+ name: 'operator.text.eq',
224
+ label: getI18n().t('workflowEditor.process.beEqualTo')
225
+ }, {
226
+ name: 'operator.text.neq',
227
+ label: getI18n().t('workflowEditor.process.notEqualTo')
228
+ }, {
229
+ name: 'operator.text.contain',
230
+ label: getI18n().t('workflowEditor.process.contain')
231
+ }, {
232
+ name: 'operator.text.contain.not',
233
+ label: getI18n().t('workflowEditor.process.notIncluded')
234
+ }, {
235
+ name: 'operator.text.is.null',
236
+ label: getI18n().t('workflowEditor.process.isNull')
237
+ }, {
238
+ name: 'operator.text.not.null',
239
+ label: getI18n().t('workflowEditor.process.isNotNull')
240
+ }]
241
+ export function isDate(type) {
242
+ return ['DATE', 'TIME'].indexOf(type) >= 0
243
+ }
244
+ export const operatorsForDate = [{
245
+ name: 'operator.date.gt',
246
+ label: getI18n().t('workflowEditor.process.laterThan')
247
+ }, {
248
+ name: 'operator.date.lt',
249
+ label: getI18n().t('workflowEditor.process.earlierThan')
250
+ }, {
251
+ name: 'operator.date.et',
252
+ label: getI18n().t('workflowEditor.process.beEqualTo')
253
+ }, {
254
+ name: 'operator.date.le',
255
+ label: getI18n().t('workflowEditor.process.noLaterThan')
256
+ }, {
257
+ name: 'operator.date.ge',
258
+ label: getI18n().t('workflowEditor.process.noEarlierThan')
259
+ }, {
260
+ name: 'operator.date.ne',
261
+ label: getI18n().t('workflowEditor.process.notEqualTo')
262
+ }]
263
+
264
+ // TEXT类型一般用于标准字段,和STRING类型区分开,支持的操作符少两个
265
+ export const operatorsForText = [
266
+ {
267
+ name: 'operator.text.eq',
268
+ label: getI18n().t('workflowEditor.process.beEqualTo')
269
+ }, {
270
+ name: 'operator.text.neq',
271
+ label: getI18n().t('workflowEditor.process.notEqualTo')
272
+ }
273
+ ]
274
+
275
+ // 是否是‘审批结果’字段
276
+ export function isApproveResult(fieldName) {
277
+ return fieldName === '${approvalResult}'
278
+ }
279
+
280
+ export const operatorsForApproveResult = [
281
+ {
282
+ name: 'operator.text.eq',
283
+ label: getI18n().t('workflowEditor.process.beEqualTo')
284
+ }
285
+ ]
286
+
287
+ export const allOperators = [
288
+ ...operatorsForNumber,
289
+ ...operatorsForDate,
290
+ ...operatorsForString,
291
+ ...operatorsForText
292
+ ]
293
+ /**
294
+ *
295
+ * @param {存放从value中解析出来的各个条件表达式} conditions
296
+ * @param {xml中存放的condition字符串} value
297
+ */
298
+ export function parseCondition(conditions, value) {
299
+ if (!value || value.length === 0) {
300
+ // 条件为空
301
+ } else {
302
+ // or,and做统一替换,方便后续按照^_^来分隔条件,避免按照or,and进行两次分隔
303
+ let tempValue = value.replace(/ condition.operator.or /g, ' condition.operator.or^_^')
304
+ tempValue = tempValue.replace(/ condition.operator.and /g, ' condition.operator.and^_^')
305
+ const values = tempValue.split('^_^')
306
+ let count = 0
307
+ for (let condition of values) {
308
+ if (condition === '') continue
309
+ // 一个条件是由6个部分组成的(按空格分隔):leftBracket(可选), key,操作符,值,右括号(可选),逻辑操作符(可选)
310
+ let leftBracket = ''
311
+ // let key = '${user}'
312
+ // let operator = 'operator.text.eq'
313
+ let key = ''
314
+ let operator = ''
315
+ let value = ''
316
+ let rightBracket = ''
317
+ let logicOperator = 'condition.operator.or'
318
+
319
+ let p = condition.indexOf('${')
320
+ // 没有左括号时,条件表达式肯定是${开头,p=0
321
+ if (p > 0) {
322
+ leftBracket = condition.substring(0, p)
323
+ }
324
+ // key从${开始到第一个空格之间的所有内容
325
+ key = condition.substring(p, condition.indexOf(' '))
326
+ // condition去掉key部分进行后续处理
327
+ condition = condition.substring(condition.indexOf(' ') + 1)
328
+ // condition去掉key后,开头部分到第一个空格之间的就是操作符了
329
+ operator = condition.substring(0, condition.indexOf(' '))
330
+ // condition进一步去掉操作符
331
+ condition = condition.substring(condition.indexOf(' ') + 1)
332
+ p = condition.indexOf(')')
333
+ if (p > 0) {
334
+ // 有右括号时,开头到第一个右括号之间的内容为值,值很可能包括空格,所以一开始不能用空格来split
335
+ value = condition.substring(0, p)
336
+ rightBracket = condition.substring(p)
337
+ // 找操作符的时候,带了一个空格来定位,后续截取的时候需要去掉这个空格
338
+ p = condition.indexOf(' condition.')
339
+ if (p > 0) {
340
+ logicOperator = condition.substring(p + 1)
341
+ }
342
+ } else {
343
+ p = condition.indexOf(' condition.')
344
+ // 没有右括号也没有逻辑符的时候,剩下的condition就是value,否则还要单独截取逻辑符
345
+ if (p > 0) {
346
+ value = condition.substring(0, p)
347
+ logicOperator = condition.substring(p + 1)
348
+ } else {
349
+ value = condition
350
+ }
351
+ }
352
+
353
+ conditions.push({
354
+ id: count,
355
+ leftBracket,
356
+ key,
357
+ operator,
358
+ value,
359
+ rightBracket,
360
+ logicOperator
361
+ })
362
+ count++
363
+ }
364
+ return count
365
+ }
366
+ }
367
+
368
+ /**
369
+ *
370
+ * @param {存放用户条件表达式} conditions
371
+ */
372
+ export function generateCondition(conditions) {
373
+ let result = ''
374
+ for (const condition of conditions) {
375
+ // 没有设置值的条件表达式直接忽略
376
+ if (condition.key.length === 0 || condition.operator === '' ||
377
+ (condition.value === '' && (condition.operator !== 'operator.text.is.null' && condition.operator !== 'operator.text.not.null'))) {
378
+ continue
379
+ }
380
+ result = result + condition.leftBracket + condition.key + ' ' +
381
+ condition.operator + ' ' + condition.value + condition.rightBracket + ' ' +
382
+ condition.logicOperator + ' '
383
+ }
384
+ const logicOr = ' condition.operator.or '
385
+ const logicAnd = ' condition.operator.and '
386
+ // 去掉结尾的and,or(没有意义)
387
+ if (result.lastIndexOf(logicOr) + logicOr.length === result.length) {
388
+ result = result.substring(0, result.lastIndexOf(logicOr))
389
+ } else if (result.lastIndexOf(logicAnd) + logicAnd.length === result.length) {
390
+ result = result.substring(0, result.lastIndexOf(logicAnd))
391
+ }
392
+ return result
393
+ }
394
+ export function getStandardField(name) {
395
+ const field = standardFields.filter(item => {
396
+ return item.name === name
397
+ })
398
+ if (field.length > 0) {
399
+ return field[0]
400
+ } else {
401
+ return null
402
+ }
403
+ }
404
+ export function getStandardFieldLabel(name) {
405
+ const field = getStandardField(name)
406
+ return field ? field.label : name
407
+ }
408
+
409
+ export function getFieldLabel(name) {
410
+ if (name.indexOf('${field[') >= 0) {
411
+ return getFormFieldLabel(name)
412
+ } else if (name.indexOf('${') >= 0) {
413
+ return getStandardFieldLabel(name)
414
+ } else {
415
+ return name.substring(0, name.indexOf('['))
416
+ }
417
+ }
418
+
419
+ export function getOperatorLabel(name) {
420
+ const operator = allOperators.filter(item => {
421
+ return item.name === name
422
+ })
423
+ if (operator.length > 0) {
424
+ return operator[0].label
425
+ } else {
426
+ return ''
427
+ }
428
+ }
429
+ export function displayCondition(conditions) {
430
+ let result = ''
431
+ for (const condition of conditions) {
432
+ if (condition.key.length === 0 || condition.operator === '' || condition.value === '' ||
433
+ typeof (condition.operator) === 'undefined' || typeof (condition.value) === 'undefined' ||
434
+ condition.operator === null || condition.value === null) continue
435
+ result = result + condition.leftBracket + getFieldLabel(condition.key) + ' ' +
436
+ getOperatorLabel(condition.operator) + ' ' + getFieldLabel(condition.value) + condition.rightBracket + ' ' +
437
+ condition.value + ' ' + logicOperators[condition.logicOperator] + ' '
438
+ }
439
+ const logicOr = ' 或者 '
440
+ const logicAnd = ' 并且 '
441
+ // 去掉结尾的and,or(没有意义)
442
+ if (result.lastIndexOf(logicOr) + logicOr.length === result.length) {
443
+ result = result.substring(0, result.lastIndexOf(logicOr))
444
+ } else if (result.lastIndexOf(logicAnd) + logicAnd.length === result.length) {
445
+ result = result.substring(0, result.lastIndexOf(logicAnd))
446
+ }
447
+ return result
448
+ }
449
+
450
+ export function formatStandardField(value) {
451
+ const field = standardFields.filter(item => {
452
+ return item.name === value
453
+ })
454
+ if (field.length > 0) {
455
+ return field[0].label
456
+ } else {
457
+ return value
458
+ }
459
+ }
460
+
461
+ export function getRelatedStandardFields(name) {
462
+ const field = standardFields.filter(item => {
463
+ return item.name === name
464
+ })
465
+ let fieldNames = []
466
+ if (field.length > 0) {
467
+ fieldNames = (field[0].relatedFields || [])
468
+ }
469
+ const result = []
470
+ standardFields.forEach(item => {
471
+ // item.name为${someName},去掉前两个字符和最后的大括号,只比较名称
472
+ if (fieldNames.indexOf(item.name.substring(2, item.name.length - 1)) >= 0) {
473
+ result.push(item)
474
+ }
475
+ })
476
+
477
+ // standardFields.map(item => {
478
+
479
+ // })
480
+ return result
481
+ }
482
+ // 获得条件流向的标准值列表 或 其它的标准值列表
483
+ export function getStandardFieldsByTacheType(isTranstion) {
484
+ if (isTranstion) {
485
+ return standardFields
486
+ }
487
+ const standardFieldResult = []
488
+ standardFields.forEach(item => {
489
+ if (!isTranstion && item.orgType !== 'other') {
490
+ // 不是流向时,不显示“审批结果”、“会签百分比”等值
491
+ standardFieldResult.push(item)
492
+ }
493
+ })
494
+ return standardFieldResult
495
+ }
496
+ // 获得条件值时,判断是否是流向的其它条件,比如:会签同意百分比、会签同意人数等等
497
+ export function isTransitionOtherField(fieldName) {
498
+ if (fieldName === '${approvalResult}') {
499
+ // ‘审批结果’的条件值是单独写的
500
+ return false
501
+ }
502
+ const field = standardFields.filter(item => {
503
+ return item.name === fieldName
504
+ })
505
+ let isOtherField = false
506
+ if (field.length > 0) {
507
+ field.forEach(item => {
508
+ if (fieldName === item.name && item.orgType === 'other') {
509
+ isOtherField = true
510
+ }
511
+ })
512
+ }
513
+ return isOtherField
514
+ }
515
+ export function getOperators(fieldName) {
516
+ const field = getFormField(fieldName) || getStandardField(fieldName)
517
+ // console.log('---getOperators---field=', field)
518
+ if (field) {
519
+ if (isNumber(field.dataType)) {
520
+ return operatorsForNumber
521
+ } else if (isDate(field.dataType)) {
522
+ return operatorsForDate
523
+ } else if (isString(field.dataType)) {
524
+ return operatorsForString
525
+ } else if (isApproveResult(fieldName)) {
526
+ return operatorsForApproveResult
527
+ } else {
528
+ return operatorsForText
529
+ }
530
+ }
531
+ }