workflow-editor 0.9.69-dw → 0.9.69-pv

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 (115) 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 +67 -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-reminder.vue +72 -0
  45. package/packages/workflow-editor/src/properties-editors/common/notice.vue +101 -0
  46. package/packages/workflow-editor/src/properties-editors/common/reminder.vue +185 -0
  47. package/packages/workflow-editor/src/properties-editors/common/select-mail-template.vue +83 -0
  48. package/packages/workflow-editor/src/properties-editors/common/standard-fields.vue +65 -0
  49. package/packages/workflow-editor/src/properties-editors/common/system-role-tree-inline.vue +355 -0
  50. package/packages/workflow-editor/src/properties-editors/common/system-role-tree.vue +63 -0
  51. package/packages/workflow-editor/src/properties-editors/common/task-title.vue +148 -0
  52. package/packages/workflow-editor/src/properties-editors/common/transactor-settings.vue +233 -0
  53. package/packages/workflow-editor/src/properties-editors/common/user-selection.vue +386 -0
  54. package/packages/workflow-editor/src/properties-editors/common/value-selection-dialog.vue +209 -0
  55. package/packages/workflow-editor/src/properties-editors/common/variables.vue +135 -0
  56. package/packages/workflow-editor/src/properties-editors/copy-task/basic-properties.vue +90 -0
  57. package/packages/workflow-editor/src/properties-editors/copy-task/permission-settings.vue +155 -0
  58. package/packages/workflow-editor/src/properties-editors/copy-task.vue +80 -0
  59. package/packages/workflow-editor/src/properties-editors/decision.vue +90 -0
  60. package/packages/workflow-editor/src/properties-editors/fork.vue +72 -0
  61. package/packages/workflow-editor/src/properties-editors/human-decision.vue +44 -0
  62. package/packages/workflow-editor/src/properties-editors/human-task/additional-condition-dialog.vue +60 -0
  63. package/packages/workflow-editor/src/properties-editors/human-task/basic-properties.vue +156 -0
  64. package/packages/workflow-editor/src/properties-editors/human-task/componentsConfigUtil.js +291 -0
  65. package/packages/workflow-editor/src/properties-editors/human-task/custom-actions.vue +249 -0
  66. package/packages/workflow-editor/src/properties-editors/human-task/editable-child-field-setting.vue +392 -0
  67. package/packages/workflow-editor/src/properties-editors/human-task/editable-child-fields.vue +241 -0
  68. package/packages/workflow-editor/src/properties-editors/human-task/editable-field-selection.vue +220 -0
  69. package/packages/workflow-editor/src/properties-editors/human-task/editable-fields.vue +204 -0
  70. package/packages/workflow-editor/src/properties-editors/human-task/events.vue +59 -0
  71. package/packages/workflow-editor/src/properties-editors/human-task/permission-settings.vue +207 -0
  72. package/packages/workflow-editor/src/properties-editors/human-task/selection-conditions.vue +390 -0
  73. package/packages/workflow-editor/src/properties-editors/human-task.vue +109 -0
  74. package/packages/workflow-editor/src/properties-editors/join.vue +44 -0
  75. package/packages/workflow-editor/src/properties-editors/process/basic-properties.vue +326 -0
  76. package/packages/workflow-editor/src/properties-editors/process/events.vue +76 -0
  77. package/packages/workflow-editor/src/properties-editors/process/notice-settings.vue +60 -0
  78. package/packages/workflow-editor/src/properties-editors/process/parameter-settings.vue +95 -0
  79. package/packages/workflow-editor/src/properties-editors/process/permission-settings.vue +28 -0
  80. package/packages/workflow-editor/src/properties-editors/process/selectPage.vue +88 -0
  81. package/packages/workflow-editor/src/properties-editors/process.vue +115 -0
  82. package/packages/workflow-editor/src/properties-editors/subprocess/basic-properties.vue +187 -0
  83. package/packages/workflow-editor/src/properties-editors/subprocess/events.vue +26 -0
  84. package/packages/workflow-editor/src/properties-editors/subprocess/field-mappings.vue +206 -0
  85. package/packages/workflow-editor/src/properties-editors/subprocess/transactor-settings.vue +64 -0
  86. package/packages/workflow-editor/src/properties-editors/subprocess.vue +79 -0
  87. package/packages/workflow-editor/src/properties-editors/transition/basic-properties.vue +53 -0
  88. package/packages/workflow-editor/src/properties-editors/transition.vue +74 -0
  89. package/packages/workflow-editor/src/properties-editors/user-condition.js +177 -0
  90. package/packages/workflow-editor/src/store/getters.js +28 -0
  91. package/packages/workflow-editor/src/store/workflow-editor.js +128 -0
  92. package/packages/workflow-editor/src/taches/common-methods.js +21 -0
  93. package/packages/workflow-editor/src/taches/copy-task.vue +99 -0
  94. package/packages/workflow-editor/src/taches/custom-task.vue +88 -0
  95. package/packages/workflow-editor/src/taches/decision.vue +102 -0
  96. package/packages/workflow-editor/src/taches/end.vue +76 -0
  97. package/packages/workflow-editor/src/taches/fork.vue +102 -0
  98. package/packages/workflow-editor/src/taches/human-decision.vue +102 -0
  99. package/packages/workflow-editor/src/taches/human-task.vue +113 -0
  100. package/packages/workflow-editor/src/taches/join.vue +91 -0
  101. package/packages/workflow-editor/src/taches/joint.vue +177 -0
  102. package/packages/workflow-editor/src/taches/start.vue +76 -0
  103. package/packages/workflow-editor/src/taches/subprocess.vue +99 -0
  104. package/packages/workflow-editor/src/taches/tache-resizer.vue +80 -0
  105. package/packages/workflow-editor/src/transitions/broken-line.vue +91 -0
  106. package/packages/workflow-editor/src/transitions/curve-line.vue +91 -0
  107. package/packages/workflow-editor/src/transitions/straight-line.vue +26 -0
  108. package/packages/workflow-editor/src/transitions/transition.vue +212 -0
  109. package/packages/workflow-editor/src/transitions/virtual-transition.vue +43 -0
  110. package/packages/workflow-editor/src/util.js +493 -0
  111. package/packages/workflow-editor/src/workflow-editor.vue +626 -0
  112. package/packages/workflow-editor/src/workflow-history.vue +153 -0
  113. package/src/i18n/i18n.js +1 -1
  114. package/src/i18n/langs/cn.js +16 -6
  115. package/src/i18n/langs/en.js +16 -6
@@ -0,0 +1,233 @@
1
+ <template>
2
+ <el-form :model="formModel">
3
+ <el-form-item label="">
4
+ <el-radio-group v-model="formModel.transactor">
5
+ <el-radio label="${instanceCreator}">
6
+ {{ $t('workflowEditor.process.processInitiator') }}
7
+ </el-radio>
8
+ <el-radio v-if="usedIn==='HumanTask'" label="${previousTransactorAssignment}">
9
+ {{ $t('workflowEditor.process.appointmentOfHandlerInThePreviousLink') }}
10
+ </el-radio>
11
+ <el-radio label="byField">
12
+ {{ $t('workflowEditor.process.personSpecifiedInFormField') }}
13
+ </el-radio>
14
+ <el-radio label="byCondition">
15
+ {{ $t('workflowEditor.process.filterByCriteria') }}
16
+ </el-radio>
17
+ </el-radio-group>
18
+ <div v-if="formModel.transactor==='byCondition'">
19
+ <common-user-condition v-model="formModel.userCondition" used-in="transactor" />
20
+ </div>
21
+ <el-form-item
22
+ v-if="formModel.transactor==='byField'"
23
+ prop="selectedField"
24
+ required
25
+ :label="$t('workflowEditor.process.fieldName')"
26
+ label-width="80px"
27
+ >
28
+ <el-input :value="formatLabel(formModel.selectedField)" @focus="showFormFields=true" />
29
+ <form-fields v-if="showFormFields" @close="setField" />
30
+ </el-form-item>
31
+ <div v-if="formModel.transactor==='byCondition' || formModel.transactor==='byField'">
32
+ <el-form-item :label="$t('workflowEditor.process.additionalConditions')">
33
+ <el-checkbox v-model="formModel.additionalCondition.onlyInCreatorDepartment">
34
+ {{ $t('workflowEditor.process.handlingYyThePersonnelOfTheDepartmentOfTheInitiator') }}
35
+ </el-checkbox>
36
+ <el-checkbox v-model="formModel.additionalCondition.withCreatorDepartment">
37
+ {{ $t('workflowEditor.process.personnelOfTheDepartmentWhereTheInitiatorWorksParticipateInTheHandling') }}
38
+ </el-checkbox>
39
+ <el-checkbox v-model="formModel.additionalCondition.selectOneFromMultiple">
40
+ {{ $t('workflowEditor.process.selectSpecificHandler') }}
41
+ </el-checkbox>
42
+ <el-checkbox v-model="formModel.additionalCondition.selectOneFromDept">
43
+ {{ $t('workflowEditor.process.selectOneFromDept') }}
44
+ </el-checkbox>
45
+ <el-checkbox v-if="isSubprocess" v-model="formModel.additionalCondition.generateOneInstanceFromDept">
46
+ {{ $t('workflowEditor.process.generateOneInstanceFromDept') }}
47
+ </el-checkbox>
48
+ </el-form-item>
49
+ <div v-if="formModel.additionalCondition.selectOneFromMultiple">
50
+ <el-form-item :label="$t('workflowEditor.process.selectionMethod')">
51
+ <el-radio-group v-model="formModel.additionalCondition.selectType">
52
+ <el-radio label="customType">
53
+ {{ $t('workflowEditor.process.manualSelection') }}
54
+ </el-radio>
55
+ <el-radio label="autoType">
56
+ {{ $t('workflowEditor.process.autoSelect') }}
57
+ </el-radio>
58
+ </el-radio-group>
59
+ </el-form-item>
60
+ <el-form-item
61
+ v-show="formModel.additionalCondition.selectType==='autoType'"
62
+ prop="additionalCondition.selectUrl"
63
+ :label="$t('workflowEditor.process.callbackURL')"
64
+ :rules="[{ required: true, message: this.$t('workflowEditor.process.cannotBeEmpty'), trigger: 'blur' }]"
65
+ >
66
+ <el-input v-model="formModel.additionalCondition.selectUrl" />
67
+ </el-form-item>
68
+ </div>
69
+ </div>
70
+ </el-form-item>
71
+ <el-form-item
72
+ v-if="usedIn==='HumanTask' && formModel.transactor==='${previousTransactorAssignment}'"
73
+ prop="url"
74
+ :rules="[{ required: true, message: this.$t('workflowEditor.process.cannotBeEmpty'), trigger: 'blur' }]"
75
+ :label="$t('workflowEditor.process.selectURL')"
76
+ label-width="80px"
77
+ >
78
+ <el-input v-model.trim="formModel.url" @change="handleUrlChange" />
79
+ </el-form-item>
80
+ </el-form>
81
+ </template>
82
+ <script>
83
+ import CommonUserCondition from '../common/common-user-condition'
84
+ import FormFields from '../common/form-fields'
85
+ import { getFormFieldLabel } from '../common/form-fields-utils.js'
86
+ export default {
87
+ name: 'TransactorSettings',
88
+ components: {
89
+ CommonUserCondition,
90
+ FormFields
91
+ },
92
+ props: {
93
+ model: {
94
+ type: Object,
95
+ default: null
96
+ },
97
+ usedIn: {
98
+ type: String,
99
+ default: 'HumanTask'// 取值为HumanTask,CopyTask
100
+ },
101
+ // 是否是子流程
102
+ isSubprocess: {
103
+ type: Boolean,
104
+ default: false
105
+ }
106
+ },
107
+ data() {
108
+ /**
109
+ * 这个页签上有很多的动态效果,为了保持这些效果切换时,值不丢失,不能直接使用传进来的model对象,
110
+ * 而是要复制一份数据保存到formModel中,这样动态改变model时,formModel中的数据还存在,
111
+ * 用户在不同选项间切换时,数据得以保留,这样用户体验能好点。但是细节的处理确实比较繁琐,需要注意。
112
+ */
113
+ const formModel = { selectedField: '' }
114
+ // 不直接使用model.userCondition是为了在流程发起人等四个方式间切换时,设置的筛选条件不丢失
115
+ this.initFormModel(formModel)
116
+ return {
117
+ showFormFields: false,
118
+ formModel
119
+ }
120
+ },
121
+ mounted() {
122
+ // formModel.additionalCondition和userCondition的变化需要回写到xml中
123
+ this.$watch('formModel', function() {
124
+ this.setTransactor(this.formModel.transactor)
125
+ const additionalCondition = { ...this.formModel.additionalCondition }
126
+ if (additionalCondition.selectOneFromMultiple) {
127
+ if (additionalCondition.selectType === 'customType') {
128
+ delete additionalCondition['selectUrl']
129
+ }
130
+ } else {
131
+ delete additionalCondition['selectType']
132
+ delete additionalCondition['selectUrl']
133
+ }
134
+ this.model.additionalCondition = additionalCondition
135
+ }, {
136
+ deep: true
137
+ })
138
+ },
139
+ methods: {
140
+ formatLabel(name) {
141
+ return getFormFieldLabel(name)
142
+ },
143
+ initFormModel(formModel) {
144
+ formModel.userCondition = ''
145
+ const userCondition = this.model.userCondition
146
+ if (typeof (userCondition) === 'undefined' || userCondition === '' || userCondition === null) {
147
+ // 表示是初始化时
148
+ formModel.transactor = '${instanceCreator}'
149
+ this.model.userCondition = '${instanceCreator}'
150
+ } else {
151
+ if (userCondition === '${instanceCreator}' || userCondition === '${previousTransactorAssignment}') {
152
+ formModel.transactor = userCondition
153
+ } else if (userCondition.indexOf('${field[') >= 0) {
154
+ formModel.transactor = 'byField'
155
+ formModel.selectedField = userCondition
156
+ } else {
157
+ formModel.transactor = 'byCondition'
158
+ formModel.userCondition = userCondition
159
+ }
160
+ }
161
+ this.initAdditionalCondition(formModel)
162
+ if (this.model.url !== undefined) {
163
+ formModel.url = this.model.url
164
+ } else {
165
+ formModel.url = ''
166
+ }
167
+ // this.changeA(formModel.transactor)
168
+ },
169
+ initAdditionalCondition(formModel) {
170
+ // 由于xml中的additionalCondition可能没有,这时就需要自己构造一个additionalCondition
171
+ if (this.model.additionalCondition === undefined) {
172
+ formModel.additionalCondition = {
173
+ onlyInCreatorDepartment: false,
174
+ withCreatorDepartment: false,
175
+ selectOneFromMultiple: false,
176
+ selectType: 'customType', // customType表示由办理用户选择,autoType表示由程序bean自动选择
177
+ selectUrl: ''// 类型为autoType时,输入的URL
178
+ }
179
+ } else {
180
+ // 直接复制已有的值,不要指向同一个对象
181
+ formModel.additionalCondition = { ...this.model.additionalCondition }
182
+ // 如果xml中没有selectType,需要给selectType合适的默认值
183
+ if (formModel.additionalCondition.selectType === undefined) {
184
+ formModel.additionalCondition.selectType = 'customType'
185
+ }
186
+ }
187
+ },
188
+ changeA(transactor) {
189
+ this.setTransactor(transactor)
190
+ },
191
+ // 把url的值赋值给xml
192
+ handleUrlChange(val) {
193
+ this.model.url = val
194
+ },
195
+ setTransactor(val) {
196
+ if (val === '${instanceCreator}' || val === '${previousTransactorAssignment}') {
197
+ this.model.userCondition = val
198
+ }
199
+
200
+ if (val === 'byField') {
201
+ this.model.userCondition = this.formModel.selectedField
202
+ }
203
+ if (val === 'byCondition') {
204
+ this.model.userCondition = this.formModel.userCondition
205
+ }
206
+ // 不是上一环节办理人指定时,需要清空xml中的url
207
+ if (val === '${previousTransactorAssignment}') {
208
+ this.model.url = this.formModel.url
209
+ } else {
210
+ this.model.url = ''
211
+ }
212
+
213
+ // 不是按条件筛选的时候,需要清空xml中additionalCondition
214
+ if (val === 'byCondition') {
215
+ // 把值复制到xml中,不要直接指向同一个对象,否则回调url这些值就不能正确同步了
216
+ this.model.additionalCondition = { ...this.formModel.additionalCondition }
217
+ } else {
218
+ this.model.additionalCondition = undefined
219
+ }
220
+ },
221
+ handleFieldSelection(val) {
222
+
223
+ },
224
+ setField(name) {
225
+ if (name !== undefined) {
226
+ this.formModel.selectedField = '${field[' + name + ']}'
227
+ this.model.userCondition = this.formModel.selectedField
228
+ }
229
+ this.showFormFields = false
230
+ }
231
+ }
232
+ }
233
+ </script>
@@ -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
+